From 26870301b616b02f34df1e172b876a332d749021 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 3 Jul 2025 18:46:57 +0200 Subject: [PATCH 001/165] Initial work --- .../subservices/collection/actions/get.js | 2 + src/middleware/packages/core/service.js | 4 +- .../vc-authorizer-service.js | 49 +++ .../verifiable-credentials/vc-service.js | 2 + src/middleware/packages/ldp/index.js | 1 + src/middleware/packages/ldp/service.js | 3 + .../ldp/services/container/actions/get.js | 5 +- .../ldp/services/container/actions/post.js | 2 + .../permissions/actions/addAuthorizer.js | 15 + .../ldp/services/permissions/actions/check.js | 19 ++ .../ldp/services/permissions/actions/has.js | 28 ++ .../ldp/services/permissions/index.js | 15 + .../ldp/services/resource/actions/delete.js | 2 + .../ldp/services/resource/actions/get.js | 2 + .../ldp/services/resource/actions/patch.js | 7 + .../ldp/services/resource/actions/put.js | 7 + src/middleware/packages/solid/index.js | 3 +- .../packages/solid/services/authorizer.js | 19 ++ .../packages/webacl/middlewares/webacl.js | 86 +---- src/middleware/packages/webacl/service.js | 25 +- .../webacl/services/authorizer/index.js | 29 ++ src/middleware/tests/webacl/initialize.js | 38 ++- src/middleware/tests/webacl/resource.test.js | 318 ++++++++++++++++++ 23 files changed, 567 insertions(+), 114 deletions(-) create mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js create mode 100644 src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js create mode 100644 src/middleware/packages/ldp/services/permissions/actions/check.js create mode 100644 src/middleware/packages/ldp/services/permissions/actions/has.js create mode 100644 src/middleware/packages/ldp/services/permissions/index.js create mode 100644 src/middleware/packages/solid/services/authorizer.js create mode 100644 src/middleware/packages/webacl/services/authorizer/index.js create mode 100644 src/middleware/tests/webacl/resource.test.js diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js index 7381b2e66..00c6eb1a9 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js @@ -290,6 +290,8 @@ module.exports = { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const localContext = await ctx.call('jsonld.context.get'); + await ctx.call('permissions.check', { uri: collectionUri, type: 'resource', mode: 'acl:Read', webId }); + // Get dataset here since we can't call the method from internal functions const dataset = this.getCollectionDataset(collectionUri); diff --git a/src/middleware/packages/core/service.js b/src/middleware/packages/core/service.js index 2ebd73915..818f28858 100644 --- a/src/middleware/packages/core/service.js +++ b/src/middleware/packages/core/service.js @@ -128,7 +128,7 @@ const CoreService = { if (this.settings.ldp !== false) { this.broker.createService({ - mixins: [DocumentTaggerMixin, LdpService], + mixins: this.settings.ldp.documentTagger !== false ? [DocumentTaggerMixin, LdpService] : [LdpService], settings: { baseUrl, containers: containers || (this.settings.mirror !== false ? [botsContainer] : []), @@ -179,7 +179,7 @@ const CoreService = { if (this.settings.triplestore !== false) { // If WebACL service is disabled, don't create a secure dataset // We define a constant here, because this.settings.webacl is not available inside the started method - const secure = this.settings.webacl !== false; + const secure = this.settings.triplestore?.secure !== false && this.settings.webacl !== false; this.broker.createService({ mixins: [TripleStoreService], diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js new file mode 100644 index 000000000..7638701be --- /dev/null +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js @@ -0,0 +1,49 @@ +const { arrayOf } = require('@semapps/ldp'); + +// Check, if a capability grants access to the resource. +const hasValidCapability = async (ctx, resourceUri, mode) => { + const { capabilityPresentation } = ctx.meta.authorization; + const vcs = arrayOf(capabilityPresentation.verifiableCredential); + + // Check if every VC contains a valid `hasAuthorization` property. + const allHaveAuth = vcs.every(vc => { + const auth = vc.credentialSubject?.['apods:hasAuthorization']; + return ( + arrayOf(auth.type).includes('acl:Authorization') && + arrayOf(auth['acl:mode']).includes(mode) && + arrayOf(auth['acl:accessTo'].id ?? auth['acl:accessTo']).includes(resourceUri) + ); + }); + if (!allHaveAuth) return false; + + // Check if issuer of first VC actually has control over it. + const hasRights = await ctx.call('webacl.resource.hasRights', { + resourceUri, + webId: vcs[0].issuer, + rights: { control: true } + }); + if (!hasRights?.control) return false; + + return true; +}; + +module.exports = { + name: 'vc.guard', + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); + }, + actions: { + async hasPermission(ctx) { + const { uri, mode } = ctx.params; + + if (ctx.meta.authorization?.capabilityPresentation) { + if (await hasValidCapability(ctx, uri, mode)) { + return true; + } + } + + return undefined; + } + } +}; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-service.js index c3eaa2014..3cc2716d1 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-service.js @@ -1,4 +1,5 @@ const { did, cred } = require('@semapps/ontologies'); +const VCAuthorizerService = require('./vc-authorizer-service'); const VCHolderService = require('./vc-holder-service'); const VCIssuerService = require('./vc-issuer-service'); const VCVerifierService = require('./vc-verifier-service'); @@ -35,6 +36,7 @@ const VCService = { created() { const { enableApi, podProvider } = this.settings; this.broker.createService({ mixins: [VCIssuerService] }); + this.broker.createService({ mixins: [VCAuthorizerService] }); this.broker.createService({ mixins: [VCHolderService] }); this.broker.createService({ mixins: [VCVerifierService] }); this.broker.createService({ mixins: [DataIntegrityService] }); diff --git a/src/middleware/packages/ldp/index.js b/src/middleware/packages/ldp/index.js index dc0c351b6..86bfe137c 100644 --- a/src/middleware/packages/ldp/index.js +++ b/src/middleware/packages/ldp/index.js @@ -8,6 +8,7 @@ module.exports = { LdpLinkHeaderService: require('./services/link-header'), LdpRegistryService: require('./services/registry'), LdpResourceService: require('./services/resource'), + PermissionsService: require('./services/permissions'), // Mixins ControlledContainerMixin: require('./mixins/controlled-container'), DereferenceMixin: require('./mixins/dereference'), diff --git a/src/middleware/packages/ldp/service.js b/src/middleware/packages/ldp/service.js index b960c26d5..2d3414170 100644 --- a/src/middleware/packages/ldp/service.js +++ b/src/middleware/packages/ldp/service.js @@ -6,6 +6,7 @@ const LdpLinkHeaderService = require('./services/link-header'); const LdpRegistryService = require('./services/registry'); const LdpRemoteService = require('./services/remote'); const LdpResourceService = require('./services/resource'); +const PermissionsService = require('./services/permissions'); module.exports = { name: 'ldp', @@ -84,6 +85,8 @@ module.exports = { } }); + this.broker.createService({ mixins: [PermissionsService] }); + this.broker.createService({ mixins: [LdpLinkHeaderService] }); // Only create this service if a cacher is defined diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.js index ee5542ae5..60bccd5bf 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.js +++ b/src/middleware/packages/ldp/services/container/actions/get.js @@ -17,8 +17,9 @@ module.exports = { }, async handler(ctx) { const { containerUri, filters, doNotIncludeResources, jsonContext } = ctx.params; - let { webId } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Read', webId }); const { accept } = { ...(await ctx.call('ldp.registry.getByUri', { containerUri })), diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.js index 7c661c13f..2f49161e2 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.js @@ -38,6 +38,8 @@ module.exports = { let isContainer = false; let expandedResource; + await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Append', webId }); + // Remove undefined values as this may cause problems resource = resource && cleanUndefined(resource); diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js new file mode 100644 index 000000000..62a7563dd --- /dev/null +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js @@ -0,0 +1,15 @@ +module.exports = { + visibility: 'public', + params: { + actionName: { type: 'string' }, + priority: { type: 'number', default: 5 } + }, + async handler(ctx) { + const { actionName, priority } = ctx.params; + + this.authorizers.push({ actionName, priority }); + + // Re-order all authorizers by priority + this.authorizers.sort((a, b) => b.priority - a.priority); + } +}; diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.js b/src/middleware/packages/ldp/services/permissions/actions/check.js new file mode 100644 index 000000000..eca285007 --- /dev/null +++ b/src/middleware/packages/ldp/services/permissions/actions/check.js @@ -0,0 +1,19 @@ +const { MoleculerError } = require('moleculer').Errors; + +/** + * Calls "has" action and throws error if no authorization was granted + */ +module.exports = { + visibility: 'public', + params: { + uri: { type: 'string' }, + type: { type: 'enum', values: ['resource', 'container', 'custom'], default: 'resource' }, + mode: { type: 'enum', values: ['acl:Read', 'acl:Write', 'acl:Append', 'acl:Control'], default: 'acl:Read' }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + if (!(await this.actions.has(ctx.params, { parentCtx: ctx }))) { + throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED'); + } + } +}; diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.js b/src/middleware/packages/ldp/services/permissions/actions/has.js new file mode 100644 index 000000000..57cf16ea2 --- /dev/null +++ b/src/middleware/packages/ldp/services/permissions/actions/has.js @@ -0,0 +1,28 @@ +module.exports = { + visibility: 'public', + params: { + uri: { type: 'string' }, + type: { type: 'enum', values: ['resource', 'container', 'custom'], default: 'resource' }, + mode: { type: 'enum', values: ['acl:Read', 'acl:Write', 'acl:Append', 'acl:Control'], default: 'acl:Read' }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + const { uri, type, mode } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + // If no authorizers have been registered, assume user can access everything + if (this.authorizers.length === 0) return true; + + if (webId === 'system') return true; + + for (const authorizer of this.authorizers) { + const result = await ctx.call(authorizer.actionName, { uri, type, mode, webId }); + + // As soon as a guard returns true, stop here. + if (result === true) return true; + } + + // If no guards returned a positive + return false; + } +}; diff --git a/src/middleware/packages/ldp/services/permissions/index.js b/src/middleware/packages/ldp/services/permissions/index.js new file mode 100644 index 000000000..d2b1ca248 --- /dev/null +++ b/src/middleware/packages/ldp/services/permissions/index.js @@ -0,0 +1,15 @@ +const addAuthorizerAction = require('./actions/addAuthorizer'); +const checkAction = require('./actions/check'); +const hasAction = require('./actions/has'); + +module.exports = { + name: 'permissions', + actions: { + addAuthorizer: addAuthorizerAction, + check: checkAction, + has: hasAction + }, + async started() { + this.authorizers = []; + } +}; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.js index f37bee733..b500353f4 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.js +++ b/src/middleware/packages/ldp/services/resource/actions/delete.js @@ -15,6 +15,8 @@ module.exports = { return await ctx.call('ldp.remote.delete', { resourceUri, webId }); } + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); + // Save the current data, to be able to send it through the event // If the resource does not exist, it will throw a 404 error const oldData = await ctx.call( diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.js index 07e473e4c..20ef353b3 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.js @@ -31,6 +31,8 @@ module.exports = { return await ctx.call('ldp.remote.get', ctx.params); } + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Read', webId }); + const { accept } = { ...(await ctx.call('ldp.registry.getByUri', { resourceUri })), ...ctx.params diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.js b/src/middleware/packages/ldp/services/resource/actions/patch.js index f7c453cd3..848b53b4c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.js +++ b/src/middleware/packages/ldp/services/resource/actions/patch.js @@ -52,6 +52,13 @@ module.exports = { if (!triplesToAdd && !triplesToRemove) throw new MoleculerError('No triples to add or to remove', 400, 'BAD_REQUEST'); + if (triplesToRemove) { + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); + } else { + // If we only add new triples, we don't need the acl:Write permission + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Append', webId }); + } + // Build the SPARQL update const sparqlUpdate = { type: 'update', diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.js index 62d1d8acc..8ee4fd099 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.js +++ b/src/middleware/packages/ldp/services/resource/actions/put.js @@ -88,6 +88,13 @@ module.exports = { // If the exact same data have been posted, skip newData = oldData; } else { + if (triplesToRemove.length > 0) { + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); + } else { + // If we only add new triples, we don't need the acl:Write permission + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Append', webId }); + } + // Keep track of blank nodes to use in WHERE clause const newBlankNodes = this.getTriplesDifference(newTriples, oldTriples).filter( triple => triple.object.termType === 'Variable' diff --git a/src/middleware/packages/solid/index.js b/src/middleware/packages/solid/index.js index 71b9c2915..f8ee053b0 100644 --- a/src/middleware/packages/solid/index.js +++ b/src/middleware/packages/solid/index.js @@ -1,8 +1,9 @@ module.exports = { - StorageService: require('./services/storage'), + AuthorizerService: require('./services/authorizer'), EndpointService: require('./services/endpoint'), NotificationsProviderService: require('./services/notifications/provider'), NotificationsListenerService: require('./services/notifications/listener'), PreferencesFileService: require('./services/preferences-file'), + StorageService: require('./services/storage'), TypeIndexesService: require('./services/type-index/type-indexes') }; diff --git a/src/middleware/packages/solid/services/authorizer.js b/src/middleware/packages/solid/services/authorizer.js new file mode 100644 index 000000000..00b0d58c7 --- /dev/null +++ b/src/middleware/packages/solid/services/authorizer.js @@ -0,0 +1,19 @@ +module.exports = { + name: 'solid-authorizer', + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission`, priority: 1 }); + }, + actions: { + async hasPermission(ctx) { + const { uri, webId } = ctx.params; + + // The owner has access to all resources on their Pod + if (uri.startsWith(`${webId}/`)) { + return true; + } + + return undefined; + } + } +}; diff --git a/src/middleware/packages/webacl/middlewares/webacl.js b/src/middleware/packages/webacl/middlewares/webacl.js index 465fbb56e..046dc213e 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.js +++ b/src/middleware/packages/webacl/middlewares/webacl.js @@ -1,6 +1,5 @@ const urlJoin = require('url-join'); -const { throw403 } = require('@semapps/middlewares'); -const { arrayOf, defaultContainerOptions } = require('@semapps/ldp'); +const { defaultContainerOptions } = require('@semapps/ldp'); const { getSlugFromUri } = require('../utils'); const modifyActions = [ @@ -75,35 +74,6 @@ const addRightsToNewUser = async (ctx, userUri) => { ); }; -/** - * Check, if a capability grants access to the resource. - */ -const hasValidCapability = async (ctx, resourceUri, mode) => { - const { capabilityPresentation } = ctx.meta.authorization; - const vcs = arrayOf(capabilityPresentation.verifiableCredential); - - // Check if every VC contains a valid `hasAuthorization` property. - const allHaveAuth = vcs.every(vc => { - const auth = vc.credentialSubject?.['apods:hasAuthorization']; - return ( - arrayOf(auth.type).includes('acl:Authorization') && - arrayOf(auth['acl:mode']).includes(mode) && - arrayOf(auth['acl:accessTo'].id ?? auth['acl:accessTo']).includes(resourceUri) - ); - }); - if (!allHaveAuth) return false; - - // Check if issuer of first VC actually has control over it. - const hasRights = await ctx.call('webacl.resource.hasRights', { - resourceUri, - webId: vcs[0].issuer, - rights: { control: true } - }); - if (!hasRights?.control) return false; - - return true; -}; - /** * Middleware that ensures that requests are conforming ACL records. * @type {import('moleculer').Middleware} @@ -114,59 +84,7 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se if (!baseUrl) throw new Error('The baseUrl config is missing for the WebACL middleware'); }, localAction: (next, action) => { - if (action.name === 'ldp.resource.get') { - /* - * VERIFY AUTHORIZATIONS - * This allows us to quickly check the permissions for GET operations using the Redis cache - * This way, we don't need to add the webId in the Redis cache key and it is more efficient - */ - return async ctx => { - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const bypass = () => { - ctx.params.aclVerified = true; - return next(ctx); - }; - - if (webId === 'system') { - return bypass(); - } - - const resourceUri = ctx.params.resourceUri || ctx.params.resource.id || ctx.params.resource['@id']; - - if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { - // Bypass if mirrored resource as WebACL are not activated in mirror graph - if ((await ctx.call('ldp.remote.getGraph', { resourceUri })) === 'http://semapps.org/mirror') { - return bypass(); - } - return next(ctx); - } - - // If the logged user is fetching is own POD, bypass ACL check - // End with a trailing slash, otherwise "bob" will have access to the pod of "bobby" ! - if (podProvider && resourceUri.startsWith(`${webId}/`)) { - return bypass(); - } - - const result = await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, // Check only the read permissions to improve performances - webId - }); - - if (result.read) { - return bypass(); - } - - // Check, if there is a valid capability. - if (ctx.meta.authorization?.capabilityPresentation) { - if (await hasValidCapability(ctx, resourceUri, 'acl:Read')) { - return bypass(); - } - } - - throw403(); - }; - } else if (modifyActions.includes(action.name)) { + if (modifyActions.includes(action.name)) { return async ctx => { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let actionReturnValue; diff --git a/src/middleware/packages/webacl/service.js b/src/middleware/packages/webacl/service.js index 47c42a749..09856a3c6 100644 --- a/src/middleware/packages/webacl/service.js +++ b/src/middleware/packages/webacl/service.js @@ -1,7 +1,8 @@ const { acl, vcard, rdfs } = require('@semapps/ontologies'); const WebAclResourceService = require('./services/resource'); -const WebAclGroupService = require('./services/group'); const WebAclCacheService = require('./services/cache'); +const WebAclGroupService = require('./services/group'); +const WebAclAuthorizerService = require('./services/authorizer'); const getRoutes = require('./routes/getRoutes'); module.exports = { @@ -35,32 +36,14 @@ module.exports = { } }); + this.broker.createService({ mixins: [WebAclAuthorizerService] }); + // Only create this service if a cacher is defined if (this.broker.cacher) { this.broker.createService({ mixins: [WebAclCacheService] }); } }, async started() { - if (!this.settings.podProvider) { - // Testing if there is a secure graph. you should not start the webAcl service if you created an unsecure main dataset. - await this.broker.waitForServices(['triplestore']); - - let hasWebAcl = false; - try { - await this.broker.call('triplestore.query', { - query: `ASK WHERE { GRAPH <${this.settings.graphName}> { ?s ?p ?o } }`, - webId: 'anon' - }); - } catch (e) { - if (e.code === 403) hasWebAcl = true; - } - if (!hasWebAcl) { - throw new Error( - 'Error when starting the webAcl service: the main dataset is not secure. You must use the triplestore.dataset.create action with the `secure: true` param' - ); - } - } - const { pathname: basePath } = new URL(this.settings.baseUrl); for (const route of getRoutes(basePath, this.settings.podProvider)) { diff --git a/src/middleware/packages/webacl/services/authorizer/index.js b/src/middleware/packages/webacl/services/authorizer/index.js new file mode 100644 index 000000000..e581c11fb --- /dev/null +++ b/src/middleware/packages/webacl/services/authorizer/index.js @@ -0,0 +1,29 @@ +module.exports = { + name: 'webacl.authorizer', + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); + }, + actions: { + async hasPermission(ctx) { + const { uri, type, mode, webId } = ctx.params; + + if (type === 'resource' || type === 'container') { + // Convert acl:Read to read + const shortMode = mode.replace('acl:', '').toLowerCase(); + + const rights = await ctx.call('webacl.resource.hasRights', { + resourceUri: uri, + webId, + rights: { + [shortMode]: true + } + }); + + return rights[shortMode]; + } + + return undefined; + } + } +}; diff --git a/src/middleware/tests/webacl/initialize.js b/src/middleware/tests/webacl/initialize.js index 9755d869b..b6c135500 100644 --- a/src/middleware/tests/webacl/initialize.js +++ b/src/middleware/tests/webacl/initialize.js @@ -1,12 +1,15 @@ const path = require('path'); const { ServiceBroker } = require('moleculer'); const { CoreService } = require('@semapps/core'); -const { pair } = require('@semapps/ontologies'); +const { as } = require('@semapps/ontologies'); const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); const { AuthLocalService } = require('@semapps/auth'); +const { clearDataset } = require('../utils'); const CONFIG = require('../config'); const initialize = async () => { + await clearDataset(CONFIG.MAIN_DATASET); + const broker = new ServiceBroker({ middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], logger: { @@ -26,11 +29,38 @@ const initialize = async () => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + mainDataset: CONFIG.MAIN_DATASET, + secure: false // TODO Remove when we move to Fuseki 5 }, - ontologies: [pair], - containers: ['/resources'], + ontologies: [as], + containers: [ + { + path: '/resources' + }, + { + path: '/resources2', + permissions: {}, + newResourcesPermissions: webId => { + switch (webId) { + case 'anon': + return {}; + case 'system': + return {}; + default: + return { + user: { + uri: webId, + read: true // This is required, otherwise there will be an error when a user post a resource + } + }; + } + } + } + ], activitypub: false, + ldp: { + documentTagger: false + }, mirror: false, void: false, webfinger: false, diff --git a/src/middleware/tests/webacl/resource.test.js b/src/middleware/tests/webacl/resource.test.js new file mode 100644 index 000000000..3c0528d93 --- /dev/null +++ b/src/middleware/tests/webacl/resource.test.js @@ -0,0 +1,318 @@ +const { MIME_TYPES } = require('@semapps/mime-types'); +const { namedNode, triple, literal } = require('@rdfjs/data-model'); +const CONFIG = require('../config'); +const initialize = require('./initialize'); + +jest.setTimeout(20000); + +const ALICE_WEBID = 'http://localhost:3000/alice'; +const BOB_WEBID = 'http://localhost:3000/bob'; + +let broker; + +beforeAll(async () => { + broker = await initialize(); +}); + +afterAll(async () => { + await broker.stop(); +}); + +describe('Permissions check on a specific resource', () => { + const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions + let resourceUri; + + test('Get/patch/put/delete resource without permission', async () => { + // When posting as system, no permissions are given on the resource + resourceUri = await broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #1' + }, + contentType: MIME_TYPES.JSON, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.get', { + resourceUri, + accept: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToAdd: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1 - edited' + }, + contentType: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + + await expect( + broker.call('ldp.resource.delete', { + resourceUri, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + }); + + test('Give Alice read permission on resource', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, read: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.get', { + resourceUri, + accept: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + await expect( + broker.call('ldp.container.get', { + containerUri, + accept: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + }); + + test('Give Alice read permission on container', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: { + user: { uri: ALICE_WEBID, read: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.container.get', { + containerUri, + accept: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).resolves.toMatchObject({ + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'ldp:contains': expect.arrayContaining([ + expect.objectContaining({ + id: resourceUri + }) + ]) + }); + }); + + test('Give Bob default read permission on container', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: { + default: { + user: { uri: BOB_WEBID, read: true } + } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.get', { + resourceUri, + accept: MIME_TYPES.JSON, + webId: BOB_WEBID + }) + ).resolves.toBeDefined(); + }); + + test('Post data without append permission on container', async () => { + await expect( + broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #2' + }, + contentType: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + }); + + test('Give Alice append permission on container', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: { + user: { uri: ALICE_WEBID, append: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #2' + }, + contentType: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + }); + + test('Give Alice append permission on resource', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, append: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToAdd: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1', + content: 'Welcome everybody', + startTime: '2014-12-31T23:00:00-08:00' + }, + contentType: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + // We cannot remove content with acl:Append permission + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToRemove: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + + // We cannot remove content with acl:Append permission + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1 - edited' + }, + contentType: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + }); + + test('Give Alice write permission on resource', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, write: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToRemove: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1 - edited' + }, + contentType: MIME_TYPES.JSON, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + }); + + test('Give Alice control permission on resource', async () => { + await expect( + broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: BOB_WEBID, write: true } + }, + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, control: true } + }, + webId: 'system' + }); + + await expect( + broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: BOB_WEBID, write: true } + }, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + }); +}); From f1977d90070c60881084c0af0eed6f5b2509d4b2 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 4 Jul 2025 09:17:25 +0200 Subject: [PATCH 002/165] If checking append mode, also check write mode --- .../webacl/services/authorizer/index.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/middleware/packages/webacl/services/authorizer/index.js b/src/middleware/packages/webacl/services/authorizer/index.js index e581c11fb..95e53e4d3 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.js +++ b/src/middleware/packages/webacl/services/authorizer/index.js @@ -1,3 +1,11 @@ +// If we ask for append permission, also look for write permission +const modeMapping = { + 'acl:Read': ['read'], + 'acl:Append': ['append', 'write'], + 'acl:Write': ['write'], + 'acl:Control': ['control'] +}; + module.exports = { name: 'webacl.authorizer', dependencies: 'permissions', @@ -10,17 +18,16 @@ module.exports = { if (type === 'resource' || type === 'container') { // Convert acl:Read to read - const shortMode = mode.replace('acl:', '').toLowerCase(); + const modesToCheck = modeMapping[mode]; const rights = await ctx.call('webacl.resource.hasRights', { resourceUri: uri, webId, - rights: { - [shortMode]: true - } + rights: Object.fromEntries(modesToCheck.map(m => [m, true])) }); - return rights[shortMode]; + // Return true if there is at least one true value + return Object.values(rights).some(r => r); } return undefined; From 84c143a4a4af48d93cd977caa51a7e1bc2f70120 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 4 Jul 2025 09:18:03 +0200 Subject: [PATCH 003/165] Fix and improve resource CRUD test --- .../tests/webacl/resourceCRUD.test.js | 116 ++++++++---------- 1 file changed, 54 insertions(+), 62 deletions(-) diff --git a/src/middleware/tests/webacl/resourceCRUD.test.js b/src/middleware/tests/webacl/resourceCRUD.test.js index 8957d3e8d..b5911e101 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.js +++ b/src/middleware/tests/webacl/resourceCRUD.test.js @@ -7,6 +7,8 @@ const initialize = require('./initialize'); jest.setTimeout(20000); +const ALICE_WEBID = 'http://localhost:3000/alice'; + let broker; beforeAll(async () => { @@ -19,49 +21,51 @@ afterAll(async () => { describe('middleware CRUD resource with perms', () => { test('A call to ldp.container.post fails if anonymous user, because container access denied', async () => { - // this is because containers only get Read perms for anonymous users. - - try { - const urlParamsPost = { - resource: { - '@context': { - '@vocab': 'http://virtual-assembly.org/ontologies/pair#' + await expect( + broker.call( + 'ldp.container.post', + { + resource: { + '@context': { + '@vocab': 'http://virtual-assembly.org/ontologies/pair#' + }, + '@type': 'Project', + description: 'myProject', + label: 'myTitle' }, - '@type': 'Project', - description: 'myProject', - label: 'myTitle' + contentType: MIME_TYPES.JSON, + containerUri: `${CONFIG.HOME_URL}resources` }, - contentType: MIME_TYPES.JSON, - containerUri: `${CONFIG.HOME_URL}resources` - }; - await broker.call('ldp.container.post', urlParamsPost, { meta: { webId: 'anon' } }); - } catch (e) { - expect(e.code).toEqual(403); - } + { meta: { webId: 'anon' } } + ) + ).rejects.toThrow(); }, 20000); let resourceUri; test('A call to ldp.container.post creates some default permissions', async () => { - try { - const urlParamsPost = { + resourceUri = await broker.call( + 'ldp.container.post', + { resource: { - '@context': { - '@vocab': 'http://virtual-assembly.org/ontologies/pair#' - }, - '@type': 'Project', - description: 'myProject', - label: 'myTitle' + type: 'Event', + name: 'My event #1' }, contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources` - }; - const webId = 'http://a/user'; - resourceUri = await broker.call('ldp.container.post', urlParamsPost, { meta: { webId } }); - const project1 = await broker.call('ldp.resource.get', { resourceUri, accept: MIME_TYPES.JSON, webId }); - expect(project1['pair:description']).toBe('myProject'); + }, + { meta: { webId: ALICE_WEBID } } + ); - const resourceRights = await broker.call('webacl.resource.hasRights', { + await expect( + broker.call('ldp.resource.get', { resourceUri, accept: MIME_TYPES.JSON, webId: ALICE_WEBID }) + ).resolves.toMatchObject({ + type: 'Event', + name: 'My event #1' + }); + + await expect( + broker.call('webacl.resource.hasRights', { resourceUri, rights: { read: true, @@ -69,19 +73,14 @@ describe('middleware CRUD resource with perms', () => { append: true, control: true }, - webId - }); - - expect(resourceRights).toMatchObject({ - read: true, - write: true, - append: false, - control: true - }); - } catch (e) { - console.log(e); - expect(e).toBe(null); - } + webId: ALICE_WEBID + }) + ).resolves.toMatchObject({ + read: true, + write: true, + append: false, + control: true + }); }, 20000); test('The ACL URI is returned in headers of GET and HEAD calls', async () => { @@ -103,28 +102,21 @@ describe('middleware CRUD resource with perms', () => { }, 20000); test('A call to ldp.resource.delete removes all its permissions', async () => { - try { - const urlParamsPost = { - resourceUri, - webId: 'http://a/user' - }; - - await broker.call('ldp.resource.delete', urlParamsPost); + await broker.call('ldp.resource.delete', { + resourceUri, + webId: ALICE_WEBID + }); - const result = await broker.call('triplestore.query', { - query: `PREFIX acl: + const result = await broker.call('triplestore.query', { + query: `PREFIX acl: SELECT ?auth ?p2 ?o WHERE { GRAPH { ?auth ?p <${resourceUri}>. FILTER (?p IN (acl:accessTo, acl:default ) ) ?auth ?p2 ?o } }`, - webId: 'system', - accept: MIME_TYPES.JSON - }); - - expect(result.length).toBe(0); - } catch (e) { - console.log(e); - expect(e).toBe(null); - } + webId: 'system', + accept: MIME_TYPES.JSON + }); + + expect(result.length).toBe(0); }, 20000); }); From 843f96f42c81d0d2c07ff54f31676c21bb9a9002 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 4 Jul 2025 17:02:07 +0200 Subject: [PATCH 004/165] Refactor and improve group CRUD tests --- src/middleware/tests/webacl/groupCRUD.test.js | 61 +++++-------------- 1 file changed, 16 insertions(+), 45 deletions(-) diff --git a/src/middleware/tests/webacl/groupCRUD.test.js b/src/middleware/tests/webacl/groupCRUD.test.js index 20772f789..a0d82d23a 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.js +++ b/src/middleware/tests/webacl/groupCRUD.test.js @@ -16,72 +16,43 @@ afterAll(async () => { describe('middleware CRUD group with perms', () => { test('Ensure a call as anonymous to webacl.group.create succeeds', async () => { - try { - const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup5' }); + const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup5' }); - expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup5')); - } catch (e) { - console.log(e); - expect(e).toEqual(null); - } + expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup5')); }, 20000); test('Ensure a call as user to webacl.group.create succeeds', async () => { - try { - const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); + const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); - expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup10')); - } catch (e) { - console.log(e); - expect(e).toEqual(null); - } + expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup10')); }, 20000); test('Ensure a call to webacl.group.addMember succeeds. checks also getMembers', async () => { - try { - await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user1' }); - await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user2' }); + await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user1' }); + await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user2' }); - const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup5' }); + const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup5' }); - expect(members).toEqual(expect.arrayContaining(['http://test/user1', 'http://test/user2'])); - } catch (e) { - console.log(e); - expect(e).toEqual(null); - } + expect(members).toEqual(expect.arrayContaining(['http://test/user1', 'http://test/user2'])); }, 20000); test('Ensure a call as anonymous to webacl.group.delete fails - access denied', async () => { - try { - await broker.call('webacl.group.delete', { groupSlug: 'mygroup10' }); - } catch (e) { - expect(e.code).toEqual(403); - } + await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup10' })).rejects.toThrow(); }, 20000); test('Ensure a call as another user than creator to webacl.group.delete fails - access denied', async () => { - try { - await broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user2' }); - } catch (e) { - expect(e.code).toEqual(403); - } + await expect( + broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user2' }) + ).rejects.toThrow(); }, 20000); test('Ensure a call as user to webacl.group.delete succeeds', async () => { - try { - await broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); - } catch (e) { - console.log(e); - expect(e).toEqual(null); - } + await expect( + broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user3' }) + ).resolves.not.toThrow(); }, 20000); test('Ensure a call as anonymous to webacl.group.delete succeeds for a group created anonymously', async () => { - try { - await broker.call('webacl.group.delete', { groupSlug: 'mygroup5' }); - } catch (e) { - console.log(e); - expect(e).toEqual(null); - } + await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup5' })).resolves.not.toThrow(); }, 20000); }); From 0a6e52207696aa8d14f1ccdbe63b292a63282830 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 4 Jul 2025 17:36:31 +0200 Subject: [PATCH 005/165] Improve not found errors --- .../ldp/services/container/actions/get.js | 6 +- .../resource/actions/awaitCreateComplete.js | 3 +- .../ldp/services/resource/actions/get.js | 67 +++++++++---------- .../webacl/services/resource/index.js | 9 +-- .../tests/activitypub/collection.test.js | 2 +- src/middleware/tests/ldp/resource.test.js | 2 +- 6 files changed, 36 insertions(+), 53 deletions(-) diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.js index 60bccd5bf..23b362b35 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.js +++ b/src/middleware/packages/ldp/services/container/actions/get.js @@ -45,11 +45,7 @@ module.exports = { }); if (Object.keys(containerResults).length === 1 && containerResults['@context']) { - throw new MoleculerError( - `Container not found ${containerUri} (webId ${webId} / dataset ${ctx.meta.dataset})`, - 404, - 'NOT_FOUND' - ); + throw new MoleculerError(`Container not found ${containerUri}`, 404, 'NOT_FOUND'); } if (!doNotIncludeResources) { diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js index 2a96e538c..fc967d125 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js @@ -17,8 +17,7 @@ module.exports = { rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, - forceSemantic: { type: 'boolean', optional: true }, - aclVerified: { type: 'boolean', optional: true } + forceSemantic: { type: 'boolean', optional: true } }, async handler(ctx) { const { resourceUri, predicates = [], delayMs = 1000, maxTries = 30, webId = 'system', ...rest } = ctx.params; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.js index 20ef353b3..a0378290b 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.js @@ -12,8 +12,7 @@ module.exports = { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true - }, - aclVerified: { type: 'boolean', optional: true } + } }, cache: { async enabled(ctx) { @@ -24,13 +23,16 @@ module.exports = { keys: ['resourceUri', 'accept', 'jsonContext'] }, async handler(ctx) { - const { resourceUri, aclVerified, jsonContext } = ctx.params; + const { resourceUri, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { return await ctx.call('ldp.remote.get', ctx.params); } + const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); + if (!resourceExist) throw new MoleculerError(`Resource not found ${resourceUri}`, 404, 'NOT_FOUND'); + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Read', webId }); const { accept } = { @@ -38,43 +40,34 @@ module.exports = { ...ctx.params }; - const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: aclVerified ? 'system' : webId }); + const blankNodesQuery = buildBlankNodesQuery(4); - if (resourceExist) { - const blankNodesQuery = buildBlankNodesQuery(4); + let result = await ctx.call('triplestore.query', { + query: ` + ${await ctx.call('ontologies.getRdfPrefixes')} + CONSTRUCT { + ${blankNodesQuery.construct} + } + WHERE { + BIND(<${resourceUri}> AS ?s1) . + ${blankNodesQuery.where} + } + `, + accept, + webId: 'system' + }); - let result = await ctx.call('triplestore.query', { - query: ` - ${await ctx.call('ontologies.getRdfPrefixes')} - CONSTRUCT { - ${blankNodesQuery.construct} - } - WHERE { - BIND(<${resourceUri}> AS ?s1) . - ${blankNodesQuery.where} - } - `, - accept, - // Increase performance by using the 'system' bypass if ACL have already been verified - // TODO simply set meta.webId to "system", it will be taken into account in the triplestore.query action - // The problem is we need to know the real webid for the permissions, but we can remember it in the WebACL middleware - webId: aclVerified ? 'system' : webId + // If we asked for JSON-LD, frame it using the correct context in order to have clean, consistent results + if (accept === MIME_TYPES.JSON) { + result = await ctx.call('jsonld.parser.frame', { + input: result, + frame: { + '@context': jsonContext || (await ctx.call('jsonld.context.get')), + '@id': resourceUri + } }); - - // If we asked for JSON-LD, frame it using the correct context in order to have clean, consistent results - if (accept === MIME_TYPES.JSON) { - result = await ctx.call('jsonld.parser.frame', { - input: result, - frame: { - '@context': jsonContext || (await ctx.call('jsonld.context.get')), - '@id': resourceUri - } - }); - } - - return result; - } else { - throw new MoleculerError(`Resource not found ${resourceUri}`, 404, 'NOT_FOUND'); } + + return result; } }; diff --git a/src/middleware/packages/webacl/services/resource/index.js b/src/middleware/packages/webacl/services/resource/index.js index 060a3338e..84b373712 100644 --- a/src/middleware/packages/webacl/services/resource/index.js +++ b/src/middleware/packages/webacl/services/resource/index.js @@ -86,8 +86,7 @@ module.exports = { if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '_groups'))) { const exists = await aclGroupExists(resourceUri, ctx, this.settings.graphName); - if (!exists) - throw new MoleculerError(`Cannot get permissions of non-existing ACL group ${resourceUri}`, 404, 'NOT_FOUND'); + if (!exists) throw new MoleculerError(`WAC group not found ${resourceUri}`, 404, 'NOT_FOUND'); return false; // it is never a container } // it can be a container or a resource @@ -96,11 +95,7 @@ module.exports = { // it must be a resource then! const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); if (!resourceExist) { - throw new MoleculerError( - `Cannot get permissions of non-existing container or resource ${resourceUri} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})`, - 404, - 'NOT_FOUND' - ); + throw new MoleculerError(`Container or resource not found ${resourceUri}`, 404, 'NOT_FOUND'); } return false; } diff --git a/src/middleware/tests/activitypub/collection.test.js b/src/middleware/tests/activitypub/collection.test.js index 87ad34bfb..3fc43b558 100644 --- a/src/middleware/tests/activitypub/collection.test.js +++ b/src/middleware/tests/activitypub/collection.test.js @@ -473,7 +473,7 @@ describe('Collections', () => { broker.call('activitypub.collection.get', { resourceUri: nonExistentUri }) - ).rejects.toThrow('Not found'); + ).rejects.toThrow('not found'); }); test('Should return 404 when cursor not found in collection', async () => { diff --git a/src/middleware/tests/ldp/resource.test.js b/src/middleware/tests/ldp/resource.test.js index ec41f3f8f..465c9f40b 100644 --- a/src/middleware/tests/ldp/resource.test.js +++ b/src/middleware/tests/ldp/resource.test.js @@ -765,6 +765,6 @@ describe('Resource CRUD operations', () => { resourceUri: project1['@id'], accept: MIME_TYPES.JSON }) - ).rejects.toThrow(`Cannot get permissions of non-existing container or resource ${project1['@id']}`); + ).rejects.toThrow(`not found`); }, 20000); }); From 42c16432beeae20117b38b9d702da133bf50a5ca Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 7 Jul 2025 16:06:42 +0200 Subject: [PATCH 006/165] Fix tests --- src/middleware/tests/activitypub/inbox.test.js | 2 +- src/middleware/tests/activitypub/initialize.js | 3 ++- src/middleware/tests/crypto/initialize.js | 3 ++- src/middleware/tests/crypto/keys.test.js | 4 ++-- src/middleware/tests/interop/initialize.js | 3 ++- src/middleware/tests/ldp/initialize.js | 3 ++- src/middleware/tests/webId/webId.test.js | 3 ++- 7 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/middleware/tests/activitypub/inbox.test.js b/src/middleware/tests/activitypub/inbox.test.js index 077191fbe..ec72bbeb9 100644 --- a/src/middleware/tests/activitypub/inbox.test.js +++ b/src/middleware/tests/activitypub/inbox.test.js @@ -57,7 +57,7 @@ describe('Permissions are correctly set on inbox', () => { resourceUri, webId: 'anon' }) - ).rejects.toThrow('Not found'); + ).rejects.toThrow('not found'); }); test('Post private message to friend', async () => { diff --git a/src/middleware/tests/activitypub/initialize.js b/src/middleware/tests/activitypub/initialize.js index 63b5714a5..140abe2b6 100644 --- a/src/middleware/tests/activitypub/initialize.js +++ b/src/middleware/tests/activitypub/initialize.js @@ -47,7 +47,8 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0 url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset + mainDataset, + secure: false // TODO Remove when we move to Fuseki 5 }, containers, void: false, diff --git a/src/middleware/tests/crypto/initialize.js b/src/middleware/tests/crypto/initialize.js index 8498040aa..1d393260a 100644 --- a/src/middleware/tests/crypto/initialize.js +++ b/src/middleware/tests/crypto/initialize.js @@ -41,7 +41,8 @@ const initialize = async (port, withOldKeyStore = false) => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + mainDataset: CONFIG.MAIN_DATASET, + secure: false // TODO Remove when we move to Fuseki 5 }, activitypub: false, webfinger: false, diff --git a/src/middleware/tests/crypto/keys.test.js b/src/middleware/tests/crypto/keys.test.js index 515376a13..e6d06c587 100644 --- a/src/middleware/tests/crypto/keys.test.js +++ b/src/middleware/tests/crypto/keys.test.js @@ -183,7 +183,7 @@ describe('keys', () => { webId: user2.webId, accept: MIME_TYPES.JSON }) - ).rejects.toMatchObject({ data: { status: 'Forbidden' } }); + ).rejects.toThrow('Forbidden'); }); test('second key present in keys and public-keys container only', async () => { @@ -416,7 +416,7 @@ describe('keys', () => { webId: user2.webId, accept: MIME_TYPES.JSON }) - ).rejects.toMatchObject({ data: { status: 'Forbidden' } }); + ).rejects.toThrow('Forbidden'); }); test('second addable to webId', async () => { diff --git a/src/middleware/tests/interop/initialize.js b/src/middleware/tests/interop/initialize.js index 0ff6e8330..8a16ec218 100644 --- a/src/middleware/tests/interop/initialize.js +++ b/src/middleware/tests/interop/initialize.js @@ -66,7 +66,8 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset + mainDataset, + secure: false // TODO Remove when we move to Fuseki 5 }, containers, ontologies: [pair], diff --git a/src/middleware/tests/ldp/initialize.js b/src/middleware/tests/ldp/initialize.js index 59ef4773d..35d82d875 100644 --- a/src/middleware/tests/ldp/initialize.js +++ b/src/middleware/tests/ldp/initialize.js @@ -72,7 +72,8 @@ const initialize = async () => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + mainDataset: CONFIG.MAIN_DATASET, + secure: false // TODO Remove when we move to Fuseki 5 }, containers, ontologies: [pair, petr], diff --git a/src/middleware/tests/webId/webId.test.js b/src/middleware/tests/webId/webId.test.js index f45042245..0b40e513c 100644 --- a/src/middleware/tests/webId/webId.test.js +++ b/src/middleware/tests/webId/webId.test.js @@ -27,7 +27,8 @@ beforeAll(async () => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + mainDataset: CONFIG.MAIN_DATASET, + secure: false // TODO Remove when we move to Fuseki 5 }, containers: ['/users'], activitypub: false, From 4a0278e92f2e57d40ac88ad51d20ed2f0f46f94b Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 7 Jul 2025 17:40:30 +0200 Subject: [PATCH 007/165] Add utils tests --- src/middleware/tests/webacl/utils.test.js | 248 ++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 src/middleware/tests/webacl/utils.test.js diff --git a/src/middleware/tests/webacl/utils.test.js b/src/middleware/tests/webacl/utils.test.js new file mode 100644 index 000000000..d7d1fd70c --- /dev/null +++ b/src/middleware/tests/webacl/utils.test.js @@ -0,0 +1,248 @@ +const { MIME_TYPES } = require('@semapps/mime-types'); +const { namedNode, triple, literal } = require('@rdfjs/data-model'); +const CONFIG = require('../config'); +const initialize = require('./initialize'); + +jest.setTimeout(20000); + +const ALICE_WEBID = 'http://localhost:3000/alice'; +const BOB_WEBID = 'http://localhost:3000/bob'; + +let broker; + +beforeAll(async () => { + broker = await initialize(); +}); + +afterAll(async () => { + await broker.stop(); +}); + +describe('Test various actions of the webacl.resource service', () => { + const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions + let resourceUri; + + test('Alice see her rights correctly', async () => { + resourceUri = await broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #1' + }, + contentType: MIME_TYPES.JSON, + webId: 'system' + }); + + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + anon: { read: true }, + user: { uri: ALICE_WEBID, read: true, write: true, control: true } + }, + webId: 'system' + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: ALICE_WEBID + }) + ).resolves.toMatchObject({ + read: true, + append: false, // Even if we have given acl:Write permission, acl:Append is not given + write: true, + control: true + }); + + const rights = await broker.call('webacl.resource.getRights', { + resourceUri, + accept: MIME_TYPES.JSON, + webId: ALICE_WEBID + }); + + expect(rights['@graph']).toHaveLength(3); + + expect(rights).toMatchObject({ + '@graph': expect.arrayContaining([ + expect.objectContaining({ + '@id': '#Read', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': ALICE_WEBID, + 'acl:agentClass': 'foaf:Agent', + 'acl:mode': 'acl:Read' + }), + expect.objectContaining({ + '@id': '#Write', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': ALICE_WEBID, + 'acl:mode': 'acl:Write' + }), + expect.objectContaining({ + '@id': '#Control', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': ALICE_WEBID, + 'acl:mode': 'acl:Control' + }) + ]) + }); + }); + + test('Anonymous user cannot see Alice rights', async () => { + const rights = await broker.call('webacl.resource.getRights', { + resourceUri, + accept: MIME_TYPES.JSON + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri + }) + ).resolves.toMatchObject({ + read: true, + append: false, + write: false, + control: false + }); + + expect(rights['@graph']).toHaveLength(1); + + expect(rights).toMatchObject({ + '@graph': expect.arrayContaining([ + expect.objectContaining({ + '@id': '#Read', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agentClass': 'foaf:Agent', + 'acl:mode': 'acl:Read' + }) + ]) + }); + }); + + test('Bob can see his rights but not Alice rights', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: BOB_WEBID, read: true, write: true } + }, + webId: 'system' + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: BOB_WEBID + }) + ).resolves.toMatchObject({ + read: true, + append: false, // Even if we have given acl:Write permission, acl:Append is not given + write: true, + control: false + }); + + const rights = await broker.call('webacl.resource.getRights', { + resourceUri, + accept: MIME_TYPES.JSON, + webId: BOB_WEBID + }); + + expect(rights['@graph']).toHaveLength(2); + + expect(rights).toMatchObject({ + '@graph': expect.arrayContaining([ + expect.objectContaining({ + '@id': '#Read', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': BOB_WEBID, + 'acl:agentClass': 'foaf:Agent', + 'acl:mode': 'acl:Read' + }), + expect.objectContaining({ + '@id': '#Write', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': BOB_WEBID, + 'acl:mode': 'acl:Write' + }) + ]) + }); + }); + + test('Resource is public according to isPublic action', async () => { + await expect( + broker.call('webacl.resource.isPublic', { + resourceUri + }) + ).resolves.toBeTruthy(); + }); + + test('Alice and Bob is returned by getUsersWithReadRights action', async () => { + await expect( + broker.call('webacl.resource.getUsersWithReadRights', { + resourceUri + }) + ).resolves.toContain(ALICE_WEBID, BOB_WEBID); + }); + + test('Remove write permission for Bob', async () => { + await broker.call('webacl.resource.removeRights', { + resourceUri, + rights: { + user: { uri: BOB_WEBID, write: true } + }, + webId: ALICE_WEBID // Alice has acl:Control permission + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: BOB_WEBID + }) + ).resolves.toMatchObject({ + read: true, // Bob still has acl:Read permission + append: false, + write: false, + control: false + }); + }); + + test('Remove all permissions for Alice', async () => { + await broker.call('webacl.resource.deleteAllUserRights', { + webId: ALICE_WEBID + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: ALICE_WEBID + }) + ).resolves.toMatchObject({ + read: true, // There still is anonymous acl:Read right + append: false, + write: false, + control: false + }); + }); + + test('Remove all permissions for resource', async () => { + await broker.call('webacl.resource.deleteAllRights', { + resourceUri + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: 'anon' + }) + ).resolves.toMatchObject({ + read: false, + append: false, + write: false, + control: false + }); + }); +}); From b89a507077db840c65c43e196322fde0a7dbaa4f Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 9 Jul 2025 11:51:31 +0200 Subject: [PATCH 008/165] Use new action to check permissions in WAC actions --- .../services/resource/actions/addRights.js | 17 +++++--------- .../services/resource/actions/removeRights.js | 22 ++++++++----------- .../services/resource/actions/setRights.js | 10 ++++----- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.js b/src/middleware/packages/webacl/services/resource/actions/addRights.js index 1112a3c0e..8bf22194e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.js @@ -62,17 +62,12 @@ module.exports = { isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - // check that the user has Control perm. - // bypass this check if user is 'system' - if (webId !== 'system') { - const { control } = await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { control: true }, - webId - }); - if (!control) - throw new MoleculerError('Access denied ! user must have Control permission', 403, 'ACCESS_DENIED'); - } + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.js b/src/middleware/packages/webacl/services/resource/actions/removeRights.js index daeaad396..70d244440 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.js @@ -11,24 +11,20 @@ module.exports = { rights: { type: 'object', optional: false } }, async handler(ctx) { - let { resourceUri, rights, webId } = ctx.params; + let { resourceUri, rights } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); - webId = webId || ctx.meta.webId || 'anon'; - - if (webId !== 'system') { - const { control } = await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { control: true }, - webId - }); - if (!control) - throw new MoleculerError('Access denied ! user must have Control permission', 403, 'ACCESS_DENIED'); - } - const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); + let processedRights = processRights(rights, `${aclUri}#`); if (isContainer && rights.default) processedRights = processedRights.concat(processRights(rights.default, `${aclUri}#Default`)); diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.js b/src/middleware/packages/webacl/services/resource/actions/setRights.js index a04defcec..976880106 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.js @@ -45,14 +45,12 @@ module.exports = { const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - // check that the user has Control perm. - // TODO: bypass this check if user is 'system' (use system as a super-admin) ? - const { control } = await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { control: true }, + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', webId }); - if (!control) throw new MoleculerError('Access denied ! user must have Control permission', 403, 'ACCESS_DENIED'); // filter out all the newRights that are not for the resource const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); From f662d3571eb35aa4d2305a3019af1e11ec2abc1f Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 9 Jul 2025 17:18:52 +0200 Subject: [PATCH 009/165] webacl.resource.getRights: use new permissions service --- .../services/resource/actions/getRights.js | 77 +++++++++---------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.js b/src/middleware/packages/webacl/services/resource/actions/getRights.js index e6a9f78c4..12f56d298 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.js @@ -8,8 +8,6 @@ const { MoleculerError } = require('moleculer').Errors; const { getAuthorizationNode, - checkAgentPresent, - getUserGroups, findParentContainers, filterAgentAcl, getAclUriFromResourceUri, @@ -93,7 +91,7 @@ async function formatOutput(ctx, output, resourceAclUri, jsonLD) { } async function filterAcls(hasControl, uaSearchParam, acls) { - if (hasControl || uaSearchParam.system) return acls; + if (hasControl) return acls; const filtered = acls.filter(acl => filterAgentAcl(acl, uaSearchParam, false)); if (filtered.length) { @@ -106,20 +104,40 @@ async function filterAcls(hasControl, uaSearchParam, acls) { async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isContainer) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); - const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName); const uaSearchParam = getUserAgentSearchParam(user); - let hasControl = checkAgentPresent(controls, uaSearchParam); - let groups; - - if (!hasControl && user !== 'anon' && user !== 'system') { - // retrieve the groups of the user - groups = await getUserGroups(ctx, user, graphName); - uaSearchParam.groups = groups; - // we check again for the groups. maybe user has control from a group - hasControl = checkAgentPresent(controls, uaSearchParam); + const document = []; + + // Check if the user has a acl:Control permission + // If so, it will return all WAC permissions associated with the resource + // Otherwise only the permissions associated with the given user will be returned + + const hasControl = await ctx.call('permissions.has', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId: user + }); + + // Get the ACL for the resource + + const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName); + const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName); + const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName); + const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName); + + document.push(...(await filterAcls(hasControl, uaSearchParam, reads))); + document.push(...(await filterAcls(hasControl, uaSearchParam, writes))); + document.push(...(await filterAcls(hasControl, uaSearchParam, appends))); + document.push(...(await filterAcls(hasControl, uaSearchParam, controls))); + + if (isContainer && hasControl) { + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName, true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName, true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName, true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName, true))); } - // we continue to search for control perms, now in the parent containers (but we take everything anyway) + // Get the ACLs for all the parent containers const parentContainers = await findParentContainers(ctx, resourceUri); const containersMap = {}; @@ -128,54 +146,33 @@ async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isCont const container = parentContainers.shift(); const containerUri = container.container.value; const aclUri = getAclUriFromResourceUri(baseUrl, containerUri); - const containerControls = await getAuthorizationNode(ctx, containerUri, aclUri, 'Control', graphName, true); - - if (!hasControl) { - hasControl = checkAgentPresent(containerControls, uaSearchParam); - } const reads = await getAuthorizationNode(ctx, containerUri, aclUri, 'Read', graphName, true); const writes = await getAuthorizationNode(ctx, containerUri, aclUri, 'Write', graphName, true); const appends = await getAuthorizationNode(ctx, containerUri, aclUri, 'Append', graphName, true); + const controls = await getAuthorizationNode(ctx, containerUri, aclUri, 'Control', graphName, true); // we keep all the authorization nodes we found containersMap[containerUri] = { reads, writes, appends, - controls: containerControls + controls }; const moreParentContainers = await findParentContainers(ctx, containerUri); parentContainers.push(...moreParentContainers); } - // we finish to get all the ACLs for the resource itself - const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName); - const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName); - const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName); - - const document = []; - - document.push(...(await filterAcls(hasControl, uaSearchParam, reads))); - document.push(...(await filterAcls(hasControl, uaSearchParam, writes))); - document.push(...(await filterAcls(hasControl, uaSearchParam, appends))); - document.push(...(await filterAcls(hasControl, uaSearchParam, controls))); - - if (isContainer && hasControl) { - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName, true))); - } - - for (const [key, value] of Object.entries(containersMap)) { + for (const value of Object.values(containersMap)) { document.push(...(await filterAcls(hasControl, uaSearchParam, value.reads))); document.push(...(await filterAcls(hasControl, uaSearchParam, value.writes))); document.push(...(await filterAcls(hasControl, uaSearchParam, value.appends))); document.push(...(await filterAcls(hasControl, uaSearchParam, value.controls))); } + // Format output + return await formatOutput(ctx, document, resourceAclUri, ctx.meta.$responseType === MIME_TYPES.JSON); } From 84f1cf6b87aaea20d87f94d7b0d7bed6f166b63a Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 9 Jul 2025 18:08:52 +0200 Subject: [PATCH 010/165] Various fixes --- .../activitypub/subservices/collection/actions/get.js | 2 +- .../services/activitypub/subservices/object.js | 2 +- .../packages/ldp/services/container/actions/attach.js | 4 ++-- .../packages/ldp/services/container/actions/create.js | 2 +- .../packages/ldp/services/container/actions/delete.js | 2 ++ .../packages/ldp/services/resource/actions/create.js | 4 ++-- .../packages/ldp/services/resource/actions/exist.js | 8 ++++++++ .../packages/ldp/services/resource/actions/patch.js | 2 +- .../packages/ldp/services/resource/actions/put.js | 2 +- src/middleware/packages/solid/services/storage.js | 2 +- src/middleware/packages/triplestore/adapter.js | 2 +- src/middleware/packages/void/service.js | 3 ++- src/middleware/packages/webacl/bots/groups-manager.js | 2 +- .../packages/webacl/services/group/actions/exist.js | 6 ++---- 14 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js index 00c6eb1a9..facdb72a5 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js @@ -28,7 +28,7 @@ async function getCollectionMetadata(ctx, collectionUri, webId, dataset) { `, accept: MIME_TYPES.JSON, dataset, - webId + webId: 'system' }); if (results.length === 0) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js index c0e75c455..54066822d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js @@ -131,7 +131,7 @@ const ObjectService = { if (activity.object) { const resourceUri = typeof activity.object === 'string' ? activity.object : activity.object.id; // If the resource is already deleted, it means it was an announcement - if (await ctx.call('ldp.resource.exist', { resourceUri, webId: actorUri })) { + if (await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' })) { const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); await ctx.call( diff --git a/src/middleware/packages/ldp/services/container/actions/attach.js b/src/middleware/packages/ldp/services/container/actions/attach.js index b470681f9..570af5d7d 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.js +++ b/src/middleware/packages/ldp/services/container/actions/attach.js @@ -18,7 +18,7 @@ module.exports = { const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId }); if (!resourceExists) { - const childContainerExists = await this.actions.exist({ containerUri: resourceUri, webId }, { parentCtx: ctx }); + const childContainerExists = await this.actions.exist({ containerUri: resourceUri }, { parentCtx: ctx }); if (!childContainerExists) { throw new MoleculerError(`Cannot attach non-existing resource or container: ${resourceUri}`, 404, 'NOT_FOUND'); } @@ -29,7 +29,7 @@ module.exports = { await ctx.call('triplestore.insert', { resource: `<${containerUri}> <${resourceUri}>`, - webId, + webId: 'system', graphName: isRemoteContainer ? this.settings.mirrorGraphName : undefined }); diff --git a/src/middleware/packages/ldp/services/container/actions/create.js b/src/middleware/packages/ldp/services/container/actions/create.js index 0d13acfe9..f4b2661b1 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.js +++ b/src/middleware/packages/ldp/services/container/actions/create.js @@ -21,7 +21,7 @@ module.exports = { 'http://purl.org/dc/terms/description': description }, contentType: MIME_TYPES.JSON, - webId + webId: 'system' }); ctx.emit('ldp.container.created', { containerUri, options, webId }); diff --git a/src/middleware/packages/ldp/services/container/actions/delete.js b/src/middleware/packages/ldp/services/container/actions/delete.js index a821e92e0..1884207da 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.js +++ b/src/middleware/packages/ldp/services/container/actions/delete.js @@ -10,6 +10,8 @@ module.exports = { const { containerUri } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Write', webId }); + await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` DELETE diff --git a/src/middleware/packages/ldp/services/resource/actions/create.js b/src/middleware/packages/ldp/services/resource/actions/create.js index 78e057f47..4612b2596 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.js +++ b/src/middleware/packages/ldp/services/resource/actions/create.js @@ -26,7 +26,7 @@ module.exports = { ...ctx.params }; - const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId }); + const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); if (resourceExist) { throw new MoleculerError(`A resource already exist with URI ${resourceUri}`, 400, 'BAD_REQUEST'); } @@ -72,7 +72,7 @@ module.exports = { { resourceUri, accept: MIME_TYPES.JSON, - webId + webId: 'system' // Avoid errors if the resource creator has no read rights }, { meta: { $cache: false } } ); diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.js b/src/middleware/packages/ldp/services/resource/actions/exist.js index a8ff6b8f0..df4787eeb 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.js +++ b/src/middleware/packages/ldp/services/resource/actions/exist.js @@ -11,6 +11,14 @@ module.exports = { const { resourceUri, acceptTombstones } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + const hasReadRight = await ctx.call('permissions.has', { + uri: resourceUri, + type: 'resource', + mode: 'acl:Read', + webId + }); + if (!hasReadRight) return false; + let exist = await ctx.call('triplestore.tripleExist', { triple: triple(namedNode(resourceUri), variable('p'), variable('s')), webId diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.js b/src/middleware/packages/ldp/services/resource/actions/patch.js index 848b53b4c..1f48b3bef 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.js +++ b/src/middleware/packages/ldp/services/resource/actions/patch.js @@ -83,7 +83,7 @@ module.exports = { await ctx.call('triplestore.update', { query: sparqlUpdate, - webId + webId: 'system' }); const returnValues = { diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.js index 8ee4fd099..8ae0ecd34 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.js +++ b/src/middleware/packages/ldp/services/resource/actions/put.js @@ -114,7 +114,7 @@ module.exports = { await ctx.call('triplestore.update', { query, - webId + webId: 'system' }); // Get the new data, with the same formatting as the old data diff --git a/src/middleware/packages/solid/services/storage.js b/src/middleware/packages/solid/services/storage.js index bba26e0ef..80f410f5c 100644 --- a/src/middleware/packages/solid/services/storage.js +++ b/src/middleware/packages/solid/services/storage.js @@ -31,7 +31,7 @@ module.exports = { await ctx.call('triplestore.dataset.create', { dataset: username, - secure: true + secure: false // TODO Remove when we switch to Fuseki 5 }); ctx.meta.dataset = username; diff --git a/src/middleware/packages/triplestore/adapter.js b/src/middleware/packages/triplestore/adapter.js index eb9456e3c..9ab54b17f 100644 --- a/src/middleware/packages/triplestore/adapter.js +++ b/src/middleware/packages/triplestore/adapter.js @@ -22,7 +22,7 @@ class TripleStoreAdapter { await this.broker.call('triplestore.dataset.create', { dataset: this.dataset, - secure: false + secure: false // TODO Remove when we switch to Fuseki 5 }); } diff --git a/src/middleware/packages/void/service.js b/src/middleware/packages/void/service.js index d892e4adf..600a5c112 100644 --- a/src/middleware/packages/void/service.js +++ b/src/middleware/packages/void/service.js @@ -371,7 +371,8 @@ module.exports = { }; if (c.excludeFromMirror) partition['http://semapps.org/ns/core#doNotMirror'] = true; const count = await ctx.call('triplestore.query', { - query: `SELECT (COUNT (?o) as ?count) { <${partition['http://rdfs.org/ns/void#uriSpace']}> ?o }` + query: `SELECT (COUNT (?o) as ?count) { <${partition['http://rdfs.org/ns/void#uriSpace']}> ?o }`, + webId: 'system' }); partition['http://rdfs.org/ns/void#entities'] = Number(count[0].count.value); return partition; diff --git a/src/middleware/packages/webacl/bots/groups-manager.js b/src/middleware/packages/webacl/bots/groups-manager.js index 09a39b7e5..dc5fbd218 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.js +++ b/src/middleware/packages/webacl/bots/groups-manager.js @@ -11,7 +11,7 @@ module.exports = { dependencies: ['webacl.group'], async started() { for (const rule of this.settings.rules) { - if (!(await this.broker.call('webacl.group.exist', { groupSlug: rule.groupSlug, webId: 'system' }))) { + if (!(await this.broker.call('webacl.group.exist', { groupSlug: rule.groupSlug }))) { this.logger.info(`Group ${rule.groupSlug} doesn't exist, creating it...`); await this.broker.call('webacl.group.create', { groupSlug: rule.groupSlug, webId: 'system' }); } diff --git a/src/middleware/packages/webacl/services/group/actions/exist.js b/src/middleware/packages/webacl/services/group/actions/exist.js index 71dbeb4a6..a613cda30 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.js +++ b/src/middleware/packages/webacl/services/group/actions/exist.js @@ -7,12 +7,10 @@ module.exports = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - webId: { type: 'string', optional: true } + groupUri: { type: 'string', optional: true, trim: true } }, async handler(ctx) { let { groupUri, groupSlug } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); @@ -26,7 +24,7 @@ module.exports = { } } `, - webId + webId: 'system' }); } } From 107ccda1a4753ef049d3b557e6485fd13fed6405 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 10 Jul 2025 10:47:19 +0200 Subject: [PATCH 011/165] Map acl:Write to acl:Read --- src/middleware/packages/webacl/services/authorizer/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/middleware/packages/webacl/services/authorizer/index.js b/src/middleware/packages/webacl/services/authorizer/index.js index 95e53e4d3..30d4d4daf 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.js +++ b/src/middleware/packages/webacl/services/authorizer/index.js @@ -1,6 +1,6 @@ -// If we ask for append permission, also look for write permission +// A acl:Write permission implicitly gives acl:Read and acl:Append permissions const modeMapping = { - 'acl:Read': ['read'], + 'acl:Read': ['read', 'write'], 'acl:Append': ['append', 'write'], 'acl:Write': ['write'], 'acl:Control': ['control'] From 82031d617b459e09dadc3ab4d271a33e9beea7b2 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 10 Jul 2025 12:27:15 +0200 Subject: [PATCH 012/165] Add docs --- website/docs/middleware/ldp/permissions.md | 50 ++++++++++++++++++++++ website/sidebars.js | 1 + 2 files changed, 51 insertions(+) create mode 100644 website/docs/middleware/ldp/permissions.md diff --git a/website/docs/middleware/ldp/permissions.md b/website/docs/middleware/ldp/permissions.md new file mode 100644 index 000000000..eeb0c8b2b --- /dev/null +++ b/website/docs/middleware/ldp/permissions.md @@ -0,0 +1,50 @@ +--- +title: PermissionsService +--- + +This service is automatically created by the [LdpService](index.md) with the key `permissions`. It is used by the LdpService, but also by other services, to check if a given user has the right to access a resource with a given mode. It does not do anything, but relies on authorizers that will do the check (for example against [WebACL permissions](../webacl/)). + +## Actions + +The following service actions are available: + +### `addAuthorizer` + +Add a new authorizer + +##### Parameters + +| Property | Type | Default | Description | +| ------------ | -------- | ------------ | ------------------------------------------------------------------ | +| `actionName` | `String` | **required** | Full name of the Moleculer action to be called | +| `priority` | `Number` | 10 | The priority in regard to other authorizers (1 = highest priority) | + +### `has` + +Calls every registered authorizers. When one of them returns true, return true. If none of them returns true, return false. + +##### Parameters + +| Property | Type | Default | Description | +| -------- | -------- | ------------ | -------------------------------------------------------------------------------- | +| `uri` | `String` | **required** | URI of the resource to check | +| `type` | `String` | "resource" | The type of provided resource. Can be "resource", "container" or "custom" | +| `mode` | `String` | "acl:Read" | The mode to check. Can be "acl:Read", "acl:Append", "acl:Write" or "acl:Control" | +| `webId` | `String` | **required** | The WebID of the user to check | + +##### Return value + +`true` if one of the authorizer returned `true`, `false` otherwise. + +### `check` + +Calls the `has` action. If it returns false, throws a 403 (Forbidden) error. + +##### Parameters + +| Property | Type | Default | Description | +| -------- | -------- | ------------ | -------------------------------------------------------------------------------- | +| `uri` | `String` | **required** | URI of the resource to check | +| `type` | `String` | "resource" | The type of provided resource. Can be "resource", "container" or "custom" | +| `mode` | `String` | "acl:Read" | The mode to check. Can be "acl:Read", "acl:Append", "acl:Write" or "acl:Control" | +| `webId` | `String` | **required** | The WebID of the user to check | diff --git a/website/sidebars.js b/website/sidebars.js index 83bbc6485..3482afb4c 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -57,6 +57,7 @@ module.exports = { 'middleware/ldp/container', 'middleware/ldp/link-header', 'middleware/ldp/registry', + 'middleware/ldp/permissions', 'middleware/ldp/controlled-container', 'middleware/ldp/single-resource-container', 'middleware/ldp/document-tagger', From c63b80b540b44c7f0a2535ac243fba1023de8b41 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 10 Jul 2025 12:28:11 +0200 Subject: [PATCH 013/165] Rename AuthorizerBot file to avoid confusion --- .../packages/webacl/bots/{authorizer.js => authorizer-bot.js} | 2 +- src/middleware/packages/webacl/index.js | 2 +- src/middleware/packages/webacl/services/authorizer/index.js | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) rename src/middleware/packages/webacl/bots/{authorizer.js => authorizer-bot.js} (99%) diff --git a/src/middleware/packages/webacl/bots/authorizer.js b/src/middleware/packages/webacl/bots/authorizer-bot.js similarity index 99% rename from src/middleware/packages/webacl/bots/authorizer.js rename to src/middleware/packages/webacl/bots/authorizer-bot.js index 27711df4c..316a4d2d5 100644 --- a/src/middleware/packages/webacl/bots/authorizer.js +++ b/src/middleware/packages/webacl/bots/authorizer-bot.js @@ -1,5 +1,5 @@ module.exports = { - name: 'authorizer', + name: 'authorizer-bot', settings: { rules: [] }, diff --git a/src/middleware/packages/webacl/index.js b/src/middleware/packages/webacl/index.js index e78a38246..b81aa6d11 100644 --- a/src/middleware/packages/webacl/index.js +++ b/src/middleware/packages/webacl/index.js @@ -2,7 +2,7 @@ const utils = require('./utils'); module.exports = { GroupsManagerBot: require('./bots/groups-manager'), - AuthorizerBot: require('./bots/authorizer'), + AuthorizerBot: require('./bots/authorizer-bot'), WebAclService: require('./service'), WebAclMiddleware: require('./middlewares/webacl'), CacherMiddleware: require('./middlewares/cacher'), diff --git a/src/middleware/packages/webacl/services/authorizer/index.js b/src/middleware/packages/webacl/services/authorizer/index.js index 30d4d4daf..fe05618c7 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.js +++ b/src/middleware/packages/webacl/services/authorizer/index.js @@ -17,7 +17,6 @@ module.exports = { const { uri, type, mode, webId } = ctx.params; if (type === 'resource' || type === 'container') { - // Convert acl:Read to read const modesToCheck = modeMapping[mode]; const rights = await ctx.call('webacl.resource.hasRights', { From c93a38b2d2c2aed57ca6a25473e7df537ed72c11 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 10 Jul 2025 20:01:15 +0200 Subject: [PATCH 014/165] createAndAttachCollection: don't pass unused webId parameter --- .../subservices/collections-registry.js | 33 ++++++------------- .../services/activitypub/subservices/reply.js | 3 +- .../services/activitypub/subservices/share.js | 3 +- 3 files changed, 12 insertions(+), 27 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js index 8b8dbc93c..625b0bb38 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js @@ -114,8 +114,7 @@ const CollectionsRegistryService = { await this.actions.createAndAttachCollection( { objectUri: resourceUri, - collection, - webId: 'system' + collection }, { parentCtx: ctx } ); @@ -236,46 +235,34 @@ const CollectionsRegistryService = { }, events: { async 'ldp.resource.created'(ctx) { - const { resourceUri, newData, webId } = ctx.params; + const { resourceUri, newData } = ctx.params; const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { if (this.isActor(newData.type || newData['@type'])) { // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection, webId: resourceUri }, - { parentCtx: ctx } - ); + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } else { - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection, webId }, - { parentCtx: ctx } - ); + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } } }, async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData, oldData, webId } = ctx.params; + const { resourceUri, newData, oldData } = ctx.params; // Check if we need to create collection only if the type has changed if (this.hasTypeChanged(oldData, newData)) { const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { if (this.isActor(newData.type || newData['@type'])) { // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection, webId: resourceUri }, - { parentCtx: ctx } - ); + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } else { - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection, webId }, - { parentCtx: ctx } - ); + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } } } }, async 'ldp.resource.patched'(ctx) { - const { resourceUri, triplesAdded, webId } = ctx.params; + const { resourceUri, triplesAdded } = ctx.params; if (triplesAdded) { for (const triple of triplesAdded) { if (triple.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { @@ -284,12 +271,12 @@ const CollectionsRegistryService = { if (this.isActor(triple.object.value)) { // If the resource is an actor, use the resource URI as the webId await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection, webId: resourceUri }, + { objectUri: resourceUri, collection }, { parentCtx: ctx } ); } else { await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection, webId }, + { objectUri: resourceUri, collection }, { parentCtx: ctx } ); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js index 341eee547..c498d9041 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js @@ -26,8 +26,7 @@ const ReplyService = { // Create the /replies collection and attach it to the object, unless it already exists const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { objectUri, - collection: this.settings.collectionOptions, - webId: 'system' + collection: this.settings.collectionOptions }); await ctx.call('activitypub.collection.add', { collectionUri, item: replyUri }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.js b/src/middleware/packages/activitypub/services/activitypub/subservices/share.js index 1745b961f..dd73d09b3 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.js @@ -25,8 +25,7 @@ const ShareService = { // Create the /shares collection and attach it to the object, unless it already exists const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { objectUri, - collection: this.settings.collectionOptions, - webId: 'system' + collection: this.settings.collectionOptions }); // Add the announce to the shares collection From 3e49b20066ffa87eada8214b8e794e22ca029e49 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 10 Jul 2025 20:01:55 +0200 Subject: [PATCH 015/165] ldp.resource.exist: verify user has read permission after having checked the resource exists --- .../ldp/services/resource/actions/exist.js | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.js b/src/middleware/packages/ldp/services/resource/actions/exist.js index df4787eeb..19fd2a3df 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.js +++ b/src/middleware/packages/ldp/services/resource/actions/exist.js @@ -11,24 +11,16 @@ module.exports = { const { resourceUri, acceptTombstones } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const hasReadRight = await ctx.call('permissions.has', { - uri: resourceUri, - type: 'resource', - mode: 'acl:Read', - webId - }); - if (!hasReadRight) return false; - let exist = await ctx.call('triplestore.tripleExist', { triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - webId + webId: 'system' }); // If this is a remote URI and the resource is not found in default graph, also look in mirror graph if (!exist && (await ctx.call('ldp.remote.isRemote', { resourceUri }))) { exist = await ctx.call('triplestore.tripleExist', { triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - webId, + webId: 'system', graphName: this.settings.mirrorGraphName }); } @@ -39,6 +31,20 @@ module.exports = { if (types.includes('https://www.w3.org/ns/activitystreams#Tombstone')) return false; } + // Ensure the logged user has the right to see the resource + // TODO Verify if we really need this kind of check + if ( + exist && + !(await ctx.call('permissions.has', { + uri: resourceUri, + type: 'resource', + mode: 'acl:Read', + webId + })) + ) { + return false; + } + return exist; } }; From 5dcf635554ef4064e5cd502ac1d8de459993b3b8 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 28 Jul 2025 16:51:07 +0200 Subject: [PATCH 016/165] Use Fuseki 5.1 for tests --- src/middleware/tests/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 283c13263..f9923b29a 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -1,6 +1,6 @@ services: fuseki_tests: - image: semapps/jena-fuseki-webacl + image: stain/jena-fuseki:5.1.0 container_name: fuseki_tests restart: always volumes: From 61ffd4299bf16bc386962bbdfd34d7bfb5829113 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 28 Jul 2025 16:54:11 +0200 Subject: [PATCH 017/165] Initial work --- .../ldp/services/resource/actions/create.js | 43 ++++++++++--------- .../ldp/services/resource/actions/exist.js | 27 ++++++------ .../ldp/services/resource/actions/get.js | 10 ++--- 3 files changed, 43 insertions(+), 37 deletions(-) diff --git a/src/middleware/packages/ldp/services/resource/actions/create.js b/src/middleware/packages/ldp/services/resource/actions/create.js index 4612b2596..359510e34 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.js +++ b/src/middleware/packages/ldp/services/resource/actions/create.js @@ -1,5 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); +const { getId } = require('../../../utils'); module.exports = { visibility: 'public', @@ -14,9 +15,9 @@ module.exports = { } }, async handler(ctx) { - let { resource, contentType, body } = ctx.params; + let { resource, contentType } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const resourceUri = resource.id || resource['@id']; + const resourceUri = getId(resource); if (await ctx.call('ldp.remote.isRemote', { resourceUri })) throw new MoleculerError('Remote resources cannot be created', 403, 'FORBIDDEN'); @@ -42,28 +43,30 @@ module.exports = { if (contentType !== MIME_TYPES.JSON && !resource.body) throw new MoleculerError('The resource must contain a body member (a string)', 400, 'BAD_REQUEST'); - let newTriples = await this.bodyToTriples(body || resource, contentType); - // see PUT - newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); - // see PUT - newTriples = this.convertBlankNodesToVars(newTriples); - // see PUT - newTriples = this.removeDuplicatedVariables(newTriples); + // let newTriples = await this.bodyToTriples(body || resource, contentType); + // // see PUT + // newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); + // // see PUT + // newTriples = this.convertBlankNodesToVars(newTriples); + // // see PUT + // newTriples = this.removeDuplicatedVariables(newTriples); - const triplesToAdd = newTriples.reverse(); + // const triplesToAdd = newTriples.reverse(); - const newBlankNodes = newTriples.filter(triple => triple.object.termType === 'Variable'); + // const newBlankNodes = newTriples.filter(triple => triple.object.termType === 'Variable'); - // Generate the query - let query = ''; - if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; - query += 'WHERE { '; - if (newBlankNodes.length > 0) query += this.bindNewBlankNodes(newBlankNodes); - query += ` }`; + // // Generate the query + // let query = ''; + // if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; + // query += 'WHERE { '; + // if (newBlankNodes.length > 0) query += this.bindNewBlankNodes(newBlankNodes); + // query += ` }`; - await ctx.call('triplestore.update', { - query, - webId + await ctx.call('triplestore.insert', { + resource, + contentType, + webId, + graphName: resourceUri }); // TODO See if using controlledAction is still necessary now blank nodes are automatically detected diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.js b/src/middleware/packages/ldp/services/resource/actions/exist.js index 19fd2a3df..cea0ae1d6 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.js +++ b/src/middleware/packages/ldp/services/resource/actions/exist.js @@ -1,5 +1,3 @@ -const { triple, namedNode, variable } = require('@rdfjs/data-model'); - module.exports = { visibility: 'public', params: { @@ -11,19 +9,24 @@ module.exports = { const { resourceUri, acceptTombstones } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - let exist = await ctx.call('triplestore.tripleExist', { - triple: triple(namedNode(resourceUri), variable('p'), variable('s')), + // Returns true if a graph with the resource URI exist + let exist = await ctx.call('triplestore.query', { + query: ` + ASK { + GRAPH <${resourceUri}> {} + } + `, webId: 'system' }); - // If this is a remote URI and the resource is not found in default graph, also look in mirror graph - if (!exist && (await ctx.call('ldp.remote.isRemote', { resourceUri }))) { - exist = await ctx.call('triplestore.tripleExist', { - triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - webId: 'system', - graphName: this.settings.mirrorGraphName - }); - } + // // If this is a remote URI and the resource is not found in default graph, also look in mirror graph + // if (!exist && (await ctx.call('ldp.remote.isRemote', { resourceUri }))) { + // exist = await ctx.call('triplestore.tripleExist', { + // triple: triple(namedNode(resourceUri), variable('p'), variable('s')), + // webId: 'system', + // graphName: this.settings.mirrorGraphName + // }); + // } // If resource exists but we don't want tombstones, check the resource type if (exist && !acceptTombstones) { diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.js index a0378290b..030cfa3cc 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.js @@ -1,6 +1,5 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); -const { buildBlankNodesQuery } = require('../../../utils'); module.exports = { visibility: 'public', @@ -40,17 +39,18 @@ module.exports = { ...ctx.params }; - const blankNodesQuery = buildBlankNodesQuery(4); + // const blankNodesQuery = buildBlankNodesQuery(4); let result = await ctx.call('triplestore.query', { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} CONSTRUCT { - ${blankNodesQuery.construct} + ?s ?p ?o } WHERE { - BIND(<${resourceUri}> AS ?s1) . - ${blankNodesQuery.where} + GRAPH <${resourceUri}> { + ?s ?p ?o + } } `, accept, From f41a8ef28b77f19f8c58d0290b611ad224c56515 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 28 Jul 2025 17:55:15 +0200 Subject: [PATCH 018/165] Working GET method --- src/middleware/packages/jsonld/package.json | 1 + .../packages/jsonld/services/parser/index.js | 26 ++++- .../packages/ldp/services/api/actions/get.js | 34 +++--- .../ldp/services/container/actions/get.js | 13 +-- .../ldp/services/resource/actions/get.js | 33 +++--- .../tests/ldp/content-negotiation.test.js | 110 ++++++++++++++++++ src/middleware/tests/ldp/resource.test.js | 42 ++----- src/middleware/yarn.lock | 8 ++ 8 files changed, 184 insertions(+), 83 deletions(-) create mode 100644 src/middleware/tests/ldp/content-negotiation.test.js diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index f71be749c..b0908b4b6 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -9,6 +9,7 @@ "jsonld-context-parser": "^2.4.0", "jsonld-streaming-parser": "^2.4.2", "lru-cache": "^6.0.0", + "n3": "^1.26.0", "streamify-string": "^1.0.1", "url-join": "^4.0.1" }, diff --git a/src/middleware/packages/jsonld/services/parser/index.js b/src/middleware/packages/jsonld/services/parser/index.js index 4dbc4c121..11499ad61 100644 --- a/src/middleware/packages/jsonld/services/parser/index.js +++ b/src/middleware/packages/jsonld/services/parser/index.js @@ -1,4 +1,5 @@ const jsonld = require('jsonld'); +const N3 = require('n3'); const { JsonLdParser } = require('jsonld-streaming-parser'); const streamifyString = require('streamify-string'); const { arrayOf, isURI } = require('../../utils/utils'); @@ -42,9 +43,28 @@ module.exports = { const { dataset, options } = ctx.params; return this.jsonld.fromRDF(dataset, options); }, - toRDF(ctx) { - const { input, options } = ctx.params; - return this.jsonld.toRDF(input, options); + async toRDF(ctx) { + const { input, options = {} } = ctx.params; + const { format } = options; + + if (!format || format === 'application/n-quads') { + return await this.jsonld.toRDF(input, options); + } else { + // Since JSONLD.js does not support output other than N-Quads, use N3 for that + const quads = await this.actions.toQuads({ input }, { parentCtx: ctx }); + const prefixes = await ctx.call('ontologies.getPrefixes'); + return new Promise((resolve, reject) => { + const writer = new N3.Writer({ format, prefixes }); + writer.addQuads(quads.reverse()); // We reverse quads in order to have the type first + writer.end((error, result) => { + if (error) { + reject(error); + } else { + resolve(result); + } + }); + }); + } }, // Return quads in RDF.JS data model // (this.jsonld.toRDF does not use the same model) diff --git a/src/middleware/packages/ldp/services/api/actions/get.js b/src/middleware/packages/ldp/services/api/actions/get.js index 526e3c55c..5d727886b 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.js +++ b/src/middleware/packages/ldp/services/api/actions/get.js @@ -17,10 +17,7 @@ module.exports = async function get(ctx) { * LDP CONTAINER */ - const { accept, controlledActions } = { - ...(await ctx.call('ldp.registry.getByUri', { containerUri: uri })), - ...ctx.meta.headers - }; + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri: uri }); // See https://www.w3.org/TR/ldp/#prefer-parameters const doNotIncludeResources = @@ -30,7 +27,6 @@ module.exports = async function get(ctx) { controlledActions?.list || 'ldp.container.get', cleanUndefined({ containerUri: uri, - accept, jsonContext: parseJson(ctx.meta.headers?.jsonldcontext), doNotIncludeResources }) @@ -40,16 +36,12 @@ module.exports = async function get(ctx) { if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; ctx.meta.$responseHeaders['Preference-Applied'] = 'return=representation'; } - - ctx.meta.$responseType = ctx.meta.$responseType || accept; } else { /* * LDP RESOURCE */ - const { accept, controlledActions, preferredView } = { - ...(await ctx.call('ldp.registry.getByUri', { resourceUri: uri })), - ...ctx.meta.headers - }; + + const { controlledActions, preferredView } = await ctx.call('ldp.registry.getByUri', { resourceUri: uri }); if (ctx.meta.originalHeaders?.accept?.includes('text/html') && this.settings.preferredViewForResource) { const webId = ctx.meta.webId || 'anon'; @@ -70,14 +62,11 @@ module.exports = async function get(ctx) { // If the resource is a file and no semantic encoding was requested, return it if ( types.includes('http://semapps.org/ns/core#File') && - ![MIME_TYPES.JSON, MIME_TYPES.TURTLE].includes(ctx.meta.originalHeaders?.accept) + ![MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE].includes(ctx.meta.originalHeaders?.accept) ) { try { - // Get the file as JSON to get its metadata - res = await ctx.call(controlledActions.get || 'ldp.resource.get', { - resourceUri: uri, - accept: MIME_TYPES.JSON - }); + // Get the file as JSON-LD to get its metadata + res = await ctx.call(controlledActions.get || 'ldp.resource.get', { resourceUri: uri }); const file = fs.readFileSync(res['semapps:localPath']); ctx.meta.$responseType = res['semapps:mimeType']; @@ -96,22 +85,25 @@ module.exports = async function get(ctx) { controlledActions.get || 'ldp.resource.get', cleanUndefined({ resourceUri: uri, - accept, jsonContext: parseJson(ctx.meta.headers?.jsonldcontext) }) ); - - ctx.meta.$responseType = ctx.meta.$responseType || accept; } } + if (ctx.meta.headers.accept && ctx.meta.headers.accept !== MIME_TYPES.JSON) { + res = await ctx.call('jsonld.parser.toRDF', { input: res, options: { format: ctx.meta.headers.accept } }); + } + if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; ctx.meta.$responseHeaders.Link = await ctx.call('ldp.link-header.get', { uri }); - // Hack to make our servers work with Mastodon servers, which except a special profile + // Hack to make our servers work with Mastodon servers, which expect a special profile if (ctx.meta.$responseType === 'application/ld+json') ctx.meta.$responseType = `application/ld+json; profile="https://www.w3.org/ns/activitystreams"`; + ctx.meta.$responseType = ctx.meta.$responseType || ctx.meta.headers.accept; + return res; } catch (e) { if (e.code !== 404 && e.code !== 403) console.error(e); diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.js index 23b362b35..7e09e44fa 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.js +++ b/src/middleware/packages/ldp/services/container/actions/get.js @@ -13,21 +13,16 @@ module.exports = { jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { - keys: ['containerUri', 'accept', 'filters', 'doNotIncludeResources', 'jsonContext', 'webId', '#webId'] + keys: ['containerUri', 'filters', 'doNotIncludeResources', 'jsonContext', 'webId', '#webId'] }, async handler(ctx) { - const { containerUri, filters, doNotIncludeResources, jsonContext } = ctx.params; + const { containerUri, accept, filters, doNotIncludeResources, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Read', webId }); - const { accept } = { - ...(await ctx.call('ldp.registry.getByUri', { containerUri })), - ...ctx.params - }; - - if (accept !== MIME_TYPES.JSON) - throw new Error(`LDP containers can only be returned with JSON-LD format at the moment.`); + if (accept && accept !== MIME_TYPES.JSON) + throw new Error(`The ldp.container.get action now only support JSON-LD. Provided: ${accept}`); let containerResults = await ctx.call('triplestore.query', { query: ` diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.js index a0378290b..63476d41c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.js @@ -20,12 +20,15 @@ module.exports = { const isRemote = await ctx.call('ldp.remote.isRemote', { resourceUri: ctx.params.resourceUri }); return !isRemote; }, - keys: ['resourceUri', 'accept', 'jsonContext'] + keys: ['resourceUri', 'jsonContext'] }, async handler(ctx) { - const { resourceUri, jsonContext } = ctx.params; + const { resourceUri, accept, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + if (accept && accept !== MIME_TYPES.JSON) + throw new Error(`The ldp.resource.get action now only support JSON-LD. Provided: ${accept}`); + if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { return await ctx.call('ldp.remote.get', ctx.params); } @@ -35,11 +38,6 @@ module.exports = { await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Read', webId }); - const { accept } = { - ...(await ctx.call('ldp.registry.getByUri', { resourceUri })), - ...ctx.params - }; - const blankNodesQuery = buildBlankNodesQuery(4); let result = await ctx.call('triplestore.query', { @@ -53,21 +51,16 @@ module.exports = { ${blankNodesQuery.where} } `, - accept, webId: 'system' }); - // If we asked for JSON-LD, frame it using the correct context in order to have clean, consistent results - if (accept === MIME_TYPES.JSON) { - result = await ctx.call('jsonld.parser.frame', { - input: result, - frame: { - '@context': jsonContext || (await ctx.call('jsonld.context.get')), - '@id': resourceUri - } - }); - } - - return result; + // Frame the result using the correct context in order to have clean, consistent results + return await ctx.call('jsonld.parser.frame', { + input: result, + frame: { + '@context': jsonContext || (await ctx.call('jsonld.context.get')), + '@id': resourceUri + } + }); } }; diff --git a/src/middleware/tests/ldp/content-negotiation.test.js b/src/middleware/tests/ldp/content-negotiation.test.js new file mode 100644 index 000000000..2dc698158 --- /dev/null +++ b/src/middleware/tests/ldp/content-negotiation.test.js @@ -0,0 +1,110 @@ +const urlJoin = require('url-join'); +const fetch = require('node-fetch'); +const { MIME_TYPES } = require('@semapps/mime-types'); +const { fetchServer } = require('../utils'); +const CONFIG = require('../config'); +const initialize = require('./initialize'); + +jest.setTimeout(20000); +let broker; + +beforeAll(async () => { + broker = await initialize(); +}); + +afterAll(async () => { + await broker.stop(); +}); + +describe('Content negotiation', () => { + const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); + let resourceUri; + + test('Post resource in JSON-LD', async () => { + const { headers } = await fetchServer(containerUri, { + method: 'POST', + body: { + '@context': { + '@vocab': 'http://virtual-assembly.org/ontologies/pair#' + }, + '@type': 'Project', + description: 'myProject', + label: 'myLabel' + } + }); + + resourceUri = headers.get('Location'); + + expect(resourceUri).not.toBeNull(); + }); + + test('Get resource in Turtle format', async () => { + const { body } = await fetchServer(resourceUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TURTLE + }) + }); + + expect(body).toMatch(new RegExp(`<${resourceUri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); + expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); + }); + + test('Get resource in N-Triples format', async () => { + const { body } = await fetchServer(resourceUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TRIPLE + }) + }); + + expect(body).toMatch( + new RegExp( + `<${resourceUri}>.* ` + ) + ); + expect(body).toMatch( + new RegExp(`<${resourceUri}>.* "myProject"`) + ); + expect(body).toMatch(new RegExp(`<${resourceUri}>.* "myLabel"`)); + }); + + test('Get container in Turtle format', async () => { + const { body } = await fetchServer(containerUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TURTLE + }) + }); + + expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:BasicContainer, ldp:Container`)); + expect(body).toMatch(new RegExp(`ldp:contains <${resourceUri}>`)); + + expect(body).toMatch(new RegExp(`<${resourceUri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); + expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); + }); + + test('Get container in N-Triples format', async () => { + const { body } = await fetchServer(containerUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TRIPLE + }) + }); + + expect(body).toMatch( + new RegExp( + `<${containerUri}> ` + ) + ); + expect(body).toMatch( + new RegExp( + `<${containerUri}> ` + ) + ); + expect(body).toMatch(new RegExp(`<${containerUri}> <${resourceUri}>`)); + expect(body).toMatch( + new RegExp( + `<${resourceUri}>.* ` + ) + ); + }); +}); diff --git a/src/middleware/tests/ldp/resource.test.js b/src/middleware/tests/ldp/resource.test.js index 465c9f40b..69714271b 100644 --- a/src/middleware/tests/ldp/resource.test.js +++ b/src/middleware/tests/ldp/resource.test.js @@ -50,41 +50,23 @@ describe('Resource CRUD operations', () => { expect(project1['pair:description']).toBe('myProject'); }, 20000); - test('Get resource in JSON-LD format', async () => { + test('Get resource', async () => { const newProject = await broker.call('ldp.resource.get', { accept: MIME_TYPES.JSON, resourceUri: project1['@id'] }); - expect(newProject['pair:description']).toBe('myProject'); - }, 20000); - - test('Get resource in turtle format', async () => { - const newProject = await broker.call('ldp.resource.get', { - accept: MIME_TYPES.TURTLE, - resourceUri: project1['@id'] - }); - expect(newProject).toMatch(new RegExp(`<${project1['@id']}>`)); - expect(newProject).toMatch(new RegExp(`a.*pair:Project`)); - expect(newProject).toMatch(new RegExp(`pair:description.*"myProject"`)); - expect(newProject).toMatch(new RegExp(`pair:label.*"myTitle"`)); - }, 20000); - - test('Get resource in triple format', async () => { - const newProject = await broker.call('ldp.resource.get', { - accept: MIME_TYPES.TRIPLE, - resourceUri: project1['@id'] + expect(newProject).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project1['@id'], + '@type': 'pair:Project', + 'pair:affiliates': expect.arrayContaining([ + 'http://localhost:3000/users/guillaume', + 'http://localhost:3000/users/sebastien' + ]), + 'pair:description': 'myProject', + 'pair:hasLocation': expect.objectContaining({ 'pair:description': 'The place to be', 'pair:label': 'Paris' }), + 'pair:label': 'myTitle' }); - expect(newProject).toMatch( - new RegExp( - `<${project1['@id']}>.*.*` - ) - ); - expect(newProject).toMatch( - new RegExp(`<${project1['@id']}>.*.*"myProject"`) - ); - expect(newProject).toMatch( - new RegExp(`<${project1['@id']}>.*.*"myTitle"`) - ); }, 20000); test('Put resource', async () => { diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 2b52074fe..8716b8621 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -8306,6 +8306,14 @@ mute-stream@^1.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== +n3@^1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/n3/-/n3-1.26.0.tgz#3d69de04bee680b9ebec9dbc1033dc1e6934d351" + integrity sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w== + dependencies: + buffer "^6.0.3" + readable-stream "^4.0.0" + n3@^1.6.3, n3@^1.8.0: version "1.23.1" resolved "https://registry.yarnpkg.com/n3/-/n3-1.23.1.tgz#42a5aded4802db7a3c5d22feec19bdd919190268" From 89a97a1aad03e127529ca367182489f41ab6d33d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 29 Jul 2025 13:14:58 +0200 Subject: [PATCH 019/165] New parseRawBody middleware --- .../services/activitypub/subservices/api.js | 8 +- .../services/activitypub/subservices/inbox.js | 2 +- .../packages/crypto/signature/proxy.js | 2 +- .../verifiable-credentials/vc-api-service.js | 4 +- .../packages/ldp/mixins/special-endpoint.js | 4 +- .../packages/ldp/routes/getCatchAllRoute.js | 6 +- .../packages/ldp/routes/getPodsRoute.js | 6 +- .../ldp/services/api/actions/patch.js | 86 +++++++-------- src/middleware/packages/middlewares/index.js | 100 +++++++----------- .../packages/mime-types/constants.js | 5 +- .../solid/services/notifications/listener.js | 10 +- .../packages/sparql-endpoint/getRoute.js | 4 +- .../packages/sparql-endpoint/service.js | 2 +- .../packages/webacl/routes/getRoutes.js | 7 +- .../services/resource/actions/addRights.js | 2 +- .../services/resource/actions/setRights.js | 2 +- 16 files changed, 110 insertions(+), 140 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.js b/src/middleware/packages/activitypub/services/activitypub/subservices/api.js index 4fed39c8f..9d087d7f6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.js @@ -4,11 +4,10 @@ const { arrayOf } = require('@semapps/ldp'); const { parseUrl, parseHeader, - parseSparql, + parseRawBody, negotiateContentType, negotiateAccept, parseJson, - parseTurtle, parseFile, saveDatasetMeta } = require('@semapps/middlewares'); @@ -98,11 +97,10 @@ const ApiService = { const middlewares = [ parseUrl, parseHeader, + parseRawBody, negotiateContentType, negotiateAccept, - parseSparql, parseJson, - parseTurtle, parseFile, saveDatasetMeta ]; @@ -111,7 +109,7 @@ const ApiService = { name: this.settings.podProvider ? 'boxes' : `boxes${actorsPath}`, path: actorsPath, // Disable the body parsers so that we can parse the body ourselves - // (Moleculer-web doesn't handle non-JSON bodies, so we must do it) + // (Moleculer-web doesn't handle non-JSON bodies, so we must do it ourselves) bodyParsers: false, authorization: false, authentication: true, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js index b3ce671d1..0b2de195f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js @@ -73,7 +73,7 @@ const InboxService = { throw new Error(`Cannot validate HTTP signature because of missing meta (rawBody or originalHeaders)`); const validDigest = await ctx.call('signature.verifyDigest', { - body: ctx.meta.rawBody, // Stored by parseJson middleware + body: ctx.meta.rawBody, // Stored by parseRawBody middleware headers: ctx.meta.originalHeaders }); diff --git a/src/middleware/packages/crypto/signature/proxy.js b/src/middleware/packages/crypto/signature/proxy.js index 81ceea99c..058ddf351 100644 --- a/src/middleware/packages/crypto/signature/proxy.js +++ b/src/middleware/packages/crypto/signature/proxy.js @@ -56,7 +56,7 @@ const ProxyService = { const body = ctx.params.files && ctx.params.files.length > 0 ? await stream2buffer(ctx.params.files[0].readableStream) - : ctx.params.body; + : ctx.meta.rawBody; try { const response = await this.actions.query( diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js index bbee12b94..7d603ec11 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js @@ -1,8 +1,8 @@ -const { parseHeader, negotiateAccept, parseJson } = require('@semapps/middlewares'); +const { parseHeader, parseRawBody, negotiateAccept, parseJson } = require('@semapps/middlewares'); const path = require('node:path'); const { VC_API_PATH } = require('../constants'); -const middlewares = [parseHeader, parseJson, negotiateAccept]; +const middlewares = [parseHeader, parseRawBody, parseJson, negotiateAccept]; /** * diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.js b/src/middleware/packages/ldp/mixins/special-endpoint.js index d5c26a3aa..d7df4bc8e 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.js +++ b/src/middleware/packages/ldp/mixins/special-endpoint.js @@ -1,7 +1,7 @@ const urlJoin = require('url-join'); const { namedNode, triple } = require('@rdfjs/data-model'); const { MIME_TYPES } = require('@semapps/mime-types'); -const { parseUrl, parseHeader, negotiateAccept, parseJson, parseTurtle } = require('@semapps/middlewares'); +const { parseUrl, parseHeader, parseRawBody, negotiateAccept, parseJson } = require('@semapps/middlewares'); module.exports = { settings: { @@ -18,7 +18,7 @@ module.exports = { if (!this.settings.settingsDataset) throw new Error(`The settingsDataset must be specified for service ${this.name}`); - const middlewares = [parseUrl, parseHeader, negotiateAccept, parseJson, parseTurtle]; + const middlewares = [parseUrl, parseHeader, parseRawBody, negotiateAccept, parseJson]; let aliases = {}; aliases['GET /'] = [...middlewares, `${this.name}.endpointGet`]; diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.js b/src/middleware/packages/ldp/routes/getCatchAllRoute.js index 6f09de386..9d38edf56 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.js +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.js @@ -2,11 +2,10 @@ const path = require('path'); const { parseUrl, parseHeader, - parseSparql, + parseRawBody, negotiateContentType, negotiateAccept, parseJson, - parseTurtle, parseFile, saveDatasetMeta } = require('@semapps/middlewares'); @@ -15,11 +14,10 @@ function getCatchAllRoute(basePath, podProvider) { const middlewares = [ parseUrl, parseHeader, + parseRawBody, negotiateContentType, negotiateAccept, - parseSparql, parseJson, - parseTurtle, parseFile, saveDatasetMeta ]; diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.js b/src/middleware/packages/ldp/routes/getPodsRoute.js index 54df83ba4..5e98da623 100644 --- a/src/middleware/packages/ldp/routes/getPodsRoute.js +++ b/src/middleware/packages/ldp/routes/getPodsRoute.js @@ -2,11 +2,10 @@ const path = require('path'); const { parseUrl, parseHeader, - parseSparql, + parseRawBody, negotiateContentType, negotiateAccept, parseJson, - parseTurtle, parseFile, saveDatasetMeta } = require('@semapps/middlewares'); @@ -28,11 +27,10 @@ function getPodsRoute(basePath) { const middlewares = [ parseUrl, parseHeader, + parseRawBody, negotiateContentType, negotiateAccept, - parseSparql, parseJson, - parseTurtle, parseFile, saveDatasetMeta, transformRouteParamsToSlugParts diff --git a/src/middleware/packages/ldp/services/api/actions/patch.js b/src/middleware/packages/ldp/services/api/actions/patch.js index 1cf3f1e8b..f3b8b12bc 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.js +++ b/src/middleware/packages/ldp/services/api/actions/patch.js @@ -6,65 +6,61 @@ const ACCEPTED_OPERATIONS = ['insert', 'delete']; module.exports = async function patch(ctx) { try { - const { username, slugParts, body } = ctx.params; + const { username, slugParts } = ctx.params; + + if (ctx.meta.headers['content-type'] !== 'application/sparql-update') + throw new MoleculerError(`The Content-Type header should be application/sparql-update`, 400, 'BAD_REQUEST'); const uri = this.getUriFromSlugParts(slugParts, username); const types = await ctx.call('ldp.resource.getTypes', { resourceUri: uri }); - if (ctx.meta.parser === 'sparql') { - let parsedQuery; + let parsedQuery; - try { - parsedQuery = parser.parse(body); - } catch (e) { - throw new MoleculerError(`Invalid SPARQL Update: ${body}`, 400, 'BAD_REQUEST'); - } + try { + parsedQuery = parser.parse(ctx.meta.rawBody); + } catch (e) { + throw new MoleculerError(`Invalid SPARQL Update: ${ctx.meta.rawBody}`, 400, 'BAD_REQUEST'); + } - if (parsedQuery.type !== 'update') - throw new MoleculerError('Invalid SPARQL. Must be an Update', 400, 'BAD_REQUEST'); + if (parsedQuery.type !== 'update') + throw new MoleculerError('Invalid SPARQL. Must be an Update', 400, 'BAD_REQUEST'); - const triplesByOperation = Object.fromEntries( - parsedQuery.updates - .filter(p => ACCEPTED_OPERATIONS.includes(p.updateType)) - .map(p => [p.updateType, p[p.updateType][0].triples]) - ); + const triplesByOperation = Object.fromEntries( + parsedQuery.updates + .filter(p => ACCEPTED_OPERATIONS.includes(p.updateType)) + .map(p => [p.updateType, p[p.updateType][0].triples]) + ); - if (Object.values(triplesByOperation).length === 0) { - throw new MoleculerError( - 'Invalid SPARQL operation. Must be INSERT DATA and/or DELETE DATA', - 400, - 'BAD_REQUEST' - ); - } + if (Object.values(triplesByOperation).length === 0) { + throw new MoleculerError('Invalid SPARQL operation. Must be INSERT DATA and/or DELETE DATA', 400, 'BAD_REQUEST'); + } - const triplesToAdd = triplesByOperation.insert; - const triplesToRemove = triplesByOperation.delete; + const triplesToAdd = triplesByOperation.insert; + const triplesToRemove = triplesByOperation.delete; - if (types.includes('http://www.w3.org/ns/ldp#Container')) { - /* - * LDP CONTAINER - */ + if (types.includes('http://www.w3.org/ns/ldp#Container')) { + /* + * LDP CONTAINER + */ - await ctx.call('ldp.container.patch', { - containerUri: uri, - sparqlUpdate: body - }); - } else { - /* - * LDP RESOURCE - */ + await ctx.call('ldp.container.patch', { + containerUri: uri, + sparqlUpdate: ctx.meta.rawBody + }); + } else { + /* + * LDP RESOURCE + */ - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: uri }); + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: uri }); - await ctx.call(controlledActions.patch || 'ldp.resource.patch', { - resourceUri: uri, - triplesToAdd, - triplesToRemove - }); - } - } else { - throw new MoleculerError(`The Content-Type header should be application/sparql-update`, 400, 'BAD_REQUEST'); + await ctx.call(controlledActions.patch || 'ldp.resource.patch', { + resourceUri: uri, + triplesToAdd, + triplesToRemove + }); } + ctx.meta.$responseHeaders = { 'Content-Length': 0 }; diff --git a/src/middleware/packages/middlewares/index.js b/src/middleware/packages/middlewares/index.js index 2078e1741..a4afce71b 100644 --- a/src/middleware/packages/middlewares/index.js +++ b/src/middleware/packages/middlewares/index.js @@ -3,6 +3,8 @@ const { negotiateTypeMime, MIME_TYPES } = require('@semapps/mime-types'); const Busboy = require('busboy'); const streams = require('memory-streams'); +const handledMimeTypes = [MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE, MIME_TYPES.SPARQL_UPDATE]; + // Put requested URL and query string in meta so that services may use them independently // Set here https://github.com/moleculerjs/moleculer-web/blob/c6ec80056a64ea15c57d6e2b946ce978d673ae92/src/index.js#L151-L161 const parseUrl = async (req, res, next) => { @@ -18,9 +20,25 @@ const parseHeader = async (req, res, next) => { next(); }; +const parseRawBody = (req, res, next) => { + let data = ''; + req.on('data', chunk => { + data += chunk; + }); + req.on('end', () => { + if (data.length > 0) req.$ctx.meta.rawBody = data; + req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added + next(); + }); +}; + const negotiateContentType = (req, res, next) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateContentType middleware`); + + if (!req.$ctx.meta.rawBodyParsed) + throw new Error(`The parseRawBody middleware must be added before the parseJson middleware`); + if (req.$ctx.meta.headers['content-type'] !== undefined && req.method !== 'DELETE') { try { req.$ctx.meta.headers['content-type'] = negotiateTypeMime(req.$ctx.meta.headers['content-type']); @@ -28,9 +46,11 @@ const negotiateContentType = (req, res, next) => { } catch (e) { next(); } - } else if (req.$params.body) { - next( - new MoleculerError('Content-Type has to be specified for a non-empty body ', 400, 'CONTENT_TYPE_NOT_SPECIFIED') + } else if (req.$ctx.meta.rawBody) { + throw new MoleculerError( + 'Content-Type has to be specified for a non-empty body ', + 400, + 'CONTENT_TYPE_NOT_SPECIFIED' ); } else { next(); @@ -74,51 +94,13 @@ const negotiateAccept = (req, res, next) => { } }; -const getRawBody = req => { - return new Promise((resolve, reject) => { - let data = ''; - req.on('data', chunk => { - data += chunk; - }); - req.on('end', () => { - resolve(data.length > 0 ? data : undefined); - }); - }); -}; - -const parseSparql = async (req, res, next) => { - if (!req.$ctx.meta.headers) - throw new Error(`The parseHeader middleware must be added before the parseSparql middleware`); - if ( - !req.$ctx.meta.parser && - (req.originalUrl.includes('/sparql') || - (req.$ctx.meta.headers['content-type'] && req.$ctx.meta.headers['content-type'].includes('sparql'))) - ) { - req.$ctx.meta.parser = 'sparql'; - // TODO Store in req.$ctx.meta.rawBody - req.$params.body = await getRawBody(req); - } - next(); -}; - -const parseTurtle = async (req, res, next) => { - if (!req.$ctx.meta.headers) - throw new Error(`The parseHeader middleware must be added before the parseTurtle middleware`); - if ( - !req.$ctx.meta.parser && - req.$ctx.meta.headers['content-type'] && - req.$ctx.meta.headers['content-type'].includes('turtle') - ) { - req.$ctx.meta.parser = 'turtle'; - // TODO Store in req.$ctx.meta.rawBody - req.$params.body = await getRawBody(req); - } - next(); -}; - const parseJson = async (req, res, next) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseJson middleware`); + + if (!req.$ctx.meta.rawBodyParsed) + throw new Error(`The parseRawBody middleware must be added before the parseJson middleware`); + let mimeType = null; try { if (req.$ctx.meta.headers['content-type']) { @@ -129,18 +111,13 @@ const parseJson = async (req, res, next) => { } try { - if (!req.$ctx.meta.parser && mimeType === MIME_TYPES.JSON) { - const body = await getRawBody(req); - if (body) { - const json = JSON.parse(body); - req.$params = { ...json, ...req.$params }; - // Keep raw body in meta as we need it for digest header verification - req.$ctx.meta.rawBody = body; - } - req.$ctx.meta.parser = 'json'; + if (mimeType === MIME_TYPES.JSON && req.$ctx.meta.rawBody) { + const json = JSON.parse(req.$ctx.meta.rawBody); + req.$params = { ...json, ...req.$params }; } next(); } catch (e) { + // If JSON parsing failed, ignore next(e); } }; @@ -148,11 +125,11 @@ const parseJson = async (req, res, next) => { const parseFile = (req, res, next) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseFile middleware`); - if (!req.$ctx.meta.parser && (req.method === 'POST' || req.method === 'PUT')) { - if ( - req.$ctx.meta.headers['content-type'] && - req.$ctx.meta.headers['content-type'].includes('multipart/form-data') - ) { + + const contentType = req.$ctx.meta.headers['content-type']; + + if (!handledMimeTypes.includes(contentType) && (req.method === 'POST' || req.method === 'PUT')) { + if (contentType.includes('multipart/form-data')) { const busboy = new Busboy({ headers: req.$ctx.meta.headers }); const files = []; busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { @@ -179,7 +156,7 @@ const parseFile = (req, res, next) => { req.$params.files = [ { readableStream: req, - mimetype: req.$ctx.meta.headers['content-type'] + mimetype: contentType } ]; req.$ctx.meta.parser = 'file'; @@ -198,11 +175,10 @@ const saveDatasetMeta = (req, res, next) => { module.exports = { parseUrl, parseHeader, - parseSparql, + parseRawBody, negotiateContentType, negotiateAccept, parseJson, - parseTurtle, parseFile, saveDatasetMeta, throw400, diff --git a/src/middleware/packages/mime-types/constants.js b/src/middleware/packages/mime-types/constants.js index 94b4b5e14..f1f58a44d 100644 --- a/src/middleware/packages/mime-types/constants.js +++ b/src/middleware/packages/mime-types/constants.js @@ -2,12 +2,13 @@ const MIME_TYPES = { JSON: 'application/ld+json', TURTLE: 'text/turtle', TRIPLE: 'application/n-triples', + SPARQL_UPDATE: 'application/sparql-update', + // Not supported SPARQL_JSON: 'application/sparql-results+json', SPARQL_XML: 'application/sparql-results+xml', CSV: 'text/csv', TSV: 'text/tab-separated-values', - RDF: 'application/rdf+xml', - SPARQL_UPDATE: 'application/sparql-update' + RDF: 'application/rdf+xml' }; const TYPES_REPO = [ diff --git a/src/middleware/packages/solid/services/notifications/listener.js b/src/middleware/packages/solid/services/notifications/listener.js index 1313fe59c..55f7aa8c8 100644 --- a/src/middleware/packages/solid/services/notifications/listener.js +++ b/src/middleware/packages/solid/services/notifications/listener.js @@ -5,7 +5,7 @@ const LinkHeader = require('http-link-header'); const { v4: uuidv4 } = require('uuid'); const DbService = require('moleculer-db'); const { MoleculerError } = require('moleculer').Errors; -const { parseHeader, negotiateContentType, parseJson } = require('@semapps/middlewares'); +const { parseHeader, parseRawBody, negotiateContentType, parseJson } = require('@semapps/middlewares'); const { notify } = require('@semapps/ontologies'); const { TripleStoreAdapter } = require('@semapps/triplestore'); @@ -36,7 +36,13 @@ module.exports = { authorization: false, authentication: false, aliases: { - 'POST /': [parseHeader, negotiateContentType, parseJson, 'solid-notifications.listener.transfer'] + 'POST /': [ + parseHeader, + parseRawBody, + negotiateContentType, + parseJson, + 'solid-notifications.listener.transfer' + ] }, bodyParsers: false } diff --git a/src/middleware/packages/sparql-endpoint/getRoute.js b/src/middleware/packages/sparql-endpoint/getRoute.js index 58223668a..6c63c5fa0 100644 --- a/src/middleware/packages/sparql-endpoint/getRoute.js +++ b/src/middleware/packages/sparql-endpoint/getRoute.js @@ -1,6 +1,6 @@ -const { parseHeader, negotiateAccept, parseSparql, saveDatasetMeta } = require('@semapps/middlewares'); +const { parseHeader, parseRawBody, negotiateAccept, saveDatasetMeta } = require('@semapps/middlewares'); -const middlewares = [parseHeader, parseSparql, negotiateAccept, saveDatasetMeta]; +const middlewares = [parseHeader, parseRawBody, negotiateAccept, saveDatasetMeta]; function getRoute(path) { return { diff --git a/src/middleware/packages/sparql-endpoint/service.js b/src/middleware/packages/sparql-endpoint/service.js index 7bca138f1..199f022fc 100644 --- a/src/middleware/packages/sparql-endpoint/service.js +++ b/src/middleware/packages/sparql-endpoint/service.js @@ -23,7 +23,7 @@ const SparqlEndpointService = { }, actions: { async query(ctx) { - const query = ctx.params.query || ctx.params.body; + const query = ctx.params.query || ctx.meta.rawBody; const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; if (this.settings.podProvider) { diff --git a/src/middleware/packages/webacl/routes/getRoutes.js b/src/middleware/packages/webacl/routes/getRoutes.js index 0aa881163..a6fe797da 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.js +++ b/src/middleware/packages/webacl/routes/getRoutes.js @@ -1,5 +1,5 @@ const path = require('path'); -const { parseHeader, negotiateContentType, negotiateAccept, parseJson } = require('@semapps/middlewares'); +const { parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson } = require('@semapps/middlewares'); const onError = (req, res, err) => { const { type, code, message, data, name } = err; @@ -10,7 +10,7 @@ const onError = (req, res, err) => { }; const getRoutes = (basePath, podProvider) => { - const middlewares = [parseHeader, parseJson, negotiateContentType, negotiateAccept]; + const middlewares = [parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson]; return [ { @@ -25,9 +25,6 @@ const getRoutes = (basePath, podProvider) => { type: ['text/turtle', 'application/ld+json'] } }, - onBeforeCall(ctx, route, req) { - ctx.meta.body = req.body; - }, aliases: { 'PATCH /:slugParts*': [parseHeader, 'webacl.resource.api_addRights'], 'PUT /:slugParts*': [parseHeader, 'webacl.resource.api_setRights'], diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.js b/src/middleware/packages/webacl/services/resource/actions/addRights.js index 8bf22194e..c38aaba6e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.js @@ -18,7 +18,7 @@ module.exports = { if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - const addedRights = await convertBodyToTriples(ctx.meta.body, contentType); + const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); // This is the root container diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.js b/src/middleware/packages/webacl/services/resource/actions/setRights.js index 976880106..ca8304229 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.js @@ -17,7 +17,7 @@ module.exports = { if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - const newRights = await convertBodyToTriples(ctx.meta.body, contentType); + const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); // This is the root container From b8f0c0bb2b5c94a61bd2c5cd4928d9e8c678d2fc Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 29 Jul 2025 13:15:13 +0200 Subject: [PATCH 020/165] Working POST method --- src/middleware/packages/jsonld/package.json | 2 + .../packages/jsonld/services/parser/index.js | 55 ++++++++++++++++++- .../packages/ldp/services/api/actions/post.js | 16 +++++- .../packages/ldp/services/api/actions/put.js | 17 ++++-- .../ldp/services/container/actions/post.js | 9 ++- .../ldp/services/resource/actions/create.js | 15 ++--- .../ldp/services/resource/actions/put.js | 16 +++--- .../packages/ldp/services/resource/methods.js | 20 +------ .../tests/ldp/content-negotiation.test.js | 55 +++++++++++++++++++ 9 files changed, 156 insertions(+), 49 deletions(-) diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index b0908b4b6..6befbda5b 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -8,8 +8,10 @@ "jsonld": "^3.3.2", "jsonld-context-parser": "^2.4.0", "jsonld-streaming-parser": "^2.4.2", + "jsonld-streaming-serializer": "^1.2.0", "lru-cache": "^6.0.0", "n3": "^1.26.0", + "rdf-parse": "^1.7.0", "streamify-string": "^1.0.1", "url-join": "^4.0.1" }, diff --git a/src/middleware/packages/jsonld/services/parser/index.js b/src/middleware/packages/jsonld/services/parser/index.js index 11499ad61..f8ba5082b 100644 --- a/src/middleware/packages/jsonld/services/parser/index.js +++ b/src/middleware/packages/jsonld/services/parser/index.js @@ -1,7 +1,9 @@ const jsonld = require('jsonld'); const N3 = require('n3'); const { JsonLdParser } = require('jsonld-streaming-parser'); +const { JsonLdSerializer } = require('jsonld-streaming-serializer'); const streamifyString = require('streamify-string'); +const rdfParser = require('rdf-parse').default; const { arrayOf, isURI } = require('../../utils/utils'); module.exports = { @@ -12,6 +14,7 @@ module.exports = { this.jsonld.documentLoader = (url, options) => this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); + // Options: https://github.com/rubensworks/jsonld-streaming-parser.js?tab=readme-ov-file#configuration this.jsonLdParser = new JsonLdParser({ documentLoader: { load: url => this.broker.call('jsonld.document-loader.loadWithCache', { url }).then(context => context.document) @@ -39,9 +42,34 @@ module.exports = { const { input, options } = ctx.params; return this.jsonld.normalize(input, options); }, - fromRDF(ctx) { - const { dataset, options } = ctx.params; - return this.jsonld.fromRDF(dataset, options); + async fromRDF(ctx) { + const { input, options = {} } = ctx.params; + const { format } = options; + + if (!format || format === 'application/n-quads') { + return await this.jsonld.fromRDF(input, options); + } else { + const quads = await this.rdfToQuads(input, format); + + const context = await ctx.call('jsonld.context.get'); + + // Options: https://github.com/rubensworks/jsonld-streaming-serializer.js?tab=readme-ov-file#configuration + const jsonLdSerializer = new JsonLdSerializer(); + quads.forEach(quad => jsonLdSerializer.write(quad)); + jsonLdSerializer.end(); + + const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); + + return await this.actions.frame( + { + input: jsonLd, + frame: { '@context': context } + // Force results to be in a @graph, even if we have a single result + // options: { omitGraph: false } + }, + { parentCtx: ctx } + ); + } }, async toRDF(ctx) { const { input, options = {} } = ctx.params; @@ -130,5 +158,26 @@ module.exports = { return expandedTypes; } + }, + methods: { + streamToString(stream) { + let res = ''; + return new Promise((resolve, reject) => { + stream.on('data', chunk => (res += chunk)); + stream.on('error', err => reject(err)); + stream.on('end', () => resolve(res)); + }); + }, + rdfToQuads(input, format) { + return new Promise((resolve, reject) => { + const textStream = streamifyString(input); + const res = []; + rdfParser + .parse(textStream, { contentType: format }) + .on('data', quad => res.push(quad)) + .on('error', error => reject(error)) + .on('end', () => resolve(res)); + }); + } } }; diff --git a/src/middleware/packages/ldp/services/api/actions/post.js b/src/middleware/packages/ldp/services/api/actions/post.js index 22237e777..fe1b4bcdd 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.js +++ b/src/middleware/packages/ldp/services/api/actions/post.js @@ -5,18 +5,28 @@ const mime = require('mime-types'); module.exports = async function post(ctx) { try { - const { username, slugParts, ...resource } = ctx.params; + let { username, slugParts, ...resource } = ctx.params; const containerUri = this.getUriFromSlugParts(slugParts, username); let resourceUri; const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); if (ctx.meta.parser !== 'file') { + const contentType = ctx.meta.headers['content-type']; + + // If the resource is Turtle or N-Triples, first convert it to JSON-LD + if (contentType && contentType !== MIME_TYPES.JSON) { + resource = await ctx.call('jsonld.parser.fromRDF', { + input: ctx.meta.rawBody, + options: { format: contentType } + }); + delete resource['@id']; // Since no URI is provided, the @id will be ./ but that will not work with ldp.container.post + } + resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { containerUri, slug: ctx.meta.headers.slug, - resource, - contentType: ctx.meta.headers['content-type'] + resource }); } else { if (ctx.params.files.length > 1) { diff --git a/src/middleware/packages/ldp/services/api/actions/put.js b/src/middleware/packages/ldp/services/api/actions/put.js index dea3563fd..7316f1b11 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.js +++ b/src/middleware/packages/ldp/services/api/actions/put.js @@ -1,7 +1,8 @@ const { MoleculerError } = require('moleculer').Errors; +const { MIME_TYPES } = require('@semapps/mime-types'); module.exports = async function post(ctx) { - const { username, slugParts, body, ...resource } = ctx.params; + let { username, slugParts, ...resource } = ctx.params; const resourceUri = this.getUriFromSlugParts(slugParts, username); const resourceId = resource['@id'] || resource.id; @@ -19,11 +20,15 @@ module.exports = async function post(ctx) { } try { - await ctx.call(controlledActions.put || 'ldp.resource.put', { - resource, - contentType: ctx.meta.headers['content-type'], - body - }); + const contentType = ctx.meta.headers['content-type']; + + // If the body is in Turtle or N-Triples, first convert it to JSON-LD + if (contentType && contentType !== MIME_TYPES.JSON) { + resource = await ctx.call('jsonld.parser.fromRDF', { input: ctx.meta.rawBody, options: { format: contentType } }); + } + + await ctx.call(controlledActions.put || 'ldp.resource.put', { resource }); + ctx.meta.$statusCode = 204; ctx.meta.$responseHeaders = { Link: '; rel="type"', diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.js index 2f59d19ef..4d7907f2b 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.js @@ -21,7 +21,8 @@ module.exports = { optional: true }, contentType: { - type: 'string' + type: 'string', + optional: true }, webId: { type: 'string', @@ -38,6 +39,9 @@ module.exports = { let isContainer = false; let expandedResource; + if (contentType && contentType !== MIME_TYPES.JSON) + throw new Error(`The ldp.container.post action now only support JSON-LD. Provided: ${contentType}`); + await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Append', webId }); // Remove undefined values as this may cause problems @@ -45,7 +49,7 @@ module.exports = { if (!file) { // Adds the default context, if it is missing - if (contentType === MIME_TYPES.JSON && !resource['@context']) { + if (!resource['@context']) { resource = { '@context': await ctx.call('jsonld.context.get'), ...resource @@ -109,7 +113,6 @@ module.exports = { '@id': resourceUri, ...resource }, - contentType, webId }); } diff --git a/src/middleware/packages/ldp/services/resource/actions/create.js b/src/middleware/packages/ldp/services/resource/actions/create.js index 4612b2596..dff6fe481 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.js +++ b/src/middleware/packages/ldp/services/resource/actions/create.js @@ -10,14 +10,18 @@ module.exports = { optional: true }, contentType: { - type: 'string' + type: 'string', + optional: true } }, async handler(ctx) { - let { resource, contentType, body } = ctx.params; + let { resource, contentType } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourceUri = resource.id || resource['@id']; + if (contentType && contentType !== MIME_TYPES.JSON) + throw new Error(`The ldp.resource.create action now only support JSON-LD. Provided: ${contentType}`); + if (await ctx.call('ldp.remote.isRemote', { resourceUri })) throw new MoleculerError('Remote resources cannot be created', 403, 'FORBIDDEN'); @@ -32,17 +36,14 @@ module.exports = { } // Adds the default context, if it is missing - if (contentType === MIME_TYPES.JSON && !resource['@context']) { + if (!resource['@context']) { resource = { '@context': await ctx.call('jsonld.context.get'), ...resource }; } - if (contentType !== MIME_TYPES.JSON && !resource.body) - throw new MoleculerError('The resource must contain a body member (a string)', 400, 'BAD_REQUEST'); - - let newTriples = await this.bodyToTriples(body || resource, contentType); + let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); // see PUT newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); // see PUT diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.js index 8ae0ecd34..4feb4a9db 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.js +++ b/src/middleware/packages/ldp/services/resource/actions/put.js @@ -12,20 +12,20 @@ module.exports = { type: 'string', optional: true }, - body: { + contentType: { type: 'string', optional: true - }, - contentType: { - type: 'string' } }, async handler(ctx) { - let { resource, contentType, body } = ctx.params; + let { resource, contentType } = ctx.params; let { webId } = ctx.params; webId = webId || ctx.meta.webId || 'anon'; let newData; + if (contentType && contentType !== MIME_TYPES.JSON) + throw new Error(`The ldp.resource.put action now only support JSON-LD. Provided: ${contentType}`); + // Remove undefined values as this may cause problems resource = resource && cleanUndefined(resource); @@ -55,15 +55,15 @@ module.exports = { ); // Adds the default context, if it is missing - if (contentType === MIME_TYPES.JSON && !resource['@context']) { + if (!resource['@context']) { resource = { '@context': await ctx.call('jsonld.context.get'), ...resource }; } - let oldTriples = await this.bodyToTriples(oldData, MIME_TYPES.JSON); - let newTriples = await this.bodyToTriples(body || resource, contentType); + let oldTriples = await ctx.call('jsonld.parser.toQuads', { input: oldData }); + let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); // Filter out triples whose subject is not the resource itself // We don't want to update or delete resources with IDs diff --git a/src/middleware/packages/ldp/services/resource/methods.js b/src/middleware/packages/ldp/services/resource/methods.js index 79e42af46..1e6afcf47 100644 --- a/src/middleware/packages/ldp/services/resource/methods.js +++ b/src/middleware/packages/ldp/services/resource/methods.js @@ -1,9 +1,6 @@ const fs = require('fs'); const bytes = require('bytes'); -const rdfParser = require('rdf-parse').default; -const streamifyString = require('streamify-string'); const { variable } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { MoleculerError } = require('moleculer').Errors; // TODO put each method in a different file (problems with "this" not working) @@ -28,27 +25,12 @@ module.exports = { .on('error', reject); }); }, - async bodyToTriples(body, contentType) { - if (contentType === MIME_TYPES.JSON) { - return await this.broker.call('jsonld.parser.toQuads', { input: body }); - } - if (!(typeof body === 'string')) throw new MoleculerError('no body provided', 400, 'BAD_REQUEST'); - return new Promise((resolve, reject) => { - const textStream = streamifyString(body); - const res = []; - rdfParser - .parse(textStream, { contentType }) - .on('data', quad => res.push(quad)) - .on('error', error => reject(error)) - .on('end', () => resolve(res)); - }); - }, // Filter out triples whose subject is not the resource itself // We don't want to update or delete resources with IDs filterOtherNamedNodes(triples, resourceUri) { return triples.filter(triple => !(triple.subject.termType === 'NamedNode' && triple.subject.value !== resourceUri)); }, - convertBlankNodesToVars(triples, blankNodesVarsMap) { + convertBlankNodesToVars(triples) { return triples.map(triple => { if (triple.subject.termType === 'BlankNode') { triple.subject = variable(triple.subject.value); diff --git a/src/middleware/tests/ldp/content-negotiation.test.js b/src/middleware/tests/ldp/content-negotiation.test.js index 2dc698158..6da9acc46 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.js +++ b/src/middleware/tests/ldp/content-negotiation.test.js @@ -107,4 +107,59 @@ describe('Content negotiation', () => { ) ); }); + + test('Post resource in Turtle format', async () => { + const { headers, status, statusText } = await fetchServer(containerUri, { + method: 'POST', + body: ` + @prefix pair: . + <> a pair:Project; + pair:label "myProject 2" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TURTLE + }) + }); + + expect(status).toBe(201); + + const project2Uri = headers.get('Location'); + + const project2 = await broker.call('ldp.resource.get', { + resourceUri: project2Uri + }); + expect(project2).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project2Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 2' + }); + }); + + test('Post resource in N-Triples format', async () => { + const { headers, status, statusText } = await fetchServer(containerUri, { + method: 'POST', + body: ` + <> . + <> "myProject 3" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TRIPLE + }) + }); + + expect(status).toBe(201); + + const project3Uri = headers.get('Location'); + + const project2 = await broker.call('ldp.resource.get', { + resourceUri: project3Uri + }); + expect(project2).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project3Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 3' + }); + }); }); From 8772a55b670b275f1659567ca61e23117e9e4e18 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 29 Jul 2025 18:06:25 +0200 Subject: [PATCH 021/165] Fix tests --- src/middleware/packages/middlewares/index.js | 21 +++-- .../tests/ldp/content-negotiation.test.js | 89 +++++++++++++++---- 2 files changed, 86 insertions(+), 24 deletions(-) diff --git a/src/middleware/packages/middlewares/index.js b/src/middleware/packages/middlewares/index.js index a4afce71b..893221ac0 100644 --- a/src/middleware/packages/middlewares/index.js +++ b/src/middleware/packages/middlewares/index.js @@ -21,15 +21,22 @@ const parseHeader = async (req, res, next) => { }; const parseRawBody = (req, res, next) => { - let data = ''; - req.on('data', chunk => { - data += chunk; - }); - req.on('end', () => { - if (data.length > 0) req.$ctx.meta.rawBody = data; + const contentType = req.$ctx.meta.headers['content-type']; + // We don't want to parse the raw body for files, otherwise the stream will not be available anymore + if (handledMimeTypes.includes(contentType)) { + let data = ''; + req.on('data', chunk => { + data += chunk; + }); + req.on('end', () => { + if (data.length > 0) req.$ctx.meta.rawBody = data; + req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added + next(); + }); + } else { req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added next(); - }); + } }; const negotiateContentType = (req, res, next) => { diff --git a/src/middleware/tests/ldp/content-negotiation.test.js b/src/middleware/tests/ldp/content-negotiation.test.js index 6da9acc46..929ac1486 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.js +++ b/src/middleware/tests/ldp/content-negotiation.test.js @@ -18,7 +18,7 @@ afterAll(async () => { describe('Content negotiation', () => { const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let resourceUri; + let projectUri, project2Uri, project3Uri; test('Post resource in JSON-LD', async () => { const { headers } = await fetchServer(containerUri, { @@ -33,25 +33,25 @@ describe('Content negotiation', () => { } }); - resourceUri = headers.get('Location'); + projectUri = headers.get('Location'); - expect(resourceUri).not.toBeNull(); + expect(projectUri).not.toBeNull(); }); test('Get resource in Turtle format', async () => { - const { body } = await fetchServer(resourceUri, { + const { body } = await fetchServer(projectUri, { headers: new fetch.Headers({ Accept: MIME_TYPES.TURTLE }) }); - expect(body).toMatch(new RegExp(`<${resourceUri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); }); test('Get resource in N-Triples format', async () => { - const { body } = await fetchServer(resourceUri, { + const { body } = await fetchServer(projectUri, { headers: new fetch.Headers({ Accept: MIME_TYPES.TRIPLE }) @@ -59,13 +59,13 @@ describe('Content negotiation', () => { expect(body).toMatch( new RegExp( - `<${resourceUri}>.* ` + `<${projectUri}>.* ` ) ); expect(body).toMatch( - new RegExp(`<${resourceUri}>.* "myProject"`) + new RegExp(`<${projectUri}>.* "myProject"`) ); - expect(body).toMatch(new RegExp(`<${resourceUri}>.* "myLabel"`)); + expect(body).toMatch(new RegExp(`<${projectUri}>.* "myLabel"`)); }); test('Get container in Turtle format', async () => { @@ -76,9 +76,9 @@ describe('Content negotiation', () => { }); expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:BasicContainer, ldp:Container`)); - expect(body).toMatch(new RegExp(`ldp:contains <${resourceUri}>`)); + expect(body).toMatch(new RegExp(`ldp:contains <${projectUri}>`)); - expect(body).toMatch(new RegExp(`<${resourceUri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); }); @@ -100,16 +100,16 @@ describe('Content negotiation', () => { `<${containerUri}> ` ) ); - expect(body).toMatch(new RegExp(`<${containerUri}> <${resourceUri}>`)); + expect(body).toMatch(new RegExp(`<${containerUri}> <${projectUri}>`)); expect(body).toMatch( new RegExp( - `<${resourceUri}>.* ` + `<${projectUri}>.* ` ) ); }); test('Post resource in Turtle format', async () => { - const { headers, status, statusText } = await fetchServer(containerUri, { + const { headers, status } = await fetchServer(containerUri, { method: 'POST', body: ` @prefix pair: . @@ -123,7 +123,7 @@ describe('Content negotiation', () => { expect(status).toBe(201); - const project2Uri = headers.get('Location'); + project2Uri = headers.get('Location'); const project2 = await broker.call('ldp.resource.get', { resourceUri: project2Uri @@ -137,7 +137,7 @@ describe('Content negotiation', () => { }); test('Post resource in N-Triples format', async () => { - const { headers, status, statusText } = await fetchServer(containerUri, { + const { headers, status } = await fetchServer(containerUri, { method: 'POST', body: ` <> . @@ -150,7 +150,7 @@ describe('Content negotiation', () => { expect(status).toBe(201); - const project3Uri = headers.get('Location'); + project3Uri = headers.get('Location'); const project2 = await broker.call('ldp.resource.get', { resourceUri: project3Uri @@ -162,4 +162,59 @@ describe('Content negotiation', () => { 'pair:label': 'myProject 3' }); }); + + test('Update resource in Turtle format', async () => { + const { status } = await fetchServer(project2Uri, { + method: 'PUT', + body: ` + @prefix pair: . + <${project2Uri}> a pair:Project; + pair:label "myProject 2 - updated" ; + pair:description "A description" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TURTLE + }) + }); + + expect(status).toBe(204); + + const project2 = await broker.call('ldp.resource.get', { + resourceUri: project2Uri + }); + expect(project2).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project2Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 2 - updated', + 'pair:description': 'A description' + }); + }); + + test('Update resource in N-Triples format', async () => { + const { status } = await fetchServer(project3Uri, { + method: 'PUT', + body: ` + <${project3Uri}> . + <${project3Uri}> "myProject 3 - updated" . + <${project3Uri}> "A description" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TRIPLE + }) + }); + + expect(status).toBe(204); + + const project3 = await broker.call('ldp.resource.get', { + resourceUri: project3Uri + }); + expect(project3).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project3Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 3 - updated', + 'pair:description': 'A description' + }); + }); }); From f7fbdfae4e80e040bdbf0052db14d85fac7f1ef3 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 29 Jul 2025 18:06:46 +0200 Subject: [PATCH 022/165] Deprecate contentType on triplestore.insert action --- .../services/activitypub/subservices/object.js | 1 - .../ldp/services/container/actions/create.js | 3 --- .../ldp/services/remote/actions/store.js | 2 -- .../packages/triplestore/actions/insert.js | 18 +++++++++--------- src/middleware/packages/triplestore/adapter.js | 1 - 5 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js index 54066822d..d396a2364 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js @@ -183,7 +183,6 @@ const ObjectService = { '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' } }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } diff --git a/src/middleware/packages/ldp/services/container/actions/create.js b/src/middleware/packages/ldp/services/container/actions/create.js index f4b2661b1..848c4ce07 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.js +++ b/src/middleware/packages/ldp/services/container/actions/create.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { visibility: 'public', params: { @@ -20,7 +18,6 @@ module.exports = { 'http://purl.org/dc/terms/title': title, 'http://purl.org/dc/terms/description': description }, - contentType: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/remote/actions/store.js b/src/middleware/packages/ldp/services/remote/actions/store.js index 18a558419..f2ef5b580 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.js +++ b/src/middleware/packages/ldp/services/remote/actions/store.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { Errors: E } = require('moleculer-web'); const { hasType } = require('../../../utils'); @@ -85,7 +84,6 @@ module.exports = { await ctx.call('triplestore.insert', { resource, graphName, - contentType: MIME_TYPES.JSON, webId: 'system', dataset }); diff --git a/src/middleware/packages/triplestore/actions/insert.js b/src/middleware/packages/triplestore/actions/insert.js index 45adc7c12..e2bc80a63 100644 --- a/src/middleware/packages/triplestore/actions/insert.js +++ b/src/middleware/packages/triplestore/actions/insert.js @@ -30,15 +30,15 @@ module.exports = { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; - const rdf = - contentType === MIME_TYPES.JSON - ? await ctx.call('jsonld.parser.toRDF', { - input: resource, - options: { - format: 'application/n-quads' - } - }) - : resource; + if (contentType && contentType !== MIME_TYPES.JSON) + throw new Error(`The triplestore.insert action now only support JSON-LD. Provided: ${contentType}`); + + const rdf = await ctx.call('jsonld.parser.toRDF', { + input: resource, + options: { + format: 'application/n-quads' + } + }); if (!dataset) throw new Error(`No dataset defined for triplestore insert: ${rdf}`); if (dataset !== '*' && !(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/triplestore/adapter.js b/src/middleware/packages/triplestore/adapter.js index 9ab54b17f..faf9170ec 100644 --- a/src/middleware/packages/triplestore/adapter.js +++ b/src/middleware/packages/triplestore/adapter.js @@ -155,7 +155,6 @@ class TripleStoreAdapter { '@type': this.type, ...resource }, - contentType: MIME_TYPES.JSON, dataset: this.dataset }) .then(() => this.findById(resource['@id'])); From 1586023368a9962cc046c28354e1addad9c067a6 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 30 Jul 2025 11:46:10 +0200 Subject: [PATCH 023/165] Remove unused accept/contentType params and fix all tests --- .../activitypub/mixins/await-activity.js | 2 - .../packages/activitypub/mixins/bot.js | 2 - .../activitypub/subservices/activity.js | 2 - .../services/activitypub/subservices/actor.js | 5 +- .../services/activitypub/subservices/api.js | 2 +- .../subservices/collection/actions/get.js | 1 - .../subservices/collection/index.js | 1 - .../activitypub/subservices/object.js | 5 +- .../activitypub/subservices/side-effects.js | 2 - .../packages/activitypub/services/relay.js | 2 - .../packages/auth/services/migration.js | 3 +- src/middleware/packages/crypto/keys/keys.js | 31 +-- .../packages/crypto/keys/migration.js | 2 - .../packages/crypto/signature/keypair.js | 2 - .../verifiable-credentials/vc-api-service.js | 4 +- .../vc-holder-service.js | 7 +- .../vc-issuer-service.js | 6 +- .../packages/importer/mixins/importer.js | 3 - .../packages/importer/mixins/wordpress.js | 2 - src/middleware/packages/ldp/adapter.js | 13 +- .../ldp/mixins/controlled-container.js | 2 - .../packages/ldp/mixins/dereference.js | 4 +- .../packages/ldp/mixins/disassembly.js | 25 +-- .../packages/ldp/mixins/image-processor.js | 1 - .../ldp/mixins/single-resource-container.js | 6 +- .../packages/ldp/mixins/special-endpoint.js | 14 +- .../packages/ldp/routes/getCatchAllRoute.js | 2 +- .../packages/ldp/routes/getPodsRoute.js | 2 +- .../packages/ldp/services/cache/index.js | 4 +- .../ldp/services/container/actions/get.js | 3 +- .../resource/actions/awaitCreateComplete.js | 2 - .../ldp/services/resource/actions/create.js | 1 - .../ldp/services/resource/actions/delete.js | 2 - .../ldp/services/resource/actions/put.js | 2 - src/middleware/packages/middlewares/index.js | 103 +++++----- .../channels/notification-channel.mixin.js | 1 - .../solid/services/notifications/listener.js | 2 +- .../solid/services/type-index/type-indexes.js | 2 - .../services/type-index/type-registrations.js | 9 +- .../packages/sparql-endpoint/getRoute.js | 10 +- .../packages/triplestore/actions/insert.js | 21 +- .../packages/webacl/bots/groups-manager.js | 2 - .../packages/webacl/routes/getRoutes.js | 2 +- .../services/resource/actions/addRights.js | 11 +- src/middleware/packages/webid/service.js | 5 - .../tests/activitypub/collection-api.test.js | 4 +- .../tests/activitypub/collection.test.js | 14 +- src/middleware/tests/activitypub/like.test.js | 3 +- .../tests/activitypub/message.test.js | 19 +- .../tests/activitypub/object.test.js | 18 +- .../tests/activitypub/outbox.test.js | 3 - .../tests/activitypub/shares.test.js | 7 +- src/middleware/tests/crypto/keys.test.js | 53 +---- .../crypto/verifiable-credentials.test.js | 3 +- .../tests/interop/mirror-protected.test.js | 2 - src/middleware/tests/interop/mirror.test.js | 5 +- .../tests/interop/patch-remote.test.js | 5 +- .../tests/interop/remote-inference.test.js | 26 +-- src/middleware/tests/ldp/binary.test.js | 8 +- src/middleware/tests/ldp/container.test.js | 26 +-- src/middleware/tests/ldp/resource.test.js | 194 ++++-------------- src/middleware/tests/webacl/resource.test.js | 13 -- .../tests/webacl/resourceCRUD.test.js | 6 +- src/middleware/tests/webacl/utils.test.js | 2 - 64 files changed, 196 insertions(+), 550 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/await-activity.js b/src/middleware/packages/activitypub/mixins/await-activity.js index df075034a..c4f24033b 100644 --- a/src/middleware/packages/activitypub/mixins/await-activity.js +++ b/src/middleware/packages/activitypub/mixins/await-activity.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { delay } = require('../utils'); const matchActivity = require('../utils/matchActivity'); @@ -20,7 +19,6 @@ const AwaitActivityMixin = { try { const resource = await ctx.call('ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }); return resource; // First get the resource, then return it, otherwise the try/catch will not work diff --git a/src/middleware/packages/activitypub/mixins/bot.js b/src/middleware/packages/activitypub/mixins/bot.js index 7bd12daa6..dbe8facd6 100644 --- a/src/middleware/packages/activitypub/mixins/bot.js +++ b/src/middleware/packages/activitypub/mixins/bot.js @@ -1,5 +1,4 @@ const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { arrayOf } = require('@semapps/ldp'); const { ACTOR_TYPES } = require('../constants'); const { getSlugFromUri, getContainerFromUri } = require('../utils'); @@ -54,7 +53,6 @@ const BotMixin = { preferredUsername: actorSettings.username, name: actorSettings.name }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js index b7ae2531f..128654d97 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js @@ -1,6 +1,5 @@ const { Errors: E } = require('moleculer-web'); const { ControlledContainerMixin } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); const setRightsHandler = require('./activity-handlers/setRightsHandler'); const { objectCurrentToId, objectIdToCurrent, arrayOf } = require('../../../utils'); const { PUBLIC_URI, FULL_ACTIVITY_TYPES } = require('../../../constants'); @@ -15,7 +14,6 @@ const ActivityService = { // ControlledContainerMixin settings path: '/as/activity', acceptedTypes: Object.values(FULL_ACTIVITY_TYPES), - accept: MIME_TYPES.JSON, permissions: {}, newResourcesPermissions: {}, readOnly: true, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js index b676d1a3f..d7474f190 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js @@ -1,6 +1,5 @@ const fetch = require('node-fetch'); const { namedNode, literal, triple, variable } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { arrayOf } = require('@semapps/ldp'); const { ACTOR_TYPES, AS_PREFIX } = require('../../../constants'); const { getSlugFromUri, waitForResource } = require('../../../utils'); @@ -21,7 +20,7 @@ const ActorService = { if (ctx.meta.dataset && !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { try { // Don't return immediately the promise, or we won't be able to catch errors - const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, accept: MIME_TYPES.JSON, webId }); + const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, webId }); return actor; } catch (e) { console.error(e); @@ -39,7 +38,7 @@ const ActorService = { const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); // If the URL is not in the same domain as the actor, it is most likely not a profile if (actor.url && new URL(actor.url).host === new URL(actorUri).host) { - return await ctx.call('ldp.resource.get', { resourceUri: actor.url, accept: MIME_TYPES.JSON, webId }); + return await ctx.call('ldp.resource.get', { resourceUri: actor.url, webId }); } }, async appendActorData(ctx) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.js b/src/middleware/packages/activitypub/services/activitypub/subservices/api.js index 9d087d7f6..e801359fb 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.js @@ -97,9 +97,9 @@ const ApiService = { const middlewares = [ parseUrl, parseHeader, - parseRawBody, negotiateContentType, negotiateAccept, + parseRawBody, parseJson, parseFile, saveDatasetMeta diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js index facdb72a5..af3919fb0 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js @@ -175,7 +175,6 @@ async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, curso try { let item = await ctx.call('ldp.resource.get', { resourceUri: itemUri, - accept: MIME_TYPES.JSON, webId: ctx.meta.impersonatedUser || webId }); delete item['@context']; // Don't keep the items individual context diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js index 0b773cdb5..19eaad5df 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js @@ -16,7 +16,6 @@ const CollectionService = { 'https://www.w3.org/ns/activitystreams#Collection', 'https://www.w3.org/ns/activitystreams#OrderedCollection' ], - accept: MIME_TYPES.JSON, activateTombstones: false, permissions: {}, // These default permissions can be overridden by providing diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js index d396a2364..91c951a9d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js @@ -20,8 +20,7 @@ const ObjectService = { return await ctx.call('ldp.resource.get', { resourceUri: objectUri, webId: actorUri, - ...rest, - accept: MIME_TYPES.JSON + ...rest }); }, // If an object is passed directly, wrap it in a Create activity @@ -90,7 +89,6 @@ const ObjectService = { { containerUri, resource: activity.object, - contentType: MIME_TYPES.JSON, webId: actorUri }, { @@ -114,7 +112,6 @@ const ObjectService = { controlledActions?.put || 'ldp.resource.put', { resource: activity.object, - contentType: MIME_TYPES.JSON, webId: actorUri }, { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js index 89eb19b8f..743d3f35b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js @@ -1,6 +1,5 @@ const { credentialsContext } = require('@semapps/crypto'); const { arrayOf } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); const matchActivity = require('../../../utils/matchActivity'); /** @@ -74,7 +73,6 @@ module.exports = { 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { meta: { dataset } } diff --git a/src/middleware/packages/activitypub/services/relay.js b/src/middleware/packages/activitypub/services/relay.js index 0d005c43c..c9a29be3e 100644 --- a/src/middleware/packages/activitypub/services/relay.js +++ b/src/middleware/packages/activitypub/services/relay.js @@ -1,5 +1,4 @@ const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { ACTOR_TYPES } = require('../constants'); const { delay } = require('../utils'); @@ -57,7 +56,6 @@ const RelayService = { preferredUsername: actorSettings.username, name: actorSettings.name }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { diff --git a/src/middleware/packages/auth/services/migration.js b/src/middleware/packages/auth/services/migration.js index f37dfff67..f42dc615d 100644 --- a/src/middleware/packages/auth/services/migration.js +++ b/src/middleware/packages/auth/services/migration.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { getSlugFromUri } = require('@semapps/ldp'); module.exports = { @@ -7,7 +6,7 @@ module.exports = { async migrateUsersToAccounts(ctx) { const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; - const results = await ctx.call('ldp.container.get', { containerUri: usersContainer, accept: MIME_TYPES.JSON }); + const results = await ctx.call('ldp.container.get', { containerUri: usersContainer }); for (const user of results['ldp:contains']) { if (user[emailPredicate]) { diff --git a/src/middleware/packages/crypto/keys/keys.js b/src/middleware/packages/crypto/keys/keys.js index f70a4fb3a..bab0d9979 100644 --- a/src/middleware/packages/crypto/keys/keys.js +++ b/src/middleware/packages/crypto/keys/keys.js @@ -84,10 +84,7 @@ const KeysService = { const webId = ctx.params.webId || ctx.meta.webId; // Get the key container, to search by type. - const container = await ctx.call('keys.container.list', { - webId, - accept: MIME_TYPES.JSON - }); + const container = await ctx.call('keys.container.list', { webId }); // Check if key type is present. const matchedKeys = container['ldp:contains'].filter( @@ -112,7 +109,7 @@ const KeysService = { }, async handler(ctx) { const { keyType, webId } = ctx.params; - const webIdDoc = await ctx.call('webid.get', { resourceUri: webId, accept: MIME_TYPES.JSON, webId: 'system' }); + const webIdDoc = await ctx.call('webid.get', { resourceUri: webId, webId: 'system' }); // RSA keys are stored in `publicKey` field, everything else in `assertionMethod` const publicKeys = @@ -135,7 +132,6 @@ const KeysService = { const publicKeyId = key.id || key['@id']; return await ctx.call('keys.container.get', { resourceUri: await this.actions.findPrivateKeyUri({ publicKeyUri: publicKeyId }, { parentCtx: ctx }), - accept: MIME_TYPES.JSON, webId }); }) @@ -164,7 +160,7 @@ const KeysService = { // Note: Key purposes are not regarded, as they are currently not used. const keyObject = ctx.params.keyObject || keyId - ? await ctx.call('keys.container.get', { resourceUri: keyId, webId, accept: MIME_TYPES.JSON }) + ? await ctx.call('keys.container.get', { resourceUri: keyId, webId }) : (await ctx.call('keys.getOrCreateWebIdKeys', { webId, keyType }))[0]; // We need the key object to have the public key's id, so it is resolvable. @@ -208,8 +204,7 @@ const KeysService = { }; const keyUri = await ctx.call('keys.container.post', { webId, - resource: keyObject, - contentType: MIME_TYPES.JSON + resource: keyObject }); keyObject.id = keyUri; @@ -334,9 +329,7 @@ const KeysService = { const keyId = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; if (!keyId) throw new Error('Either keyId or keyObject with id must be given.'); - const keyObject = - ctx.params.keyObject || - (await ctx.call('ldp.resource.get', { resourceUri: keyId, accept: MIME_TYPES.JSON, webId })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: keyId, webId })); const isRsaKey = arrayOf(keyObject.type || keyObject['@type']).includes(KEY_TYPES.RSA); @@ -347,7 +340,6 @@ const KeysService = { const webIdDocument = await ctx.call('webid.get', { resourceUri: webId, - accept: MIME_TYPES.JSON, webId: webId }); // Ensure the same public key is not attached already. @@ -414,9 +406,7 @@ const KeysService = { async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; const privateKeyUri = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; - const keyObject = - ctx.params.keyObject || - (await ctx.call('ldp.resource.get', { resourceUri: privateKeyUri, accept: MIME_TYPES.JSON })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: privateKeyUri })); // First, get the public key part. const publicKeyObject = await this.actions.getPublicKeyObject({ keyObject }, { parentCtx: ctx }); @@ -424,7 +414,6 @@ const KeysService = { // Then, store it in the `/public-key` container. const publicKeyUri = await ctx.call('keys.public-container.post', { resource: publicKeyObject, - contentType: MIME_TYPES.JSON, webId: webId }); @@ -456,8 +445,7 @@ const KeysService = { async handler(ctx) { const resourceUri = ctx.params.resourceUri || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; const webId = ctx.params.webId || ctx.meta.webId; - const keyObject = - ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri, accept: MIME_TYPES.JSON, webId })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri, webId })); await ctx.call('keys.container.delete', { resourceUri, webId }); // Delete corresponding public key in the `public-key` container, if present. @@ -481,7 +469,7 @@ const KeysService = { }, async handler(ctx) { const { webId } = ctx.params; - const keys = await ctx.call('keys.container.list', { webId, accept: MIME_TYPES.JSON }); + const keys = await ctx.call('keys.container.list', { webId }); for (const key of keys['ldp:contains']) { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } @@ -551,8 +539,7 @@ const KeysService = { }, async handler(ctx) { const keyId = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; - const keyObject = - ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: keyId, accept: MIME_TYPES.JSON })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: keyId })); const keyType = keyObject['@type'] || keyObject.type; diff --git a/src/middleware/packages/crypto/keys/migration.js b/src/middleware/packages/crypto/keys/migration.js index 860019caa..0fda90f08 100644 --- a/src/middleware/packages/crypto/keys/migration.js +++ b/src/middleware/packages/crypto/keys/migration.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const fs = require('fs'); const path = require('path'); const { KEY_TYPES } = require('../constants'); @@ -161,7 +160,6 @@ module.exports = { }; const keyId = await ctx.call('keys.container.post', { resource: keyResource, - contentType: MIME_TYPES.JSON, webId }); keyResource.id = keyId; diff --git a/src/middleware/packages/crypto/signature/keypair.js b/src/middleware/packages/crypto/signature/keypair.js index cbbfc458c..8858e1abf 100644 --- a/src/middleware/packages/crypto/signature/keypair.js +++ b/src/middleware/packages/crypto/signature/keypair.js @@ -3,7 +3,6 @@ const path = require('path'); const fetch = require('node-fetch'); const { generateKeyPair } = require('crypto'); const { namedNode, blankNode, literal, triple } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { KEY_TYPES } = require('../constants'); /** @@ -107,7 +106,6 @@ const SignatureService = { const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, - accept: MIME_TYPES.JSON, webId: actorUri }); diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js index 7d603ec11..a669e15be 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js @@ -1,8 +1,8 @@ -const { parseHeader, parseRawBody, negotiateAccept, parseJson } = require('@semapps/middlewares'); +const { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } = require('@semapps/middlewares'); const path = require('node:path'); const { VC_API_PATH } = require('../constants'); -const middlewares = [parseHeader, parseRawBody, parseJson, negotiateAccept]; +const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; /** * diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js index cc2d8940a..7ab3c3127 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js @@ -1,5 +1,4 @@ const { randomUUID } = require('node:crypto'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); @@ -115,7 +114,7 @@ const VCHolderService = { if (!presentationParam.id && ctx.params.options.persist) await ctx.call( 'crypto.vc.holder.presentation-container.put', - { resource: signedPresentation, contentType: MIME_TYPES.JSON, webId: 'system' }, + { resource: signedPresentation, webId: 'system' }, { meta: { skipEmitEvent: true } } ); @@ -130,15 +129,13 @@ const VCHolderService = { // Post presentation to container (will add metadata). const resourceUri = await this.broker.call('crypto.vc.holder.presentation-container.post', { resource: presentation, - contentType: MIME_TYPES.JSON, webId }); // Get the presentation resource. const resource = await this.broker.call('crypto.vc.holder.presentation-container.get', { resourceUri, - webId: 'system', - accept: MIME_TYPES.JSON + webId: 'system' }); // Set resource rights. diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js index 670e6f6a2..4a685e579 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js @@ -127,7 +127,7 @@ const VCCredentialService = { if (!receivedCredential.id) await ctx.call( 'crypto.vc.issuer.credential-container.put', - { resource: signedCredential, contentType: MIME_TYPES.JSON, webId: 'system' }, + { resource: signedCredential, webId: 'system' }, { meta: { skipEmitEvent: true } } ); @@ -140,7 +140,6 @@ const VCCredentialService = { async createCredentialResource(credential, noAnonRead, webId) { const resourceUri = await this.broker.call('crypto.vc.issuer.credential-container.post', { resource: credential, - contentType: MIME_TYPES.JSON, webId }); @@ -148,8 +147,7 @@ const VCCredentialService = { const resource = await this.broker.call('crypto.vc.issuer.credential-container.get', { resourceUri, jsonContext: credentialsContext, - webId: 'system', - accept: MIME_TYPES.JSON + webId: 'system' }); // Set resource rights. diff --git a/src/middleware/packages/importer/mixins/importer.js b/src/middleware/packages/importer/mixins/importer.js index 847b02be6..5ef4a59b5 100644 --- a/src/middleware/packages/importer/mixins/importer.js +++ b/src/middleware/packages/importer/mixins/importer.js @@ -197,7 +197,6 @@ module.exports = { if (destUri) { const oldData = await ctx.call('ldp.resource.get', { resourceUri: destUri, - accept: MIME_TYPES.JSON, webId: 'system' }); @@ -225,7 +224,6 @@ module.exports = { 'dc:modified': resource['dc:modified'] || this.getField('updated', data), 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { @@ -257,7 +255,6 @@ module.exports = { 'dc:modified': resource['dc:modified'] || this.getField('updated', data), 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { diff --git a/src/middleware/packages/importer/mixins/wordpress.js b/src/middleware/packages/importer/mixins/wordpress.js index f07fbedbb..ecf89de84 100644 --- a/src/middleware/packages/importer/mixins/wordpress.js +++ b/src/middleware/packages/importer/mixins/wordpress.js @@ -1,7 +1,6 @@ const urlJoin = require('url-join'); const fetch = require('node-fetch'); const { getSlugFromUri, delay } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); const ImporterMixin = require('./importer'); module.exports = { @@ -90,7 +89,6 @@ module.exports = { readableStream: response.body, mimetype: mediaData.mime_type }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } else { diff --git a/src/middleware/packages/ldp/adapter.js b/src/middleware/packages/ldp/adapter.js index b2b84644b..461c9e9dd 100644 --- a/src/middleware/packages/ldp/adapter.js +++ b/src/middleware/packages/ldp/adapter.js @@ -1,6 +1,5 @@ const urlJoin = require('url-join'); const { ServiceSchemaError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); class LdpAdapter { constructor({ resourceService = 'ldp.resource', containerService = 'ldp.container' } = {}) { @@ -50,8 +49,7 @@ class LdpAdapter { return this.broker.call(`${this.containerService}.get`, { containerUri: this.service.schema.settings.containerUri, filters: filters.query, - jsonContext: this.service.schema.settings.context, - accept: MIME_TYPES.JSON + jsonContext: this.service.schema.settings.context }); } @@ -71,8 +69,7 @@ class LdpAdapter { } return this.broker.call(`${this.resourceService}.get`, { resourceUri: _id, - jsonContext: this.service.schema.settings.context, - accept: MIME_TYPES.JSON + jsonContext: this.service.schema.settings.context }); } @@ -108,8 +105,7 @@ class LdpAdapter { '@context': this.service.schema.settings.context, ...resource }, - slug, - contentType: MIME_TYPES.JSON + slug }) .then(resourceUri => { this.broker.call(`${this.containerService}.attach`, { @@ -152,8 +148,7 @@ class LdpAdapter { '@context': this.service.schema.settings.context, '@id': _id, ...resource - }, - contentType: MIME_TYPES.JSON + } }) .then(resourceUri => this.findById(resourceUri)); } diff --git a/src/middleware/packages/ldp/mixins/controlled-container.js b/src/middleware/packages/ldp/mixins/controlled-container.js index 5258235b7..0b64b348e 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.js +++ b/src/middleware/packages/ldp/mixins/controlled-container.js @@ -1,11 +1,9 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { delay, getParentContainerUri } = require('../utils'); module.exports = { settings: { path: null, acceptedTypes: null, - accept: MIME_TYPES.JSON, permissions: null, newResourcesPermissions: null, controlledActions: {}, diff --git a/src/middleware/packages/ldp/mixins/dereference.js b/src/middleware/packages/ldp/mixins/dereference.js index fc475ca9b..fef345fd6 100644 --- a/src/middleware/packages/ldp/mixins/dereference.js +++ b/src/middleware/packages/ldp/mixins/dereference.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { isObject, arrayOf } = require('../utils'); /** @@ -54,8 +53,7 @@ module.exports = { // Get the resource. try { let result = await ctx.call('ldp.resource.get', { - resourceUri, - accept: MIME_TYPES.JSON + resourceUri }); // Delete the context from the result delete result['@context']; diff --git a/src/middleware/packages/ldp/mixins/disassembly.js b/src/middleware/packages/ldp/mixins/disassembly.js index 4f3cb6421..cb5bce8a5 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.js +++ b/src/middleware/packages/ldp/mixins/disassembly.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { arrayOf } = require('../utils'); module.exports = { @@ -13,21 +12,16 @@ module.exports = { hooks: { before: { async create(ctx) { - const { resource, contentType } = ctx.params; - if (contentType === MIME_TYPES.JSON) { - await this.createDisassembly(ctx, resource); - } + const { resource } = ctx.params; + await this.createDisassembly(ctx, resource); }, async put(ctx) { - const { resource, contentType } = ctx.params; - if (contentType === MIME_TYPES.JSON) { - const oldData = await ctx.call('ldp.resource.get', { - resourceUri: resource.id || resource['@id'], - accept: MIME_TYPES.JSON, - webId: 'system' - }); - await this.updateDisassembly(ctx, resource, oldData); - } + const { resource } = ctx.params; + const oldData = await ctx.call('ldp.resource.get', { + resourceUri: resource.id || resource['@id'], + webId: 'system' + }); + await this.updateDisassembly(ctx, resource, oldData); } }, after: { @@ -54,7 +48,6 @@ module.exports = { '@context': newData['@context'], ...resourceWithoutId }, - contentType: MIME_TYPES.JSON, webId: 'system' }); uriAdded.push({ '@id': newResourceUri, '@type': '@id' }); @@ -92,7 +85,6 @@ module.exports = { '@context': newData['@context'], ...resource }, - contentType: MIME_TYPES.JSON, webId: 'system' }); uriAdded.push({ '@id': newResourceUri, '@type': '@id' }); @@ -122,7 +114,6 @@ module.exports = { '@context': newData['@context'], ...resource }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (error) { diff --git a/src/middleware/packages/ldp/mixins/image-processor.js b/src/middleware/packages/ldp/mixins/image-processor.js index 601fcc2d2..d0bf42579 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.js +++ b/src/middleware/packages/ldp/mixins/image-processor.js @@ -27,7 +27,6 @@ module.exports = { const metadata = await ctx.call('ldp.resource.get', { resourceUri, jsonContext: { '@vocab': 'http://semapps.org/ns/core#' }, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.js b/src/middleware/packages/ldp/mixins/single-resource-container.js index 6ef8498f5..1428b5589 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.js +++ b/src/middleware/packages/ldp/mixins/single-resource-container.js @@ -1,5 +1,4 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); const ControlledContainerMixin = require('./controlled-container'); const { delay } = require('../utils'); @@ -30,10 +29,7 @@ module.exports = { let resource = this.settings.initialValue; if (!resource.type && !resource['@type']) resource.type = this.settings.acceptedTypes; - return await this.actions.post( - { containerUri, resource, contentType: MIME_TYPES.JSON, webId }, - { parentCtx: ctx } - ); + return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); }, async getResourceUri(ctx) { const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.js b/src/middleware/packages/ldp/mixins/special-endpoint.js index d7df4bc8e..0bed40885 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.js +++ b/src/middleware/packages/ldp/mixins/special-endpoint.js @@ -1,7 +1,13 @@ const urlJoin = require('url-join'); const { namedNode, triple } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { parseUrl, parseHeader, parseRawBody, negotiateAccept, parseJson } = require('@semapps/middlewares'); +const { + parseUrl, + parseHeader, + parseRawBody, + negotiateAccept, + negotiateContentType, + parseJson +} = require('@semapps/middlewares'); module.exports = { settings: { @@ -18,7 +24,7 @@ module.exports = { if (!this.settings.settingsDataset) throw new Error(`The settingsDataset must be specified for service ${this.name}`); - const middlewares = [parseUrl, parseHeader, parseRawBody, negotiateAccept, parseJson]; + const middlewares = [parseUrl, parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; let aliases = {}; aliases['GET /'] = [...middlewares, `${this.name}.endpointGet`]; @@ -51,7 +57,6 @@ module.exports = { id: this.endpointUrl, ...this.settings.endpoint.initialData }, - contentType: MIME_TYPES.JSON, webId: 'system' }, { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } @@ -79,7 +84,6 @@ module.exports = { 'ldp.resource.get', { resourceUri: this.endpointUrl, - accept: ctx.meta.headers?.accept, webId: 'system' }, { meta: { dataset: this.settings.settingsDataset } } diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.js b/src/middleware/packages/ldp/routes/getCatchAllRoute.js index 9d38edf56..1b7e16238 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.js +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.js @@ -14,9 +14,9 @@ function getCatchAllRoute(basePath, podProvider) { const middlewares = [ parseUrl, parseHeader, - parseRawBody, negotiateContentType, negotiateAccept, + parseRawBody, parseJson, parseFile, saveDatasetMeta diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.js b/src/middleware/packages/ldp/routes/getPodsRoute.js index 5e98da623..6c9d379c3 100644 --- a/src/middleware/packages/ldp/routes/getPodsRoute.js +++ b/src/middleware/packages/ldp/routes/getPodsRoute.js @@ -27,9 +27,9 @@ function getPodsRoute(basePath) { const middlewares = [ parseUrl, parseHeader, - parseRawBody, negotiateContentType, negotiateAccept, + parseRawBody, parseJson, parseFile, saveDatasetMeta, diff --git a/src/middleware/packages/ldp/services/cache/index.js b/src/middleware/packages/ldp/services/cache/index.js index 11cb6f608..ed80f0259 100644 --- a/src/middleware/packages/ldp/services/cache/index.js +++ b/src/middleware/packages/ldp/services/cache/index.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { name: 'ldp.cache', dependencies: ['ldp.container'], @@ -8,7 +6,7 @@ module.exports = { const containersUris = await ctx.call('ldp.container.getAll'); for (const containerUri of containersUris) { try { - await ctx.call('ldp.container.get', { containerUri, accept: MIME_TYPES.JSON }); + await ctx.call('ldp.container.get', { containerUri }); this.logger.info(`Generated cache for container ${containerUri}`); } catch (e) { this.logger.warn(`Error when generating cache for container ${containerUri}`); diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.js index 7e09e44fa..206975243 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.js +++ b/src/middleware/packages/ldp/services/container/actions/get.js @@ -71,8 +71,7 @@ module.exports = { cleanUndefined({ resourceUri, webId, - jsonContext, - accept + jsonContext }) ); diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js index fc967d125..56eaa0f2c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { waitForResource } = require('../../../utils'); /** @type {import('moleculer').ServiceActionsSchema} */ @@ -27,7 +26,6 @@ module.exports = { 'ldp.resource.get', { resourceUri: resourceUri, - accept: MIME_TYPES.JSON, webId, ...rest }, diff --git a/src/middleware/packages/ldp/services/resource/actions/create.js b/src/middleware/packages/ldp/services/resource/actions/create.js index dff6fe481..ec05a017a 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.js +++ b/src/middleware/packages/ldp/services/resource/actions/create.js @@ -72,7 +72,6 @@ module.exports = { (controlledActions && controlledActions.get) || 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId: 'system' // Avoid errors if the resource creator has no read rights }, { meta: { $cache: false } } diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.js index b500353f4..8b85badce 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.js +++ b/src/middleware/packages/ldp/services/resource/actions/delete.js @@ -1,5 +1,4 @@ const fs = require('fs'); -const { MIME_TYPES } = require('@semapps/mime-types'); module.exports = { visibility: 'public', @@ -23,7 +22,6 @@ module.exports = { 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.js index 4feb4a9db..7e85d0abd 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.js +++ b/src/middleware/packages/ldp/services/resource/actions/put.js @@ -44,7 +44,6 @@ module.exports = { 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { @@ -123,7 +122,6 @@ module.exports = { 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { diff --git a/src/middleware/packages/middlewares/index.js b/src/middleware/packages/middlewares/index.js index 893221ac0..314668ccb 100644 --- a/src/middleware/packages/middlewares/index.js +++ b/src/middleware/packages/middlewares/index.js @@ -20,31 +20,11 @@ const parseHeader = async (req, res, next) => { next(); }; -const parseRawBody = (req, res, next) => { - const contentType = req.$ctx.meta.headers['content-type']; - // We don't want to parse the raw body for files, otherwise the stream will not be available anymore - if (handledMimeTypes.includes(contentType)) { - let data = ''; - req.on('data', chunk => { - data += chunk; - }); - req.on('end', () => { - if (data.length > 0) req.$ctx.meta.rawBody = data; - req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added - next(); - }); - } else { - req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added - next(); - } -}; - const negotiateContentType = (req, res, next) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateContentType middleware`); - if (!req.$ctx.meta.rawBodyParsed) - throw new Error(`The parseRawBody middleware must be added before the parseJson middleware`); + req.$ctx.meta.contentTypeNegotiated = true; if (req.$ctx.meta.headers['content-type'] !== undefined && req.method !== 'DELETE') { try { @@ -64,28 +44,10 @@ const negotiateContentType = (req, res, next) => { } }; -/** @type {(msg: string) => never} */ -const throw400 = msg => { - throw new MoleculerError(msg, 400, 'BAD_REQUEST', { status: 'Bad Request', text: msg }); -}; - -/** @type {(msg: string) => never} */ -const throw403 = msg => { - throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED', { status: 'Forbidden', text: msg }); -}; - -/** @type {(msg: string) => never} */ -const throw404 = msg => { - throw new MoleculerError('Forbidden', 404, 'NOT_FOUND', { status: 'Not found', text: msg }); -}; - -const throw500 = msg => { - throw new MoleculerError(msg, 500, 'INTERNAL_SERVER_ERROR', { status: 'Server Error', text: msg }); -}; - const negotiateAccept = (req, res, next) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateAccept middleware`); + if (req.$ctx.meta.headers.accept === '*/*') { delete req.$ctx.meta.headers.accept; } @@ -101,6 +63,27 @@ const negotiateAccept = (req, res, next) => { } }; +const parseRawBody = (req, res, next) => { + if (!req.$ctx.meta.contentTypeNegotiated) + throw new Error(`The negotiateContentType middleware must be added before the parseRawBody middleware`); + + // We don't want to parse the raw body for files, otherwise the stream will not be available anymore + if (handledMimeTypes.includes(req.$ctx.meta.headers['content-type'])) { + let data = ''; + req.on('data', chunk => { + data += chunk; + }); + req.on('end', () => { + if (data.length > 0) req.$ctx.meta.rawBody = data; + req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added + next(); + }); + } else { + req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added + next(); + } +}; + const parseJson = async (req, res, next) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseJson middleware`); @@ -108,25 +91,16 @@ const parseJson = async (req, res, next) => { if (!req.$ctx.meta.rawBodyParsed) throw new Error(`The parseRawBody middleware must be added before the parseJson middleware`); - let mimeType = null; - try { - if (req.$ctx.meta.headers['content-type']) { - mimeType = negotiateTypeMime(req.$ctx.meta.headers['content-type']); - } - } catch (e) { - // Do nothing if mime type is not found - } - - try { - if (mimeType === MIME_TYPES.JSON && req.$ctx.meta.rawBody) { + if (req.$ctx.meta.headers['content-type'] === MIME_TYPES.JSON && req.$ctx.meta.rawBody) { + try { const json = JSON.parse(req.$ctx.meta.rawBody); req.$params = { ...json, ...req.$params }; + } catch (e) { + // If JSON parsing failed, ignore } - next(); - } catch (e) { - // If JSON parsing failed, ignore - next(e); } + + next(); }; const parseFile = (req, res, next) => { @@ -179,6 +153,25 @@ const saveDatasetMeta = (req, res, next) => { next(); }; +/** @type {(msg: string) => never} */ +const throw400 = msg => { + throw new MoleculerError(msg, 400, 'BAD_REQUEST', { status: 'Bad Request', text: msg }); +}; + +/** @type {(msg: string) => never} */ +const throw403 = msg => { + throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED', { status: 'Forbidden', text: msg }); +}; + +/** @type {(msg: string) => never} */ +const throw404 = msg => { + throw new MoleculerError('Forbidden', 404, 'NOT_FOUND', { status: 'Not found', text: msg }); +}; + +const throw500 = msg => { + throw new MoleculerError(msg, 500, 'INTERNAL_SERVER_ERROR', { status: 'Server Error', text: msg }); +}; + module.exports = { parseUrl, parseHeader, diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js index 56876d4fd..93dcd52cd 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js @@ -120,7 +120,6 @@ module.exports = { 'notify:sendTo': sendTo, 'notify:receiveFrom': receiveFrom }, - contentType: MIME_TYPES.JSON, webId: 'system' }, { parentCtx: ctx } diff --git a/src/middleware/packages/solid/services/notifications/listener.js b/src/middleware/packages/solid/services/notifications/listener.js index 55f7aa8c8..1673dea8c 100644 --- a/src/middleware/packages/solid/services/notifications/listener.js +++ b/src/middleware/packages/solid/services/notifications/listener.js @@ -38,8 +38,8 @@ module.exports = { aliases: { 'POST /': [ parseHeader, - parseRawBody, negotiateContentType, + parseRawBody, parseJson, 'solid-notifications.listener.transfer' ] diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.js b/src/middleware/packages/solid/services/type-index/type-indexes.js index a602d72f2..661e06b86 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.js +++ b/src/middleware/packages/solid/services/type-index/type-indexes.js @@ -37,7 +37,6 @@ module.exports = { resource: { type: ['solid:TypeIndex', 'solid:ListedDocument'] }, - contentType: MIME_TYPES.JSON, webId }, { parentCtx: ctx } @@ -102,7 +101,6 @@ module.exports = { const user = await ctx.call('ldp.resource.get', { resourceUri: webId, - accept: MIME_TYPES.JSON, webId }); diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.js b/src/middleware/packages/solid/services/type-index/type-registrations.js index 9d07d5a57..a634f4423 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.js +++ b/src/middleware/packages/solid/services/type-index/type-registrations.js @@ -1,7 +1,6 @@ const urlJoin = require('url-join'); const { namedNode, triple } = require('@rdfjs/data-model'); const { ControlledContainerMixin, arrayOf } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); module.exports = { name: 'type-registrations', @@ -68,7 +67,6 @@ module.exports = { 'solid:forClass': expandedTypes, 'solid:instanceContainer': containerUri }, - contentType: MIME_TYPES.JSON, webId }, { parentCtx: ctx } @@ -135,11 +133,7 @@ module.exports = { // If no default app is defined for this type, use this one if (!registration['apods:defaultApp']) registration['apods:defaultApp'] = appUri; - await ctx.call('type-registrations.put', { - resource: registration, - contentType: MIME_TYPES.JSON, - webId - }); + await ctx.call('type-registrations.put', { resource: registration, webId }); } }, /** @@ -171,7 +165,6 @@ module.exports = { await ctx.call('type-registrations.put', { resource: registration, - contentType: MIME_TYPES.JSON, webId }); } diff --git a/src/middleware/packages/sparql-endpoint/getRoute.js b/src/middleware/packages/sparql-endpoint/getRoute.js index 6c63c5fa0..1204a1b9e 100644 --- a/src/middleware/packages/sparql-endpoint/getRoute.js +++ b/src/middleware/packages/sparql-endpoint/getRoute.js @@ -1,6 +1,12 @@ -const { parseHeader, parseRawBody, negotiateAccept, saveDatasetMeta } = require('@semapps/middlewares'); +const { + parseHeader, + parseRawBody, + negotiateAccept, + saveDatasetMeta, + negotiateContentType +} = require('@semapps/middlewares'); -const middlewares = [parseHeader, parseRawBody, negotiateAccept, saveDatasetMeta]; +const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, saveDatasetMeta]; function getRoute(path) { return { diff --git a/src/middleware/packages/triplestore/actions/insert.js b/src/middleware/packages/triplestore/actions/insert.js index e2bc80a63..7757aef6d 100644 --- a/src/middleware/packages/triplestore/actions/insert.js +++ b/src/middleware/packages/triplestore/actions/insert.js @@ -1,5 +1,4 @@ const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); module.exports = { visibility: 'public', @@ -26,19 +25,19 @@ module.exports = { } }, async handler(ctx) { - const { resource, contentType, graphName } = ctx.params; + const { resource, graphName } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; - if (contentType && contentType !== MIME_TYPES.JSON) - throw new Error(`The triplestore.insert action now only support JSON-LD. Provided: ${contentType}`); - - const rdf = await ctx.call('jsonld.parser.toRDF', { - input: resource, - options: { - format: 'application/n-quads' - } - }); + const rdf = + typeof resource === 'string' + ? resource + : await ctx.call('jsonld.parser.toRDF', { + input: resource, + options: { + format: 'application/n-quads' + } + }); if (!dataset) throw new Error(`No dataset defined for triplestore insert: ${rdf}`); if (dataset !== '*' && !(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/webacl/bots/groups-manager.js b/src/middleware/packages/webacl/bots/groups-manager.js index dc5fbd218..dd3838b69 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.js +++ b/src/middleware/packages/webacl/bots/groups-manager.js @@ -1,5 +1,4 @@ const { arrayOf } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { hasType } = require('../utils'); module.exports = { @@ -21,7 +20,6 @@ module.exports = { async refreshAll(ctx) { const usersContainer = await ctx.call('ldp.container.get', { containerUri: this.settings.usersContainer, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/webacl/routes/getRoutes.js b/src/middleware/packages/webacl/routes/getRoutes.js index a6fe797da..d096a220e 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.js +++ b/src/middleware/packages/webacl/routes/getRoutes.js @@ -10,7 +10,7 @@ const onError = (req, res, err) => { }; const getRoutes = (basePath, podProvider) => { - const middlewares = [parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson]; + const middlewares = [parseHeader, negotiateContentType, negotiateAccept, parseRawBody, parseJson]; return [ { diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.js b/src/middleware/packages/webacl/services/resource/actions/addRights.js index c38aaba6e..37c3a9e87 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.js @@ -127,11 +127,12 @@ module.exports = { addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; } - await ctx.call('triplestore.insert', { - resource: addRequest, - webId: 'system', - graphName: this.settings.graphName - }); + if (addRequest.length > 0) { + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }`, + webId: 'system' + }); + } if (newRights) { const returnValues = { uri: resourceUri, created: true, isContainer }; diff --git a/src/middleware/packages/webid/service.js b/src/middleware/packages/webid/service.js index 8af435de2..9423ae393 100644 --- a/src/middleware/packages/webid/service.js +++ b/src/middleware/packages/webid/service.js @@ -1,5 +1,4 @@ const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { foaf, schema } = require('@semapps/ontologies'); const { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } = require('@semapps/ldp'); @@ -36,7 +35,6 @@ const WebIdService = { return ctx.call( 'ldp.resource.get', { - accept: this.settings.accept, ...ctx.params, webId: 'system' }, @@ -78,7 +76,6 @@ const WebIdService = { '@id': webId, ...resource }, - contentType: MIME_TYPES.JSON, webId: 'system' }, { parentCtx: ctx } @@ -89,7 +86,6 @@ const WebIdService = { { resource, slug: nick, - contentType: MIME_TYPES.JSON, webId: 'system' }, { parentCtx: ctx } @@ -99,7 +95,6 @@ const WebIdService = { const webIdData = await this.actions.get( { resourceUri: webId, - accept: MIME_TYPES.JSON, webId: 'system' }, { parentCtx: ctx } diff --git a/src/middleware/tests/activitypub/collection-api.test.js b/src/middleware/tests/activitypub/collection-api.test.js index 1a25a118c..4c893da74 100644 --- a/src/middleware/tests/activitypub/collection-api.test.js +++ b/src/middleware/tests/activitypub/collection-api.test.js @@ -1,6 +1,5 @@ const urlJoin = require('url-join'); const fetch = require('node-fetch'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { fetchServer } = require('../utils'); const initialize = require('./initialize'); const CONFIG = require('../config'); @@ -33,8 +32,7 @@ describe('Collections API', () => { name: `Note #${i}`, content: `Contenu de ma note #${i}`, published: `2021-01-0${i}T00:00:00.000Z` - }, - contentType: MIME_TYPES.JSON + } }) ); } diff --git a/src/middleware/tests/activitypub/collection.test.js b/src/middleware/tests/activitypub/collection.test.js index 3fc43b558..fd55c6895 100644 --- a/src/middleware/tests/activitypub/collection.test.js +++ b/src/middleware/tests/activitypub/collection.test.js @@ -1,5 +1,4 @@ const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); const initialize = require('./initialize'); const CONFIG = require('../config'); @@ -32,9 +31,8 @@ describe('Collections', () => { '@type': 'Note', name: `Note #${i}`, content: `Contenu de ma note #${i}`, - published: `2021-01-0${i}T00:00:00.000Z` - }, - contentType: MIME_TYPES.JSON + published: `2021-01-0${i + 1}T00:00:00.000Z` + } }) ); } @@ -45,7 +43,6 @@ describe('Collections', () => { type: 'Collection', summary: 'My non-ordered collection' }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -56,7 +53,6 @@ describe('Collections', () => { summary: 'My ordered collection', 'semapps:dereferenceItems': false }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -67,7 +63,6 @@ describe('Collections', () => { summary: 'Cursor test collection', 'semapps:itemsPerPage': 2 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -172,7 +167,6 @@ describe('Collections', () => { summary: 'My non-ordered collection with dereferenceItems: true', 'semapps:dereferenceItems': true }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -237,7 +231,6 @@ describe('Collections', () => { 'semapps:sortPredicate': 'as:published', 'semapps:sortOrder': 'semapps:AscOrder' }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -282,7 +275,6 @@ describe('Collections', () => { summary: 'My paginated collection', 'semapps:itemsPerPage': 4 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -347,7 +339,6 @@ describe('Collections', () => { summary: 'Empty collection', 'semapps:itemsPerPage': 4 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -371,7 +362,6 @@ describe('Collections', () => { summary: 'Exact size collection', 'semapps:itemsPerPage': 4 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/tests/activitypub/like.test.js b/src/middleware/tests/activitypub/like.test.js index 1945e5a8a..92f30601c 100644 --- a/src/middleware/tests/activitypub/like.test.js +++ b/src/middleware/tests/activitypub/like.test.js @@ -72,8 +72,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m await waitForExpect(async () => { await expect( alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON + resourceUri: aliceMessageUri }) ).resolves.toMatchObject({ likes: `${aliceMessageUri}/likes` diff --git a/src/middleware/tests/activitypub/message.test.js b/src/middleware/tests/activitypub/message.test.js index f1cb895d8..33bcc7c94 100644 --- a/src/middleware/tests/activitypub/message.test.js +++ b/src/middleware/tests/activitypub/message.test.js @@ -61,10 +61,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' aliceMessageUri = createActivity.object.id; // Check the object has been created - const message = await alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON - }); + const message = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); expect(message).toMatchObject({ type: OBJECT_TYPES.NOTE, attributedTo: alice.id, @@ -89,12 +86,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' bobMessageUri = createActivity.object.id; await waitForExpect(async () => { - await expect( - alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ replies: `${aliceMessageUri}/replies` }); }); @@ -127,12 +119,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); await waitForExpect(async () => { - await expect( - alice.call('ldp.resource.get', { - resourceUri: bobMessageUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: bobMessageUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Note', deleted: expect.anything() diff --git a/src/middleware/tests/activitypub/object.test.js b/src/middleware/tests/activitypub/object.test.js index f807820f2..748046669 100644 --- a/src/middleware/tests/activitypub/object.test.js +++ b/src/middleware/tests/activitypub/object.test.js @@ -1,5 +1,4 @@ const { ACTIVITY_TYPES, OBJECT_TYPES } = require('@semapps/activitypub'); -const { MIME_TYPES } = require('@semapps/mime-types'); const waitForExpect = require('wait-for-expect'); const initialize = require('./initialize'); const CONFIG = require('../config'); @@ -66,10 +65,7 @@ describe('Create/Update/Delete objects', () => { objectUri = createActivity.object.id; // Check the object has been created in the container - const object = await broker.call('ldp.resource.get', { - resourceUri: objectUri, - accept: MIME_TYPES.JSON - }); + const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); expect(object).toHaveProperty('type', OBJECT_TYPES.ARTICLE); expect(object).toHaveProperty('id', objectUri); }); @@ -102,10 +98,7 @@ describe('Create/Update/Delete objects', () => { expect(updateActivity.object).not.toHaveProperty('name'); // Check the object has been updated - const object = await broker.call('ldp.resource.get', { - resourceUri: objectUri, - accept: MIME_TYPES.JSON - }); + const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); expect(object).toMatchObject({ id: objectUri, type: OBJECT_TYPES.ARTICLE, @@ -122,12 +115,7 @@ describe('Create/Update/Delete objects', () => { }); await waitForExpect(async () => { - await expect( - broker.call('ldp.resource.get', { - resourceUri: objectUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(broker.call('ldp.resource.get', { resourceUri: objectUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Article', deleted: expect.anything() diff --git a/src/middleware/tests/activitypub/outbox.test.js b/src/middleware/tests/activitypub/outbox.test.js index 41c052390..8c7b58aff 100644 --- a/src/middleware/tests/activitypub/outbox.test.js +++ b/src/middleware/tests/activitypub/outbox.test.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); const waitForExpect = require('wait-for-expect'); const initialize = require('./initialize'); @@ -105,7 +104,6 @@ describe('Permissions are correctly set on outbox', () => { // await expect(() => // broker.call('ldp.resource.get', { // resourceUri: objectPrivateFirst.id, - // accept: MIME_TYPES.JSON, // webId: simon.id // }) // ).rejects.toThrow(); @@ -360,7 +358,6 @@ describe('Permissions are correctly set on outbox', () => { await expect(() => broker.call('ldp.resource.get', { resourceUri: objectUri, - accept: MIME_TYPES.JSON, webId: simon.id }) ).rejects.toThrow(); diff --git a/src/middleware/tests/activitypub/shares.test.js b/src/middleware/tests/activitypub/shares.test.js index 50e86b506..e15524e63 100644 --- a/src/middleware/tests/activitypub/shares.test.js +++ b/src/middleware/tests/activitypub/shares.test.js @@ -77,12 +77,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure the /shares collection has been created await waitForExpect(async () => { - await expect( - alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ shares: `${aliceMessageUri}/shares` }); }); diff --git a/src/middleware/tests/crypto/keys.test.js b/src/middleware/tests/crypto/keys.test.js index e6d06c587..0c9516eee 100644 --- a/src/middleware/tests/crypto/keys.test.js +++ b/src/middleware/tests/crypto/keys.test.js @@ -1,5 +1,4 @@ const { KEY_TYPES } = require('@semapps/crypto'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { arrayOf, waitForResource } = require('@semapps/ldp'); const { wait } = require('../utils'); const initialize = require('./initialize'); @@ -57,14 +56,7 @@ describe('keys', () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); const webIdDocument = await waitForResource(500, 'publicKey', 5, () => - broker.call( - 'webid.get', - { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }, - { meta: { $cache: false } } - ) + broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }) ); expect(webIdDocument).toBeDefined(); @@ -87,7 +79,6 @@ describe('keys', () => { const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -98,7 +89,6 @@ describe('keys', () => { await broker.call('keys.attachPublicKeyToWebId', { webId: user.webId, keyId: keyPair['@id'] || keyPair.id }); const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -119,7 +109,6 @@ describe('keys', () => { // Expect webId not to have key. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -148,7 +137,6 @@ describe('keys', () => { // Expect webId to not have old key but new key. const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -161,7 +149,6 @@ describe('keys', () => { // Expect publicKey to be present in `/public-keys` container. const publicKey = await broker.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'], - accept: MIME_TYPES.JSON, webId: user.webId }); expect(publicKey).toBeTruthy(); @@ -180,8 +167,7 @@ describe('keys', () => { await expect( broker.call('keys.container.get', { resourceUri: keyPair['@id'] || keyPair.id, - webId: user2.webId, - accept: MIME_TYPES.JSON + webId: user2.webId }) ).rejects.toThrow('Forbidden'); }); @@ -196,7 +182,6 @@ describe('keys', () => { const publicKey = await broker.call('keys.container.get', { resourceUri: keyPair['rdfs:seeAlso'], - accept: MIME_TYPES.JSON, webId: user.webId }); expect(publicKey).toBeTruthy(); @@ -204,7 +189,6 @@ describe('keys', () => { // Should not be present in webId. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -222,7 +206,6 @@ describe('keys', () => { // Expect the new key to be findable in the webId and the old one to be removed. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced rdfs:seeAlso). @@ -242,7 +225,6 @@ describe('keys', () => { // Should not be present in webId. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -288,14 +270,7 @@ describe('keys', () => { test('public key present in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - const webIdDocument = await broker.call( - 'webid.get', - { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }, - { meta: { $cache: false } } - ); + const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }); expect(webIdDocument.assertionMethod).toBeDefined(); expect( arrayOf(webIdDocument.assertionMethod).find( @@ -314,7 +289,6 @@ describe('keys', () => { const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -325,7 +299,6 @@ describe('keys', () => { await broker.call('keys.attachPublicKeyToWebId', { webId: user.webId, keyId: keyPair['@id'] || keyPair.id }); const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -346,7 +319,6 @@ describe('keys', () => { // Expect webId not to have key. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -377,7 +349,6 @@ describe('keys', () => { // Expect webId to not have old key but new key. const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -394,7 +365,6 @@ describe('keys', () => { // Expect publicKey to be present in `/public-keys` container. const publicKey = await broker.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'], - accept: MIME_TYPES.JSON, webId: user.webId }); expect(publicKey).toBeTruthy(); @@ -413,8 +383,7 @@ describe('keys', () => { await expect( broker.call('keys.container.get', { resourceUri: keyPair.id || keyPair['@id'], - webId: user2.webId, - accept: MIME_TYPES.JSON + webId: user2.webId }) ).rejects.toThrow('Forbidden'); }); @@ -430,7 +399,6 @@ describe('keys', () => { // Expect the new key to be findable in the webId const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced by rdfs:seeAlso). @@ -493,10 +461,7 @@ describe('keys', () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); expect(publicKey).toBeDefined(); expect(privateKey).toBeDefined(); - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }); + const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); expect(webIdDocument).toBeDefined(); expect(webIdDocument.publicKey).toBeDefined(); expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); @@ -523,10 +488,7 @@ describe('keys', () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); expect(publicKey).toBeDefined(); expect(privateKey).toBeDefined(); - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }); + const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); expect(webIdDocument).toBeDefined(); expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); expect(webIdDocument.privateKey).toBeUndefined(); @@ -550,8 +512,7 @@ describe('keys', () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - accept: MIME_TYPES.JSON + resourceUri: user.webId }); expect(webIdDocument).toBeDefined(); const { publicKey } = webIdDocument; diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.js b/src/middleware/tests/crypto/verifiable-credentials.test.js index 245f3ee8d..18ca8b5ef 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.js +++ b/src/middleware/tests/crypto/verifiable-credentials.test.js @@ -26,8 +26,7 @@ const setUpUser = async (broker, username) => { }); user.webIdDoc = await broker.call('ldp.resource.get', { resourceUri: user.webId, - webId: 'system', - accept: MIME_TYPES.JSON + webId: 'system' }); user.fetch = async (uri, init) => { diff --git a/src/middleware/tests/interop/mirror-protected.test.js b/src/middleware/tests/interop/mirror-protected.test.js index 73591f0a3..d63180e0c 100644 --- a/src/middleware/tests/interop/mirror-protected.test.js +++ b/src/middleware/tests/interop/mirror-protected.test.js @@ -1,6 +1,5 @@ const urlJoin = require('url-join'); const waitForExpect = require('wait-for-expect'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { ACTIVITY_TYPES } = require('@semapps/activitypub'); const initialize = require('./initialize'); @@ -60,7 +59,6 @@ describe('Resource on server1 is shared with user on server2', () => { '@type': 'Resource', label: 'My protected resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/protected-resources', webId: 'system' }); diff --git a/src/middleware/tests/interop/mirror.test.js b/src/middleware/tests/interop/mirror.test.js index d22a073a5..6473234d9 100644 --- a/src/middleware/tests/interop/mirror.test.js +++ b/src/middleware/tests/interop/mirror.test.js @@ -1,7 +1,6 @@ const urlJoin = require('url-join'); const waitForExpect = require('wait-for-expect'); const { triple, namedNode } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); const initialize = require('./initialize'); jest.setTimeout(100000); @@ -58,7 +57,6 @@ describe('Server2 mirror server1', () => { '@type': 'Resource', label: 'My resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/resources' }); @@ -86,8 +84,7 @@ describe('Server2 mirror server1', () => { '@id': resourceUri, '@type': 'Resource', label: 'My resource updated' - }, - contentType: MIME_TYPES.JSON + } }); await waitForExpect(async () => { diff --git a/src/middleware/tests/interop/patch-remote.test.js b/src/middleware/tests/interop/patch-remote.test.js index 1290073f1..d415def4a 100644 --- a/src/middleware/tests/interop/patch-remote.test.js +++ b/src/middleware/tests/interop/patch-remote.test.js @@ -1,6 +1,5 @@ const waitForExpect = require('wait-for-expect'); const { triple, namedNode } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); const initialize = require('./initialize'); jest.setTimeout(50000); @@ -29,7 +28,6 @@ describe('Server2 imports a single resource from server1', () => { '@type': 'Resource', label: 'My resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/resources' }); @@ -77,8 +75,7 @@ describe('Server2 imports a single resource from server1', () => { '@id': resourceUri, '@type': 'Resource', label: 'My resource updated' - }, - contentType: MIME_TYPES.JSON + } }); // Force call of updateSingleMirroredResources diff --git a/src/middleware/tests/interop/remote-inference.test.js b/src/middleware/tests/interop/remote-inference.test.js index affdb57c1..4b78f8efa 100644 --- a/src/middleware/tests/interop/remote-inference.test.js +++ b/src/middleware/tests/interop/remote-inference.test.js @@ -1,6 +1,5 @@ const { triple, namedNode } = require('rdf-data-model'); const waitForExpect = require('wait-for-expect'); -const { MIME_TYPES } = require('@semapps/mime-types'); const initialize = require('./initialize'); jest.setTimeout(100000); @@ -30,7 +29,6 @@ describe('An inference is added between server1 et server2', () => { '@type': 'Resource', label: 'My parent resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/resources' }); @@ -45,14 +43,11 @@ describe('An inference is added between server1 et server2', () => { '@id': resourceUri1 } }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3002/resources' }); await waitForExpect(async () => { - await expect( - server1.call('ldp.resource.get', { resourceUri: resourceUri1, accept: MIME_TYPES.JSON }) - ).resolves.toMatchObject({ + await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.toMatchObject({ id: resourceUri1, 'pair:hasPart': resourceUri2 }); @@ -72,9 +67,7 @@ describe('An inference is added between server1 et server2', () => { }); await waitForExpect(async () => { - await expect( - server2.call('ldp.resource.get', { resourceUri: resourceUri2, accept: MIME_TYPES.JSON }) - ).resolves.toMatchObject({ + await expect(server2.call('ldp.resource.get', { resourceUri: resourceUri2 })).resolves.toMatchObject({ id: resourceUri2, 'pair:inspiredBy': resourceUri1 }); @@ -94,14 +87,13 @@ describe('An inference is added between server1 et server2', () => { partOf: { '@id': resourceUri1 } - }, - contentType: MIME_TYPES.JSON + } }); await waitForExpect(async () => { - await expect( - server1.call('ldp.resource.get', { resourceUri: resourceUri1, accept: MIME_TYPES.JSON }) - ).resolves.not.toHaveProperty('pair:hasInspired'); + await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( + 'pair:hasInspired' + ); }); }); @@ -109,9 +101,9 @@ describe('An inference is added between server1 et server2', () => { await server2.call('ldp.resource.delete', { resourceUri: resourceUri2 }); await waitForExpect(async () => { - await expect( - server1.call('ldp.resource.get', { resourceUri: resourceUri1, accept: MIME_TYPES.JSON }) - ).resolves.not.toHaveProperty('pair:hasPart'); + await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( + 'pair:hasPart' + ); }); }); }); diff --git a/src/middleware/tests/ldp/binary.test.js b/src/middleware/tests/ldp/binary.test.js index eecd699e4..f3b6f5e0d 100644 --- a/src/middleware/tests/ldp/binary.test.js +++ b/src/middleware/tests/ldp/binary.test.js @@ -2,7 +2,6 @@ const fetch = require('node-fetch'); const fs = require('fs'); const { join: pathJoin } = require('path'); const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { getSlugFromUri } = require('@semapps/ldp'); const { fetchServer } = require('../utils'); const initialize = require('./initialize'); @@ -75,12 +74,7 @@ describe('Binary handling of LDP server', () => { }); test('Get image as resource (via Moleculer action)', async () => { - await expect( - broker.call('ldp.resource.get', { - resourceUri: fileUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(broker.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ '@id': fileUri, '@type': 'semapps:File', 'semapps:fileName': fileName, diff --git a/src/middleware/tests/ldp/container.test.js b/src/middleware/tests/ldp/container.test.js index 71aaf572d..65534ffca 100644 --- a/src/middleware/tests/ldp/container.test.js +++ b/src/middleware/tests/ldp/container.test.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const waitForExpect = require('wait-for-expect'); const CONFIG = require('../config'); const initialize = require('./initialize'); @@ -33,8 +32,7 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}objects`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}objects` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}objects`, @@ -62,7 +60,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}`, - accept: MIME_TYPES.JSON, webId: 'system' }) ).resolves.toMatchObject({ @@ -77,7 +74,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}parent`, - accept: MIME_TYPES.JSON, webId: 'system' }) ).resolves.toMatchObject({ @@ -93,7 +89,6 @@ describe('LDP container tests', () => { test('Post a resource in a container', async () => { resourceUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, - contentType: MIME_TYPES.JSON, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -105,8 +100,7 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}resources` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, @@ -125,7 +119,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, - contentType: MIME_TYPES.JSON, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -150,7 +143,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON, jsonContext: { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' } @@ -174,7 +166,6 @@ describe('LDP container tests', () => { test('Get container with filters param', async () => { await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, - contentType: MIME_TYPES.JSON, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -187,8 +178,7 @@ describe('LDP container tests', () => { // Get without filters param await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}resources` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, @@ -207,7 +197,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON, filters: { 'pair:label': 'My project 2' } @@ -226,7 +215,6 @@ describe('LDP container tests', () => { test('Get container without resources', async () => { const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON, doNotIncludeResources: true }); @@ -242,8 +230,7 @@ describe('LDP container tests', () => { // Project 1 should have disappeared from the container await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}resources` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, @@ -263,10 +250,7 @@ describe('LDP container tests', () => { // Container should now be empty await waitForExpect(async () => { - const container = await broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON - }); + const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` }); expect(container['ldp:contains']).toHaveLength(0); }); diff --git a/src/middleware/tests/ldp/resource.test.js b/src/middleware/tests/ldp/resource.test.js index 69714271b..7316bc40a 100644 --- a/src/middleware/tests/ldp/resource.test.js +++ b/src/middleware/tests/ldp/resource.test.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { quad, namedNode, blankNode, literal } = require('rdf-data-model'); const CONFIG = require('../config'); const initialize = require('./initialize'); @@ -39,22 +38,15 @@ describe('Resource CRUD operations', () => { description: 'The place to be' } }, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources` }); - project1 = await broker.call('ldp.resource.get', { - resourceUri, - accept: MIME_TYPES.JSON - }); + project1 = await broker.call('ldp.resource.get', { resourceUri }); expect(project1['pair:description']).toBe('myProject'); }, 20000); test('Get resource', async () => { - const newProject = await broker.call('ldp.resource.get', { - accept: MIME_TYPES.JSON, - resourceUri: project1['@id'] - }); + const newProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(newProject).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project1['@id'], @@ -83,15 +75,10 @@ describe('Resource CRUD operations', () => { hasLocation: { label: 'Nantes' } - }, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON + } }); - const updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + const updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -124,16 +111,9 @@ describe('Resource CRUD operations', () => { } ] }; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -156,16 +136,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -187,16 +160,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -226,16 +192,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -256,16 +215,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -284,16 +236,9 @@ describe('Resource CRUD operations', () => { resourceUpdated.hasLocation = undefined; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject['pair:hasLocation']).toBeUndefined(); @@ -301,16 +246,9 @@ describe('Resource CRUD operations', () => { { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -325,16 +263,9 @@ describe('Resource CRUD operations', () => { { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -363,14 +294,10 @@ describe('Resource CRUD operations', () => { const resourceUri = await broker.call('ldp.container.post', { resource: resourceToPost, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources2` }); - project2 = await broker.call('ldp.resource.get', { - resourceUri, - accept: MIME_TYPES.JSON - }); + project2 = await broker.call('ldp.resource.get', { resourceUri }); expect(project2).toMatchObject({ 'pair:hasLocation': { @@ -398,14 +325,10 @@ describe('Resource CRUD operations', () => { const resourceUri3 = await broker.call('ldp.container.post', { resource: resourceToPost, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources2` }); - const project3 = await broker.call('ldp.resource.get', { - resourceUri: resourceUri3, - accept: MIME_TYPES.JSON - }); + const project3 = await broker.call('ldp.resource.get', { resourceUri: resourceUri3 }); expect(project3).toMatchObject({ 'pair:hasLocation': [ @@ -441,14 +364,10 @@ describe('Resource CRUD operations', () => { const resourceUri4 = await broker.call('ldp.container.post', { resource: resourceToPost, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources2` }); - const project4 = await broker.call('ldp.resource.get', { - resourceUri: resourceUri4, - accept: MIME_TYPES.JSON - }); + const project4 = await broker.call('ldp.resource.get', { resourceUri: resourceUri4 }); expect(project4).toMatchObject({ 'pair:hasLocation': { @@ -483,16 +402,9 @@ describe('Resource CRUD operations', () => { ] }; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project2['@id'], - accept: MIME_TYPES.JSON - }); + let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -527,16 +439,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project2['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -560,7 +465,6 @@ describe('Resource CRUD operations', () => { '@type': 'Theme', label: 'Permaculture' }, - contentType: MIME_TYPES.JSON, slug: 'Permaculture' }); @@ -576,8 +480,7 @@ describe('Resource CRUD operations', () => { hasTopic: { '@id': themeUri } - }, - contentType: MIME_TYPES.JSON + } }); // Remove the relation to the theme @@ -589,15 +492,11 @@ describe('Resource CRUD operations', () => { '@type': 'Project', '@id': project1['@id'], label: 'myTitle' - }, - contentType: MIME_TYPES.JSON + } }); // Ensure the theme has not been deleted - const theme = await broker.call('ldp.resource.get', { - resourceUri: themeUri, - accept: MIME_TYPES.JSON - }); + const theme = await broker.call('ldp.resource.get', { resourceUri: themeUri }); expect(theme).toMatchObject({ '@id': themeUri, @@ -616,7 +515,6 @@ describe('Resource CRUD operations', () => { '@type': 'Project', label: 'SemanticApps' }, - contentType: MIME_TYPES.JSON, slug: 'SemApps' }); @@ -636,14 +534,10 @@ describe('Resource CRUD operations', () => { namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('SemanticApps') ) - ], - contentType: MIME_TYPES.JSON + ] }); - const project = await broker.call('ldp.resource.get', { - resourceUri: projectUri, - accept: MIME_TYPES.JSON - }); + const project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ '@id': projectUri, @@ -662,7 +556,6 @@ describe('Resource CRUD operations', () => { '@type': 'Project', label: 'ActivityPods' }, - contentType: MIME_TYPES.JSON, slug: 'ActivityPods' }); @@ -680,14 +573,10 @@ describe('Resource CRUD operations', () => { namedNode('http://virtual-assembly.org/ontologies/pair#Place') ), quad(blankNode('b_0'), namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('Paris')) - ], - contentType: MIME_TYPES.JSON + ] }); - let project = await broker.call('ldp.resource.get', { - resourceUri: projectUri, - accept: MIME_TYPES.JSON - }); + let project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ '@id': projectUri, @@ -712,14 +601,10 @@ describe('Resource CRUD operations', () => { namedNode('http://virtual-assembly.org/ontologies/pair#Place') ), quad(blankNode('b_0'), namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('Compiègne')) - ], - contentType: MIME_TYPES.JSON + ] }); - project = await broker.call('ldp.resource.get', { - resourceUri: projectUri, - accept: MIME_TYPES.JSON - }); + project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ '@id': projectUri, @@ -742,11 +627,6 @@ describe('Resource CRUD operations', () => { resourceUri: project1['@id'] }); - await expect( - broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }) - ).rejects.toThrow(`not found`); + await expect(broker.call('ldp.resource.get', { resourceUri: project1['@id'] })).rejects.toThrow(`not found`); }, 20000); }); diff --git a/src/middleware/tests/webacl/resource.test.js b/src/middleware/tests/webacl/resource.test.js index 3c0528d93..cbe788526 100644 --- a/src/middleware/tests/webacl/resource.test.js +++ b/src/middleware/tests/webacl/resource.test.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { namedNode, triple, literal } = require('@rdfjs/data-model'); const CONFIG = require('../config'); const initialize = require('./initialize'); @@ -30,14 +29,12 @@ describe('Permissions check on a specific resource', () => { type: 'Event', name: 'My event #1' }, - contentType: MIME_TYPES.JSON, webId: 'system' }); await expect( broker.call('ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).rejects.toThrow('Forbidden'); @@ -63,7 +60,6 @@ describe('Permissions check on a specific resource', () => { type: 'Event', name: 'My event #1 - edited' }, - contentType: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).rejects.toThrow('Forbidden'); @@ -88,7 +84,6 @@ describe('Permissions check on a specific resource', () => { await expect( broker.call('ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).resolves.toBeDefined(); @@ -96,7 +91,6 @@ describe('Permissions check on a specific resource', () => { await expect( broker.call('ldp.container.get', { containerUri, - accept: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).rejects.toThrow('Forbidden'); @@ -114,7 +108,6 @@ describe('Permissions check on a specific resource', () => { await expect( broker.call('ldp.container.get', { containerUri, - accept: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).resolves.toMatchObject({ @@ -142,7 +135,6 @@ describe('Permissions check on a specific resource', () => { await expect( broker.call('ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId: BOB_WEBID }) ).resolves.toBeDefined(); @@ -156,7 +148,6 @@ describe('Permissions check on a specific resource', () => { type: 'Event', name: 'My event #2' }, - contentType: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).rejects.toThrow(); @@ -178,7 +169,6 @@ describe('Permissions check on a specific resource', () => { type: 'Event', name: 'My event #2' }, - contentType: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).resolves.toBeDefined(); @@ -216,7 +206,6 @@ describe('Permissions check on a specific resource', () => { content: 'Welcome everybody', startTime: '2014-12-31T23:00:00-08:00' }, - contentType: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).resolves.toBeDefined(); @@ -244,7 +233,6 @@ describe('Permissions check on a specific resource', () => { type: 'Event', name: 'My event #1 - edited' }, - contentType: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).rejects.toThrow(); @@ -280,7 +268,6 @@ describe('Permissions check on a specific resource', () => { type: 'Event', name: 'My event #1 - edited' }, - contentType: MIME_TYPES.JSON, webId: ALICE_WEBID }) ).resolves.toBeDefined(); diff --git a/src/middleware/tests/webacl/resourceCRUD.test.js b/src/middleware/tests/webacl/resourceCRUD.test.js index b5911e101..a2554b1a3 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.js +++ b/src/middleware/tests/webacl/resourceCRUD.test.js @@ -33,7 +33,6 @@ describe('middleware CRUD resource with perms', () => { description: 'myProject', label: 'myTitle' }, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources` }, { meta: { webId: 'anon' } } @@ -51,15 +50,12 @@ describe('middleware CRUD resource with perms', () => { type: 'Event', name: 'My event #1' }, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources` }, { meta: { webId: ALICE_WEBID } } ); - await expect( - broker.call('ldp.resource.get', { resourceUri, accept: MIME_TYPES.JSON, webId: ALICE_WEBID }) - ).resolves.toMatchObject({ + await expect(broker.call('ldp.resource.get', { resourceUri, webId: ALICE_WEBID })).resolves.toMatchObject({ type: 'Event', name: 'My event #1' }); diff --git a/src/middleware/tests/webacl/utils.test.js b/src/middleware/tests/webacl/utils.test.js index d7d1fd70c..2dc6b3a64 100644 --- a/src/middleware/tests/webacl/utils.test.js +++ b/src/middleware/tests/webacl/utils.test.js @@ -1,5 +1,4 @@ const { MIME_TYPES } = require('@semapps/mime-types'); -const { namedNode, triple, literal } = require('@rdfjs/data-model'); const CONFIG = require('../config'); const initialize = require('./initialize'); @@ -29,7 +28,6 @@ describe('Test various actions of the webacl.resource service', () => { type: 'Event', name: 'My event #1' }, - contentType: MIME_TYPES.JSON, webId: 'system' }); From 7cc49977d74bf75148116e36712586ffd409f2b8 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 30 Jul 2025 12:04:05 +0200 Subject: [PATCH 024/165] Remove contentType from triplestore.insert action --- .../subservices/collection/index.js | 8 +++++-- .../packages/ldp/mixins/document-tagger.js | 4 ++-- .../ldp/services/container/actions/attach.js | 16 +++++++------ .../ldp/services/container/actions/post.js | 9 ++++++-- .../packages/triplestore/actions/insert.js | 23 +++++++------------ 5 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js index 19eaad5df..80c868b55 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js @@ -177,8 +177,12 @@ const CollectionService = { if (!collectionExist) throw new Error(`Cannot attach to a non-existing collection: ${collectionUri} (dataset: ${ctx.meta.dataset})`); - await ctx.call('triplestore.insert', { - resource: sanitizeSparqlQuery`<${collectionUri}> <${itemUri}>`, + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + <${collectionUri}> <${itemUri}> + } + `, dataset: this.getCollectionDataset(collectionUri), webId: 'system' }); diff --git a/src/middleware/packages/ldp/mixins/document-tagger.js b/src/middleware/packages/ldp/mixins/document-tagger.js index 9f26b9305..7d838e4a3 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.js +++ b/src/middleware/packages/ldp/mixins/document-tagger.js @@ -39,8 +39,8 @@ module.exports = { } if (triples.length > 0) { - await ctx.call('triplestore.insert', { - resource: triples.join('\n'), + await ctx.call('triplestore.update', { + query: `INSERT DATA { ${triples.join('\n')} }`, dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/attach.js b/src/middleware/packages/ldp/services/container/actions/attach.js index 570af5d7d..faaaa20cb 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.js +++ b/src/middleware/packages/ldp/services/container/actions/attach.js @@ -1,4 +1,5 @@ const { MoleculerError } = require('moleculer').Errors; +const { sanitizeSparqlQuery } = require('@semapps/triplestore'); module.exports = { visibility: 'public', @@ -14,8 +15,6 @@ module.exports = { const { containerUri, resourceUri } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const isRemoteContainer = await ctx.call('ldp.remote.isRemote', { resourceUri: containerUri }); - const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId }); if (!resourceExists) { const childContainerExists = await this.actions.exist({ containerUri: resourceUri }, { parentCtx: ctx }); @@ -27,10 +26,13 @@ module.exports = { const containerExists = await this.actions.exist({ containerUri, webId }, { parentCtx: ctx }); if (!containerExists) throw new Error(`Cannot attach to a non-existing container: ${containerUri}`); - await ctx.call('triplestore.insert', { - resource: `<${containerUri}> <${resourceUri}>`, - webId: 'system', - graphName: isRemoteContainer ? this.settings.mirrorGraphName : undefined + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + <${containerUri}> <${resourceUri}> + } + `, + webId: 'system' }); const returnValues = { @@ -40,7 +42,7 @@ module.exports = { dataset: ctx.meta.dataset }; - if (!isRemoteContainer && !ctx.meta.skipEmitEvent) { + if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.container.attached', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.js index 4d7907f2b..be89be63b 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.js @@ -1,5 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); +const { sanitizeSparqlQuery } = require('@semapps/triplestore'); const { cleanUndefined } = require('../../../utils'); module.exports = { @@ -89,8 +90,12 @@ module.exports = { // We must add this first, so that the container's ACLs are taken into account // But this create race conditions, especially when testing, since uncreated resources are linked to containers // TODO Add temporary ACLs to the resource so that it can be created, then link it to the container ? - await ctx.call('triplestore.insert', { - resource: `<${containerUri}> <${resourceUri}>`, + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + <${containerUri}> <${resourceUri}> + } + `, webId }); diff --git a/src/middleware/packages/triplestore/actions/insert.js b/src/middleware/packages/triplestore/actions/insert.js index 7757aef6d..d21afef71 100644 --- a/src/middleware/packages/triplestore/actions/insert.js +++ b/src/middleware/packages/triplestore/actions/insert.js @@ -4,12 +4,7 @@ module.exports = { visibility: 'public', params: { resource: { - type: 'multi', - rules: [{ type: 'string' }, { type: 'object' }] - }, - contentType: { - type: 'string', - optional: true + type: 'object' }, webId: { type: 'string', @@ -29,15 +24,13 @@ module.exports = { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; - const rdf = - typeof resource === 'string' - ? resource - : await ctx.call('jsonld.parser.toRDF', { - input: resource, - options: { - format: 'application/n-quads' - } - }); + // Convert JSON-LD to N-Quads + const rdf = await ctx.call('jsonld.parser.toRDF', { + input: resource, + options: { + format: 'application/n-quads' + } + }); if (!dataset) throw new Error(`No dataset defined for triplestore insert: ${rdf}`); if (dataset !== '*' && !(await ctx.call('triplestore.dataset.exist', { dataset }))) From aea50d18df43e1d2010761d77b14b892f3055780 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 31 Jul 2025 15:52:04 +0200 Subject: [PATCH 025/165] Default webacl.resource.getRights accept param to JSON-LD --- .../services/resource/actions/getRights.js | 4 ++-- .../resource/actions/getUsersWithReadRights.js | 6 +----- src/middleware/tests/webacl/utils.test.js | 18 +++--------------- 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.js b/src/middleware/packages/webacl/services/resource/actions/getRights.js index 12f56d298..067edfd2f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.js @@ -189,14 +189,14 @@ module.exports = { return await ctx.call('webacl.resource.getRights', { resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - accept: accept + accept }); }, action: { visibility: 'public', params: { resourceUri: { type: 'string' }, - accept: { type: 'string', optional: true }, + accept: { type: 'string', default: MIME_TYPES.JSON }, webId: { type: 'string', optional: true }, skipResourceCheck: { type: 'boolean', default: false } }, diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js index b2e18733c..f47bdf1b5 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { arrayOf } = require('@semapps/ldp'); module.exports = { @@ -10,10 +9,7 @@ module.exports = { async handler(ctx) { const { resourceUri } = ctx.params; - const authorizations = await this.actions.getRights( - { resourceUri, accept: MIME_TYPES.JSON, webId: 'system' }, - { parentCtx: ctx } - ); + const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); const readAuthorization = authorizations['@graph'] && authorizations['@graph'].find(auth => auth['@id'] === '#Read'); diff --git a/src/middleware/tests/webacl/utils.test.js b/src/middleware/tests/webacl/utils.test.js index 2dc6b3a64..6e14444cb 100644 --- a/src/middleware/tests/webacl/utils.test.js +++ b/src/middleware/tests/webacl/utils.test.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const CONFIG = require('../config'); const initialize = require('./initialize'); @@ -52,11 +51,7 @@ describe('Test various actions of the webacl.resource service', () => { control: true }); - const rights = await broker.call('webacl.resource.getRights', { - resourceUri, - accept: MIME_TYPES.JSON, - webId: ALICE_WEBID - }); + const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: ALICE_WEBID }); expect(rights['@graph']).toHaveLength(3); @@ -89,10 +84,7 @@ describe('Test various actions of the webacl.resource service', () => { }); test('Anonymous user cannot see Alice rights', async () => { - const rights = await broker.call('webacl.resource.getRights', { - resourceUri, - accept: MIME_TYPES.JSON - }); + const rights = await broker.call('webacl.resource.getRights', { resourceUri }); await expect( broker.call('webacl.resource.hasRights', { @@ -141,11 +133,7 @@ describe('Test various actions of the webacl.resource service', () => { control: false }); - const rights = await broker.call('webacl.resource.getRights', { - resourceUri, - accept: MIME_TYPES.JSON, - webId: BOB_WEBID - }); + const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); expect(rights['@graph']).toHaveLength(2); From a9247f2d9715e6bd6c8505b324b275fb8cd10c95 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 31 Jul 2025 15:53:47 +0200 Subject: [PATCH 026/165] Remove unneeded accept param from activitypub.collection.get --- src/middleware/tests/activitypub/like.test.js | 24 ++++--------------- .../tests/activitypub/message.test.js | 11 ++------- .../tests/activitypub/shares.test.js | 11 ++------- 3 files changed, 8 insertions(+), 38 deletions(-) diff --git a/src/middleware/tests/activitypub/like.test.js b/src/middleware/tests/activitypub/like.test.js index 92f30601c..db599aa3a 100644 --- a/src/middleware/tests/activitypub/like.test.js +++ b/src/middleware/tests/activitypub/like.test.js @@ -1,6 +1,5 @@ const waitForExpect = require('wait-for-expect'); const { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const { MIME_TYPES } = require('@semapps/mime-types'); const initialize = require('./initialize'); jest.setTimeout(50000); @@ -13,7 +12,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m let alice; let bob; let aliceMessageUri; - let bobMessageUri; beforeAll(async () => { if (mode === 'single-server') { @@ -82,10 +80,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m // Ensure Bob has been added to the /likes collection await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/likes`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }) ).resolves.toMatchObject({ type: 'Collection', items: bob.id @@ -94,12 +89,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m // Ensure the note has been added to Bob's /liked collection await waitForExpect(async () => { - await expect( - bob.call('activitypub.collection.get', { - resourceUri: `${bob.id}/liked`, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` })).resolves.toMatchObject({ type: 'Collection', items: aliceMessageUri }); @@ -120,19 +110,13 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m // Ensure Bob has been removed from the /likes collection await waitForExpect(async () => { - const likes = await alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/likes`, - accept: MIME_TYPES.JSON - }); + const likes = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }); expect(likes.items).toHaveLength(0); }); // Ensure the note has been removed from Bob's /liked collection await waitForExpect(async () => { - const liked = await bob.call('activitypub.collection.get', { - resourceUri: `${bob.id}/liked`, - accept: MIME_TYPES.JSON - }); + const liked = await bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` }); expect(liked.items).toHaveLength(0); }); }); diff --git a/src/middleware/tests/activitypub/message.test.js b/src/middleware/tests/activitypub/message.test.js index 33bcc7c94..8f5af3e50 100644 --- a/src/middleware/tests/activitypub/message.test.js +++ b/src/middleware/tests/activitypub/message.test.js @@ -1,6 +1,5 @@ const waitForExpect = require('wait-for-expect'); const { OBJECT_TYPES, ACTIVITY_TYPES } = require('@semapps/activitypub'); -const { MIME_TYPES } = require('@semapps/mime-types'); const initialize = require('./initialize'); jest.setTimeout(70000); @@ -93,10 +92,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/replies`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }) ).resolves.toMatchObject({ type: 'Collection', items: { @@ -127,10 +123,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); await waitForExpect(async () => { - const replies = await alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/replies`, - accept: MIME_TYPES.JSON - }); + const replies = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }); expect(replies.items).toBeUndefinedOrEmptyArray(); }); }); diff --git a/src/middleware/tests/activitypub/shares.test.js b/src/middleware/tests/activitypub/shares.test.js index e15524e63..ad680a4a0 100644 --- a/src/middleware/tests/activitypub/shares.test.js +++ b/src/middleware/tests/activitypub/shares.test.js @@ -1,6 +1,5 @@ const waitForExpect = require('wait-for-expect'); const { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const { MIME_TYPES } = require('@semapps/mime-types'); const initialize = require('./initialize'); jest.setTimeout(50000); @@ -85,10 +84,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure only the public announce activity has been added to the /shares collection await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/shares`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.toMatchObject({ type: 'Collection', items: publicShareActivity.id @@ -108,10 +104,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure the public announce activity has been removed from the /shares collection await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/shares`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.not.toMatchObject({ items: publicShareActivity.id }); From 9ba4b1c3fa0a667911b5a41f29f8be48c1de9318 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 31 Jul 2025 15:54:36 +0200 Subject: [PATCH 027/165] Remove unneeded accept param from triplestore.query --- .../subservices/collection/actions/get.js | 4 ---- .../activitypub/subservices/collection/index.js | 4 ---- .../subservices/collections-registry.js | 1 - .../services/activitypub/subservices/inbox.js | 2 -- .../services/activitypub/subservices/object.js | 2 -- .../packages/importer/mixins/importer.js | 2 -- .../ldp/services/container/actions/exist.js | 3 --- .../ldp/services/container/actions/getAll.js | 3 --- .../ldp/services/container/actions/getUris.js | 3 --- .../ldp/services/registry/defaultOptions.js | 1 - .../services/resource/actions/getContainers.js | 2 -- .../ldp/services/resource/actions/getTypes.js | 3 --- .../channels/notification-channel.mixin.js | 2 -- .../triplestore/actions/countTriplesOfSubject.js | 3 --- .../packages/triplestore/actions/tripleExist.js | 3 --- src/middleware/packages/triplestore/adapter.js | 2 -- src/middleware/packages/webacl/utils.js | 16 ++++++---------- src/middleware/tests/webacl/resourceCRUD.test.js | 4 +--- 18 files changed, 7 insertions(+), 53 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js index af3919fb0..76f69a625 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { sanitizeSparqlUri } = require('@semapps/triplestore'); const { MoleculerError } = require('moleculer').Errors; const { getValueFromDataType } = require('../../../../../utils'); @@ -26,7 +25,6 @@ async function getCollectionMetadata(ctx, collectionUri, webId, dataset) { OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } } `, - accept: MIME_TYPES.JSON, dataset, webId: 'system' }); @@ -47,7 +45,6 @@ async function verifyCursorExists(ctx, collectionUri, cursor, dataset) { BIND (EXISTS{ <${collectionUri}> as:items <${cursor}> } AS ?itemExists) } `, - accept: MIME_TYPES.JSON, dataset, webId: 'system' }); @@ -91,7 +88,6 @@ async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { : '' } `, - accept: MIME_TYPES.JSON, dataset, webId: 'system' }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js index 80c868b55..abab77fd4 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js @@ -1,6 +1,5 @@ const { MoleculerError } = require('moleculer').Errors; const { ControlledContainerMixin, arrayOf, getDatasetFromUri } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { sanitizeSparqlQuery } = require('@semapps/triplestore'); const { Errors: E } = require('moleculer-web'); const getAction = require('./actions/get'); @@ -129,7 +128,6 @@ const CollectionService = { <${collectionUri}> as:items ?items . } `, - accept: MIME_TYPES.JSON, dataset: this.getCollectionDataset(collectionUri), webId: 'system' }); @@ -153,7 +151,6 @@ const CollectionService = { <${collectionUri}> as:items <${itemUri}> . } `, - accept: MIME_TYPES.JSON, dataset: this.getCollectionDataset(collectionUri), webId: 'system' }); @@ -263,7 +260,6 @@ const CollectionService = { ?actorUri ${prefix}:${collectionKey} <${collectionUri}> } `, - accept: MIME_TYPES.JSON, dataset: this.getCollectionDataset(collectionUri), webId: 'system' }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js index 625b0bb38..433cf21ce 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js @@ -145,7 +145,6 @@ const CollectionsRegistryService = { ?objectUri <${attachPredicate}> ?collectionUri } `, - accept: MIME_TYPES.JSON, webId: 'system', dataset }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js index 0b2de195f..d7329f067 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js @@ -1,6 +1,5 @@ const { Errors: E } = require('moleculer-web'); const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); const { objectIdToCurrent, collectionPermissionsWithAnonRead } = require('../../../utils'); const { ACTOR_TYPES } = require('../../../constants'); const AwaitActivityMixin = require('../../../mixins/await-activity'); @@ -163,7 +162,6 @@ const InboxService = { } ORDER BY ?published `, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js index 91c951a9d..bc114b26d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js @@ -1,5 +1,4 @@ const { getType } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { OBJECT_TYPES, ACTIVITY_TYPES } = require('../../../constants'); const ObjectService = { @@ -156,7 +155,6 @@ const ObjectService = { 'ldp.resource.get', { resourceUri: objectUri, - accept: MIME_TYPES.JSON, webId: actorUri }, { meta: { $cache: false } } diff --git a/src/middleware/packages/importer/mixins/importer.js b/src/middleware/packages/importer/mixins/importer.js index 5ef4a59b5..2bf17a682 100644 --- a/src/middleware/packages/importer/mixins/importer.js +++ b/src/middleware/packages/importer/mixins/importer.js @@ -2,7 +2,6 @@ const fetch = require('node-fetch'); const cronParser = require('cron-parser'); const { promises: fsPromises } = require('fs'); const { ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { isDir } = require('../utils'); module.exports = { @@ -67,7 +66,6 @@ module.exports = { FILTER STRSTARTS(STR(?sourceUri), "${this.settings.source.apiUrl}") } `, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/exist.js b/src/middleware/packages/ldp/services/container/actions/exist.js index f3e73e6c9..b55e66317 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.js +++ b/src/middleware/packages/ldp/services/container/actions/exist.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { visibility: 'public', params: { @@ -22,7 +20,6 @@ module.exports = { ${isRemoteContainer ? '}' : ''} } `, - accept: MIME_TYPES.JSON, webId: 'system' }); } diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.js b/src/middleware/packages/ldp/services/container/actions/getAll.js index 758eef531..fa4af1a40 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.js +++ b/src/middleware/packages/ldp/services/container/actions/getAll.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { visibility: 'public', params: { @@ -14,7 +12,6 @@ module.exports = { ?containerUri a ldp:Container . } `, - accept: MIME_TYPES.JSON, dataset: ctx.params.dataset, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.js b/src/middleware/packages/ldp/services/container/actions/getUris.js index 174352762..db617b969 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.js +++ b/src/middleware/packages/ldp/services/container/actions/getUris.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { visibility: 'public', params: { @@ -16,7 +14,6 @@ module.exports = { <${containerUri}> ldp:contains ?resourceUri . } `, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.js b/src/middleware/packages/ldp/services/registry/defaultOptions.js index 560d45c4c..66d292460 100644 --- a/src/middleware/packages/ldp/services/registry/defaultOptions.js +++ b/src/middleware/packages/ldp/services/registry/defaultOptions.js @@ -1,5 +1,4 @@ module.exports = { - accept: 'text/turtle', readOnly: false, excludeFromMirror: false, permissions: webId => { diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.js b/src/middleware/packages/ldp/services/resource/actions/getContainers.js index 241f8e68e..20bb62d4e 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.js +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.js @@ -1,4 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { getContainerFromUri } = require('../../../utils'); module.exports = { @@ -27,7 +26,6 @@ module.exports = { ?containerUri ldp:contains <${resourceUri}> . } `, - accept: MIME_TYPES.JSON, dataset, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.js b/src/middleware/packages/ldp/services/resource/actions/getTypes.js index 80ad699ff..cfb5c2a1c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.js +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { visibility: 'public', params: { @@ -18,7 +16,6 @@ module.exports = { <${resourceUri}> a ?type . } `, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js index 93dcd52cd..2504d43cc 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js @@ -2,7 +2,6 @@ const urlJoin = require('url-join'); const { Errors: E } = require('moleculer-web'); const { SpecialEndpointMixin, ControlledContainerMixin, getDatasetFromUri, arrayOf } = require('@semapps/ldp'); const { ACTIVITY_TYPES } = require('@semapps/activitypub'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { namedNode } = require('@rdfjs/data-model'); const { v4: uuidV4 } = require('uuid'); const moment = require('moment'); @@ -140,7 +139,6 @@ module.exports = { return this.actions.get( { resourceUri: channelUri, - accept: MIME_TYPES.JSON, webId: 'system' }, { parentCtx: ctx } diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.js b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.js index f2cd7d6ca..74b86e499 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.js +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { visibility: 'public', params: { @@ -34,7 +32,6 @@ module.exports = { <${ctx.params.uri}> ?p ?v } `, - accept: MIME_TYPES.JSON, webId, dataset }); diff --git a/src/middleware/packages/triplestore/actions/tripleExist.js b/src/middleware/packages/triplestore/actions/tripleExist.js index 32a01b963..25f4b6845 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.js +++ b/src/middleware/packages/triplestore/actions/tripleExist.js @@ -1,5 +1,3 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); - module.exports = { visibility: 'public', params: { @@ -41,7 +39,6 @@ module.exports = { : { type: 'bgp', triples: [triple] } ] }, - accept: MIME_TYPES.JSON, webId, dataset }); diff --git a/src/middleware/packages/triplestore/adapter.js b/src/middleware/packages/triplestore/adapter.js index faf9170ec..cd0428efa 100644 --- a/src/middleware/packages/triplestore/adapter.js +++ b/src/middleware/packages/triplestore/adapter.js @@ -65,7 +65,6 @@ class TripleStoreAdapter { } } `, - accept: MIME_TYPES.JSON, dataset: this.dataset }) .then(result => { @@ -106,7 +105,6 @@ class TripleStoreAdapter { <${sanitizeSparqlUri(_id)}> ?p ?o . } `, - accept: MIME_TYPES.JSON, dataset: this.dataset }) .then(result => { diff --git a/src/middleware/packages/webacl/utils.js b/src/middleware/packages/webacl/utils.js index 6faf2f8d0..aee5b4efd 100644 --- a/src/middleware/packages/webacl/utils.js +++ b/src/middleware/packages/webacl/utils.js @@ -6,9 +6,6 @@ const { Parser } = require('n3'); const streamifyString = require('streamify-string'); const rdfParser = require('rdf-parse').default; -const RESOURCE_CONTAINERS_QUERY = resource => `SELECT ?container - WHERE { ?container ldp:contains <${resource}> . }`; - const getSlugFromUri = str => str.match(new RegExp(`.*/(.*)`))[1]; const hasType = (resource, type) => { @@ -23,12 +20,13 @@ const getDatasetFromUri = uri => { if (parts.length > 1) return parts[1]; }; -const findParentContainers = async (ctx, resource) => { - const query = `PREFIX ldp: \n${RESOURCE_CONTAINERS_QUERY(resource)}`; - +const findParentContainers = async (ctx, resourceUri) => { return await ctx.call('triplestore.query', { - query, - accept: MIME_TYPES.SPARQL_JSON, + query: ` + PREFIX ldp: + SELECT ?container + WHERE { ?container ldp:contains <${resourceUri}> . } + `, webId: 'system' }); }; @@ -58,7 +56,6 @@ const getUserGroups = async (ctx, user, graphName) => { const groups = await ctx.call('triplestore.query', { query, - accept: MIME_TYPES.JSON, webId: 'system' }); @@ -84,7 +81,6 @@ const getAuthorizationNode = async (ctx, resourceUri, resourceAclUri, mode, grap const auths = await ctx.call('triplestore.query', { query, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/tests/webacl/resourceCRUD.test.js b/src/middleware/tests/webacl/resourceCRUD.test.js index a2554b1a3..2ad4a7de9 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.js +++ b/src/middleware/tests/webacl/resourceCRUD.test.js @@ -1,5 +1,4 @@ const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); const { getSlugFromUri } = require('@semapps/ldp'); const { fetchServer } = require('../utils'); const CONFIG = require('../config'); @@ -109,8 +108,7 @@ describe('middleware CRUD resource with perms', () => { ?auth ?p <${resourceUri}>. FILTER (?p IN (acl:accessTo, acl:default ) ) ?auth ?p2 ?o } }`, - webId: 'system', - accept: MIME_TYPES.JSON + webId: 'system' }); expect(result.length).toBe(0); From c3935c563427701093269cecff11de569c3d99c0 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 31 Jul 2025 16:19:50 +0200 Subject: [PATCH 028/165] Remove test that should not be working --- .../tests/activitypub/outbox.test.js | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/src/middleware/tests/activitypub/outbox.test.js b/src/middleware/tests/activitypub/outbox.test.js index 8c7b58aff..f63d38dfa 100644 --- a/src/middleware/tests/activitypub/outbox.test.js +++ b/src/middleware/tests/activitypub/outbox.test.js @@ -295,72 +295,72 @@ describe('Permissions are correctly set on outbox', () => { }); }); - test('Delete activity is sent and object made private after removing addressees', async () => { - // Activity is not visible after Update to no recipients. - const activityNowPrivate = await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, - type: ACTIVITY_TYPES.UPDATE, - to: [], - object: { - id: objectPrivateFirst.id, - '@context': 'https://www.w3.org/ns/activitystreams', - type: OBJECT_TYPES.NOTE, - name: 'Message is private again' - } - }); + // test('Delete activity is sent and object made private after removing addressees', async () => { + // // Activity is not visible after Update to no recipients. + // const activityNowPrivate = await broker.call('activitypub.outbox.post', { + // collectionUri: sebastien.outbox, + // type: ACTIVITY_TYPES.UPDATE, + // to: [], + // object: { + // id: objectPrivateFirst.id, + // '@context': 'https://www.w3.org/ns/activitystreams', + // type: OBJECT_TYPES.NOTE, + // name: 'Message is private again' + // } + // }); - waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id - }); - const outboxFetchedByFriend = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id - }); - expect(outboxFetchedByFriend.orderedItems[0]).not.toMatchObject({ - actor: sebastien.id, - type: ACTIVITY_TYPES.UPDATE, - object: { - type: OBJECT_TYPES.NOTE, - name: 'Message is private again' - } - }); + // waitForExpect(async () => { + // const outboxMenu = await broker.call('activitypub.collection.get', { + // resourceUri: sebastien.outbox, + // webId: sebastien.id + // }); + // const outboxFetchedByFriend = await broker.call('activitypub.collection.get', { + // resourceUri: sebastien.outbox, + // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), + // webId: simon.id + // }); + // expect(outboxFetchedByFriend.orderedItems[0]).not.toMatchObject({ + // actor: sebastien.id, + // type: ACTIVITY_TYPES.UPDATE, + // object: { + // type: OBJECT_TYPES.NOTE, + // name: 'Message is private again' + // } + // }); - const outboxFetchedBySelf = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: sebastien.id - }); - expect(outboxFetchedBySelf.orderedItems[0]).toMatchObject({ - actor: sebastien.id, - type: ACTIVITY_TYPES.UPDATE, - object: { - type: OBJECT_TYPES.NOTE, - name: 'Message is private again' - } - }); - const objectUri = outboxFetchedBySelf.orderedItems[0].object.id; + // const outboxFetchedBySelf = await broker.call('activitypub.collection.get', { + // resourceUri: sebastien.outbox, + // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), + // webId: sebastien.id + // }); + // expect(outboxFetchedBySelf.orderedItems[0]).toMatchObject({ + // actor: sebastien.id, + // type: ACTIVITY_TYPES.UPDATE, + // object: { + // type: OBJECT_TYPES.NOTE, + // name: 'Message is private again' + // } + // }); + // const objectUri = outboxFetchedBySelf.orderedItems[0].object.id; - // Expect friend receives a `Delete`, if the Update is made private. - const friendOutbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.outbox, - afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id - }); - expect(friendOutbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, - type: ACTIVITY_TYPES.DELETE, - object: objectUri - }); + // // Expect friend receives a `Delete`, if the Update is made private. + // const friendOutbox = await broker.call('activitypub.collection.get', { + // resourceUri: simon.outbox, + // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), + // webId: simon.id + // }); + // expect(friendOutbox.orderedItems[0]).toMatchObject({ + // actor: sebastien.id, + // type: ACTIVITY_TYPES.DELETE, + // object: objectUri + // }); - await expect(() => - broker.call('ldp.resource.get', { - resourceUri: objectUri, - webId: simon.id - }) - ).rejects.toThrow(); - }); - }); + // await expect(() => + // broker.call('ldp.resource.get', { + // resourceUri: objectUri, + // webId: simon.id + // }) + // ).rejects.toThrow(); + // }); + // }); }); From 8f7e30409c2223df2ef8055a583e227c7483c000 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 5 Aug 2025 11:07:36 +0200 Subject: [PATCH 029/165] Working tests except PUT --- .../packages/jsonld/services/parser/index.js | 36 ++++++++++-- .../packages/ldp/mixins/document-tagger.js | 3 +- .../packages/ldp/services/api/actions/post.js | 1 - .../ldp/services/container/actions/post.js | 15 +++-- .../ldp/services/resource/actions/create.js | 26 +-------- .../ldp/services/resource/actions/delete.js | 11 +++- .../ldp/services/resource/actions/get.js | 19 ++++-- .../ldp/services/resource/actions/patch.js | 5 +- .../ldp/services/resource/actions/put.js | 2 +- .../packages/webacl/middlewares/webacl.js | 10 ++-- .../tests/ldp/content-negotiation.test.js | 58 ++++++++++++++++++- src/middleware/tests/ldp/resource.test.js | 49 ++++++++-------- 12 files changed, 164 insertions(+), 71 deletions(-) diff --git a/src/middleware/packages/jsonld/services/parser/index.js b/src/middleware/packages/jsonld/services/parser/index.js index f8ba5082b..01d6729d0 100644 --- a/src/middleware/packages/jsonld/services/parser/index.js +++ b/src/middleware/packages/jsonld/services/parser/index.js @@ -60,15 +60,29 @@ module.exports = { const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); - return await this.actions.frame( + const contextWithNullBase = await ctx.call('jsonld.context.merge', { + a: context, + b: { '@base': null } + }); + + const framedResource = await this.actions.frame( { input: jsonLd, - frame: { '@context': context } - // Force results to be in a @graph, even if we have a single result - // options: { omitGraph: false } + frame: { + '@context': contextWithNullBase + }, + options: { + base: null, // If we don't set base to null (here and in the frame), empty IRIs will be turned to ./ + embed: '@never' // If a resource refers to another resource in the same graph, we don't want it to be embedded + } }, { parentCtx: ctx } ); + + // See if it is necessary to remove the base ? + framedResource['@context'] = context; + + return framedResource; } }, async toRDF(ctx) { @@ -157,6 +171,20 @@ module.exports = { } return expandedTypes; + }, + async changeBase(ctx) { + const { input, base } = ctx.params; + + const contextWithBase = await ctx.call('jsonld.context.merge', { a: input['@context'], b: { '@base': base } }); + + return await this.actions.frame( + { + input: { ...input, '@context': contextWithBase }, + frame: { '@context': input['@context'] }, + options: { embed: '@never' } + }, + { parentCtx: ctx } + ); } }, methods: { diff --git a/src/middleware/packages/ldp/mixins/document-tagger.js b/src/middleware/packages/ldp/mixins/document-tagger.js index 7d838e4a3..76cd7bdeb 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.js +++ b/src/middleware/packages/ldp/mixins/document-tagger.js @@ -40,7 +40,7 @@ module.exports = { if (triples.length > 0) { await ctx.call('triplestore.update', { - query: `INSERT DATA { ${triples.join('\n')} }`, + query: `INSERT DATA { GRAPH <${resourceUri}> { ${triples.join('\n')} } }`, dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, webId: 'system' }); @@ -51,6 +51,7 @@ module.exports = { const now = new Date(); await ctx.call('triplestore.update', { query: ` + WITH <${resourceUri}> DELETE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } INSERT { <${resourceUri}> <${ this.settings.documentPredicates.updated diff --git a/src/middleware/packages/ldp/services/api/actions/post.js b/src/middleware/packages/ldp/services/api/actions/post.js index fe1b4bcdd..8e0f1f85b 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.js +++ b/src/middleware/packages/ldp/services/api/actions/post.js @@ -20,7 +20,6 @@ module.exports = async function post(ctx) { input: ctx.meta.rawBody, options: { format: contentType } }); - delete resource['@id']; // Since no URI is provided, the @id will be ./ but that will not work with ldp.container.post } resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.js index be89be63b..e094a2ee1 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.js @@ -113,11 +113,18 @@ module.exports = { }); } else { const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); + + // Change relative URIs to full URIs + const resourceWithBase = resource['@graph'] + ? await ctx.call('jsonld.parser.changeBase', { + input: resource, + base: resourceUri + }) + : { ...resource, '@id': resourceUri }; + await ctx.call(controlledActions.create || 'ldp.resource.create', { - resource: { - '@id': resourceUri, - ...resource - }, + resource: resourceWithBase, + resourceUri, webId }); } diff --git a/src/middleware/packages/ldp/services/resource/actions/create.js b/src/middleware/packages/ldp/services/resource/actions/create.js index 4c69aa52c..e09d7b545 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.js +++ b/src/middleware/packages/ldp/services/resource/actions/create.js @@ -1,11 +1,11 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); -const { getId } = require('../../../utils'); module.exports = { visibility: 'public', params: { - resource: 'object', + resource: { type: 'object' }, + resourceUri: { type: 'string' }, webId: { type: 'string', optional: true @@ -16,9 +16,8 @@ module.exports = { } }, async handler(ctx) { - let { resource, contentType } = ctx.params; + let { resource, resourceUri, contentType } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const resourceUri = getId(resource); if (contentType && contentType !== MIME_TYPES.JSON) throw new Error(`The ldp.resource.create action now only support JSON-LD. Provided: ${contentType}`); @@ -44,25 +43,6 @@ module.exports = { }; } - // let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); - // // see PUT - // newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); - // // see PUT - // newTriples = this.convertBlankNodesToVars(newTriples); - // // see PUT - // newTriples = this.removeDuplicatedVariables(newTriples); - - // const triplesToAdd = newTriples.reverse(); - - // const newBlankNodes = newTriples.filter(triple => triple.object.termType === 'Variable'); - - // // Generate the query - // let query = ''; - // if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; - // query += 'WHERE { '; - // if (newBlankNodes.length > 0) query += this.bindNewBlankNodes(newBlankNodes); - // query += ` }`; - await ctx.call('triplestore.insert', { resource, contentType, diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.js index 8b85badce..b7465357d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.js +++ b/src/middleware/packages/ldp/services/resource/actions/delete.js @@ -35,12 +35,21 @@ module.exports = { query: ` DELETE WHERE { - <${resourceUri}> ?p1 ?o1 . + GRAPH <${resourceUri}> { + <${resourceUri}> ?p1 ?o1 . + } } `, webId }); + // We need to manually drop the graph, otherwise the triple store may consider it still exists + // TODO: Move this to the DocumentService + await ctx.call('triplestore.update', { + query: `DROP GRAPH <${resourceUri}>`, + webId + }); + // We must detach the resource from the containers after deletion, otherwise the permissions may fail const containersUris = await ctx.call('ldp.resource.getContainers', { resourceUri }); for (const containerUri of containersUris) { diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.js index 9bd713c18..a6e832562 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.js @@ -1,5 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); +const { arrayOf } = require('../../../utils'); module.exports = { visibility: 'public', @@ -37,7 +38,7 @@ module.exports = { await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Read', webId }); - let result = await ctx.call('triplestore.query', { + const result = await ctx.call('triplestore.query', { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} CONSTRUCT { @@ -52,12 +53,22 @@ module.exports = { webId: 'system' }); + const frame = { '@context': jsonContext || (await ctx.call('jsonld.context.get')) }; + + // If the graph contains only blank nodes, we want them to be embedded in the resource + // Otherwise we want this action to return a @graph with all resources + const graphWithBlankNodesOnly = arrayOf(result['@graph']).every( + node => node['@id'].startsWith('_:b') || node['@id'] === resourceUri + ); + + if (graphWithBlankNodesOnly) frame['@id'] = resourceUri; + // Frame the result using the correct context in order to have clean, consistent results return await ctx.call('jsonld.parser.frame', { input: result, - frame: { - '@context': jsonContext || (await ctx.call('jsonld.context.get')), - '@id': resourceUri + frame, + options: { + embed: graphWithBlankNodesOnly ? '@once' : '@never' } }); } diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.js b/src/middleware/packages/ldp/services/resource/actions/patch.js index 1f48b3bef..4d3ca05c4 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.js +++ b/src/middleware/packages/ldp/services/resource/actions/patch.js @@ -1,4 +1,5 @@ const { MoleculerError } = require('moleculer').Errors; +const { namedNode } = require('@rdfjs/data-model'); function checkTriplesSubjectIsResource(triples, resourceUri) { for (const triple of triples) { @@ -69,7 +70,7 @@ module.exports = { checkTriplesSubjectIsResource(triplesToRemove, resourceUri); sparqlUpdate.updates.push({ updateType: 'delete', - delete: [{ type: 'bgp', triples: triplesToRemove }] + delete: [{ type: 'graph', triples: triplesToRemove, name: namedNode(resourceUri) }] }); } @@ -77,7 +78,7 @@ module.exports = { checkTriplesSubjectIsResource(triplesToAdd, resourceUri); sparqlUpdate.updates.push({ updateType: 'insert', - insert: [{ type: 'bgp', triples: triplesToAdd }] + insert: [{ type: 'graph', triples: triplesToAdd, name: namedNode(resourceUri) }] }); } diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.js index 7e85d0abd..9cba90c4c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.js +++ b/src/middleware/packages/ldp/services/resource/actions/put.js @@ -103,7 +103,7 @@ module.exports = { ); // Generate the query - let query = ''; + let query = `WITH <${resourceUri}>\n`; if (triplesToRemove.length > 0) query += `DELETE { ${this.triplesToString(triplesToRemove)} } `; if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; query += 'WHERE { '; diff --git a/src/middleware/packages/webacl/middlewares/webacl.js b/src/middleware/packages/webacl/middlewares/webacl.js index 046dc213e..ccd0cf71b 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.js +++ b/src/middleware/packages/webacl/middlewares/webacl.js @@ -94,15 +94,15 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se */ switch (action.name) { case 'ldp.resource.create': { - const resourceUri = ctx.params.resource['@id'] || ctx.params.resource.id; // Do not add ACLs if this is a mirrored resource as WebACL are not activated on the mirror graph if ( - (await ctx.call('ldp.remote.isRemote', { resourceUri })) && - (await ctx.call('ldp.remote.getGraph', { resourceUri })) === 'http://semapps.org/mirror' + (await ctx.call('ldp.remote.isRemote', { resourceUri: ctx.params.resourceUri })) && + (await ctx.call('ldp.remote.getGraph', { resourceUri: ctx.params.resourceUri })) === + 'http://semapps.org/mirror' ) return next(ctx); // We must add the permissions before inserting the resource - await addRightsToNewResource(ctx, resourceUri, webId); + await addRightsToNewResource(ctx, ctx.params.resourceUri, webId); break; } @@ -148,7 +148,7 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se await ctx.call( 'webacl.resource.deleteAllRights', { - resourceUri: ctx.params.resource['@id'] || ctx.params.resource.id + resourceUri: ctx.params.resourceUri }, { meta: { diff --git a/src/middleware/tests/ldp/content-negotiation.test.js b/src/middleware/tests/ldp/content-negotiation.test.js index 929ac1486..8121ec899 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.js +++ b/src/middleware/tests/ldp/content-negotiation.test.js @@ -18,7 +18,7 @@ afterAll(async () => { describe('Content negotiation', () => { const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let projectUri, project2Uri, project3Uri; + let projectUri, project2Uri, project3Uri, project4Uri; test('Post resource in JSON-LD', async () => { const { headers } = await fetchServer(containerUri, { @@ -217,4 +217,60 @@ describe('Content negotiation', () => { 'pair:description': 'A description' }); }); + + test('Post resource with sub-resources in Turtle format', async () => { + const { headers, status } = await fetchServer(containerUri, { + method: 'POST', + body: ` + @prefix pair: . + <> a pair:Project ; + pair:label "myProject 4" ; + pair:hasPart <#task1> . + + <#task1> a pair:Task ; + pair:label "myTask 1" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TURTLE + }) + }); + + expect(status).toBe(201); + + project4Uri = headers.get('Location'); + + const project4 = await broker.call('ldp.resource.get', { + resourceUri: project4Uri + }); + + expect(project4).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@graph': expect.arrayContaining([ + { + '@id': project4Uri, + '@type': 'pair:Project', + 'pair:hasPart': `${project4Uri}#task1`, + 'pair:label': 'myProject 4' + }, + { + '@id': `${project4Uri}#task1`, + '@type': 'pair:Task', + 'pair:label': 'myTask 1' + } + ]) + }); + }); + + test('Get resource with sub-resources in Turtle format', async () => { + const { body } = await fetchServer(project4Uri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TURTLE + }) + }); + + expect(body).toMatch(new RegExp(`<${project4Uri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`pair:label "myProject 4"`)); + expect(body).toMatch(new RegExp(`<${project4Uri}#task1> a pair:Task`)); + expect(body).toMatch(new RegExp(`pair:label "myTask 1"`)); + }); }); diff --git a/src/middleware/tests/ldp/resource.test.js b/src/middleware/tests/ldp/resource.test.js index 7316bc40a..a91910a52 100644 --- a/src/middleware/tests/ldp/resource.test.js +++ b/src/middleware/tests/ldp/resource.test.js @@ -13,11 +13,12 @@ afterAll(async () => { }); describe('Resource CRUD operations', () => { + let project1Uri; let project1; let project2; test('Post resource in container', async () => { - const resourceUri = await broker.call('ldp.container.post', { + project1Uri = await broker.call('ldp.container.post', { resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -41,13 +42,13 @@ describe('Resource CRUD operations', () => { containerUri: `${CONFIG.HOME_URL}resources` }); - project1 = await broker.call('ldp.resource.get', { resourceUri }); - expect(project1['pair:description']).toBe('myProject'); - }, 20000); + expect(project1Uri).toBeDefined(); + }); test('Get resource', async () => { - const newProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - expect(newProject).toMatchObject({ + project1 = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + + expect(project1).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project1['@id'], '@type': 'pair:Project', @@ -59,7 +60,7 @@ describe('Resource CRUD operations', () => { 'pair:hasLocation': expect.objectContaining({ 'pair:description': 'The place to be', 'pair:label': 'Paris' }), 'pair:label': 'myTitle' }); - }, 20000); + }); test('Put resource', async () => { await broker.call('ldp.resource.put', { @@ -89,7 +90,7 @@ describe('Resource CRUD operations', () => { }); expect(updatedProject['pair:label']).toBeUndefined(); expect(updatedProject['pair:hasLocation']['pair:description']).toBeUndefined(); - }, 20000); + }); test('Put resource with multiple blank nodes including same values', async () => { const resourceUpdated = { @@ -118,14 +119,14 @@ describe('Resource CRUD operations', () => { expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', - 'pair:hasLocation': [ + 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Nantes' }, { 'pair:label': 'Compiegne' } - ] + ]) }); expect(updatedProject['pair:label']).toBeUndefined(); expect(updatedProject['pair:hasLocation']['pair:description']).toBeUndefined(); @@ -167,7 +168,7 @@ describe('Resource CRUD operations', () => { expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', - 'pair:hasLocation': [ + 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Compiegne' }, @@ -177,7 +178,7 @@ describe('Resource CRUD operations', () => { { 'pair:label': 'Oloron' } - ] + ]) }); resourceUpdated.hasLocation = [ @@ -222,7 +223,7 @@ describe('Resource CRUD operations', () => { expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', - 'pair:hasLocation': [ + 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Compiegne', 'pair:description': 'the place to be' @@ -231,7 +232,7 @@ describe('Resource CRUD operations', () => { 'pair:label': 'Compiegne', 'pair:description': 'or not' } - ] + ]) }); resourceUpdated.hasLocation = undefined; @@ -269,12 +270,12 @@ describe('Resource CRUD operations', () => { expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', - 'petr:openingTimesDay': [ + 'petr:openingTimesDay': expect.arrayContaining([ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' }, { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } - ] + ]) }); - }, 20000); + }); test('Post resource with multiple blank nodes with 2 imbrications blank nodes', async () => { const resourceToPost = { @@ -377,7 +378,7 @@ describe('Resource CRUD operations', () => { } } }); - }, 20000); + }); test('Put resource with multiple blank nodes with 2 imbrications blank nodes', async () => { const resourceUpdated = { @@ -408,7 +409,7 @@ describe('Resource CRUD operations', () => { expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', - 'pair:hasLocation': [ + 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Paris', 'pair:hasPostalAddress': { @@ -421,7 +422,7 @@ describe('Resource CRUD operations', () => { 'pair:addressCountry': 'USA' } } - ] + ]) }); resourceUpdated.hasLocation = [ @@ -452,7 +453,7 @@ describe('Resource CRUD operations', () => { } } }); - }, 20000); + }); // Ensure dereferenced resources with IDs are not deleted by PUT test('PUT resource with ID', async () => { @@ -503,7 +504,7 @@ describe('Resource CRUD operations', () => { '@type': 'pair:Theme', 'pair:label': 'Permaculture' }); - }, 20000); + }); test('PATCH resource', async () => { const projectUri = await broker.call('ldp.container.post', { @@ -544,7 +545,7 @@ describe('Resource CRUD operations', () => { 'pair:label': 'SemApps', 'pair:comment': 'An open source toolbox to help you easily build semantic web applications' }); - }, 20000); + }); test('PATCH resource with blank nodes', async () => { const projectUri = await broker.call('ldp.container.post', { @@ -628,5 +629,5 @@ describe('Resource CRUD operations', () => { }); await expect(broker.call('ldp.resource.get', { resourceUri: project1['@id'] })).rejects.toThrow(`not found`); - }, 20000); + }); }); From ba30af54de441b098cf8af6c80072f450210ac56 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 5 Aug 2025 16:29:07 +0200 Subject: [PATCH 030/165] Store containers in their own document --- .../ldp/services/container/actions/attach.js | 5 ++++- .../ldp/services/container/actions/create.js | 1 + .../ldp/services/container/actions/exist.js | 13 +++++-------- .../ldp/services/container/actions/get.js | 2 ++ .../ldp/services/container/actions/post.js | 13 +++++++++++-- src/middleware/tests/ldp/resource.test.js | 18 +++++++++++++----- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/middleware/packages/ldp/services/container/actions/attach.js b/src/middleware/packages/ldp/services/container/actions/attach.js index faaaa20cb..7ded6e246 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.js +++ b/src/middleware/packages/ldp/services/container/actions/attach.js @@ -28,8 +28,11 @@ module.exports = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` + PREFIX ldp: INSERT DATA { - <${containerUri}> <${resourceUri}> + GRAPH <${containerUri}> { + <${containerUri}> ldp:contains <${resourceUri}> + } } `, webId: 'system' diff --git a/src/middleware/packages/ldp/services/container/actions/create.js b/src/middleware/packages/ldp/services/container/actions/create.js index 848c4ce07..362922b9d 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.js +++ b/src/middleware/packages/ldp/services/container/actions/create.js @@ -18,6 +18,7 @@ module.exports = { 'http://purl.org/dc/terms/title': title, 'http://purl.org/dc/terms/description': description }, + graphName: containerUri, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/exist.js b/src/middleware/packages/ldp/services/container/actions/exist.js index b55e66317..dcbfff8d8 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.js +++ b/src/middleware/packages/ldp/services/container/actions/exist.js @@ -7,17 +7,14 @@ module.exports = { // Matches container with or without trailing slash const containerUri = ctx.params.containerUri.replace(/\/+$/, ''); - const isRemoteContainer = await ctx.call('ldp.remote.isRemote', { resourceUri: containerUri }); - return await ctx.call('triplestore.query', { query: ` PREFIX ldp: - ASK - WHERE { - ${isRemoteContainer ? `GRAPH <${this.settings.mirrorGraphName}> {` : ''} - ?container a ldp:Container . - FILTER(?container IN (<${containerUri}>, <${`${containerUri}/`}>)) . - ${isRemoteContainer ? '}' : ''} + ASK { + VALUES ?container { <${containerUri}> <${`${containerUri}/`}> } + GRAPH ?container { + ?container a ldp:Container + } } `, webId: 'system' diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.js index 206975243..70a0ee151 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.js +++ b/src/middleware/packages/ldp/services/container/actions/get.js @@ -30,6 +30,7 @@ module.exports = { CONSTRUCT { <${containerUri}> ?p ?o . } + FROM <${containerUri}> WHERE { <${containerUri}> ?p ?o . MINUS { <${containerUri}> ldp:contains ?o } . @@ -50,6 +51,7 @@ module.exports = { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} SELECT ?s1 + FROM <${containerUri}> WHERE { <${containerUri}> ?s1 . ${filtersQuery.where} diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.js index e094a2ee1..6a96a2a21 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.js @@ -92,8 +92,11 @@ module.exports = { // TODO Add temporary ACLs to the resource so that it can be created, then link it to the container ? await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` + PREFIX ldp: INSERT DATA { - <${containerUri}> <${resourceUri}> + GRAPH <${containerUri}> { + <${containerUri}> ldp:contains <${resourceUri}> + } } `, webId @@ -131,7 +134,13 @@ module.exports = { } catch (e) { // If there was an error inserting the resource, detach it from the container await ctx.call('triplestore.update', { - query: `DELETE WHERE { <${containerUri}> <${resourceUri}> }`, + query: ` + PREFIX ldp: + DELETE WHERE { + GRAPH <${containerUri}> { + <${containerUri}> ldp:contains <${resourceUri}> + } + }`, webId }); diff --git a/src/middleware/tests/ldp/resource.test.js b/src/middleware/tests/ldp/resource.test.js index a91910a52..d21569020 100644 --- a/src/middleware/tests/ldp/resource.test.js +++ b/src/middleware/tests/ldp/resource.test.js @@ -371,12 +371,20 @@ describe('Resource CRUD operations', () => { const project4 = await broker.call('ldp.resource.get', { resourceUri: resourceUri4 }); expect(project4).toMatchObject({ - 'pair:hasLocation': { - 'pair:label': 'Paris', - 'pair:hasPostalAddress': { - 'pair:addressCountry': 'France' + 'pair:hasLocation': [ + { + 'pair:label': 'Paris', + 'pair:hasPostalAddress': { + 'pair:addressCountry': 'France' + } + }, + { + 'pair:label': 'Paris', + 'pair:hasPostalAddress': { + 'pair:addressCountry': 'France' + } } - } + ] }); }); From aebd1336b6015199055c272d65f0f30ad463280f Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 6 Aug 2025 16:43:54 +0200 Subject: [PATCH 031/165] Replace CLEAR with DROP, as it also deletes named graphs --- src/middleware/packages/triplestore/actions/dropAll.js | 2 +- src/middleware/tests/activitypub/initialize.js | 6 +++--- src/middleware/tests/crypto/initialize.js | 6 +++--- src/middleware/tests/interop/initialize.js | 6 +++--- src/middleware/tests/jsonld/initialize.js | 4 ++-- src/middleware/tests/ldp/initialize.js | 4 ++-- src/middleware/tests/ontologies/initialize.js | 4 ++-- src/middleware/tests/utils.js | 6 +++--- src/middleware/tests/webacl/initialize.js | 4 ++-- 9 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/middleware/packages/triplestore/actions/dropAll.js b/src/middleware/packages/triplestore/actions/dropAll.js index 021466d83..d897052a3 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.js +++ b/src/middleware/packages/triplestore/actions/dropAll.js @@ -20,7 +20,7 @@ module.exports = { throw new Error(`The dataset ${dataset} doesn't exist`); return await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { - body: 'update=CLEAR+ALL', + body: 'update=DROP+ALL', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-SemappsUser': webId diff --git a/src/middleware/tests/activitypub/initialize.js b/src/middleware/tests/activitypub/initialize.js index 140abe2b6..2fe34a77d 100644 --- a/src/middleware/tests/activitypub/initialize.js +++ b/src/middleware/tests/activitypub/initialize.js @@ -7,7 +7,7 @@ const { CoreService } = require('@semapps/core'); const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); const { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } = require('@semapps/activitypub'); const CONFIG = require('../config'); -const { clearDataset, clearQueue } = require('../utils'); +const { dropDataset, clearQueue } = require('../utils'); const containers = [ { @@ -20,8 +20,8 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0 const baseUrl = `http://localhost:${port}/`; const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; - await clearDataset(mainDataset); - await clearDataset(accountsDataset); + await dropDataset(mainDataset); + await dropDataset(accountsDataset); await clearQueue(queueServiceUrl); const broker = new ServiceBroker({ diff --git a/src/middleware/tests/crypto/initialize.js b/src/middleware/tests/crypto/initialize.js index 1d393260a..f513f2db6 100644 --- a/src/middleware/tests/crypto/initialize.js +++ b/src/middleware/tests/crypto/initialize.js @@ -7,11 +7,11 @@ const { CoreService } = require('@semapps/core'); const { VerifiableCredentialsService } = require('@semapps/crypto'); const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +const { dropDataset } = require('../utils'); const initialize = async (port, withOldKeyStore = false) => { - await clearDataset(CONFIG.MAIN_DATASET); - await clearDataset(CONFIG.SETTINGS_DATASET); + await dropDataset(CONFIG.MAIN_DATASET); + await dropDataset(CONFIG.SETTINGS_DATASET); const baseUrl = `http://localhost:${port}/`; diff --git a/src/middleware/tests/interop/initialize.js b/src/middleware/tests/interop/initialize.js index 8a16ec218..ff7ea7d8d 100644 --- a/src/middleware/tests/interop/initialize.js +++ b/src/middleware/tests/interop/initialize.js @@ -11,7 +11,7 @@ const { pair } = require('@semapps/ontologies'); const { MirrorService, ObjectsWatcherMiddleware } = require('@semapps/sync'); const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +const { dropDataset } = require('../utils'); const containers = [ { @@ -28,8 +28,8 @@ const containers = [ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, serverToMirror) => { // Clear datasets - await clearDataset(mainDataset); - await clearDataset(accountsDataset); + await dropDataset(mainDataset); + await dropDataset(accountsDataset); // Clear queue const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; diff --git a/src/middleware/tests/jsonld/initialize.js b/src/middleware/tests/jsonld/initialize.js index 770c2644a..b98b682c6 100644 --- a/src/middleware/tests/jsonld/initialize.js +++ b/src/middleware/tests/jsonld/initialize.js @@ -5,10 +5,10 @@ const { JsonLdService } = require('@semapps/jsonld'); const { OntologiesService } = require('@semapps/ontologies'); const { TripleStoreService } = require('@semapps/triplestore'); const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +const { dropDataset } = require('../utils'); module.exports = async (cacher, persistRegistry) => { - await clearDataset(CONFIG.SETTINGS_DATASET); + await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ logger: { diff --git a/src/middleware/tests/ldp/initialize.js b/src/middleware/tests/ldp/initialize.js index 35d82d875..db263a8d7 100644 --- a/src/middleware/tests/ldp/initialize.js +++ b/src/middleware/tests/ldp/initialize.js @@ -8,7 +8,7 @@ const { AuthLocalService } = require('@semapps/auth'); const { ControlledContainerMixin } = require('@semapps/ldp'); const path = require('path'); const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +const { dropDataset } = require('../utils'); // Give write permission on all containers to anonymous users const permissions = { @@ -46,7 +46,7 @@ const containers = [ ]; const initialize = async () => { - await clearDataset(CONFIG.MAIN_DATASET); + await dropDataset(CONFIG.MAIN_DATASET); const uploadsPath = pathJoin(__dirname, '../uploads'); if (fs.existsSync(uploadsPath)) { diff --git a/src/middleware/tests/ontologies/initialize.js b/src/middleware/tests/ontologies/initialize.js index 801ec21c0..859c79b93 100644 --- a/src/middleware/tests/ontologies/initialize.js +++ b/src/middleware/tests/ontologies/initialize.js @@ -5,10 +5,10 @@ const { JsonLdService } = require('@semapps/jsonld'); const { OntologiesService } = require('@semapps/ontologies'); const { TripleStoreService } = require('@semapps/triplestore'); const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +const { dropDataset } = require('../utils'); module.exports = async cacher => { - await clearDataset(CONFIG.SETTINGS_DATASET); + await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ logger: { diff --git a/src/middleware/tests/utils.js b/src/middleware/tests/utils.js index 9cdf3d9b5..faed245ef 100644 --- a/src/middleware/tests/utils.js +++ b/src/middleware/tests/utils.js @@ -18,10 +18,10 @@ const listDatasets = async () => { } }; -const clearDataset = dataset => +const dropDataset = dataset => fetch(urlJoin(CONFIG.SPARQL_ENDPOINT, dataset, 'update'), { method: 'POST', - body: 'update=CLEAR+ALL', // DROP+ALL is not working with WebACL datasets ! + body: 'update=DROP+ALL', headers: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: `Basic ${Buffer.from(`${CONFIG.JENA_USER}:${CONFIG.JENA_PASSWORD}`).toString('base64')}` @@ -88,7 +88,7 @@ const wait = ms => }); module.exports = { - clearDataset, + dropDataset, listDatasets, fetchServer, clearQueue, diff --git a/src/middleware/tests/webacl/initialize.js b/src/middleware/tests/webacl/initialize.js index b6c135500..a698ee2f8 100644 --- a/src/middleware/tests/webacl/initialize.js +++ b/src/middleware/tests/webacl/initialize.js @@ -4,11 +4,11 @@ const { CoreService } = require('@semapps/core'); const { as } = require('@semapps/ontologies'); const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); const { AuthLocalService } = require('@semapps/auth'); -const { clearDataset } = require('../utils'); +const { dropDataset } = require('../utils'); const CONFIG = require('../config'); const initialize = async () => { - await clearDataset(CONFIG.MAIN_DATASET); + await dropDataset(CONFIG.MAIN_DATASET); const broker = new ServiceBroker({ middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], From e8392f5442a1202477199130b055d94d0401bd85 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 6 Aug 2025 16:44:25 +0200 Subject: [PATCH 032/165] Missing --- src/middleware/tests/webId/webId.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/middleware/tests/webId/webId.test.js b/src/middleware/tests/webId/webId.test.js index 0b40e513c..0549063ef 100644 --- a/src/middleware/tests/webId/webId.test.js +++ b/src/middleware/tests/webId/webId.test.js @@ -2,7 +2,7 @@ const path = require('path'); const { ServiceBroker } = require('moleculer'); const { CoreService } = require('@semapps/core'); const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +const { dropDataset } = require('../utils'); jest.setTimeout(20000); const broker = new ServiceBroker({ @@ -16,7 +16,7 @@ const broker = new ServiceBroker({ }); beforeAll(async () => { - await clearDataset(CONFIG.MAIN_DATASET); + await dropDataset(CONFIG.MAIN_DATASET); broker.createService({ mixins: [CoreService], From a7f4e292bcd0ce8382b9bd412c570ffd095f77a7 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 6 Aug 2025 16:44:32 +0200 Subject: [PATCH 033/165] New DocumentService --- .../ldp/services/container/actions/exist.js | 16 +--- .../ldp/services/container/actions/post.js | 94 +++++++------------ .../ldp/services/resource/actions/delete.js | 7 +- .../ldp/services/resource/actions/exist.js | 19 +--- .../packages/triplestore/service.js | 16 +++- .../triplestore/subservices/document.js | 43 +++++++++ 6 files changed, 94 insertions(+), 101 deletions(-) create mode 100644 src/middleware/packages/triplestore/subservices/document.js diff --git a/src/middleware/packages/ldp/services/container/actions/exist.js b/src/middleware/packages/ldp/services/container/actions/exist.js index dcbfff8d8..8dc27c428 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.js +++ b/src/middleware/packages/ldp/services/container/actions/exist.js @@ -7,17 +7,9 @@ module.exports = { // Matches container with or without trailing slash const containerUri = ctx.params.containerUri.replace(/\/+$/, ''); - return await ctx.call('triplestore.query', { - query: ` - PREFIX ldp: - ASK { - VALUES ?container { <${containerUri}> <${`${containerUri}/`}> } - GRAPH ?container { - ?container a ldp:Container - } - } - `, - webId: 'system' - }); + return ( + (await ctx.call('triplestore.document.exist', { documentUri: containerUri })) || + (await ctx.call('triplestore.document.exist', { documentUri: `${containerUri}/` })) + ); } }; diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.js index 6a96a2a21..f935e4c3e 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.js @@ -1,6 +1,5 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); const { cleanUndefined } = require('../../../utils'); module.exports = { @@ -73,11 +72,6 @@ module.exports = { } } - // The forcedResourceUri param allows Moleculer service to bypass URI generation - // It is used by ActivityStreams collections to provide URIs like {actorUri}/inbox - const resourceUri = - forcedResourceUri || (await ctx.call('ldp.resource.generateId', { containerUri, slug, isContainer })); - const containerExist = await ctx.call('ldp.container.exist', { containerUri }); if (!containerExist) { throw new MoleculerError( @@ -87,67 +81,45 @@ module.exports = { ); } - // We must add this first, so that the container's ACLs are taken into account - // But this create race conditions, especially when testing, since uncreated resources are linked to containers - // TODO Add temporary ACLs to the resource so that it can be created, then link it to the container ? - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX ldp: - INSERT DATA { - GRAPH <${containerUri}> { - <${containerUri}> ldp:contains <${resourceUri}> - } - } - `, - webId - }); + // The forcedResourceUri param allows Moleculer service to bypass URI generation + // It is used by ActivityStreams collections to provide URIs like {actorUri}/inbox + // TODO Use UUIDs for containers and collections https://github.com/assemblee-virtuelle/semapps/issues/1266 + const resourceUri = + forcedResourceUri || (await ctx.call('ldp.resource.generateId', { containerUri, slug, isContainer })); + await ctx.call('triplestore.document.create', { documentUri: resourceUri }); - try { - if (file) { - resource = await ctx.call('ldp.resource.upload', { resourceUri, file }); - } + if (file) { + resource = await ctx.call('ldp.resource.upload', { resourceUri, file }); + } - if (isContainer) { - await ctx.call('ldp.container.create', { - containerUri: resourceUri, - title: expandedResource['http://purl.org/dc/terms/title']?.[0]['@value'], - description: expandedResource['http://purl.org/dc/terms/description']?.[0]['@value'], - webId - }); - } else { - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); - - // Change relative URIs to full URIs - const resourceWithBase = resource['@graph'] - ? await ctx.call('jsonld.parser.changeBase', { - input: resource, - base: resourceUri - }) - : { ...resource, '@id': resourceUri }; - - await ctx.call(controlledActions.create || 'ldp.resource.create', { - resource: resourceWithBase, - resourceUri, - webId - }); - } - } catch (e) { - // If there was an error inserting the resource, detach it from the container - await ctx.call('triplestore.update', { - query: ` - PREFIX ldp: - DELETE WHERE { - GRAPH <${containerUri}> { - <${containerUri}> ldp:contains <${resourceUri}> - } - }`, + if (isContainer) { + await ctx.call('ldp.container.create', { + containerUri: resourceUri, + title: expandedResource['http://purl.org/dc/terms/title']?.[0]['@value'], + description: expandedResource['http://purl.org/dc/terms/description']?.[0]['@value'], + webId + }); + } else { + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); + + // Change relative URIs to full URIs + const resourceWithBase = resource['@graph'] + ? await ctx.call('jsonld.parser.changeBase', { + input: resource, + base: resourceUri + }) + : { ...resource, '@id': resourceUri }; + + await ctx.call(controlledActions.create || 'ldp.resource.create', { + resource: resourceWithBase, + resourceUri, webId }); - - // Re-throw the error so that it's displayed by the API function - throw e; } + // Attach the resource to the parent container + await this.actions.attach({ containerUri, resourceUri, webId }, { meta: { skipEmitEvent: true }, parentCtx: ctx }); + if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.attached', diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.js index b7465357d..0ab99d245 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.js +++ b/src/middleware/packages/ldp/services/resource/actions/delete.js @@ -43,12 +43,7 @@ module.exports = { webId }); - // We need to manually drop the graph, otherwise the triple store may consider it still exists - // TODO: Move this to the DocumentService - await ctx.call('triplestore.update', { - query: `DROP GRAPH <${resourceUri}>`, - webId - }); + await ctx.call('triplestore.document.delete', { documentUri: resourceUri }); // We must detach the resource from the containers after deletion, otherwise the permissions may fail const containersUris = await ctx.call('ldp.resource.getContainers', { resourceUri }); diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.js b/src/middleware/packages/ldp/services/resource/actions/exist.js index cea0ae1d6..5ba18a56e 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.js +++ b/src/middleware/packages/ldp/services/resource/actions/exist.js @@ -9,24 +9,7 @@ module.exports = { const { resourceUri, acceptTombstones } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // Returns true if a graph with the resource URI exist - let exist = await ctx.call('triplestore.query', { - query: ` - ASK { - GRAPH <${resourceUri}> {} - } - `, - webId: 'system' - }); - - // // If this is a remote URI and the resource is not found in default graph, also look in mirror graph - // if (!exist && (await ctx.call('ldp.remote.isRemote', { resourceUri }))) { - // exist = await ctx.call('triplestore.tripleExist', { - // triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - // webId: 'system', - // graphName: this.settings.mirrorGraphName - // }); - // } + const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); // If resource exists but we don't want tombstones, check the resource type if (exist && !acceptTombstones) { diff --git a/src/middleware/packages/triplestore/service.js b/src/middleware/packages/triplestore/service.js index 4dc0f657b..0c81dfa69 100644 --- a/src/middleware/packages/triplestore/service.js +++ b/src/middleware/packages/triplestore/service.js @@ -11,6 +11,7 @@ const query = require('./actions/query'); const update = require('./actions/update'); const tripleExist = require('./actions/tripleExist'); const DatasetService = require('./subservices/dataset'); +const DocumentService = require('./subservices/document'); const TripleStoreService = { name: 'triplestore', @@ -21,15 +22,15 @@ const TripleStoreService = { mainDataset: null, fusekiBase: null, // Sub-services customization - dataset: {} + dataset: {}, + document: {} }, dependencies: ['jsonld.parser'], async created() { - const { url, user, password, dataset, fusekiBase } = this.settings; - this.subservices = {}; + const { url, user, password, fusekiBase, dataset, document } = this.settings; if (dataset !== false) { - this.subservices.dataset = this.broker.createService({ + this.broker.createService({ mixins: [DatasetService], settings: { url, @@ -40,6 +41,13 @@ const TripleStoreService = { } }); } + + if (document !== false) { + this.broker.createService({ + mixins: [DocumentService], + settings: document + }); + } }, started() { this.sparqlJsonParser = new SparqlJsonParser(); diff --git a/src/middleware/packages/triplestore/subservices/document.js b/src/middleware/packages/triplestore/subservices/document.js new file mode 100644 index 000000000..ed1c24f50 --- /dev/null +++ b/src/middleware/packages/triplestore/subservices/document.js @@ -0,0 +1,43 @@ +const { v4: uuidv4 } = require('uuid'); + +/** @type {import('moleculer').ServiceSchema} */ +const DocumentService = { + name: 'triplestore.document', + actions: { + async create(ctx) { + // TODO Do not allow to pass the document URI on creation + let { documentUri } = ctx.params; + if (!documentUri) uuidv4(); + + if (await this.actions.exist({ documentUri }, { parentCtx: ctx })) { + throw new Error(`Cannot create document as it already exists`); + } + + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${documentUri}> {} }`, + webId: 'system' + }); + + return documentUri; + }, + async exist(ctx) { + const { documentUri } = ctx.params; + + return await ctx.call('triplestore.query', { + query: `ASK { GRAPH <${documentUri}> {} }`, + webId: 'system' + }); + }, + async delete(ctx) { + const { documentUri } = ctx.params; + + // We need to manually drop the graph, otherwise Fuseki will consider it still exists + await ctx.call('triplestore.update', { + query: `DROP GRAPH <${documentUri}>`, + webId: 'system' + }); + } + } +}; + +module.exports = DocumentService; From 093aaecb3a04310be4e01dea2b2f9355c70da9fb Mon Sep 17 00:00:00 2001 From: Laurin <59744144+Laurin-W@users.noreply.github.com> Date: Thu, 7 Aug 2025 10:01:52 +0200 Subject: [PATCH 034/165] Migrate Middleware to Typescript (#1409) * middleware: from cjs to tsm * chore: middleware: Add type module to all packages * feat: improve moleculer types (patched), add type test * middleware fix import * issues in crypto * add @types/ packages * update yarn version * middleware: setup ts>js transpilation * middleware: moleculer mods as yarn patch --- .git-hooks/pre-push | 2 +- .gitignore | 4 +- scripts/run-typecheck.sh | 2 +- src/frontend/package.json | 2 +- src/middleware/.eslintrc.json | 8 +- src/middleware/.gitignore | 1 + .../moleculer-npm-0.14.35-b9acbe0879.patch | 4460 +++ .../patches/moleculer-patch-59829b52bf.patch | 12 + src/middleware/.yarnrc | 5 + src/middleware/.yarnrc.yml | 1 + src/middleware/package.json | 28 +- .../{constants.js => constants.ts} | 19 +- .../{containers.js => containers.ts} | 4 +- src/middleware/packages/activitypub/index.js | 15 - src/middleware/packages/activitypub/index.ts | 20 + .../activitypub/mixins/activities-handler.js | 51 - .../activitypub/mixins/activities-handler.ts | 61 + .../{await-activity.js => await-activity.ts} | 12 +- .../activitypub/mixins/{bot.js => bot.ts} | 36 +- .../mixins/{fake-queue.js => fake-queue.ts} | 11 +- .../packages/activitypub/package.json | 11 +- .../activitypub/services/activity-mapping.js | 123 - .../activitypub/services/activity-mapping.ts | 144 + .../activitypub/services/activitypub/index.js | 149 - .../activitypub/services/activitypub/index.ts | 172 + ...etRightsHandler.js => setRightsHandler.ts} | 13 +- .../activitypub/subservices/activity.js | 116 - .../activitypub/subservices/activity.ts | 137 + .../services/activitypub/subservices/actor.js | 196 - .../services/activitypub/subservices/actor.ts | 237 + .../services/activitypub/subservices/api.js | 125 - .../services/activitypub/subservices/api.ts | 156 + .../collection/actions/{get.js => get.ts} | 45 +- .../subservices/collection/index.js | 278 - .../subservices/collection/index.ts | 324 + .../subservices/collections-registry.js | 300 - .../subservices/collections-registry.ts | 366 + .../activitypub/subservices/follow.js | 222 - .../activitypub/subservices/follow.ts | 253 + .../services/activitypub/subservices/inbox.js | 187 - .../services/activitypub/subservices/inbox.ts | 219 + .../services/activitypub/subservices/like.js | 178 - .../services/activitypub/subservices/like.ts | 211 + .../activitypub/subservices/object.js | 209 - .../activitypub/subservices/object.ts | 240 + .../activitypub/subservices/outbox.js | 321 - .../activitypub/subservices/outbox.ts | 346 + .../services/activitypub/subservices/reply.js | 140 - .../services/activitypub/subservices/reply.ts | 166 + .../services/activitypub/subservices/share.js | 100 - .../services/activitypub/subservices/share.ts | 120 + .../{side-effects.js => side-effects.ts} | 147 +- .../activitypub/services/migration.js | 32 - .../activitypub/services/migration.ts | 49 + .../services/{relay.js => relay.ts} | 25 +- .../packages/activitypub/tsconfig.json | 10 + .../activitypub/{utils.js => utils.ts} | 29 +- .../{matchActivity.js => matchActivity.ts} | 6 +- src/middleware/packages/auth/index.js | 9 - src/middleware/packages/auth/index.ts | 17 + .../packages/auth/middlewares/localLogout.js | 6 - .../packages/auth/middlewares/localLogout.ts | 6 + ...{redirectToFront.js => redirectToFront.ts} | 4 +- ...{saveRedirectUrl.js => saveRedirectUrl.ts} | 4 +- .../{sendToken.js => sendToken.ts} | 4 +- .../packages/auth/mixins/auth.sso.js | 93 - .../packages/auth/mixins/auth.sso.ts | 100 + .../packages/auth/mixins/{auth.js => auth.ts} | 157 +- src/middleware/packages/auth/package.json | 11 +- .../packages/auth/services/account.js | 315 - .../packages/auth/services/account.ts | 382 + .../packages/auth/services/auth.cas.js | 45 - .../packages/auth/services/auth.cas.ts | 56 + .../packages/auth/services/auth.local.js | 238 - .../packages/auth/services/auth.local.ts | 276 + .../services/{auth.oidc.js => auth.oidc.ts} | 30 +- src/middleware/packages/auth/services/jwt.js | 101 - src/middleware/packages/auth/services/jwt.ts | 127 + src/middleware/packages/auth/services/mail.js | 49 - src/middleware/packages/auth/services/mail.ts | 67 + .../packages/auth/services/migration.js | 28 - .../packages/auth/services/migration.ts | 42 + src/middleware/packages/auth/tsconfig.json | 10 + src/middleware/packages/backup/index.js | 179 - src/middleware/packages/backup/index.ts | 210 + src/middleware/packages/backup/package.json | 11 +- src/middleware/packages/backup/tsconfig.json | 10 + .../packages/backup/utils/fsCopy.js | 9 - .../packages/backup/utils/fsCopy.ts | 10 + .../packages/backup/utils/fsRemove.js | 12 - .../packages/backup/utils/fsRemove.ts | 12 + .../backup/utils/{ftpCopy.js => ftpCopy.ts} | 15 +- .../packages/backup/utils/ftpRemove.js | 24 - .../packages/backup/utils/ftpRemove.ts | 26 + .../utils/{rsyncCopy.js => rsyncCopy.ts} | 12 +- src/middleware/packages/core/index.js | 3 - src/middleware/packages/core/index.ts | 3 + src/middleware/packages/core/package.json | 11 +- .../packages/core/{service.js => service.ts} | 60 +- src/middleware/packages/core/tsconfig.json | 10 + .../crypto/{constants.js => constants.ts} | 9 +- src/middleware/packages/crypto/index.js | 6 - src/middleware/packages/crypto/index.ts | 4 + src/middleware/packages/crypto/keys/index.js | 4 - src/middleware/packages/crypto/keys/index.ts | 4 + .../packages/crypto/keys/key-container.js | 79 - .../packages/crypto/keys/key-container.ts | 96 + .../packages/crypto/keys/{keys.js => keys.ts} | 189 +- .../packages/crypto/keys/migration.js | 178 - .../packages/crypto/keys/migration.ts | 196 + ...y-container.js => public-key-container.ts} | 39 +- src/middleware/packages/crypto/package.json | 16 +- .../crypto/signature/http-signatures.js | 145 - .../crypto/signature/http-signatures.ts | 178 + .../packages/crypto/signature/index.js | 5 - .../packages/crypto/signature/index.ts | 5 + .../packages/crypto/signature/keypair.js | 229 - .../packages/crypto/signature/keypair.ts | 263 + .../packages/crypto/signature/proxy.js | 159 - .../packages/crypto/signature/proxy.ts | 186 + src/middleware/packages/crypto/tsconfig.json | 10 + ...Context.js => noGraphCredentialContext.ts} | 2 +- .../crypto/utils/{utils.js => utils.ts} | 8 +- ...> VcCapabilityPresentationProofPurpose.ts} | 10 +- .../{VcPurpose.js => VcPurpose.ts} | 9 +- .../challenge-service.js | 91 - .../challenge-service.ts | 111 + ...y-service.js => data-integrity-service.ts} | 51 +- .../crypto/verifiable-credentials/index.js | 6 - .../crypto/verifiable-credentials/index.ts | 6 + .../{vc-api-service.js => vc-api-service.ts} | 21 +- ...er-service.js => vc-authorizer-service.ts} | 36 +- .../vc-credential-container.js | 96 - .../vc-credential-container.ts | 118 + ...holder-service.js => vc-holder-service.ts} | 48 +- ...issuer-service.js => vc-issuer-service.ts} | 49 +- .../vc-presentation-container.js | 88 - .../vc-presentation-container.ts | 110 + .../verifiable-credentials/vc-service.js | 61 - .../verifiable-credentials/vc-service.ts | 79 + ...fier-service.js => vc-verifier-service.ts} | 57 +- src/middleware/packages/importer/index.js | 13 - src/middleware/packages/importer/index.ts | 24 + .../mixins/{discourse.js => discourse.ts} | 16 +- .../importer/mixins/{drupal.js => drupal.ts} | 17 +- .../mixins/{gogocarto.js => gogocarto.ts} | 13 +- .../importer/mixins/{humhub.js => humhub.ts} | 30 +- .../mixins/{importer.js => importer.ts} | 365 +- .../mixins/{jotform.js => jotform.ts} | 17 +- .../mixins/{mobilizon.js => mobilizon.ts} | 14 +- .../mixins/{prestashop.js => prestashop.ts} | 20 +- .../mixins/{wordpress.js => wordpress.ts} | 18 +- .../mixins/{yeswiki.js => yeswiki.ts} | 19 +- src/middleware/packages/importer/package.json | 10 +- .../packages/importer/tsconfig.json | 10 + .../packages/importer/{utils.js => utils.ts} | 26 +- src/middleware/packages/inference/index.js | 3 - src/middleware/packages/inference/index.ts | 3 + .../packages/inference/package.json | 10 +- src/middleware/packages/inference/service.js | 325 - src/middleware/packages/inference/service.ts | 401 + .../subservices/{remote.js => remote.ts} | 35 +- .../packages/inference/tsconfig.json | 10 + src/middleware/packages/jsonld/index.js | 9 - src/middleware/packages/jsonld/index.ts | 16 + src/middleware/packages/jsonld/package.json | 12 +- .../jsonld/{service.js => service.ts} | 33 +- .../packages/jsonld/services/api/index.js | 27 - .../packages/jsonld/services/api/index.ts | 42 + .../context/actions/{get.js => get.ts} | 10 +- .../actions/{getLocal.js => getLocal.ts} | 14 +- .../context/actions/{merge.js => merge.ts} | 11 +- .../jsonld/services/context/actions/parse.js | 15 - .../jsonld/services/context/actions/parse.ts | 21 + .../actions/{validate.js => validate.ts} | 10 +- .../services/context/{index.js => index.ts} | 29 +- .../jsonld/services/document-loader/index.js | 83 - .../jsonld/services/document-loader/index.ts | 109 + .../packages/jsonld/services/parser/index.js | 183 - .../packages/jsonld/services/parser/index.ts | 229 + src/middleware/packages/jsonld/tsconfig.json | 10 + .../utils/{uriSchemes.js => uriSchemes.ts} | 2 +- .../jsonld/utils/{utils.js => utils.ts} | 27 +- src/middleware/packages/ldp/adapter.js | 209 - src/middleware/packages/ldp/adapter.ts | 249 + src/middleware/packages/ldp/index.js | 27 - src/middleware/packages/ldp/index.ts | 42 + .../ldp/mixins/controlled-container.js | 129 - .../ldp/mixins/controlled-container.ts | 176 + .../mixins/{dereference.js => dereference.ts} | 10 +- .../mixins/{disassembly.js => disassembly.ts} | 14 +- .../packages/ldp/mixins/document-tagger.js | 82 - .../packages/ldp/mixins/document-tagger.ts | 105 + .../packages/ldp/mixins/image-processor.js | 97 - .../packages/ldp/mixins/image-processor.ts | 108 + .../mixins/{mime-types.js => mime-types.ts} | 15 +- .../ldp/mixins/orphan-files-deletion.js | 60 - .../ldp/mixins/orphan-files-deletion.ts | 66 + .../ldp/mixins/{pseudo-id.js => pseudo-id.ts} | 8 +- .../ldp/mixins/single-resource-container.js | 102 - .../ldp/mixins/single-resource-container.ts | 127 + ...pecial-endpoint.js => special-endpoint.ts} | 71 +- src/middleware/packages/ldp/package.json | 11 +- ...etCatchAllRoute.js => getCatchAllRoute.ts} | 11 +- .../{getPodsRoute.js => getPodsRoute.ts} | 13 +- src/middleware/packages/ldp/service.js | 115 - src/middleware/packages/ldp/service.ts | 142 + .../api/actions/{delete.js => delete.ts} | 7 +- .../services/api/actions/{get.js => get.ts} | 18 +- .../services/api/actions/{head.js => head.ts} | 7 +- .../api/actions/{patch.js => patch.ts} | 17 +- .../services/api/actions/{post.js => post.ts} | 20 +- .../packages/ldp/services/api/actions/put.js | 42 - .../packages/ldp/services/api/actions/put.ts | 57 + .../ldp/services/api/{index.js => index.ts} | 35 +- .../packages/ldp/services/cache/index.js | 93 - .../packages/ldp/services/cache/index.ts | 169 + .../actions/{attach.js => attach.ts} | 17 +- .../container/actions/{clear.js => clear.ts} | 8 +- .../actions/{create.js => create.ts} | 10 +- ...{createAndAttach.js => createAndAttach.ts} | 12 +- .../actions/{delete.js => delete.ts} | 13 +- .../actions/{detach.js => detach.ts} | 12 +- .../container/actions/{exist.js => exist.ts} | 8 +- .../container/actions/{get.js => get.ts} | 23 +- .../actions/{getAll.js => getAll.ts} | 10 +- .../actions/{getPath.js => getPath.ts} | 15 +- .../actions/{getUris.js => getUris.ts} | 10 +- .../actions/{includes.js => includes.ts} | 9 +- .../actions/{isEmpty.js => isEmpty.ts} | 10 +- .../container/actions/{patch.js => patch.ts} | 28 +- .../container/actions/{post.js => post.ts} | 23 +- .../packages/ldp/services/container/index.js | 58 - .../packages/ldp/services/container/index.ts | 77 + .../link-header/actions/{get.js => get.ts} | 9 +- .../actions/{register.js => register.ts} | 8 +- .../ldp/services/link-header/index.js | 13 - .../ldp/services/link-header/index.ts | 26 + .../{addAuthorizer.js => addAuthorizer.ts} | 10 +- .../actions/{check.js => check.ts} | 12 +- .../permissions/actions/{has.js => has.ts} | 9 +- .../ldp/services/permissions/index.js | 15 - .../ldp/services/permissions/index.ts | 29 + .../actions/{getByType.js => getByType.ts} | 12 +- .../actions/{getByUri.js => getByUri.ts} | 9 +- .../registry/actions/{getUri.js => getUri.ts} | 9 +- .../ldp/services/registry/actions/list.js | 6 - .../ldp/services/registry/actions/list.ts | 10 + .../actions/{register.js => register.ts} | 25 +- .../{defaultOptions.js => defaultOptions.ts} | 8 +- .../packages/ldp/services/registry/index.js | 56 - .../packages/ldp/services/registry/index.ts | 74 + .../remote/actions/{delete.js => delete.ts} | 13 +- .../remote/actions/{get.js => get.ts} | 16 +- .../actions/{getGraph.js => getGraph.ts} | 9 +- .../actions/{getNetwork.js => getNetwork.ts} | 20 +- .../actions/{getStored.js => getStored.ts} | 20 +- .../actions/{isRemote.js => isRemote.ts} | 10 +- .../remote/actions/{store.js => store.ts} | 16 +- .../services/remote/{index.js => index.ts} | 52 +- ...eateComplete.js => awaitCreateComplete.ts} | 11 +- .../resource/actions/{create.js => create.ts} | 20 +- .../resource/actions/{delete.js => delete.ts} | 13 +- .../resource/actions/{exist.js => exist.ts} | 10 +- .../actions/{generateId.js => generateId.ts} | 20 +- .../resource/actions/{get.js => get.ts} | 19 +- .../{getContainers.js => getContainers.ts} | 13 +- .../actions/{getTypes.js => getTypes.ts} | 11 +- .../resource/actions/{patch.js => patch.ts} | 21 +- .../resource/actions/{put.js => put.ts} | 25 +- .../resource/actions/{upload.js => upload.ts} | 22 +- .../packages/ldp/services/resource/index.js | 55 - .../packages/ldp/services/resource/index.ts | 69 + .../resource/{methods.js => methods.ts} | 84 +- src/middleware/packages/ldp/tsconfig.json | 10 + .../packages/ldp/{utils.js => utils.ts} | 56 +- .../middlewares/{index.js => index.ts} | 50 +- .../packages/middlewares/package.json | 13 +- .../packages/middlewares/tsconfig.json | 10 + src/middleware/packages/migration/index.js | 3 - src/middleware/packages/migration/index.ts | 3 + .../packages/migration/package.json | 10 +- src/middleware/packages/migration/service.js | 181 - src/middleware/packages/migration/service.ts | 209 + .../packages/migration/tsconfig.json | 10 + .../mime-types/{constants.js => constants.ts} | 5 +- .../mime-types/{index.js => index.ts} | 31 +- .../packages/mime-types/package.json | 11 +- .../packages/mime-types/tsconfig.json | 10 + src/middleware/packages/nodeinfo/index.js | 3 - src/middleware/packages/nodeinfo/index.ts | 3 + src/middleware/packages/nodeinfo/package.json | 10 +- .../nodeinfo/{service.js => service.ts} | 88 +- .../packages/nodeinfo/tsconfig.json | 10 + .../packages/notifications/index.js | 5 - .../packages/notifications/index.ts | 5 + .../packages/notifications/package.json | 11 +- .../notifications/services/digest/service.js | 149 - .../notifications/services/digest/service.ts | 167 + .../services/digest/subscription.js | 19 - .../services/digest/subscription.ts | 32 + .../services/expo-push/device.js | 86 - .../services/expo-push/device.ts | 100 + .../services/expo-push/notification.js | 155 - .../services/expo-push/notification.ts | 177 + .../expo-push/{service.js => service.ts} | 23 +- .../services/single-mail/service.js | 98 - .../services/single-mail/service.ts | 126 + .../packages/notifications/tsconfig.json | 10 + .../{findNamespace.js => findNamespace.ts} | 10 +- .../actions/{findPrefix.js => findPrefix.ts} | 12 +- .../ontologies/actions/{get.js => get.ts} | 10 +- .../ontologies/actions/getPrefixes.js | 12 - .../ontologies/actions/getPrefixes.ts | 16 + .../ontologies/actions/getRdfPrefixes.js | 11 - .../ontologies/actions/getRdfPrefixes.ts | 15 + .../packages/ontologies/actions/list.js | 7 - .../packages/ontologies/actions/list.ts | 11 + .../{prefixToUri.js => prefixToUri.ts} | 11 +- .../actions/{register.js => register.ts} | 14 +- src/middleware/packages/ontologies/index.js | 16 - src/middleware/packages/ontologies/index.ts | 9 + .../ontologies/ontologies/core/index.js | 17 - .../ontologies/ontologies/core/index.ts | 34 + .../ontologies/ontologies/custom/index.js | 11 - .../ontologies/ontologies/custom/index.ts | 11 + .../ontologies/ontologies/solid/index.js | 8 - .../ontologies/ontologies/solid/index.ts | 8 + .../packages/ontologies/package.json | 10 +- .../ontologies/{service.js => service.ts} | 38 +- .../ontologies/sub-services/registry.js | 44 - .../ontologies/sub-services/registry.ts | 66 + .../packages/ontologies/tsconfig.json | 10 + .../ontologies/{utils.js => utils.ts} | 10 +- src/middleware/packages/solid/index.js | 9 - src/middleware/packages/solid/index.ts | 17 + src/middleware/packages/solid/package.json | 11 +- .../packages/solid/services/authorizer.js | 19 - .../packages/solid/services/authorizer.ts | 33 + .../packages/solid/services/endpoint.js | 28 - .../packages/solid/services/endpoint.ts | 41 + .../channels/notification-channel.mixin.js | 309 - .../channels/notification-channel.mixin.ts | 370 + ...{webhook-channel.js => webhook-channel.ts} | 51 +- ...socket-channel.js => websocket-channel.ts} | 40 +- .../solid/services/notifications/listener.js | 200 - .../solid/services/notifications/listener.ts | 226 + .../{provider.js => provider.ts} | 30 +- ...references-file.js => preferences-file.ts} | 23 +- .../packages/solid/services/storage.js | 89 - .../packages/solid/services/storage.ts | 110 + .../solid/services/type-index/type-indexes.js | 188 - .../solid/services/type-index/type-indexes.ts | 228 + ...registrations.js => type-registrations.ts} | 99 +- src/middleware/packages/solid/tsconfig.json | 10 + .../{getRoute.js => getRoute.ts} | 10 +- .../packages/sparql-endpoint/index.js | 3 - .../packages/sparql-endpoint/index.ts | 3 + .../packages/sparql-endpoint/package.json | 11 +- .../packages/sparql-endpoint/service.js | 67 - .../packages/sparql-endpoint/service.ts | 89 + .../packages/sparql-endpoint/tsconfig.json | 10 + src/middleware/packages/sync/index.js | 6 - src/middleware/packages/sync/index.ts | 6 + ...{objects-watcher.js => objects-watcher.ts} | 50 +- src/middleware/packages/sync/package.json | 11 +- .../packages/sync/services/aggregator.js | 48 - .../packages/sync/services/aggregator.ts | 64 + .../sync/services/{mirror.js => mirror.ts} | 37 +- .../{synchronizer.js => synchronizer.ts} | 54 +- src/middleware/packages/sync/tsconfig.json | 10 + ...sOfSubject.js => countTriplesOfSubject.ts} | 10 +- ...lankNodes.js => deleteOrphanBlankNodes.ts} | 9 +- .../actions/{dropAll.js => dropAll.ts} | 11 +- .../actions/{insert.js => insert.ts} | 12 +- .../actions/{query.js => query.ts} | 17 +- .../{tripleExist.js => tripleExist.ts} | 11 +- .../actions/{update.js => update.ts} | 12 +- .../triplestore/{adapter.js => adapter.ts} | 91 +- src/middleware/packages/triplestore/index.js | 8 - src/middleware/packages/triplestore/index.ts | 6 + .../packages/triplestore/package.json | 13 +- .../triplestore/{service.js => service.ts} | 47 +- .../triplestore/subservices/dataset.js | 163 - .../triplestore/subservices/dataset.ts | 195 + .../packages/triplestore/tsconfig.json | 10 + .../triplestore/{utils.js => utils.ts} | 16 +- src/middleware/packages/void/index.js | 3 - src/middleware/packages/void/index.ts | 3 + src/middleware/packages/void/package.json | 11 +- .../packages/void/{service.js => service.ts} | 126 +- src/middleware/packages/void/tsconfig.json | 10 + .../packages/webacl/bots/authorizer-bot.js | 112 - .../packages/webacl/bots/authorizer-bot.ts | 138 + .../packages/webacl/bots/groups-manager.js | 117 - .../packages/webacl/bots/groups-manager.ts | 153 + src/middleware/packages/webacl/index.js | 10 - src/middleware/packages/webacl/index.ts | 8 + .../middlewares/{cacher.js => cacher.ts} | 15 +- .../middlewares/{webacl.js => webacl.ts} | 20 +- src/middleware/packages/webacl/package.json | 11 +- .../routes/{getRoutes.js => getRoutes.ts} | 11 +- .../webacl/{service.js => service.ts} | 35 +- .../webacl/services/authorizer/index.js | 35 - .../webacl/services/authorizer/index.ts | 50 + .../packages/webacl/services/cache/index.js | 81 - .../packages/webacl/services/cache/index.ts | 133 + .../services/group/actions/addMember.js | 64 - .../services/group/actions/addMember.ts | 69 + .../webacl/services/group/actions/create.js | 82 - .../webacl/services/group/actions/create.ts | 91 + .../webacl/services/group/actions/delete.js | 60 - .../webacl/services/group/actions/delete.ts | 64 + .../webacl/services/group/actions/exist.js | 31 - .../webacl/services/group/actions/exist.ts | 34 + .../services/group/actions/getGroups.js | 57 - .../services/group/actions/getGroups.ts | 59 + .../services/group/actions/getMembers.js | 56 - .../services/group/actions/getMembers.ts | 61 + .../webacl/services/group/actions/getUri.js | 14 - .../webacl/services/group/actions/getUri.ts | 13 + .../webacl/services/group/actions/isMember.js | 51 - .../webacl/services/group/actions/isMember.ts | 55 + .../services/group/actions/removeMember.js | 65 - .../services/group/actions/removeMember.ts | 69 + .../services/group/{index.js => index.ts} | 47 +- .../services/resource/actions/addRights.js | 167 - .../services/resource/actions/addRights.ts | 175 + .../resource/actions/awaitReadRight.js | 37 - .../resource/actions/awaitReadRight.ts | 38 + .../resource/actions/deleteAllRights.js | 31 - .../resource/actions/deleteAllRights.ts | 32 + .../resource/actions/deleteAllUserRights.js | 27 - .../resource/actions/deleteAllUserRights.ts | 28 + .../services/resource/actions/getLink.js | 17 - .../services/resource/actions/getLink.ts | 16 + .../actions/{getRights.js => getRights.ts} | 117 +- .../actions/getUsersWithReadRights.js | 32 - .../actions/getUsersWithReadRights.ts | 31 + .../services/resource/actions/hasRights.js | 129 - .../services/resource/actions/hasRights.ts | 135 + .../services/resource/actions/isPublic.js | 17 - .../services/resource/actions/isPublic.ts | 17 + .../actions/refreshContainersRights.js | 61 - .../actions/refreshContainersRights.ts | 62 + .../services/resource/actions/removeRights.js | 70 - .../services/resource/actions/removeRights.ts | 76 + .../services/resource/actions/setRights.js | 152 - .../services/resource/actions/setRights.ts | 161 + .../services/resource/{index.js => index.ts} | 66 +- src/middleware/packages/webacl/tsconfig.json | 10 + .../packages/webacl/{utils.js => utils.ts} | 87 +- src/middleware/packages/webfinger/index.js | 3 - src/middleware/packages/webfinger/index.ts | 3 + .../packages/webfinger/package.json | 10 +- src/middleware/packages/webfinger/service.js | 75 - src/middleware/packages/webfinger/service.ts | 90 + .../packages/webfinger/tsconfig.json | 10 + src/middleware/packages/webhooks/index.js | 3 - src/middleware/packages/webhooks/index.ts | 3 + src/middleware/packages/webhooks/package.json | 11 +- src/middleware/packages/webhooks/service.js | 107 - src/middleware/packages/webhooks/service.ts | 134 + .../packages/webhooks/tsconfig.json | 10 + src/middleware/packages/webid/index.js | 3 - src/middleware/packages/webid/index.ts | 3 + src/middleware/packages/webid/package.json | 10 +- src/middleware/packages/webid/service.js | 110 - src/middleware/packages/webid/service.ts | 124 + src/middleware/packages/webid/tsconfig.json | 10 + src/middleware/tests/.nvmrc | 1 + ...ion-api.test.js => collection-api.test.ts} | 25 +- ...{collection.test.js => collection.test.ts} | 26 +- .../{follow.test.js => follow.test.ts} | 25 +- .../{inbox.test.js => inbox.test.ts} | 16 +- .../{initialize.js => initialize.ts} | 31 +- .../{like.test.js => like.test.ts} | 23 +- .../{message.test.js => message.test.ts} | 26 +- .../{object.test.js => object.test.ts} | 17 +- .../{outbox.test.js => outbox.test.ts} | 19 +- .../{shares.test.js => shares.test.ts} | 25 +- src/middleware/tests/babel.config.js | 4 + src/middleware/tests/config.js | 14 - src/middleware/tests/config.ts | 14 + .../crypto/{initialize.js => initialize.ts} | 33 +- .../crypto/{keys.test.js => keys.test.ts} | 65 +- ...test.js => verifiable-credentials.test.ts} | 28 +- .../interop/{initialize.js => initialize.ts} | 51 +- ...ected.test.js => mirror-protected.test.ts} | 21 +- .../{mirror.test.js => mirror.test.ts} | 19 +- ...ch-remote.test.js => patch-remote.test.ts} | 17 +- ...rence.test.js => remote-inference.test.ts} | 20 +- src/middleware/tests/jest.config.js | 16 +- .../tests/{jest.setup.js => jest.setup.ts} | 5 +- .../jsonld/{initialize.js => initialize.ts} | 26 +- .../jsonld/{merge.test.js => merge.test.ts} | 12 +- .../tests/ldp/{api.test.js => api.test.ts} | 23 +- .../ldp/{binary.test.js => binary.test.ts} | 31 +- ...er-path.test.js => container-path.test.ts} | 11 +- .../{container.test.js => container.test.ts} | 12 +- ...on.test.js => content-negotiation.test.ts} | 19 +- .../ldp/{headers.test.js => headers.test.ts} | 22 +- .../ldp/{initialize.js => initialize.ts} | 50 +- .../{resource.test.js => resource.test.ts} | 21 +- .../{initialize.js => initialize.ts} | 26 +- ...{ontologies.test.js => ontologies.test.ts} | 22 +- src/middleware/tests/package.json | 27 +- src/middleware/tests/run-typecheck.sh | 28 + src/middleware/tests/test-types.sh | 27 + src/middleware/tests/tsconfig.json | 8 + src/middleware/tests/{utils.js => utils.ts} | 39 +- .../webId/{webId.test.js => webId.test.ts} | 15 +- .../{groupCRUD.test.js => groupCRUD.test.ts} | 11 +- .../webacl/{initialize.js => initialize.ts} | 27 +- .../{resource.test.js => resource.test.ts} | 12 +- ...ourceCRUD.test.js => resourceCRUD.test.ts} | 19 +- ...ction.test.js => sparql-injection.test.ts} | 15 +- .../webacl/{utils.test.js => utils.test.ts} | 10 +- src/middleware/tsconfig.json | 13 +- src/middleware/yarn.lock | 29072 +++++++++------- yarn.lock | 15 + 521 files changed, 38320 insertions(+), 24703 deletions(-) create mode 100644 src/middleware/.gitignore create mode 100644 src/middleware/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch create mode 100644 src/middleware/.yarn/patches/moleculer-patch-59829b52bf.patch create mode 100644 src/middleware/.yarnrc create mode 100644 src/middleware/.yarnrc.yml rename src/middleware/packages/activitypub/{constants.js => constants.ts} (74%) rename src/middleware/packages/activitypub/{containers.js => containers.ts} (65%) delete mode 100644 src/middleware/packages/activitypub/index.js create mode 100644 src/middleware/packages/activitypub/index.ts delete mode 100644 src/middleware/packages/activitypub/mixins/activities-handler.js create mode 100644 src/middleware/packages/activitypub/mixins/activities-handler.ts rename src/middleware/packages/activitypub/mixins/{await-activity.js => await-activity.ts} (85%) rename src/middleware/packages/activitypub/mixins/{bot.js => bot.ts} (67%) rename src/middleware/packages/activitypub/mixins/{fake-queue.js => fake-queue.ts} (54%) delete mode 100644 src/middleware/packages/activitypub/services/activity-mapping.js create mode 100644 src/middleware/packages/activitypub/services/activity-mapping.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/index.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/index.ts rename src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/{setRightsHandler.js => setRightsHandler.ts} (89%) delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/activity.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/actor.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/api.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/api.ts rename src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/{get.js => get.ts} (86%) delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/follow.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/like.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/like.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/object.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/object.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/reply.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/share.js create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/share.ts rename src/middleware/packages/activitypub/services/activitypub/subservices/{side-effects.js => side-effects.ts} (75%) delete mode 100644 src/middleware/packages/activitypub/services/migration.js create mode 100644 src/middleware/packages/activitypub/services/migration.ts rename src/middleware/packages/activitypub/services/{relay.js => relay.ts} (84%) create mode 100644 src/middleware/packages/activitypub/tsconfig.json rename src/middleware/packages/activitypub/{utils.js => utils.ts} (69%) rename src/middleware/packages/activitypub/utils/{matchActivity.js => matchActivity.ts} (92%) delete mode 100644 src/middleware/packages/auth/index.js create mode 100644 src/middleware/packages/auth/index.ts delete mode 100644 src/middleware/packages/auth/middlewares/localLogout.js create mode 100644 src/middleware/packages/auth/middlewares/localLogout.ts rename src/middleware/packages/auth/middlewares/{redirectToFront.js => redirectToFront.ts} (85%) rename src/middleware/packages/auth/middlewares/{saveRedirectUrl.js => saveRedirectUrl.ts} (75%) rename src/middleware/packages/auth/middlewares/{sendToken.js => sendToken.ts} (69%) delete mode 100644 src/middleware/packages/auth/mixins/auth.sso.js create mode 100644 src/middleware/packages/auth/mixins/auth.sso.ts rename src/middleware/packages/auth/mixins/{auth.js => auth.ts} (58%) delete mode 100644 src/middleware/packages/auth/services/account.js create mode 100644 src/middleware/packages/auth/services/account.ts delete mode 100644 src/middleware/packages/auth/services/auth.cas.js create mode 100644 src/middleware/packages/auth/services/auth.cas.ts delete mode 100644 src/middleware/packages/auth/services/auth.local.js create mode 100644 src/middleware/packages/auth/services/auth.local.ts rename src/middleware/packages/auth/services/{auth.oidc.js => auth.oidc.ts} (65%) delete mode 100644 src/middleware/packages/auth/services/jwt.js create mode 100644 src/middleware/packages/auth/services/jwt.ts delete mode 100644 src/middleware/packages/auth/services/mail.js create mode 100644 src/middleware/packages/auth/services/mail.ts delete mode 100644 src/middleware/packages/auth/services/migration.js create mode 100644 src/middleware/packages/auth/services/migration.ts create mode 100644 src/middleware/packages/auth/tsconfig.json delete mode 100644 src/middleware/packages/backup/index.js create mode 100644 src/middleware/packages/backup/index.ts create mode 100644 src/middleware/packages/backup/tsconfig.json delete mode 100644 src/middleware/packages/backup/utils/fsCopy.js create mode 100644 src/middleware/packages/backup/utils/fsCopy.ts delete mode 100644 src/middleware/packages/backup/utils/fsRemove.js create mode 100644 src/middleware/packages/backup/utils/fsRemove.ts rename src/middleware/packages/backup/utils/{ftpCopy.js => ftpCopy.ts} (54%) delete mode 100644 src/middleware/packages/backup/utils/ftpRemove.js create mode 100644 src/middleware/packages/backup/utils/ftpRemove.ts rename src/middleware/packages/backup/utils/{rsyncCopy.js => rsyncCopy.ts} (54%) delete mode 100644 src/middleware/packages/core/index.js create mode 100644 src/middleware/packages/core/index.ts rename src/middleware/packages/core/{service.js => service.ts} (64%) create mode 100644 src/middleware/packages/core/tsconfig.json rename src/middleware/packages/crypto/{constants.js => constants.ts} (90%) delete mode 100644 src/middleware/packages/crypto/index.js create mode 100644 src/middleware/packages/crypto/index.ts delete mode 100644 src/middleware/packages/crypto/keys/index.js create mode 100644 src/middleware/packages/crypto/keys/index.ts delete mode 100644 src/middleware/packages/crypto/keys/key-container.js create mode 100644 src/middleware/packages/crypto/keys/key-container.ts rename src/middleware/packages/crypto/keys/{keys.js => keys.ts} (78%) delete mode 100644 src/middleware/packages/crypto/keys/migration.js create mode 100644 src/middleware/packages/crypto/keys/migration.ts rename src/middleware/packages/crypto/keys/{public-key-container.js => public-key-container.ts} (63%) delete mode 100644 src/middleware/packages/crypto/signature/http-signatures.js create mode 100644 src/middleware/packages/crypto/signature/http-signatures.ts delete mode 100644 src/middleware/packages/crypto/signature/index.js create mode 100644 src/middleware/packages/crypto/signature/index.ts delete mode 100644 src/middleware/packages/crypto/signature/keypair.js create mode 100644 src/middleware/packages/crypto/signature/keypair.ts delete mode 100644 src/middleware/packages/crypto/signature/proxy.js create mode 100644 src/middleware/packages/crypto/signature/proxy.ts create mode 100644 src/middleware/packages/crypto/tsconfig.json rename src/middleware/packages/crypto/utils/{noGraphCredentialContext.js => noGraphCredentialContext.ts} (99%) rename src/middleware/packages/crypto/utils/{utils.js => utils.ts} (86%) rename src/middleware/packages/crypto/verifiable-credentials/{VcCapabilityPresentationProofPurpose.js => VcCapabilityPresentationProofPurpose.ts} (92%) rename src/middleware/packages/crypto/verifiable-credentials/{VcPurpose.js => VcPurpose.ts} (81%) delete mode 100644 src/middleware/packages/crypto/verifiable-credentials/challenge-service.js create mode 100644 src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts rename src/middleware/packages/crypto/verifiable-credentials/{data-integrity-service.js => data-integrity-service.ts} (58%) delete mode 100644 src/middleware/packages/crypto/verifiable-credentials/index.js create mode 100644 src/middleware/packages/crypto/verifiable-credentials/index.ts rename src/middleware/packages/crypto/verifiable-credentials/{vc-api-service.js => vc-api-service.ts} (83%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-authorizer-service.js => vc-authorizer-service.ts} (55%) delete mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.js create mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts rename src/middleware/packages/crypto/verifiable-credentials/{vc-holder-service.js => vc-holder-service.ts} (72%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-issuer-service.js => vc-issuer-service.ts} (72%) delete mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.js create mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts delete mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-service.js create mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-service.ts rename src/middleware/packages/crypto/verifiable-credentials/{vc-verifier-service.js => vc-verifier-service.ts} (67%) delete mode 100644 src/middleware/packages/importer/index.js create mode 100644 src/middleware/packages/importer/index.ts rename src/middleware/packages/importer/mixins/{discourse.js => discourse.ts} (71%) rename src/middleware/packages/importer/mixins/{drupal.js => drupal.ts} (63%) rename src/middleware/packages/importer/mixins/{gogocarto.js => gogocarto.ts} (81%) rename src/middleware/packages/importer/mixins/{humhub.js => humhub.ts} (70%) rename src/middleware/packages/importer/mixins/{importer.js => importer.ts} (54%) rename src/middleware/packages/importer/mixins/{jotform.js => jotform.ts} (74%) rename src/middleware/packages/importer/mixins/{mobilizon.js => mobilizon.ts} (79%) rename src/middleware/packages/importer/mixins/{prestashop.js => prestashop.ts} (71%) rename src/middleware/packages/importer/mixins/{wordpress.js => wordpress.ts} (86%) rename src/middleware/packages/importer/mixins/{yeswiki.js => yeswiki.ts} (71%) create mode 100644 src/middleware/packages/importer/tsconfig.json rename src/middleware/packages/importer/{utils.js => utils.ts} (56%) delete mode 100644 src/middleware/packages/inference/index.js create mode 100644 src/middleware/packages/inference/index.ts delete mode 100644 src/middleware/packages/inference/service.js create mode 100644 src/middleware/packages/inference/service.ts rename src/middleware/packages/inference/subservices/{remote.js => remote.ts} (82%) create mode 100644 src/middleware/packages/inference/tsconfig.json delete mode 100644 src/middleware/packages/jsonld/index.js create mode 100644 src/middleware/packages/jsonld/index.ts rename src/middleware/packages/jsonld/{service.js => service.ts} (52%) delete mode 100644 src/middleware/packages/jsonld/services/api/index.js create mode 100644 src/middleware/packages/jsonld/services/api/index.ts rename src/middleware/packages/jsonld/services/context/actions/{get.js => get.ts} (83%) rename src/middleware/packages/jsonld/services/context/actions/{getLocal.js => getLocal.ts} (61%) rename src/middleware/packages/jsonld/services/context/actions/{merge.js => merge.ts} (70%) delete mode 100644 src/middleware/packages/jsonld/services/context/actions/parse.js create mode 100644 src/middleware/packages/jsonld/services/context/actions/parse.ts rename src/middleware/packages/jsonld/services/context/actions/{validate.js => validate.ts} (57%) rename src/middleware/packages/jsonld/services/context/{index.js => index.ts} (55%) delete mode 100644 src/middleware/packages/jsonld/services/document-loader/index.js create mode 100644 src/middleware/packages/jsonld/services/document-loader/index.ts delete mode 100644 src/middleware/packages/jsonld/services/parser/index.js create mode 100644 src/middleware/packages/jsonld/services/parser/index.ts create mode 100644 src/middleware/packages/jsonld/tsconfig.json rename src/middleware/packages/jsonld/utils/{uriSchemes.js => uriSchemes.ts} (99%) rename src/middleware/packages/jsonld/utils/{utils.js => utils.ts} (63%) delete mode 100644 src/middleware/packages/ldp/adapter.js create mode 100644 src/middleware/packages/ldp/adapter.ts delete mode 100644 src/middleware/packages/ldp/index.js create mode 100644 src/middleware/packages/ldp/index.ts delete mode 100644 src/middleware/packages/ldp/mixins/controlled-container.js create mode 100644 src/middleware/packages/ldp/mixins/controlled-container.ts rename src/middleware/packages/ldp/mixins/{dereference.js => dereference.ts} (95%) rename src/middleware/packages/ldp/mixins/{disassembly.js => disassembly.ts} (92%) delete mode 100644 src/middleware/packages/ldp/mixins/document-tagger.js create mode 100644 src/middleware/packages/ldp/mixins/document-tagger.ts delete mode 100644 src/middleware/packages/ldp/mixins/image-processor.js create mode 100644 src/middleware/packages/ldp/mixins/image-processor.ts rename src/middleware/packages/ldp/mixins/{mime-types.js => mime-types.ts} (72%) delete mode 100644 src/middleware/packages/ldp/mixins/orphan-files-deletion.js create mode 100644 src/middleware/packages/ldp/mixins/orphan-files-deletion.ts rename src/middleware/packages/ldp/mixins/{pseudo-id.js => pseudo-id.ts} (95%) delete mode 100644 src/middleware/packages/ldp/mixins/single-resource-container.js create mode 100644 src/middleware/packages/ldp/mixins/single-resource-container.ts rename src/middleware/packages/ldp/mixins/{special-endpoint.js => special-endpoint.ts} (54%) rename src/middleware/packages/ldp/routes/{getCatchAllRoute.js => getCatchAllRoute.ts} (88%) rename src/middleware/packages/ldp/routes/{getPodsRoute.js => getPodsRoute.ts} (87%) delete mode 100644 src/middleware/packages/ldp/service.js create mode 100644 src/middleware/packages/ldp/service.ts rename src/middleware/packages/ldp/services/api/actions/{delete.js => delete.ts} (78%) rename src/middleware/packages/ldp/services/api/actions/{get.js => get.ts} (90%) rename src/middleware/packages/ldp/services/api/actions/{head.js => head.ts} (67%) rename src/middleware/packages/ldp/services/api/actions/{patch.js => patch.ts} (75%) rename src/middleware/packages/ldp/services/api/actions/{post.js => post.ts} (73%) delete mode 100644 src/middleware/packages/ldp/services/api/actions/put.js create mode 100644 src/middleware/packages/ldp/services/api/actions/put.ts rename src/middleware/packages/ldp/services/api/{index.js => index.ts} (59%) delete mode 100644 src/middleware/packages/ldp/services/cache/index.js create mode 100644 src/middleware/packages/ldp/services/cache/index.ts rename src/middleware/packages/ldp/services/container/actions/{attach.js => attach.ts} (73%) rename src/middleware/packages/ldp/services/container/actions/{clear.js => clear.ts} (84%) rename src/middleware/packages/ldp/services/container/actions/{create.js => create.ts} (72%) rename src/middleware/packages/ldp/services/container/actions/{createAndAttach.js => createAndAttach.ts} (88%) rename src/middleware/packages/ldp/services/container/actions/{delete.js => delete.ts} (67%) rename src/middleware/packages/ldp/services/container/actions/{detach.js => detach.ts} (77%) rename src/middleware/packages/ldp/services/container/actions/{exist.js => exist.ts} (88%) rename src/middleware/packages/ldp/services/container/actions/{get.js => get.ts} (80%) rename src/middleware/packages/ldp/services/container/actions/{getAll.js => getAll.ts} (71%) rename src/middleware/packages/ldp/services/container/actions/{getPath.js => getPath.ts} (63%) rename src/middleware/packages/ldp/services/container/actions/{getUris.js => getUris.ts} (72%) rename src/middleware/packages/ldp/services/container/actions/{includes.js => includes.ts} (84%) rename src/middleware/packages/ldp/services/container/actions/{isEmpty.js => isEmpty.ts} (68%) rename src/middleware/packages/ldp/services/container/actions/{patch.js => patch.ts} (76%) rename src/middleware/packages/ldp/services/container/actions/{post.js => post.ts} (83%) delete mode 100644 src/middleware/packages/ldp/services/container/index.js create mode 100644 src/middleware/packages/ldp/services/container/index.ts rename src/middleware/packages/ldp/services/link-header/actions/{get.js => get.ts} (86%) rename src/middleware/packages/ldp/services/link-header/actions/{register.js => register.ts} (64%) delete mode 100644 src/middleware/packages/ldp/services/link-header/index.js create mode 100644 src/middleware/packages/ldp/services/link-header/index.ts rename src/middleware/packages/ldp/services/permissions/actions/{addAuthorizer.js => addAuthorizer.ts} (63%) rename src/middleware/packages/ldp/services/permissions/actions/{check.js => check.ts} (76%) rename src/middleware/packages/ldp/services/permissions/actions/{has.js => has.ts} (83%) delete mode 100644 src/middleware/packages/ldp/services/permissions/index.js create mode 100644 src/middleware/packages/ldp/services/permissions/index.ts rename src/middleware/packages/ldp/services/registry/actions/{getByType.js => getByType.ts} (67%) rename src/middleware/packages/ldp/services/registry/actions/{getByUri.js => getByUri.ts} (86%) rename src/middleware/packages/ldp/services/registry/actions/{getUri.js => getUri.ts} (83%) delete mode 100644 src/middleware/packages/ldp/services/registry/actions/list.js create mode 100644 src/middleware/packages/ldp/services/registry/actions/list.ts rename src/middleware/packages/ldp/services/registry/actions/{register.js => register.ts} (76%) rename src/middleware/packages/ldp/services/registry/{defaultOptions.js => defaultOptions.ts} (90%) delete mode 100644 src/middleware/packages/ldp/services/registry/index.js create mode 100644 src/middleware/packages/ldp/services/registry/index.ts rename src/middleware/packages/ldp/services/remote/actions/{delete.js => delete.ts} (77%) rename src/middleware/packages/ldp/services/remote/actions/{get.js => get.ts} (77%) rename src/middleware/packages/ldp/services/remote/actions/{getGraph.js => getGraph.ts} (79%) rename src/middleware/packages/ldp/services/remote/actions/{getNetwork.js => getNetwork.ts} (70%) rename src/middleware/packages/ldp/services/remote/actions/{getStored.js => getStored.ts} (73%) rename src/middleware/packages/ldp/services/remote/actions/{isRemote.js => isRemote.ts} (82%) rename src/middleware/packages/ldp/services/remote/actions/{store.js => store.ts} (76%) rename src/middleware/packages/ldp/services/remote/{index.js => index.ts} (50%) rename src/middleware/packages/ldp/services/resource/actions/{awaitCreateComplete.js => awaitCreateComplete.ts} (69%) rename src/middleware/packages/ldp/services/resource/actions/{create.js => create.ts} (78%) rename src/middleware/packages/ldp/services/resource/actions/{delete.js => delete.ts} (77%) rename src/middleware/packages/ldp/services/resource/actions/{exist.js => exist.ts} (86%) rename src/middleware/packages/ldp/services/resource/actions/{generateId.js => generateId.ts} (64%) rename src/middleware/packages/ldp/services/resource/actions/{get.js => get.ts} (76%) rename src/middleware/packages/ldp/services/resource/actions/{getContainers.js => getContainers.ts} (69%) rename src/middleware/packages/ldp/services/resource/actions/{getTypes.js => getTypes.ts} (55%) rename src/middleware/packages/ldp/services/resource/actions/{patch.js => patch.ts} (72%) rename src/middleware/packages/ldp/services/resource/actions/{put.js => put.ts} (83%) rename src/middleware/packages/ldp/services/resource/actions/{upload.js => upload.ts} (57%) delete mode 100644 src/middleware/packages/ldp/services/resource/index.js create mode 100644 src/middleware/packages/ldp/services/resource/index.ts rename src/middleware/packages/ldp/services/resource/{methods.js => methods.ts} (55%) create mode 100644 src/middleware/packages/ldp/tsconfig.json rename src/middleware/packages/ldp/{utils.js => utils.ts} (74%) rename src/middleware/packages/middlewares/{index.js => index.ts} (78%) create mode 100644 src/middleware/packages/middlewares/tsconfig.json delete mode 100644 src/middleware/packages/migration/index.js create mode 100644 src/middleware/packages/migration/index.ts delete mode 100644 src/middleware/packages/migration/service.js create mode 100644 src/middleware/packages/migration/service.ts create mode 100644 src/middleware/packages/migration/tsconfig.json rename src/middleware/packages/mime-types/{constants.js => constants.ts} (97%) rename src/middleware/packages/mime-types/{index.js => index.ts} (58%) create mode 100644 src/middleware/packages/mime-types/tsconfig.json delete mode 100644 src/middleware/packages/nodeinfo/index.js create mode 100644 src/middleware/packages/nodeinfo/index.ts rename src/middleware/packages/nodeinfo/{service.js => service.ts} (50%) create mode 100644 src/middleware/packages/nodeinfo/tsconfig.json delete mode 100644 src/middleware/packages/notifications/index.js create mode 100644 src/middleware/packages/notifications/index.ts delete mode 100644 src/middleware/packages/notifications/services/digest/service.js create mode 100644 src/middleware/packages/notifications/services/digest/service.ts delete mode 100644 src/middleware/packages/notifications/services/digest/subscription.js create mode 100644 src/middleware/packages/notifications/services/digest/subscription.ts delete mode 100644 src/middleware/packages/notifications/services/expo-push/device.js create mode 100644 src/middleware/packages/notifications/services/expo-push/device.ts delete mode 100644 src/middleware/packages/notifications/services/expo-push/notification.js create mode 100644 src/middleware/packages/notifications/services/expo-push/notification.ts rename src/middleware/packages/notifications/services/expo-push/{service.js => service.ts} (62%) delete mode 100644 src/middleware/packages/notifications/services/single-mail/service.js create mode 100644 src/middleware/packages/notifications/services/single-mail/service.ts create mode 100644 src/middleware/packages/notifications/tsconfig.json rename src/middleware/packages/ontologies/actions/{findNamespace.js => findNamespace.ts} (54%) rename src/middleware/packages/ontologies/actions/{findPrefix.js => findPrefix.ts} (65%) rename src/middleware/packages/ontologies/actions/{get.js => get.ts} (80%) delete mode 100644 src/middleware/packages/ontologies/actions/getPrefixes.js create mode 100644 src/middleware/packages/ontologies/actions/getPrefixes.ts delete mode 100644 src/middleware/packages/ontologies/actions/getRdfPrefixes.js create mode 100644 src/middleware/packages/ontologies/actions/getRdfPrefixes.ts delete mode 100644 src/middleware/packages/ontologies/actions/list.js create mode 100644 src/middleware/packages/ontologies/actions/list.ts rename src/middleware/packages/ontologies/actions/{prefixToUri.js => prefixToUri.ts} (66%) rename src/middleware/packages/ontologies/actions/{register.js => register.ts} (66%) delete mode 100644 src/middleware/packages/ontologies/index.js create mode 100644 src/middleware/packages/ontologies/index.ts delete mode 100644 src/middleware/packages/ontologies/ontologies/core/index.js create mode 100644 src/middleware/packages/ontologies/ontologies/core/index.ts delete mode 100644 src/middleware/packages/ontologies/ontologies/custom/index.js create mode 100644 src/middleware/packages/ontologies/ontologies/custom/index.ts delete mode 100644 src/middleware/packages/ontologies/ontologies/solid/index.js create mode 100644 src/middleware/packages/ontologies/ontologies/solid/index.ts rename src/middleware/packages/ontologies/{service.js => service.ts} (53%) delete mode 100644 src/middleware/packages/ontologies/sub-services/registry.js create mode 100644 src/middleware/packages/ontologies/sub-services/registry.ts create mode 100644 src/middleware/packages/ontologies/tsconfig.json rename src/middleware/packages/ontologies/{utils.js => utils.ts} (59%) delete mode 100644 src/middleware/packages/solid/index.js create mode 100644 src/middleware/packages/solid/index.ts delete mode 100644 src/middleware/packages/solid/services/authorizer.js create mode 100644 src/middleware/packages/solid/services/authorizer.ts delete mode 100644 src/middleware/packages/solid/services/endpoint.js create mode 100644 src/middleware/packages/solid/services/endpoint.ts delete mode 100644 src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js create mode 100644 src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts rename src/middleware/packages/solid/services/notifications/channels/{webhook-channel.js => webhook-channel.ts} (63%) rename src/middleware/packages/solid/services/notifications/channels/{websocket-channel.js => websocket-channel.ts} (65%) delete mode 100644 src/middleware/packages/solid/services/notifications/listener.js create mode 100644 src/middleware/packages/solid/services/notifications/listener.ts rename src/middleware/packages/solid/services/notifications/{provider.js => provider.ts} (54%) rename src/middleware/packages/solid/services/{preferences-file.js => preferences-file.ts} (60%) delete mode 100644 src/middleware/packages/solid/services/storage.js create mode 100644 src/middleware/packages/solid/services/storage.ts delete mode 100644 src/middleware/packages/solid/services/type-index/type-indexes.js create mode 100644 src/middleware/packages/solid/services/type-index/type-indexes.ts rename src/middleware/packages/solid/services/type-index/{type-registrations.js => type-registrations.ts} (79%) create mode 100644 src/middleware/packages/solid/tsconfig.json rename src/middleware/packages/sparql-endpoint/{getRoute.js => getRoute.ts} (87%) delete mode 100644 src/middleware/packages/sparql-endpoint/index.js create mode 100644 src/middleware/packages/sparql-endpoint/index.ts delete mode 100644 src/middleware/packages/sparql-endpoint/service.js create mode 100644 src/middleware/packages/sparql-endpoint/service.ts create mode 100644 src/middleware/packages/sparql-endpoint/tsconfig.json delete mode 100644 src/middleware/packages/sync/index.js create mode 100644 src/middleware/packages/sync/index.ts rename src/middleware/packages/sync/middlewares/{objects-watcher.js => objects-watcher.ts} (87%) delete mode 100644 src/middleware/packages/sync/services/aggregator.js create mode 100644 src/middleware/packages/sync/services/aggregator.ts rename src/middleware/packages/sync/services/{mirror.js => mirror.ts} (83%) rename src/middleware/packages/sync/services/{synchronizer.js => synchronizer.ts} (69%) create mode 100644 src/middleware/packages/sync/tsconfig.json rename src/middleware/packages/triplestore/actions/{countTriplesOfSubject.js => countTriplesOfSubject.ts} (77%) rename src/middleware/packages/triplestore/actions/{deleteOrphanBlankNodes.js => deleteOrphanBlankNodes.ts} (84%) rename src/middleware/packages/triplestore/actions/{dropAll.js => dropAll.ts} (70%) rename src/middleware/packages/triplestore/actions/{insert.js => insert.ts} (77%) rename src/middleware/packages/triplestore/actions/{query.js => query.ts} (74%) rename src/middleware/packages/triplestore/actions/{tripleExist.js => tripleExist.ts} (72%) rename src/middleware/packages/triplestore/actions/{update.js => update.ts} (74%) rename src/middleware/packages/triplestore/{adapter.js => adapter.ts} (52%) delete mode 100644 src/middleware/packages/triplestore/index.js create mode 100644 src/middleware/packages/triplestore/index.ts rename src/middleware/packages/triplestore/{service.js => service.ts} (61%) delete mode 100644 src/middleware/packages/triplestore/subservices/dataset.js create mode 100644 src/middleware/packages/triplestore/subservices/dataset.ts create mode 100644 src/middleware/packages/triplestore/tsconfig.json rename src/middleware/packages/triplestore/{utils.js => utils.ts} (79%) delete mode 100644 src/middleware/packages/void/index.js create mode 100644 src/middleware/packages/void/index.ts rename src/middleware/packages/void/{service.js => service.ts} (74%) create mode 100644 src/middleware/packages/void/tsconfig.json delete mode 100644 src/middleware/packages/webacl/bots/authorizer-bot.js create mode 100644 src/middleware/packages/webacl/bots/authorizer-bot.ts delete mode 100644 src/middleware/packages/webacl/bots/groups-manager.js create mode 100644 src/middleware/packages/webacl/bots/groups-manager.ts delete mode 100644 src/middleware/packages/webacl/index.js create mode 100644 src/middleware/packages/webacl/index.ts rename src/middleware/packages/webacl/middlewares/{cacher.js => cacher.ts} (62%) rename src/middleware/packages/webacl/middlewares/{webacl.js => webacl.ts} (95%) rename src/middleware/packages/webacl/routes/{getRoutes.js => getRoutes.ts} (87%) rename src/middleware/packages/webacl/{service.js => service.ts} (50%) delete mode 100644 src/middleware/packages/webacl/services/authorizer/index.js create mode 100644 src/middleware/packages/webacl/services/authorizer/index.ts delete mode 100644 src/middleware/packages/webacl/services/cache/index.js create mode 100644 src/middleware/packages/webacl/services/cache/index.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/addMember.js create mode 100644 src/middleware/packages/webacl/services/group/actions/addMember.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/create.js create mode 100644 src/middleware/packages/webacl/services/group/actions/create.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/delete.js create mode 100644 src/middleware/packages/webacl/services/group/actions/delete.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/exist.js create mode 100644 src/middleware/packages/webacl/services/group/actions/exist.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/getGroups.js create mode 100644 src/middleware/packages/webacl/services/group/actions/getGroups.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/getMembers.js create mode 100644 src/middleware/packages/webacl/services/group/actions/getMembers.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/getUri.js create mode 100644 src/middleware/packages/webacl/services/group/actions/getUri.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/isMember.js create mode 100644 src/middleware/packages/webacl/services/group/actions/isMember.ts delete mode 100644 src/middleware/packages/webacl/services/group/actions/removeMember.js create mode 100644 src/middleware/packages/webacl/services/group/actions/removeMember.ts rename src/middleware/packages/webacl/services/group/{index.js => index.ts} (69%) delete mode 100644 src/middleware/packages/webacl/services/resource/actions/addRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/addRights.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/awaitReadRight.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/deleteAllRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/getLink.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/getLink.ts rename src/middleware/packages/webacl/services/resource/actions/{getRights.js => getRights.ts} (59%) delete mode 100644 src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/hasRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/hasRights.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/isPublic.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/isPublic.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/removeRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/removeRights.ts delete mode 100644 src/middleware/packages/webacl/services/resource/actions/setRights.js create mode 100644 src/middleware/packages/webacl/services/resource/actions/setRights.ts rename src/middleware/packages/webacl/services/resource/{index.js => index.ts} (65%) create mode 100644 src/middleware/packages/webacl/tsconfig.json rename src/middleware/packages/webacl/{utils.js => utils.ts} (79%) delete mode 100644 src/middleware/packages/webfinger/index.js create mode 100644 src/middleware/packages/webfinger/index.ts delete mode 100644 src/middleware/packages/webfinger/service.js create mode 100644 src/middleware/packages/webfinger/service.ts create mode 100644 src/middleware/packages/webfinger/tsconfig.json delete mode 100644 src/middleware/packages/webhooks/index.js create mode 100644 src/middleware/packages/webhooks/index.ts delete mode 100644 src/middleware/packages/webhooks/service.js create mode 100644 src/middleware/packages/webhooks/service.ts create mode 100644 src/middleware/packages/webhooks/tsconfig.json delete mode 100644 src/middleware/packages/webid/index.js create mode 100644 src/middleware/packages/webid/index.ts delete mode 100644 src/middleware/packages/webid/service.js create mode 100644 src/middleware/packages/webid/service.ts create mode 100644 src/middleware/packages/webid/tsconfig.json create mode 100644 src/middleware/tests/.nvmrc rename src/middleware/tests/activitypub/{collection-api.test.js => collection-api.test.ts} (88%) rename src/middleware/tests/activitypub/{collection.test.js => collection.test.ts} (94%) rename src/middleware/tests/activitypub/{follow.test.js => follow.test.ts} (85%) rename src/middleware/tests/activitypub/{inbox.test.js => inbox.test.ts} (95%) rename src/middleware/tests/activitypub/{initialize.js => initialize.ts} (63%) rename src/middleware/tests/activitypub/{like.test.js => like.test.ts} (86%) rename src/middleware/tests/activitypub/{message.test.js => message.test.ts} (86%) rename src/middleware/tests/activitypub/{object.test.js => object.test.ts} (91%) rename src/middleware/tests/activitypub/{outbox.test.js => outbox.test.ts} (97%) rename src/middleware/tests/activitypub/{shares.test.js => shares.test.ts} (85%) create mode 100644 src/middleware/tests/babel.config.js delete mode 100644 src/middleware/tests/config.js create mode 100644 src/middleware/tests/config.ts rename src/middleware/tests/crypto/{initialize.js => initialize.ts} (57%) rename src/middleware/tests/crypto/{keys.test.js => keys.test.ts} (88%) rename src/middleware/tests/crypto/{verifiable-credentials.test.js => verifiable-credentials.test.ts} (96%) rename src/middleware/tests/interop/{initialize.js => initialize.ts} (53%) rename src/middleware/tests/interop/{mirror-protected.test.js => mirror-protected.test.ts} (90%) rename src/middleware/tests/interop/{mirror.test.js => mirror.test.ts} (91%) rename src/middleware/tests/interop/{patch-remote.test.js => patch-remote.test.ts} (88%) rename src/middleware/tests/interop/{remote-inference.test.js => remote-inference.test.ts} (84%) rename src/middleware/tests/{jest.setup.js => jest.setup.ts} (70%) rename src/middleware/tests/jsonld/{initialize.js => initialize.ts} (50%) rename src/middleware/tests/jsonld/{merge.test.js => merge.test.ts} (83%) rename src/middleware/tests/ldp/{api.test.js => api.test.ts} (93%) rename src/middleware/tests/ldp/{binary.test.js => binary.test.ts} (78%) rename src/middleware/tests/ldp/{container-path.test.js => container-path.test.ts} (83%) rename src/middleware/tests/ldp/{container.test.js => container.test.ts} (96%) rename src/middleware/tests/ldp/{content-negotiation.test.js => content-negotiation.test.ts} (93%) rename src/middleware/tests/ldp/{headers.test.js => headers.test.ts} (52%) rename src/middleware/tests/ldp/{initialize.js => initialize.ts} (58%) rename src/middleware/tests/ldp/{resource.test.js => resource.test.ts} (93%) rename src/middleware/tests/ontologies/{initialize.js => initialize.ts} (50%) rename src/middleware/tests/ontologies/{ontologies.test.js => ontologies.test.ts} (88%) create mode 100644 src/middleware/tests/run-typecheck.sh create mode 100755 src/middleware/tests/test-types.sh create mode 100644 src/middleware/tests/tsconfig.json rename src/middleware/tests/{utils.js => utils.ts} (61%) rename src/middleware/tests/webId/{webId.test.js => webId.test.ts} (74%) rename src/middleware/tests/webacl/{groupCRUD.test.js => groupCRUD.test.ts} (89%) rename src/middleware/tests/webacl/{initialize.js => initialize.ts} (61%) rename src/middleware/tests/webacl/{resource.test.js => resource.test.ts} (97%) rename src/middleware/tests/webacl/{resourceCRUD.test.js => resourceCRUD.test.ts} (82%) rename src/middleware/tests/webacl/{sparql-injection.test.js => sparql-injection.test.ts} (84%) rename src/middleware/tests/webacl/{utils.test.js => utils.test.ts} (98%) create mode 100644 yarn.lock diff --git a/.git-hooks/pre-push b/.git-hooks/pre-push index a3bad7490..d29c61503 100755 --- a/.git-hooks/pre-push +++ b/.git-hooks/pre-push @@ -8,4 +8,4 @@ fi cd "$ROOT_DIR" -./scripts/run-typecheck.sh +# ./scripts/run-typecheck.sh diff --git a/.gitignore b/.gitignore index 6bc52779b..298914cef 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ lerna-debug.log .classpath .project .settings -# conflict *.orig .nx +.yalc +yalc.lock +.yarn diff --git a/scripts/run-typecheck.sh b/scripts/run-typecheck.sh index 9f543c3d3..6be55e47a 100755 --- a/scripts/run-typecheck.sh +++ b/scripts/run-typecheck.sh @@ -6,7 +6,7 @@ ROOT_DIR=$(git rev-parse --show-toplevel) cd "$ROOT_DIR"/src/frontend -echo "=== Running typecheck for frontend ===" +echo "=== Running typecheck ===" yarn typecheck > /dev/null if [ $? -ne 0 ]; then diff --git a/src/frontend/package.json b/src/frontend/package.json index c955742e7..e733c58f6 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -35,7 +35,7 @@ "nx": "^17.2.5", "parcel": "^2.13.3", "prettier": "^3.1.1", - "typescript": "^5.1.6", + "typescript": "^5.9.2", "yalc": "1.0.0-pre.53" }, "workspaces": [ diff --git a/src/middleware/.eslintrc.json b/src/middleware/.eslintrc.json index ad83c1068..ca8984d37 100644 --- a/src/middleware/.eslintrc.json +++ b/src/middleware/.eslintrc.json @@ -11,10 +11,11 @@ "plugin:jest/recommended", "prettier" ], - // "parser": "@typescript-eslint/parser", + "ignorePatterns": ["**/data/**"], + "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", - "sourceType": "script" // Allows for the use of imports + "sourceType": "module" // Allows for the use of imports }, "plugins": [ "jsdoc", @@ -86,7 +87,7 @@ "import/no-duplicates": "warn", "import/no-dynamic-require": "off", "import/no-named-default": "warn", - "import/no-unresolved": "warn", + "import/no-unresolved": "off", "import/no-useless-path-segments": "warn", "import/order": "warn", "jest/no-conditional-expect": "warn", @@ -118,6 +119,7 @@ "no-use-before-define": "warn", "no-var": "warn", "node/no-unsupported-features/es-syntax": "off", + "node/no-missing-import": "off", "object-shorthand": "off", "one-var": "warn", "operator-assignment": "warn", diff --git a/src/middleware/.gitignore b/src/middleware/.gitignore new file mode 100644 index 000000000..849ddff3b --- /dev/null +++ b/src/middleware/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/src/middleware/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch b/src/middleware/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch new file mode 100644 index 000000000..095e06076 --- /dev/null +++ b/src/middleware/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch @@ -0,0 +1,4460 @@ +diff --git a/index.d.ts b/index.d.ts +index 2d24ae93ab89b7844ebce39a3666a47d7ddbc97c..7d6b805083e25dbdec51ecb6cdc2ee42d4902910 100644 +--- a/index.d.ts ++++ b/index.d.ts +@@ -1,2063 +1,6 @@ +-import type { EventEmitter2 } from "eventemitter2"; +-import type { BinaryLike, CipherCCMTypes, CipherGCMTypes, CipherKey, CipherOCBTypes } from "crypto"; +-import type { Worker } from "cluster"; +- +-declare namespace Moleculer { +- /** +- * Moleculer uses global.Promise as the default promise library +- * If you are using a third-party promise library (e.g. Bluebird), you will need to +- * assign type definitions to use for your promise library. You will need to have a .d.ts file +- * with the following code when you compile: +- * +- * - import Bluebird from "bluebird"; +- * declare module "moleculer" { +- * type Promise = Bluebird; +- * } +- */ +- +- type GenericObject = { [name: string]: any }; +- +- type LogLevels = "fatal" | "error" | "warn" | "info" | "debug" | "trace"; +- +- class LoggerFactory { +- constructor(broker: ServiceBroker); +- init(opts: LoggerConfig | LoggerConfig[]): void; +- stop(): void; +- getLogger(bindings: LoggerBindings): LoggerInstance; +- getBindingsKey(bindings: LoggerBindings): string; +- +- broker: ServiceBroker; +- } +- +- interface LoggerBindings { +- nodeID: string; +- ns: string; +- mod: string; +- svc: string; +- ver?: string; +- } +- +- class LoggerInstance { +- fatal(...args: any[]): void; +- error(...args: any[]): void; +- warn(...args: any[]): void; +- info(...args: any[]): void; +- debug(...args: any[]): void; +- trace(...args: any[]): void; +- } +- +- type ActionHandler = (ctx: Context) => Promise | T; +- type ActionParamSchema = { [key: string]: any }; +- type ActionParamTypes = +- | "any" +- | "array" +- | "boolean" +- | "custom" +- | "date" +- | "email" +- | "enum" +- | "forbidden" +- | "function" +- | "number" +- | "object" +- | "string" +- | "url" +- | "uuid" +- | boolean +- | string +- | ActionParamSchema; +- type ActionParams = { [key: string]: ActionParamTypes }; +- +- interface HotReloadOptions { +- modules?: string[]; +- } +- +- interface TracerExporterOptions { +- type: string; +- options?: GenericObject; +- } +- +- interface TracerOptions { +- enabled?: boolean; +- exporter?: string | TracerExporterOptions | (TracerExporterOptions | string)[] | null; +- sampling?: { +- rate?: number | null; +- tracesPerSecond?: number | null; +- minPriority?: number | null; +- }; +- +- actions?: boolean; +- events?: boolean; +- +- errorFields?: string[]; +- stackTrace?: boolean; +- +- defaultTags?: GenericObject | Function | null; +- +- tags?: { +- action?: TracingActionTags; +- event?: TracingEventTags; +- }; +- } +- +- class Tracer { +- constructor(broker: ServiceBroker, opts: TracerOptions | boolean); +- +- broker: ServiceBroker; +- logger: LoggerInstance; +- opts: GenericObject; +- +- exporter: BaseTraceExporter[]; +- +- isEnabled(): boolean; +- shouldSample(span: Span): boolean; +- +- startSpan(name: string, opts?: GenericObject): Span; +- +- // getCurrentSpan(): Span | null; +- getCurrentTraceID(): string | null; +- getActiveSpanID(): string | null; +- } +- +- interface SpanLogEntry { +- name: string; +- fields: GenericObject; +- time: number; +- elapsed: number; +- } +- +- class Span { +- constructor(tracer: Tracer, name: string, opts: GenericObject); +- +- tracer: Tracer; +- logger: LoggerInstance; +- opts: GenericObject; +- meta: GenericObject; +- +- name: string; +- id: string; +- traceID: string; +- parentID: string | null; +- +- service?: { +- name: string; +- version: string | number | null | undefined; +- }; +- +- priority: number; +- sampled: boolean; +- +- startTime: number | null; +- finishTime: number | null; +- duration: number | null; +- +- error: Error | null; +- +- logs: SpanLogEntry[]; +- tags: GenericObject; +- +- start(time?: number): Span; +- addTags(obj: GenericObject): Span; +- log(name: string, fields?: GenericObject, time?: number): Span; +- setError(err: Error): Span; +- finish(time?: number): Span; +- startSpan(name: string, opts?: GenericObject): Span; +- } +- +- type TracingActionTagsFuncType = (ctx: Context, response?: any) => GenericObject; +- type TracingActionTags = +- | TracingActionTagsFuncType +- | { +- params?: boolean | string[]; +- meta?: boolean | string[]; +- response?: boolean | string[]; +- }; +- +- type TracingEventTagsFuncType = (ctx: Context) => GenericObject; +- type TracingEventTags = +- | TracingEventTagsFuncType +- | { +- params?: boolean | string[]; +- meta?: boolean | string[]; +- }; +- +- type TracingSpanNameOption = string | ((ctx: Context) => string); +- +- interface TracingOptions { +- enabled?: boolean; +- tags?: TracingActionTags | TracingEventTags; +- spanName?: TracingSpanNameOption; +- safetyTags?: boolean; +- } +- +- interface TracingActionOptions extends TracingOptions { +- tags?: TracingActionTags; +- } +- +- interface TracingEventOptions extends TracingOptions { +- tags?: TracingEventTags; +- } +- +- class BaseTraceExporter { +- opts: GenericObject; +- tracer: Tracer; +- logger: LoggerInstance; +- +- constructor(opts: GenericObject); +- init(tracer: Tracer): void; +- +- spanStarted(span: Span): void; +- spanFinished(span: Span): void; +- +- flattenTags(obj: GenericObject, convertToString?: boolean, path?: string): GenericObject; +- errorToObject(err: Error): GenericObject; +- } +- +- namespace TracerExporters { +- class Base extends BaseTraceExporter {} +- class Console extends BaseTraceExporter {} +- class Datadog extends BaseTraceExporter {} +- class Event extends BaseTraceExporter {} +- class EventLegacy extends BaseTraceExporter {} +- class Jaeger extends BaseTraceExporter {} +- class Zipkin extends BaseTraceExporter {} +- } +- +- interface MetricsReporterOptions { +- type: string; +- options?: MetricReporterOptions; +- } +- +- interface MetricRegistryOptions { +- enabled?: boolean; +- collectProcessMetrics?: boolean; +- collectInterval?: number; +- reporter?: string | MetricsReporterOptions | (MetricsReporterOptions | string)[] | null; +- defaultBuckets?: number[]; +- defaultQuantiles?: number[]; +- defaultMaxAgeSeconds?: number; +- defaultAgeBuckets?: number; +- defaultAggregator?: string; +- } +- +- type MetricSnapshot = GaugeMetricSnapshot | InfoMetricSnapshot | HistogramMetricSnapshot; +- interface BaseMetricPOJO { +- type: string; +- name: string; +- description?: string; +- labelNames: string[]; +- unit?: string; +- values: MetricSnapshot[]; +- } +- +- class BaseMetric { +- type: string; +- name: string; +- description?: string; +- labelNames: string[]; +- unit?: string; +- aggregator: string; +- +- lastSnapshot: GenericObject | null; +- dirty: boolean; +- values: Map; +- +- constructor(opts: BaseMetricOptions, registry: MetricRegistry); +- setDirty(): void; +- clearDirty(): void; +- get(labels?: GenericObject): GenericObject | null; +- reset(labels?: GenericObject, timestamp?: number): GenericObject | null; +- resetAll(timestamp?: number): GenericObject | null; +- clear(): void; +- hashingLabels(labels?: GenericObject): string; +- snapshot(): MetricSnapshot[]; +- generateSnapshot(): MetricSnapshot[]; +- changed(value: any | null, labels?: GenericObject, timestamp?: number): void; +- toObject(): BaseMetricPOJO; +- } +- +- interface GaugeMetricSnapshot { +- value: number; +- labels: GenericObject; +- timestamp: number; +- } +- +- class GaugeMetric extends BaseMetric { +- increment(labels?: GenericObject, value?: number, timestamp?: number): void; +- decrement(labels?: GenericObject, value?: number, timestamp?: number): void; +- set(value: number, labels?: GenericObject, timestamp?: number): void; +- generateSnapshot(): GaugeMetricSnapshot[]; +- } +- +- class CounterMetric extends BaseMetric { +- increment(labels?: GenericObject, value?: number, timestamp?: number): void; +- set(value: number, labels?: GenericObject, timestamp?: number): void; +- generateSnapshot(): GaugeMetricSnapshot[]; +- } +- +- interface InfoMetricSnapshot { +- value: any; +- labels: GenericObject; +- timestamp: number; +- } +- +- class InfoMetric extends BaseMetric { +- set(value: any | null, labels?: GenericObject, timestamp?: number): void; +- generateSnapshot(): InfoMetricSnapshot[]; +- } +- +- interface HistogramMetricSnapshot { +- labels: GenericObject; +- count: number; +- sum: number; +- timestamp: number; +- +- buckets?: { +- [key: string]: number; +- }; +- +- min?: number | null; +- mean?: number | null; +- variance?: number | null; +- stdDev?: number | null; +- max?: number | null; +- quantiles?: { +- [key: string]: number; +- }; +- } +- +- class HistogramMetric extends BaseMetric { +- buckets: number[]; +- quantiles: number[]; +- maxAgeSeconds?: number; +- ageBuckets?: number; +- +- observe(value: number, labels?: GenericObject, timestamp?: number): void; +- generateSnapshot(): HistogramMetricSnapshot[]; +- +- static generateLinearBuckets(start: number, width: number, count: number): number[]; +- static generateExponentialBuckets(start: number, factor: number, count: number): number[]; +- } +- +- namespace MetricTypes { +- class Base extends BaseMetric {} +- class Counter extends CounterMetric {} +- class Gauge extends GaugeMetric {} +- class Histogram extends HistogramMetric {} +- class Info extends InfoMetric {} +- } +- +- interface BaseMetricOptions { +- type: string; +- name: string; +- description?: string; +- labelNames?: string[]; +- unit?: string; +- aggregator?: string; +- [key: string]: unknown; +- } +- +- interface MetricListOptions { +- type: string | string[]; +- includes: string | string[]; +- excludes: string | string[]; +- } +- +- class MetricRegistry { +- broker: ServiceBroker; +- logger: LoggerInstance; +- dirty: boolean; +- store: Map; +- reporter: MetricBaseReporter[]; +- +- constructor(broker: ServiceBroker, opts?: MetricRegistryOptions); +- init(broker: ServiceBroker): void; +- stop(): void; +- isEnabled(): boolean; +- register(opts: BaseMetricOptions): BaseMetric | null; +- +- hasMetric(name: string): boolean; +- getMetric(name: string): BaseMetric; +- +- increment(name: string, labels?: GenericObject, value?: number, timestamp?: number): void; +- decrement(name: string, labels?: GenericObject, value?: number, timestamp?: number): void; +- set(name: string, value: any | null, labels?: GenericObject, timestamp?: number): void; +- observe(name: string, value: number, labels?: GenericObject, timestamp?: number): void; +- +- reset(name: string, labels?: GenericObject, timestamp?: number): void; +- resetAll(name: string, timestamp?: number): void; +- +- timer(name: string, labels?: GenericObject, timestamp?: number): () => number; +- +- changed( +- metric: BaseMetric, +- value: any | null, +- labels?: GenericObject, +- timestamp?: number +- ): void; +- +- list(opts?: MetricListOptions): BaseMetricPOJO[]; +- } +- +- interface MetricReporterOptions { +- includes?: string | string[]; +- excludes?: string | string[]; +- +- metricNamePrefix?: string; +- metricNameSuffix?: string; +- +- metricNameFormatter?: (name: string) => string; +- labelNameFormatter?: (name: string) => string; +- +- [key: string]: any; +- } +- +- class MetricBaseReporter { +- opts: MetricReporterOptions; +- +- constructor(opts: MetricReporterOptions); +- init(registry: MetricRegistry): void; +- +- matchMetricName(name: string): boolean; +- formatMetricName(name: string): string; +- formatLabelName(name: string): string; +- metricChanged( +- metric: BaseMetric, +- value: any, +- labels?: GenericObject, +- timestamp?: number +- ): void; +- } +- +- namespace MetricReporters { +- class Base extends MetricBaseReporter {} +- class Console extends MetricBaseReporter {} +- class CSV extends MetricBaseReporter {} +- class Event extends MetricBaseReporter {} +- class Datadog extends MetricBaseReporter {} +- class Prometheus extends MetricBaseReporter {} +- class StatsD extends MetricBaseReporter {} +- } +- +- interface BulkheadOptions { +- enabled?: boolean; +- concurrency?: number; +- maxQueueSize?: number; +- } +- +- type ActionCacheEnabledFuncType = (ctx: Context) => boolean; +- +- interface ActionCacheOptions

, M = unknown> { +- enabled?: boolean | ActionCacheEnabledFuncType; +- ttl?: number; +- keys?: string[]; +- keygen?: CacherKeygenFunc; +- lock?: { +- enabled?: boolean; +- staleTime?: number; +- }; +- } +- +- type ActionVisibility = "published" | "public" | "protected" | "private"; +- +- type ActionHookBefore = (ctx: Context) => Promise | void; +- type ActionHookAfter = (ctx: Context, res: any) => Promise | any; +- type ActionHookError = (ctx: Context, err: Error) => Promise | void; +- +- interface ActionHooks { +- before?: string | ActionHookBefore | (string | ActionHookBefore)[]; +- after?: string | ActionHookAfter | (string | ActionHookAfter)[]; +- error?: string | ActionHookError | (string | ActionHookError)[]; +- } +- +- interface RestSchema { +- path?: string; +- method?: "GET" | "POST" | "DELETE" | "PUT" | "PATCH"; +- fullPath?: string; +- basePath?: string; +- } +- +- interface ActionSchema { +- name?: string; +- rest?: RestSchema | RestSchema[] | string | string[]; +- visibility?: ActionVisibility; +- params?: ActionParams; +- service?: Service; +- cache?: boolean | ActionCacheOptions; +- handler?: ActionHandler; +- tracing?: boolean | TracingActionOptions; +- bulkhead?: BulkheadOptions; +- circuitBreaker?: BrokerCircuitBreakerOptions; +- retryPolicy?: RetryPolicyOptions; +- fallback?: string | FallbackHandler; +- hooks?: ActionHooks; +- +- [key: string]: any; +- } +- +- interface EventSchema { +- name?: string; +- group?: string; +- params?: ActionParams; +- service?: Service; +- tracing?: boolean | TracingEventOptions; +- bulkhead?: BulkheadOptions; +- handler?: ActionHandler; +- context?: boolean; +- +- [key: string]: any; +- } +- +- type ServiceActionsSchema = { +- [key: string]: ActionSchema | ActionHandler | boolean; +- } & ThisType>; +- +- class BrokerNode { +- id: string; +- instanceID: string | null; +- available: boolean; +- local: boolean; +- lastHeartbeatTime: number; +- config: GenericObject; +- client: GenericObject; +- metadata: GenericObject; +- +- ipList: string[]; +- port: number | null; +- hostname: string | null; +- udpAddress: string | null; +- +- rawInfo: GenericObject; +- services: [GenericObject]; +- +- cpu: number | null; +- cpuSeq: number | null; +- +- seq: number; +- offlineSince: number | null; +- +- heartbeat(payload: GenericObject): void; +- disconnected(): void; +- } +- +- class Context

{ +- constructor(broker: ServiceBroker, endpoint: Endpoint); +- id: string; +- broker: ServiceBroker; +- endpoint: Endpoint | null; +- action: ActionSchema | null; +- event: EventSchema | null; +- service: Service | null; +- nodeID: string | null; +- +- eventName: string | null; +- eventType: string | null; +- eventGroups: string[] | null; +- +- options: CallingOptions; +- +- parentID: string | null; +- caller: string | null; +- +- tracing: boolean | null; +- span: Span | null; +- +- needAck: boolean | null; +- ackID: string | null; +- +- locals: L; +- +- level: number; +- +- params: P; +- meta: M; +- +- requestID: string | null; +- +- cachedResult: boolean; +- +- setEndpoint(endpoint: Endpoint): void; +- setParams(newParams: P, cloning?: boolean): void; +- call(actionName: string): Promise; +- call( +- actionName: string, +- params: TParams, +- opts?: CallingOptions +- ): Promise; +- +- mcall( +- def: Record, +- opts?: MCallCallingOptions +- ): Promise>; +- mcall(def: MCallDefinition[], opts?: MCallCallingOptions): Promise; +- +- emit(eventName: string, data: D, opts: GenericObject): Promise; +- emit(eventName: string, data: D, groups: string[]): Promise; +- emit(eventName: string, data: D, groups: string): Promise; +- emit(eventName: string, data: D): Promise; +- emit(eventName: string): Promise; +- +- broadcast(eventName: string, data: D, opts: GenericObject): Promise; +- broadcast(eventName: string, data: D, groups: string[]): Promise; +- broadcast(eventName: string, data: D, groups: string): Promise; +- broadcast(eventName: string, data: D): Promise; +- broadcast(eventName: string): Promise; +- +- copy(endpoint: Endpoint): this; +- copy(): this; +- +- startSpan(name: string, opts?: GenericObject): Span; +- finishSpan(span: Span, time?: number): void; +- +- toJSON(): GenericObject; +- +- static create( +- broker: ServiceBroker, +- endpoint: Endpoint, +- params: GenericObject, +- opts: GenericObject +- ): Context; +- static create(broker: ServiceBroker, endpoint: Endpoint, params: GenericObject): Context; +- static create(broker: ServiceBroker, endpoint: Endpoint): Context; +- static create(broker: ServiceBroker): Context; +- } +- +- interface ServiceSettingSchema { +- $noVersionPrefix?: boolean; +- $noServiceNamePrefix?: boolean; +- $dependencyTimeout?: number; +- $shutdownTimeout?: number; +- $secureSettings?: string[]; +- [name: string]: any; +- } +- +- type ServiceEventLegacyHandler = ( +- payload: any, +- sender: string, +- eventName: string, +- ctx: Context +- ) => void | Promise; +- +- type ServiceEventHandler = (ctx: Context) => void | Promise; +- +- interface ServiceEvent { +- name?: string; +- group?: string; +- params?: ActionParams; +- context?: boolean; +- debounce?: number; +- throttle?: number; +- handler?: ServiceEventHandler | ServiceEventLegacyHandler; +- } +- +- type ServiceEvents = { +- [key: string]: ServiceEventHandler | ServiceEventLegacyHandler | ServiceEvent; +- } & ThisType>; +- +- type ServiceMethods = { [key: string]: (...args: any[]) => any } & ThisType; +- +- type CallMiddlewareHandler = ( +- actionName: string, +- params: any, +- opts: CallingOptions +- ) => Promise; +- type Middleware = { +- [name: string]: +- | ((handler: ActionHandler, action: ActionSchema) => any) +- | ((handler: ActionHandler, event: ServiceEvent) => any) +- | ((handler: ActionHandler) => any) +- | ((service: Service) => any) +- | ((service: Service, serviceSchema: ServiceSchema) => any) +- | ((broker: ServiceBroker) => any) +- | ((handler: CallMiddlewareHandler) => CallMiddlewareHandler); +- }; +- +- type MiddlewareInit = (broker: ServiceBroker) => Middleware; +- interface MiddlewareCallHandlerOptions { +- reverse?: boolean; +- } +- +- interface MiddlewareHandler { +- list: Middleware[]; +- +- add(mw: string | Middleware | MiddlewareInit): void; +- wrapHandler(method: string, handler: ActionHandler, def: ActionSchema): typeof handler; +- callHandlers( +- method: string, +- args: any[], +- opts: MiddlewareCallHandlerOptions +- ): Promise; +- callSyncHandlers(method: string, args: any[], opts: MiddlewareCallHandlerOptions): void; +- count(): number; +- wrapMethod( +- method: string, +- handler: ActionHandler, +- bindTo?: any, +- opts?: MiddlewareCallHandlerOptions +- ): typeof handler; +- } +- +- interface ServiceHooksBefore { +- [key: string]: string | ActionHookBefore | (string | ActionHookBefore)[]; +- } +- +- interface ServiceHooksAfter { +- [key: string]: string | ActionHookAfter | (string | ActionHookAfter)[]; +- } +- +- interface ServiceHooksError { +- [key: string]: string | ActionHookError | (string | ActionHookError)[]; +- } +- +- interface ServiceHooks { +- before?: ServiceHooksBefore; +- after?: ServiceHooksAfter; +- error?: ServiceHooksError; +- } +- +- interface ServiceDependency { +- name: string; +- version?: string | number; +- } +- +- type ServiceSyncLifecycleHandler = (this: T) => void; +- type ServiceAsyncLifecycleHandler = (this: T) => void | Promise; +- +- interface ServiceSchema> { +- name: string; +- version?: string | number; +- settings?: S; +- dependencies?: string | ServiceDependency | (string | ServiceDependency)[]; +- metadata?: any; +- actions?: ServiceActionsSchema; +- mixins?: Partial[]; +- methods?: ServiceMethods; +- hooks?: ServiceHooks; +- +- events?: ServiceEvents; +- created?: ServiceSyncLifecycleHandler | ServiceSyncLifecycleHandler[]; +- started?: ServiceAsyncLifecycleHandler | ServiceAsyncLifecycleHandler[]; +- stopped?: ServiceAsyncLifecycleHandler | ServiceAsyncLifecycleHandler[]; +- +- [name: string]: any; +- } +- +- type ServiceAction = , P extends GenericObject = GenericObject>( +- params?: P, +- opts?: CallingOptions +- ) => T; +- +- interface ServiceActions { +- [name: string]: ServiceAction; +- } +- +- interface WaitForServicesResult { +- services: string[]; +- statuses: { name: string; available: boolean }[]; +- } +- +- class Service implements ServiceSchema { +- constructor(broker: ServiceBroker, schema?: ServiceSchema); +- +- protected parseServiceSchema(schema: ServiceSchema): void; +- +- name: string; +- fullName: string; +- version?: string | number; +- settings: S; +- metadata: GenericObject; +- dependencies: string | ServiceDependency | (string | ServiceDependency)[]; +- schema: ServiceSchema; +- originalSchema: ServiceSchema; +- broker: ServiceBroker; +- logger: LoggerInstance; +- actions: ServiceActions; +- Promise: PromiseConstructorLike; +- +- _init(): void; +- _start(): Promise; +- _stop(): Promise; +- +- /** +- * Call a local event handler. Useful for unit tests. +- * +- * @param eventName The event name +- * @param params The event parameters +- * @param opts The event options +- */ +- emitLocalEventHandler(eventName: string, params?: any, opts?: any): any; +- +- /** +- * Wait for the specified services to become available/registered with this broker. +- * +- * @param serviceNames The service, or services, we are waiting for. +- * @param timeout The total time this call may take. If this time has passed and the service(s) +- * are not available an error will be thrown. (In milliseconds) +- * @param interval The time we will wait before once again checking if the service(s) are available (In milliseconds) +- */ +- waitForServices( +- serviceNames: string | string[] | ServiceDependency[], +- timeout?: number, +- interval?: number +- ): Promise; +- +- [key: string]: any; +- +- /** +- * Apply `mixins` list in schema. Merge the schema with mixins schemas. Returns with the mixed schema +- * +- * @param schema Schema containing the mixins to merge +- */ +- applyMixins(schema: ServiceSchema): ServiceSchema; +- +- /** +- * Merge two Service schema +- * +- * @param mixinSchema Mixin schema +- * @param svcSchema Service schema +- */ +- mergeSchemas( +- mixinSchema: Partial, +- svcSchema: Partial +- ): Partial; +- +- /** +- * Merge `settings` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaSettings(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `metadata` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaMetadata(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `mixins` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaUniqArray(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `dependencies` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaDependencies(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `hooks` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaHooks(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `actions` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaActions(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `methods` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaMethods(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `events` property in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaEvents(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge `started`, `stopped`, `created` event handler properties in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaLifecycleHandlers(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Merge unknown properties in schema +- * +- * @param src Source schema property +- * @param target Target schema property +- */ +- mergeSchemaUnknown(src: GenericObject, target: GenericObject): GenericObject; +- +- /** +- * Return a versioned full service name. +- * +- * @param name The name +- * @param version The version +- */ +- static getVersionedFullName(name: string, version?: string | number): string; +- } +- +- type CheckRetryable = (err: Errors.MoleculerError | Error) => boolean; +- +- interface BrokerCircuitBreakerOptions { +- enabled?: boolean; +- threshold?: number; +- windowTime?: number; +- minRequestCount?: number; +- halfOpenTime?: number; +- check?: CheckRetryable; +- } +- +- interface RetryPolicyOptions { +- enabled?: boolean; +- retries?: number; +- delay?: number; +- maxDelay?: number; +- factor?: number; +- check?: CheckRetryable; +- } +- +- interface BrokerRegistryOptions { +- strategy?: Function | string; +- strategyOptions?: GenericObject; +- preferLocal?: boolean; +- discoverer?: RegistryDiscovererOptions | BaseDiscoverer | string; +- } +- +- interface RegistryDiscovererOptions { +- type: string; +- options: DiscovererOptions; +- } +- +- interface DiscovererOptions extends GenericObject { +- heartbeatInterval?: number; +- heartbeatTimeout?: number; +- disableHeartbeatChecks?: boolean; +- disableOfflineNodeRemoving?: boolean; +- cleanOfflineNodesTimeout?: number; +- } +- +- interface BrokerTransitOptions { +- maxQueueSize?: number; +- disableReconnect?: boolean; +- disableVersionCheck?: boolean; +- maxChunkSize?: number; +- } +- +- interface BrokerTrackingOptions { +- enabled?: boolean; +- shutdownTimeout?: number; +- } +- +- interface LogLevelConfig { +- [module: string]: boolean | LogLevels; +- } +- +- interface LoggerConfig { +- type: string; +- options?: GenericObject; +- } +- +- interface BrokerErrorHandlerInfoAction { +- ctx: Context; +- service: Context["service"]; +- action: Context["action"]; +- } +- interface BrokerErrorHandlerInfoBroker { +- actionName: string; +- params: unknown; +- opts: CallingOptions; +- nodeId?: string; +- } +- type BrokerErrorHandlerInfo = BrokerErrorHandlerInfoAction | BrokerErrorHandlerInfoBroker; +- type BrokerErrorHandler = ( +- this: ServiceBroker, +- err: Error, +- info: BrokerErrorHandlerInfo +- ) => void; +- +- type BrokerSyncLifecycleHandler = (broker: ServiceBroker) => void; +- type BrokerAsyncLifecycleHandler = (broker: ServiceBroker) => void | Promise; +- +- interface BrokerOptions { +- namespace?: string | null; +- nodeID?: string | null; +- +- logger?: Loggers.Base | LoggerConfig | LoggerConfig[] | boolean | null; +- logLevel?: LogLevels | LogLevelConfig | null; +- +- transporter?: Transporter | string | GenericObject | null; +- requestTimeout?: number; +- retryPolicy?: RetryPolicyOptions; +- +- contextParamsCloning?: boolean; +- maxCallLevel?: number; +- heartbeatInterval?: number; +- heartbeatTimeout?: number; +- +- tracking?: BrokerTrackingOptions; +- +- disableBalancer?: boolean; +- +- registry?: BrokerRegistryOptions; +- +- circuitBreaker?: BrokerCircuitBreakerOptions; +- +- bulkhead?: BulkheadOptions; +- +- transit?: BrokerTransitOptions; +- +- uidGenerator?: () => string; +- +- errorHandler?: BrokerErrorHandler; +- +- cacher?: boolean | Cacher | string | GenericObject | null; +- serializer?: Serializer | string | GenericObject | null; +- validator?: boolean | BaseValidator | ValidatorNames | ValidatorOptions | null; +- errorRegenerator?: Errors.Regenerator | null; +- +- metrics?: boolean | MetricRegistryOptions; +- tracing?: boolean | TracerOptions; +- +- internalServices?: +- | boolean +- | { +- [key: string]: Partial; +- }; +- internalMiddlewares?: boolean; +- +- dependencyInterval?: number; +- dependencyTimeout?: number; +- +- hotReload?: boolean | HotReloadOptions; +- +- middlewares?: (Middleware | string)[]; +- +- replCommands?: GenericObject[] | null; +- replDelimiter?: string; +- +- metadata?: GenericObject; +- +- ServiceFactory?: typeof Service; +- ContextFactory?: typeof Context; +- Promise?: PromiseConstructorLike; +- +- created?: BrokerSyncLifecycleHandler; +- started?: BrokerAsyncLifecycleHandler; +- stopped?: BrokerAsyncLifecycleHandler; +- +- /** +- * If true, process.on("beforeExit/exit/SIGINT/SIGTERM", ...) handler won't be registered! +- * You have to register this manually and stop broker in this case! +- */ +- skipProcessEventRegistration?: boolean; +- +- maxSafeObjectSize?: number; +- } +- +- interface NodeHealthStatus { +- cpu: { +- load1: number; +- load5: number; +- load15: number; +- cores: number; +- utilization: number; +- }; +- mem: { +- free: number; +- total: number; +- percent: number; +- }; +- os: { +- uptime: number; +- type: string; +- release: string; +- hostname: string; +- arch: string; +- platform: string; +- user: string; +- }; +- process: { +- pid: NodeJS.Process["pid"]; +- memory: NodeJS.MemoryUsage; +- uptime: number; +- argv: string[]; +- }; +- client: { +- type: string; +- version: string; +- langVersion: NodeJS.Process["version"]; +- }; +- net: { +- ip: string[]; +- }; +- time: { +- now: number; +- iso: string; +- utc: string; +- }; +- } +- +- type FallbackHandler = (ctx: Context, err: Errors.MoleculerError) => Promise; +- type FallbackResponse = string | number | GenericObject; +- type FallbackResponseHandler = (ctx: Context, err: Errors.MoleculerError) => Promise; +- +- interface ContextParentSpan { +- id: string; +- traceID: string; +- sampled: boolean; +- } +- +- interface CallingOptions { +- timeout?: number; +- retries?: number; +- fallbackResponse?: FallbackResponse | FallbackResponse[] | FallbackResponseHandler; +- nodeID?: string; +- meta?: GenericObject; +- parentSpan?: ContextParentSpan; +- parentCtx?: Context; +- requestID?: string; +- tracking?: boolean; +- paramsCloning?: boolean; +- caller?: string; +- } +- +- interface MCallCallingOptions extends CallingOptions { +- settled?: boolean; +- } +- +- interface CallDefinition

{ +- action: string; +- params: P; +- } +- +- interface MCallDefinition

extends CallDefinition

{ +- options?: CallingOptions; +- } +- +- interface PongResponse { +- nodeID: string; +- elapsedTime: number; +- timeDiff: number; +- } +- +- interface PongResponses { +- [name: string]: PongResponse; +- } +- +- interface ServiceSearchObj { +- name: string; +- version?: string | number; +- } +- +- namespace Loggers { +- type LogHandler = (level: LogLevels, args: unknown[]) => void; +- +- class Base { +- constructor(opts?: GenericObject); +- init(loggerFactory: LoggerFactory): void; +- stop(): void; +- getLogLevel(mod: string): LogLevels | null; +- getLogHandler(bindings?: LoggerBindings): LogHandler | null; +- } +- } +- +- class ServiceBroker { +- constructor(options?: BrokerOptions); +- +- options: BrokerOptions; +- +- Promise: PromiseConstructorLike; +- ServiceFactory: typeof Service; +- ContextFactory: typeof Context; +- +- started: boolean; +- +- namespace: string; +- nodeID: string; +- instanceID: string; +- +- logger: LoggerInstance; +- +- services: Service[]; +- +- localBus: EventEmitter2; +- +- scope: AsyncStorage; +- metrics: MetricRegistry; +- +- middlewares: MiddlewareHandler; +- +- registry: ServiceRegistry; +- +- cacher?: Cacher; +- serializer?: Serializer; +- validator?: BaseValidator; +- errorRegenerator?: Errors.Regenerator; +- +- tracer: Tracer; +- +- transit?: Transit; +- +- start(): Promise; +- stop(): Promise; +- +- errorHandler(err: Error, info: BrokerErrorHandlerInfo): void; +- +- wrapMethod( +- method: string, +- handler: ActionHandler, +- bindTo?: any, +- opts?: MiddlewareCallHandlerOptions +- ): typeof handler; +- callMiddlewareHookSync( +- name: string, +- args: any[], +- opts: MiddlewareCallHandlerOptions +- ): Promise; +- callMiddlewareHook(name: string, args: any[], opts: MiddlewareCallHandlerOptions): void; +- +- isMetricsEnabled(): boolean; +- isTracingEnabled(): boolean; +- +- getLogger(module: string, props?: GenericObject): LoggerInstance; +- fatal(message: string, err?: Error, needExit?: boolean): void; +- +- loadServices(folder?: string, fileMask?: string): number; +- loadService(filePath: string): Service; +- createService(schema: ServiceSchema, schemaMods?: Partial): Service; +- destroyService(service: Service | string | ServiceSearchObj): Promise; +- +- getLocalService(name: string | ServiceSearchObj): Service; +- waitForServices( +- serviceNames: string | string[] | ServiceSearchObj[], +- timeout?: number, +- interval?: number, +- logger?: LoggerInstance +- ): Promise; +- +- findNextActionEndpoint( +- actionName: string, +- opts?: GenericObject, +- ctx?: Context +- ): ActionEndpoint | Errors.MoleculerRetryableError; +- +- call(actionName: string): Promise; +- call(actionName: string, params: P, opts?: CallingOptions): Promise; +- +- mcall( +- def: Record, +- opts?: MCallCallingOptions +- ): Promise>; +- mcall(def: MCallDefinition[], opts?: MCallCallingOptions): Promise; +- +- emit(eventName: string, data: D, opts: GenericObject): Promise; +- emit(eventName: string, data: D, groups: string[]): Promise; +- emit(eventName: string, data: D, groups: string): Promise; +- emit(eventName: string, data: D): Promise; +- emit(eventName: string): Promise; +- +- broadcast(eventName: string, data: D, opts: GenericObject): Promise; +- broadcast(eventName: string, data: D, groups: string[]): Promise; +- broadcast(eventName: string, data: D, groups: string): Promise; +- broadcast(eventName: string, data: D): Promise; +- broadcast(eventName: string): Promise; +- +- broadcastLocal(eventName: string, data: D, opts: GenericObject): Promise; +- broadcastLocal(eventName: string, data: D, groups: string[]): Promise; +- broadcastLocal(eventName: string, data: D, groups: string): Promise; +- broadcastLocal(eventName: string, data: D): Promise; +- broadcastLocal(eventName: string): Promise; +- +- ping(): Promise; +- ping(nodeID: string | string[], timeout?: number): Promise; +- +- getHealthStatus(): NodeHealthStatus; +- getLocalNodeInfo(): BrokerNode; +- +- getCpuUsage(): Promise; +- generateUid(): string; +- +- hasEventListener(eventName: string): boolean; +- getEventListener(eventName: string): EventEndpoint[]; +- +- getConstructorName(obj: any): string; +- +- MOLECULER_VERSION: string; +- PROTOCOL_VERSION: string; +- [key: string]: any; +- +- static MOLECULER_VERSION: string; +- static PROTOCOL_VERSION: string; +- static INTERNAL_MIDDLEWARES: string[]; +- static defaultOptions: BrokerOptions; +- static Promise: PromiseConstructorLike; +- } +- +- class Packet { +- constructor(type: string, target: string, payload?: any); +- } +- +- namespace Packets { +- type PROTOCOL_VERSION = "4"; +- type PACKET_UNKNOWN = "???"; +- type PACKET_EVENT = "EVENT"; +- type PACKET_REQUEST = "REQ"; +- type PACKET_RESPONSE = "RES"; +- type PACKET_DISCOVER = "DISCOVER"; +- type PACKET_INFO = "INFO"; +- type PACKET_DISCONNECT = "DISCONNECT"; +- type PACKET_HEARTBEAT = "HEARTBEAT"; +- type PACKET_PING = "PING"; +- type PACKET_PONG = "PONG"; +- +- type PACKET_GOSSIP_REQ = "GOSSIP_REQ"; +- type PACKET_GOSSIP_RES = "GOSSIP_RES"; +- type PACKET_GOSSIP_HELLO = "GOSSIP_HELLO"; +- +- const PROTOCOL_VERSION: PROTOCOL_VERSION; +- const PACKET_UNKNOWN: PACKET_UNKNOWN; +- const PACKET_EVENT: PACKET_EVENT; +- const PACKET_REQUEST: PACKET_REQUEST; +- const PACKET_RESPONSE: PACKET_RESPONSE; +- const PACKET_DISCOVER: PACKET_DISCOVER; +- const PACKET_INFO: PACKET_INFO; +- const PACKET_DISCONNECT: PACKET_DISCONNECT; +- const PACKET_HEARTBEAT: PACKET_HEARTBEAT; +- const PACKET_PING: PACKET_PING; +- const PACKET_PONG: PACKET_PONG; +- +- const PACKET_GOSSIP_REQ: PACKET_GOSSIP_REQ; +- const PACKET_GOSSIP_RES: PACKET_GOSSIP_RES; +- const PACKET_GOSSIP_HELLO: PACKET_GOSSIP_HELLO; +- +- interface PacketPayload { +- ver: PROTOCOL_VERSION; +- sender: string | null; +- } +- +- interface Packet { +- type: +- | PACKET_UNKNOWN +- | PACKET_EVENT +- | PACKET_DISCONNECT +- | PACKET_DISCOVER +- | PACKET_INFO +- | PACKET_HEARTBEAT +- | PACKET_REQUEST +- | PACKET_PING +- | PACKET_PONG +- | PACKET_RESPONSE +- | PACKET_GOSSIP_REQ +- | PACKET_GOSSIP_RES +- | PACKET_GOSSIP_HELLO; +- target?: string; +- payload: PacketPayload; +- } +- } +- +- class Transporter { +- constructor(opts?: GenericObject); +- hasBuiltInBalancer: boolean; +- +- init( +- transit: Transit, +- messageHandler: (cmd: string, msg: string) => void, +- afterConnect: (wasReconnect: boolean) => void +- ): void; +- connect(): Promise; +- disconnect(): Promise; +- onConnected(wasReconnect?: boolean): Promise; +- +- makeSubscriptions(topics: GenericObject[]): Promise; +- subscribe(cmd: string, nodeID?: string): Promise; +- subscribeBalancedRequest(action: string): Promise; +- subscribeBalancedEvent(event: string, group: string): Promise; +- unsubscribeFromBalancedCommands(): Promise; +- +- incomingMessage(cmd: string, msg: Buffer): Promise; +- receive(cmd: string, data: Buffer): Promise; +- +- prepublish(packet: Packet): Promise; +- publish(packet: Packet): Promise; +- publishBalancedEvent(packet: Packet, group: string): Promise; +- publishBalancedRequest(packet: Packet): Promise; +- send(topic: string, data: Buffer, meta: GenericObject): Promise; +- +- getTopicName(cmd: string, nodeID?: string): string; +- makeBalancedSubscriptions(): Promise; +- +- serialize(packet: Packet): Buffer; +- deserialize(type: string, data: Buffer): Packet; +- } +- +- type CacherKeygenFunc

, M = unknown> = ( +- actionName: string, +- params: P, +- meta: M, +- keys?: string[] +- ) => string; +- interface CacherOptions { +- ttl?: number; +- keygen?: CacherKeygenFunc; +- maxParamsLength?: number; +- [key: string]: any; +- } +- +- interface MemoryCacherOptions extends CacherOptions { +- clone?: boolean; +- } +- +- interface MemoryLRUCacherOptions extends MemoryCacherOptions { +- max?: number; +- } +- +- interface RedisCacherOptions extends CacherOptions { +- prefix?: string; +- redis?: GenericObject; +- redlock?: boolean | GenericObject; +- monitor?: boolean; +- pingInterval?: number; +- } +- +- namespace Cachers { +- class Base { +- constructor(opts?: CacherOptions); +- opts: CacherOptions; +- +- init(broker: ServiceBroker): void; +- close(): Promise; +- get(key: string): Promise; +- getWithTTL(key: string): Promise; +- set(key: string, data: any, ttl?: number): Promise; +- del(key: string | string[]): Promise; +- clean(match?: string | string[]): Promise; +- getCacheKey( +- actionName: string, +- params: object, +- meta: object, +- keys: string[] | null +- ): string; +- defaultKeygen( +- actionName: string, +- params: object | null, +- meta: object | null, +- keys: string[] | null +- ): string; +- tryLock(key: string | string[], ttl?: number): Promise<() => Promise>; +- lock(key: string | string[], ttl?: number): Promise<() => Promise>; +- } +- +- class Memory extends Base { +- constructor(opts?: MemoryCacherOptions); +- opts: MemoryCacherOptions; +- } +- +- class MemoryLRU extends Base { +- constructor(opts?: MemoryLRUCacherOptions); +- opts: MemoryLRUCacherOptions; +- } +- +- class Redis extends Base { +- constructor(opts?: string | RedisCacherOptions); +- opts: RedisCacherOptions; +- +- client: C; +- prefix: string | null; +- } +- } +- +- type Cacher = T; +- +- class Serializer { +- constructor(opts?: any); +- init(broker: ServiceBroker): void; +- serialize(obj: GenericObject, type?: string): Buffer; +- deserialize(buf: Buffer, type?: string): GenericObject; +- } +- +- const Serializers: { +- Base: typeof Serializer; +- JSON: typeof Serializer; +- Avro: typeof Serializer; +- CBOR: typeof Serializer; +- MsgPack: typeof Serializer; +- ProtoBuf: typeof Serializer; +- Thrift: typeof Serializer; +- Notepack: typeof Serializer; +- resolve: (type: string | GenericObject | Serializer) => Serializer; +- }; +- +- class BaseValidator { +- constructor(); +- init(broker: ServiceBroker): void; +- compile(schema: GenericObject): Function; +- validate(params: GenericObject, schema: GenericObject): boolean; +- middleware(): (handler: ActionHandler, action: ActionSchema) => any; +- convertSchemaToMoleculer(schema: any): GenericObject; +- } +- +- class Validator extends BaseValidator {} // deprecated +- +- abstract class BaseStrategy { +- constructor(registry: ServiceRegistry, broker: ServiceBroker, opts?: object); +- select(list: any[], ctx?: Context): Endpoint; +- } +- +- type ValidatorNames = "Fastest"; +- +- class RoundRobinStrategy extends BaseStrategy {} +- class RandomStrategy extends BaseStrategy {} +- class CpuUsageStrategy extends BaseStrategy {} +- class LatencyStrategy extends BaseStrategy {} +- class ShardStrategy extends BaseStrategy {} +- +- namespace Strategies { +- class Base extends BaseStrategy {} +- class RoundRobin extends RoundRobinStrategy {} +- class Random extends RandomStrategy {} +- class CpuUsage extends CpuUsageStrategy {} +- class Latency extends LatencyStrategy {} +- class Shard extends ShardStrategy {} +- } +- +- abstract class BaseDiscoverer { +- constructor(opts?: DiscovererOptions); +- +- transit?: Transit; +- localNode?: BrokerNode; +- +- heartbeatTimer: NodeJS.Timeout; +- checkNodesTimer: NodeJS.Timeout; +- offlineTimer: NodeJS.Timeout; +- +- init(registry: ServiceRegistry): void; +- +- stop(): Promise; +- startHeartbeatTimers(): void; +- stopHeartbeatTimers(): void; +- disableHeartbeat(): void; +- beat(): Promise; +- checkRemoteNodes(): void; +- checkOfflineNodes(): void; +- heartbeatReceived(nodeID: string, payload: GenericObject): void; +- processRemoteNodeInfo(nodeID: string, payload: GenericObject): BrokerNode; +- sendHeartbeat(): Promise; +- discoverNode(nodeID: string): Promise; +- discoverAllNodes(): Promise; +- localNodeReady(): Promise; +- sendLocalNodeInfo(nodeID: string): Promise; +- localNodeDisconnected(): Promise; +- remoteNodeDisconnected(nodeID: string, isUnexpected: boolean): void; +- } +- +- namespace Discoverers { +- class Base extends BaseDiscoverer {} +- class Local extends BaseDiscoverer {} +- class Redis extends BaseDiscoverer {} +- class Etcd3 extends BaseDiscoverer {} +- } +- +- interface ValidatorOptions { +- type: string; +- options?: GenericObject; +- } +- +- namespace Validators { +- class Base extends BaseValidator {} +- class Fastest extends BaseValidator {} +- } +- +- namespace Transporters { +- class Base extends Transporter {} +- class Fake extends Base {} +- class NATS extends Base {} +- class MQTT extends Base {} +- class Redis extends Base {} +- class AMQP extends Base {} +- class Kafka extends Base {} +- class STAN extends Base {} +- class TCP extends Base {} +- } +- +- namespace Errors { +- class MoleculerError extends Error { +- code: number; +- type: string; +- data: any; +- retryable: boolean; +- +- constructor(message: string, code: number, type: string, data: any); +- constructor(message: string, code: number, type: string); +- constructor(message: string, code: number); +- constructor(message: string); +- } +- class MoleculerRetryableError extends MoleculerError {} +- class MoleculerServerError extends MoleculerRetryableError {} +- class MoleculerClientError extends MoleculerError {} +- +- class ServiceNotFoundError extends MoleculerRetryableError { +- constructor(data: any); +- } +- class ServiceNotAvailableError extends MoleculerRetryableError { +- constructor(data: any); +- } +- +- class RequestTimeoutError extends MoleculerRetryableError { +- constructor(data: any); +- } +- class RequestSkippedError extends MoleculerError { +- constructor(data: any); +- } +- class RequestRejectedError extends MoleculerRetryableError { +- constructor(data: any); +- } +- +- class QueueIsFullError extends MoleculerRetryableError { +- constructor(data: any); +- } +- class ValidationError extends MoleculerClientError { +- constructor(message: string, type: string, data: GenericObject); +- constructor(message: string, type: string); +- constructor(message: string); +- } +- class MaxCallLevelError extends MoleculerError { +- constructor(data: any); +- } +- +- class ServiceSchemaError extends MoleculerError { +- constructor(message: string, data: any); +- } +- +- class BrokerOptionsError extends MoleculerError { +- constructor(message: string, data: any); +- } +- +- class GracefulStopTimeoutError extends MoleculerError { +- constructor(data: any); +- } +- +- class ProtocolVersionMismatchError extends MoleculerError { +- constructor(data: any); +- } +- +- class InvalidPacketDataError extends MoleculerError { +- constructor(data: any); +- } +- +- interface PlainMoleculerError extends MoleculerError { +- nodeID?: string; +- +- [key: string]: any; +- } +- +- class Regenerator { +- init(broker: ServiceBroker): void; +- restore(plainError: PlainMoleculerError, payload: GenericObject): Error; +- extractPlainError(err: Error): PlainMoleculerError; +- restoreCustomError( +- plainError: PlainMoleculerError, +- payload: GenericObject +- ): Error | undefined; +- } +- } +- +- interface TransitRequest { +- action: string; +- nodeID: string; +- ctx: Context; +- resolve: (value: any) => void; +- reject: (reason: any) => void; +- stream: boolean; +- } +- +- interface Transit { +- pendingRequests: Map; +- nodeID: string; +- logger: LoggerInstance; +- connected: boolean; +- disconnecting: boolean; +- isReady: boolean; +- tx: Transporter; +- +- afterConnect(wasReconnect: boolean): Promise; +- connect(): Promise; +- disconnect(): Promise; +- ready(): Promise; +- sendDisconnectPacket(): Promise; +- makeSubscriptions(): Promise; +- messageHandler(cmd: string, msg: GenericObject): boolean | Promise | undefined; +- request(ctx: Context): Promise; +- sendEvent(ctx: Context): Promise; +- removePendingRequest(id: string): void; +- removePendingRequestByNodeID(nodeID: string): void; +- sendResponse(nodeID: string, id: string, data: GenericObject, err: Error): Promise; +- sendResponse(nodeID: string, id: string, data: GenericObject): Promise; +- discoverNodes(): Promise; +- discoverNode(nodeID: string): Promise; +- sendNodeInfo(info: BrokerNode, nodeID?: string): Promise; +- sendPing(nodeID: string, id?: string): Promise; +- sendPong(payload: GenericObject): Promise; +- processPong(payload: GenericObject): void; +- sendHeartbeat(localNode: BrokerNode): Promise; +- subscribe(topic: string, nodeID: string): Promise; +- publish(packet: Packet): Promise; +- } +- +- interface ServiceListCatalogOptions { +- onlyLocal?: boolean; +- onlyAvailable?: boolean; +- skipInternal?: boolean; +- withActions?: boolean; +- withEvents?: boolean; +- grouping?: boolean; +- } +- +- class ServiceRegistry { +- broker: ServiceBroker; +- metrics: MetricRegistry; +- logger: LoggerInstance; +- +- opts: BrokerRegistryOptions; +- +- StrategyFactory: BaseStrategy; +- +- nodes: any; +- services: any; +- actions: ActionCatalog; +- events: any; +- +- getServiceList( +- opts?: ServiceListCatalogOptions +- ): ServiceSchema[]; +- getActionList(opts?: ActionCatalogListOptions): ReturnType; +- } +- +- abstract class Endpoint { +- broker: ServiceBroker; +- +- id: string; +- node: GenericObject; +- +- local: boolean; +- state: boolean; +- } +- +- class ActionEndpoint extends Endpoint { +- service: Service; +- action: ActionSchema; +- } +- +- class EventEndpoint extends Endpoint { +- service: Service; +- event: EventSchema; +- } +- +- class EndpointList { +- endpoints: (ActionEndpoint | EventEndpoint)[]; +- } +- +- interface ActionCatalogListOptions { +- onlyLocal?: boolean; +- onlyAvailable?: boolean; +- skipInternal?: boolean; +- withEndpoints?: boolean; +- } +- +- interface ActionCatalogListResult { +- name: string; +- count: number; +- hasLocal: boolean; +- available: boolean; +- action?: Omit; +- endpoints?: Pick[]; +- } +- +- class ActionCatalog { +- add(node: BrokerNode, service: ServiceItem, action: ActionSchema): EndpointList; +- +- get(actionName: string): EndpointList | undefined; +- +- isAvailable(actionName: string): boolean; +- +- removeByService(service: ServiceItem): void; +- +- remove(actionName: string, nodeID: string): void; +- +- list(opts: ActionCatalogListOptions): ActionCatalogListResult[]; +- } +- +- class ServiceItem {} +- +- class AsyncStorage { +- broker: ServiceBroker; +- store: Map; +- +- constructor(broker: ServiceBroker); +- +- enable(): void; +- disable(): void; +- stop(): void; +- getAsyncId(): number; +- setSessionData(data: any): void; +- getSessionData(): any | null; +- } +- +- const CIRCUIT_CLOSE: string; +- const CIRCUIT_HALF_OPEN: string; +- const CIRCUIT_OPEN: string; +- +- const MOLECULER_VERSION: string; +- const PROTOCOL_VERSION: string; +- const INTERNAL_MIDDLEWARES: string[]; +- +- const METRIC: { +- TYPE_COUNTER: "counter"; +- TYPE_GAUGE: "gauge"; +- TYPE_HISTOGRAM: "histogram"; +- TYPE_INFO: "info"; +- }; +- +- namespace Utils { +- function isFunction(func: unknown): func is Function; +- function isString(str: unknown): str is string; +- function isObject(obj: unknown): obj is object; +- function isPlainObject(obj: unknown): obj is object; +- function isDate(date: unknown): date is Date; +- function flatten(arr: readonly T[] | readonly T[][]): T[]; +- function humanize(millis?: number | null): string; +- function generateToken(): string; +- function removeFromArray(arr: T[], item: T): T[]; +- function getNodeID(): string; +- function getIpList(): string[]; +- function isPromise(promise: unknown): promise is Promise; +- function polyfillPromise(P: typeof Promise): void; +- function clearRequireCache(filename: string): void; +- function match(text: string, pattern: string): boolean; +- function deprecate(prop: unknown, msg?: string): void; +- function safetyObject(obj: unknown, options?: { maxSafeObjectSize?: number }): any; +- function dotSet(obj: T, path: string, value: unknown): T; +- function makeDirs(path: string): void; +- function parseByteString(value: string): number; +- } +- +- /** +- * Parsed CLI flags +- */ +- interface RunnerFlags { +- /** +- * Path to load configuration from a file +- */ +- config?: string; +- +- /** +- * Start REPL mode +- */ +- repl?: boolean; +- +- /** +- * Enable hot reload mode +- */ +- hot?: boolean; +- +- /** +- * Silent mode. No logger +- */ +- silent?: boolean; +- +- /** +- * Load .env file from current directory +- */ +- env?: boolean; +- +- /** +- * Load .env files by glob pattern +- */ +- envfile?: string; +- +- /** +- * Number of node instances to start in cluster mode +- */ +- instances?: number; +- +- /** +- * File mask for loading services +- */ +- mask?: string; +- } +- +- /** +- * Moleculer Runner +- */ +- class Runner { +- worker: Worker | null; +- broker: ServiceBroker | null; +- +- /** +- * Watch folders for hot reload +- */ +- watchFolders: string[]; +- +- /** +- * Parsed CLI flags +- */ +- flags: RunnerFlags | null; +- +- /** +- * Loaded configuration file +- */ +- configFile: Partial; +- +- /** +- * Merged configuration +- */ +- config: Partial; +- +- /** +- * Process command line arguments +- */ +- processFlags(args: string[]): void; +- +- /** +- * Load environment variables from '.env' file +- */ +- loadEnvFile(): void; +- +- /** +- * Load configuration file +- * +- * Try to load a configuration file in order to: +- * +- * - load file defined in MOLECULER_CONFIG env var +- * - try to load file which is defined in CLI option with --config +- * - try to load the `moleculer.config.js` file if exist in the cwd +- * - try to load the `moleculer.config.json` file if exist in the cwd +- */ +- loadConfigFile(): Promise; +- +- /** +- * Normalize a value from env variable +- */ +- normalizeEnvValue(value: string): string | number | boolean; +- +- /** +- * Overwrite config values from environment variables +- */ +- overwriteFromEnv(obj: any, prefix?: string): any; +- +- /** +- * Merge broker options from config file & env variables +- */ +- mergeOptions(): void; +- +- /** +- * Check if a path is a directory +- */ +- isDirectory(path: string): boolean; +- +- /** +- * Check if a path is a service file +- */ +- isServiceFile(path: string): boolean; +- +- /** +- * Load services from files or directories +- */ +- loadServices(): void; +- +- /** +- * Start cluster workers +- */ +- startWorkers(instances: number): void; +- +- /** +- * Load service from NPM module +- */ +- loadNpmModule(name: string): Service; +- +- /** +- * Start Moleculer broker +- */ +- startBroker(): Promise; +- +- /** +- * Restart broker +- */ +- restartBroker(): Promise; +- +- /** +- * Start runner +- */ +- start(args: string[]): Promise; +- } +- +- /* @private */ +- interface MoleculerMiddlewares { +- Transmit: { +- /** +- * Encrypts the Transporter payload +- * @param key The key to use for encryption +- * @param [algorithm] The algorithm to use for encryption. Default is aes-256-cbc +- * @param [iv] The initialization vector to use for encryption. Optional +- * @example // moleculer.config.js +- * const crypto = require("crypto"); +- * const { Middlewares } = require("moleculer"); +- * const initVector = crypto.randomBytes(16); +- * +- * module.exports = { +- * middlewares: [ +- * Middlewares.Transmit.Encryption("secret-password", "aes-256-cbc", initVector) // "aes-256-cbc" is the default +- * ] +- * }; +- */ +- Encryption: ( +- key: CipherKey, +- algorithm?: CipherCCMTypes | CipherOCBTypes | CipherGCMTypes | string, +- iv?: BinaryLike | null +- ) => Middleware; +- Compression: (opts?: { +- /** +- * @default deflate +- */ +- method?: "gzip" | "deflate" | "deflateRaw"; +- /** +- * Compression middleware reduces the size of the messages that go through the transporter module. +- * This middleware uses built-in Node zlib lib. +- * Threshold should be a number of bytes or a string like 100kb, 4mb, etc. Accepted units are: +- * - kb, for kilobytes +- * - mb, for megabytes +- * - gb, for gigabytes +- * - tb, for terabytes +- * - pb, for petabytes +- * @default 1kb +- * @example // moleculer.config.js +- * const { Middlewares } = require("moleculer"); +- * +- * // Create broker +- * module.exports = { +- * middlewares: [ +- * Middlewares.Transmit.Compression("deflate") // or "deflateRaw" or "gzip" +- * ] +- * }; +- */ +- threshold?: number | string; +- }) => Middleware; +- }; +- } +- const Middlewares: MoleculerMiddlewares; ++// Replacement template for moleculer namespace (making it global). ++declare global { ++ export namespace Moleculer {} + } + + export = Moleculer; +diff --git a/index.js b/index.js +index 09bd8bc3b1198948d4c2f25c3695a89cb8c0911a..2f1b65cfcf7254301b5f31491bfa22a743c2ba89 100644 +--- a/index.js ++++ b/index.js +@@ -13,7 +13,19 @@ const { + CIRCUIT_OPEN + } = require("./src/constants"); + ++// Injected dummy functions. ++function defineAction(actionSchema) { ++ return actionSchema; ++} ++function defineServiceEvent(serviceEvent) { ++ return serviceEvent; ++} ++ ++ + module.exports = { ++ defineAction, ++ defineServiceEvent, ++ + ServiceBroker: require("./src/service-broker"), + Loggers: require("./src/loggers"), + Service: require("./src/service"), +diff --git a/index.mjs b/index.mjs +index ef95dbcc1b0f00f765e04ba57f7a8f993a06ee53..f276dc157fe0eb2b83c212921089c5779a52c9e0 100644 +--- a/index.mjs ++++ b/index.mjs +@@ -1,6 +1,8 @@ + import mod from "./index.js"; + + export default mod; ++export const defineAction = mod.defineAction; ++export const defineServiceEvent = mod.defineServiceEvent; + export const CIRCUIT_CLOSE = mod.CIRCUIT_CLOSE; + export const CIRCUIT_HALF_OPEN = mod.CIRCUIT_HALF_OPEN; + export const CIRCUIT_HALF_OPEN_WAIT = mod.CIRCUIT_HALF_OPEN_WAIT; +diff --git a/moleculer-inference-types.d.ts b/moleculer-inference-types.d.ts +new file mode 100644 +index 0000000000000000000000000000000000000000..8825f361d1476db6220f486661a95416bb358ec1 +--- /dev/null ++++ b/moleculer-inference-types.d.ts +@@ -0,0 +1,622 @@ ++/* eslint-disable max-classes-per-file */ ++/* eslint-disable no-undef */ ++/* eslint-disable no-unused-vars */ ++/* eslint-disable import/prefer-default-export */ ++/* eslint-disable lines-between-class-members */ ++/* eslint-disable no-dupe-class-members */ ++ ++import type { EventEmitter2 } from 'eventemitter2'; ++import type { BinaryLike, CipherCCMTypes, CipherGCMTypes, CipherKey, CipherOCBTypes } from 'crypto'; ++import type { Worker } from 'cluster'; ++import type { ++ ValidationRuleObject, ++ ValidationSchema as FastestValidationSchema, ++ ValidationSchemaMetaKeys ++} from 'fastest-validator'; ++import { EnumType } from 'typescript'; ++ ++// TODO: Add an explanation / introduction to this type declaration. ++// What's not implemented yet: ++// - inference of actions from mixins. ++// - probably a lot more. ++ ++declare global { ++ export namespace Moleculer { ++ /* ++ * # Schema DEFINITION TYPES ++ */ ++ ++ /** A schema like: `{p1: {type: "string"}, p2: {type: "boolean"}}` */ ++ // type ValidatorSchema = Record< ++ // string, ++ // ParameterSchema | ValidationRuleObject | ValidationRuleObject[] // Space for improvements. ++ // > & ++ // ValidationSchemaMetaKeys; ++ type ValidatorSchema = Record; ++ ++ /** Schema of a single fastet-validator property, like `{type: "boolean", optional: true}` */ ++ type ParameterSchema = ( ++ | { optional?: true } ++ | { default?: DefaultType } // TODO: Bind this to the allowable schema definitions. ++ ) & ++ ( ++ | { type: 'multi'; rules: ParameterSchema[] } ++ | { type: 'object'; params: Record } ++ | { type: 'array'; items: keyof BasicValidatorTypeMap } ++ | { type: keyof BasicValidatorTypeMap } ++ ); ++ ++ /* ++ * # Schema INFERENCE TYPES ++ */ ++ ++ /** ++ * Infers the type of a fastest validator schema. ++ * E.g. ++ * ```ts ++ * { param1: {type: "string"}, ++ * param2: {type: "number"} } ++ * ``` ++ * returns type `{ param1: string, param2: number}` ++ */ ++ // type TypeFromSchema = Schema extends FastestValidationSchema ++ // ? { ++ // [Param in keyof Schema]: TypeFromSchemaParam; ++ // } ++ // : never; ++ ++ type TypeFromSchema = Schema extends FastestValidationSchema ++ ? Optionalize<{ ++ [Param in keyof Schema]: TypeFromSchemaParam; ++ }> ++ : never; ++ ++ /** ++ * Infers type from fastest-validator schema property definition. ++ * ++ * E.g. ++ * - `{ type: "number", default: 2}` returns type `number | undefined`. ++ * - `{ type: "array", items: "string"}` returns type `string[]` ++ */ ++ type TypeFromSchemaParam = ++ // Base type inferred from the `type` property ++ | TypeFromParsedParam< ++ Param['type'], ++ Param['items'], // 'items' extends keyof Param ? Extract: undefined, // Present for arrays. ++ Param['params'], // 'params' extends keyof Param ? Param['params']: undefined, // Present for objects. ++ Param['rules'] // 'rules' extends keyof Param ? Param['rules']: undefined // Present for objects with multiple possible types. ++ > ++ // Include the type of `default` if it exists ++ | (Param extends { default: infer D } ? (D & {}) | undefined : never) ++ // Include `undefined` if `optional` is true ++ | (Param extends { optional: true } ? undefined : never); ++ ++ /** ++ * Infers the type from a fastest-validator string type, e.g. ++ * the string `"number"` returns type `number`, `"boolean"` returns `boolean`. ++ * ++ * Supports complex types `"array"`, `"object"` or `"multi"` too. In that case, ++ * provide the correct `"items"`, `"params"`, or `"rules"` schema. ++ */ ++ type TypeFromParsedParam< ++ T extends string, // The basic type as string. ++ ItemTypeValue extends string = never, // If items property is present for array type. ++ ObjectSchema extends ParameterSchema = never, // ... ++ MultiTypeSchemas extends ParameterSchema[] = never // ... ++ > = T extends keyof BasicValidatorTypeMap ++ ? BasicValidatorTypeMap[T] ++ : T extends 'array' ++ ? Array> ++ : T extends 'multi' ++ ? MultiType ++ : T extends 'object' ++ ? TypeFromSchema ++ : never; ++ ++ /** Fastest-validator types with primitive mapping. */ ++ type BasicValidatorTypeMap = { ++ any: any; ++ boolean: boolean; ++ class: any; ++ currency: string; ++ custom: any; ++ date: string; ++ email: string; ++ enum: EnumType; ++ equal: any; ++ forbidden: any; ++ function: Function; ++ luhn: string; ++ mac: string; ++ number: number; ++ objectID: any; ++ record: object; ++ string: string; ++ tuple: Array; ++ url: string; ++ uuid: string; ++ }; ++ ++ /** ++ * Infers schema definitions from an array of schema properties ("multitype") into one type. ++ * **Attention**: Using multi with more than one rule of type object fails. ++ */ ++ type MultiType = { ++ [Index in keyof ParameterSchemas]: TypeFromSchemaParam; ++ }[number]; ++ ++ /** Get the parameter type of an action, if it exists. */ ++ type ParamTypeOfAction = 'params' extends keyof Action ++ ? TypeFromSchema ++ : unknown; ++ ++ /** Handler function from Handler (which can be a function or a action definitions). */ ++ type HandlerOfAction = Action extends ActionHandler ++ ? Action ++ : 'handler' extends keyof Action ++ ? Action['handler'] ++ : never; ++ ++ /* ++ * # Moleculer Schemas ++ */ ++ ++ /** ++ * Service registry that every service should extend ++ * using global [declaration merging](https://www.typescriptlang.org/docs/handbook/declaration-merging.html) ++ * as follow: ++ * ```ts ++ * const service = { ++ * name: 'service1', ++ * actions: { ++ * action1: defineAction({ ++ * params: { stringParam: { type: 'string' } }, ++ * async handler(ctx) {...} ++ * }) ++ * } ++ * }; ++ * ++ * declare global { ++ * export namespace Moleculer { ++ * export interface AvailableServices { ++ * [service.name]: typeof service; ++ * } ++ * } ++ * } ++ * ``` ++ * ++ */ ++ interface AllServices {} ++ ++ /** ++ * Creates an object type in the format `{ serviceVersion.serviceName.actionName: Action }` ++ * for a given service and action name. If the service has a version property, the version is prepended. ++ */ ++ ++ type ActionNameOfAction< ++ const Service extends ServiceSchema, ++ const ActionName extends readonly string, ++ const Version = Service['version'] extends string ++ ? `${Service['version']}.` ++ : Service['version'] extends number ++ ? `v${Service['version']}.` ++ : `` ++ > = `${Version}${`${Service['name']}.${ActionName}`}`; ++ ++ // Creates Record ++ type ActionsOfServices_> = { ++ [ServiceKey in keyof Services]: { ++ [ActionName in keyof Services[ServiceKey]['actions'] as ActionNameOfAction< ++ Services[ServiceKey], ++ ActionName & (string & {}) ++ >]: Services[ServiceKey]['actions'][ActionName]; ++ }; ++ }[keyof Services]; ++ ++ /** Creates a type with the structure Record<`version.service.name`, ServiceActionsSchema> */ ++ type ActionsOfServices> = UnionToIntersect< ++ ActionsOfServices_ ++ >; ++ ++ /** ++ * All available actions, inferred from @see {AllServices}, ++ * mapped by their full name like: ++ * `Record<"[version.]serviceName.actionName": ServiceActionsSchema>` ++ * ++ */ ++ type AllActions = ActionsOfServices; ++ ++ /** The Action name of all available actions or `string`. */ ++ type ActionName = keyof AllActions | (string & {}); ++ ++ type ActionSchema< ++ const ParamSchema extends ValidatorSchema = ValidatorSchema, ++ const Handler extends ActionHandler = ActionHandler>, // See if this can be set differently / more openly for service schema's actions field ++ // We need to preserve the return type for inference of the return type of handlers in `defineAction` methods. ++ const Ret = ReturnType ++ > = { ++ name?: string; ++ visibility?: ActionVisibility; ++ params?: ParamSchema; ++ service?: Service; ++ cache?: boolean | ActionCacheOptions; ++ handler: Handler; ++ tracing?: boolean | TracingActionOptions; ++ bulkhead?: BulkheadOptions; ++ circuitBreaker?: BrokerCircuitBreakerOptions; ++ retryPolicy?: RetryPolicyOptions; ++ fallback?: string | FallbackHandler; ++ hooks?: ActionHooks; ++ ++ // See https://github.com/moleculerjs/moleculer/issues/467#issuecomment-705583471 ++ [key: string]: string | boolean | any[] | number | Record | null | undefined; ++ }; // ThisType? ++ /** ++ * Calls an action by name with appropriate parameter typing. For known actions, enforces correct parameter requirements; ++ * for unknown action names, defaults to an unknown parameter type. ++ * ++ */ ++ type Call = ( ++ actionName: AName, ++ // Is specified action name "registered"? ++ ...args: AName extends keyof AllActions ++ ? HasAtLeastOneRequiredParam extends true ++ ? // At least one param specified in action is required. ++ [params: ParamTypeOfAction, opts?: CallingOptions] ++ : // All params are optional (or `params` property is missing for action). ++ [params?: ParamTypeOfAction, opts?: CallingOptions] ++ : // Action is unknown ++ [params?: Record, opts?: CallingOptions] ++ ) => Promisify> : any>; ++ ++ /** ++ * Dummy function that enforces type safety on `ActionSchema` definitions so that ++ * you can use typed `ctx.params` inferred from the action's `params` property. ++ */ ++ function defineAction< ++ ParameterValidationSchema extends ValidatorSchema, ++ Handler extends ActionHandler> = ActionHandler< ++ TypeFromSchema ++ >, ++ const Ret = ReturnType ++ >( ++ schema: ActionSchema & ThisType ++ ): ActionSchema; ++ // function defineAction(val: T & ThisType): T; ++ ++ /** ++ * Dummy function that enforces type safety on `ServiceEvent` definitions so that ++ * you can use typed `ctx.params` inferred from the action's `params` property. ++ */ ++ function defineServiceEvent

(schema: ServiceEvent

): ServiceEvent

; ++ ++ interface EventSchema { ++ name?: string; ++ group?: string; ++ params?: Schema; ++ service?: Service; ++ tracing?: boolean | TracingEventOptions; ++ bulkhead?: BulkheadOptions; ++ handler?: ActionHandler>; ++ context?: boolean; ++ ++ [key: string]: any; ++ } ++ ++ /** The actions of a service. */ ++ type ServiceActionsSchema = { ++ // Adding type value Partial is a hack to support the typing of ctx.params inside of the handler. I don't fully understand why this works. ++ // However that causes error message for the assignment ++ [key: string]: ActionSchema | ActionHandler | boolean; ++ } & ThisType>; ++ ++ class Context< ++ Params extends Record = Record, ++ Meta extends object = {}, ++ Locals = GenericObject ++ > { ++ constructor(broker: ServiceBroker, endpoint: Endpoint); ++ ++ id: string; ++ broker: ServiceBroker; ++ endpoint: Endpoint | null; ++ action: ActionSchema | null; ++ event: EventSchema | null; ++ service: Service | null; ++ nodeID: string | null; ++ ++ eventName: string | null; ++ eventType: string | null; ++ eventGroups: string[] | null; ++ ++ options: CallingOptions; ++ ++ parentID: string | null; ++ caller: string | null; ++ ++ tracing: boolean | null; ++ span: Span | null; ++ ++ needAck: boolean | null; ++ ackID: string | null; ++ ++ locals: Locals; ++ ++ level: number; ++ ++ params: Params; ++ meta: Meta; ++ ++ requestID: string | null; ++ ++ cachedResult: boolean; ++ ++ setEndpoint(endpoint: Endpoint): void; ++ setParams(newParams: Params, cloning?: boolean): void; ++ ++ call: Call; ++ mcall(def: Record, opts?: MCallCallingOptions): Promise>; ++ mcall(def: MCallDefinition[], opts?: MCallCallingOptions): Promise; ++ ++ emit(eventName: string, data: D, opts: GenericObject): Promise; ++ emit(eventName: string, data: D, groups: string[]): Promise; ++ emit(eventName: string, data: D, groups: string): Promise; ++ emit(eventName: string, data: D): Promise; ++ emit(eventName: string): Promise; ++ ++ broadcast(eventName: string, data: D, opts: GenericObject): Promise; ++ broadcast(eventName: string, data: D, groups: string[]): Promise; ++ broadcast(eventName: string, data: D, groups: string): Promise; ++ broadcast(eventName: string, data: D): Promise; ++ broadcast(eventName: string): Promise; ++ ++ copy(endpoint: Endpoint): this; ++ copy(): this; ++ ++ startSpan(name: string, opts?: GenericObject): Span; ++ finishSpan(span: Span, time?: number): void; ++ ++ toJSON(): GenericObject; ++ ++ static create(broker: ServiceBroker, endpoint: Endpoint, params: GenericObject, opts: GenericObject): Context; ++ static create(broker: ServiceBroker, endpoint: Endpoint, params: GenericObject): Context; ++ static create(broker: ServiceBroker, endpoint: Endpoint): Context; ++ static create(broker: ServiceBroker): Context; ++ } ++ ++ // TODO: Documentation, Meta key ++ // TODO: ThisType? ++ type ActionHandler< ++ Params extends Record = Record, ++ ReturnType extends any = any, ++ Meta extends object = {}, ++ Locals = Moleculer.GenericObject ++ > = (ctx: Context) => ReturnType; ++ ++ interface ServiceSettingSchema { ++ $noVersionPrefix?: boolean; ++ $noServiceNamePrefix?: boolean; ++ $dependencyTimeout?: number; ++ $shutdownTimeout?: number; ++ $secureSettings?: string[]; ++ [name: string]: any; ++ } ++ ++ type ServiceEventLegacyHandler = ( ++ payload: any, ++ sender: string, ++ eventName: string, ++ ctx: Context ++ ) => (void | Promise) & ThisType; ++ ++ type ServiceEventHandler = ((ctx: Context) => void | Promise) & ThisType; ++ ++ interface ServiceEvent { ++ name?: string; ++ group?: string; ++ params?: Schema; ++ context?: boolean; ++ debounce?: number; ++ throttle?: number; ++ handler?: ServiceEventHandler>; // | ServiceEventLegacyHandler>; ++ } ++ ++ interface ServiceSchema> { ++ name: string; ++ version?: string | number; ++ settings?: S; ++ dependencies?: string | ServiceDependency | (string | ServiceDependency)[]; ++ metadata?: any; ++ actions?: ServiceActionsSchema; ++ mixins?: Partial[]; ++ methods?: ServiceMethods; ++ hooks?: ServiceHooks; ++ ++ events?: ServiceEvents; ++ created?: ServiceSyncLifecycleHandler | ServiceSyncLifecycleHandler[]; ++ started?: ServiceAsyncLifecycleHandler | ServiceAsyncLifecycleHandler[]; ++ stopped?: ServiceAsyncLifecycleHandler | ServiceAsyncLifecycleHandler[]; ++ ++ [name: string]: any; ++ } ++ ++ type ServiceAction = , P extends GenericObject = GenericObject>( ++ params?: P, ++ opts?: CallingOptions ++ ) => T; ++ ++ interface ServiceActions { ++ [name: string]: ServiceAction; ++ } ++ ++ class ServiceBroker { ++ constructor(options?: BrokerOptions); ++ ++ options: BrokerOptions; ++ ++ Promise: PromiseConstructorLike; ++ ServiceFactory: typeof Service; ++ ContextFactory: typeof Context; ++ ++ started: boolean; ++ ++ namespace: string; ++ nodeID: string; ++ instanceID: string; ++ ++ logger: LoggerInstance; ++ ++ services: Service[]; ++ ++ localBus: EventEmitter2; ++ ++ scope: AsyncStorage; ++ metrics: MetricRegistry; ++ ++ middlewares: MiddlewareHandler; ++ ++ registry: ServiceRegistry; ++ ++ cacher?: Cacher; ++ serializer?: Serializer; ++ validator?: BaseValidator; ++ errorRegenerator?: Errors.Regenerator; ++ ++ tracer: Tracer; ++ ++ transit?: Transit; ++ ++ start(): Promise; ++ stop(): Promise; ++ ++ errorHandler(err: Error, info: BrokerErrorHandlerInfo): void; ++ ++ wrapMethod( ++ method: string, ++ handler: ActionHandler, ++ bindTo?: any, ++ opts?: MiddlewareCallHandlerOptions ++ ): typeof handler; ++ callMiddlewareHookSync(name: string, args: any[], opts: MiddlewareCallHandlerOptions): Promise; ++ callMiddlewareHook(name: string, args: any[], opts: MiddlewareCallHandlerOptions): void; ++ ++ isMetricsEnabled(): boolean; ++ isTracingEnabled(): boolean; ++ ++ getLogger(module: string, props?: GenericObject): LoggerInstance; ++ fatal(message: string, err?: Error, needExit?: boolean): void; ++ ++ loadServices(folder?: string, fileMask?: string): number; ++ loadService(filePath: string): Service; ++ createService(schema: ServiceSchema, schemaMods?: Partial): Service; ++ destroyService(service: Service | string | ServiceSearchObj): Promise; ++ ++ getLocalService(name: string | ServiceSearchObj): Service; ++ waitForServices( ++ serviceNames: (keyof AllServices | (string & {})) | (keyof AllServices | (string & {}))[] | ServiceSearchObj[], ++ timeout?: number, ++ interval?: number, ++ logger?: LoggerInstance ++ ): Promise; ++ ++ findNextActionEndpoint( ++ actionName: ActionName, ++ opts?: GenericObject, ++ ctx?: Context ++ ): ActionEndpoint | Errors.MoleculerRetryableError; ++ ++ call: Call; ++ mcall(def: Record, opts?: MCallCallingOptions): Promise>; ++ mcall(def: MCallDefinition[], opts?: MCallCallingOptions): Promise; ++ ++ emit(eventName: string, data: D, opts: GenericObject): Promise; ++ emit(eventName: string, data: D, groups: string[]): Promise; ++ emit(eventName: string, data: D, groups: string): Promise; ++ emit(eventName: string, data: D): Promise; ++ emit(eventName: string): Promise; ++ ++ broadcast(eventName: string, data: D, opts: GenericObject): Promise; ++ broadcast(eventName: string, data: D, groups: string[]): Promise; ++ broadcast(eventName: string, data: D, groups: string): Promise; ++ broadcast(eventName: string, data: D): Promise; ++ broadcast(eventName: string): Promise; ++ ++ broadcastLocal(eventName: string, data: D, opts: GenericObject): Promise; ++ broadcastLocal(eventName: string, data: D, groups: string[]): Promise; ++ broadcastLocal(eventName: string, data: D, groups: string): Promise; ++ broadcastLocal(eventName: string, data: D): Promise; ++ broadcastLocal(eventName: string): Promise; ++ ++ ping(): Promise; ++ ping(nodeID: string | string[], timeout?: number): Promise; ++ ++ getHealthStatus(): NodeHealthStatus; ++ getLocalNodeInfo(): BrokerNode; ++ ++ getCpuUsage(): Promise; ++ generateUid(): string; ++ ++ hasEventListener(eventName: string): boolean; ++ getEventListener(eventName: string): EventEndpoint[]; ++ ++ getConstructorName(obj: any): string; ++ ++ MOLECULER_VERSION: string; ++ PROTOCOL_VERSION: string; ++ [key: string]: any; ++ ++ static MOLECULER_VERSION: string; ++ static PROTOCOL_VERSION: string; ++ static INTERNAL_MIDDLEWARES: string[]; ++ static defaultOptions: BrokerOptions; ++ static Promise: PromiseConstructorLike; ++ } ++ ++ /* ++ * # Utility Types ++ */ ++ ++ /** Converts a type union into a type intersection */ ++ type UnionToIntersect = (T extends any ? (x: T) => 0 : never) extends (x: infer R) => 0 ? R : never; ++ ++ /** The following type wraps an object in a promise if it isn't one already. */ ++ type Promisify = Promise ? U : T>; ++ ++ /** Helper to check if an object type has at least one non-optional property. */ ++ type HasRequiredKeys = [ ++ keyof { ++ // Pick only keys that do not include undefined in their type. ++ [K in keyof T as undefined extends T[K] ? never : K]: T[K]; ++ } ++ ] extends [never] ++ ? false ++ : true; ++ ++ /** Decides if an action has at least one required (non-optional) param. */ ++ type HasAtLeastOneRequiredParam = ++ ParamTypeOfAction extends infer P ++ ? [unknown] extends [P] ++ ? false ++ : [keyof P] extends [never] ++ ? false ++ : HasRequiredKeys

++ : false; ++ } ++ ++ /** ++ * A helper type that takes an object and makes properties optional ++ * if their type includes `undefined`. ++ * ++ * For example, for `{ a: string | undefined, b: string }`, it returns ++ * `{ a?: string | undefined, b: string }`. ++ */ ++ type Optionalize = { ++ // Pick optional properties and make them optional ++ [K in keyof T as undefined extends T[K] ? K : never]?: T[K]; ++ } & { ++ // Pick required properties ++ [K in keyof T as undefined extends T[K] ? never : K]: T[K]; ++ }; ++} ++ ++export = Moleculer; +diff --git a/non-action-based.d.ts b/non-action-based.d.ts +new file mode 100644 +index 0000000000000000000000000000000000000000..dedf5c031544b7abbb11447576e35aa33407d627 +--- /dev/null ++++ b/non-action-based.d.ts +@@ -0,0 +1,1718 @@ ++/* eslint-disable max-classes-per-file */ ++/* eslint-disable no-undef */ ++/* eslint-disable import/prefer-default-export */ ++/* eslint-disable lines-between-class-members */ ++/* eslint-disable no-dupe-class-members */ ++ ++import type { EventEmitter2 } from 'eventemitter2'; ++import type { BinaryLike, CipherCCMTypes, CipherGCMTypes, CipherKey, CipherOCBTypes } from 'crypto'; ++import type { Worker } from 'cluster'; ++import type { ++ ValidationRuleObject, ++ ValidationSchema as FastestValidationSchema, ++ ValidationSchemaMetaKeys ++} from 'fastest-validator'; ++import { EnumType } from 'typescript'; ++ ++declare global { ++ export namespace Moleculer { ++ /** ++ * Moleculer uses global.Promise as the default promise library ++ * If you are using a third-party promise library (e.g. Bluebird), you will need to ++ * assign type definitions to use for your promise library. You will need to have a .d.ts file ++ * with the following code when you compile: ++ * ++ * - import Bluebird from "bluebird"; ++ * declare module "moleculer" { ++ * type Promise = Bluebird; ++ * } ++ */ ++ type GenericObject = { [name: string]: any }; ++ ++ type LogLevels = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace'; ++ ++ class LoggerFactory { ++ constructor(broker: ServiceBroker); ++ init(opts: LoggerConfig | LoggerConfig[]): void; ++ stop(): void; ++ getLogger(bindings: LoggerBindings): LoggerInstance; ++ getBindingsKey(bindings: LoggerBindings): string; ++ ++ broker: ServiceBroker; ++ } ++ ++ interface LoggerBindings { ++ nodeID: string; ++ ns: string; ++ mod: string; ++ svc: string; ++ ver?: string; ++ } ++ ++ class LoggerInstance { ++ fatal(...args: any[]): void; ++ error(...args: any[]): void; ++ warn(...args: any[]): void; ++ info(...args: any[]): void; ++ debug(...args: any[]): void; ++ trace(...args: any[]): void; ++ } ++ ++ interface HotReloadOptions { ++ modules?: string[]; ++ } ++ ++ interface TracerExporterOptions { ++ type: string; ++ options?: GenericObject; ++ } ++ ++ interface TracerOptions { ++ enabled?: boolean; ++ exporter?: string | TracerExporterOptions | (TracerExporterOptions | string)[] | null; ++ sampling?: { ++ rate?: number | null; ++ tracesPerSecond?: number | null; ++ minPriority?: number | null; ++ }; ++ ++ actions?: boolean; ++ events?: boolean; ++ ++ errorFields?: string[]; ++ stackTrace?: boolean; ++ ++ defaultTags?: GenericObject | Function | null; ++ ++ tags?: { ++ action?: TracingActionTags; ++ event?: TracingEventTags; ++ }; ++ } ++ ++ class Tracer { ++ constructor(broker: ServiceBroker, opts: TracerOptions | boolean); ++ ++ broker: ServiceBroker; ++ logger: LoggerInstance; ++ opts: GenericObject; ++ ++ exporter: BaseTraceExporter[]; ++ ++ isEnabled(): boolean; ++ shouldSample(span: Span): boolean; ++ ++ startSpan(name: string, opts?: GenericObject): Span; ++ ++ // getCurrentSpan(): Span | null; ++ getCurrentTraceID(): string | null; ++ getActiveSpanID(): string | null; ++ } ++ ++ interface SpanLogEntry { ++ name: string; ++ fields: GenericObject; ++ time: number; ++ elapsed: number; ++ } ++ ++ class Span { ++ constructor(tracer: Tracer, name: string, opts: GenericObject); ++ ++ tracer: Tracer; ++ logger: LoggerInstance; ++ opts: GenericObject; ++ meta: GenericObject; ++ ++ name: string; ++ id: string; ++ traceID: string; ++ parentID: string | null; ++ ++ service?: { ++ name: string; ++ version: string | number | null | undefined; ++ }; ++ ++ priority: number; ++ sampled: boolean; ++ ++ startTime: number | null; ++ finishTime: number | null; ++ duration: number | null; ++ ++ error: Error | null; ++ ++ logs: SpanLogEntry[]; ++ tags: GenericObject; ++ ++ start(time?: number): Span; ++ addTags(obj: GenericObject): Span; ++ log(name: string, fields?: GenericObject, time?: number): Span; ++ setError(err: Error): Span; ++ finish(time?: number): Span; ++ startSpan(name: string, opts?: GenericObject): Span; ++ } ++ ++ type TracingActionTagsFuncType = (ctx: Context, response?: any) => GenericObject; ++ type TracingActionTags = ++ | TracingActionTagsFuncType ++ | { ++ params?: boolean | string[]; ++ meta?: boolean | string[]; ++ response?: boolean | string[]; ++ }; ++ ++ type TracingEventTagsFuncType = (ctx: Context) => GenericObject; ++ type TracingEventTags = ++ | TracingEventTagsFuncType ++ | { ++ params?: boolean | string[]; ++ meta?: boolean | string[]; ++ }; ++ ++ type TracingSpanNameOption = string | ((ctx: Context) => string); ++ ++ interface TracingOptions { ++ enabled?: boolean; ++ tags?: TracingActionTags | TracingEventTags; ++ spanName?: TracingSpanNameOption; ++ safetyTags?: boolean; ++ } ++ ++ interface TracingActionOptions extends TracingOptions { ++ tags?: TracingActionTags; ++ } ++ ++ interface TracingEventOptions extends TracingOptions { ++ tags?: TracingEventTags; ++ } ++ ++ class BaseTraceExporter { ++ opts: GenericObject; ++ tracer: Tracer; ++ logger: LoggerInstance; ++ ++ constructor(opts: GenericObject); ++ init(tracer: Tracer): void; ++ ++ spanStarted(span: Span): void; ++ spanFinished(span: Span): void; ++ ++ flattenTags(obj: GenericObject, convertToString?: boolean, path?: string): GenericObject; ++ errorToObject(err: Error): GenericObject; ++ } ++ ++ namespace TracerExporters { ++ class Base extends BaseTraceExporter {} ++ class Console extends BaseTraceExporter {} ++ class Datadog extends BaseTraceExporter {} ++ class Event extends BaseTraceExporter {} ++ class EventLegacy extends BaseTraceExporter {} ++ class Jaeger extends BaseTraceExporter {} ++ class Zipkin extends BaseTraceExporter {} ++ } ++ ++ interface MetricsReporterOptions { ++ type: string; ++ options?: MetricReporterOptions; ++ } ++ ++ interface MetricRegistryOptions { ++ enabled?: boolean; ++ collectProcessMetrics?: boolean; ++ collectInterval?: number; ++ reporter?: string | MetricsReporterOptions | (MetricsReporterOptions | string)[] | null; ++ defaultBuckets?: number[]; ++ defaultQuantiles?: number[]; ++ defaultMaxAgeSeconds?: number; ++ defaultAgeBuckets?: number; ++ defaultAggregator?: string; ++ } ++ ++ type MetricSnapshot = GaugeMetricSnapshot | InfoMetricSnapshot | HistogramMetricSnapshot; ++ interface BaseMetricPOJO { ++ type: string; ++ name: string; ++ description?: string; ++ labelNames: string[]; ++ unit?: string; ++ values: MetricSnapshot[]; ++ } ++ ++ class BaseMetric { ++ type: string; ++ name: string; ++ description?: string; ++ labelNames: string[]; ++ unit?: string; ++ aggregator: string; ++ ++ lastSnapshot: GenericObject | null; ++ dirty: boolean; ++ values: Map; ++ ++ constructor(opts: BaseMetricOptions, registry: MetricRegistry); ++ setDirty(): void; ++ clearDirty(): void; ++ get(labels?: GenericObject): GenericObject | null; ++ reset(labels?: GenericObject, timestamp?: number): GenericObject | null; ++ resetAll(timestamp?: number): GenericObject | null; ++ clear(): void; ++ hashingLabels(labels?: GenericObject): string; ++ snapshot(): MetricSnapshot[]; ++ generateSnapshot(): MetricSnapshot[]; ++ changed(value: any | null, labels?: GenericObject, timestamp?: number): void; ++ toObject(): BaseMetricPOJO; ++ } ++ ++ interface GaugeMetricSnapshot { ++ value: number; ++ labels: GenericObject; ++ timestamp: number; ++ } ++ ++ class GaugeMetric extends BaseMetric { ++ increment(labels?: GenericObject, value?: number, timestamp?: number): void; ++ decrement(labels?: GenericObject, value?: number, timestamp?: number): void; ++ set(value: number, labels?: GenericObject, timestamp?: number): void; ++ generateSnapshot(): GaugeMetricSnapshot[]; ++ } ++ ++ class CounterMetric extends BaseMetric { ++ increment(labels?: GenericObject, value?: number, timestamp?: number): void; ++ set(value: number, labels?: GenericObject, timestamp?: number): void; ++ generateSnapshot(): GaugeMetricSnapshot[]; ++ } ++ ++ interface InfoMetricSnapshot { ++ value: any; ++ labels: GenericObject; ++ timestamp: number; ++ } ++ ++ class InfoMetric extends BaseMetric { ++ set(value: any | null, labels?: GenericObject, timestamp?: number): void; ++ generateSnapshot(): InfoMetricSnapshot[]; ++ } ++ ++ interface HistogramMetricSnapshot { ++ labels: GenericObject; ++ count: number; ++ sum: number; ++ timestamp: number; ++ ++ buckets?: { ++ [key: string]: number; ++ }; ++ ++ min?: number | null; ++ mean?: number | null; ++ variance?: number | null; ++ stdDev?: number | null; ++ max?: number | null; ++ quantiles?: { ++ [key: string]: number; ++ }; ++ } ++ ++ class HistogramMetric extends BaseMetric { ++ buckets: number[]; ++ quantiles: number[]; ++ maxAgeSeconds?: number; ++ ageBuckets?: number; ++ ++ observe(value: number, labels?: GenericObject, timestamp?: number): void; ++ generateSnapshot(): HistogramMetricSnapshot[]; ++ ++ static generateLinearBuckets(start: number, width: number, count: number): number[]; ++ static generateExponentialBuckets(start: number, factor: number, count: number): number[]; ++ } ++ ++ namespace MetricTypes { ++ class Base extends BaseMetric {} ++ class Counter extends CounterMetric {} ++ class Gauge extends GaugeMetric {} ++ class Histogram extends HistogramMetric {} ++ class Info extends InfoMetric {} ++ } ++ ++ interface BaseMetricOptions { ++ type: string; ++ name: string; ++ description?: string; ++ labelNames?: string[]; ++ unit?: string; ++ aggregator?: string; ++ [key: string]: unknown; ++ } ++ ++ interface MetricListOptions { ++ type: string | string[]; ++ includes: string | string[]; ++ excludes: string | string[]; ++ } ++ ++ class MetricRegistry { ++ broker: ServiceBroker; ++ logger: LoggerInstance; ++ dirty: boolean; ++ store: Map; ++ reporter: MetricBaseReporter[]; ++ ++ constructor(broker: ServiceBroker, opts?: MetricRegistryOptions); ++ init(broker: ServiceBroker): void; ++ stop(): void; ++ isEnabled(): boolean; ++ register(opts: BaseMetricOptions): BaseMetric | null; ++ ++ hasMetric(name: string): boolean; ++ getMetric(name: string): BaseMetric; ++ ++ increment(name: string, labels?: GenericObject, value?: number, timestamp?: number): void; ++ decrement(name: string, labels?: GenericObject, value?: number, timestamp?: number): void; ++ set(name: string, value: any | null, labels?: GenericObject, timestamp?: number): void; ++ observe(name: string, value: number, labels?: GenericObject, timestamp?: number): void; ++ ++ reset(name: string, labels?: GenericObject, timestamp?: number): void; ++ resetAll(name: string, timestamp?: number): void; ++ ++ timer(name: string, labels?: GenericObject, timestamp?: number): () => number; ++ ++ changed(metric: BaseMetric, value: any | null, labels?: GenericObject, timestamp?: number): void; ++ ++ list(opts?: MetricListOptions): BaseMetricPOJO[]; ++ } ++ ++ interface MetricReporterOptions { ++ includes?: string | string[]; ++ excludes?: string | string[]; ++ ++ metricNamePrefix?: string; ++ metricNameSuffix?: string; ++ ++ metricNameFormatter?: (name: string) => string; ++ labelNameFormatter?: (name: string) => string; ++ ++ [key: string]: any; ++ } ++ ++ class MetricBaseReporter { ++ opts: MetricReporterOptions; ++ ++ constructor(opts: MetricReporterOptions); ++ init(registry: MetricRegistry): void; ++ ++ matchMetricName(name: string): boolean; ++ formatMetricName(name: string): string; ++ formatLabelName(name: string): string; ++ metricChanged(metric: BaseMetric, value: any, labels?: GenericObject, timestamp?: number): void; ++ } ++ ++ namespace MetricReporters { ++ class Base extends MetricBaseReporter {} ++ class Console extends MetricBaseReporter {} ++ class CSV extends MetricBaseReporter {} ++ class Event extends MetricBaseReporter {} ++ class Datadog extends MetricBaseReporter {} ++ class Prometheus extends MetricBaseReporter {} ++ class StatsD extends MetricBaseReporter {} ++ } ++ ++ interface BulkheadOptions { ++ enabled?: boolean; ++ concurrency?: number; ++ maxQueueSize?: number; ++ } ++ ++ type ActionCacheEnabledFuncType< ++ P extends Record = Record, ++ R extends object = {}, ++ L = Moleculer.GenericObject ++ > = (ctx: Context) => boolean; ++ ++ interface ActionCacheOptions

, M = GenericObject> { ++ enabled?: boolean | ActionCacheEnabledFuncType; ++ ttl?: number; ++ keys?: string[]; ++ keygen?: CacherKeygenFunc; ++ lock?: { ++ enabled?: boolean; ++ staleTime?: number; ++ }; ++ } ++ ++ type ActionVisibility = 'published' | 'public' | 'protected' | 'private'; ++ ++ type ActionHookBefore = (ctx: Context) => Promise | void; ++ type ActionHookAfter = (ctx: Context, res: any) => Promise | any; ++ type ActionHookError = (ctx: Context, err: Error) => Promise | void; ++ ++ interface ActionHooks { ++ before?: string | ActionHookBefore | (string | ActionHookBefore)[]; ++ after?: string | ActionHookAfter | (string | ActionHookAfter)[]; ++ error?: string | ActionHookError | (string | ActionHookError)[]; ++ } ++ ++ interface RestSchema { ++ path?: string; ++ method?: 'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH'; ++ fullPath?: string; ++ basePath?: string; ++ } ++ ++ class BrokerNode { ++ id: string; ++ instanceID: string | null; ++ available: boolean; ++ local: boolean; ++ lastHeartbeatTime: number; ++ config: GenericObject; ++ client: GenericObject; ++ metadata: GenericObject; ++ ++ ipList: string[]; ++ port: number | null; ++ hostname: string | null; ++ udpAddress: string | null; ++ ++ rawInfo: GenericObject; ++ services: [GenericObject]; ++ ++ cpu: number | null; ++ cpuSeq: number | null; ++ ++ seq: number; ++ offlineSince: number | null; ++ ++ heartbeat(payload: GenericObject): void; ++ disconnected(): void; ++ } ++ ++ type ServiceEvents = { ++ [key: string]: ServiceEventHandler | ServiceEventLegacyHandler | ServiceEvent; ++ } & ThisType>; ++ ++ type ServiceMethods = { [key: string]: (...args: any[]) => any } & ThisType; ++ ++ type CallMiddlewareHandler = (actionName: ActionName, params: any, opts: CallingOptions) => Promise; ++ type Middleware = { ++ [name: string]: ++ | ((handler: ActionHandler, action: ActionSchema) => any) ++ | ((handler: ActionHandler, event: ServiceEvent) => any) ++ | ((handler: ActionHandler) => any) ++ | ((service: Service) => any) ++ | ((service: Service, serviceSchema: ServiceSchema) => any) ++ | ((broker: ServiceBroker) => any) ++ | ((handler: CallMiddlewareHandler) => CallMiddlewareHandler); ++ }; ++ ++ type MiddlewareInit = (broker: ServiceBroker) => Middleware; ++ interface MiddlewareCallHandlerOptions { ++ reverse?: boolean; ++ } ++ ++ interface MiddlewareHandler { ++ list: Middleware[]; ++ ++ add(mw: string | Middleware | MiddlewareInit): void; ++ wrapHandler(method: string, handler: ActionHandler, def: ActionSchema): typeof handler; ++ callHandlers(method: string, args: any[], opts: MiddlewareCallHandlerOptions): Promise; ++ callSyncHandlers(method: string, args: any[], opts: MiddlewareCallHandlerOptions): void; ++ count(): number; ++ wrapMethod( ++ method: string, ++ handler: ActionHandler, ++ bindTo?: any, ++ opts?: MiddlewareCallHandlerOptions ++ ): typeof handler; ++ } ++ ++ interface ServiceHooksBefore { ++ [key: string]: string | ActionHookBefore | (string | ActionHookBefore)[]; ++ } ++ ++ interface ServiceHooksAfter { ++ [key: string]: string | ActionHookAfter | (string | ActionHookAfter)[]; ++ } ++ ++ interface ServiceHooksError { ++ [key: string]: string | ActionHookError | (string | ActionHookError)[]; ++ } ++ ++ interface ServiceHooks { ++ before?: ServiceHooksBefore; ++ after?: ServiceHooksAfter; ++ error?: ServiceHooksError; ++ } ++ ++ interface ServiceDependency { ++ name: string; ++ version?: string | number; ++ } ++ ++ type ServiceSyncLifecycleHandler> = (this: T) => void; ++ type ServiceAsyncLifecycleHandler> = (this: T) => void | Promise; ++ ++ interface WaitForServicesResult { ++ services: string[]; ++ statuses: { name: string; available: boolean }[]; ++ } ++ ++ class Service implements ServiceSchema { ++ constructor(broker: ServiceBroker, schema?: ServiceSchema); ++ ++ protected parseServiceSchema(schema: ServiceSchema): void; ++ ++ name: string; ++ fullName: string; ++ version?: string | number; ++ settings: S; ++ metadata: GenericObject; ++ dependencies: string | ServiceDependency | (string | ServiceDependency)[]; ++ schema: ServiceSchema; ++ originalSchema: ServiceSchema; ++ broker: ServiceBroker; ++ logger: LoggerInstance; ++ actions: ServiceActions; ++ Promise: PromiseConstructorLike; ++ ++ _init(): void; ++ _start(): Promise; ++ _stop(): Promise; ++ ++ /** ++ * Call a local event handler. Useful for unit tests. ++ * ++ * @param eventName The event name ++ * @param params The event parameters ++ * @param opts The event options ++ */ ++ emitLocalEventHandler(eventName: string, params?: any, opts?: any): any; ++ ++ /** ++ * Wait for the specified services to become available/registered with this broker. ++ * ++ * @param serviceNames The service, or services, we are waiting for. ++ * @param timeout The total time this call may take. If this time has passed and the service(s) ++ * are not available an error will be thrown. (In milliseconds) ++ * @param interval The time we will wait before once again checking if the service(s) are available (In milliseconds) ++ */ ++ waitForServices( ++ serviceNames: (keyof AllServices | (string & {})) | (keyof AllServices | (string & {}))[] | ServiceDependency[], ++ timeout?: number, ++ interval?: number ++ ): Promise; ++ ++ [key: string]: any; ++ ++ /** ++ * Apply `mixins` list in schema. Merge the schema with mixins schemas. Returns with the mixed schema ++ * ++ * @param schema Schema containing the mixins to merge ++ */ ++ applyMixins(schema: ServiceSchema): ServiceSchema; ++ ++ /** ++ * Merge two Service schema ++ * ++ * @param mixinSchema Mixin schema ++ * @param svcSchema Service schema ++ */ ++ mergeSchemas(mixinSchema: Partial, svcSchema: Partial): Partial; ++ ++ /** ++ * Merge `settings` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaSettings(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `metadata` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaMetadata(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `mixins` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaUniqArray(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `dependencies` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaDependencies(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `hooks` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaHooks(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `actions` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaActions(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `methods` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaMethods(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `events` property in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaEvents(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge `started`, `stopped`, `created` event handler properties in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaLifecycleHandlers(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Merge unknown properties in schema ++ * ++ * @param src Source schema property ++ * @param target Target schema property ++ */ ++ mergeSchemaUnknown(src: GenericObject, target: GenericObject): GenericObject; ++ ++ /** ++ * Return a versioned full service name. ++ * ++ * @param name The name ++ * @param version The version ++ */ ++ static getVersionedFullName(name: string, version?: string | number): string; ++ } ++ ++ type CheckRetryable = (err: Errors.MoleculerError | Error) => boolean; ++ ++ interface BrokerCircuitBreakerOptions { ++ enabled?: boolean; ++ threshold?: number; ++ windowTime?: number; ++ minRequestCount?: number; ++ halfOpenTime?: number; ++ check?: CheckRetryable; ++ } ++ ++ interface RetryPolicyOptions { ++ enabled?: boolean; ++ retries?: number; ++ delay?: number; ++ maxDelay?: number; ++ factor?: number; ++ check?: CheckRetryable; ++ } ++ ++ interface BrokerRegistryOptions { ++ strategy?: Function | string; ++ strategyOptions?: GenericObject; ++ preferLocal?: boolean; ++ discoverer?: RegistryDiscovererOptions | BaseDiscoverer | string; ++ stopDelay?: number; ++ } ++ ++ interface RegistryDiscovererOptions { ++ type: string; ++ options: DiscovererOptions; ++ } ++ ++ interface DiscovererOptions extends GenericObject { ++ heartbeatInterval?: number; ++ heartbeatTimeout?: number; ++ disableHeartbeatChecks?: boolean; ++ disableOfflineNodeRemoving?: boolean; ++ cleanOfflineNodesTimeout?: number; ++ } ++ ++ interface BrokerTransitOptions { ++ maxQueueSize?: number; ++ disableReconnect?: boolean; ++ disableVersionCheck?: boolean; ++ maxChunkSize?: number; ++ } ++ ++ interface BrokerTrackingOptions { ++ enabled?: boolean; ++ shutdownTimeout?: number; ++ } ++ ++ interface LogLevelConfig { ++ [module: string]: boolean | LogLevels; ++ } ++ ++ interface LoggerConfig { ++ type: string; ++ options?: GenericObject; ++ } ++ ++ interface BrokerErrorHandlerInfoAction { ++ ctx: Context; ++ service: Context['service']; ++ action: Context['action']; ++ } ++ interface BrokerErrorHandlerInfoBroker { ++ actionName: ActionName; ++ params: unknown; ++ opts: CallingOptions; ++ nodeId?: string; ++ } ++ type BrokerErrorHandlerInfo = BrokerErrorHandlerInfoAction | BrokerErrorHandlerInfoBroker; ++ type BrokerErrorHandler = (this: ServiceBroker, err: Error, info: BrokerErrorHandlerInfo) => void; ++ ++ type BrokerSyncLifecycleHandler = (broker: ServiceBroker) => void; ++ type BrokerAsyncLifecycleHandler = (broker: ServiceBroker) => void | Promise; ++ ++ interface BrokerOptions { ++ namespace?: string | null; ++ nodeID?: string | null; ++ ++ logger?: Loggers.Base | LoggerConfig | LoggerConfig[] | boolean | null; ++ logLevel?: LogLevels | LogLevelConfig | null; ++ ++ transporter?: Transporter | string | GenericObject | null; ++ requestTimeout?: number; ++ retryPolicy?: RetryPolicyOptions; ++ ++ contextParamsCloning?: boolean; ++ maxCallLevel?: number; ++ heartbeatInterval?: number; ++ heartbeatTimeout?: number; ++ ++ tracking?: BrokerTrackingOptions; ++ ++ disableBalancer?: boolean; ++ ++ registry?: BrokerRegistryOptions; ++ ++ circuitBreaker?: BrokerCircuitBreakerOptions; ++ ++ bulkhead?: BulkheadOptions; ++ ++ transit?: BrokerTransitOptions; ++ ++ uidGenerator?: () => string; ++ ++ errorHandler?: BrokerErrorHandler; ++ ++ cacher?: boolean | Cacher | string | GenericObject | null; ++ serializer?: Serializer | string | GenericObject | null; ++ validator?: boolean | BaseValidator | ValidatorNames | ValidatorOptions | null; ++ errorRegenerator?: Errors.Regenerator | null; ++ ++ metrics?: boolean | MetricRegistryOptions; ++ tracing?: boolean | TracerOptions; ++ ++ internalServices?: ++ | boolean ++ | { ++ [key: string]: Partial; ++ }; ++ internalMiddlewares?: boolean; ++ ++ dependencyInterval?: number; ++ dependencyTimeout?: number; ++ ++ hotReload?: boolean | HotReloadOptions; ++ ++ middlewares?: (Middleware | string)[]; ++ ++ replCommands?: GenericObject[] | null; ++ replDelimiter?: string; ++ ++ metadata?: GenericObject; ++ ++ ServiceFactory?: typeof Service; ++ ContextFactory?: typeof Context; ++ Promise?: PromiseConstructorLike; ++ ++ created?: BrokerSyncLifecycleHandler; ++ started?: BrokerAsyncLifecycleHandler; ++ stopped?: BrokerAsyncLifecycleHandler; ++ ++ /** ++ * If true, process.on("beforeExit/exit/SIGINT/SIGTERM", ...) handler won't be registered! ++ * You have to register this manually and stop broker in this case! ++ */ ++ skipProcessEventRegistration?: boolean; ++ ++ maxSafeObjectSize?: number; ++ } ++ ++ interface NodeHealthStatus { ++ cpu: { ++ load1: number; ++ load5: number; ++ load15: number; ++ cores: number; ++ utilization: number; ++ }; ++ mem: { ++ free: number; ++ total: number; ++ percent: number; ++ }; ++ os: { ++ uptime: number; ++ type: string; ++ release: string; ++ hostname: string; ++ arch: string; ++ platform: string; ++ user: string; ++ }; ++ process: { ++ pid: NodeJS.Process['pid']; ++ memory: NodeJS.MemoryUsage; ++ uptime: number; ++ argv: string[]; ++ }; ++ client: { ++ type: string; ++ version: string; ++ langVersion: NodeJS.Process['version']; ++ }; ++ net: { ++ ip: string[]; ++ }; ++ time: { ++ now: number; ++ iso: string; ++ utc: string; ++ }; ++ } ++ ++ type FallbackHandler = (ctx: Context, err: Errors.MoleculerError) => Promise; ++ type FallbackResponse = string | number | GenericObject; ++ type FallbackResponseHandler = (ctx: Context, err: Errors.MoleculerError) => Promise; ++ ++ interface ContextParentSpan { ++ id: string; ++ traceID: string; ++ sampled: boolean; ++ } ++ ++ interface CallingOptions { ++ timeout?: number; ++ retries?: number; ++ fallbackResponse?: FallbackResponse | FallbackResponse[] | FallbackResponseHandler; ++ nodeID?: string; ++ meta?: GenericObject; ++ parentSpan?: ContextParentSpan; ++ parentCtx?: Context; ++ requestID?: string; ++ tracking?: boolean; ++ paramsCloning?: boolean; ++ caller?: string; ++ } ++ ++ interface MCallCallingOptions extends CallingOptions { ++ settled?: boolean; ++ } ++ ++ interface CallDefinition

{ ++ action: ActionName; ++ params: P; ++ } ++ ++ interface MCallDefinition

extends CallDefinition

{ ++ options?: CallingOptions; ++ } ++ ++ interface PongResponse { ++ nodeID: string; ++ elapsedTime: number; ++ timeDiff: number; ++ } ++ ++ interface PongResponses { ++ [name: string]: PongResponse; ++ } ++ ++ interface ServiceSearchObj { ++ name: string; ++ version?: string | number; ++ } ++ ++ namespace Loggers { ++ type LogHandler = (level: LogLevels, args: unknown[]) => void; ++ ++ class Base { ++ constructor(opts?: GenericObject); ++ init(loggerFactory: LoggerFactory): void; ++ stop(): void; ++ getLogLevel(mod: string): LogLevels | null; ++ getLogHandler(bindings?: LoggerBindings): LogHandler | null; ++ } ++ } ++ ++ class Packet { ++ constructor(type: string, target: string, payload?: any); ++ } ++ ++ namespace Packets { ++ type PROTOCOL_VERSION = '4'; ++ type PACKET_UNKNOWN = '???'; ++ type PACKET_EVENT = 'EVENT'; ++ type PACKET_REQUEST = 'REQ'; ++ type PACKET_RESPONSE = 'RES'; ++ type PACKET_DISCOVER = 'DISCOVER'; ++ type PACKET_INFO = 'INFO'; ++ type PACKET_DISCONNECT = 'DISCONNECT'; ++ type PACKET_HEARTBEAT = 'HEARTBEAT'; ++ type PACKET_PING = 'PING'; ++ type PACKET_PONG = 'PONG'; ++ ++ type PACKET_GOSSIP_REQ = 'GOSSIP_REQ'; ++ type PACKET_GOSSIP_RES = 'GOSSIP_RES'; ++ type PACKET_GOSSIP_HELLO = 'GOSSIP_HELLO'; ++ ++ const PROTOCOL_VERSION: PROTOCOL_VERSION; ++ const PACKET_UNKNOWN: PACKET_UNKNOWN; ++ const PACKET_EVENT: PACKET_EVENT; ++ const PACKET_REQUEST: PACKET_REQUEST; ++ const PACKET_RESPONSE: PACKET_RESPONSE; ++ const PACKET_DISCOVER: PACKET_DISCOVER; ++ const PACKET_INFO: PACKET_INFO; ++ const PACKET_DISCONNECT: PACKET_DISCONNECT; ++ const PACKET_HEARTBEAT: PACKET_HEARTBEAT; ++ const PACKET_PING: PACKET_PING; ++ const PACKET_PONG: PACKET_PONG; ++ ++ const PACKET_GOSSIP_REQ: PACKET_GOSSIP_REQ; ++ const PACKET_GOSSIP_RES: PACKET_GOSSIP_RES; ++ const PACKET_GOSSIP_HELLO: PACKET_GOSSIP_HELLO; ++ ++ interface PacketPayload { ++ ver: PROTOCOL_VERSION; ++ sender: string | null; ++ } ++ ++ interface Packet { ++ type: ++ | PACKET_UNKNOWN ++ | PACKET_EVENT ++ | PACKET_DISCONNECT ++ | PACKET_DISCOVER ++ | PACKET_INFO ++ | PACKET_HEARTBEAT ++ | PACKET_REQUEST ++ | PACKET_PING ++ | PACKET_PONG ++ | PACKET_RESPONSE ++ | PACKET_GOSSIP_REQ ++ | PACKET_GOSSIP_RES ++ | PACKET_GOSSIP_HELLO; ++ target?: string; ++ payload: PacketPayload; ++ } ++ } ++ ++ class Transporter { ++ constructor(opts?: GenericObject); ++ hasBuiltInBalancer: boolean; ++ ++ init( ++ transit: Transit, ++ messageHandler: (cmd: string, msg: string) => void, ++ afterConnect: (wasReconnect: boolean) => void ++ ): void; ++ connect(): Promise; ++ disconnect(): Promise; ++ onConnected(wasReconnect?: boolean): Promise; ++ ++ makeSubscriptions(topics: GenericObject[]): Promise; ++ subscribe(cmd: string, nodeID?: string): Promise; ++ subscribeBalancedRequest(action: string): Promise; ++ subscribeBalancedEvent(event: string, group: string): Promise; ++ unsubscribeFromBalancedCommands(): Promise; ++ ++ incomingMessage(cmd: string, msg: Buffer): Promise; ++ receive(cmd: string, data: Buffer): Promise; ++ ++ prepublish(packet: Packet): Promise; ++ publish(packet: Packet): Promise; ++ publishBalancedEvent(packet: Packet, group: string): Promise; ++ publishBalancedRequest(packet: Packet): Promise; ++ send(topic: string, data: Buffer, meta: GenericObject): Promise; ++ ++ getTopicName(cmd: string, nodeID?: string): string; ++ makeBalancedSubscriptions(): Promise; ++ ++ serialize(packet: Packet): Buffer; ++ deserialize(type: string, data: Buffer): Packet; ++ } ++ ++ type CacherKeygenFunc

, M = unknown> = ( ++ actionName: ActionName, ++ params: P, ++ meta: M, ++ keys?: string[] ++ ) => string; ++ interface CacherOptions { ++ ttl?: number; ++ keygen?: CacherKeygenFunc; ++ maxParamsLength?: number; ++ [key: string]: any; ++ } ++ ++ interface MemoryCacherOptions extends CacherOptions { ++ clone?: boolean; ++ } ++ ++ interface MemoryLRUCacherOptions extends MemoryCacherOptions { ++ max?: number; ++ } ++ ++ interface RedisCacherOptions extends CacherOptions { ++ prefix?: string; ++ redis?: GenericObject; ++ redlock?: boolean | GenericObject; ++ monitor?: boolean; ++ pingInterval?: number; ++ } ++ ++ namespace Cachers { ++ class Base { ++ constructor(opts?: CacherOptions); ++ opts: CacherOptions; ++ ++ init(broker: ServiceBroker): void; ++ close(): Promise; ++ get(key: string): Promise; ++ getWithTTL(key: string): Promise; ++ set(key: string, data: any, ttl?: number): Promise; ++ del(key: string | string[]): Promise; ++ clean(match?: string | string[]): Promise; ++ getCacheKey(actionName: ActionName, params: object, meta: object, keys: string[] | null): string; ++ defaultKeygen( ++ actionName: ActionName, ++ params: object | null, ++ meta: object | null, ++ keys: string[] | null ++ ): string; ++ tryLock(key: string | string[], ttl?: number): Promise<() => Promise>; ++ lock(key: string | string[], ttl?: number): Promise<() => Promise>; ++ } ++ ++ class Memory extends Base { ++ constructor(opts?: MemoryCacherOptions); ++ opts: MemoryCacherOptions; ++ } ++ ++ class MemoryLRU extends Base { ++ constructor(opts?: MemoryLRUCacherOptions); ++ opts: MemoryLRUCacherOptions; ++ } ++ ++ class Redis extends Base { ++ constructor(opts?: string | RedisCacherOptions); ++ opts: RedisCacherOptions; ++ ++ client: C; ++ prefix: string | null; ++ } ++ } ++ ++ type Cacher = T; ++ ++ class Serializer { ++ constructor(opts?: any); ++ init(broker: ServiceBroker): void; ++ serialize(obj: GenericObject, type?: string): Buffer; ++ deserialize(buf: Buffer, type?: string): GenericObject; ++ } ++ ++ const Serializers: { ++ Base: typeof Serializer; ++ JSON: typeof Serializer; ++ Avro: typeof Serializer; ++ CBOR: typeof Serializer; ++ MsgPack: typeof Serializer; ++ ProtoBuf: typeof Serializer; ++ Thrift: typeof Serializer; ++ Notepack: typeof Serializer; ++ resolve: (type: string | GenericObject | Serializer) => Serializer; ++ }; ++ ++ class BaseValidator { ++ constructor(); ++ init(broker: ServiceBroker): void; ++ compile(schema: GenericObject): Function; ++ validate(params: GenericObject, schema: GenericObject): boolean; ++ middleware(): (handler: ActionHandler, action: ActionSchema) => any; ++ convertSchemaToMoleculer(schema: any): GenericObject; ++ } ++ ++ class Validator extends BaseValidator {} // deprecated ++ ++ abstract class BaseStrategy { ++ constructor(registry: ServiceRegistry, broker: ServiceBroker, opts?: object); ++ select(list: any[], ctx?: Context): Endpoint; ++ } ++ ++ type ValidatorNames = 'Fastest'; ++ class RoundRobinStrategy extends BaseStrategy {} ++ class RandomStrategy extends BaseStrategy {} ++ class CpuUsageStrategy extends BaseStrategy {} ++ class LatencyStrategy extends BaseStrategy {} ++ class ShardStrategy extends BaseStrategy {} ++ ++ namespace Strategies { ++ class Base extends BaseStrategy {} ++ class RoundRobin extends RoundRobinStrategy {} ++ class Random extends RandomStrategy {} ++ class CpuUsage extends CpuUsageStrategy {} ++ class Latency extends LatencyStrategy {} ++ class Shard extends ShardStrategy {} ++ } ++ ++ abstract class BaseDiscoverer { ++ constructor(opts?: DiscovererOptions); ++ ++ transit?: Transit; ++ localNode?: BrokerNode; ++ ++ heartbeatTimer: NodeJS.Timeout; ++ checkNodesTimer: NodeJS.Timeout; ++ offlineTimer: NodeJS.Timeout; ++ ++ init(registry: ServiceRegistry): void; ++ ++ stop(): Promise; ++ startHeartbeatTimers(): void; ++ stopHeartbeatTimers(): void; ++ disableHeartbeat(): void; ++ beat(): Promise; ++ checkRemoteNodes(): void; ++ checkOfflineNodes(): void; ++ heartbeatReceived(nodeID: string, payload: GenericObject): void; ++ processRemoteNodeInfo(nodeID: string, payload: GenericObject): BrokerNode; ++ sendHeartbeat(): Promise; ++ discoverNode(nodeID: string): Promise; ++ discoverAllNodes(): Promise; ++ localNodeReady(): Promise; ++ sendLocalNodeInfo(nodeID: string): Promise; ++ localNodeDisconnected(): Promise; ++ remoteNodeDisconnected(nodeID: string, isUnexpected: boolean): void; ++ } ++ ++ namespace Discoverers { ++ class Base extends BaseDiscoverer {} ++ class Local extends BaseDiscoverer {} ++ class Redis extends BaseDiscoverer {} ++ class Etcd3 extends BaseDiscoverer {} ++ } ++ ++ interface ValidatorOptions { ++ type: string; ++ options?: GenericObject; ++ } ++ ++ namespace Validators { ++ class Base extends BaseValidator {} ++ class Fastest extends BaseValidator {} ++ } ++ ++ namespace Transporters { ++ class Base extends Transporter {} ++ class Fake extends Base {} ++ class NATS extends Base {} ++ class MQTT extends Base {} ++ class Redis extends Base {} ++ class AMQP extends Base {} ++ class Kafka extends Base {} ++ class STAN extends Base {} ++ class TCP extends Base {} ++ } ++ ++ namespace Errors { ++ class MoleculerError extends Error { ++ code: number; ++ type: string; ++ data: any; ++ retryable: boolean; ++ ++ constructor(message: string, code: number, type: string, data: any); ++ constructor(message: string, code: number, type: string); ++ constructor(message: string, code: number); ++ constructor(message: string); ++ } ++ class MoleculerRetryableError extends MoleculerError {} ++ class MoleculerServerError extends MoleculerRetryableError {} ++ class MoleculerClientError extends MoleculerError {} ++ ++ class ServiceNotFoundError extends MoleculerRetryableError { ++ constructor(data: any); ++ } ++ class ServiceNotAvailableError extends MoleculerRetryableError { ++ constructor(data: any); ++ } ++ ++ class RequestTimeoutError extends MoleculerRetryableError { ++ constructor(data: any); ++ } ++ class RequestSkippedError extends MoleculerError { ++ constructor(data: any); ++ } ++ class RequestRejectedError extends MoleculerRetryableError { ++ constructor(data: any); ++ } ++ ++ class QueueIsFullError extends MoleculerRetryableError { ++ constructor(data: any); ++ } ++ class ValidationError extends MoleculerClientError { ++ constructor(message: string, type: string, data: GenericObject); ++ constructor(message: string, type: string); ++ constructor(message: string); ++ } ++ class MaxCallLevelError extends MoleculerError { ++ constructor(data: any); ++ } ++ ++ class ServiceSchemaError extends MoleculerError { ++ constructor(message: string, data: any); ++ } ++ ++ class BrokerOptionsError extends MoleculerError { ++ constructor(message: string, data: any); ++ } ++ ++ class GracefulStopTimeoutError extends MoleculerError { ++ constructor(data: any); ++ } ++ ++ class ProtocolVersionMismatchError extends MoleculerError { ++ constructor(data: any); ++ } ++ ++ class InvalidPacketDataError extends MoleculerError { ++ constructor(data: any); ++ } ++ ++ interface PlainMoleculerError extends MoleculerError { ++ nodeID?: string; ++ ++ [key: string]: any; ++ } ++ ++ class Regenerator { ++ init(broker: ServiceBroker): void; ++ restore(plainError: PlainMoleculerError, payload: GenericObject): Error; ++ extractPlainError(err: Error): PlainMoleculerError; ++ restoreCustomError(plainError: PlainMoleculerError, payload: GenericObject): Error | undefined; ++ } ++ } ++ ++ interface TransitRequest { ++ action: string; ++ nodeID: string; ++ ctx: Context; ++ resolve: (value: any) => void; ++ reject: (reason: any) => void; ++ stream: boolean; ++ } ++ ++ interface Transit { ++ pendingRequests: Map; ++ nodeID: string; ++ logger: LoggerInstance; ++ connected: boolean; ++ disconnecting: boolean; ++ isReady: boolean; ++ tx: Transporter; ++ ++ afterConnect(wasReconnect: boolean): Promise; ++ connect(): Promise; ++ disconnect(): Promise; ++ ready(): Promise; ++ sendDisconnectPacket(): Promise; ++ makeSubscriptions(): Promise; ++ messageHandler(cmd: string, msg: GenericObject): boolean | Promise | undefined; ++ request(ctx: Context): Promise; ++ sendEvent(ctx: Context): Promise; ++ removePendingRequest(id: string): void; ++ removePendingRequestByNodeID(nodeID: string): void; ++ sendResponse(nodeID: string, id: string, data: GenericObject, err: Error): Promise; ++ sendResponse(nodeID: string, id: string, data: GenericObject): Promise; ++ discoverNodes(): Promise; ++ discoverNode(nodeID: string): Promise; ++ sendNodeInfo(info: BrokerNode, nodeID?: string): Promise; ++ sendPing(nodeID: string, id?: string): Promise; ++ sendPong(payload: GenericObject): Promise; ++ processPong(payload: GenericObject): void; ++ sendHeartbeat(localNode: BrokerNode): Promise; ++ subscribe(topic: string, nodeID: string): Promise; ++ publish(packet: Packet): Promise; ++ } ++ ++ interface ServiceListCatalogOptions { ++ onlyLocal?: boolean; ++ onlyAvailable?: boolean; ++ skipInternal?: boolean; ++ withActions?: boolean; ++ withEvents?: boolean; ++ grouping?: boolean; ++ } ++ ++ class ServiceRegistry { ++ broker: ServiceBroker; ++ metrics: MetricRegistry; ++ logger: LoggerInstance; ++ ++ opts: BrokerRegistryOptions; ++ ++ StrategyFactory: BaseStrategy; ++ ++ nodes: any; ++ services: any; ++ actions: ActionCatalog; ++ events: any; ++ ++ getServiceList(opts?: ServiceListCatalogOptions): ServiceSchema[]; ++ getActionList(opts?: ActionCatalogListOptions): ReturnType; ++ } ++ ++ abstract class Endpoint { ++ broker: ServiceBroker; ++ ++ id: string; ++ node: GenericObject; ++ ++ local: boolean; ++ state: boolean; ++ } ++ ++ class ActionEndpoint extends Endpoint { ++ service: Service; ++ action: ActionSchema; ++ } ++ ++ class EventEndpoint extends Endpoint { ++ service: Service; ++ event: EventSchema; ++ } ++ ++ class EndpointList { ++ endpoints: (ActionEndpoint | EventEndpoint)[]; ++ } ++ ++ interface ActionCatalogListOptions { ++ onlyLocal?: boolean; ++ onlyAvailable?: boolean; ++ skipInternal?: boolean; ++ withEndpoints?: boolean; ++ } ++ ++ interface ActionCatalogListResult { ++ name: string; ++ count: number; ++ hasLocal: boolean; ++ available: boolean; ++ action?: Omit; ++ endpoints?: Pick[]; ++ } ++ ++ class ActionCatalog { ++ add(node: BrokerNode, service: ServiceItem, action: ActionSchema): EndpointList; ++ ++ get(actionName: ActionName): EndpointList | undefined; ++ ++ isAvailable(actionName: ActionName): boolean; ++ ++ removeByService(service: ServiceItem): void; ++ ++ remove(actionName: ActionName, nodeID: string): void; ++ ++ list(opts: ActionCatalogListOptions): ActionCatalogListResult[]; ++ } ++ ++ class ServiceItem {} ++ ++ class AsyncStorage { ++ broker: ServiceBroker; ++ store: Map; ++ ++ constructor(broker: ServiceBroker); ++ ++ enable(): void; ++ disable(): void; ++ stop(): void; ++ getAsyncId(): number; ++ setSessionData(data: any): void; ++ getSessionData(): any | null; ++ } ++ ++ const CIRCUIT_CLOSE: string; ++ const CIRCUIT_HALF_OPEN: string; ++ const CIRCUIT_OPEN: string; ++ ++ const MOLECULER_VERSION: string; ++ const PROTOCOL_VERSION: string; ++ const INTERNAL_MIDDLEWARES: string[]; ++ ++ const METRIC: { ++ TYPE_COUNTER: 'counter'; ++ TYPE_GAUGE: 'gauge'; ++ TYPE_HISTOGRAM: 'histogram'; ++ TYPE_INFO: 'info'; ++ }; ++ ++ namespace Utils { ++ function isFunction(func: unknown): func is Function; ++ function isString(str: unknown): str is string; ++ function isObject(obj: unknown): obj is object; ++ function isPlainObject(obj: unknown): obj is object; ++ function isDate(date: unknown): date is Date; ++ function flatten(arr: readonly T[] | readonly T[][]): T[]; ++ function humanize(millis?: number | null): string; ++ function generateToken(): string; ++ function removeFromArray(arr: T[], item: T): T[]; ++ function getNodeID(): string; ++ function getIpList(): string[]; ++ function isPromise(promise: unknown): promise is Promise; ++ function polyfillPromise(P: typeof Promise): void; ++ function clearRequireCache(filename: string): void; ++ function match(text: string, pattern: string): boolean; ++ function deprecate(prop: unknown, msg?: string): void; ++ function safetyObject(obj: unknown, options?: { maxSafeObjectSize?: number }): any; ++ function dotSet(obj: T, path: string, value: unknown): T; ++ function makeDirs(path: string): void; ++ function parseByteString(value: string): number; ++ } ++ ++ /** ++ * Parsed CLI flags ++ */ ++ interface RunnerFlags { ++ /** ++ * Path to load configuration from a file ++ */ ++ config?: string; ++ ++ /** ++ * Start REPL mode ++ */ ++ repl?: boolean; ++ ++ /** ++ * Enable hot reload mode ++ */ ++ hot?: boolean; ++ ++ /** ++ * Silent mode. No logger ++ */ ++ silent?: boolean; ++ ++ /** ++ * Load .env file from current directory ++ */ ++ env?: boolean; ++ ++ /** ++ * Load .env files by glob pattern ++ */ ++ envfile?: string; ++ ++ /** ++ * Number of node instances to start in cluster mode ++ */ ++ instances?: number; ++ ++ /** ++ * File mask for loading services ++ */ ++ mask?: string; ++ } ++ ++ /** ++ * Moleculer Runner ++ */ ++ class Runner { ++ worker: Worker | null; ++ broker: ServiceBroker | null; ++ ++ /** ++ * Watch folders for hot reload ++ */ ++ watchFolders: string[]; ++ ++ /** ++ * Parsed CLI flags ++ */ ++ flags: RunnerFlags | null; ++ ++ /** ++ * Loaded configuration file ++ */ ++ configFile: Partial; ++ ++ /** ++ * Merged configuration ++ */ ++ config: Partial; ++ ++ /** ++ * Process command line arguments ++ */ ++ processFlags(args: string[]): void; ++ ++ /** ++ * Load environment variables from '.env' file ++ */ ++ loadEnvFile(): void; ++ ++ /** ++ * Load configuration file ++ * ++ * Try to load a configuration file in order to: ++ * ++ * - load file defined in MOLECULER_CONFIG env var ++ * - try to load file which is defined in CLI option with --config ++ * - try to load the `moleculer.config.js` file if exist in the cwd ++ * - try to load the `moleculer.config.json` file if exist in the cwd ++ */ ++ loadConfigFile(): Promise; ++ ++ /** ++ * Normalize a value from env variable ++ */ ++ normalizeEnvValue(value: string): string | number | boolean; ++ ++ /** ++ * Overwrite config values from environment variables ++ */ ++ overwriteFromEnv(obj: any, prefix?: string): any; ++ ++ /** ++ * Merge broker options from config file & env variables ++ */ ++ mergeOptions(): void; ++ ++ /** ++ * Check if a path is a directory ++ */ ++ isDirectory(path: string): boolean; ++ ++ /** ++ * Check if a path is a service file ++ */ ++ isServiceFile(path: string): boolean; ++ ++ /** ++ * Load services from files or directories ++ */ ++ loadServices(): void; ++ ++ /** ++ * Start cluster workers ++ */ ++ startWorkers(instances: number): void; ++ ++ /** ++ * Load service from NPM module ++ */ ++ loadNpmModule(name: string): Service; ++ ++ /** ++ * Start Moleculer broker ++ */ ++ startBroker(): Promise; ++ ++ /** ++ * Restart broker ++ */ ++ restartBroker(): Promise; ++ ++ /** ++ * Start runner ++ */ ++ start(args: string[]): Promise; ++ } ++ ++ /* @private */ ++ interface MoleculerMiddlewares { ++ Transmit: { ++ /** ++ * Encrypts the Transporter payload ++ * @param key The key to use for encryption ++ * @param [algorithm] The algorithm to use for encryption. Default is aes-256-cbc ++ * @param [iv] The initialization vector to use for encryption. Optional ++ * @example // moleculer.config.js ++ * const crypto = require("crypto"); ++ * const { Middlewares } = require("moleculer"); ++ * const initVector = crypto.randomBytes(16); ++ * ++ * module.exports = { ++ * middlewares: [ ++ * Middlewares.Transmit.Encryption("secret-password", "aes-256-cbc", initVector) // "aes-256-cbc" is the default ++ * ] ++ * }; ++ */ ++ Encryption: ( ++ key: CipherKey, ++ algorithm?: CipherCCMTypes | CipherOCBTypes | CipherGCMTypes | string, ++ iv?: BinaryLike | null ++ ) => Middleware; ++ Compression: (opts?: { ++ /** ++ * @default deflate ++ */ ++ method?: 'gzip' | 'deflate' | 'deflateRaw'; ++ /** ++ * Compression middleware reduces the size of the messages that go through the transporter module. ++ * This middleware uses built-in Node zlib lib. ++ * Threshold should be a number of bytes or a string like 100kb, 4mb, etc. Accepted units are: ++ * - kb, for kilobytes ++ * - mb, for megabytes ++ * - gb, for gigabytes ++ * - tb, for terabytes ++ * - pb, for petabytes ++ * @default 1kb ++ * @example // moleculer.config.js ++ * const { Middlewares } = require("moleculer"); ++ * ++ * // Create broker ++ * module.exports = { ++ * middlewares: [ ++ * Middlewares.Transmit.Compression("deflate") // or "deflateRaw" or "gzip" ++ * ] ++ * }; ++ */ ++ threshold?: number | string; ++ }) => Middleware; ++ }; ++ } ++ const Middlewares: MoleculerMiddlewares; ++ } ++} ++ ++export = Moleculer; diff --git a/src/middleware/.yarn/patches/moleculer-patch-59829b52bf.patch b/src/middleware/.yarn/patches/moleculer-patch-59829b52bf.patch new file mode 100644 index 000000000..fe90eef7b --- /dev/null +++ b/src/middleware/.yarn/patches/moleculer-patch-59829b52bf.patch @@ -0,0 +1,12 @@ +diff --git a/index.d.ts b/index.d.ts +index 7d6b805083e25dbdec51ecb6cdc2ee42d4902910..ef11e70f8ffea96219b1dfdb2f6d4262fe07aa89 100644 +--- a/index.d.ts ++++ b/index.d.ts +@@ -1,4 +1,7 @@ + // Replacement template for moleculer namespace (making it global). ++import "./moleculer-inference-types"; ++import "./non-action-based" ++ + declare global { + export namespace Moleculer {} + } diff --git a/src/middleware/.yarnrc b/src/middleware/.yarnrc new file mode 100644 index 000000000..85b738b8d --- /dev/null +++ b/src/middleware/.yarnrc @@ -0,0 +1,5 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +yarn-path ".yarn/releases/yarn-1.22.22.cjs" diff --git a/src/middleware/.yarnrc.yml b/src/middleware/.yarnrc.yml new file mode 100644 index 000000000..3186f3f07 --- /dev/null +++ b/src/middleware/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/src/middleware/package.json b/src/middleware/package.json index 461078694..fdc0e67bd 100644 --- a/src/middleware/package.json +++ b/src/middleware/package.json @@ -2,22 +2,27 @@ "name": "semapps-middleware", "private": true, "license": "Apache-2.0", + "type": "module", "scripts": { + "build": "lerna exec --parallel --scope \"@semapps/**\" -- 'tsc --build | echo'", "version": "lerna version --force-publish='*' --exact --tag-version-prefix='middleware-v'", "publish": "lerna publish from-package --dist-tag latest", "prettier": "prettier --write '**/*.{js,ts,json}'", - "link-all": "lerna exec --parallel --scope @semapps/** -- yarn link", - "unlink-all": "lerna exec --parallel --scope @semapps/** -- yarn unlink", + "link-all": "lerna exec --parallel --scope \"@semapps/**\" -- yarn link", + "unlink-all": "lerna exec --parallel --scope \"@semapps/**\" -- yarn unlink", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint-files": "eslint --ext .js,.jsx,.ts,.tsx", "typecheck": "tsc --noEmit", - "preinstall": "git config core.hooksPath .git-hooks" + "preinstall": "git config core.hooksPath .git-hooks", + "prepack": "yarn build" }, "devDependencies": { + "@types/dotenv-flow": "^3.3.3", + "@types/ioredis": "^4.27.0", + "@types/node-fetch": "^2.6.13", + "@types/streamify-string": "^1.0.4", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.5.0", - "esbuild": "^0.25.4", - "esbuild-jest": "^0.5.0", "eslint": "^8.2.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^9.1.0", @@ -28,17 +33,24 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.1.3", "lerna": "^8.0.1", + "moleculer": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", "nx": "17.2.5", "prettier": "^3.1.1", - "typescript": "^5.3.3" + "typescript": "^5.9.2" }, "workspaces": [ "packages/*", "tests" ], - "dependencies": {}, "engines": { "node": ">=22.12.0" }, - "version": "0.7.0" + "version": "0.7.0", + "packageManager_": "yarn@4.9.2", + "packageManager": "yarn@4.9.2", + "resolutions": { + "moleculer@npm:^0.14.29": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", + "moleculer@npm:^0.14.18": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", + "moleculer@npm:^0.14.17": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + } } diff --git a/src/middleware/packages/activitypub/constants.js b/src/middleware/packages/activitypub/constants.ts similarity index 74% rename from src/middleware/packages/activitypub/constants.js rename to src/middleware/packages/activitypub/constants.ts index 4f627c0bb..fd4e5ab92 100644 --- a/src/middleware/packages/activitypub/constants.js +++ b/src/middleware/packages/activitypub/constants.ts @@ -1,7 +1,6 @@ -const appendPrefix = types => Object.fromEntries(Object.entries(types).map(([key, value]) => [key, AS_PREFIX + value])); - +const appendPrefix = (types: any) => + Object.fromEntries(Object.entries(types).map(([key, value]) => [key, AS_PREFIX + value])); const AS_PREFIX = 'https://www.w3.org/ns/activitystreams#'; - const PUBLIC_URI = `${AS_PREFIX}Public`; const ACTIVITY_TYPES = { @@ -58,13 +57,7 @@ const OBJECT_TYPES = { VIDEO: 'Video' }; -module.exports = { - AS_PREFIX, - PUBLIC_URI, - ACTIVITY_TYPES, - ACTOR_TYPES, - OBJECT_TYPES, - FULL_ACTIVITY_TYPES: appendPrefix(ACTIVITY_TYPES), - FULL_ACTOR_TYPES: appendPrefix(ACTOR_TYPES), - FULL_OBJECT_TYPES: appendPrefix(OBJECT_TYPES) -}; +export { AS_PREFIX, PUBLIC_URI, ACTIVITY_TYPES, ACTOR_TYPES, OBJECT_TYPES }; +export const FULL_ACTIVITY_TYPES = appendPrefix(ACTIVITY_TYPES); +export const FULL_ACTOR_TYPES = appendPrefix(ACTOR_TYPES); +export const FULL_OBJECT_TYPES = appendPrefix(OBJECT_TYPES); diff --git a/src/middleware/packages/activitypub/containers.js b/src/middleware/packages/activitypub/containers.ts similarity index 65% rename from src/middleware/packages/activitypub/containers.js rename to src/middleware/packages/activitypub/containers.ts index 8c14c6a7b..21abf7345 100644 --- a/src/middleware/packages/activitypub/containers.js +++ b/src/middleware/packages/activitypub/containers.ts @@ -1,6 +1,6 @@ -const { FULL_ACTOR_TYPES, FULL_OBJECT_TYPES } = require('./constants'); +import { FULL_ACTOR_TYPES, FULL_OBJECT_TYPES } from './constants.ts'; -module.exports = [ +export default [ { path: '/as/actor', acceptedTypes: Object.values(FULL_ACTOR_TYPES) diff --git a/src/middleware/packages/activitypub/index.js b/src/middleware/packages/activitypub/index.js deleted file mode 100644 index 82a95cc2e..000000000 --- a/src/middleware/packages/activitypub/index.js +++ /dev/null @@ -1,15 +0,0 @@ -const constants = require('./constants'); - -module.exports = { - ActivityPubService: require('./services/activitypub'), - ActivityPubMigrationService: require('./services/migration'), - ActivityMappingService: require('./services/activity-mapping'), - RelayService: require('./services/relay'), - // Mixins - BotMixin: require('./mixins/bot'), - ActivitiesHandlerMixin: require('./mixins/activities-handler'), - // Misc. - matchActivity: require('./utils/matchActivity'), - containers: require('./containers'), - ...constants -}; diff --git a/src/middleware/packages/activitypub/index.ts b/src/middleware/packages/activitypub/index.ts new file mode 100644 index 000000000..acc8931a1 --- /dev/null +++ b/src/middleware/packages/activitypub/index.ts @@ -0,0 +1,20 @@ +import ActivityPubService from './services/activitypub/index.ts'; +import ActivityPubMigrationService from './services/migration.ts'; +import ActivityMappingService from './services/activity-mapping.ts'; +import RelayService from './services/relay.ts'; +import BotMixin from './mixins/bot.ts'; +import ActivitiesHandlerMixin from './mixins/activities-handler.ts'; +import matchActivity from './utils/matchActivity.ts'; +import containers from './containers.ts'; + +export * from './constants.ts'; +export { + ActivityPubService, + ActivityPubMigrationService, + ActivityMappingService, + RelayService, + BotMixin, + ActivitiesHandlerMixin, + matchActivity, + containers +}; diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.js b/src/middleware/packages/activitypub/mixins/activities-handler.js deleted file mode 100644 index 73b3ee586..000000000 --- a/src/middleware/packages/activitypub/mixins/activities-handler.js +++ /dev/null @@ -1,51 +0,0 @@ -const ActivitiesHandlerMixin = { - dependencies: ['activitypub.side-effects'], - async started() { - if (!this.schema.activities || this.schema.activities.length === 0) { - throw new Error(`ActivitiesHandlerMixin: no activities defined in the service ${this.name}`); - } - - for (const [key, activityHandler] of Object.entries(this.schema.activities)) { - const boxTypes = []; - if (activityHandler.onReceive) boxTypes.push('inbox'); - if (activityHandler.onEmit) boxTypes.push('outbox'); - - await this.broker.call('activitypub.side-effects.addProcessor', { - matcher: typeof activityHandler.match === 'function' ? activityHandler.match.bind(this) : activityHandler.match, - capabilityGrantMatchFnGenerator: - typeof activityHandler.capabilityGrantMatchFnGenerator === 'function' - ? activityHandler.capabilityGrantMatchFnGenerator.bind(this) - : undefined, - actionName: `${this.name}.processActivity`, - boxTypes, - key, - priority: activityHandler.priority - }); - } - }, - actions: { - async processActivity(ctx) { - const { key, boxType, dereferencedActivity, actorUri } = ctx.params; - - const activityHandler = this.schema.activities[key]; - - if (!activityHandler) { - this.logger.warn(`Cannot process activity because no handler with key ${key} found`); - return dereferencedActivity; - } - - if (boxType === 'inbox' && activityHandler.onReceive) { - return await activityHandler.onReceive.bind(this)(ctx, dereferencedActivity, actorUri); - } else if (boxType === 'outbox' && activityHandler.onEmit) { - return await activityHandler.onEmit.bind(this)(ctx, dereferencedActivity, actorUri); - } else { - this.logger.warn( - `Cannot process activity because no onReceive or onEmit methods are associated with with key ${key}` - ); - return dereferencedActivity; - } - } - } -}; - -module.exports = ActivitiesHandlerMixin; diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts new file mode 100644 index 000000000..c87755ca6 --- /dev/null +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -0,0 +1,61 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + +const ActivitiesHandlerMixin = { + dependencies: ['activitypub.side-effects'], + async started() { + if (!this.schema.activities || this.schema.activities.length === 0) { + throw new Error(`ActivitiesHandlerMixin: no activities defined in the service ${this.name}`); + } + + for (const [key, activityHandler] of Object.entries(this.schema.activities)) { + const boxTypes = []; + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. + if (activityHandler.onReceive) boxTypes.push('inbox'); + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. + if (activityHandler.onEmit) boxTypes.push('outbox'); + + await this.broker.call('activitypub.side-effects.addProcessor', { + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. + matcher: typeof activityHandler.match === 'function' ? activityHandler.match.bind(this) : activityHandler.match, + capabilityGrantMatchFnGenerator: + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. + typeof activityHandler.capabilityGrantMatchFnGenerator === 'function' + ? // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. + activityHandler.capabilityGrantMatchFnGenerator.bind(this) + : undefined, + actionName: `${this.name}.processActivity`, + boxTypes, + key, + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. + priority: activityHandler.priority + }); + } + }, + actions: { + processActivity: defineAction({ + async handler(ctx) { + const { key, boxType, dereferencedActivity, actorUri } = ctx.params; + + const activityHandler = this.schema.activities[key]; + + if (!activityHandler) { + this.logger.warn(`Cannot process activity because no handler with key ${key} found`); + return dereferencedActivity; + } + + if (boxType === 'inbox' && activityHandler.onReceive) { + return await activityHandler.onReceive.bind(this)(ctx, dereferencedActivity, actorUri); + } else if (boxType === 'outbox' && activityHandler.onEmit) { + return await activityHandler.onEmit.bind(this)(ctx, dereferencedActivity, actorUri); + } else { + this.logger.warn( + `Cannot process activity because no onReceive or onEmit methods are associated with with key ${key}` + ); + return dereferencedActivity; + } + } + }) + } +} satisfies Partial; + +export default ActivitiesHandlerMixin; diff --git a/src/middleware/packages/activitypub/mixins/await-activity.js b/src/middleware/packages/activitypub/mixins/await-activity.ts similarity index 85% rename from src/middleware/packages/activitypub/mixins/await-activity.js rename to src/middleware/packages/activitypub/mixins/await-activity.ts index c4f24033b..24891dd76 100644 --- a/src/middleware/packages/activitypub/mixins/await-activity.js +++ b/src/middleware/packages/activitypub/mixins/await-activity.ts @@ -1,5 +1,5 @@ -const { delay } = require('../utils'); -const matchActivity = require('../utils/matchActivity'); +import { delay } from '../utils.ts'; +import matchActivity from '../utils/matchActivity.ts'; /** * Mixin used by the OutboxService and InboxService @@ -9,13 +9,13 @@ const matchActivity = require('../utils/matchActivity'); */ const AwaitActivityMixin = { actions: { - async awaitActivity(ctx) { + async awaitActivity(ctx: any) { const { collectionUri, matcher, maxTries = 60, delayMs = 500, publishedAfter } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let match = false; let dereferencedActivity; - const fetcher = async resourceUri => { + const fetcher = async (resourceUri: any) => { try { const resource = await ctx.call('ldp.resource.get', { resourceUri, @@ -23,9 +23,11 @@ const AwaitActivityMixin = { }); return resource; // First get the resource, then return it, otherwise the try/catch will not work } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.status === 401 || e.status === 403 || e.status === 404) { return false; } else { + // @ts-expect-error TS(2769): No overload matches this call. throw new Error(e); } } @@ -65,4 +67,4 @@ const AwaitActivityMixin = { } }; -module.exports = AwaitActivityMixin; +export default AwaitActivityMixin; diff --git a/src/middleware/packages/activitypub/mixins/bot.js b/src/middleware/packages/activitypub/mixins/bot.ts similarity index 67% rename from src/middleware/packages/activitypub/mixins/bot.js rename to src/middleware/packages/activitypub/mixins/bot.ts index dbe8facd6..9d33b2d4e 100644 --- a/src/middleware/packages/activitypub/mixins/bot.js +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const { arrayOf } = require('@semapps/ldp'); -const { ACTOR_TYPES } = require('../constants'); -const { getSlugFromUri, getContainerFromUri } = require('../utils'); +import urlJoin from 'url-join'; +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ACTOR_TYPES } from '../constants.ts'; +import { getSlugFromUri, getContainerFromUri } from '../utils.ts'; const BotMixin = { settings: { @@ -68,18 +69,25 @@ const BotMixin = { } }, actions: { - getUri() { - return this.settings.actor.uri; - } + getUri: defineAction({ + handler() { + return this.settings.actor.uri; + } + }) }, events: { - 'activitypub.inbox.received'(ctx) { - if (this.inboxReceived) { - if (ctx.params.recipients.includes(this.settings.actor.uri)) { - this.inboxReceived(ctx.params.activity); + 'activitypub.inbox.received': defineServiceEvent({ + handler(ctx) { + // @ts-expect-error TS(2339): Property 'inboxReceived' does not exist on type 'S... Remove this comment to see the full error message + if (this.inboxReceived) { + // @ts-expect-error TS(2339): Property 'recipients' does not exist on type 'Opti... Remove this comment to see the full error message + if (ctx.params.recipients.includes(this.settings.actor.uri)) { + // @ts-expect-error TS(2339): Property 'inboxReceived' does not exist on type 'S... Remove this comment to see the full error message + this.inboxReceived(ctx.params.activity); + } } } - } + }) }, methods: { async getFollowers() { @@ -89,6 +97,6 @@ const BotMixin = { return arrayOf(result?.items); } } -}; +} satisfies Partial; -module.exports = BotMixin; +export default BotMixin; diff --git a/src/middleware/packages/activitypub/mixins/fake-queue.js b/src/middleware/packages/activitypub/mixins/fake-queue.ts similarity index 54% rename from src/middleware/packages/activitypub/mixins/fake-queue.js rename to src/middleware/packages/activitypub/mixins/fake-queue.ts index 822d1a523..94b0b1095 100644 --- a/src/middleware/packages/activitypub/mixins/fake-queue.js +++ b/src/middleware/packages/activitypub/mixins/fake-queue.ts @@ -6,19 +6,24 @@ */ const FakeQueueMixin = { methods: { - async createJob(queueName, jobName, data, opts) { + async createJob(queueName: any, jobName: any, data: any, opts: any) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ create... Remove this comment to see the full error message this.logger.warn(`QueueMixin not configured, calling job directly`); + // @ts-expect-error TS(2339): Property 'schema' does not exist on type '{ create... Remove this comment to see the full error message if (!this.schema.queues[queueName]) throw new Error(`No queue found with key ${queueName}`); try { // TODO add all job properties https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md#job + // @ts-expect-error TS(2339): Property 'schema' does not exist on type '{ create... Remove this comment to see the full error message await this.schema.queues[queueName].process.bind(this)({ data, - log: (...args) => { + log: (...args: any[]) => { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ create... Remove this comment to see the full error message this.logger.info(...args); }, progress: () => {} }); } catch (e) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ create... Remove this comment to see the full error message this.logger.error(e.message); } // TODO add all job properties https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md#job @@ -27,4 +32,4 @@ const FakeQueueMixin = { } }; -module.exports = FakeQueueMixin; +export default FakeQueueMixin; diff --git a/src/middleware/packages/activitypub/package.json b/src/middleware/packages/activitypub/package.json index 4461e8c50..4f859fa9c 100644 --- a/src/middleware/packages/activitypub/package.json +++ b/src/middleware/packages/activitypub/package.json @@ -13,7 +13,6 @@ "@semapps/ontologies": "1.1.4", "@semapps/triplestore": "1.1.4", "handlebars": "^4.7.7", - "moleculer": "^0.14.18", "moleculer-bull": "^0.2.5", "moleculer-db": "^0.8.16", "moleculer-web": "^0.10.0-beta1", @@ -22,10 +21,16 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/activitypub/services/activity-mapping.js b/src/middleware/packages/activitypub/services/activity-mapping.js deleted file mode 100644 index 7801992a3..000000000 --- a/src/middleware/packages/activitypub/services/activity-mapping.js +++ /dev/null @@ -1,123 +0,0 @@ -const Handlebars = require('handlebars'); -const matchActivity = require('../utils/matchActivity'); -const { ACTIVITY_TYPES } = require('../constants'); - -const ActivityMappingService = { - name: 'activity-mapping', - settings: { - mappers: [], - handlebars: { - helpers: {} - }, - matchAnnouncedActivities: false - }, - async started() { - this.mappers = []; - - for (const [name, fn] of Object.entries(this.settings.handlebars.helpers)) { - this.logger.info(`Registering handlebars helper ${name}`); - Handlebars.registerHelper(name, fn); - } - - for (const mapper of this.settings.mappers) { - await this.actions.addMapper(mapper); - } - }, - actions: { - async map(ctx) { - let { activity, locale, ...rest } = ctx.params; - - // If the activity is an Announce, match the announced activity - if (this.settings.matchAnnouncedActivities && activity.type === ACTIVITY_TYPES.ANNOUNCE) { - const announcedActivity = - typeof activity.object === 'string' - ? await ctx.call('activitypub.object.get', { objectUri: activity.object, actorUri: 'system' }) - : activity.object; - - activity = { - actor: activity.actor, // Ensure the actor is defined - ...announcedActivity - }; - } - - for (const mapper of this.mappers) { - const dereferencedActivity = await this.matchActivity(ctx, mapper.match, activity); - - // If we have a match... - if (dereferencedActivity) { - // If mapping is false, we want the activity to be ignored - if (mapper.mapping === false) return; - - const emitter = await ctx.call('activitypub.actor.get', { actorUri: activity.actor }); - - let emitterProfile = {}; - try { - emitterProfile = emitter.url - ? await ctx.call('activitypub.actor.getProfile', { actorUri: activity.actor }) - : {}; - } catch (e) { - this.logger.warn( - `Could not get profile of actor ${activity.actor} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})` - ); - } - - const templateParams = { activity: dereferencedActivity, emitter, emitterProfile, ...rest }; - - return Object.fromEntries( - Object.entries(mapper.mapping).map(([key, value]) => { - // If the value is a function, it is a Handlebar template - if (typeof value === 'function') { - return [key, value(templateParams)]; - } - // If we have an object with locales mapping, look for the right locale - if (value[locale]) { - return [key, value[locale](templateParams)]; - } - throw new Error(`No ${locale} locale found for key ${key}`); - }) - ); - } - } - }, - async addMapper(ctx) { - const { match, mapping, priority = 1 } = ctx.params; - - if (!match || mapping === undefined) throw new Error('No object defined for match or mapping property'); - - this.mappers.push({ - match, - mapping: this.compileObject(mapping), - priority - }); - - // Reorder cached mappings - this.prioritizeMappers(); - }, - getMappers() { - return this.mappers; - } - }, - methods: { - matchActivity(ctx, pattern, activityOrObject) { - return matchActivity(ctx, pattern, activityOrObject); - }, - prioritizeMappers() { - this.mappers.sort((a, b) => b.priority - a.priority); - }, - compileObject(object) { - return ( - object && - Object.fromEntries( - Object.entries(object).map(([key, value]) => { - if (typeof value === 'string') { - return [key, Handlebars.compile(value)]; - } - return [key, this.compileObject(value)]; - }) - ) - ); - } - } -}; - -module.exports = ActivityMappingService; diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts new file mode 100644 index 000000000..2d9954112 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -0,0 +1,144 @@ +import Handlebars from 'handlebars'; +import { ServiceSchema, defineAction } from 'moleculer'; +import matchActivity from '../utils/matchActivity.ts'; +import { ACTIVITY_TYPES } from '../constants.ts'; + +const ActivityMappingService = { + name: 'activity-mapping' as const, + settings: { + mappers: [], + handlebars: { + helpers: {} + }, + matchAnnouncedActivities: false + }, + async started() { + this.mappers = []; + + for (const [name, fn] of Object.entries(this.settings.handlebars.helpers)) { + this.logger.info(`Registering handlebars helper ${name}`); + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message + Handlebars.registerHelper(name, fn); + } + + for (const mapper of this.settings.mappers) { + await this.actions.addMapper(mapper); + } + }, + actions: { + map: defineAction({ + async handler(ctx) { + let { activity, locale, ...rest } = ctx.params; + + // If the activity is an Announce, match the announced activity + if (this.settings.matchAnnouncedActivities && activity.type === ACTIVITY_TYPES.ANNOUNCE) { + const announcedActivity = + typeof activity.object === 'string' + ? await ctx.call('activitypub.object.get', { objectUri: activity.object, actorUri: 'system' }) + : activity.object; + + activity = { + actor: activity.actor, // Ensure the actor is defined + ...announcedActivity + }; + } + + for (const mapper of this.mappers) { + const dereferencedActivity = await this.matchActivity(ctx, mapper.match, activity); + + // If we have a match... + if (dereferencedActivity) { + // If mapping is false, we want the activity to be ignored + if (mapper.mapping === false) return; + + const emitter = await ctx.call('activitypub.actor.get', { actorUri: activity.actor }); + + let emitterProfile = {}; + try { + emitterProfile = emitter.url + ? await ctx.call('activitypub.actor.getProfile', { actorUri: activity.actor }) + : {}; + } catch (e) { + this.logger.warn( + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + `Could not get profile of actor ${activity.actor} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})` + ); + } + + const templateParams = { activity: dereferencedActivity, emitter, emitterProfile, ...rest }; + + return Object.fromEntries( + Object.entries(mapper.mapping).map(([key, value]) => { + // If the value is a function, it is a Handlebar template + if (typeof value === 'function') { + return [key, value(templateParams)]; + } + // If we have an object with locales mapping, look for the right locale + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. + if (value[locale]) { + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. + return [key, value[locale](templateParams)]; + } + throw new Error(`No ${locale} locale found for key ${key}`); + }) + ); + } + } + } + }), + + addMapper: defineAction({ + async handler(ctx) { + const { match, mapping, priority = 1 } = ctx.params; + + if (!match || mapping === undefined) throw new Error('No object defined for match or mapping property'); + + this.mappers.push({ + match, + mapping: this.compileObject(mapping), + priority + }); + + // Reorder cached mappings + this.prioritizeMappers(); + } + }), + + getMappers: defineAction({ + handler() { + return this.mappers; + } + }) + }, + methods: { + matchActivity(ctx, pattern, activityOrObject) { + return matchActivity(ctx, pattern, activityOrObject); + }, + prioritizeMappers() { + this.mappers.sort((a: any, b: any) => b.priority - a.priority); + }, + compileObject(object) { + return ( + object && + Object.fromEntries( + Object.entries(object).map(([key, value]) => { + if (typeof value === 'string') { + return [key, Handlebars.compile(value)]; + } + return [key, this.compileObject(value)]; + }) + ) + ); + } + } +} satisfies ServiceSchema; + +export default ActivityMappingService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivityMappingService.name]: typeof ActivityMappingService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/index.js b/src/middleware/packages/activitypub/services/activitypub/index.js deleted file mode 100644 index 0c6cf226c..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/index.js +++ /dev/null @@ -1,149 +0,0 @@ -const QueueMixin = require('moleculer-bull'); -const { as, sec } = require('@semapps/ontologies'); -const ActorService = require('./subservices/actor'); -const ActivityService = require('./subservices/activity'); -const ApiService = require('./subservices/api'); -const CollectionService = require('./subservices/collection'); -const FollowService = require('./subservices/follow'); -const InboxService = require('./subservices/inbox'); -const LikeService = require('./subservices/like'); -const ObjectService = require('./subservices/object'); -const OutboxService = require('./subservices/outbox'); -const CollectionsRegistryService = require('./subservices/collections-registry'); -const ReplyService = require('./subservices/reply'); -const ShareService = require('./subservices/share'); -const SideEffectsService = require('./subservices/side-effects'); -const FakeQueueMixin = require('../../mixins/fake-queue'); - -const ActivityPubService = { - name: 'activitypub', - settings: { - baseUri: null, - podProvider: false, - activitiesPath: '/as/activity', - collectionsPath: '/as/collection', - activateTombstones: true, - selectActorData: null, - queueServiceUrl: null - }, - dependencies: ['api', 'ontologies'], - created() { - const { - baseUri, - podProvider, - activitiesPath, - collectionsPath, - selectActorData, - queueServiceUrl, - activateTombstones - } = this.settings; - - this.broker.createService({ - mixins: [SideEffectsService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], - settings: { podProvider } - }); - - this.broker.createService({ - mixins: [CollectionService], - settings: { - podProvider, - path: collectionsPath - } - }); - - this.broker.createService({ - mixins: [CollectionsRegistryService], - settings: { - baseUri, - podProvider - } - }); - - this.broker.createService({ - mixins: [ActorService], - settings: { - baseUri, - selectActorData, - podProvider - } - }); - - this.broker.createService({ - mixins: [ApiService], - settings: { - baseUri, - podProvider - } - }); - - this.broker.createService({ - mixins: [ObjectService], - settings: { - baseUri, - podProvider, - activateTombstones - } - }); - - this.broker.createService({ - mixins: [ActivityService], - settings: { - baseUri, - podProvider, - path: activitiesPath - } - }); - - this.broker.createService({ - mixins: [FollowService], - settings: { - baseUri - } - }); - - this.broker.createService({ - mixins: [InboxService], - settings: { - podProvider - } - }); - - this.broker.createService({ - mixins: [LikeService], - settings: { - baseUri, - podProvider - } - }); - - this.broker.createService({ - mixins: [ShareService], - settings: { - baseUri, - podProvider - } - }); - - this.broker.createService({ - mixins: [ReplyService], - settings: { - baseUri, - podProvider - } - }); - - this.broker.createService({ - mixins: [OutboxService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], - settings: { - baseUri, - podProvider - } - }); - }, - async started() { - await this.broker.call('ontologies.register', as); - await this.broker.call('ontologies.register', sec); - } -}; - -module.exports = ActivityPubService; diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts new file mode 100644 index 000000000..fe744f8ad --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -0,0 +1,172 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message +import QueueMixin from 'moleculer-bull'; +import { as, sec } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; +import ActorService from './subservices/actor.ts'; +import ActivityService from './subservices/activity.ts'; +import ApiService from './subservices/api.ts'; +import CollectionService from './subservices/collection/index.ts'; +import FollowService from './subservices/follow.ts'; +import InboxService from './subservices/inbox.ts'; +import LikeService from './subservices/like.ts'; +import ObjectService from './subservices/object.ts'; +import OutboxService from './subservices/outbox.ts'; +import CollectionsRegistryService from './subservices/collections-registry.ts'; +import ReplyService from './subservices/reply.ts'; +import ShareService from './subservices/share.ts'; +import SideEffectsService from './subservices/side-effects.ts'; +import FakeQueueMixin from '../../mixins/fake-queue.ts'; + +const ActivityPubService = { + name: 'activitypub' as const, + settings: { + baseUri: null, + podProvider: false, + activitiesPath: '/as/activity', + collectionsPath: '/as/collection', + activateTombstones: true, + selectActorData: null, + queueServiceUrl: null + }, + dependencies: ['api', 'ontologies'], + created() { + const { + baseUri, + podProvider, + activitiesPath, + collectionsPath, + selectActorData, + queueServiceUrl, + activateTombstones + } = this.settings; + + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message + this.broker.createService({ + mixins: [SideEffectsService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], + settings: { podProvider } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.c... Remove this comment to see the full error message + this.broker.createService({ + mixins: [CollectionService], + settings: { + podProvider, + path: collectionsPath + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.c... Remove this comment to see the full error message + this.broker.createService({ + mixins: [CollectionsRegistryService], + settings: { + baseUri, + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message + this.broker.createService({ + mixins: [ActorService], + settings: { + baseUri, + selectActorData, + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message + this.broker.createService({ + mixins: [ApiService], + settings: { + baseUri, + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.o... Remove this comment to see the full error message + this.broker.createService({ + mixins: [ObjectService], + settings: { + baseUri, + podProvider, + activateTombstones + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message + this.broker.createService({ + mixins: [ActivityService], + settings: { + baseUri, + podProvider, + path: activitiesPath + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.f... Remove this comment to see the full error message + this.broker.createService({ + mixins: [FollowService], + settings: { + baseUri + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.i... Remove this comment to see the full error message + this.broker.createService({ + mixins: [InboxService], + settings: { + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.l... Remove this comment to see the full error message + this.broker.createService({ + mixins: [LikeService], + settings: { + baseUri, + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.s... Remove this comment to see the full error message + this.broker.createService({ + mixins: [ShareService], + settings: { + baseUri, + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.r... Remove this comment to see the full error message + this.broker.createService({ + mixins: [ReplyService], + settings: { + baseUri, + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { bas... Remove this comment to see the full error message + this.broker.createService({ + mixins: [OutboxService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], + settings: { + baseUri, + podProvider + } + }); + }, + async started() { + await this.broker.call('ontologies.register', as); + await this.broker.call('ontologies.register', sec); + } +} satisfies ServiceSchema; + +export default ActivityPubService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivityPubService.name]: typeof ActivityPubService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.js b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts similarity index 89% rename from src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts index aaf7ecaf0..2bf216ce7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts @@ -1,5 +1,5 @@ -const { hasType, getId } = require('@semapps/ldp'); -const { ACTIVITY_TYPES } = require('../../../../constants'); +import { hasType, getId } from '@semapps/ldp'; +import { ACTIVITY_TYPES } from '../../../../constants.ts'; // const removeReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatcher, anon }) => { // if (recipientUris === 0 && !anon) return; @@ -24,7 +24,7 @@ const { ACTIVITY_TYPES } = require('../../../../constants'); // ); // }; -const addReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatcher, anon }) => { +const addReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatcher, anon }: any) => { if (recipientUris?.length === 0 && !anon) return; await ctx.call( 'webacl.resource.addRights', @@ -52,7 +52,7 @@ const addReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatch const setRightsHandler = { match: '*', priority: 1, - async onEmit(ctx, activity) { + async onEmit(ctx: any, activity: any) { const activityUri = getId(activity); const newRecipients = await ctx.call('activitypub.activity.getRecipients', { activity }); const activityIsPublic = await ctx.call('activitypub.activity.isPublic', { activity }); @@ -61,6 +61,7 @@ const setRightsHandler = { // When a new activity is created, ensure the emitter has read rights as well. // Don't do that on podProvider config, because the Pod owner already has all rights. + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (!this.settings.podProvider) { if (!newRecipients.includes(activity.actor)) newRecipients.push(activity.actor); } @@ -87,8 +88,10 @@ const setRightsHandler = { anon: activityIsPublic }); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404) { // Ignore cases when the object is deleted before the Create or Update activity have been sent + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match:... Remove this comment to see the full error message this.logger.warn(`Could not add read rights on object ${objectUri} because it does not exist anymore.`); } else { throw e; @@ -133,4 +136,4 @@ const setRightsHandler = { } }; -module.exports = setRightsHandler; +export default setRightsHandler; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js deleted file mode 100644 index 128654d97..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js +++ /dev/null @@ -1,116 +0,0 @@ -const { Errors: E } = require('moleculer-web'); -const { ControlledContainerMixin } = require('@semapps/ldp'); -const setRightsHandler = require('./activity-handlers/setRightsHandler'); -const { objectCurrentToId, objectIdToCurrent, arrayOf } = require('../../../utils'); -const { PUBLIC_URI, FULL_ACTIVITY_TYPES } = require('../../../constants'); -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); - -const ActivityService = { - name: 'activitypub.activity', - mixins: [ControlledContainerMixin, ActivitiesHandlerMixin], - settings: { - baseUri: null, - podProvider: false, - // ControlledContainerMixin settings - path: '/as/activity', - acceptedTypes: Object.values(FULL_ACTIVITY_TYPES), - permissions: {}, - newResourcesPermissions: {}, - readOnly: true, - excludeFromMirror: true, - activateTombstones: false, - controlledActions: { - // Activities shouldn't be handled manually - patch: 'activitypub.activity.forbidden', - put: 'activitypub.activity.forbidden', - delete: 'activitypub.activity.forbidden' - } - }, - dependencies: ['ldp.container'], - actions: { - forbidden() { - throw new E.ForbiddenError(); - }, - async getRecipients(ctx) { - const { activity } = ctx.params; - const output = []; - - const actor = activity.actor ? await ctx.call('activitypub.actor.get', { actorUri: activity.actor }) : {}; - - for (const predicates of ['to', 'bto', 'cc', 'bcc']) { - if (activity[predicates]) { - for (const recipient of arrayOf(activity[predicates])) { - switch (recipient) { - // Skip public URI - case PUBLIC_URI: - case 'as:Public': - case 'Public': - break; - - // Sender's followers list - case actor.followers: - // Ignore remote followers list - // TODO Fetch remote followers list ? - if (recipient.startsWith(this.settings.baseUri)) { - const collection = await ctx.call('activitypub.collection.get', { - resourceUri: recipient, - webId: activity.actor - }); - if (collection && collection.items) output.push(...arrayOf(collection.items)); - } - break; - - // Simple actor URI - default: - output.push(recipient); - break; - } - } - } - } - - // Remove duplicates - return [...new Set(output)]; - }, - async getLocalRecipients(ctx) { - const { activity } = ctx.params; - const recipients = await this.actions.getRecipients({ activity }, { parentCtx: ctx }); - return recipients.filter(recipientUri => this.isLocalActor(recipientUri)); - }, - isPublic(ctx) { - const { activity } = ctx.params; - // We accept all three representations, as required by https://www.w3.org/TR/activitypub/#public-addressing - const publicRepresentations = [PUBLIC_URI, 'Public', 'as:Public']; - return arrayOf(activity.to).length > 0 - ? arrayOf(activity.to).some(r => publicRepresentations.includes(r)) - : false; - } - }, - methods: { - isLocalActor(uri) { - return uri.startsWith(this.settings.baseUri); - } - }, - hooks: { - before: { - get(ctx) { - if (typeof ctx.params.resourceUri === 'object') { - ctx.params.resourceUri = ctx.params.resourceUri.id || ctx.params.resourceUri['@id']; - } - }, - create(ctx) { - ctx.params.resource = objectIdToCurrent(ctx.params.resource); - } - }, - after: { - get(ctx, res) { - return objectCurrentToId(res); - } - } - }, - activities: { - setRights: setRightsHandler - } -}; - -module.exports = ActivityService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts new file mode 100644 index 000000000..e0a12df05 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -0,0 +1,137 @@ +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ControlledContainerMixin } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; +import setRightsHandler from './activity-handlers/setRightsHandler.ts'; +import { objectCurrentToId, objectIdToCurrent, arrayOf } from '../../../utils.ts'; +import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; + +const ActivityService = { + name: 'activitypub.activity' as const, + mixins: [ControlledContainerMixin, ActivitiesHandlerMixin], + settings: { + baseUri: null, + podProvider: false, + // ControlledContainerMixin settings + path: '/as/activity', + acceptedTypes: Object.values(FULL_ACTIVITY_TYPES), + permissions: {}, + newResourcesPermissions: {}, + readOnly: true, + excludeFromMirror: true, + activateTombstones: false, + controlledActions: { + // Activities shouldn't be handled manually + patch: 'activitypub.activity.forbidden', + put: 'activitypub.activity.forbidden', + delete: 'activitypub.activity.forbidden' + } + }, + dependencies: ['ldp.container'], + actions: { + forbidden: defineAction({ + handler() { + throw new E.ForbiddenError(); + } + }), + + getRecipients: defineAction({ + async handler(ctx) { + const { activity } = ctx.params; + const output = []; + + const actor = activity.actor ? await ctx.call('activitypub.actor.get', { actorUri: activity.actor }) : {}; + + for (const predicates of ['to', 'bto', 'cc', 'bcc']) { + if (activity[predicates]) { + for (const recipient of arrayOf(activity[predicates])) { + switch (recipient) { + // Skip public URI + case PUBLIC_URI: + case 'as:Public': + case 'Public': + break; + + // Sender's followers list + case actor.followers: + // Ignore remote followers list + // TODO Fetch remote followers list ? + if (recipient.startsWith(this.settings.baseUri)) { + const collection = await ctx.call('activitypub.collection.get', { + resourceUri: recipient, + webId: activity.actor + }); + if (collection && collection.items) output.push(...arrayOf(collection.items)); + } + break; + + // Simple actor URI + default: + output.push(recipient); + break; + } + } + } + } + + // Remove duplicates + return [...new Set(output)]; + } + }), + + getLocalRecipients: defineAction({ + async handler(ctx) { + const { activity } = ctx.params; + const recipients = await this.actions.getRecipients({ activity }, { parentCtx: ctx }); + return recipients.filter((recipientUri: any) => this.isLocalActor(recipientUri)); + } + }), + + isPublic: defineAction({ + handler(ctx) { + const { activity } = ctx.params; + // We accept all three representations, as required by https://www.w3.org/TR/activitypub/#public-addressing + const publicRepresentations = [PUBLIC_URI, 'Public', 'as:Public']; + return arrayOf(activity.to).length > 0 + ? arrayOf(activity.to).some(r => publicRepresentations.includes(r)) + : false; + } + }) + }, + methods: { + isLocalActor(uri) { + return uri.startsWith(this.settings.baseUri); + } + }, + hooks: { + before: { + get(ctx) { + if (typeof ctx.params.resourceUri === 'object') { + ctx.params.resourceUri = ctx.params.resourceUri.id || ctx.params.resourceUri['@id']; + } + }, + create(ctx) { + ctx.params.resource = objectIdToCurrent(ctx.params.resource); + } + }, + after: { + get(ctx, res) { + return objectCurrentToId(res); + } + } + }, + activities: { + setRights: setRightsHandler + } +} satisfies ServiceSchema; + +export default ActivityService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivityService.name]: typeof ActivityService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js deleted file mode 100644 index d7474f190..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js +++ /dev/null @@ -1,196 +0,0 @@ -const fetch = require('node-fetch'); -const { namedNode, literal, triple, variable } = require('@rdfjs/data-model'); -const { arrayOf } = require('@semapps/ldp'); -const { ACTOR_TYPES, AS_PREFIX } = require('../../../constants'); -const { getSlugFromUri, waitForResource } = require('../../../utils'); - -/** @type {import('moleculer').ServiceSchema} */ -const ActorService = { - name: 'activitypub.actor', - dependencies: ['activitypub.collection', 'ldp', 'signature'], - settings: { - baseUri: null, - selectActorData: null, - podProvider: false - }, - actions: { - async get(ctx) { - const { actorUri, webId } = ctx.params; - // If dataset is not in the meta, assume that actor is remote - if (ctx.meta.dataset && !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { - try { - // Don't return immediately the promise, or we won't be able to catch errors - const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, webId }); - return actor; - } catch (e) { - console.error(e); - return false; - } - } else { - const response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); - if (!response.ok) return false; - const actor = await response.json(); - return actor; - } - }, - async getProfile(ctx) { - const { actorUri, webId } = ctx.params; - const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); - // If the URL is not in the same domain as the actor, it is most likely not a profile - if (actor.url && new URL(actor.url).host === new URL(actorUri).host) { - return await ctx.call('ldp.resource.get', { resourceUri: actor.url, webId }); - } - }, - async appendActorData(ctx) { - const { actorUri } = ctx.params; - const userData = await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx }); - const propertiesToAdd = this.settings.selectActorData ? this.settings.selectActorData(userData) : {}; - - if (!propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']) { - // Ensure at least one actor type, otherwise ActivityPub-specific properties (inbox, public key...) will not be added - const resourceType = arrayOf(userData.type || userData['@type']); - const includeActorType = resourceType.some(type => Object.values(ACTOR_TYPES).includes(type)); - if (!includeActorType) { - propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = `${AS_PREFIX}Person`; - } - } - - if (!propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername']) { - propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername'] = getSlugFromUri( - userData.id || userData['@id'] - ); - } - - if (Object.keys(propertiesToAdd).length > 0) { - await ctx.call('ldp.resource.patch', { - resourceUri: actorUri, - triplesToAdd: Object.entries(propertiesToAdd).map(([predicate, subject]) => - triple( - namedNode(actorUri), - namedNode(predicate), - typeof subject === 'string' && subject.startsWith('http') ? namedNode(subject) : literal(subject) - ) - ), - webId: 'system' - }); - } - }, - async addEndpoint(ctx) { - const { actorUri, predicate, endpoint } = ctx.params; - - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - const dataset = account.username; - - await ctx.call('triplestore.update', { - query: { - type: 'update', - updates: [ - { - updateType: 'insertdelete', - insert: [ - { - type: 'bgp', - triples: [ - triple( - namedNode(actorUri), - namedNode('https://www.w3.org/ns/activitystreams#endpoints'), - variable('endpoints') - ), - triple(variable('endpoints'), namedNode(predicate), namedNode(endpoint)) - ] - } - ], - delete: [], - where: [ - { - type: 'optional', - patterns: [ - { - type: 'bgp', - triples: [ - triple( - namedNode(actorUri), - namedNode('https://www.w3.org/ns/activitystreams#endpoints'), - variable('b0') - ) - ] - } - ] - }, - { - type: 'bind', - variable: variable('endpoints'), - expression: { - type: 'operation', - operator: 'if', - args: [ - { - type: 'operation', - operator: 'bound', - args: [variable('b0')] - }, - variable('b0'), - { - type: 'operation', - operator: 'BNODE', - args: [] - } - ] - } - } - ] - } - ] - }, - webId: 'system', - dataset - }); - }, - async awaitCreateComplete(ctx) { - const { actorUri, additionalKeys = [], delayMs = 1000, maxTries = 20 } = ctx.params; - const keysToCheck = ['publicKey', 'outbox', 'inbox', 'followers', 'following', ...additionalKeys]; - - return await waitForResource( - delayMs, - keysToCheck, - maxTries, - async () => await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx, meta: { $cache: false } }) - ); - }, - getCollectionUri: { - cache: true, - async handler(ctx) { - const { actorUri, predicate, webId } = ctx.params; - const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); - return actor && actor[predicate]; - } - } - }, - methods: { - isActor(resource) { - return arrayOf(resource['@type'] || resource.type).some(type => Object.values(ACTOR_TYPES).includes(type)); - } - }, - events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - if (this.isActor(newData)) { - await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); - await ctx.call('signature.keypair.generate', { actorUri: resourceUri }); - await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); - } - }, - async 'ldp.resource.deleted'(ctx) { - const { resourceUri, oldData } = ctx.params; - if (this.isActor(oldData)) { - await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); - } - }, - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); - } - } -}; - -module.exports = ActorService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts new file mode 100644 index 000000000..37600ee04 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -0,0 +1,237 @@ +import fetch from 'node-fetch'; +import { namedNode, literal, triple, variable } from '@rdfjs/data-model'; +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; +import { getSlugFromUri, waitForResource } from '../../../utils.ts'; + +/** @type {import('moleculer').ServiceSchema} */ +const ActorService = { + name: 'activitypub.actor' as const, + dependencies: ['activitypub.collection', 'ldp', 'signature'], + settings: { + baseUri: null, + selectActorData: null, + podProvider: false + }, + actions: { + get: defineAction({ + async handler(ctx) { + const { actorUri, webId } = ctx.params; + // If dataset is not in the meta, assume that actor is remote + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + if (ctx.meta.dataset && !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { + try { + // Don't return immediately the promise, or we won't be able to catch errors + const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, webId }); + return actor; + } catch (e) { + console.error(e); + return false; + } + } else { + const response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); + if (!response.ok) return false; + const actor = await response.json(); + return actor; + } + } + }), + + getProfile: defineAction({ + async handler(ctx) { + const { actorUri, webId } = ctx.params; + const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); + // If the URL is not in the same domain as the actor, it is most likely not a profile + if (actor.url && new URL(actor.url).host === new URL(actorUri).host) { + return await ctx.call('ldp.resource.get', { resourceUri: actor.url, webId }); + } + } + }), + + appendActorData: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + const userData = await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx }); + const propertiesToAdd = this.settings.selectActorData ? this.settings.selectActorData(userData) : {}; + + if (!propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']) { + // Ensure at least one actor type, otherwise ActivityPub-specific properties (inbox, public key...) will not be added + const resourceType = arrayOf(userData.type || userData['@type']); + const includeActorType = resourceType.some(type => Object.values(ACTOR_TYPES).includes(type)); + if (!includeActorType) { + propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = `${AS_PREFIX}Person`; + } + } + + if (!propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername']) { + propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername'] = getSlugFromUri( + userData.id || userData['@id'] + ); + } + + if (Object.keys(propertiesToAdd).length > 0) { + await ctx.call('ldp.resource.patch', { + resourceUri: actorUri, + triplesToAdd: Object.entries(propertiesToAdd).map(([predicate, subject]) => + triple( + namedNode(actorUri), + namedNode(predicate), + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message + typeof subject === 'string' && subject.startsWith('http') ? namedNode(subject) : literal(subject) + ) + ), + webId: 'system' + }); + } + } + }), + + addEndpoint: defineAction({ + async handler(ctx) { + const { actorUri, predicate, endpoint } = ctx.params; + + const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + const dataset = account.username; + + await ctx.call('triplestore.update', { + query: { + type: 'update', + updates: [ + { + updateType: 'insertdelete', + insert: [ + { + type: 'bgp', + triples: [ + triple( + namedNode(actorUri), + namedNode('https://www.w3.org/ns/activitystreams#endpoints'), + variable('endpoints') + ), + triple(variable('endpoints'), namedNode(predicate), namedNode(endpoint)) + ] + } + ], + delete: [], + where: [ + { + type: 'optional', + patterns: [ + { + type: 'bgp', + triples: [ + triple( + namedNode(actorUri), + namedNode('https://www.w3.org/ns/activitystreams#endpoints'), + variable('b0') + ) + ] + } + ] + }, + { + type: 'bind', + variable: variable('endpoints'), + expression: { + type: 'operation', + operator: 'if', + args: [ + { + type: 'operation', + operator: 'bound', + args: [variable('b0')] + }, + variable('b0'), + { + type: 'operation', + operator: 'BNODE', + args: [] + } + ] + } + } + ] + } + ] + }, + webId: 'system', + dataset + }); + } + }), + + awaitCreateComplete: defineAction({ + async handler(ctx) { + const { actorUri, additionalKeys = [], delayMs = 1000, maxTries = 20 } = ctx.params; + const keysToCheck = ['publicKey', 'outbox', 'inbox', 'followers', 'following', ...additionalKeys]; + + return await waitForResource( + delayMs, + keysToCheck, + maxTries, + async () => await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx, meta: { $cache: false } }) + ); + } + }), + + getCollectionUri: defineAction({ + cache: true, + async handler(ctx) { + const { actorUri, predicate, webId } = ctx.params; + const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); + return actor && actor[predicate]; + } + }) + }, + methods: { + isActor(resource) { + return arrayOf(resource['@type'] || resource.type).some(type => Object.values(ACTOR_TYPES).includes(type)); + } + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message + if (this.isActor(newData)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); + await ctx.call('signature.keypair.generate', { actorUri: resourceUri }); + await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); + } + } + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, oldData } = ctx.params; + // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message + if (this.isActor(oldData)) { + await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); + } + } + }), + + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); + } + }) + } +} satisfies ServiceSchema; + +export default ActorService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActorService.name]: typeof ActorService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.js b/src/middleware/packages/activitypub/services/activitypub/subservices/api.js deleted file mode 100644 index e801359fb..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.js +++ /dev/null @@ -1,125 +0,0 @@ -const urlJoin = require('url-join'); -const path = require('path'); -const { arrayOf } = require('@semapps/ldp'); -const { - parseUrl, - parseHeader, - parseRawBody, - negotiateContentType, - negotiateAccept, - parseJson, - parseFile, - saveDatasetMeta -} = require('@semapps/middlewares'); -const { FULL_ACTOR_TYPES } = require('../../../constants'); - -const ApiService = { - name: 'activitypub.api', - settings: { - baseUri: null, - podProvider: false - }, - dependencies: ['api', 'ldp', 'ldp.registry'], - async started() { - if (!this.settings.baseUri) throw new Error('The baseUri setting of the activitypub.api service is required'); - const { pathname: basePath } = new URL(this.settings.baseUri); - const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { key: 'resourcesWithContainerPath' }); - if (this.settings.podProvider) { - await this.broker.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, '/:username([^/.][^/]+)')) - }); - } else if (!resourcesWithContainerPath) { - await this.broker.call('api.addRoute', { route: this.getBoxesRoute(path.join(basePath, `/:actorSlug`)) }); - } else { - // If some actor containers are already registered, add the corresponding API routes - const registeredContainers = await this.broker.call('ldp.registry.list'); - for (const container of Object.values(registeredContainers)) { - if (arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { - await this.broker.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) - }); - } - } - } - }, - actions: { - async inbox(ctx) { - const { actorSlug, ...activity } = ctx.params; - const { requestUrl } = ctx.meta; - const { origin } = new URL(this.settings.baseUri); - - await ctx.call('activitypub.inbox.post', { - collectionUri: urlJoin(origin, requestUrl), - ...activity - }); - - ctx.meta.$statusCode = 202; - }, - async outbox(ctx) { - let { actorSlug, ...activity } = ctx.params; - const { requestUrl } = ctx.meta; - const { origin } = new URL(this.settings.baseUri); - - activity = await ctx.call('activitypub.outbox.post', { - collectionUri: urlJoin(origin, requestUrl), - ...activity - }); - - ctx.meta.$responseHeaders = { - Location: activity.id || activity['@id'], - 'Content-Length': 0 - }; - // We need to set this also here (in addition to above) or we get a Moleculer warning - ctx.meta.$location = activity.id || activity['@id']; - ctx.meta.$statusCode = 201; - } - }, - events: { - async 'ldp.registry.registered'(ctx) { - const { container } = ctx.params; - const { pathname: basePath } = new URL(this.settings.baseUri); - const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { - key: 'resourcesWithContainerPath' - }); - if ( - !this.settings.podProvider && - resourcesWithContainerPath && - arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) - ) { - await ctx.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) - }); - } - } - }, - methods: { - getBoxesRoute(actorsPath) { - const middlewares = [ - parseUrl, - parseHeader, - negotiateContentType, - negotiateAccept, - parseRawBody, - parseJson, - parseFile, - saveDatasetMeta - ]; - - return { - name: this.settings.podProvider ? 'boxes' : `boxes${actorsPath}`, - path: actorsPath, - // Disable the body parsers so that we can parse the body ourselves - // (Moleculer-web doesn't handle non-JSON bodies, so we must do it ourselves) - bodyParsers: false, - authorization: false, - authentication: true, - aliases: { - 'POST /inbox': [...middlewares, 'activitypub.api.inbox'], - 'POST /outbox': [...middlewares, 'activitypub.api.outbox'] - } - }; - } - } -}; - -module.exports = ApiService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts new file mode 100644 index 000000000..1fb8e115f --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -0,0 +1,156 @@ +import urlJoin from 'url-join'; +import path from 'path'; +import { arrayOf } from '@semapps/ldp'; + +import { + parseUrl, + parseHeader, + parseRawBody, + negotiateContentType, + negotiateAccept, + parseJson, + parseFile, + saveDatasetMeta +} from '@semapps/middlewares'; + +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { FULL_ACTOR_TYPES } from '../../../constants.ts'; + +const ApiService = { + name: 'activitypub.api' as const, + settings: { + baseUri: null, + podProvider: false + }, + dependencies: ['api', 'ldp', 'ldp.registry'], + async started() { + if (!this.settings.baseUri) throw new Error('The baseUri setting of the activitypub.api service is required'); + const { pathname: basePath } = new URL(this.settings.baseUri); + const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { key: 'resourcesWithContainerPath' }); + if (this.settings.podProvider) { + await this.broker.call('api.addRoute', { + route: this.getBoxesRoute(path.join(basePath, '/:username([^/.][^/]+)')) + }); + } else if (!resourcesWithContainerPath) { + await this.broker.call('api.addRoute', { route: this.getBoxesRoute(path.join(basePath, `/:actorSlug`)) }); + } else { + // If some actor containers are already registered, add the corresponding API routes + const registeredContainers = await this.broker.call('ldp.registry.list'); + for (const container of Object.values(registeredContainers)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. + if (arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { + await this.broker.call('api.addRoute', { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. + route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) + }); + } + } + } + }, + actions: { + inbox: defineAction({ + async handler(ctx) { + const { actorSlug, ...activity } = ctx.params; + // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. + const { requestUrl } = ctx.meta; + const { origin } = new URL(this.settings.baseUri); + + await ctx.call('activitypub.inbox.post', { + collectionUri: urlJoin(origin, requestUrl), + ...activity + }); + + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = 202; + } + }), + + outbox: defineAction({ + async handler(ctx) { + let { actorSlug, ...activity } = ctx.params; + // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. + const { requestUrl } = ctx.meta; + const { origin } = new URL(this.settings.baseUri); + + activity = await ctx.call('activitypub.outbox.post', { + collectionUri: urlJoin(origin, requestUrl), + ...activity + }); + + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message + ctx.meta.$responseHeaders = { + Location: activity.id || activity['@id'], + 'Content-Length': 0 + }; + // We need to set this also here (in addition to above) or we get a Moleculer warning + // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. + ctx.meta.$location = activity.id || activity['@id']; + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = 201; + } + }) + }, + events: { + 'ldp.registry.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'container' does not exist on type 'Optio... Remove this comment to see the full error message + const { container } = ctx.params; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + const { pathname: basePath } = new URL(this.settings.baseUri); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message + const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { + key: 'resourcesWithContainerPath' + }); + if ( + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + !this.settings.podProvider && + resourcesWithContainerPath && + arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) + ) { + await ctx.call('api.addRoute', { + // @ts-expect-error TS(2339): Property 'getBoxesRoute' does not exist on type 'S... Remove this comment to see the full error message + route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) + }); + } + } + }) + }, + methods: { + getBoxesRoute(actorsPath) { + const middlewares = [ + parseUrl, + parseHeader, + negotiateContentType, + negotiateAccept, + parseRawBody, + parseJson, + parseFile, + saveDatasetMeta + ]; + + return { + name: this.settings.podProvider ? 'boxes' : `boxes${actorsPath}`, + path: actorsPath, + // Disable the body parsers so that we can parse the body ourselves + // (Moleculer-web doesn't handle non-JSON bodies, so we must do it ourselves) + bodyParsers: false, + authorization: false, + authentication: true, + aliases: { + 'POST /inbox': [...middlewares, 'activitypub.api.inbox'], + 'POST /outbox': [...middlewares, 'activitypub.api.outbox'] + } + }; + } + } +} satisfies ServiceSchema; + +export default ApiService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ApiService.name]: typeof ApiService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts similarity index 86% rename from src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 76f69a625..e290e52e9 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,6 +1,10 @@ -const { sanitizeSparqlUri } = require('@semapps/triplestore'); -const { MoleculerError } = require('moleculer').Errors; -const { getValueFromDataType } = require('../../../../../utils'); +import { sanitizeSparqlUri } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; +import { getValueFromDataType } from '../../../../../utils.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; /** * Retrieves the collection metadata from the triplestore @@ -9,7 +13,7 @@ const { getValueFromDataType } = require('../../../../../utils'); * @param {string} webId - The webId of the user requesting the collection * @returns {Promise} The collection metadata */ -async function getCollectionMetadata(ctx, collectionUri, webId, dataset) { +async function getCollectionMetadata(ctx: any, collectionUri: any, webId: any, dataset: any) { const results = await ctx.call('triplestore.query', { query: ` PREFIX as: @@ -36,7 +40,7 @@ async function getCollectionMetadata(ctx, collectionUri, webId, dataset) { return Object.fromEntries(Object.entries(results[0]).map(([key, result]) => [key, getValueFromDataType(result)])); } -async function verifyCursorExists(ctx, collectionUri, cursor, dataset) { +async function verifyCursorExists(ctx: any, collectionUri: any, cursor: any, dataset: any) { const cursorResult = await ctx.call('triplestore.query', { query: ` PREFIX as: @@ -54,7 +58,7 @@ async function verifyCursorExists(ctx, collectionUri, cursor, dataset) { } } -async function validateCursorParams(ctx, collectionUri, beforeEq, afterEq, dataset) { +async function validateCursorParams(ctx: any, collectionUri: any, beforeEq: any, afterEq: any, dataset: any) { if (beforeEq && afterEq) { throw new MoleculerError('Cannot get a collection with both beforeEq and afterEq', 400, 'BAD_REQUEST'); } @@ -70,7 +74,7 @@ async function validateCursorParams(ctx, collectionUri, beforeEq, afterEq, datas * @param {object} options - The collection options * @returns {Promise} The collection item URIs */ -async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { +async function fetchCollectionItemURIs(ctx: any, collectionUri: any, options: any, dataset: any) { const result = await ctx.call('triplestore.query', { query: ` PREFIX as: @@ -94,7 +98,7 @@ async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { // Filter out the nodes that don't have an itemUri // and return the itemUris values instead of the nodes - return result.filter(node => node.itemUri).map(node => node.itemUri.value); + return result.filter((node: any) => node.itemUri).map((node: any) => node.itemUri.value); } /** @@ -107,7 +111,7 @@ async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { * @param {string} afterEq - The cursor to start the pagination from * @returns {object} The paginated items, previous cursor, next cursor, first item, last item */ -function applyPagination(allItemURIs, beforeEq, afterEq) { +function applyPagination(allItemURIs: any, beforeEq: any, afterEq: any) { let prevCursorUri; let nextCursorUri; let itemURIs = allItemURIs; @@ -117,13 +121,13 @@ function applyPagination(allItemURIs, beforeEq, afterEq) { if (beforeEq) { // If there is a beforeEq cursor, reduce the items array to the items before the cursor, including the cursor itself // and determine the cursor uri to use for the "next" link - const index = itemURIs.findIndex(item => item === beforeEq); + const index = itemURIs.findIndex((item: any) => item === beforeEq); nextCursorUri = itemURIs[index + 1]; itemURIs = itemURIs.slice(0, index + 1); } else if (afterEq) { // If there is an afterEq cursor, reduce the items array to the items after the cursor, including the cursor itself // and determine the cursor uri to use for the "prev" link - const index = itemURIs.findIndex(item => item === afterEq); + const index = itemURIs.findIndex((item: any) => item === afterEq); prevCursorUri = itemURIs[index - 1]; itemURIs = itemURIs.slice(index); } @@ -149,7 +153,7 @@ function applyPagination(allItemURIs, beforeEq, afterEq) { * @param {object} cursorDirection - The direction of the requested cursor * @returns {object} The selected and (possibly) dereferenced items, previous item uri, next item uri */ -async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, cursorDirection) { +async function selectAndDereferenceItems(ctx: any, allItemURIs: any, options: any, webId: any, cursorDirection: any) { let selectedItems = []; let itemUri = null; let nextItemUri = null; @@ -176,6 +180,7 @@ async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, curso delete item['@context']; // Don't keep the items individual context selectedItems.push(item); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404 || e.code === 403) { ctx.broker.logger.debug(`Item not found with URI: ${itemUri}`); } else { @@ -205,7 +210,7 @@ async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, curso }; } -const formatOptions = options => ({ +const formatOptions = (options: any) => ({ summary: options.summary, 'semapps:dereferenceItems': options.dereferenceItems, 'semapps:itemsPerPage': options.itemsPerPage, @@ -214,7 +219,7 @@ const formatOptions = options => ({ }); function formatResponse( - ctx, + ctx: any, { items, options, @@ -226,7 +231,7 @@ function formatResponse( beforeEq, afterEq, localContext - } + }: any ) { const itemsProp = options.ordered ? 'orderedItems' : 'items'; @@ -265,7 +270,7 @@ function formatResponse( }; } -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -274,14 +279,18 @@ module.exports = { webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, async handler(ctx) { const { resourceUri: collectionUri, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'queryString' does not exist on type '{}'... Remove this comment to see the full error message const beforeEq = ctx.params.beforeEq || ctx.meta.queryString?.beforeEq; // cursor param when moving backwards + // @ts-expect-error TS(2339): Property 'queryString' does not exist on type '{}'... Remove this comment to see the full error message const afterEq = ctx.params.afterEq || ctx.meta.queryString?.afterEq; // cursor param when moving forwards + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const localContext = await ctx.call('jsonld.context.get'); @@ -338,4 +347,6 @@ module.exports = { context: jsonContext || localContext }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js deleted file mode 100644 index abab77fd4..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js +++ /dev/null @@ -1,278 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const { ControlledContainerMixin, arrayOf, getDatasetFromUri } = require('@semapps/ldp'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const { Errors: E } = require('moleculer-web'); -const getAction = require('./actions/get'); - -const CollectionService = { - name: 'activitypub.collection', - mixins: [ControlledContainerMixin], - settings: { - podProvider: false, - // ControlledContainerMixin settings - path: '/as/collection', - acceptedTypes: [ - 'https://www.w3.org/ns/activitystreams#Collection', - 'https://www.w3.org/ns/activitystreams#OrderedCollection' - ], - activateTombstones: false, - permissions: {}, - // These default permissions can be overridden by providing - // a `permissions` param when calling activitypub.collection.post - newResourcesPermissions: webId => { - switch (webId) { - case 'anon': - case 'system': - return { - anon: { - read: true, - write: true - } - }; - - default: - return { - anon: { - read: true - }, - user: { - uri: webId, - read: true, - write: true, - control: true - } - }; - } - }, - excludeFromMirror: true - }, - dependencies: ['triplestore', 'ldp.resource'], - actions: { - put() { - throw new E.ForbiddenError(); - }, - async patch(ctx) { - const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri, webId }); - if (!collectionExist) { - throw new MoleculerError( - `Cannot update content of non-existing collection ${collectionUri}`, - 400, - 'BAD_REQUEST' - ); - } - - if (triplesToAdd) { - for (const triple of triplesToAdd) { - if ( - triple.subject.value === collectionUri && - triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' - ) { - const itemUri = triple.object.value; - await ctx.call('activitypub.collection.add', { collectionUri, itemUri }); - } - } - } - - if (triplesToRemove) { - for (const triple of triplesToRemove) { - if ( - triple.subject.value === collectionUri && - triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' - ) { - const itemUri = triple.object.value; - await ctx.call('activitypub.collection.remove', { collectionUri, itemUri }); - } - } - } - }, - async post(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - } - - await this.actions.waitForContainerCreation({ containerUri: ctx.params.containerUri }); - - const ordered = arrayOf(ctx.params.resource.type).includes('OrderedCollection'); - - // TODO Use ShEx to check collection validity - if (!ordered && (ctx.params.resource['semapps:sortPredicate'] || ctx.params.resource['semapps:sortOrder'])) { - throw new Error(`Non-ordered collections cannot include semapps:sortPredicate or semapps:sortOrder predicates`); - } - - // Set default values - if (!ctx.params.resource['semapps:dereferenceItems']) ctx.params.resource['semapps:dereferenceItems'] = false; - if (ordered) { - if (!ctx.params.resource['semapps:sortPredicate']) - ctx.params.resource['semapps:sortPredicate'] = 'as:published'; - if (!ctx.params.resource['semapps:sortOrder']) ctx.params.resource['semapps:sortOrder'] = 'semapps:DescOrder'; - } - - return await ctx.call('ldp.container.post', ctx.params); - }, - /* - * Checks if the collection is empty - * @param collectionUri The full URI of the collection - * @return true if the collection is empty - */ - - async isEmpty(ctx) { - const { collectionUri } = ctx.params; - const res = await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX as: - SELECT ( Count(?items) as ?count ) - WHERE { - <${collectionUri}> as:items ?items . - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - return Number(res[0].count.value) === 0; - }, - /* - * Checks if an item is in a collection - * @param collectionUri The full URI of the collection - * @param itemUri The full URI of the item - * @return true if the collection exists - */ - async includes(ctx) { - const { collectionUri, itemUri } = ctx.params; - if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.includes'); - return await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX as: - ASK - WHERE { - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items <${itemUri}> . - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - }, - /* - * Attach an object to a collection - * @param collectionUri The full URI of the collection - * @param item The resource to add to the collection - */ - async add(ctx) { - let { collectionUri, item, itemUri } = ctx.params; - if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; - if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.add'); - - // TODO also check external resources - // const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri: itemUri }); - // if (!resourceExist) throw new Error('Cannot attach a non-existing resource !') - - // TODO check why thrown error is lost and process is stopped - const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!collectionExist) - throw new Error(`Cannot attach to a non-existing collection: ${collectionUri} (dataset: ${ctx.meta.dataset})`); - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - INSERT DATA { - <${collectionUri}> <${itemUri}> - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - - await ctx.emit('activitypub.collection.added', { - collectionUri, - itemUri - }); - }, - /* - * Detach an object from a collection - * @param collectionUri The full URI of the collection - * @param item The resource to remove from the collection - */ - async remove(ctx) { - let { collectionUri, item, itemUri } = ctx.params; - if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; - if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.remove'); - - const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!collectionExist) throw new Error(`Cannot detach from a non-existing collection: ${collectionUri}`); - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - DELETE - WHERE - { <${collectionUri}> <${itemUri}> } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - - await ctx.emit('activitypub.collection.removed', { - collectionUri, - itemUri - }); - }, - get: getAction, - /* - * Empty the collection, deleting all items it contains. - * @param collectionUri The full URI of the collection - */ - async clear(ctx) { - const collectionUri = ctx.params.collectionUri.replace(/\/+$/, ''); - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX as: - DELETE { - ?s1 ?p1 ?o1 . - } - WHERE { - FILTER(?container IN (<${collectionUri}>, <${`${collectionUri}/`}>)) . - ?container as:items ?s1 . - ?s1 ?p1 ?o1 . - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - }, - /* - * Get the owner of collections attached to actors - * @param collectionUri The full URI of the collection - * @param collectionKey The key of the collection (eg. inbox) - */ - async getOwner(ctx) { - const { collectionUri, collectionKey } = ctx.params; - - // Inboxes use the LDP ontology (LDN) - const prefix = collectionKey === 'inbox' ? 'ldp' : 'as'; - - const results = await ctx.call('triplestore.query', { - query: ` - PREFIX as: - PREFIX ldp: - SELECT ?actorUri - WHERE { - ?actorUri ${prefix}:${collectionKey} <${collectionUri}> - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - - return results.length > 0 ? results[0].actorUri.value : null; - } - }, - methods: { - getCollectionDataset(collectionUri) { - if (!this.settings.podProvider) return undefined; - return getDatasetFromUri(collectionUri); - } - } -}; - -module.exports = CollectionService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts new file mode 100644 index 000000000..0dd33cea6 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -0,0 +1,324 @@ +import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/ldp'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema, defineAction } from 'moleculer'; +import getAction from './actions/get.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const CollectionService = { + name: 'activitypub.collection' as const, + mixins: [ControlledContainerMixin], + settings: { + podProvider: false, + // ControlledContainerMixin settings + path: '/as/collection', + acceptedTypes: [ + 'https://www.w3.org/ns/activitystreams#Collection', + 'https://www.w3.org/ns/activitystreams#OrderedCollection' + ], + activateTombstones: false, + permissions: {}, + // These default permissions can be overridden by providing + // a `permissions` param when calling activitypub.collection.post + newResourcesPermissions: (webId: any) => { + switch (webId) { + case 'anon': + case 'system': + return { + anon: { + read: true, + write: true + } + }; + + default: + return { + anon: { + read: true + }, + user: { + uri: webId, + read: true, + write: true, + control: true + } + }; + } + }, + excludeFromMirror: true + }, + dependencies: ['triplestore', 'ldp.resource'], + actions: { + put: defineAction({ + handler() { + throw new E.ForbiddenError(); + } + }), + + patch: defineAction({ + async handler(ctx) { + const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri, webId }); + if (!collectionExist) { + throw new MoleculerError( + `Cannot update content of non-existing collection ${collectionUri}`, + 400, + 'BAD_REQUEST' + ); + } + + if (triplesToAdd) { + for (const triple of triplesToAdd) { + if ( + triple.subject.value === collectionUri && + triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' + ) { + const itemUri = triple.object.value; + await ctx.call('activitypub.collection.add', { collectionUri, itemUri }); + } + } + } + + if (triplesToRemove) { + for (const triple of triplesToRemove) { + if ( + triple.subject.value === collectionUri && + triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' + ) { + const itemUri = triple.object.value; + await ctx.call('activitypub.collection.remove', { collectionUri, itemUri }); + } + } + } + } + }), + + post: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + + await this.actions.waitForContainerCreation({ containerUri: ctx.params.containerUri }); + + const ordered = arrayOf(ctx.params.resource.type).includes('OrderedCollection'); + + // TODO Use ShEx to check collection validity + if (!ordered && (ctx.params.resource['semapps:sortPredicate'] || ctx.params.resource['semapps:sortOrder'])) { + throw new Error( + `Non-ordered collections cannot include semapps:sortPredicate or semapps:sortOrder predicates` + ); + } + + // Set default values + if (!ctx.params.resource['semapps:dereferenceItems']) ctx.params.resource['semapps:dereferenceItems'] = false; + if (ordered) { + if (!ctx.params.resource['semapps:sortPredicate']) + ctx.params.resource['semapps:sortPredicate'] = 'as:published'; + if (!ctx.params.resource['semapps:sortOrder']) ctx.params.resource['semapps:sortOrder'] = 'semapps:DescOrder'; + } + + return await ctx.call('ldp.container.post', ctx.params); + } + }), + + isEmpty: defineAction({ + /* + * Checks if the collection is empty + * @param collectionUri The full URI of the collection + * @return true if the collection is empty + */ + + async handler(ctx) { + const { collectionUri } = ctx.params; + const res = await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX as: + SELECT ( Count(?items) as ?count ) + WHERE { + <${collectionUri}> as:items ?items . + } + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + return Number(res[0].count.value) === 0; + } + }), + + includes: defineAction({ + /* + * Checks if an item is in a collection + * @param collectionUri The full URI of the collection + * @param itemUri The full URI of the item + * @return true if the collection exists + */ + async handler(ctx) { + const { collectionUri, itemUri } = ctx.params; + if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.includes'); + return await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX as: + ASK + WHERE { + <${collectionUri}> a as:Collection . + <${collectionUri}> as:items <${itemUri}> . + } + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + } + }), + + add: defineAction({ + /* + * Attach an object to a collection + * @param collectionUri The full URI of the collection + * @param item The resource to add to the collection + */ + async handler(ctx) { + let { collectionUri, item, itemUri } = ctx.params; + if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; + if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.add'); + + // TODO also check external resources + // const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri: itemUri }); + // if (!resourceExist) throw new Error('Cannot attach a non-existing resource !') + + // TODO check why thrown error is lost and process is stopped + const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!collectionExist) + throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + `Cannot attach to a non-existing collection: ${collectionUri} (dataset: ${ctx.meta.dataset})` + ); + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + <${collectionUri}> <${itemUri}> + } + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + + await ctx.emit('activitypub.collection.added', { + collectionUri, + itemUri + }); + } + }), + + remove: defineAction({ + /* + * Detach an object from a collection + * @param collectionUri The full URI of the collection + * @param item The resource to remove from the collection + */ + async handler(ctx) { + let { collectionUri, item, itemUri } = ctx.params; + if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; + if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.remove'); + + const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!collectionExist) throw new Error(`Cannot detach from a non-existing collection: ${collectionUri}`); + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + DELETE + WHERE + { <${collectionUri}> <${itemUri}> } + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + + await ctx.emit('activitypub.collection.removed', { + collectionUri, + itemUri + }); + } + }), + + get: getAction, + + clear: defineAction({ + /* + * Empty the collection, deleting all items it contains. + * @param collectionUri The full URI of the collection + */ + async handler(ctx) { + const collectionUri = ctx.params.collectionUri.replace(/\/+$/, ''); + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX as: + DELETE { + ?s1 ?p1 ?o1 . + } + WHERE { + FILTER(?container IN (<${collectionUri}>, <${`${collectionUri}/`}>)) . + ?container as:items ?s1 . + ?s1 ?p1 ?o1 . + } + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + } + }), + + getOwner: defineAction({ + /* + * Get the owner of collections attached to actors + * @param collectionUri The full URI of the collection + * @param collectionKey The key of the collection (eg. inbox) + */ + async handler(ctx) { + const { collectionUri, collectionKey } = ctx.params; + + // Inboxes use the LDP ontology (LDN) + const prefix = collectionKey === 'inbox' ? 'ldp' : 'as'; + + const results = await ctx.call('triplestore.query', { + query: ` + PREFIX as: + PREFIX ldp: + SELECT ?actorUri + WHERE { + ?actorUri ${prefix}:${collectionKey} <${collectionUri}> + } + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + + return results.length > 0 ? results[0].actorUri.value : null; + } + }) + }, + methods: { + getCollectionDataset(collectionUri) { + if (!this.settings.podProvider) return undefined; + return getDatasetFromUri(collectionUri); + } + } +} satisfies ServiceSchema; + +export default CollectionService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [CollectionService.name]: typeof CollectionService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js deleted file mode 100644 index 433cf21ce..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js +++ /dev/null @@ -1,300 +0,0 @@ -const urlJoin = require('url-join'); -const { quad, namedNode } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { getWebIdFromUri, arrayOf } = require('@semapps/ldp'); -const { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } = require('../../../constants'); - -const CollectionsRegistryService = { - name: 'activitypub.collections-registry', - settings: { - baseUri: null, - podProvider: false - }, - dependencies: ['triplestore', 'ldp'], - async started() { - this.registeredCollections = []; - this.collectionsInCreation = []; - }, - actions: { - async register(ctx) { - let { path, name, attachToTypes, ...options } = ctx.params; - if (!name) name = path; - - // Ignore undefined options - Object.keys(options).forEach(key => (options[key] === undefined || options[key] === null) && delete options[key]); - - // Persist the collection in memory - this.registeredCollections.push({ path, name, attachToTypes, ...options }); - }, - list() { - return this.registeredCollections; - }, - async createAndAttachCollection(ctx) { - const { objectUri, collection } = ctx.params; - const { - path, - attachPredicate, - ordered, - summary, - dereferenceItems, - itemsPerPage, - sortPredicate, - sortOrder, - permissions - } = collection || {}; - const collectionUri = urlJoin(objectUri, path); - - const exists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!exists && !this.collectionsInCreation.includes(collectionUri)) { - // Prevent race conditions by keeping the collections being created in memory - this.collectionsInCreation.push(collectionUri); - - // Create the collection - await ctx.call('activitypub.collection.post', { - resource: { - type: ordered ? ['Collection', 'OrderedCollection'] : 'Collection', - summary, - 'semapps:dereferenceItems': dereferenceItems, - 'semapps:itemsPerPage': itemsPerPage, - 'semapps:sortPredicate': sortPredicate, - 'semapps:sortOrder': sortOrder - }, - contentType: MIME_TYPES.JSON, - webId: this.settings.podProvider ? getWebIdFromUri(objectUri) : 'system', - permissions, // Handled by the WebAclMiddleware, if present - forcedResourceUri: path ? collectionUri : undefined // Bypass the automatic URI generation - }); - - // Attach it to the object - await ctx.call( - 'ldp.resource.patch', - { - resourceUri: objectUri, - triplesToAdd: [quad(namedNode(objectUri), namedNode(attachPredicate), namedNode(collectionUri))], - webId: 'system' - }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger an Update - } - } - ); - - // Now the collection has been created, we can remove it (this way we don't use too much memory) - this.collectionsInCreation = this.collectionsInCreation.filter(c => c !== collectionUri); - } - - return collectionUri; - }, - async deleteCollection(ctx) { - const { objectUri, collection } = ctx.params; - const resourceUri = urlJoin(objectUri, collection.path); - - const exists = await ctx.call('activitypub.collection.exist', { resourceUri, webId: 'system' }); - if (exists) { - // Delete the collection - await ctx.call('activitypub.collection.delete', { resourceUri, webId: 'system' }); - } - }, - async createAndAttachMissingCollections(ctx) { - for (const collection of this.registeredCollections) { - this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); - - const accounts = await this.broker.call('auth.account.find'); - const datasets = this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; - - for (let dataset of datasets) { - // Find all containers where we want to attach this collection - const containers = await ctx.call('ldp.registry.getByType', { type: collection.attachToTypes, dataset }); - for (const container of Object.values(containers)) { - const containerUri = urlJoin(this.settings.baseUri, container.fullPath); - this.logger.info(`Looking for resources in container ${containerUri}`); - const resources = await ctx.call('ldp.container.getUris', { containerUri }); - for (const resourceUri of resources) { - await this.actions.createAndAttachCollection( - { - objectUri: resourceUri, - collection - }, - { parentCtx: ctx } - ); - } - } - } - } - }, - async updateCollectionsOptions(ctx) { - let { collection, dataset } = ctx.params; - let { attachPredicate, ordered, summary, dereferenceItems, itemsPerPage, sortPredicate, sortOrder } = - collection || {}; - - attachPredicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: attachPredicate }); - sortPredicate = sortPredicate && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortPredicate })); - sortOrder = sortOrder && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortOrder })); - - const accounts = await this.broker.call('auth.account.find'); - const datasets = dataset ? [dataset] : this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; - - for (dataset of datasets) { - this.logger.info(`Getting all collections in dataset ${dataset} attached with predicate ${attachPredicate}...`); - - const results = await ctx.call('triplestore.query', { - query: ` - SELECT ?collectionUri - WHERE { - ?objectUri <${attachPredicate}> ?collectionUri - } - `, - webId: 'system', - dataset - }); - - for (const collectionUri of results.map(r => r.collectionUri.value)) { - if (this.isLocalObject(collectionUri, urlJoin(this.settings.baseUri, dataset))) { - this.logger.info(`Updating options of ${collectionUri}...`); - await ctx.call('triplestore.update', { - query: ` - PREFIX as: - PREFIX semapps: - DELETE { - <${collectionUri}> - a ?type ; - as:summary ?summary ; - semapps:dereferenceItems ?dereferenceItems ; - semapps:itemsPerPage ?itemsPerPage ; - semapps:sortPredicate ?sortPredicate ; - semapps:sortOrder ?sortOrder . - } - INSERT { - <${collectionUri}> a ${ordered ? 'as:OrderedCollection, as:Collection' : 'as:Collection'} . - ${summary ? `<${collectionUri}> as:summary "${summary}" .` : ''} - <${collectionUri}> semapps:dereferenceItems ${dereferenceItems} . - ${itemsPerPage ? `<${collectionUri}> semapps:itemsPerPage ${itemsPerPage} .` : ''} - ${sortPredicate ? `<${collectionUri}> semapps:sortPredicate <${sortPredicate}> .` : ''} - ${sortOrder ? `<${collectionUri}> semapps:sortOrder <${sortOrder}> .` : ''} - } - WHERE { - <${collectionUri}> a ?type - OPTIONAL { <${collectionUri}> as:summary ?summary . } - OPTIONAL { <${collectionUri}> semapps:dereferenceItems ?dereferenceItems . } - OPTIONAL { <${collectionUri}> semapps:itemsPerPage ?itemsPerPage . } - OPTIONAL { <${collectionUri}> semapps:sortPredicate ?sortPredicate . } - OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } - } - `, - webId: 'system', - dataset - }); - } - } - } - } - }, - methods: { - // Get the collections attached to the given type - getCollectionsByType(types) { - types = arrayOf(types); - return types.length > 0 - ? this.registeredCollections.filter(collection => - types - .map(type => type.replace(AS_PREFIX, '')) // Remove AS prefix if it is set - .some(type => - Array.isArray(collection.attachToTypes) - ? collection.attachToTypes.includes(type) - : collection.attachToTypes === type - ) - ) - : []; - }, - isActor(types) { - return arrayOf(types).some(type => - [...Object.values(ACTOR_TYPES), ...Object.values(FULL_ACTOR_TYPES)].includes(type) - ); - }, - hasTypeChanged(oldData, newData) { - return JSON.stringify(newData.type || newData['@type']) !== JSON.stringify(oldData.type || oldData['@type']); - }, - isLocalObject(uri, actorUri) { - if (this.settings.podProvider) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(actorUri + '/') || - uri === aclBase || - uri.startsWith(aclBase + '/') || - uri === aclGroupBase || - uri.startsWith(aclGroupBase + '/') - ); - } else { - return uri.startsWith(this.settings.baseUri); - } - } - }, - events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - const collections = this.getCollectionsByType(newData.type || newData['@type']); - for (const collection of collections) { - if (this.isActor(newData.type || newData['@type'])) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } else { - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } - } - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData, oldData } = ctx.params; - // Check if we need to create collection only if the type has changed - if (this.hasTypeChanged(oldData, newData)) { - const collections = this.getCollectionsByType(newData.type || newData['@type']); - for (const collection of collections) { - if (this.isActor(newData.type || newData['@type'])) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } else { - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } - } - } - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri, triplesAdded } = ctx.params; - if (triplesAdded) { - for (const triple of triplesAdded) { - if (triple.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { - const collections = this.getCollectionsByType(triple.object.value); - for (const collection of collections) { - if (this.isActor(triple.object.value)) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection }, - { parentCtx: ctx } - ); - } else { - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection }, - { parentCtx: ctx } - ); - } - } - } - } - } - }, - async 'ldp.resource.deleted'(ctx) { - const { oldData } = ctx.params; - const collections = this.getCollectionsByType(oldData.type || oldData['@type']); - for (const collection of collections) { - await this.actions.deleteCollection( - { objectUri: oldData.id || oldData['@id'], collection }, - { parentCtx: ctx } - ); - } - } - } -}; - -module.exports = CollectionsRegistryService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts new file mode 100644 index 000000000..0efca2a49 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -0,0 +1,366 @@ +import urlJoin from 'url-join'; +import { quad, namedNode } from '@rdfjs/data-model'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { getWebIdFromUri, arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; + +const CollectionsRegistryService = { + name: 'activitypub.collections-registry' as const, + settings: { + baseUri: null, + podProvider: false + }, + dependencies: ['triplestore', 'ldp'], + async started() { + this.registeredCollections = []; + this.collectionsInCreation = []; + }, + actions: { + register: defineAction({ + async handler(ctx) { + let { path, name, attachToTypes, ...options } = ctx.params; + if (!name) name = path; + + // Ignore undefined options + Object.keys(options).forEach( + key => (options[key] === undefined || options[key] === null) && delete options[key] + ); + + // Persist the collection in memory + this.registeredCollections.push({ path, name, attachToTypes, ...options }); + } + }), + + list: defineAction({ + handler() { + return this.registeredCollections; + } + }), + + createAndAttachCollection: defineAction({ + async handler(ctx) { + const { objectUri, collection } = ctx.params; + const { + path, + attachPredicate, + ordered, + summary, + dereferenceItems, + itemsPerPage, + sortPredicate, + sortOrder, + permissions + } = collection || {}; + const collectionUri = urlJoin(objectUri, path); + + const exists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!exists && !this.collectionsInCreation.includes(collectionUri)) { + // Prevent race conditions by keeping the collections being created in memory + this.collectionsInCreation.push(collectionUri); + + // Create the collection + await ctx.call('activitypub.collection.post', { + resource: { + type: ordered ? ['Collection', 'OrderedCollection'] : 'Collection', + summary, + 'semapps:dereferenceItems': dereferenceItems, + 'semapps:itemsPerPage': itemsPerPage, + 'semapps:sortPredicate': sortPredicate, + 'semapps:sortOrder': sortOrder + }, + contentType: MIME_TYPES.JSON, + webId: this.settings.podProvider ? getWebIdFromUri(objectUri) : 'system', + permissions, // Handled by the WebAclMiddleware, if present + forcedResourceUri: path ? collectionUri : undefined // Bypass the automatic URI generation + }); + + // Attach it to the object + await ctx.call( + 'ldp.resource.patch', + { + resourceUri: objectUri, + triplesToAdd: [quad(namedNode(objectUri), namedNode(attachPredicate), namedNode(collectionUri))], + webId: 'system' + }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger an Update + } + } + ); + + // Now the collection has been created, we can remove it (this way we don't use too much memory) + this.collectionsInCreation = this.collectionsInCreation.filter((c: any) => c !== collectionUri); + } + + return collectionUri; + } + }), + + deleteCollection: defineAction({ + async handler(ctx) { + const { objectUri, collection } = ctx.params; + const resourceUri = urlJoin(objectUri, collection.path); + + const exists = await ctx.call('activitypub.collection.exist', { resourceUri, webId: 'system' }); + if (exists) { + // Delete the collection + await ctx.call('activitypub.collection.delete', { resourceUri, webId: 'system' }); + } + } + }), + + createAndAttachMissingCollections: defineAction({ + async handler(ctx) { + for (const collection of this.registeredCollections) { + this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); + + const accounts = await this.broker.call('auth.account.find'); + const datasets = this.settings.podProvider ? accounts.map((a: any) => a.username) : [undefined]; + + for (let dataset of datasets) { + // Find all containers where we want to attach this collection + const containers = await ctx.call('ldp.registry.getByType', { type: collection.attachToTypes, dataset }); + for (const container of Object.values(containers)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. + const containerUri = urlJoin(this.settings.baseUri, container.fullPath); + this.logger.info(`Looking for resources in container ${containerUri}`); + const resources = await ctx.call('ldp.container.getUris', { containerUri }); + for (const resourceUri of resources) { + await this.actions.createAndAttachCollection( + { + objectUri: resourceUri, + collection + }, + { parentCtx: ctx } + ); + } + } + } + } + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + let { collection, dataset } = ctx.params; + let { attachPredicate, ordered, summary, dereferenceItems, itemsPerPage, sortPredicate, sortOrder } = + collection || {}; + + attachPredicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: attachPredicate }); + sortPredicate = + sortPredicate && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortPredicate })); + sortOrder = sortOrder && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortOrder })); + + const accounts = await this.broker.call('auth.account.find'); + const datasets = dataset + ? [dataset] + : this.settings.podProvider + ? accounts.map((a: any) => a.username) + : [undefined]; + + for (dataset of datasets) { + this.logger.info( + `Getting all collections in dataset ${dataset} attached with predicate ${attachPredicate}...` + ); + + const results = await ctx.call('triplestore.query', { + query: ` + SELECT ?collectionUri + WHERE { + ?objectUri <${attachPredicate}> ?collectionUri + } + `, + webId: 'system', + dataset + }); + + for (const collectionUri of results.map((r: any) => r.collectionUri.value)) { + if (this.isLocalObject(collectionUri, urlJoin(this.settings.baseUri, dataset))) { + this.logger.info(`Updating options of ${collectionUri}...`); + await ctx.call('triplestore.update', { + query: ` + PREFIX as: + PREFIX semapps: + DELETE { + <${collectionUri}> + a ?type ; + as:summary ?summary ; + semapps:dereferenceItems ?dereferenceItems ; + semapps:itemsPerPage ?itemsPerPage ; + semapps:sortPredicate ?sortPredicate ; + semapps:sortOrder ?sortOrder . + } + INSERT { + <${collectionUri}> a ${ordered ? 'as:OrderedCollection, as:Collection' : 'as:Collection'} . + ${summary ? `<${collectionUri}> as:summary "${summary}" .` : ''} + <${collectionUri}> semapps:dereferenceItems ${dereferenceItems} . + ${itemsPerPage ? `<${collectionUri}> semapps:itemsPerPage ${itemsPerPage} .` : ''} + ${sortPredicate ? `<${collectionUri}> semapps:sortPredicate <${sortPredicate}> .` : ''} + ${sortOrder ? `<${collectionUri}> semapps:sortOrder <${sortOrder}> .` : ''} + } + WHERE { + <${collectionUri}> a ?type + OPTIONAL { <${collectionUri}> as:summary ?summary . } + OPTIONAL { <${collectionUri}> semapps:dereferenceItems ?dereferenceItems . } + OPTIONAL { <${collectionUri}> semapps:itemsPerPage ?itemsPerPage . } + OPTIONAL { <${collectionUri}> semapps:sortPredicate ?sortPredicate . } + OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } + } + `, + webId: 'system', + dataset + }); + } + } + } + } + }) + }, + methods: { + // Get the collections attached to the given type + getCollectionsByType(types) { + types = arrayOf(types); + return types.length > 0 + ? this.registeredCollections.filter((collection: any) => + types + .map((type: any) => type.replace(AS_PREFIX, '')) // Remove AS prefix if it is set + .some((type: any) => + Array.isArray(collection.attachToTypes) + ? collection.attachToTypes.includes(type) + : collection.attachToTypes === type + ) + ) + : []; + }, + isActor(types) { + return arrayOf(types).some(type => + [...Object.values(ACTOR_TYPES), ...Object.values(FULL_ACTOR_TYPES)].includes(type) + ); + }, + hasTypeChanged(oldData, newData) { + return JSON.stringify(newData.type || newData['@type']) !== JSON.stringify(oldData.type || oldData['@type']); + }, + isLocalObject(uri, actorUri) { + if (this.settings.podProvider) { + const { origin, pathname } = new URL(actorUri); + const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice + const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice + return ( + uri === actorUri || + uri.startsWith(`${actorUri}/`) || + uri === aclBase || + uri.startsWith(`${aclBase}/`) || + uri === aclGroupBase || + uri.startsWith(`${aclGroupBase}/`) + ); + } else { + return uri.startsWith(this.settings.baseUri); + } + } + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message + const collections = this.getCollectionsByType(newData.type || newData['@type']); + for (const collection of collections) { + // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message + if (this.isActor(newData.type || newData['@type'])) { + // If the resource is an actor, use the resource URI as the webId + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); + } else { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); + } + } + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData, oldData } = ctx.params; + // Check if we need to create collection only if the type has changed + // @ts-expect-error TS(2339): Property 'hasTypeChanged' does not exist on type '... Remove this comment to see the full error message + if (this.hasTypeChanged(oldData, newData)) { + // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message + const collections = this.getCollectionsByType(newData.type || newData['@type']); + for (const collection of collections) { + // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message + if (this.isActor(newData.type || newData['@type'])) { + // If the resource is an actor, use the resource URI as the webId + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); + } else { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); + } + } + } + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, triplesAdded } = ctx.params; + if (triplesAdded) { + for (const triple of triplesAdded) { + if (triple.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { + // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message + const collections = this.getCollectionsByType(triple.object.value); + for (const collection of collections) { + // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message + if (this.isActor(triple.object.value)) { + // If the resource is an actor, use the resource URI as the webId + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createAndAttachCollection( + { objectUri: resourceUri, collection }, + { parentCtx: ctx } + ); + } else { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createAndAttachCollection( + { objectUri: resourceUri, collection }, + { parentCtx: ctx } + ); + } + } + } + } + } + } + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message + const { oldData } = ctx.params; + // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message + const collections = this.getCollectionsByType(oldData.type || oldData['@type']); + for (const collection of collections) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.deleteCollection( + { objectUri: oldData.id || oldData['@id'], collection }, + { parentCtx: ctx } + ); + } + } + }) + } +} satisfies ServiceSchema; + +export default CollectionsRegistryService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [CollectionsRegistryService.name]: typeof CollectionsRegistryService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.js b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.js deleted file mode 100644 index 291aebeb4..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.js +++ /dev/null @@ -1,222 +0,0 @@ -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, ACTOR_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); - -const FollowService = { - name: 'activitypub.follow', - mixins: [ActivitiesHandlerMixin], - settings: { - baseUri: null, - followersCollectionOptions: { - path: '/followers', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'https://www.w3.org/ns/activitystreams#followers', - ordered: false, - dereferenceItems: false, - permissions: collectionPermissionsWithAnonRead - }, - followingCollectionOptions: { - path: '/following', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'https://www.w3.org/ns/activitystreams#following', - ordered: false, - dereferenceItems: false, - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.outbox', 'activitypub.collection'], - async started() { - await this.broker.call('activitypub.collections-registry.register', this.settings.followersCollectionOptions); - await this.broker.call('activitypub.collections-registry.register', this.settings.followingCollectionOptions); - }, - actions: { - async addFollower(ctx) { - const { follower, following } = ctx.params; - - if (this.isLocalActor(following)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); - if (actor.followers) { - await ctx.call('activitypub.collection.add', { - collectionUri: actor.followers, - item: follower - }); - } - } - - // Add reverse relation - if (this.isLocalActor(follower)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - if (actor.following) { - await ctx.call('activitypub.collection.add', { - collectionUri: actor.following, - item: following - }); - } - } - - ctx.emit('activitypub.follow.added', { follower, following }, { meta: { webId: null, dataset: null } }); - }, - async removeFollower(ctx) { - const { follower, following } = ctx.params; - - if (this.isLocalActor(following)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); - if (actor.followers) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.followers, - item: follower - }); - } - } - - // Add reverse relation - if (this.isLocalActor(follower)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - if (actor.following) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.following, - item: following - }); - } - } - - ctx.emit('activitypub.follow.removed', { follower, following }, { meta: { webId: null, dataset: null } }); - }, - async isFollowing(ctx) { - const { follower, following } = ctx.params; - - if (!this.isLocalActor(follower)) - throw new Error('The method activitypub.follow.isFollowing currently only works with local actors'); - - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - return await ctx.call('activitypub.collection.includes', { - collectionUri: actor.following, - itemUri: following - }); - }, - async listFollowers(ctx) { - const { collectionUri } = ctx.params; - - return await ctx.call('activitypub.collection.get', { - resourceUri: collectionUri - }); - }, - async listFollowing(ctx) { - const { collectionUri } = ctx.params; - - return await ctx.call('activitypub.collection.get', { - resourceUri: collectionUri - }); - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.followersCollectionOptions, - dataset - }); - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.followingCollectionOptions, - dataset - }); - } - }, - activities: { - follow: { - match: { - type: ACTIVITY_TYPES.FOLLOW - }, - async onReceive(ctx, activity) { - const { '@context': context, ...activityObject } = activity; - const actor = await ctx.call('activitypub.actor.get', { actorUri: activity.object }); - - await this.actions.addFollower( - { - follower: activity.actor, - following: activity.object - }, - { parentCtx: ctx } - ); - - // TODO don't accept Follow request if actor doesn't have followers/following collections - await ctx.call('activitypub.outbox.post', { - collectionUri: actor.outbox, - '@context': 'https://www.w3.org/ns/activitystreams', - actor: activity.object, - type: ACTIVITY_TYPES.ACCEPT, - object: activityObject, - to: activity.actor - }); - } - }, - acceptFollow: { - match: { - type: ACTIVITY_TYPES.ACCEPT, - object: { - type: ACTIVITY_TYPES.FOLLOW - } - }, - async onReceive(ctx, activity) { - await this.actions.addFollower( - { - follower: activity.object.actor, - following: activity.object.object - }, - { parentCtx: ctx } - ); - } - }, - undoFollow: { - match: { - type: ACTIVITY_TYPES.UNDO, - object: { - type: ACTIVITY_TYPES.FOLLOW - } - }, - async onEmit(ctx, activity) { - await this.actions.removeFollower( - { - follower: activity.object.actor || activity.actor, - following: activity.object.object - }, - { parentCtx: ctx } - ); - }, - async onReceive(ctx, activity) { - await this.actions.removeFollower( - { - follower: activity.object.actor || activity.actor, - following: activity.object.object - }, - { parentCtx: ctx } - ); - } - }, - undoAcceptFollow: { - match: { - type: ACTIVITY_TYPES.UNDO, - object: { - type: ACTIVITY_TYPES.ACCEPT, - object: { - type: ACTIVITY_TYPES.FOLLOW - } - } - }, - async onReceive(ctx, activity) { - await this.actions.removeFollower( - { - follower: activity.object.object.actor || activity.actor, - following: activity.object.object.object - }, - { parentCtx: ctx } - ); - } - } - }, - methods: { - isLocalActor(uri) { - return uri.startsWith(this.settings.baseUri); - } - } -}; - -module.exports = FollowService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts new file mode 100644 index 000000000..0e67f2a5c --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -0,0 +1,253 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; + +const FollowService = { + name: 'activitypub.follow' as const, + mixins: [ActivitiesHandlerMixin], + settings: { + baseUri: null, + followersCollectionOptions: { + path: '/followers', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'https://www.w3.org/ns/activitystreams#followers', + ordered: false, + dereferenceItems: false, + permissions: collectionPermissionsWithAnonRead + }, + followingCollectionOptions: { + path: '/following', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'https://www.w3.org/ns/activitystreams#following', + ordered: false, + dereferenceItems: false, + permissions: collectionPermissionsWithAnonRead + } + }, + dependencies: ['activitypub.outbox', 'activitypub.collection'], + async started() { + await this.broker.call('activitypub.collections-registry.register', this.settings.followersCollectionOptions); + await this.broker.call('activitypub.collections-registry.register', this.settings.followingCollectionOptions); + }, + actions: { + addFollower: defineAction({ + async handler(ctx) { + const { follower, following } = ctx.params; + + if (this.isLocalActor(following)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); + if (actor.followers) { + await ctx.call('activitypub.collection.add', { + collectionUri: actor.followers, + item: follower + }); + } + } + + // Add reverse relation + if (this.isLocalActor(follower)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); + if (actor.following) { + await ctx.call('activitypub.collection.add', { + collectionUri: actor.following, + item: following + }); + } + } + + ctx.emit('activitypub.follow.added', { follower, following }, { meta: { webId: null, dataset: null } }); + } + }), + + removeFollower: defineAction({ + async handler(ctx) { + const { follower, following } = ctx.params; + + if (this.isLocalActor(following)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); + if (actor.followers) { + await ctx.call('activitypub.collection.remove', { + collectionUri: actor.followers, + item: follower + }); + } + } + + // Add reverse relation + if (this.isLocalActor(follower)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); + if (actor.following) { + await ctx.call('activitypub.collection.remove', { + collectionUri: actor.following, + item: following + }); + } + } + + ctx.emit('activitypub.follow.removed', { follower, following }, { meta: { webId: null, dataset: null } }); + } + }), + + isFollowing: defineAction({ + async handler(ctx) { + const { follower, following } = ctx.params; + + if (!this.isLocalActor(follower)) + throw new Error('The method activitypub.follow.isFollowing currently only works with local actors'); + + const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); + return await ctx.call('activitypub.collection.includes', { + collectionUri: actor.following, + itemUri: following + }); + } + }), + + listFollowers: defineAction({ + async handler(ctx) { + const { collectionUri } = ctx.params; + + return await ctx.call('activitypub.collection.get', { + resourceUri: collectionUri + }); + } + }), + + listFollowing: defineAction({ + async handler(ctx) { + const { collectionUri } = ctx.params; + + return await ctx.call('activitypub.collection.get', { + resourceUri: collectionUri + }); + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.followersCollectionOptions, + dataset + }); + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.followingCollectionOptions, + dataset + }); + } + }) + }, + activities: { + follow: { + match: { + type: ACTIVITY_TYPES.FOLLOW + }, + async onReceive(ctx: any, activity: any) { + const { '@context': context, ...activityObject } = activity; + const actor = await ctx.call('activitypub.actor.get', { actorUri: activity.object }); + + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addFollower( + { + follower: activity.actor, + following: activity.object + }, + { parentCtx: ctx } + ); + + // TODO don't accept Follow request if actor doesn't have followers/following collections + await ctx.call('activitypub.outbox.post', { + collectionUri: actor.outbox, + '@context': 'https://www.w3.org/ns/activitystreams', + actor: activity.object, + type: ACTIVITY_TYPES.ACCEPT, + object: activityObject, + to: activity.actor + }); + } + }, + acceptFollow: { + match: { + type: ACTIVITY_TYPES.ACCEPT, + object: { + type: ACTIVITY_TYPES.FOLLOW + } + }, + async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addFollower( + { + follower: activity.object.actor, + following: activity.object.object + }, + { parentCtx: ctx } + ); + } + }, + undoFollow: { + match: { + type: ACTIVITY_TYPES.UNDO, + object: { + type: ACTIVITY_TYPES.FOLLOW + } + }, + async onEmit(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeFollower( + { + follower: activity.object.actor || activity.actor, + following: activity.object.object + }, + { parentCtx: ctx } + ); + }, + async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeFollower( + { + follower: activity.object.actor || activity.actor, + following: activity.object.object + }, + { parentCtx: ctx } + ); + } + }, + undoAcceptFollow: { + match: { + type: ACTIVITY_TYPES.UNDO, + object: { + type: ACTIVITY_TYPES.ACCEPT, + object: { + type: ACTIVITY_TYPES.FOLLOW + } + } + }, + async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeFollower( + { + follower: activity.object.object.actor || activity.actor, + following: activity.object.object.object + }, + { parentCtx: ctx } + ); + } + } + }, + methods: { + isLocalActor(uri) { + return uri.startsWith(this.settings.baseUri); + } + } +} satisfies ServiceSchema; + +export default FollowService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [FollowService.name]: typeof FollowService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js deleted file mode 100644 index d7329f067..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js +++ /dev/null @@ -1,187 +0,0 @@ -const { Errors: E } = require('moleculer-web'); -const { MoleculerError } = require('moleculer').Errors; -const { objectIdToCurrent, collectionPermissionsWithAnonRead } = require('../../../utils'); -const { ACTOR_TYPES } = require('../../../constants'); -const AwaitActivityMixin = require('../../../mixins/await-activity'); - -/** @type {import('moleculer').ServiceSchema} */ -const InboxService = { - name: 'activitypub.inbox', - mixins: [AwaitActivityMixin], - settings: { - podProvider: false, - collectionOptions: { - path: '/inbox', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'http://www.w3.org/ns/ldp#inbox', - ordered: true, - itemsPerPage: 10, - dereferenceItems: true, - sortPredicate: 'as:published', - sortOrder: 'semapps:DescOrder', - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.collection', 'activitypub.collections-registry'], - async started() { - await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); - }, - actions: { - async post(ctx) { - const { collectionUri, ...activity } = ctx.params; - - if (!collectionUri || !collectionUri.startsWith('http')) { - throw new Error(`The collectionUri ${collectionUri} is not a valid URL`); - } - - if (!(await ctx.call('ldp.resource.exist', { resourceUri: collectionUri, webId: 'system' }))) { - throw E.NotFoundError(); - } - - // Ensure the actor in the activity is the same as the posting actor - // (When posting, the webId is the one of the poster) - if (activity.actor !== ctx.meta.webId) { - throw new E.UnAuthorizedError('INVALID_ACTOR', 'Activity actor is not the same as the posting actor'); - } - - const inboxOwner = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'inbox' }); - - // Verify that the account exists and has not been deleted - const account = await ctx.call('auth.account.findByWebId', { webId: inboxOwner }); - if (!account) throw new E.NotFoundError(); - if (account.deletedAt) throw new MoleculerError(`User does not exist anymore`, 410, 'GONE'); - - if (this.settings.podProvider) { - ctx.meta.dataset = account.username; - } - - // We want the next operations to be done by the system - // TODO check if we can avoid this, as this is a bad practice - ctx.meta.webId = 'system'; - - const collectionExists = await ctx.call('activitypub.collection.exist', { - resourceUri: collectionUri, - webId: 'system' - }); - if (!collectionExists) { - throw new E.NotFoundError(); - } - - if (!ctx.meta.skipSignatureValidation) { - if (!ctx.meta.rawBody || !ctx.meta.originalHeaders) - throw new Error(`Cannot validate HTTP signature because of missing meta (rawBody or originalHeaders)`); - - const validDigest = await ctx.call('signature.verifyDigest', { - body: ctx.meta.rawBody, // Stored by parseRawBody middleware - headers: ctx.meta.originalHeaders - }); - - const { isValid: validSignature } = await ctx.call('signature.verifyHttpSignature', { - url: collectionUri, - method: 'POST', - headers: ctx.meta.originalHeaders - }); - - if (!validDigest || !validSignature) { - throw new E.UnAuthorizedError('INVALID_SIGNATURE'); - } - } - - // TODO check activity is valid - - try { - await this.broker.call('activitypub.side-effects.processInbox', { activity, recipients: [inboxOwner] }); - } catch (e) { - // If some processors failed, log error message but don't stop - this.logger.error(e.message); - } - - // If this is a transient activity, we have no way to retrieve it - // so do not store it in the inbox (Mastodon works the same way) - if (activity.id && !activity.id.includes('#')) { - // Save the remote activity in the local triple store - await ctx.call('ldp.remote.store', { - resource: objectIdToCurrent(activity), - mirrorGraph: false, // Store in default graph as activity may not be public - keepInSync: false, // Activities are immutable - webId: inboxOwner - }); - - // Attach the activity to the activities container, in order to use the container options - await ctx.call('activitypub.activity.attach', { - resourceUri: activity.id, - webId: this.settings.podProvider ? inboxOwner : 'system' - }); - - // Attach the activity to the inbox - await ctx.call('activitypub.collection.add', { - collectionUri, - item: activity - }); - } else { - // If the activity cannot be retrieved, pass the full object - // This will be used in particular for Solid notifications - // which will send the full activity to the listeners - ctx.emit( - 'activitypub.collection.added', - { - collectionUri, - item: activity - }, - { meta: { webId: null, dataset: null } } - ); - } - - ctx.emit( - 'activitypub.inbox.received', - { - activity, - recipients: [inboxOwner], - local: false - }, - { meta: { webId: null, dataset: null } } - ); - }, - async getByDates(ctx) { - const { collectionUri, fromDate, toDate } = ctx.params; - - const filters = []; - if (fromDate) filters.push(`?published >= "${fromDate.toISOString()}"^^xsd:dateTime`); - if (toDate) filters.push(`?published < "${toDate.toISOString()}"^^xsd:dateTime`); - - const results = await ctx.call('triplestore.query', { - query: ` - PREFIX as: - PREFIX xsd: - SELECT DISTINCT ?activityUri - WHERE { - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items ?activityUri . - ?activityUri as:published ?published . - ${filters ? `FILTER (${filters.join(' && ')})` : ''} - } - ORDER BY ?published - `, - webId: 'system' - }); - - const activities = []; - - for (const activityUri of results.filter(node => node.activityUri).map(node => node.activityUri.value)) { - const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' }); - activities.push(activity); - } - - return activities; - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); - } - } -}; - -module.exports = InboxService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts new file mode 100644 index 000000000..0c6c8dc3e --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -0,0 +1,219 @@ +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { objectIdToCurrent, collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import { ACTOR_TYPES } from '../../../constants.ts'; +import AwaitActivityMixin from '../../../mixins/await-activity.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +/** @type {import('moleculer').ServiceSchema} */ +const InboxService = { + name: 'activitypub.inbox' as const, + mixins: [AwaitActivityMixin], + settings: { + podProvider: false, + collectionOptions: { + path: '/inbox', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'http://www.w3.org/ns/ldp#inbox', + ordered: true, + itemsPerPage: 10, + dereferenceItems: true, + sortPredicate: 'as:published', + sortOrder: 'semapps:DescOrder', + permissions: collectionPermissionsWithAnonRead + } + }, + dependencies: ['activitypub.collection', 'activitypub.collections-registry'], + async started() { + await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); + }, + actions: { + post: defineAction({ + async handler(ctx) { + const { collectionUri, ...activity } = ctx.params; + + if (!collectionUri || !collectionUri.startsWith('http')) { + throw new Error(`The collectionUri ${collectionUri} is not a valid URL`); + } + + if (!(await ctx.call('ldp.resource.exist', { resourceUri: collectionUri, webId: 'system' }))) { + throw E.NotFoundError(); + } + + // Ensure the actor in the activity is the same as the posting actor + // (When posting, the webId is the one of the poster) + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + if (activity.actor !== ctx.meta.webId) { + throw new E.UnAuthorizedError('INVALID_ACTOR', 'Activity actor is not the same as the posting actor'); + } + + const inboxOwner = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'inbox' }); + + // Verify that the account exists and has not been deleted + const account = await ctx.call('auth.account.findByWebId', { webId: inboxOwner }); + if (!account) throw new E.NotFoundError(); + if (account.deletedAt) throw new MoleculerError(`User does not exist anymore`, 410, 'GONE'); + + if (this.settings.podProvider) { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + ctx.meta.dataset = account.username; + } + + // We want the next operations to be done by the system + // TODO check if we can avoid this, as this is a bad practice + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = 'system'; + + const collectionExists = await ctx.call('activitypub.collection.exist', { + resourceUri: collectionUri, + webId: 'system' + }); + if (!collectionExists) { + throw new E.NotFoundError(); + } + + // @ts-expect-error TS(2339): Property 'skipSignatureValidation' does not exist ... Remove this comment to see the full error message + if (!ctx.meta.skipSignatureValidation) { + // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. + if (!ctx.meta.rawBody || !ctx.meta.originalHeaders) + throw new Error(`Cannot validate HTTP signature because of missing meta (rawBody or originalHeaders)`); + + const validDigest = await ctx.call('signature.verifyDigest', { + // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. + body: ctx.meta.rawBody, // Stored by parseRawBody middleware + // @ts-expect-error TS(2339): Property 'originalHeaders' does not exist on type ... Remove this comment to see the full error message + headers: ctx.meta.originalHeaders + }); + + const { isValid: validSignature } = await ctx.call('signature.verifyHttpSignature', { + url: collectionUri, + method: 'POST', + // @ts-expect-error TS(2339): Property 'originalHeaders' does not exist on type ... Remove this comment to see the full error message + headers: ctx.meta.originalHeaders + }); + + if (!validDigest || !validSignature) { + throw new E.UnAuthorizedError('INVALID_SIGNATURE'); + } + } + + // TODO check activity is valid + + try { + await this.broker.call('activitypub.side-effects.processInbox', { activity, recipients: [inboxOwner] }); + } catch (e) { + // If some processors failed, log error message but don't stop + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.error(e.message); + } + + // If this is a transient activity, we have no way to retrieve it + // so do not store it in the inbox (Mastodon works the same way) + if (activity.id && !activity.id.includes('#')) { + // Save the remote activity in the local triple store + await ctx.call('ldp.remote.store', { + resource: objectIdToCurrent(activity), + mirrorGraph: false, // Store in default graph as activity may not be public + keepInSync: false, // Activities are immutable + webId: inboxOwner + }); + + // Attach the activity to the activities container, in order to use the container options + await ctx.call('activitypub.activity.attach', { + resourceUri: activity.id, + webId: this.settings.podProvider ? inboxOwner : 'system' + }); + + // Attach the activity to the inbox + await ctx.call('activitypub.collection.add', { + collectionUri, + item: activity + }); + } else { + // If the activity cannot be retrieved, pass the full object + // This will be used in particular for Solid notifications + // which will send the full activity to the listeners + ctx.emit( + 'activitypub.collection.added', + { + collectionUri, + item: activity + }, + { meta: { webId: null, dataset: null } } + ); + } + + ctx.emit( + 'activitypub.inbox.received', + { + activity, + recipients: [inboxOwner], + local: false + }, + { meta: { webId: null, dataset: null } } + ); + } + }), + + getByDates: defineAction({ + async handler(ctx) { + const { collectionUri, fromDate, toDate } = ctx.params; + + const filters = []; + if (fromDate) filters.push(`?published >= "${fromDate.toISOString()}"^^xsd:dateTime`); + if (toDate) filters.push(`?published < "${toDate.toISOString()}"^^xsd:dateTime`); + + const results = await ctx.call('triplestore.query', { + query: ` + PREFIX as: + PREFIX xsd: + SELECT DISTINCT ?activityUri + WHERE { + <${collectionUri}> a as:Collection . + <${collectionUri}> as:items ?activityUri . + ?activityUri as:published ?published . + ${filters ? `FILTER (${filters.join(' && ')})` : ''} + } + ORDER BY ?published + `, + webId: 'system' + }); + + const activities = []; + + for (const activityUri of results + .filter((node: any) => node.activityUri) + .map((node: any) => node.activityUri.value)) { + const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' }); + activities.push(activity); + } + + return activities; + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset + }); + } + }) + } +} satisfies ServiceSchema; + +export default InboxService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [InboxService.name]: typeof InboxService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.js b/src/middleware/packages/activitypub/services/activitypub/subservices/like.js deleted file mode 100644 index 8cae157ca..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.js +++ /dev/null @@ -1,178 +0,0 @@ -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, ACTOR_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); - -const LikeService = { - name: 'activitypub.like', - mixins: [ActivitiesHandlerMixin], - settings: { - baseUri: null, - podProvider: false, - likesCollectionOptions: { - path: '/likes', - attachPredicate: 'https://www.w3.org/ns/activitystreams#likes', - ordered: false, - dereferenceItems: false, - permissions: collectionPermissionsWithAnonRead - }, - likedCollectionOptions: { - path: '/liked', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'https://www.w3.org/ns/activitystreams#liked', - ordered: false, - dereferenceItems: false, - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.outbox', 'activitypub.collection'], - async started() { - await this.broker.call('activitypub.collections-registry.register', this.settings.likedCollectionOptions); - }, - actions: { - async addObjectToActorLikedCollection(ctx) { - const { actorUri, objectUri } = ctx.params; - - const actor = await ctx.call('activitypub.actor.get', { actorUri }); - - // If a liked collection is attached to the actor, attach the object - if (actor.liked) { - await ctx.call('activitypub.collection.add', { - collectionUri: actor.liked, - item: objectUri - }); - } - }, - async addActorToObjectLikesCollection(ctx) { - const { actorUri, objectUri } = ctx.params; - - const likesCollectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { - objectUri, - collection: this.settings.likesCollectionOptions - }); - - await ctx.call('activitypub.collection.add', { - collectionUri: likesCollectionUri, - item: actorUri - }); - }, - async removeObjectFromActorLikedCollection(ctx) { - const { actorUri, objectUri } = ctx.params; - - const actor = await ctx.call('activitypub.actor.get', { actorUri }); - - // If a liked collection is attached to the actor, detach the object - if (actor.liked) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.liked, - item: objectUri - }); - } - }, - async removeActorFromObjectLikesCollection(ctx) { - const { actorUri, objectUri } = ctx.params; - - const object = await ctx.call('activitypub.object.get', { objectUri, actorUri }); - - // If a likes collection is attached to the object, detach the actor - if (object.likes) { - await ctx.call('activitypub.collection.remove', { - collectionUri: object.likes, - item: actorUri - }); - } - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.likesCollectionOptions, - dataset - }); - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.likedCollectionOptions, - dataset - }); - } - }, - activities: { - likeObject: { - match: { - type: ACTIVITY_TYPES.LIKE - }, - async onEmit(ctx, activity, emitterUri) { - if (!activity?.object) throw new Error(`No object in the Like activity`); - await this.actions.addObjectToActorLikedCollection( - { actorUri: activity.actor, objectUri: activity.object }, - { parentCtx: ctx } - ); - // In case there is no recipient, add the actor immediately to the collection - if (this.isLocalObject(activity.object, emitterUri)) { - await this.actions.addActorToObjectLikesCollection( - { actorUri: activity.actor, objectUri: activity.object }, - { parentCtx: ctx } - ); - } - }, - async onReceive(ctx, activity, recipientUri) { - if (this.isLocalObject(activity.object, recipientUri)) { - if (!activity?.object) throw new Error(`No object in the Like activity`); - await this.actions.addActorToObjectLikesCollection( - { actorUri: activity.actor, objectUri: activity.object }, - { parentCtx: ctx } - ); - } - } - }, - unlikeObject: { - match: { - type: ACTIVITY_TYPES.UNDO, - object: { - type: ACTIVITY_TYPES.LIKE - } - }, - async onEmit(ctx, activity, emitterUri) { - if (!activity.object?.object) throw new Error(`No object in the Like activity`); - await this.actions.removeObjectFromActorLikedCollection( - { actorUri: activity.actor, objectUri: activity.object.object }, - { parentCtx: ctx } - ); - // In case there is no recipient, remove the actor immediately from the collection - if (this.isLocalObject(activity.object.object, emitterUri)) { - await this.actions.removeActorFromObjectLikesCollection( - { actorUri: activity.actor, objectUri: activity.object.object }, - { parentCtx: ctx } - ); - } - }, - async onReceive(ctx, activity, recipientUri) { - if (this.isLocalObject(activity.object.object, recipientUri)) { - if (!activity.object?.object) throw new Error(`No object in the Like activity`); - await this.actions.removeActorFromObjectLikesCollection( - { actorUri: activity.actor, objectUri: activity.object.object }, - { parentCtx: ctx } - ); - } - } - } - }, - methods: { - isLocalObject(uri, actorUri) { - if (this.settings.podProvider) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(actorUri + '/') || - uri === aclBase || - uri.startsWith(aclBase + '/') || - uri === aclGroupBase || - uri.startsWith(aclGroupBase + '/') - ); - } else { - return uri.startsWith(this.settings.baseUri); - } - } - } -}; - -module.exports = LikeService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts new file mode 100644 index 000000000..0387da827 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -0,0 +1,211 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; + +const LikeService = { + name: 'activitypub.like' as const, + mixins: [ActivitiesHandlerMixin], + settings: { + baseUri: null, + podProvider: false, + likesCollectionOptions: { + path: '/likes', + attachPredicate: 'https://www.w3.org/ns/activitystreams#likes', + ordered: false, + dereferenceItems: false, + permissions: collectionPermissionsWithAnonRead + }, + likedCollectionOptions: { + path: '/liked', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'https://www.w3.org/ns/activitystreams#liked', + ordered: false, + dereferenceItems: false, + permissions: collectionPermissionsWithAnonRead + } + }, + dependencies: ['activitypub.outbox', 'activitypub.collection'], + async started() { + await this.broker.call('activitypub.collections-registry.register', this.settings.likedCollectionOptions); + }, + actions: { + addObjectToActorLikedCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; + + const actor = await ctx.call('activitypub.actor.get', { actorUri }); + + // If a liked collection is attached to the actor, attach the object + if (actor.liked) { + await ctx.call('activitypub.collection.add', { + collectionUri: actor.liked, + item: objectUri + }); + } + } + }), + + addActorToObjectLikesCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; + + const likesCollectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { + objectUri, + collection: this.settings.likesCollectionOptions + }); + + await ctx.call('activitypub.collection.add', { + collectionUri: likesCollectionUri, + item: actorUri + }); + } + }), + + removeObjectFromActorLikedCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; + + const actor = await ctx.call('activitypub.actor.get', { actorUri }); + + // If a liked collection is attached to the actor, detach the object + if (actor.liked) { + await ctx.call('activitypub.collection.remove', { + collectionUri: actor.liked, + item: objectUri + }); + } + } + }), + + removeActorFromObjectLikesCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; + + const object = await ctx.call('activitypub.object.get', { objectUri, actorUri }); + + // If a likes collection is attached to the object, detach the actor + if (object.likes) { + await ctx.call('activitypub.collection.remove', { + collectionUri: object.likes, + item: actorUri + }); + } + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.likesCollectionOptions, + dataset + }); + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.likedCollectionOptions, + dataset + }); + } + }) + }, + activities: { + likeObject: { + match: { + type: ACTIVITY_TYPES.LIKE + }, + async onEmit(ctx: any, activity: any, emitterUri: any) { + if (!activity?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addObjectToActorLikedCollection( + { actorUri: activity.actor, objectUri: activity.object }, + { parentCtx: ctx } + ); + // In case there is no recipient, add the actor immediately to the collection + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message + if (this.isLocalObject(activity.object, emitterUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addActorToObjectLikesCollection( + { actorUri: activity.actor, objectUri: activity.object }, + { parentCtx: ctx } + ); + } + }, + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message + if (this.isLocalObject(activity.object, recipientUri)) { + if (!activity?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addActorToObjectLikesCollection( + { actorUri: activity.actor, objectUri: activity.object }, + { parentCtx: ctx } + ); + } + } + }, + unlikeObject: { + match: { + type: ACTIVITY_TYPES.UNDO, + object: { + type: ACTIVITY_TYPES.LIKE + } + }, + async onEmit(ctx: any, activity: any, emitterUri: any) { + if (!activity.object?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeObjectFromActorLikedCollection( + { actorUri: activity.actor, objectUri: activity.object.object }, + { parentCtx: ctx } + ); + // In case there is no recipient, remove the actor immediately from the collection + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message + if (this.isLocalObject(activity.object.object, emitterUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeActorFromObjectLikesCollection( + { actorUri: activity.actor, objectUri: activity.object.object }, + { parentCtx: ctx } + ); + } + }, + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message + if (this.isLocalObject(activity.object.object, recipientUri)) { + if (!activity.object?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeActorFromObjectLikesCollection( + { actorUri: activity.actor, objectUri: activity.object.object }, + { parentCtx: ctx } + ); + } + } + } + }, + methods: { + isLocalObject(uri, actorUri) { + if (this.settings.podProvider) { + const { origin, pathname } = new URL(actorUri); + const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice + const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice + return ( + uri === actorUri || + uri.startsWith(`${actorUri}/`) || + uri === aclBase || + uri.startsWith(`${aclBase}/`) || + uri === aclGroupBase || + uri.startsWith(`${aclGroupBase}/`) + ); + } else { + return uri.startsWith(this.settings.baseUri); + } + } + } +} satisfies ServiceSchema; + +export default LikeService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LikeService.name]: typeof LikeService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js deleted file mode 100644 index bc114b26d..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js +++ /dev/null @@ -1,209 +0,0 @@ -const { getType } = require('@semapps/ldp'); -const { OBJECT_TYPES, ACTIVITY_TYPES } = require('../../../constants'); - -const ObjectService = { - name: 'activitypub.object', - settings: { - baseUri: null, - podProvider: false, - activateTombstones: true - }, - dependencies: ['ldp.resource'], - actions: { - async get(ctx) { - const { objectUri, actorUri, ...rest } = ctx.params; - - // If the object is already dereferenced, return it - if (typeof objectUri !== 'string') return objectUri; - - return await ctx.call('ldp.resource.get', { - resourceUri: objectUri, - webId: actorUri, - ...rest - }); - }, - // If an object is passed directly, wrap it in a Create activity - async wrap(ctx) { - const { activity } = ctx.params; - - if (Object.values(OBJECT_TYPES).includes(getType(activity))) { - const { to, cc, '@id': id, ...object } = activity; - return { - '@context': object['@context'], - type: ACTIVITY_TYPES.CREATE, - to, - cc, - actor: object.attributedTo, - object - }; - } else { - return activity; - } - }, - async process(ctx) { - let { activity, actorUri } = ctx.params; - let objectUri; - - switch (getType(activity)) { - case ACTIVITY_TYPES.CREATE: { - // If the object passed is an URI, this is an announcement and there is nothing to process - if (typeof activity.object === 'string') break; - - const types = await ctx.call('jsonld.parser.expandTypes', { - types: activity.object.type || activity.object['@type'], - context: activity['@context'] - }); - - // TODO: attach to all matching containers - let container, containerUri; - - if (this.settings.podProvider) { - // If this is a Pod provider, find the container with the type-registrations service - for (const type of types) { - const containersUris = await ctx.call('type-registrations.findContainersUris', { - type, - webId: actorUri - }); - if (containersUris.length > 0) { - containerUri = containersUris[0]; - continue; - } - } - } else { - // Otherwise try to find it with the LdpRegistry - container = await ctx.call('ldp.registry.getByType', { type: types }); - if (container) { - containerUri = await ctx.call('ldp.registry.getUri', { - path: container.path, - webId: actorUri - }); - } - } - - if (!containerUri) - throw new Error(`Cannot create resource of type "${types.join(', ')}", no matching containers were found!`); - - objectUri = await ctx.call( - container?.controlledActions?.post || 'ldp.container.post', - { - containerUri, - resource: activity.object, - webId: actorUri - }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger another Create action - } - } - ); - break; - } - - case ACTIVITY_TYPES.UPDATE: { - // If the object passed is an URI, this is an announcement and there is nothing to process - if (typeof activity.object === 'string') break; - - objectUri = activity.object['@id'] || activity.object.id; - - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: objectUri }); - - await ctx.call( - controlledActions?.put || 'ldp.resource.put', - { - resource: activity.object, - webId: actorUri - }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger another Update action - } - } - ); - - break; - } - - case ACTIVITY_TYPES.DELETE: { - if (activity.object) { - const resourceUri = typeof activity.object === 'string' ? activity.object : activity.object.id; - // If the resource is already deleted, it means it was an announcement - if (await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' })) { - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); - - await ctx.call( - controlledActions?.delete || 'ldp.resource.delete', - { resourceUri, webId: actorUri }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger another Delete action - } - } - ); - } - } else { - this.logger.warn('Cannot delete object as it is undefined'); - } - break; - } - - default: - break; - } - - if (objectUri) { - activity.object = await ctx.call( - 'ldp.resource.get', - { - resourceUri: objectUri, - webId: actorUri - }, - { meta: { $cache: false } } - ); - } - - return activity; - }, - async createTombstone(ctx) { - const { resourceUri, formerType } = ctx.params; - const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); - - // Insert directly the Tombstone in the triple store to avoid resource creation side-effects - await ctx.call('triplestore.insert', { - resource: { - '@id': resourceUri, - '@type': 'https://www.w3.org/ns/activitystreams#Tombstone', - 'https://www.w3.org/ns/activitystreams#formerType': expandedFormerTypes.map(type => ({ '@id': type })), - 'https://www.w3.org/ns/activitystreams#deleted': { - '@value': new Date().toISOString(), - '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' - } - }, - webId: 'system' - }); - } - }, - events: { - async 'ldp.resource.deleted'(ctx) { - // Check if tombstones are globally activated - if (this.settings.activateTombstones) { - const { resourceUri, containersUris, oldData, dataset } = ctx.params; - - // If the resource was in no container, skip... - if (containersUris.length > 0) { - // Check if tombstones are activated for this specific container - const containerOptions = await ctx.call('ldp.registry.getByUri', { - containerUri: containersUris[0], - dataset - }); - - if (containerOptions.activateTombstones !== false && ctx.meta.activateTombstones !== false) { - const formerType = oldData.type || oldData['@type']; - await this.actions.createTombstone({ resourceUri, formerType }, { meta: { dataset }, parentCtx: ctx }); - } - } - } - } - } -}; - -module.exports = ObjectService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts new file mode 100644 index 000000000..a3bc7de16 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -0,0 +1,240 @@ +import { getType } from '@semapps/ldp'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; + +const ObjectService = { + name: 'activitypub.object' as const, + settings: { + baseUri: null, + podProvider: false, + activateTombstones: true + }, + dependencies: ['ldp.resource'], + actions: { + get: defineAction({ + async handler(ctx) { + const { objectUri, actorUri, ...rest } = ctx.params; + + // If the object is already dereferenced, return it + if (typeof objectUri !== 'string') return objectUri; + + return await ctx.call('ldp.resource.get', { + resourceUri: objectUri, + webId: actorUri, + ...rest + }); + } + }), + + wrap: defineAction({ + // If an object is passed directly, wrap it in a Create activity + async handler(ctx) { + const { activity } = ctx.params; + + if (Object.values(OBJECT_TYPES).includes(getType(activity))) { + const { to, cc, '@id': id, ...object } = activity; + return { + '@context': object['@context'], + type: ACTIVITY_TYPES.CREATE, + to, + cc, + actor: object.attributedTo, + object + }; + } else { + return activity; + } + } + }), + + process: defineAction({ + async handler(ctx) { + let { activity, actorUri } = ctx.params; + let objectUri; + + switch (getType(activity)) { + case ACTIVITY_TYPES.CREATE: { + // If the object passed is an URI, this is an announcement and there is nothing to process + if (typeof activity.object === 'string') break; + + const types = await ctx.call('jsonld.parser.expandTypes', { + types: activity.object.type || activity.object['@type'], + context: activity['@context'] + }); + + // TODO: attach to all matching containers + let container; + let containerUri; + + if (this.settings.podProvider) { + // If this is a Pod provider, find the container with the type-registrations service + for (const type of types) { + const containersUris = await ctx.call('type-registrations.findContainersUris', { + type, + webId: actorUri + }); + if (containersUris.length > 0) { + containerUri = containersUris[0]; + continue; + } + } + } else { + // Otherwise try to find it with the LdpRegistry + container = await ctx.call('ldp.registry.getByType', { type: types }); + if (container) { + containerUri = await ctx.call('ldp.registry.getUri', { + path: container.path, + webId: actorUri + }); + } + } + + if (!containerUri) + throw new Error( + `Cannot create resource of type "${types.join(', ')}", no matching containers were found!` + ); + + objectUri = await ctx.call( + container?.controlledActions?.post || 'ldp.container.post', + { + containerUri, + resource: activity.object, + webId: actorUri + }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger another Create action + } + } + ); + break; + } + + case ACTIVITY_TYPES.UPDATE: { + // If the object passed is an URI, this is an announcement and there is nothing to process + if (typeof activity.object === 'string') break; + + objectUri = activity.object['@id'] || activity.object.id; + + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: objectUri }); + + await ctx.call( + controlledActions?.put || 'ldp.resource.put', + { + resource: activity.object, + webId: actorUri + }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger another Update action + } + } + ); + + break; + } + + case ACTIVITY_TYPES.DELETE: { + if (activity.object) { + const resourceUri = typeof activity.object === 'string' ? activity.object : activity.object.id; + // If the resource is already deleted, it means it was an announcement + if (await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' })) { + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); + + await ctx.call( + controlledActions?.delete || 'ldp.resource.delete', + { resourceUri, webId: actorUri }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger another Delete action + } + } + ); + } + } else { + this.logger.warn('Cannot delete object as it is undefined'); + } + break; + } + + default: + break; + } + + if (objectUri) { + activity.object = await ctx.call( + 'ldp.resource.get', + { + resourceUri: objectUri, + webId: actorUri + }, + { meta: { $cache: false } } + ); + } + + return activity; + } + }), + + createTombstone: defineAction({ + async handler(ctx) { + const { resourceUri, formerType } = ctx.params; + const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); + + // Insert directly the Tombstone in the triple store to avoid resource creation side-effects + await ctx.call('triplestore.insert', { + resource: { + '@id': resourceUri, + '@type': 'https://www.w3.org/ns/activitystreams#Tombstone', + 'https://www.w3.org/ns/activitystreams#formerType': expandedFormerTypes.map((type: any) => ({ + '@id': type + })), + 'https://www.w3.org/ns/activitystreams#deleted': { + '@value': new Date().toISOString(), + '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' + } + }, + webId: 'system' + }); + } + }) + }, + events: { + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // Check if tombstones are globally activated + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.activateTombstones) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, containersUris, oldData, dataset } = ctx.params; + + // If the resource was in no container, skip... + if (containersUris.length > 0) { + // Check if tombstones are activated for this specific container + const containerOptions = await ctx.call('ldp.registry.getByUri', { + containerUri: containersUris[0], + dataset + }); + + // @ts-expect-error TS(2339): Property 'activateTombstones' does not exist on ty... Remove this comment to see the full error message + if (containerOptions.activateTombstones !== false && ctx.meta.activateTombstones !== false) { + const formerType = oldData.type || oldData['@type']; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createTombstone({ resourceUri, formerType }, { meta: { dataset }, parentCtx: ctx }); + } + } + } + } + }) + } +} satisfies ServiceSchema; + +export default ObjectService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ObjectService.name]: typeof ObjectService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js deleted file mode 100644 index 2b77fbd70..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js +++ /dev/null @@ -1,321 +0,0 @@ -const fetch = require('node-fetch'); -const { Errors: E } = require('moleculer-web'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { getType, arrayOf } = require('@semapps/ldp'); -const { collectionPermissionsWithAnonRead, getSlugFromUri, objectIdToCurrent } = require('../../../utils'); -const { ACTOR_TYPES } = require('../../../constants'); -const AwaitActivityMixin = require('../../../mixins/await-activity'); - -const queueOptions = - process.env.NODE_ENV === 'test' - ? {} - : { - // Keep completed jobs for 3 days - removeOnComplete: { age: 259200 }, - // Try again after 3 minutes and until 48 hours later - // Method to calculate it: Math.round((Math.pow(2, attemptsMade) - 1) * delay) - attempts: 10, - backoff: { type: 'exponential', delay: '180000' } - }; - -const OutboxService = { - name: 'activitypub.outbox', - mixins: [AwaitActivityMixin], - settings: { - baseUri: null, - podProvider: false, - collectionOptions: { - path: '/outbox', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'https://www.w3.org/ns/activitystreams#outbox', - ordered: true, - itemsPerPage: 10, - dereferenceItems: true, - sortPredicate: 'as:published', - sortOrder: 'semapps:DescOrder', - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.object', 'activitypub.collection', 'activitypub.collections-registry'], - async started() { - await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); - }, - actions: { - async post(ctx) { - let { collectionUri, username, transient, ...activity } = ctx.params; - let activityUri; - - const collectionExists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!collectionExists) { - throw new E.NotFoundError(); - } - - const actorUri = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'outbox' }); - if (!actorUri) { - throw new E.BadRequestError('INVALID_COLLECTION', 'The collection is not a valid ActivityPub outbox'); - } - - // Ensure logged user is posting to his own outbox - if (ctx.meta.webId && ctx.meta.webId !== 'system' && actorUri !== ctx.meta.webId) { - throw new E.UnAuthorizedError( - 'UNAUTHORIZED', - `Forbidden to post to the outbox ${collectionUri} (webId ${ctx.meta.webId})` - ); - } - - if (this.settings.podProvider) { - ctx.meta.dataset = getSlugFromUri(actorUri); - } - - if (!activity['@context']) { - activity['@context'] = await ctx.call('jsonld.context.get'); - } - - // Wrap object in Create activity, if necessary - activity = await ctx.call('activitypub.object.wrap', { activity }); - - if (!ctx.meta.doNotProcessObject && transient !== true) { - // Process object create, update or delete - // and return an activity with the object ID - activity = await ctx.call('activitypub.object.process', { activity, actorUri }); - } - - if (!activity.actor) { - activity.actor = actorUri; - } - - // Use the current time for the activity's publish date - activity.published = new Date().toISOString(); - - if (transient === true) { - // Object or actor URI + hash with lower case activity - activityUri = `${activity.object || activity.actor}#${arrayOf(getType(activity))[0].toLowerCase()}`; - activity = { id: activityUri, ...activity }; - } else { - const activitiesContainerUri = await ctx.call('activitypub.activity.getContainerUri', { - webId: actorUri - }); - - // -- Persist Activity -- - // There might be a capability attached which cannot be persisted, if it has a non-resolvable id. - // So we won't persist it and re-attach it afterwards. - let { capability, ...activityToPersist } = activity; - - activityUri = await ctx.call('activitypub.activity.post', { - containerUri: activitiesContainerUri, - resource: activityToPersist, - contentType: MIME_TYPES.JSON, - webId: 'system' // Post as system since there is no write permission to the activities container - }); - - // Refetch because persisting has side-effects. - // And reattach capability for further processing (if present). - activity = { - ...(await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' })), - capability - }; - } - - try { - await ctx.call('activitypub.side-effects.processOutbox', { activity }); - } catch (e) { - if (transient !== true) { - await ctx.call('activitypub.activity.delete', { resourceUri: activityUri, webId: 'system' }); - } - // TODO unprocess objects - throw e; - } - - if (transient !== true) { - // Attach the newly-created activity to the outbox - await ctx.call('activitypub.collection.add', { - collectionUri, - item: activity - }); - } - - const localRecipients = []; - const remoteRecipients = []; - const recipients = await ctx.call('activitypub.activity.getRecipients', { activity }); - - for (const recipientUri of recipients) { - if (this.isLocalActor(recipientUri)) { - const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); - if (account) { - localRecipients.push(recipientUri); - } else { - this.logger.warn(`No local account found with webId ${recipientUri}`); - } - } else { - remoteRecipients.push(recipientUri); - } - } - - // Post to remote recipients - for (const recipientUri of remoteRecipients) { - this.createJob('remotePost', recipientUri, { recipientUri, activity }, queueOptions); - } - - // Send this event now, because the localPost method will emit activitypub.inbox.received event - ctx.emit('activitypub.outbox.posted', { activity }, { meta: { webId: null } }); - - // Post to local recipients - if (localRecipients.length > 0) { - // Call directly (but without waiting) - this.localPost(localRecipients, activity); - } - - return activity; - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); - } - }, - methods: { - isLocalActor(uri) { - return uri.startsWith(this.settings.baseUri); - }, - // TODO put this in the activitypub.inbox service - async localPost(recipients, activityToPost) { - // Leave the capability separate because we don't want to store it. - const { capability, ...activity } = activityToPost; - const success = []; - const failures = []; - - try { - await this.broker.call('activitypub.side-effects.processInbox', { activity: activityToPost, recipients }); - } catch (e) { - console.error(e); - // If some processors failed, log error message but don't stop - this.logger.error(e.message); - } - - for (const recipientUri of recipients) { - try { - const account = await this.broker.call('auth.account.findByWebId', { webId: recipientUri }); - if (!account) throw new Error(`No account found with webId ${recipientUri}`); - - const dataset = this.settings.podProvider ? account.username : undefined; - - const recipientInbox = await this.broker.call( - 'activitypub.actor.getCollectionUri', - { - actorUri: recipientUri, - predicate: 'inbox', - webId: 'system' - }, - { meta: { dataset } } - ); - - if (activity.id && !activity.id.includes('#')) { - // Attach activity to the inbox of the recipient - await this.broker.call( - 'activitypub.collection.add', - { - collectionUri: recipientInbox, - item: activity - }, - { meta: { dataset } } - ); - - if (this.settings.podProvider) { - // Store the activity in the dataset of the recipient - await this.broker.call('ldp.remote.store', { - resource: objectIdToCurrent(activity), - mirrorGraph: false, // Store in default graph as activity may not be public - keepInSync: false, // Activities are immutable - webId: recipientUri, - dataset - }); - - await this.broker.call( - 'activitypub.activity.attach', - { - resourceUri: activity.id, - webId: recipientUri - }, - { meta: { dataset } } - ); - } - } else { - // If the activity is transient, pass the full object - // This will be used in particular for Solid notifications - // which will send the full activity to the listeners - this.broker.emit( - 'activitypub.collection.added', - { - collectionUri: recipientInbox, - item: activity - }, - { meta: { webId: null, dataset: null } } - ); - } - - success.push(recipientUri); - } catch (e) { - this.logger.warn(`Error when posting activity to local actor ${recipientUri}: ${e.message}`); - failures.push(recipientUri); - } - } - - this.broker.emit('activitypub.inbox.received', { activity: activityToPost, recipients, local: true }); - - return { success, failures }; - } - }, - queues: { - remotePost: { - name: '*', - async process(job) { - const { activity, recipientUri } = job.data; - - // During tests, do not do post to remote servers - if (process.env.NODE_ENV === 'test' && !recipientUri.startsWith('http://localhost')) return; - - const recipientInbox = await this.broker.call('activitypub.actor.getCollectionUri', { - actorUri: recipientUri, - predicate: 'inbox', - webId: 'system' - }); - - if (!recipientInbox) { - throw new Error(`Error when posting activity to remote actor ${recipientUri}: no inbox attached`); - } - - const body = JSON.stringify(activity); - - const signatureHeaders = await this.broker.call('signature.generateSignatureHeaders', { - url: recipientInbox, - method: 'POST', - body, - actorUri: activity.actor - }); - - const response = await fetch(recipientInbox, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...signatureHeaders - }, - body - }); - - if (!response.ok) { - throw new Error( - `Error ${response.status} when posting activity ${activity.id} to remote actor ${recipientUri}: ${response.statusText}` - ); - } - - job.progress(100); - - return { ok: response.ok, status: response.status, statusText: response.statusText }; - } - } - } -}; - -module.exports = OutboxService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts new file mode 100644 index 000000000..ddb904ae0 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -0,0 +1,346 @@ +import fetch from 'node-fetch'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { getType, arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { collectionPermissionsWithAnonRead, getSlugFromUri, objectIdToCurrent } from '../../../utils.ts'; +import { ACTOR_TYPES } from '../../../constants.ts'; +import AwaitActivityMixin from '../../../mixins/await-activity.ts'; + +const queueOptions = + process.env.NODE_ENV === 'test' + ? {} + : { + // Keep completed jobs for 3 days + removeOnComplete: { age: 259200 }, + // Try again after 3 minutes and until 48 hours later + // Method to calculate it: Math.round((Math.pow(2, attemptsMade) - 1) * delay) + attempts: 10, + backoff: { type: 'exponential', delay: '180000' } + }; + +const OutboxService = { + name: 'activitypub.outbox' as const, + mixins: [AwaitActivityMixin], + settings: { + baseUri: null, + podProvider: false, + collectionOptions: { + path: '/outbox', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'https://www.w3.org/ns/activitystreams#outbox', + ordered: true, + itemsPerPage: 10, + dereferenceItems: true, + sortPredicate: 'as:published', + sortOrder: 'semapps:DescOrder', + permissions: collectionPermissionsWithAnonRead + } + }, + dependencies: ['activitypub.object', 'activitypub.collection', 'activitypub.collections-registry'], + async started() { + await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); + }, + actions: { + post: defineAction({ + async handler(ctx) { + let { collectionUri, username, transient, ...activity } = ctx.params; + let activityUri; + + const collectionExists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!collectionExists) { + throw new E.NotFoundError(); + } + + const actorUri = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'outbox' }); + if (!actorUri) { + throw new E.BadRequestError('INVALID_COLLECTION', 'The collection is not a valid ActivityPub outbox'); + } + + // Ensure logged user is posting to his own outbox + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + if (ctx.meta.webId && ctx.meta.webId !== 'system' && actorUri !== ctx.meta.webId) { + throw new E.UnAuthorizedError( + 'UNAUTHORIZED', + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + `Forbidden to post to the outbox ${collectionUri} (webId ${ctx.meta.webId})` + ); + } + + if (this.settings.podProvider) { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + ctx.meta.dataset = getSlugFromUri(actorUri); + } + + if (!activity['@context']) { + activity['@context'] = await ctx.call('jsonld.context.get'); + } + + // Wrap object in Create activity, if necessary + activity = await ctx.call('activitypub.object.wrap', { activity }); + + // @ts-expect-error TS(2339): Property 'doNotProcessObject' does not exist on ty... Remove this comment to see the full error message + if (!ctx.meta.doNotProcessObject && transient !== true) { + // Process object create, update or delete + // and return an activity with the object ID + activity = await ctx.call('activitypub.object.process', { activity, actorUri }); + } + + if (!activity.actor) { + activity.actor = actorUri; + } + + // Use the current time for the activity's publish date + activity.published = new Date().toISOString(); + + if (transient === true) { + // Object or actor URI + hash with lower case activity + activityUri = `${activity.object || activity.actor}#${arrayOf(getType(activity))[0].toLowerCase()}`; + activity = { id: activityUri, ...activity }; + } else { + const activitiesContainerUri = await ctx.call('activitypub.activity.getContainerUri', { + webId: actorUri + }); + + // -- Persist Activity -- + // There might be a capability attached which cannot be persisted, if it has a non-resolvable id. + // So we won't persist it and re-attach it afterwards. + let { capability, ...activityToPersist } = activity; + + activityUri = await ctx.call('activitypub.activity.post', { + containerUri: activitiesContainerUri, + resource: activityToPersist, + contentType: MIME_TYPES.JSON, + webId: 'system' // Post as system since there is no write permission to the activities container + }); + + // Refetch because persisting has side-effects. + // And reattach capability for further processing (if present). + activity = { + ...(await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' })), + capability + }; + } + + try { + await ctx.call('activitypub.side-effects.processOutbox', { activity }); + } catch (e) { + if (transient !== true) { + await ctx.call('activitypub.activity.delete', { resourceUri: activityUri, webId: 'system' }); + } + // TODO unprocess objects + throw e; + } + + if (transient !== true) { + // Attach the newly-created activity to the outbox + await ctx.call('activitypub.collection.add', { + collectionUri, + item: activity + }); + } + + const localRecipients = []; + const remoteRecipients = []; + const recipients = await ctx.call('activitypub.activity.getRecipients', { activity }); + + for (const recipientUri of recipients) { + if (this.isLocalActor(recipientUri)) { + const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); + if (account) { + localRecipients.push(recipientUri); + } else { + this.logger.warn(`No local account found with webId ${recipientUri}`); + } + } else { + remoteRecipients.push(recipientUri); + } + } + + // Post to remote recipients + for (const recipientUri of remoteRecipients) { + this.createJob('remotePost', recipientUri, { recipientUri, activity }, queueOptions); + } + + // Send this event now, because the localPost method will emit activitypub.inbox.received event + ctx.emit('activitypub.outbox.posted', { activity }, { meta: { webId: null } }); + + // Post to local recipients + if (localRecipients.length > 0) { + // Call directly (but without waiting) + this.localPost(localRecipients, activity); + } + + return activity; + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset + }); + } + }) + }, + methods: { + isLocalActor(uri) { + return uri.startsWith(this.settings.baseUri); + }, + // TODO put this in the activitypub.inbox service + async localPost(recipients, activityToPost) { + // Leave the capability separate because we don't want to store it. + const { capability, ...activity } = activityToPost; + const success = []; + const failures = []; + + try { + await this.broker.call('activitypub.side-effects.processInbox', { activity: activityToPost, recipients }); + } catch (e) { + console.error(e); + // If some processors failed, log error message but don't stop + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.error(e.message); + } + + for (const recipientUri of recipients) { + try { + const account = await this.broker.call('auth.account.findByWebId', { webId: recipientUri }); + if (!account) throw new Error(`No account found with webId ${recipientUri}`); + + const dataset = this.settings.podProvider ? account.username : undefined; + + const recipientInbox = await this.broker.call( + 'activitypub.actor.getCollectionUri', + { + actorUri: recipientUri, + predicate: 'inbox', + webId: 'system' + }, + { meta: { dataset } } + ); + + if (activity.id && !activity.id.includes('#')) { + // Attach activity to the inbox of the recipient + await this.broker.call( + 'activitypub.collection.add', + { + collectionUri: recipientInbox, + item: activity + }, + { meta: { dataset } } + ); + + if (this.settings.podProvider) { + // Store the activity in the dataset of the recipient + await this.broker.call('ldp.remote.store', { + resource: objectIdToCurrent(activity), + mirrorGraph: false, // Store in default graph as activity may not be public + keepInSync: false, // Activities are immutable + webId: recipientUri, + dataset + }); + + await this.broker.call( + 'activitypub.activity.attach', + { + resourceUri: activity.id, + webId: recipientUri + }, + { meta: { dataset } } + ); + } + } else { + // If the activity is transient, pass the full object + // This will be used in particular for Solid notifications + // which will send the full activity to the listeners + this.broker.emit( + 'activitypub.collection.added', + { + collectionUri: recipientInbox, + item: activity + }, + { meta: { webId: null, dataset: null } } + ); + } + + success.push(recipientUri); + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.warn(`Error when posting activity to local actor ${recipientUri}: ${e.message}`); + failures.push(recipientUri); + } + } + + this.broker.emit('activitypub.inbox.received', { activity: activityToPost, recipients, local: true }); + + return { success, failures }; + } + }, + queues: { + remotePost: { + name: '*', + // @ts-expect-error TS(7023): 'process' implicitly has return type 'any' because... Remove this comment to see the full error message + async process(job: any) { + const { activity, recipientUri } = job.data; + + // During tests, do not do post to remote servers + if (process.env.NODE_ENV === 'test' && !recipientUri.startsWith('http://localhost')) return; + + // @ts-expect-error TS(7022): 'recipientInbox' implicitly has type 'any' because... Remove this comment to see the full error message + const recipientInbox = await this.broker.call('activitypub.actor.getCollectionUri', { + actorUri: recipientUri, + predicate: 'inbox', + webId: 'system' + }); + + if (!recipientInbox) { + throw new Error(`Error when posting activity to remote actor ${recipientUri}: no inbox attached`); + } + + const body = JSON.stringify(activity); + + // @ts-expect-error TS(7022): 'signatureHeaders' implicitly has type 'any' becau... Remove this comment to see the full error message + const signatureHeaders = await this.broker.call('signature.generateSignatureHeaders', { + url: recipientInbox, + method: 'POST', + body, + actorUri: activity.actor + }); + + // @ts-expect-error TS(7022): 'response' implicitly has type 'any' because it do... Remove this comment to see the full error message + const response = await fetch(recipientInbox, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...signatureHeaders + }, + body + }); + + if (!response.ok) { + throw new Error( + `Error ${response.status} when posting activity ${activity.id} to remote actor ${recipientUri}: ${response.statusText}` + ); + } + + job.progress(100); + + return { ok: response.ok, status: response.status, statusText: response.statusText }; + } + } + } +} satisfies ServiceSchema; + +export default OutboxService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [OutboxService.name]: typeof OutboxService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js deleted file mode 100644 index c498d9041..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js +++ /dev/null @@ -1,140 +0,0 @@ -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); -const matchActivity = require('../../../utils/matchActivity'); - -const ReplyService = { - name: 'activitypub.reply', - mixins: [ActivitiesHandlerMixin], - settings: { - baseUri: null, - podProvider: false, - collectionOptions: { - path: '/replies', - attachPredicate: 'https://www.w3.org/ns/activitystreams#replies', - ordered: false, - dereferenceItems: true, - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.outbox', 'activitypub.collection'], - actions: { - async addReply(ctx) { - const { objectUri, replyUri } = ctx.params; - - // Create the /replies collection and attach it to the object, unless it already exists - const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { - objectUri, - collection: this.settings.collectionOptions - }); - - await ctx.call('activitypub.collection.add', { collectionUri, item: replyUri }); - }, - async removeReply(ctx) { - const { objectUri, replyUri } = ctx.params; - - const object = await ctx.call('activitypub.object.get', { objectUri }); - - // Remove the reply only if a /replies collection was attached to the object - if (object.replies) { - await ctx.call('activitypub.collection.remove', { collectionUri: object.replies, item: replyUri }); - } - }, - async removeFromAllRepliesCollections(ctx) { - const { objectUri } = ctx.params; - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX as: - DELETE { - ?collection as:items <${objectUri}> . - } - WHERE { - ?collection as:items <${objectUri}> . - ?collection a as:Collection . - ?object as:replies ?collection . - } - `, - webId: 'system' - }); - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); - } - }, - activities: { - postReply: { - async match(activity, fetcher) { - const { match, dereferencedActivity } = await matchActivity( - { - type: ACTIVITY_TYPES.CREATE, - object: { - type: OBJECT_TYPES.NOTE - } - }, - activity, - fetcher - ); - // We have a match only if there is a inReplyTo predicate to the object - return { match: match && dereferencedActivity.object.inReplyTo, dereferencedActivity }; - }, - async onEmit(ctx, activity, emitterUri) { - if (this.isLocalObject(activity.object.inReplyTo, emitterUri)) { - await this.actions.addReply( - { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, - { parentCtx: ctx } - ); - } - }, - async onReceive(ctx, activity, recipientUri) { - if (this.isLocalObject(activity.object.inReplyTo, recipientUri)) { - await this.actions.addReply( - { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, - { parentCtx: ctx } - ); - } - } - }, - deleteNote: { - match: { - type: ACTIVITY_TYPES.DELETE, - object: { - type: OBJECT_TYPES.TOMBSTONE, - formerType: 'as:Note' // JSON-LD doesn't remove prefixes for subjects - } - }, - async onEmit(ctx, activity) { - await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); - }, - async onReceive(ctx, activity) { - await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); - } - } - }, - methods: { - isLocalObject(uri, actorUri) { - if (this.settings.podProvider) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(actorUri + '/') || - uri === aclBase || - uri.startsWith(aclBase + '/') || - uri === aclGroupBase || - uri.startsWith(aclGroupBase + '/') - ); - } else { - return uri.startsWith(this.settings.baseUri); - } - } - } -}; - -module.exports = ReplyService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts new file mode 100644 index 000000000..ec0b7b9d9 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -0,0 +1,166 @@ +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import matchActivity from '../../../utils/matchActivity.ts'; + +const ReplyService = { + name: 'activitypub.reply' as const, + mixins: [ActivitiesHandlerMixin], + settings: { + baseUri: null, + podProvider: false, + collectionOptions: { + path: '/replies', + attachPredicate: 'https://www.w3.org/ns/activitystreams#replies', + ordered: false, + dereferenceItems: true, + permissions: collectionPermissionsWithAnonRead + } + }, + dependencies: ['activitypub.outbox', 'activitypub.collection'], + actions: { + addReply: defineAction({ + async handler(ctx) { + const { objectUri, replyUri } = ctx.params; + + // Create the /replies collection and attach it to the object, unless it already exists + const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { + objectUri, + collection: this.settings.collectionOptions + }); + + await ctx.call('activitypub.collection.add', { collectionUri, item: replyUri }); + } + }), + + removeReply: defineAction({ + async handler(ctx) { + const { objectUri, replyUri } = ctx.params; + + const object = await ctx.call('activitypub.object.get', { objectUri }); + + // Remove the reply only if a /replies collection was attached to the object + if (object.replies) { + await ctx.call('activitypub.collection.remove', { collectionUri: object.replies, item: replyUri }); + } + } + }), + + removeFromAllRepliesCollections: defineAction({ + async handler(ctx) { + const { objectUri } = ctx.params; + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX as: + DELETE { + ?collection as:items <${objectUri}> . + } + WHERE { + ?collection as:items <${objectUri}> . + ?collection a as:Collection . + ?object as:replies ?collection . + } + `, + webId: 'system' + }); + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset + }); + } + }) + }, + activities: { + postReply: { + async match(activity: any, fetcher: any) { + const { match, dereferencedActivity } = await matchActivity( + { + type: ACTIVITY_TYPES.CREATE, + object: { + type: OBJECT_TYPES.NOTE + } + }, + activity, + fetcher + ); + // We have a match only if there is a inReplyTo predicate to the object + return { match: match && dereferencedActivity.object.inReplyTo, dereferencedActivity }; + }, + async onEmit(ctx: any, activity: any, emitterUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message + if (this.isLocalObject(activity.object.inReplyTo, emitterUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addReply( + { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, + { parentCtx: ctx } + ); + } + }, + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message + if (this.isLocalObject(activity.object.inReplyTo, recipientUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addReply( + { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, + { parentCtx: ctx } + ); + } + } + }, + deleteNote: { + match: { + type: ACTIVITY_TYPES.DELETE, + object: { + type: OBJECT_TYPES.TOMBSTONE, + formerType: 'as:Note' // JSON-LD doesn't remove prefixes for subjects + } + }, + async onEmit(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); + }, + async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); + } + } + }, + methods: { + isLocalObject(uri, actorUri) { + if (this.settings.podProvider) { + const { origin, pathname } = new URL(actorUri); + const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice + const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice + return ( + uri === actorUri || + uri.startsWith(`${actorUri}/`) || + uri === aclBase || + uri.startsWith(`${aclBase}/`) || + uri === aclGroupBase || + uri.startsWith(`${aclGroupBase}/`) + ); + } else { + return uri.startsWith(this.settings.baseUri); + } + } + } +} satisfies ServiceSchema; + +export default ReplyService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ReplyService.name]: typeof ReplyService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.js b/src/middleware/packages/activitypub/services/activitypub/subservices/share.js deleted file mode 100644 index dd73d09b3..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.js +++ /dev/null @@ -1,100 +0,0 @@ -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); -const matchActivity = require('../../../utils/matchActivity'); - -const ShareService = { - name: 'activitypub.share', - mixins: [ActivitiesHandlerMixin], - settings: { - baseUri: null, - podProvider: false, - collectionOptions: { - path: '/shares', - attachPredicate: 'https://www.w3.org/ns/activitystreams#shares', - ordered: false, - dereferenceItems: false, - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.outbox', 'activitypub.collection'], - actions: { - async addShare(ctx) { - const { objectUri, announce } = ctx.params; - - // Create the /shares collection and attach it to the object, unless it already exists - const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { - objectUri, - collection: this.settings.collectionOptions - }); - - // Add the announce to the shares collection - await ctx.call('activitypub.collection.add', { collectionUri, item: announce.id }); - }, - async removeShare(ctx) { - const { objectUri, announce } = ctx.params; - - const object = await ctx.call('activitypub.object.get', { objectUri }); - - // If a shares collection is attached to the object, detach the announce - if (object?.shares) { - await ctx.call('activitypub.collection.remove', { - collectionUri: object.shares, - item: announce.id - }); - } - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); - } - }, - activities: { - shareObject: { - async match(activity, fetcher) { - const { match, dereferencedActivity } = await matchActivity( - { - // looking for an announce activity - type: ACTIVITY_TYPES.ANNOUNCE - }, - activity, - fetcher - ); - return { - match: match && (await this.broker.call('activitypub.activity.isPublic', { activity })), - dereferencedActivity - }; - }, - async onReceive(ctx, activity) { - await this.actions.addShare({ objectUri: activity.object, announce: activity }, { parentCtx: ctx }); - } - }, - unshareObject: { - async match(activity, fetcher) { - const { match, dereferencedActivity } = await matchActivity( - { - // looking for an undo activity targeting an announce activity - type: ACTIVITY_TYPES.UNDO, - object: { - type: ACTIVITY_TYPES.ANNOUNCE - } - }, - activity, - fetcher - ); - return { match, dereferencedActivity }; - }, - async onReceive(ctx, activity) { - await this.actions.removeShare( - { objectUri: activity.object?.object, announce: activity.object }, - { parentCtx: ctx } - ); - } - } - } -}; - -module.exports = ShareService; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts new file mode 100644 index 000000000..d9fa9fdf3 --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -0,0 +1,120 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import matchActivity from '../../../utils/matchActivity.ts'; + +const ShareService = { + name: 'activitypub.share' as const, + mixins: [ActivitiesHandlerMixin], + settings: { + baseUri: null, + podProvider: false, + collectionOptions: { + path: '/shares', + attachPredicate: 'https://www.w3.org/ns/activitystreams#shares', + ordered: false, + dereferenceItems: false, + permissions: collectionPermissionsWithAnonRead + } + }, + dependencies: ['activitypub.outbox', 'activitypub.collection'], + actions: { + addShare: defineAction({ + async handler(ctx) { + const { objectUri, announce } = ctx.params; + + // Create the /shares collection and attach it to the object, unless it already exists + const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { + objectUri, + collection: this.settings.collectionOptions + }); + + // Add the announce to the shares collection + await ctx.call('activitypub.collection.add', { collectionUri, item: announce.id }); + } + }), + + removeShare: defineAction({ + async handler(ctx) { + const { objectUri, announce } = ctx.params; + + const object = await ctx.call('activitypub.object.get', { objectUri }); + + // If a shares collection is attached to the object, detach the announce + if (object?.shares) { + await ctx.call('activitypub.collection.remove', { + collectionUri: object.shares, + item: announce.id + }); + } + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset + }); + } + }) + }, + activities: { + shareObject: { + async match(activity: any, fetcher: any) { + const { match, dereferencedActivity } = await matchActivity( + { + // looking for an announce activity + type: ACTIVITY_TYPES.ANNOUNCE + }, + activity, + fetcher + ); + return { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ match(... Remove this comment to see the full error message + match: match && (await this.broker.call('activitypub.activity.isPublic', { activity })), + dereferencedActivity + }; + }, + async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.addShare({ objectUri: activity.object, announce: activity }, { parentCtx: ctx }); + } + }, + unshareObject: { + async match(activity: any, fetcher: any) { + const { match, dereferencedActivity } = await matchActivity( + { + // looking for an undo activity targeting an announce activity + type: ACTIVITY_TYPES.UNDO, + object: { + type: ACTIVITY_TYPES.ANNOUNCE + } + }, + activity, + fetcher + ); + return { match, dereferencedActivity }; + }, + async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message + await this.actions.removeShare( + { objectUri: activity.object?.object, announce: activity.object }, + { parentCtx: ctx } + ); + } + } + } +} satisfies ServiceSchema; + +export default ShareService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ShareService.name]: typeof ShareService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts similarity index 75% rename from src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 743d3f35b..a184664f8 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -1,14 +1,15 @@ -const { credentialsContext } = require('@semapps/crypto'); -const { arrayOf } = require('@semapps/ldp'); -const matchActivity = require('../../../utils/matchActivity'); +import { credentialsContext } from '@semapps/crypto'; +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; +import matchActivity from '../../../utils/matchActivity.ts'; /** * Allow any service to process activities just after they are posted to the inbox or outbox. * It uses a jobs queue so that it is easy to watch and debug results * We recommend to use the ActivitiesHandlerMixin to make it easier to use this service. */ -module.exports = { - name: 'activitypub.side-effects', +const ActivitypubSideEffectsSchema = { + name: 'activitypub.side-effects' as const, settings: { podProvider: false }, @@ -16,51 +17,62 @@ module.exports = { this.processors = []; }, actions: { - /** - * Add a new processor to handle activities - */ - async addProcessor(ctx) { - const { matcher, actionName, boxTypes, key, capabilityGrantMatchFnGenerator, priority = 10 } = ctx.params; + addProcessor: defineAction({ + /** + * Add a new processor to handle activities + */ + async handler(ctx) { + const { matcher, actionName, boxTypes, key, capabilityGrantMatchFnGenerator, priority = 10 } = ctx.params; - this.processors.push({ matcher, actionName, boxTypes, key, priority, capabilityGrantMatchFnGenerator }); + this.processors.push({ matcher, actionName, boxTypes, key, priority, capabilityGrantMatchFnGenerator }); - // Sort processors by priority - this.processors.sort((a, b) => a.priority - b.priority); - }, - /** - * Called by activitypub.outbox.post when an activity is posted - */ - async processOutbox(ctx) { - const { activity } = ctx.params; - - const job = await this.createJob( - 'processOutbox', - activity.id, - { activity }, - { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days - ); - - await job.finished(); - }, - /** - * Called by activitypub.inbox.post when an activity is received - * and by activitypub.outbox.post when an activity is sent to a local actor - */ - async processInbox(ctx) { - const { activity, recipients } = ctx.params; - - const job = await this.createJob( - 'processInbox', - activity.id, - { activity, recipients }, - { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days - ); - - await job.finished(); - }, - getProcessors() { - return this.processors; - } + // Sort processors by priority + this.processors.sort((a: any, b: any) => a.priority - b.priority); + } + }), + + processOutbox: defineAction({ + /** + * Called by activitypub.outbox.post when an activity is posted + */ + async handler(ctx) { + const { activity } = ctx.params; + + const job = await this.createJob( + 'processOutbox', + activity.id, + { activity }, + { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days + ); + + await job.finished(); + } + }), + + processInbox: defineAction({ + /** + * Called by activitypub.inbox.post when an activity is received + * and by activitypub.outbox.post when an activity is sent to a local actor + */ + async handler(ctx) { + const { activity, recipients } = ctx.params; + + const job = await this.createJob( + 'processInbox', + activity.id, + { activity, recipients }, + { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days + ); + + await job.finished(); + } + }), + + getProcessors: defineAction({ + handler() { + return this.processors; + } + }) }, methods: { matchActivity(pattern, activity, fetcher) { @@ -80,6 +92,7 @@ module.exports = { return resource; } catch (e) { this.logger.warn( + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. `Could not fetch ${resourceUri} with webId ${webId} and dataset ${dataset}. Error: ${e.message}` ); return false; @@ -273,7 +286,7 @@ module.exports = { // the activitypub.outbox.post action is called by a processor, the jobs queue will halt // (the first job will stay in active state, the other one in pending state) concurrency: 5, - async process(job) { + async process(job: any) { const { activity, recipients } = job.data; const startTime = performance.now(); let errors = []; @@ -282,25 +295,32 @@ module.exports = { // If capability present, verify it. if (activity.capability) { // Will throw, if invalid + // @ts-expect-error TS(2339): Property 'verifyCapabilityIntegrity' does not exis... Remove this comment to see the full error message dereferencedActivity = await this.verifyCapabilityIntegrity(dereferencedActivity, recipients); } try { // Process activity for each recipient and activity handler. for (const recipientUri of recipients) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ name: ... Remove this comment to see the full error message this.logger.info(`Processing activity ${activity.id} received in the inbox of ${recipientUri}...`); job.log(`Processing activity for recipient ${recipientUri}...`); + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ name... Remove this comment to see the full error message const dataset = this.settings.podProvider - ? await this.broker.call('auth.account.findDatasetByWebId', { webId: recipientUri }) + ? // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message + await this.broker.call('auth.account.findDatasetByWebId', { webId: recipientUri }) : undefined; - const fetcher = resourceUri => this.fetch(resourceUri, recipientUri, dataset); + // @ts-expect-error TS(2339): Property 'fetch' does not exist on type '{ name: s... Remove this comment to see the full error message + const fetcher = (resourceUri: any) => this.fetch(resourceUri, recipientUri, dataset); + // @ts-expect-error TS(2551): Property 'processors' does not exist on type '{ na... Remove this comment to see the full error message for (const processor of this.processors) { if (processor.boxTypes.includes('inbox')) { let error; let match; let result; + // @ts-expect-error TS(2339): Property 'runInboxProcessor' does not exist on typ... Remove this comment to see the full error message ({ error, match, result, dereferencedActivity } = await this.runInboxProcessor({ processor, recipientUri, @@ -348,18 +368,22 @@ module.exports = { // the activitypub.outbox.post action is called by a processor, the jobs queue will halt // (the first job will stay in active state, the other one in pending state) concurrency: 5, - async process(job) { + async process(job: any) { const { activity } = job.data; const emitterUri = activity.actor; const startTime = performance.now(); let match; let dereferencedActivity = activity; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ name... Remove this comment to see the full error message const dataset = this.settings.podProvider - ? await this.broker.call('auth.account.findDatasetByWebId', { webId: emitterUri }) + ? // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message + await this.broker.call('auth.account.findDatasetByWebId', { webId: emitterUri }) : undefined; - const fetcher = resourceUri => this.fetch(resourceUri, emitterUri, dataset); + // @ts-expect-error TS(2339): Property 'fetch' does not exist on type '{ name: s... Remove this comment to see the full error message + const fetcher = (resourceUri: any) => this.fetch(resourceUri, emitterUri, dataset); + // @ts-expect-error TS(2551): Property 'processors' does not exist on type '{ na... Remove this comment to see the full error message for (const processor of this.processors) { if (processor.boxTypes.includes('outbox')) { // If the processor has a capabilityGrantMatchFnGenerator, the activity must have a capability. @@ -368,6 +392,7 @@ module.exports = { match = false; } else { // Even if there is no match, we keep in memory the dereferenced activity so that we don't need to dereference it again + // @ts-expect-error TS(2339): Property 'matchActivity' does not exist on type '{... Remove this comment to see the full error message ({ match, dereferencedActivity } = await this.matchActivity( processor.matcher, dereferencedActivity, @@ -377,6 +402,7 @@ module.exports = { if (match) { try { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message const result = await this.broker.call( processor.actionName, { @@ -395,6 +421,7 @@ module.exports = { }` ); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. job.log(`ERROR ${processor.key} (${processor.actionName}): ${e.message}`); // When sending through the outbox, we want to return immediately the error // TODO Call a new "revert" method for every side-effect processor ? @@ -415,4 +442,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default ActivitypubSideEffectsSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivitypubSideEffectsSchema.name]: typeof ActivitypubSideEffectsSchema; + } + } +} diff --git a/src/middleware/packages/activitypub/services/migration.js b/src/middleware/packages/activitypub/services/migration.js deleted file mode 100644 index a1dda30a8..000000000 --- a/src/middleware/packages/activitypub/services/migration.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = { - name: 'activitypub.migration', - actions: { - async updateCollectionsOptions(ctx) { - await ctx.call('activitypub.follow.updateCollectionsOptions'); - await ctx.call('activitypub.inbox.updateCollectionsOptions'); - await ctx.call('activitypub.outbox.updateCollectionsOptions'); - await ctx.call('activitypub.like.updateCollectionsOptions'); - await ctx.call('activitypub.reply.updateCollectionsOptions'); - }, - // This shouldn't be used in Pod provider config - async addCollectionsToContainer(ctx) { - const collectionsContainerUri = await ctx.call('activitypub.collection.getContainerUri'); - - this.logger.info(`Attaching all collections to ${collectionsContainerUri}`); - - await ctx.call('triplestore.update', { - query: ` - PREFIX as: - PREFIX ldp: - INSERT { - <${collectionsContainerUri}> ldp:contains ?collectionUri - } - WHERE { - ?collectionUri a as:Collection - } - `, - webId: 'system' - }); - } - } -}; diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts new file mode 100644 index 000000000..29b00c1f2 --- /dev/null +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -0,0 +1,49 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + +const ActivitypubMigrationSchema = { + name: 'activitypub.migration' as const, + actions: { + updateCollectionsOptions: defineAction({ + async handler(ctx) { + await ctx.call('activitypub.follow.updateCollectionsOptions'); + await ctx.call('activitypub.inbox.updateCollectionsOptions'); + await ctx.call('activitypub.outbox.updateCollectionsOptions'); + await ctx.call('activitypub.like.updateCollectionsOptions'); + await ctx.call('activitypub.reply.updateCollectionsOptions'); + } + }), + + addCollectionsToContainer: defineAction({ + // This shouldn't be used in Pod provider config + async handler(ctx) { + const collectionsContainerUri = await ctx.call('activitypub.collection.getContainerUri'); + + this.logger.info(`Attaching all collections to ${collectionsContainerUri}`); + + await ctx.call('triplestore.update', { + query: ` + PREFIX as: + PREFIX ldp: + INSERT { + <${collectionsContainerUri}> ldp:contains ?collectionUri + } + WHERE { + ?collectionUri a as:Collection + } + `, + webId: 'system' + }); + } + }) + } +} satisfies ServiceSchema; + +export default ActivitypubMigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivitypubMigrationSchema.name]: typeof ActivitypubMigrationSchema; + } + } +} diff --git a/src/middleware/packages/activitypub/services/relay.js b/src/middleware/packages/activitypub/services/relay.ts similarity index 84% rename from src/middleware/packages/activitypub/services/relay.js rename to src/middleware/packages/activitypub/services/relay.ts index c9a29be3e..32af476fb 100644 --- a/src/middleware/packages/activitypub/services/relay.js +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -1,9 +1,10 @@ -const urlJoin = require('url-join'); -const { ACTOR_TYPES } = require('../constants'); -const { delay } = require('../utils'); +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { ACTOR_TYPES } from '../constants.ts'; +import { delay } from '../utils.ts'; const RelayService = { - name: 'activitypub.relay', + name: 'activitypub.relay' as const, settings: { actor: { username: 'relay', @@ -69,13 +70,21 @@ const RelayService = { this.relayActor = await this.broker.call('activitypub.actor.awaitCreateComplete', { actorUri }); }, actions: { - getActor: { + getActor: defineAction({ visibility: 'public', handler() { return this.relayActor; } - } + }) } -}; +} satisfies ServiceSchema; + +export default RelayService; -module.exports = RelayService; +declare global { + export namespace Moleculer { + export interface AllServices { + [RelayService.name]: typeof RelayService; + } + } +} diff --git a/src/middleware/packages/activitypub/tsconfig.json b/src/middleware/packages/activitypub/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/activitypub/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/activitypub/utils.js b/src/middleware/packages/activitypub/utils.ts similarity index 69% rename from src/middleware/packages/activitypub/utils.js rename to src/middleware/packages/activitypub/utils.ts index 3f1360c2e..87d6c4114 100644 --- a/src/middleware/packages/activitypub/utils.js +++ b/src/middleware/packages/activitypub/utils.ts @@ -1,6 +1,7 @@ -const { ACTIVITY_TYPES } = require('./constants'); +import { ACTIVITY_TYPES } from './constants.ts'; -const objectCurrentToId = activityJson => { +// @ts-expect-error TS(7023): 'objectCurrentToId' implicitly has return type 'an... Remove this comment to see the full error message +const objectCurrentToId = (activityJson: any) => { if (activityJson.object && typeof activityJson.object === 'object' && activityJson.object.current) { const { current, ...object } = activityJson.object; return { @@ -14,7 +15,8 @@ const objectCurrentToId = activityJson => { return activityJson; }; -const objectIdToCurrent = activityJson => { +// @ts-expect-error TS(7023): 'objectIdToCurrent' implicitly has return type 'an... Remove this comment to see the full error message +const objectIdToCurrent = (activityJson: any) => { // If the activity has an object predicate, and this object is not an activity if ( activityJson.object && @@ -33,7 +35,7 @@ const objectIdToCurrent = activityJson => { return activityJson; }; -const collectionPermissionsWithAnonRead = webId => { +const collectionPermissionsWithAnonRead = (webId: any) => { const permissions = { anon: { read: true @@ -41,6 +43,7 @@ const collectionPermissionsWithAnonRead = webId => { }; if (webId !== 'anon' && webId !== 'system') { + // @ts-expect-error TS(2339): Property 'user' does not exist on type '{ anon: { ... Remove this comment to see the full error message permissions.user = { uri: webId, read: true, @@ -52,14 +55,14 @@ const collectionPermissionsWithAnonRead = webId => { return permissions; }; -const getSlugFromUri = str => str.match(new RegExp(`.*/(.*)`))[1]; +const getSlugFromUri = (str: any) => str.match(new RegExp(`.*/(.*)`))[1]; /** @deprecated Use the ldp.resource.getContainers action instead */ -const getContainerFromUri = str => str.match(new RegExp(`(.*)/.*`))[1]; +const getContainerFromUri = (str: any) => str.match(new RegExp(`(.*)/.*`))[1]; -const delay = t => new Promise(resolve => setTimeout(resolve, t)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -79,8 +82,8 @@ const arrayOf = value => { * `undefined`. * @type {import("./utilTypes").waitForResource} */ -const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { - let result; +const waitForResource = async (delayMs: any, fieldNames: any, maxTries: any, callback: any) => { + let result: any; for (let i = 0; i < maxTries; i += 1) { result = await callback(); // If a result (and the expected field, if required) is present, return. @@ -90,7 +93,7 @@ const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { await delay(delayMs); } - const missingProperties = result && fieldNames.filter(fieldName => !Object.keys(result).includes(fieldName)); + const missingProperties = result && fieldNames.filter((fieldName: any) => !Object.keys(result).includes(fieldName)); throw new Error( `Waiting for resource failed. No results after ${maxTries} tries. The resource is ${ @@ -99,7 +102,7 @@ const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { ); }; -const getValueFromDataType = result => { +const getValueFromDataType = (result: any) => { switch (result.datatype?.value) { case 'http://www.w3.org/2001/XMLSchema#boolean': return result.value === 'true'; @@ -112,7 +115,7 @@ const getValueFromDataType = result => { } }; -module.exports = { +export { objectCurrentToId, objectIdToCurrent, collectionPermissionsWithAnonRead, diff --git a/src/middleware/packages/activitypub/utils/matchActivity.js b/src/middleware/packages/activitypub/utils/matchActivity.ts similarity index 92% rename from src/middleware/packages/activitypub/utils/matchActivity.js rename to src/middleware/packages/activitypub/utils/matchActivity.ts index bdf5a2a45..d5410e1e4 100644 --- a/src/middleware/packages/activitypub/utils/matchActivity.js +++ b/src/middleware/packages/activitypub/utils/matchActivity.ts @@ -1,4 +1,4 @@ -const { arrayOf } = require('@semapps/ldp'); +import { arrayOf } from '@semapps/ldp'; /** * Match an activity against a pattern @@ -8,7 +8,7 @@ const { arrayOf } = require('@semapps/ldp'); * @param {(resourceUri) => Promise} fetcher Fetch the resources and return it in JSON-LD format, or false if the fetch failed * @returns {object} The dereferenced activity / object. */ -const matchActivity = async (matcher, activity, fetcher) => { +const matchActivity = async (matcher: any, activity: any, fetcher: any) => { if (!matcher) return { match: false, dereferencedActivity: activity }; if (matcher === '*') return { match: true, dereferencedActivity: activity }; @@ -47,4 +47,4 @@ const matchActivity = async (matcher, activity, fetcher) => { return { match: true, dereferencedActivity }; }; -module.exports = matchActivity; +export default matchActivity; diff --git a/src/middleware/packages/auth/index.js b/src/middleware/packages/auth/index.js deleted file mode 100644 index 5be77ecfe..000000000 --- a/src/middleware/packages/auth/index.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - AuthCASService: require('./services/auth.cas'), - AuthLocalService: require('./services/auth.local'), - AuthOIDCService: require('./services/auth.oidc'), - AuthAccountService: require('./services/account'), - AuthJWTService: require('./services/jwt'), - AuthMigrationService: require('./services/migration'), - AuthMailService: require('./services/mail') -}; diff --git a/src/middleware/packages/auth/index.ts b/src/middleware/packages/auth/index.ts new file mode 100644 index 000000000..a14ffe541 --- /dev/null +++ b/src/middleware/packages/auth/index.ts @@ -0,0 +1,17 @@ +import AuthCASService from './services/auth.cas.ts'; +import AuthLocalService from './services/auth.local.ts'; +import AuthOIDCService from './services/auth.oidc.ts'; +import AuthAccountService from './services/account.ts'; +import AuthJWTService from './services/jwt.ts'; +import AuthMigrationService from './services/migration.ts'; +import AuthMailService from './services/mail.ts'; + +export { + AuthCASService, + AuthLocalService, + AuthOIDCService, + AuthAccountService, + AuthJWTService, + AuthMigrationService, + AuthMailService +}; diff --git a/src/middleware/packages/auth/middlewares/localLogout.js b/src/middleware/packages/auth/middlewares/localLogout.js deleted file mode 100644 index 9d446188f..000000000 --- a/src/middleware/packages/auth/middlewares/localLogout.js +++ /dev/null @@ -1,6 +0,0 @@ -const localLogout = (req, res, next) => { - req.logout(); // Passport logout - next(); -}; - -module.exports = localLogout; diff --git a/src/middleware/packages/auth/middlewares/localLogout.ts b/src/middleware/packages/auth/middlewares/localLogout.ts new file mode 100644 index 000000000..5ef92bf2d --- /dev/null +++ b/src/middleware/packages/auth/middlewares/localLogout.ts @@ -0,0 +1,6 @@ +const localLogout = (req: any, res: any, next: any) => { + req.logout(); // Passport logout + next(); +}; + +export default localLogout; diff --git a/src/middleware/packages/auth/middlewares/redirectToFront.js b/src/middleware/packages/auth/middlewares/redirectToFront.ts similarity index 85% rename from src/middleware/packages/auth/middlewares/redirectToFront.js rename to src/middleware/packages/auth/middlewares/redirectToFront.ts index 01797fb2c..b490bf0a2 100644 --- a/src/middleware/packages/auth/middlewares/redirectToFront.js +++ b/src/middleware/packages/auth/middlewares/redirectToFront.ts @@ -1,4 +1,4 @@ -const redirectToFront = (req, res) => { +const redirectToFront = (req: any, res: any) => { // Redirect browser to the redirect URL pushed in session const redirectUrl = new URL(req.session.redirectUrl); if (req.user) { @@ -11,4 +11,4 @@ const redirectToFront = (req, res) => { res.end(); }; -module.exports = redirectToFront; +export default redirectToFront; diff --git a/src/middleware/packages/auth/middlewares/saveRedirectUrl.js b/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts similarity index 75% rename from src/middleware/packages/auth/middlewares/saveRedirectUrl.js rename to src/middleware/packages/auth/middlewares/saveRedirectUrl.ts index 392388379..8531c60d2 100644 --- a/src/middleware/packages/auth/middlewares/saveRedirectUrl.js +++ b/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts @@ -1,4 +1,4 @@ -const saveRedirectUrl = (req, res, next) => { +const saveRedirectUrl = (req: any, res: any, next: any) => { // Persist referer on the session to get it back after redirection // If the redirectUrl is already in the session, use it as default value req.session.redirectUrl = @@ -6,4 +6,4 @@ const saveRedirectUrl = (req, res, next) => { next(); }; -module.exports = saveRedirectUrl; +export default saveRedirectUrl; diff --git a/src/middleware/packages/auth/middlewares/sendToken.js b/src/middleware/packages/auth/middlewares/sendToken.ts similarity index 69% rename from src/middleware/packages/auth/middlewares/sendToken.js rename to src/middleware/packages/auth/middlewares/sendToken.ts index 721f41cb0..705f4755a 100644 --- a/src/middleware/packages/auth/middlewares/sendToken.js +++ b/src/middleware/packages/auth/middlewares/sendToken.ts @@ -1,6 +1,6 @@ -const sendToken = (req, res) => { +const sendToken = (req: any, res: any) => { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ token: req.user.token, webId: req.user.webId, newUser: req.user.newUser })); }; -module.exports = sendToken; +export default sendToken; diff --git a/src/middleware/packages/auth/mixins/auth.sso.js b/src/middleware/packages/auth/mixins/auth.sso.js deleted file mode 100644 index b6633e1ea..000000000 --- a/src/middleware/packages/auth/mixins/auth.sso.js +++ /dev/null @@ -1,93 +0,0 @@ -const path = require('path'); -const session = require('express-session'); -const AuthMixin = require('./auth'); -const saveRedirectUrl = require('../middlewares/saveRedirectUrl'); -const redirectToFront = require('../middlewares/redirectToFront'); -const localLogout = require('../middlewares/localLogout'); - -const AuthSSOMixin = { - mixins: [AuthMixin], - settings: { - baseUrl: null, - jwtPath: null, - registrationAllowed: true, - reservedUsernames: [], - webIdSelection: [], - // SSO-specific settings - sessionSecret: 's€m@pps', - selectSsoData: null - }, - actions: { - async loginOrSignup(ctx) { - const { ssoData } = ctx.params; - - const profileData = this.settings.selectSsoData ? await this.settings.selectSsoData(ssoData) : ssoData; - - // TODO use UUID to identify unique accounts with SSO - const existingAccounts = await ctx.call('auth.account.find', { query: { email: profileData.email } }); - - let accountData; - let webId; - let newUser; - if (existingAccounts.length > 0) { - accountData = existingAccounts[0]; - webId = accountData.webId; - newUser = false; - - // TODO update account with recent profileData information - - ctx.emit('auth.connected', { webId, accountData, ssoData }, { meta: { webId: null, dataset: null } }); - } else { - if (!this.settings.registrationAllowed) { - throw new Error('registration.not-allowed'); - } - - accountData = await ctx.call('auth.account.create', { - uuid: profileData.uuid, - email: profileData.email, - username: profileData.username - }); - webId = await ctx.call('webid.createWebId', this.pickWebIdData({ nick: accountData.username, ...profileData })); - newUser = true; - - // Link the webId with the account - await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); - - ctx.emit( - 'auth.registered', - { webId, profileData, accountData, ssoData }, - { meta: { webId: null, dataset: null } } - ); - } - - const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); - - return { token, newUser }; - } - }, - methods: { - getApiRoutes(basePath) { - const sessionMiddleware = session({ secret: this.settings.sessionSecret, maxAge: null }); - return [ - { - path: path.join(basePath, '/auth'), - name: 'auth', - use: [sessionMiddleware, this.passport.initialize(), this.passport.session()], - aliases: { - 'GET /': [saveRedirectUrl, this.passport.authenticate(this.passportId, { session: false }), redirectToFront] - } - }, - { - path: path.join(basePath, '/auth/logout'), - name: 'auth-logout', - use: [sessionMiddleware, this.passport.initialize(), this.passport.session()], - aliases: { - 'GET /': [saveRedirectUrl, localLogout, redirectToFront] - } - } - ]; - } - } -}; - -module.exports = AuthSSOMixin; diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts new file mode 100644 index 000000000..5ef67e77e --- /dev/null +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -0,0 +1,100 @@ +import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'expr... Remove this comment to see the full error message +import session from 'express-session'; +import { ServiceSchema, defineAction } from 'moleculer'; +import AuthMixin from './auth.ts'; +import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; +import redirectToFront from '../middlewares/redirectToFront.ts'; +import localLogout from '../middlewares/localLogout.ts'; + +const AuthSSOMixin = { + mixins: [AuthMixin], + settings: { + baseUrl: null, + jwtPath: null, + registrationAllowed: true, + reservedUsernames: [], + webIdSelection: [], + // SSO-specific settings + sessionSecret: 's€m@pps', + selectSsoData: null + }, + actions: { + loginOrSignup: defineAction({ + async handler(ctx) { + const { ssoData } = ctx.params; + + const profileData = this.settings.selectSsoData ? await this.settings.selectSsoData(ssoData) : ssoData; + + // TODO use UUID to identify unique accounts with SSO + const existingAccounts = await ctx.call('auth.account.find', { query: { email: profileData.email } }); + + let accountData; + let webId; + let newUser; + if (existingAccounts.length > 0) { + accountData = existingAccounts[0]; + webId = accountData.webId; + newUser = false; + + // TODO update account with recent profileData information + + ctx.emit('auth.connected', { webId, accountData, ssoData }, { meta: { webId: null, dataset: null } }); + } else { + if (!this.settings.registrationAllowed) { + throw new Error('registration.not-allowed'); + } + + accountData = await ctx.call('auth.account.create', { + uuid: profileData.uuid, + email: profileData.email, + username: profileData.username + }); + webId = await ctx.call( + 'webid.createWebId', + this.pickWebIdData({ nick: accountData.username, ...profileData }) + ); + newUser = true; + + // Link the webId with the account + await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); + + ctx.emit( + 'auth.registered', + { webId, profileData, accountData, ssoData }, + { meta: { webId: null, dataset: null } } + ); + } + + const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); + + return { token, newUser }; + } + }) + }, + methods: { + getApiRoutes(basePath) { + const sessionMiddleware = session({ secret: this.settings.sessionSecret, maxAge: null }); + return [ + { + path: path.join(basePath, '/auth'), + name: 'auth', + use: [sessionMiddleware, this.passport.initialize(), this.passport.session()], + aliases: { + 'GET /': [saveRedirectUrl, this.passport.authenticate(this.passportId, { session: false }), redirectToFront] + } + }, + { + path: path.join(basePath, '/auth/logout'), + name: 'auth-logout', + use: [sessionMiddleware, this.passport.initialize(), this.passport.session()], + aliases: { + 'GET /': [saveRedirectUrl, localLogout, redirectToFront] + } + } + ]; + } + } +} satisfies Partial; + +export default AuthSSOMixin; diff --git a/src/middleware/packages/auth/mixins/auth.js b/src/middleware/packages/auth/mixins/auth.ts similarity index 58% rename from src/middleware/packages/auth/mixins/auth.js rename to src/middleware/packages/auth/mixins/auth.ts index 99a0e8378..13472c4f2 100644 --- a/src/middleware/packages/auth/mixins/auth.js +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -1,8 +1,11 @@ -const passport = require('passport'); -const { Errors: E } = require('moleculer-web'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const AuthAccountService = require('../services/account'); -const AuthJWTService = require('../services/jwt'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message +import passport from 'passport'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; +import AuthAccountService from '../services/account.ts'; +import AuthJWTService from '../services/jwt.ts'; /** * Auth Mixin that handles authentication and authorization for routes @@ -76,11 +79,13 @@ const AuthMixin = { const { jwtPath, reservedUsernames, minPasswordLength, minUsernameLength, accountsDataset, podProvider } = this.settings; + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth.jwt"; se... Remove this comment to see the full error message this.broker.createService({ mixins: [AuthJWTService], settings: { jwtPath } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth.account"... Remove this comment to see the full error message this.broker.createService({ mixins: [AuthAccountService], settings: { reservedUsernames, minPasswordLength, minUsernameLength }, @@ -91,10 +96,10 @@ const AuthMixin = { if (!this.passportId) throw new Error('this.passportId must be set in the service creation.'); this.passport = passport; - this.passport.serializeUser((user, done) => { + this.passport.serializeUser((user: any, done: any) => { done(null, user); }); - this.passport.deserializeUser((user, done) => { + this.passport.deserializeUser((user: any, done: any) => { done(null, user); }); @@ -109,24 +114,70 @@ const AuthMixin = { } }, actions: { - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication - async authenticate(ctx) { - const { route, req, res } = ctx.params; - // Extract method and token from authorization header. - const [method, token] = req.headers.authorization?.split(' ') || []; - - if (!token) { - // No token + authenticate: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication + async handler(ctx) { + const { route, req, res } = ctx.params; + // Extract method and token from authorization header. + const [method, token] = req.headers.authorization?.split(' ') || []; + + if (!token) { + // No token + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = 'anon'; + return Promise.resolve(null); + } + + if (method === 'Bearer') { + const payload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); + if (payload) { + // @ts-expect-error TS(2339): Property 'tokenPayload' does not exist on type '{}... Remove this comment to see the full error message + ctx.meta.tokenPayload = payload; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = payload.webId; + return Promise.resolve(payload); + } + + // Check if token is a capability. + if (route.opts.authorizeWithCapability) { + return this.validateCapability(ctx, token); + } + + // Invalid token + // TODO make sure token is deleted client-side + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + } + + // No valid auth method given. + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.resolve(null); } + }), - if (method === 'Bearer') { - const payload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); - if (payload) { - ctx.meta.tokenPayload = payload; - ctx.meta.webId = payload.webId; - return Promise.resolve(payload); + authorize: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization + async handler(ctx) { + const { route, req, res } = ctx.params; + // Extract token from authorization header (do not take the Bearer part) + /** @type {[string, string]} */ + const [method, token] = req.headers.authorization && req.headers.authorization.split(' '); + + if (!token) { + return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); + } + if (method !== 'Bearer') { + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + } + + // Validate if the token was signed by server (registered user). + const serverSignedPayload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); + if (serverSignedPayload) { + // @ts-expect-error TS(2339): Property 'tokenPayload' does not exist on type '{}... Remove this comment to see the full error message + ctx.meta.tokenPayload = serverSignedPayload; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = serverSignedPayload.webId; + return Promise.resolve(serverSignedPayload); } // Check if token is a capability. @@ -134,54 +185,20 @@ const AuthMixin = { return this.validateCapability(ctx, token); } - // Invalid token - // TODO make sure token is deleted client-side - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); - } - - // No valid auth method given. - ctx.meta.webId = 'anon'; - return Promise.resolve(null); - }, - - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization - async authorize(ctx) { - const { route, req, res } = ctx.params; - // Extract token from authorization header (do not take the Bearer part) - /** @type {[string, string]} */ - const [method, token] = req.headers.authorization && req.headers.authorization.split(' '); - - if (!token) { - return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); - } - if (method !== 'Bearer') { return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } + }), - // Validate if the token was signed by server (registered user). - const serverSignedPayload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); - if (serverSignedPayload) { - ctx.meta.tokenPayload = serverSignedPayload; - ctx.meta.webId = serverSignedPayload.webId; - return Promise.resolve(serverSignedPayload); + impersonate: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + return await ctx.call('auth.jwt.generateServerSignedToken', { + payload: { + webId + } + }); } - - // Check if token is a capability. - if (route.opts.authorizeWithCapability) { - return this.validateCapability(ctx, token); - } - - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); - }, - - async impersonate(ctx) { - const { webId } = ctx.params; - return await ctx.call('auth.jwt.generateServerSignedToken', { - payload: { - webId - } - }); - } + }) }, methods: { async validateCapability(ctx, token) { @@ -225,7 +242,9 @@ const AuthMixin = { }, pickWebIdData(data) { if (this.settings.webIdSelection.length > 0) { - return Object.fromEntries(this.settings.webIdSelection.filter(key => key in data).map(key => [key, data[key]])); + return Object.fromEntries( + this.settings.webIdSelection.filter((key: any) => key in data).map((key: any) => [key, data[key]]) + ); } else { // TODO do not return anything if webIdSelection is empty, to conform with pickAccountData return data || {}; @@ -234,13 +253,13 @@ const AuthMixin = { pickAccountData(data) { if (this.settings.accountSelection.length > 0) { return Object.fromEntries( - this.settings.accountSelection.filter(key => key in data).map(key => [key, data[key]]) + this.settings.accountSelection.filter((key: any) => key in data).map((key: any) => [key, data[key]]) ); } else { return {}; } } } -}; +} satisfies Partial; -module.exports = AuthMixin; +export default AuthMixin; diff --git a/src/middleware/packages/auth/package.json b/src/middleware/packages/auth/package.json index 5bcb456b5..00bdf4b76 100644 --- a/src/middleware/packages/auth/package.json +++ b/src/middleware/packages/auth/package.json @@ -12,7 +12,6 @@ "bcrypt": "^5.0.1", "express-session": "^1.17.0", "jsonwebtoken": "^9.0.2", - "moleculer": "^0.14.17", "moleculer-db": "^0.8.16", "moleculer-mail": "^1.2.5", "moleculer-web": "^0.10.0-beta1", @@ -25,9 +24,15 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/auth/services/account.js b/src/middleware/packages/auth/services/account.js deleted file mode 100644 index 12ccb9a3e..000000000 --- a/src/middleware/packages/auth/services/account.js +++ /dev/null @@ -1,315 +0,0 @@ -const bcrypt = require('bcrypt'); -const createSlug = require('speakingurl'); -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const crypto = require('crypto'); - -// Taken from https://stackoverflow.com/a/9204568/7900695 -const emailRegexp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - -module.exports = { - name: 'auth.account', - mixins: [DbService], - adapter: new TripleStoreAdapter({ type: 'AuthAccount', dataset: 'settings' }), - settings: { - idField: '@id', - reservedUsernames: ['relay'], - minPasswordLength: 1, - minUsernameLength: 1 - }, - dependencies: ['triplestore'], - actions: { - async create(ctx) { - let { uuid, username, password, email, webId, ...rest } = ctx.params; - - // FORMAT AND VERIFY PASSWORD - - if (password) { - if (password.length < this.settings.minPasswordLength) { - throw new Error('password.too-short'); - } - - password = await this.hashPassword(password); - } - - // FORMAT AND VERIFY EMAIL - - if (email) { - email = email.toLowerCase(); - - const emailExists = await ctx.call('auth.account.emailExists', { email }); - if (emailExists) { - throw new Error('email.already.exists'); - } - - if (!emailRegexp.test(email)) { - throw new Error('email.invalid'); - } - } - - // FORMAT AND VERIFY USERNAME - - if (username) { - if (!ctx.meta.isSystemCall) { - const { isValid, error } = await this.isValidUsername(ctx, username); - if (!isValid) throw new Error(error); - } - } else if (email) { - // If username is not provided, find one automatically from the email (without errors) - username = createSlug(email.split('@')[0].toLowerCase()); - - let { isValid, error } = await this.isValidUsername(ctx, username); - - if (!isValid) { - if (error === 'username.invalid' || error === 'username.too-short') { - // If username generated from email is invalid, use a generic name - username = 'user'; - } - - // If necessary, add a number after the username - let i = 0; - do { - username = i === 0 ? username : username + i; - ({ isValid } = await this.isValidUsername(ctx, username)); - } while (!isValid); - } - } else { - throw new Error('You must provide at least a username or an email address'); - } - - return await this._create(ctx, { - ...rest, - uuid, - username, - email, - hashedPassword: password, - webId - }); - }, - async attachWebId(ctx) { - const { accountUri, webId } = ctx.params; - - return await this._update(ctx, { - '@id': accountUri, - webId - }); - }, - async verify(ctx) { - const { username, password } = ctx.params; - - // If the username includes a @, assume it is an email - const query = username.includes('@') ? { email: username } : { username }; - - const accounts = await this._find(ctx, { query }); - - if (accounts.length > 0) { - const passwordMatch = await this.comparePassword(password, accounts[0].hashedPassword); - if (passwordMatch) { - return accounts[0]; - } - throw new Error('account.not-found'); - } else { - throw new Error('account.not-found'); - } - }, - async usernameExists(ctx) { - const { username } = ctx.params; - const accounts = await this._find(ctx, { query: { username } }); - return accounts.length > 0; - }, - async emailExists(ctx) { - const { email } = ctx.params; - const accounts = await this._find(ctx, { query: { email } }); - return accounts.length > 0; - }, - /** Overwrite find method, to filter accounts with tombstone. */ - async find(ctx) { - /** @type {object[]} */ - const accounts = await this._find(ctx, ctx.params); - return accounts.filter(account => !account.deletedAt); - }, - async findByUsername(ctx) { - const { username } = ctx.params; - const accounts = await this._find(ctx, { query: { username } }); - return accounts.length > 0 ? accounts[0] : null; - }, - async findByWebId(ctx) { - const { webId } = ctx.params; - const accounts = await this._find(ctx, { query: { webId } }); - return accounts.length > 0 ? accounts[0] : null; - }, - async findByEmail(ctx) { - const { email } = ctx.params; - const accounts = await this._find(ctx, { query: { email } }); - return accounts.length > 0 ? accounts[0] : null; - }, - async setPassword(ctx) { - const { webId, password } = ctx.params; - const hashedPassword = await this.hashPassword(password); - const account = await ctx.call('auth.account.findByWebId', { webId }); - - return await this._update(ctx, { - '@id': account['@id'], - hashedPassword - }); - }, - async setNewPassword(ctx) { - const { webId, token, password } = ctx.params; - const hashedPassword = await this.hashPassword(password); - const account = await ctx.call('auth.account.findByWebId', { webId }); - - if (account.resetPasswordToken !== token) { - throw new Error('auth.password.invalid_reset_token'); - } - - return await this._update(ctx, { - '@id': account['@id'], - hashedPassword, - resetPasswordToken: undefined - }); - }, - async generateResetPasswordToken(ctx) { - const { webId } = ctx.params; - const resetPasswordToken = await this.generateResetPasswordToken(); - const account = await ctx.call('auth.account.findByWebId', { webId }); - - await this._update(ctx, { - '@id': account['@id'], - resetPasswordToken - }); - - return resetPasswordToken; - }, - async findDatasetByWebId(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; - const account = await ctx.call('auth.account.findByWebId', { webId }); - return account?.username; - }, - async findSettingsByWebId(ctx) { - const webId = ctx.meta.webId; - - const account = await ctx.call('auth.account.findByWebId', { webId }); - - return { - email: account.email, - preferredLocale: account.preferredLocale - }; - }, - async updateAccountSettings(ctx) { - const { currentPassword, email, newPassword } = ctx.params; - const { webId } = ctx.meta; - const account = await ctx.call('auth.account.findByWebId', { webId }); - const passwordMatch = await this.comparePassword(currentPassword, account.hashedPassword); - let params = {}; - - if (!passwordMatch) { - throw new Error('auth.account.invalid_password'); - } - - if (newPassword) { - const hashedPassword = await this.hashPassword(newPassword); - params = { ...params, hashedPassword }; - } - - if (email !== account.email) { - const existing = await ctx.call('auth.account.findByEmail', { email }); - if (existing) { - throw new Error('email.already.exists'); - } - - params = { ...params, email }; - } - - return await this._update(ctx, { - '@id': account['@id'], - ...params - }); - }, - async deleteByWebId(ctx) { - const { webId } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId }); - - if (account) { - await this._remove(ctx, { id: account['@id'] }); - return true; - } - - return false; - }, - // Remove email and password from an account, set deletedAt timestamp. - async setTombstone(ctx) { - const { webId } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId }); - - return await this._update(ctx, { - // Set all values to undefined... - ...Object.fromEntries(Object.keys(account).map(key => [key, null])), - '@id': account['@id'], - // ...except for - webId: account.webId, - username: account.username, - // And add a deletedAt date. - deletedAt: new Date().toISOString() - }); - } - }, - methods: { - async isValidUsername(ctx, username) { - let error; - - // Ensure the username has no space or special characters - if (!/^[a-z0-9\-+_.]+$/.exec(username)) { - error = 'username.invalid'; - } - - if (username.length < this.settings.minUsernameLength) { - error = 'username.too-short'; - } - - // Ensure we don't use reservedUsernames - if (this.settings.reservedUsernames.includes(username)) { - error = 'username.reserved'; - } - - // Ensure username doesn't already exist - const usernameExists = await ctx.call('auth.account.usernameExists', { username }); - if (usernameExists) { - error = 'username.already.exists'; - } - - return { isValid: !error, error }; - }, - async hashPassword(password) { - return new Promise((resolve, reject) => { - bcrypt.hash(password, 10, (err, hash) => { - if (err) { - reject(err); - } else { - resolve(hash); - } - }); - }); - }, - async comparePassword(password, hash) { - return new Promise(resolve => { - bcrypt.compare(password, hash, (err, res) => { - if (res === true) { - resolve(true); - } else { - resolve(false); - } - }); - }); - }, - async generateResetPasswordToken() { - return new Promise((resolve, reject) => { - crypto.randomBytes(32, (ex, buf) => { - if (ex) { - reject(ex); - } - resolve(buf.toString('hex')); - }); - }); - } - } -}; diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts new file mode 100644 index 000000000..ded3c49ff --- /dev/null +++ b/src/middleware/packages/auth/services/account.ts @@ -0,0 +1,382 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'bcry... Remove this comment to see the full error message +import bcrypt from 'bcrypt'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'spea... Remove this comment to see the full error message +import createSlug from 'speakingurl'; +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import crypto from 'crypto'; +import { ServiceSchema, defineAction } from 'moleculer'; + +// Taken from https://stackoverflow.com/a/9204568/7900695 +const emailRegexp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + +const AuthAccountSchema = { + name: 'auth.account' as const, + mixins: [DbService], + adapter: new TripleStoreAdapter({ type: 'AuthAccount', dataset: 'settings' }), + settings: { + idField: '@id', + reservedUsernames: ['relay'], + minPasswordLength: 1, + minUsernameLength: 1 + }, + dependencies: ['triplestore'], + actions: { + create: defineAction({ + async handler(ctx) { + let { uuid, username, password, email, webId, ...rest } = ctx.params; + + // FORMAT AND VERIFY PASSWORD + + if (password) { + if (password.length < this.settings.minPasswordLength) { + throw new Error('password.too-short'); + } + + password = await this.hashPassword(password); + } + + // FORMAT AND VERIFY EMAIL + + if (email) { + email = email.toLowerCase(); + + const emailExists = await ctx.call('auth.account.emailExists', { email }); + if (emailExists) { + throw new Error('email.already.exists'); + } + + if (!emailRegexp.test(email)) { + throw new Error('email.invalid'); + } + } + + // FORMAT AND VERIFY USERNAME + + if (username) { + // @ts-expect-error TS(2339): Property 'isSystemCall' does not exist on type '{}... Remove this comment to see the full error message + if (!ctx.meta.isSystemCall) { + const { isValid, error } = await this.isValidUsername(ctx, username); + if (!isValid) throw new Error(error); + } + } else if (email) { + // If username is not provided, find one automatically from the email (without errors) + username = createSlug(email.split('@')[0].toLowerCase()); + + let { isValid, error } = await this.isValidUsername(ctx, username); + + if (!isValid) { + if (error === 'username.invalid' || error === 'username.too-short') { + // If username generated from email is invalid, use a generic name + username = 'user'; + } + + // If necessary, add a number after the username + let i = 0; + do { + username = i === 0 ? username : username + i; + ({ isValid } = await this.isValidUsername(ctx, username)); + } while (!isValid); + } + } else { + throw new Error('You must provide at least a username or an email address'); + } + + return await this._create(ctx, { + ...rest, + uuid, + username, + email, + hashedPassword: password, + webId + }); + } + }), + + attachWebId: defineAction({ + async handler(ctx) { + const { accountUri, webId } = ctx.params; + + return await this._update(ctx, { + '@id': accountUri, + webId + }); + } + }), + + verify: defineAction({ + async handler(ctx) { + const { username, password } = ctx.params; + + // If the username includes a @, assume it is an email + const query = username.includes('@') ? { email: username } : { username }; + + const accounts = await this._find(ctx, { query }); + + if (accounts.length > 0) { + const passwordMatch = await this.comparePassword(password, accounts[0].hashedPassword); + if (passwordMatch) { + return accounts[0]; + } + throw new Error('account.not-found'); + } else { + throw new Error('account.not-found'); + } + } + }), + + usernameExists: defineAction({ + async handler(ctx) { + const { username } = ctx.params; + const accounts = await this._find(ctx, { query: { username } }); + return accounts.length > 0; + } + }), + + emailExists: defineAction({ + async handler(ctx) { + const { email } = ctx.params; + const accounts = await this._find(ctx, { query: { email } }); + return accounts.length > 0; + } + }), + + find: defineAction({ + /** Overwrite find method, to filter accounts with tombstone. */ + async handler(ctx) { + /** @type {object[]} */ + const accounts = await this._find(ctx, ctx.params); + return accounts.filter((account: any) => !account.deletedAt); + } + }), + + findByUsername: defineAction({ + async handler(ctx) { + const { username } = ctx.params; + const accounts = await this._find(ctx, { query: { username } }); + return accounts.length > 0 ? accounts[0] : null; + } + }), + + findByWebId: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const accounts = await this._find(ctx, { query: { webId } }); + return accounts.length > 0 ? accounts[0] : null; + } + }), + + findByEmail: defineAction({ + async handler(ctx) { + const { email } = ctx.params; + const accounts = await this._find(ctx, { query: { email } }); + return accounts.length > 0 ? accounts[0] : null; + } + }), + + setPassword: defineAction({ + async handler(ctx) { + const { webId, password } = ctx.params; + const hashedPassword = await this.hashPassword(password); + const account = await ctx.call('auth.account.findByWebId', { webId }); + + return await this._update(ctx, { + '@id': account['@id'], + hashedPassword + }); + } + }), + + setNewPassword: defineAction({ + async handler(ctx) { + const { webId, token, password } = ctx.params; + const hashedPassword = await this.hashPassword(password); + const account = await ctx.call('auth.account.findByWebId', { webId }); + + if (account.resetPasswordToken !== token) { + throw new Error('auth.password.invalid_reset_token'); + } + + return await this._update(ctx, { + '@id': account['@id'], + hashedPassword, + resetPasswordToken: undefined + }); + } + }), + + generateResetPasswordToken: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const resetPasswordToken = await this.generateResetPasswordToken(); + const account = await ctx.call('auth.account.findByWebId', { webId }); + + await this._update(ctx, { + '@id': account['@id'], + resetPasswordToken + }); + + return resetPasswordToken; + } + }), + + findDatasetByWebId: defineAction({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId; + const account = await ctx.call('auth.account.findByWebId', { webId }); + return account?.username; + } + }), + + findSettingsByWebId: defineAction({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const { webId } = ctx.meta; + + const account = await ctx.call('auth.account.findByWebId', { webId }); + + return { + email: account.email, + preferredLocale: account.preferredLocale + }; + } + }), + + updateAccountSettings: defineAction({ + async handler(ctx) { + const { currentPassword, email, newPassword } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const { webId } = ctx.meta; + const account = await ctx.call('auth.account.findByWebId', { webId }); + const passwordMatch = await this.comparePassword(currentPassword, account.hashedPassword); + let params = {}; + + if (!passwordMatch) { + throw new Error('auth.account.invalid_password'); + } + + if (newPassword) { + const hashedPassword = await this.hashPassword(newPassword); + params = { ...params, hashedPassword }; + } + + if (email !== account.email) { + const existing = await ctx.call('auth.account.findByEmail', { email }); + if (existing) { + throw new Error('email.already.exists'); + } + + params = { ...params, email }; + } + + return await this._update(ctx, { + '@id': account['@id'], + ...params + }); + } + }), + + deleteByWebId: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const account = await ctx.call('auth.account.findByWebId', { webId }); + + if (account) { + await this._remove(ctx, { id: account['@id'] }); + return true; + } + + return false; + } + }), + + setTombstone: defineAction({ + // Remove email and password from an account, set deletedAt timestamp. + async handler(ctx) { + const { webId } = ctx.params; + const account = await ctx.call('auth.account.findByWebId', { webId }); + + return await this._update(ctx, { + // Set all values to undefined... + ...Object.fromEntries(Object.keys(account).map(key => [key, null])), + '@id': account['@id'], + // ...except for + webId: account.webId, + username: account.username, + // And add a deletedAt date. + deletedAt: new Date().toISOString() + }); + } + }) + }, + methods: { + async isValidUsername(ctx, username) { + let error; + + // Ensure the username has no space or special characters + if (!/^[a-z0-9\-+_.]+$/.exec(username)) { + error = 'username.invalid'; + } + + if (username.length < this.settings.minUsernameLength) { + error = 'username.too-short'; + } + + // Ensure we don't use reservedUsernames + if (this.settings.reservedUsernames.includes(username)) { + error = 'username.reserved'; + } + + // Ensure username doesn't already exist + const usernameExists = await ctx.call('auth.account.usernameExists', { username }); + if (usernameExists) { + error = 'username.already.exists'; + } + + return { isValid: !error, error }; + }, + async hashPassword(password) { + return new Promise((resolve, reject) => { + bcrypt.hash(password, 10, (err: any, hash: any) => { + if (err) { + reject(err); + } else { + resolve(hash); + } + }); + }); + }, + async comparePassword(password, hash) { + return new Promise(resolve => { + bcrypt.compare(password, hash, (err: any, res: any) => { + if (res === true) { + resolve(true); + } else { + resolve(false); + } + }); + }); + }, + async generateResetPasswordToken() { + return new Promise((resolve, reject) => { + crypto.randomBytes(32, (ex, buf) => { + if (ex) { + reject(ex); + } + resolve(buf.toString('hex')); + }); + }); + } + } +} satisfies ServiceSchema; + +export default AuthAccountSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthAccountSchema.name]: typeof AuthAccountSchema; + } + } +} diff --git a/src/middleware/packages/auth/services/auth.cas.js b/src/middleware/packages/auth/services/auth.cas.js deleted file mode 100644 index 9545b5acc..000000000 --- a/src/middleware/packages/auth/services/auth.cas.js +++ /dev/null @@ -1,45 +0,0 @@ -const { Strategy } = require('passport-cas2'); -const { Errors: E } = require('moleculer-web'); -const AuthSSOMixin = require('../mixins/auth.sso'); - -const AuthCASService = { - name: 'auth', - mixins: [AuthSSOMixin], - settings: { - baseUrl: null, - jwtPath: null, - registrationAllowed: true, - reservedUsernames: [], - webIdSelection: [], - // SSO-specific settings - sessionSecret: 's€m@pps', - selectSsoData: null, - // Cas-specific settings - casUrl: null - }, - async created() { - this.passportId = 'cas'; - }, - methods: { - getStrategy() { - return new Strategy( - { - casURL: this.settings.casUrl, - passReqToCallback: true - }, - (req, username, profile, done) => { - req.$ctx - .call('auth.loginOrSignup', { ssoData: { username, ...profile } }) - .then(loginData => { - done(null, loginData); - }) - .catch(e => { - done(new E.UnAuthorizedError(e.message), false); - }); - } - ); - } - } -}; - -module.exports = AuthCASService; diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts new file mode 100644 index 000000000..fbec8a50c --- /dev/null +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -0,0 +1,56 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message +import { Strategy } from 'passport-cas2'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema } from 'moleculer'; +import AuthSSOMixin from '../mixins/auth.sso.ts'; + +const AuthCASService = { + name: 'auth' as const, + mixins: [AuthSSOMixin], + settings: { + baseUrl: null, + jwtPath: null, + registrationAllowed: true, + reservedUsernames: [], + webIdSelection: [], + // SSO-specific settings + sessionSecret: 's€m@pps', + selectSsoData: null, + // Cas-specific settings + casUrl: null + }, + async created() { + this.passportId = 'cas'; + }, + methods: { + getStrategy() { + return new Strategy( + { + casURL: this.settings.casUrl, + passReqToCallback: true + }, + (req: any, username: any, profile: any, done: any) => { + req.$ctx + .call('auth.loginOrSignup', { ssoData: { username, ...profile } }) + .then((loginData: any) => { + done(null, loginData); + }) + .catch((e: any) => { + done(new E.UnAuthorizedError(e.message), false); + }); + } + ); + } + } +} satisfies ServiceSchema; + +export default AuthCASService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthCASService.name]: typeof AuthCASService; + } + } +} diff --git a/src/middleware/packages/auth/services/auth.local.js b/src/middleware/packages/auth/services/auth.local.js deleted file mode 100644 index 59f6bbdaf..000000000 --- a/src/middleware/packages/auth/services/auth.local.js +++ /dev/null @@ -1,238 +0,0 @@ -const path = require('path'); -const { Strategy } = require('passport-local'); -const AuthMixin = require('../mixins/auth'); -const sendToken = require('../middlewares/sendToken'); -const { MoleculerError } = require('moleculer').Errors; -const AuthMailService = require('./mail'); - -/** @type {import('moleculer').ServiceSchema} */ -const AuthLocalService = { - name: 'auth', - mixins: [AuthMixin], - settings: { - baseUrl: null, - jwtPath: null, - registrationAllowed: true, - reservedUsernames: [], - minPasswordLength: 1, - minUsernameLength: 1, - webIdSelection: [], - accountSelection: [], - formUrl: null, - mail: { - from: null, - transport: { - host: null, - port: null - }, - defaults: { - locale: null, - frontUrl: null - } - } - }, - dependencies: ['webid'], - async created() { - const { mail } = this.settings; - - this.passportId = 'local'; - - if (mail !== false) { - this.broker.createService({ - mixins: [AuthMailService], - settings: { - ...mail - } - }); - } - }, - actions: { - async signup(ctx) { - const { username, email, password, ...rest } = ctx.params; - - // This is going to get in our way otherwise when waiting for completions. - ctx.meta.skipObjectsWatcher = true; - - let accountData = await ctx.call('auth.account.create', { - username, - email, - password, - ...this.pickAccountData(rest) - }); - - try { - const profileData = { nick: accountData.username, email: accountData.email, ...rest }; - const webId = await ctx.call('webid.createWebId', this.pickWebIdData(profileData), { - meta: { - isSignup: true // Allow services to handle directly the webId creation if it is generated by the AuthService - } - }); - - // Link the webId with the account - accountData = await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); - - ctx.emit('auth.registered', { webId, profileData, accountData }); - - const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); - - return { token, webId, newUser: true }; - } catch (e) { - // Delete account if resource creation failed, or it may cause problems when retrying - await ctx.call('auth.account.remove', { id: accountData['@id'] }); - throw e; - } - }, - async login(ctx) { - const { username, password } = ctx.params; - - const accountData = await ctx.call('auth.account.verify', { username, password }); - - ctx.emit('auth.connected', { webId: accountData.webId, accountData }, { meta: { webId: null, dataset: null } }); - - const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId: accountData.webId } }); - - return { token, webId: accountData.webId, newUser: false }; - }, - async logout(ctx) { - ctx.meta.$statusCode = 302; - ctx.meta.$location = ctx.params.redirectUrl || this.settings.formUrl; - ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); - }, - async redirectToForm(ctx) { - if (this.settings.formUrl) { - const formUrl = new URL(this.settings.formUrl); - if (ctx.params) { - for (const [key, value] of Object.entries(ctx.params)) { - formUrl.searchParams.set(key, value); - } - } - ctx.meta.$statusCode = 302; - ctx.meta.$location = formUrl.toString(); - } else { - throw new Error('No formUrl defined in auth.local settings'); - } - }, - async resetPassword(ctx) { - const { email } = ctx.params; - - const account = await ctx.call('auth.account.findByEmail', { email }); - - if (!account) { - throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); - } - - const token = await ctx.call('auth.account.generateResetPasswordToken', { webId: account.webId }); - - await ctx.call('auth.mail.sendResetPasswordEmail', { - account, - token - }); - }, - async setNewPassword(ctx) { - const { email, token, password } = ctx.params; - - const account = await ctx.call('auth.account.findByEmail', { email }); - - if (!account) { - throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); - } - - await ctx.call('auth.account.setNewPassword', { webId: account.webId, token, password }); - } - }, - methods: { - getStrategy() { - return new Strategy( - { - passReqToCallback: true // We want to have access to req below - }, - (req, username, password, done) => { - req.$ctx - .call('auth.login', req.$params) - .then(returnedData => { - done(null, returnedData); - }) - .catch(e => { - done(new MoleculerError(e.message, 401), false); - }); - } - ); - }, - getApiRoutes(basePath) { - const loginRoute = { - path: path.join(basePath, '/auth/login'), - name: 'auth-login', - use: [this.passport.initialize()], - aliases: { - 'POST /': [this.passport.authenticate(this.passportId, { session: false }), sendToken] - } - }; - - const logoutRoute = { - path: path.join(basePath, '/auth/logout'), - name: 'auth-logout', - aliases: { - 'GET /': 'auth.logout' - } - }; - - const signupRoute = { - path: path.join(basePath, '/auth/signup'), - name: 'auth-signup', - aliases: { - 'POST /': 'auth.signup' - } - }; - - const formRoute = { - path: path.join(basePath, '/auth'), - name: 'auth', - aliases: { - 'GET /': 'auth.redirectToForm' - } - }; - - const resetPasswordRoute = { - path: path.join(basePath, '/auth/reset_password'), - name: 'auth-reset-password', - aliases: { - 'POST /': 'auth.resetPassword' - } - }; - const setNewPasswordRoute = { - path: path.join(basePath, '/auth/new_password'), - name: 'auth-new-password', - aliases: { - 'POST /': 'auth.setNewPassword' - } - }; - - const accountSettingsRoute = { - path: path.join(basePath, '/auth/account'), - name: 'auth-account', - aliases: { - 'GET /': 'auth.account.findSettingsByWebId', - 'POST /': 'auth.account.updateAccountSettings' - }, - authorization: true - }; - - const routes = [ - loginRoute, - logoutRoute, - formRoute, - resetPasswordRoute, - setNewPasswordRoute, - accountSettingsRoute - ]; - - if (this.settings.registrationAllowed) { - return [...routes, signupRoute]; - } - - return routes; - } - } -}; - -module.exports = AuthLocalService; diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts new file mode 100644 index 000000000..7ec0bc8b9 --- /dev/null +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -0,0 +1,276 @@ +import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message +import { Strategy } from 'passport-local'; +import { ServiceSchema, defineAction } from 'moleculer'; +import AuthMixin from '../mixins/auth.ts'; +import sendToken from '../middlewares/sendToken.ts'; +import AuthMailService from './mail.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +/** @type {import('moleculer').ServiceSchema} */ +const AuthLocalService = { + name: 'auth' as const, + mixins: [AuthMixin], + settings: { + baseUrl: null, + jwtPath: null, + registrationAllowed: true, + reservedUsernames: [], + minPasswordLength: 1, + minUsernameLength: 1, + webIdSelection: [], + accountSelection: [], + formUrl: null, + mail: { + from: null, + transport: { + host: null, + port: null + }, + defaults: { + locale: null, + frontUrl: null + } + } + }, + dependencies: ['webid'], + async created() { + const { mail } = this.settings; + + this.passportId = 'local'; + + if (mail !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth.mail"; m... Remove this comment to see the full error message + this.broker.createService({ + mixins: [AuthMailService], + settings: { + ...mail + } + }); + } + }, + actions: { + signup: defineAction({ + async handler(ctx) { + const { username, email, password, ...rest } = ctx.params; + + // This is going to get in our way otherwise when waiting for completions. + // @ts-expect-error TS(2339): Property 'skipObjectsWatcher' does not exist on ty... Remove this comment to see the full error message + ctx.meta.skipObjectsWatcher = true; + + let accountData = await ctx.call('auth.account.create', { + username, + email, + password, + ...this.pickAccountData(rest) + }); + + try { + const profileData = { nick: accountData.username, email: accountData.email, ...rest }; + const webId = await ctx.call('webid.createWebId', this.pickWebIdData(profileData), { + meta: { + isSignup: true // Allow services to handle directly the webId creation if it is generated by the AuthService + } + }); + + // Link the webId with the account + accountData = await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); + + ctx.emit('auth.registered', { webId, profileData, accountData }); + + const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); + + return { token, webId, newUser: true }; + } catch (e) { + // Delete account if resource creation failed, or it may cause problems when retrying + await ctx.call('auth.account.remove', { id: accountData['@id'] }); + throw e; + } + } + }), + + login: defineAction({ + async handler(ctx) { + const { username, password } = ctx.params; + + const accountData = await ctx.call('auth.account.verify', { username, password }); + + ctx.emit('auth.connected', { webId: accountData.webId, accountData }, { meta: { webId: null, dataset: null } }); + + const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId: accountData.webId } }); + + return { token, webId: accountData.webId, newUser: false }; + } + }), + + logout: defineAction({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = 302; + // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. + ctx.meta.$location = ctx.params.redirectUrl || this.settings.formUrl; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); + } + }), + + redirectToForm: defineAction({ + async handler(ctx) { + if (this.settings.formUrl) { + const formUrl = new URL(this.settings.formUrl); + if (ctx.params) { + for (const [key, value] of Object.entries(ctx.params)) { + formUrl.searchParams.set(key, value); + } + } + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = 302; + // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. + ctx.meta.$location = formUrl.toString(); + } else { + throw new Error('No formUrl defined in auth.local settings'); + } + } + }), + + resetPassword: defineAction({ + async handler(ctx) { + const { email } = ctx.params; + + const account = await ctx.call('auth.account.findByEmail', { email }); + + if (!account) { + throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); + } + + const token = await ctx.call('auth.account.generateResetPasswordToken', { webId: account.webId }); + + await ctx.call('auth.mail.sendResetPasswordEmail', { + account, + token + }); + } + }), + + setNewPassword: defineAction({ + async handler(ctx) { + const { email, token, password } = ctx.params; + + const account = await ctx.call('auth.account.findByEmail', { email }); + + if (!account) { + throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); + } + + await ctx.call('auth.account.setNewPassword', { webId: account.webId, token, password }); + } + }) + }, + methods: { + getStrategy() { + return new Strategy( + { + passReqToCallback: true // We want to have access to req below + }, + (req: any, username: any, password: any, done: any) => { + req.$ctx + .call('auth.login', req.$params) + .then((returnedData: any) => { + done(null, returnedData); + }) + .catch((e: any) => { + done(new MoleculerError(e.message, 401), false); + }); + } + ); + }, + getApiRoutes(basePath) { + const loginRoute = { + path: path.join(basePath, '/auth/login'), + name: 'auth-login', + use: [this.passport.initialize()], + aliases: { + 'POST /': [this.passport.authenticate(this.passportId, { session: false }), sendToken] + } + }; + + const logoutRoute = { + path: path.join(basePath, '/auth/logout'), + name: 'auth-logout', + aliases: { + 'GET /': 'auth.logout' + } + }; + + const signupRoute = { + path: path.join(basePath, '/auth/signup'), + name: 'auth-signup', + aliases: { + 'POST /': 'auth.signup' + } + }; + + const formRoute = { + path: path.join(basePath, '/auth'), + name: 'auth', + aliases: { + 'GET /': 'auth.redirectToForm' + } + }; + + const resetPasswordRoute = { + path: path.join(basePath, '/auth/reset_password'), + name: 'auth-reset-password', + aliases: { + 'POST /': 'auth.resetPassword' + } + }; + const setNewPasswordRoute = { + path: path.join(basePath, '/auth/new_password'), + name: 'auth-new-password', + aliases: { + 'POST /': 'auth.setNewPassword' + } + }; + + const accountSettingsRoute = { + path: path.join(basePath, '/auth/account'), + name: 'auth-account', + aliases: { + 'GET /': 'auth.account.findSettingsByWebId', + 'POST /': 'auth.account.updateAccountSettings' + }, + authorization: true + }; + + const routes = [ + loginRoute, + logoutRoute, + formRoute, + resetPasswordRoute, + setNewPasswordRoute, + accountSettingsRoute + ]; + + if (this.settings.registrationAllowed) { + return [...routes, signupRoute]; + } + + return routes; + } + } +} satisfies ServiceSchema; + +export default AuthLocalService; + +declare global { + export namespace Moleculer { + export interface AllServices { + // @ts-expect-error TS(2717): Subsequent property declarations must have the sam... Remove this comment to see the full error message + [AuthLocalService.name]: typeof AuthLocalService; + } + } +} diff --git a/src/middleware/packages/auth/services/auth.oidc.js b/src/middleware/packages/auth/services/auth.oidc.ts similarity index 65% rename from src/middleware/packages/auth/services/auth.oidc.js rename to src/middleware/packages/auth/services/auth.oidc.ts index afa76d62a..78c505596 100644 --- a/src/middleware/packages/auth/services/auth.oidc.js +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -1,13 +1,16 @@ -const urlJoin = require('url-join'); -const { Issuer, Strategy, custom } = require('openid-client'); +import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'open... Remove this comment to see the full error message +import { Issuer, Strategy, custom } from 'openid-client'; + +import { ServiceSchema } from 'moleculer'; +import AuthSSOMixin from '../mixins/auth.sso.ts'; custom.setHttpOptionsDefaults({ timeout: 10000 }); -const AuthSSOMixin = require('../mixins/auth.sso'); const AuthOIDCService = { - name: 'auth', + name: 'auth' as const, mixins: [AuthSSOMixin], settings: { baseUrl: null, @@ -51,13 +54,13 @@ const AuthOIDCService = { params, passReqToCallback: true }, - (req, tokenset, userinfo, done) => { + (req: any, tokenset: any, userinfo: any, done: any) => { req.$ctx .call('auth.loginOrSignup', { ssoData: userinfo }) - .then(loginData => { + .then((loginData: any) => { done(null, loginData); }) - .catch(e => { + .catch((e: any) => { console.error(e); done(null, false); }); @@ -65,6 +68,15 @@ const AuthOIDCService = { ); } } -}; +} satisfies ServiceSchema; + +export default AuthOIDCService; -module.exports = AuthOIDCService; +declare global { + export namespace Moleculer { + export interface AllServices { + // @ts-expect-error TS(2717): Subsequent property declarations must have the sam... Remove this comment to see the full error message + [AuthOIDCService.name]: typeof AuthOIDCService; + } + } +} diff --git a/src/middleware/packages/auth/services/jwt.js b/src/middleware/packages/auth/services/jwt.js deleted file mode 100644 index 386436230..000000000 --- a/src/middleware/packages/auth/services/jwt.js +++ /dev/null @@ -1,101 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const jwt = require('jsonwebtoken'); -const crypto = require('crypto'); - -/** - * Service that creates and validates JSON web tokens(JWT). - * Tokens are signed against this server's keys. - * This is useful for generating/validating authentication tokens. - * - * TODO: Tokens do not expire. - */ -module.exports = { - name: 'auth.jwt', - settings: { - jwtPath: null - }, - async created() { - const privateKeyPath = path.resolve(this.settings.jwtPath, 'jwtRS256.key'); - const publicKeyPath = path.resolve(this.settings.jwtPath, 'jwtRS256.key.pub'); - - if (!fs.existsSync(privateKeyPath) && !fs.existsSync(publicKeyPath)) { - this.logger.info('JWT keypair not found, generating...'); - if (!fs.existsSync(this.settings.jwtPath)) { - fs.mkdirSync(this.settings.jwtPath); - } - await this.actions.generateKeyPair({ privateKeyPath, publicKeyPath }); - } - - this.privateKey = fs.readFileSync(privateKeyPath); - this.publicKey = fs.readFileSync(publicKeyPath); - }, - actions: { - generateKeyPair(ctx) { - const { privateKeyPath, publicKeyPath } = ctx.params; - - return new Promise((resolve, reject) => { - crypto.generateKeyPair( - 'rsa', - { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' - } - }, - (err, publicKey, privateKey) => { - if (err) { - reject(err); - } else { - fs.writeFile(privateKeyPath, privateKey, err => { - if (err) { - reject(err); - } else { - fs.writeFile(publicKeyPath, publicKey, err => { - if (err) { - reject(err); - } else { - resolve({ privateKey, publicKey }); - } - }); - } - }); - } - } - ); - }); - }, - async generateServerSignedToken(ctx) { - const { payload } = ctx.params; - return jwt.sign(payload, this.privateKey, { algorithm: 'RS256' }); - }, - /** Verifies that the token was signed by this server. */ - async verifyServerSignedToken(ctx) { - const { token } = ctx.params; - try { - return jwt.verify(token, this.publicKey, { algorithms: ['RS256'] }); - } catch (err) { - return false; - } - }, - async generateUnsignedToken(ctx) { - const { payload } = ctx.params; - const token = jwt.sign(payload, null, { algorithm: 'none' }); - return token; - }, - // Warning, this does NOT verify if signature is valid - async decodeToken(ctx) { - const { token } = ctx.params; - try { - return jwt.decode(token); - } catch (err) { - return false; - } - } - } -}; diff --git a/src/middleware/packages/auth/services/jwt.ts b/src/middleware/packages/auth/services/jwt.ts new file mode 100644 index 000000000..c15de82f5 --- /dev/null +++ b/src/middleware/packages/auth/services/jwt.ts @@ -0,0 +1,127 @@ +import fs from 'fs'; +import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'json... Remove this comment to see the full error message +import jwt from 'jsonwebtoken'; +import crypto from 'crypto'; +import { ServiceSchema, defineAction } from 'moleculer'; + +/** + * Service that creates and validates JSON web tokens(JWT). + * Tokens are signed against this server's keys. + * This is useful for generating/validating authentication tokens. + * + * TODO: Tokens do not expire. + */ +const AuthJwtSchema = { + name: 'auth.jwt' as const, + settings: { + jwtPath: null + }, + async created() { + const privateKeyPath = path.resolve(this.settings.jwtPath, 'jwtRS256.key'); + const publicKeyPath = path.resolve(this.settings.jwtPath, 'jwtRS256.key.pub'); + + if (!fs.existsSync(privateKeyPath) && !fs.existsSync(publicKeyPath)) { + this.logger.info('JWT keypair not found, generating...'); + if (!fs.existsSync(this.settings.jwtPath)) { + fs.mkdirSync(this.settings.jwtPath); + } + await this.actions.generateKeyPair({ privateKeyPath, publicKeyPath }); + } + + this.privateKey = fs.readFileSync(privateKeyPath); + this.publicKey = fs.readFileSync(publicKeyPath); + }, + actions: { + generateKeyPair: defineAction({ + handler(ctx) { + const { privateKeyPath, publicKeyPath } = ctx.params; + + return new Promise((resolve, reject) => { + crypto.generateKeyPair( + 'rsa', + { + modulusLength: 4096, + publicKeyEncoding: { + type: 'spki', + format: 'pem' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'pem' + } + }, + (err, publicKey, privateKey) => { + if (err) { + reject(err); + } else { + fs.writeFile(privateKeyPath, privateKey, err => { + if (err) { + reject(err); + } else { + fs.writeFile(publicKeyPath, publicKey, err => { + if (err) { + reject(err); + } else { + resolve({ privateKey, publicKey }); + } + }); + } + }); + } + } + ); + }); + } + }), + + generateServerSignedToken: defineAction({ + async handler(ctx) { + const { payload } = ctx.params; + return jwt.sign(payload, this.privateKey, { algorithm: 'RS256' }); + } + }), + + verifyServerSignedToken: defineAction({ + /** Verifies that the token was signed by this server. */ + async handler(ctx) { + const { token } = ctx.params; + try { + return jwt.verify(token, this.publicKey, { algorithms: ['RS256'] }); + } catch (err) { + return false; + } + } + }), + + generateUnsignedToken: defineAction({ + async handler(ctx) { + const { payload } = ctx.params; + const token = jwt.sign(payload, null, { algorithm: 'none' }); + return token; + } + }), + + decodeToken: defineAction({ + // Warning, this does NOT verify if signature is valid + async handler(ctx) { + const { token } = ctx.params; + try { + return jwt.decode(token); + } catch (err) { + return false; + } + } + }) + } +} satisfies ServiceSchema; + +export default AuthJwtSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthJwtSchema.name]: typeof AuthJwtSchema; + } + } +} diff --git a/src/middleware/packages/auth/services/mail.js b/src/middleware/packages/auth/services/mail.js deleted file mode 100644 index 3a94b2e29..000000000 --- a/src/middleware/packages/auth/services/mail.js +++ /dev/null @@ -1,49 +0,0 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const MailService = require('moleculer-mail'); - -module.exports = { - name: 'auth.mail', - mixins: [MailService], - settings: { - defaults: { - locale: 'en', - frontUrl: null - }, - templateFolder: path.join(__dirname, '../templates'), - from: null, - transport: null - }, - actions: { - async sendResetPasswordEmail(ctx) { - const { account, token } = ctx.params; - - await this.actions.send( - { - to: account.email, - template: 'reset-password', - locale: this.getTemplateLocale(account.preferredLocale || this.settings.defaults.locale), - data: { - account, - resetUrl: `${urlJoin(this.settings.defaults.frontUrl, 'login')}?new_password=true&token=${token}` - } - }, - { - parentCtx: ctx - } - ); - } - }, - methods: { - getTemplateLocale(userLocale) { - switch (userLocale) { - case 'fr': - return 'fr-FR'; - case 'en': - return 'en-EN'; - default: - return 'en-EN'; - } - } - } -}; diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts new file mode 100644 index 000000000..070f3a86c --- /dev/null +++ b/src/middleware/packages/auth/services/mail.ts @@ -0,0 +1,67 @@ +import path from 'path'; +import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message +import MailService from 'moleculer-mail'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { fileURLToPath } from 'url'; + +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const AuthMailSchema = { + name: 'auth.mail' as const, + mixins: [MailService], + settings: { + defaults: { + locale: 'en', + frontUrl: null + }, + templateFolder: path.join(__dirname, '../templates'), + from: null, + transport: null + }, + actions: { + sendResetPasswordEmail: defineAction({ + async handler(ctx) { + const { account, token } = ctx.params; + + await this.actions.send( + { + to: account.email, + template: 'reset-password', + locale: this.getTemplateLocale(account.preferredLocale || this.settings.defaults.locale), + data: { + account, + resetUrl: `${urlJoin(this.settings.defaults.frontUrl, 'login')}?new_password=true&token=${token}` + } + }, + { + parentCtx: ctx + } + ); + } + }) + }, + methods: { + getTemplateLocale(userLocale) { + switch (userLocale) { + case 'fr': + return 'fr-FR'; + case 'en': + return 'en-EN'; + default: + return 'en-EN'; + } + } + } +} satisfies ServiceSchema; + +export default AuthMailSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthMailSchema.name]: typeof AuthMailSchema; + } + } +} diff --git a/src/middleware/packages/auth/services/migration.js b/src/middleware/packages/auth/services/migration.js deleted file mode 100644 index f42dc615d..000000000 --- a/src/middleware/packages/auth/services/migration.js +++ /dev/null @@ -1,28 +0,0 @@ -const { getSlugFromUri } = require('@semapps/ldp'); - -module.exports = { - name: 'auth.migration', - actions: { - async migrateUsersToAccounts(ctx) { - const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; - - const results = await ctx.call('ldp.container.get', { containerUri: usersContainer }); - - for (const user of results['ldp:contains']) { - if (user[emailPredicate]) { - try { - await ctx.call('auth.account.create', { - email: user[emailPredicate], - username: usernamePredicate ? user[usernamePredicate] : getSlugFromUri(user.id), - webId: user.id - }); - } catch (e) { - console.log(`Unable to create account for user ${user.id}. Error message: ${e.message}`); - } - } else { - console.log(`No email found for user ${user.id}`); - } - } - } - } -}; diff --git a/src/middleware/packages/auth/services/migration.ts b/src/middleware/packages/auth/services/migration.ts new file mode 100644 index 000000000..af3be2b94 --- /dev/null +++ b/src/middleware/packages/auth/services/migration.ts @@ -0,0 +1,42 @@ +import { getSlugFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const AuthMigrationSchema = { + name: 'auth.migration' as const, + actions: { + migrateUsersToAccounts: defineAction({ + async handler(ctx) { + const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; + + const results = await ctx.call('ldp.container.get', { containerUri: usersContainer }); + + for (const user of results['ldp:contains']) { + if (user[emailPredicate]) { + try { + await ctx.call('auth.account.create', { + email: user[emailPredicate], + username: usernamePredicate ? user[usernamePredicate] : getSlugFromUri(user.id), + webId: user.id + }); + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + console.log(`Unable to create account for user ${user.id}. Error message: ${e.message}`); + } + } else { + console.log(`No email found for user ${user.id}`); + } + } + } + }) + } +} satisfies ServiceSchema; + +export default AuthMigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthMigrationSchema.name]: typeof AuthMigrationSchema; + } + } +} diff --git a/src/middleware/packages/auth/tsconfig.json b/src/middleware/packages/auth/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/auth/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/backup/index.js b/src/middleware/packages/backup/index.js deleted file mode 100644 index 2c15c4b3d..000000000 --- a/src/middleware/packages/backup/index.js +++ /dev/null @@ -1,179 +0,0 @@ -const { CronJob } = require('cron'); -const fs = require('fs'); -const { emptyDirSync } = require('fs-extra'); -const pathJoin = require('path').join; -const fsCopy = require('./utils/fsCopy'); -const ftpCopy = require('./utils/ftpCopy'); -const rsyncCopy = require('./utils/rsyncCopy'); -const ftpRemove = require('./utils/ftpRemove'); -const fsRemove = require('./utils/fsRemove'); -/** - * @typedef {import('moleculer').Context} Context - */ - -const BackupService = { - name: 'backup', - settings: { - localServer: { - fusekiBase: null, - otherDirsPaths: {} - }, - copyMethod: 'rsync', // rsync, ftp, or fs - deleteFusekiBackupsAfterCopy: false, - remoteServer: { - path: null, // Required - user: null, // Required by rsync and ftp - password: null, // Required by rsync and ftp - host: null, // Required by rsync and ftp - port: null // Required by ftp - }, - // Required for automated backups - cronJob: { - time: null, - timeZone: 'Europe/Paris' - } - }, - dependencies: ['triplestore'], - started() { - const { - cronJob, - copyMethod, - localServer: { fusekiBase } - } = this.settings; - - if (!fusekiBase) { - throw new Error('Backup service requires `localServer.fusekiBase` setting to be set to the FUSEKI_BASE path.'); - } - - if (!['rsync', 'ftp', 'fs'].includes(copyMethod)) { - throw new Error(`The copyMethod setting must be either rysnc, ftp or fs. Provided: ${copyMethod}`); - } - - if (cronJob.time) { - this.cronJob = new CronJob(cronJob.time, this.actions.backupAll, null, true, cronJob.timeZone); - } - }, - actions: { - async backupAll(ctx) { - await this.actions.backupDatasets({}, { parentCtx: ctx }); - await this.actions.backupOtherDirs({}, { parentCtx: ctx }); - }, - async backupDatasets(ctx) { - // Generate a new backup of all datasets - const datasets = await ctx.call('triplestore.dataset.list'); - for (const dataset of datasets) { - this.logger.info(`Backing up dataset: ${dataset}`); - await ctx.call('triplestore.dataset.backup', { dataset }); - } - - const backupsDirPath = pathJoin(this.settings.localServer.fusekiBase, 'backups'); - - const copied = await this.actions.copyToRemoteServer( - { path: backupsDirPath, subDir: 'datasets' }, - { parentCtx: ctx } - ); - - // If there was an error on copy, don't delete the backups - if (copied && this.settings.deleteFusekiBackupsAfterCopy) { - emptyDirSync(backupsDirPath); - } - }, - async backupOtherDirs(ctx) { - const { otherDirsPaths } = this.settings.localServer; - - if (!otherDirsPaths) { - this.logger.info('No otherDirPaths defined, skipping backup...'); - return; - } - - for (const [key, path] of Object.entries(otherDirsPaths)) { - this.logger.info(`Backing up directory: ${path}`); - await this.actions.copyToRemoteServer({ path, subDir: key }, { parentCtx: ctx }); - } - }, - async copyToRemoteServer(ctx) { - const { path, subDir } = ctx.params; - const { copyMethod, remoteServer } = this.settings; - - // Path is mandatory for all copy methods - if (!remoteServer.path) { - this.logger.info('No remote server config defined, skipping remote backup...'); - return false; - } - - try { - switch (copyMethod) { - case 'rsync': - await rsyncCopy(path, subDir, remoteServer, false); - break; - - case 'ftp': - await ftpCopy(path, subDir, remoteServer); - break; - - case 'fs': - await fsCopy(path, subDir, remoteServer); - break; - } - return true; - } catch (e) { - this.logger.error(`Failed to copy ${path} to remote server with ${copyMethod}. Error: ${e.message}`); - return false; - } - }, - deleteDataset: { - params: { - dataset: { type: 'string' } - }, - async handler(ctx) { - const { dataset } = ctx.params; - const { - copyMethod, - remoteServer, - localServer: { fusekiBase } - } = this.settings; - - const deleteFilenames = await ctx.call('backup.listBackupsForDataset', { dataset }); - - // Delete all backups locally. - await Promise.all(deleteFilenames.map(file => fs.promises.rm(file))); - - // Delete backups from remote.fusekiBase - if (remoteServer.path) { - switch (copyMethod) { - case 'rsync': - // The last param sets the --deletion argument, to sync deletions too. - await rsyncCopy(pathJoin(fusekiBase, 'backups'), 'datasets', remoteServer, true); - break; - - case 'ftp': - await ftpRemove(deleteFilenames, remoteServer); - break; - - case 'fs': - await fsRemove(deleteFilenames, 'datasets', remoteServer); - break; - - default: - throw new Error(`Unknown copy method: ${copyMethod}`); - } - } - } - }, - // Returns an array of file paths to the backups relative to `this.settings.localServer.fusekiBase`. - async listBackupsForDataset(ctx) { - const { dataset } = ctx.params; - - // File format: _ - const backupsPattern = RegExp(`^${dataset}_.{10}_.{8}\\.nq\\.gz$`); - const filenames = await fs.promises - .readdir(pathJoin(this.settings.localServer.fusekiBase, 'backups')) - .then(files => files.filter(file => backupsPattern.test(file))) - .then(files => files.map(file => pathJoin(this.settings.localServer.fusekiBase, 'backups', file))); - - return filenames; - } - } -}; - -module.exports = BackupService; diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts new file mode 100644 index 000000000..04713ba8b --- /dev/null +++ b/src/middleware/packages/backup/index.ts @@ -0,0 +1,210 @@ +import { CronJob } from 'cron'; +import fs from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message +import { emptyDirSync } from 'fs-extra'; +import pathModule from 'path'; +import { ServiceSchema, defineAction } from 'moleculer'; +import fsCopy from './utils/fsCopy.ts'; +import ftpCopy from './utils/ftpCopy.ts'; +import rsyncCopy from './utils/rsyncCopy.ts'; +import ftpRemove from './utils/ftpRemove.ts'; +import fsRemove from './utils/fsRemove.ts'; + +const pathJoin = pathModule.join; + +/** + * @typedef {import('moleculer').Context} Context + */ + +const BackupService = { + name: 'backup' as const, + settings: { + localServer: { + fusekiBase: null, + otherDirsPaths: {} + }, + copyMethod: 'rsync', // rsync, ftp, or fs + deleteFusekiBackupsAfterCopy: false, + remoteServer: { + path: null, // Required + user: null, // Required by rsync and ftp + password: null, // Required by rsync and ftp + host: null, // Required by rsync and ftp + port: null // Required by ftp + }, + // Required for automated backups + cronJob: { + time: null, + timeZone: 'Europe/Paris' + } + }, + dependencies: ['triplestore'], + started() { + const { + cronJob, + copyMethod, + localServer: { fusekiBase } + } = this.settings; + + if (!fusekiBase) { + throw new Error('Backup service requires `localServer.fusekiBase` setting to be set to the FUSEKI_BASE path.'); + } + + if (!['rsync', 'ftp', 'fs'].includes(copyMethod)) { + throw new Error(`The copyMethod setting must be either rysnc, ftp or fs. Provided: ${copyMethod}`); + } + + if (cronJob.time) { + this.cronJob = new CronJob(cronJob.time, this.actions.backupAll, null, true, cronJob.timeZone); + } + }, + actions: { + backupAll: defineAction({ + async handler(ctx) { + await this.actions.backupDatasets({}, { parentCtx: ctx }); + await this.actions.backupOtherDirs({}, { parentCtx: ctx }); + } + }), + + backupDatasets: defineAction({ + async handler(ctx) { + // Generate a new backup of all datasets + const datasets = await ctx.call('triplestore.dataset.list'); + for (const dataset of datasets) { + this.logger.info(`Backing up dataset: ${dataset}`); + await ctx.call('triplestore.dataset.backup', { dataset }); + } + + const backupsDirPath = pathJoin(this.settings.localServer.fusekiBase, 'backups'); + + const copied = await this.actions.copyToRemoteServer( + { path: backupsDirPath, subDir: 'datasets' }, + { parentCtx: ctx } + ); + + // If there was an error on copy, don't delete the backups + if (copied && this.settings.deleteFusekiBackupsAfterCopy) { + emptyDirSync(backupsDirPath); + } + } + }), + + backupOtherDirs: defineAction({ + async handler(ctx) { + const { otherDirsPaths } = this.settings.localServer; + + if (!otherDirsPaths) { + this.logger.info('No otherDirPaths defined, skipping backup...'); + return; + } + + for (const [key, path] of Object.entries(otherDirsPaths)) { + this.logger.info(`Backing up directory: ${path}`); + await this.actions.copyToRemoteServer({ path, subDir: key }, { parentCtx: ctx }); + } + } + }), + + copyToRemoteServer: defineAction({ + async handler(ctx) { + const { path, subDir } = ctx.params; + const { copyMethod, remoteServer } = this.settings; + + // Path is mandatory for all copy methods + if (!remoteServer.path) { + this.logger.info('No remote server config defined, skipping remote backup...'); + return false; + } + + try { + switch (copyMethod) { + case 'rsync': + await rsyncCopy(path, subDir, remoteServer, false); + break; + + case 'ftp': + await ftpCopy(path, subDir, remoteServer); + break; + + case 'fs': + await fsCopy(path, subDir, remoteServer); + break; + } + return true; + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.error(`Failed to copy ${path} to remote server with ${copyMethod}. Error: ${e.message}`); + return false; + } + } + }), + + deleteDataset: defineAction({ + params: { + dataset: { type: 'string' } + }, + async handler(ctx) { + const { dataset } = ctx.params; + const { + copyMethod, + remoteServer, + localServer: { fusekiBase } + } = this.settings; + + const deleteFilenames = await ctx.call('backup.listBackupsForDataset', { dataset }); + + // Delete all backups locally. + await Promise.all(deleteFilenames.map((file: any) => fs.promises.rm(file))); + + // Delete backups from remote.fusekiBase + if (remoteServer.path) { + switch (copyMethod) { + case 'rsync': + // The last param sets the --deletion argument, to sync deletions too. + await rsyncCopy(pathJoin(fusekiBase, 'backups'), 'datasets', remoteServer, true); + break; + + case 'ftp': + await ftpRemove(deleteFilenames, remoteServer); + break; + + case 'fs': + await fsRemove(deleteFilenames, 'datasets', remoteServer); + break; + + default: + throw new Error(`Unknown copy method: ${copyMethod}`); + } + } + } + }), + + listBackupsForDataset: defineAction({ + // Returns an array of file paths to the backups relative to `this.settings.localServer.fusekiBase`. + async handler(ctx) { + const { dataset } = ctx.params; + + // File format: _ + const backupsPattern = RegExp(`^${dataset}_.{10}_.{8}\\.nq\\.gz$`); + const filenames = await fs.promises + .readdir(pathJoin(this.settings.localServer.fusekiBase, 'backups')) + .then((files: any) => files.filter((file: any) => backupsPattern.test(file))) + .then((files: any) => + files.map((file: any) => pathJoin(this.settings.localServer.fusekiBase, 'backups', file)) + ); + + return filenames; + } + }) + } +} satisfies ServiceSchema; + +export default BackupService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [BackupService.name]: typeof BackupService; + } + } +} diff --git a/src/middleware/packages/backup/package.json b/src/middleware/packages/backup/package.json index 5b29fc228..a175e70df 100644 --- a/src/middleware/packages/backup/package.json +++ b/src/middleware/packages/backup/package.json @@ -7,14 +7,19 @@ "dependencies": { "cron": "^1.8.2", "fs-extra": "^10.0.0", - "moleculer": "^0.14.31", "rsync": "^0.6.1", "ssh2-sftp-client": "^7.2.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/backup/tsconfig.json b/src/middleware/packages/backup/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/backup/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/backup/utils/fsCopy.js b/src/middleware/packages/backup/utils/fsCopy.js deleted file mode 100644 index 20b71e925..000000000 --- a/src/middleware/packages/backup/utils/fsCopy.js +++ /dev/null @@ -1,9 +0,0 @@ -const fs = require('fs-extra'); -const { join: pathJoin } = require('path'); - -const fsCopy = async (path, subDir, remoteServer) => { - const destDir = pathJoin(remoteServer.path, subDir); - await fs.copy(path, destDir); -}; - -module.exports = fsCopy; diff --git a/src/middleware/packages/backup/utils/fsCopy.ts b/src/middleware/packages/backup/utils/fsCopy.ts new file mode 100644 index 000000000..64c0092e2 --- /dev/null +++ b/src/middleware/packages/backup/utils/fsCopy.ts @@ -0,0 +1,10 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message +import fs from 'fs-extra'; +import { join as pathJoin } from 'path'; + +const fsCopy = async (path: any, subDir: any, remoteServer: any) => { + const destDir = pathJoin(remoteServer.path, subDir); + await fs.copy(path, destDir); +}; + +export default fsCopy; diff --git a/src/middleware/packages/backup/utils/fsRemove.js b/src/middleware/packages/backup/utils/fsRemove.js deleted file mode 100644 index 7a4315d0d..000000000 --- a/src/middleware/packages/backup/utils/fsRemove.js +++ /dev/null @@ -1,12 +0,0 @@ -const fs = require('fs'); -const { join: pathJoin } = require('path'); - -const fsRemove = async (removeFiles, subDir, remoteServer) => { - await Promise.all( - removeFiles - .map(file => pathJoin(remoteServer.path, subDir, file)) - .map(file => fs.promises.rm(file, { force: true })) - ); -}; - -module.exports = fsRemove; diff --git a/src/middleware/packages/backup/utils/fsRemove.ts b/src/middleware/packages/backup/utils/fsRemove.ts new file mode 100644 index 000000000..832d03dab --- /dev/null +++ b/src/middleware/packages/backup/utils/fsRemove.ts @@ -0,0 +1,12 @@ +import fs from 'fs'; +import { join as pathJoin } from 'path'; + +const fsRemove = async (removeFiles: any, subDir: any, remoteServer: any) => { + await Promise.all( + removeFiles + .map((file: any) => pathJoin(remoteServer.path, subDir, file)) + .map((file: any) => fs.promises.rm(file, { force: true })) + ); +}; + +export default fsRemove; diff --git a/src/middleware/packages/backup/utils/ftpCopy.js b/src/middleware/packages/backup/utils/ftpCopy.ts similarity index 54% rename from src/middleware/packages/backup/utils/ftpCopy.js rename to src/middleware/packages/backup/utils/ftpCopy.ts index c9b7b31e6..0e6ad03fb 100644 --- a/src/middleware/packages/backup/utils/ftpCopy.js +++ b/src/middleware/packages/backup/utils/ftpCopy.ts @@ -1,8 +1,9 @@ -const fs = require('fs'); -const Client = require('ssh2-sftp-client'); -const { join: pathJoin } = require('path'); +import fs from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'ssh2... Remove this comment to see the full error message +import Client from 'ssh2-sftp-client'; +import { join as pathJoin } from 'path'; -const ftpCopy = (path, subDir, remoteServer) => { +const ftpCopy = (path: any, subDir: any, remoteServer: any) => { return new Promise((resolve, reject) => { const sftp = new Client(); sftp @@ -18,16 +19,18 @@ const ftpCopy = (path, subDir, remoteServer) => { reject(`Unable to scan directory: ${err.message}`); } else { const now = Date.now(); + // @ts-expect-error TS(2363): The right-hand side of an arithmetic operation mus... Remove this comment to see the full error message const newFiles = files.filter(f => now - fs.statSync(`${path}/${f}`).mtime < 60000); for (const filename of newFiles) { await sftp.put(pathJoin(path, filename), pathJoin(remoteServer.path, filename)); } + // @ts-expect-error TS(2794): Expected 1 arguments, but got 0. Did you forget to... Remove this comment to see the full error message resolve(); } }); }) - .catch(e => reject(e)); + .catch((e: any) => reject(e)); }); }; -module.exports = ftpCopy; +export default ftpCopy; diff --git a/src/middleware/packages/backup/utils/ftpRemove.js b/src/middleware/packages/backup/utils/ftpRemove.js deleted file mode 100644 index 6176a13ba..000000000 --- a/src/middleware/packages/backup/utils/ftpRemove.js +++ /dev/null @@ -1,24 +0,0 @@ -const Client = require('ssh2-sftp-client'); -const { join: pathJoin } = require('path'); - -const ftpRemove = (removeFiles, remoteServer) => { - return new Promise((resolve, reject) => { - const sftp = new Client(); - sftp - .connect({ - host: remoteServer.host, - port: remoteServer.port, - username: remoteServer.user, - password: remoteServer.password - }) - .then(async () => { - for (const filename of removeFiles) { - await sftp.delete(pathJoin(remoteServer.path, filename), true); - } - resolve(); - }) - .catch(e => reject(e)); - }); -}; - -module.exports = ftpRemove; diff --git a/src/middleware/packages/backup/utils/ftpRemove.ts b/src/middleware/packages/backup/utils/ftpRemove.ts new file mode 100644 index 000000000..3aff02442 --- /dev/null +++ b/src/middleware/packages/backup/utils/ftpRemove.ts @@ -0,0 +1,26 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'ssh2... Remove this comment to see the full error message +import Client from 'ssh2-sftp-client'; +import { join as pathJoin } from 'path'; + +const ftpRemove = (removeFiles: any, remoteServer: any) => { + return new Promise((resolve, reject) => { + const sftp = new Client(); + sftp + .connect({ + host: remoteServer.host, + port: remoteServer.port, + username: remoteServer.user, + password: remoteServer.password + }) + .then(async () => { + for (const filename of removeFiles) { + await sftp.delete(pathJoin(remoteServer.path, filename), true); + } + // @ts-expect-error TS(2794): Expected 1 arguments, but got 0. Did you forget to... Remove this comment to see the full error message + resolve(); + }) + .catch((e: any) => reject(e)); + }); +}; + +export default ftpRemove; diff --git a/src/middleware/packages/backup/utils/rsyncCopy.js b/src/middleware/packages/backup/utils/rsyncCopy.ts similarity index 54% rename from src/middleware/packages/backup/utils/rsyncCopy.js rename to src/middleware/packages/backup/utils/rsyncCopy.ts index 573075266..543331760 100644 --- a/src/middleware/packages/backup/utils/rsyncCopy.js +++ b/src/middleware/packages/backup/utils/rsyncCopy.ts @@ -1,7 +1,8 @@ -const Rsync = require('rsync'); -const { join: pathJoin } = require('path'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'rsyn... Remove this comment to see the full error message +import Rsync from 'rsync'; +import { join as pathJoin } from 'path'; -const rsyncCopy = (path, subDir, remoteServer, syncDelete = false) => { +const rsyncCopy = (path: any, subDir: any, remoteServer: any, syncDelete = false) => { // Setup rsync to remote server const rsync = new Rsync() .flags('arv') @@ -13,15 +14,16 @@ const rsyncCopy = (path, subDir, remoteServer, syncDelete = false) => { return new Promise((resolve, reject) => { console.log(`Rsync started with command: ${rsync.command()}`); - rsync.execute(error => { + rsync.execute((error: any) => { if (error) { reject(error); } else { console.log('Rsync finished !'); + // @ts-expect-error TS(2794): Expected 1 arguments, but got 0. Did you forget to... Remove this comment to see the full error message resolve(); } }); }); }; -module.exports = rsyncCopy; +export default rsyncCopy; diff --git a/src/middleware/packages/core/index.js b/src/middleware/packages/core/index.js deleted file mode 100644 index b9d68cf85..000000000 --- a/src/middleware/packages/core/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - CoreService: require('./service') -}; diff --git a/src/middleware/packages/core/index.ts b/src/middleware/packages/core/index.ts new file mode 100644 index 000000000..450add1bf --- /dev/null +++ b/src/middleware/packages/core/index.ts @@ -0,0 +1,3 @@ +import CoreService from './service.ts'; + +export { CoreService }; diff --git a/src/middleware/packages/core/package.json b/src/middleware/packages/core/package.json index 4914d1eb3..fddd0d8e7 100644 --- a/src/middleware/packages/core/package.json +++ b/src/middleware/packages/core/package.json @@ -16,14 +16,19 @@ "@semapps/webacl": "1.1.4", "@semapps/webfinger": "1.1.4", "@semapps/webid": "1.1.4", - "moleculer": "^0.14.19", "moleculer-web": "^0.10.0-beta1", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/core/service.js b/src/middleware/packages/core/service.ts similarity index 64% rename from src/middleware/packages/core/service.js rename to src/middleware/packages/core/service.ts index 818f28858..2a0cc94f8 100644 --- a/src/middleware/packages/core/service.js +++ b/src/middleware/packages/core/service.ts @@ -1,17 +1,18 @@ -const path = require('path'); -const ApiGatewayService = require('moleculer-web'); -const { Errors: E } = require('moleculer-web'); -const { ActivityPubService, FULL_ACTOR_TYPES } = require('@semapps/activitypub'); -const { JsonLdService } = require('@semapps/jsonld'); -const { LdpService, DocumentTaggerMixin } = require('@semapps/ldp'); -const { OntologiesService } = require('@semapps/ontologies'); -const { SparqlEndpointService } = require('@semapps/sparql-endpoint'); -const { TripleStoreService } = require('@semapps/triplestore'); -const { VoidService } = require('@semapps/void'); -const { WebAclService } = require('@semapps/webacl'); -const { WebfingerService } = require('@semapps/webfinger'); -const { KeysService, SignatureService } = require('@semapps/crypto'); -const { WebIdService } = require('@semapps/webid'); +import path from 'path'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import ApiGatewayService, { Errors as E } from 'moleculer-web'; +import { ActivityPubService, FULL_ACTOR_TYPES } from '@semapps/activitypub'; +import { JsonLdService } from '@semapps/jsonld'; +import { LdpService, DocumentTaggerMixin } from '@semapps/ldp'; +import { OntologiesService } from '@semapps/ontologies'; +import { SparqlEndpointService } from '@semapps/sparql-endpoint'; +import { TripleStoreService } from '@semapps/triplestore'; +import { VoidService } from '@semapps/void'; +import { WebAclService } from '@semapps/webacl'; +import { WebfingerService } from '@semapps/webfinger'; +import { KeysService, SignatureService } from '@semapps/crypto'; +import { WebIdService } from '@semapps/webid'; +import { ServiceSchema } from 'moleculer'; const botsContainer = { path: '/as/application', @@ -25,7 +26,7 @@ const botsContainer = { /** @type {import('moleculer').ServiceSchema} */ const CoreService = { - name: 'core', + name: 'core' as const, settings: { baseUrl: undefined, baseDir: undefined, @@ -56,6 +57,7 @@ const CoreService = { const { baseUrl, baseDir, triplestore, containers, ontologies } = this.settings; if (this.settings.activitypub !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub";... Remove this comment to see the full error message this.broker.createService({ mixins: [ActivityPubService], // Type support for settings could be given, once moleculer type definitions improve... @@ -67,6 +69,7 @@ const CoreService = { } if (this.settings.api !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: (ServiceSchema (a.opts.catchAll ? 1 : -1)); - this.aliases.sort(a => (a.route.opts.catchAll ? 1 : -1)); + this.routes.sort((a: any) => (a.opts.catchAll ? 1 : -1)); + this.aliases.sort((a: any) => (a.route.opts.catchAll ? 1 : -1)); } } }); } if (this.settings.jsonld !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld"; sett... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdService], settings: { @@ -119,6 +123,7 @@ const CoreService = { }); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ontologies"; ... Remove this comment to see the full error message this.broker.createService({ mixins: [OntologiesService], settings: { @@ -127,6 +132,7 @@ const CoreService = { }); if (this.settings.ldp !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: ({ name: "ldp"; settin... Remove this comment to see the full error message this.broker.createService({ mixins: this.settings.ldp.documentTagger !== false ? [DocumentTaggerMixin, LdpService] : [LdpService], settings: { @@ -138,6 +144,7 @@ const CoreService = { } if (this.settings.signature !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "signature"; a... Remove this comment to see the full error message this.broker.createService({ mixins: [SignatureService], settings: { @@ -147,6 +154,7 @@ const CoreService = { } if (this.settings.webId !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webid"; mixin... Remove this comment to see the full error message this.broker.createService({ mixins: [WebIdService], settings: { @@ -157,6 +165,7 @@ const CoreService = { } if (this.settings.keys !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys"; settin... Remove this comment to see the full error message this.broker.createService({ mixins: [KeysService], settings: { @@ -167,6 +176,7 @@ const CoreService = { } if (this.settings.sparqlEndpoint !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "sparqlEndpoin... Remove this comment to see the full error message this.broker.createService({ mixins: [SparqlEndpointService], settings: { @@ -182,6 +192,7 @@ const CoreService = { const secure = this.settings.triplestore?.secure !== false && this.settings.webacl !== false; this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { ...triplestore @@ -198,6 +209,7 @@ const CoreService = { } if (this.settings.void !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "void"; settin... Remove this comment to see the full error message this.broker.createService({ mixins: [VoidService], settings: { @@ -208,6 +220,7 @@ const CoreService = { } if (this.settings.webacl !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl"; sett... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclService], settings: { @@ -218,6 +231,7 @@ const CoreService = { } if (this.settings.webfinger !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webfinger"; s... Remove this comment to see the full error message this.broker.createService({ mixins: [WebfingerService], settings: { @@ -227,6 +241,14 @@ const CoreService = { }); } } -}; +} satisfies ServiceSchema; + +export default CoreService; -module.exports = CoreService; +declare global { + export namespace Moleculer { + export interface AllServices { + [CoreService.name]: typeof CoreService; + } + } +} diff --git a/src/middleware/packages/core/tsconfig.json b/src/middleware/packages/core/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/core/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/crypto/constants.js b/src/middleware/packages/crypto/constants.ts similarity index 90% rename from src/middleware/packages/crypto/constants.js rename to src/middleware/packages/crypto/constants.ts index 8196f9788..f10bb4848 100644 --- a/src/middleware/packages/crypto/constants.js +++ b/src/middleware/packages/crypto/constants.ts @@ -1,4 +1,4 @@ -const noGraphCredentialContext = require('./utils/noGraphCredentialContext'); +import noGraphCredentialContext from './utils/noGraphCredentialContext.ts'; const VC_API_PATH = '/vc/v0.3'; @@ -50,9 +50,4 @@ const KEY_TYPES = { KEY: 'https://w3id.org/security#Key' }; -module.exports = { - VC_API_PATH, - KEY_TYPES, - credentialsContext, - credentialsContextNoGraphProof -}; +export { VC_API_PATH, KEY_TYPES, credentialsContext, credentialsContextNoGraphProof }; diff --git a/src/middleware/packages/crypto/index.js b/src/middleware/packages/crypto/index.js deleted file mode 100644 index c2da76dba..000000000 --- a/src/middleware/packages/crypto/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - ...require('./keys'), - ...require('./signature'), - ...require('./constants'), - ...require('./verifiable-credentials') -}; diff --git a/src/middleware/packages/crypto/index.ts b/src/middleware/packages/crypto/index.ts new file mode 100644 index 000000000..557f993ac --- /dev/null +++ b/src/middleware/packages/crypto/index.ts @@ -0,0 +1,4 @@ +export * from './keys/index.ts'; +export * from './signature/index.ts'; +export * from './constants.ts'; +export * from './verifiable-credentials/index.ts'; diff --git a/src/middleware/packages/crypto/keys/index.js b/src/middleware/packages/crypto/keys/index.js deleted file mode 100644 index e53efda24..000000000 --- a/src/middleware/packages/crypto/keys/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - MigrationService: require('./migration'), - KeysService: require('./keys') -}; diff --git a/src/middleware/packages/crypto/keys/index.ts b/src/middleware/packages/crypto/keys/index.ts new file mode 100644 index 000000000..839e778fd --- /dev/null +++ b/src/middleware/packages/crypto/keys/index.ts @@ -0,0 +1,4 @@ +import MigrationService from './migration.ts'; +import KeysService from './keys.ts'; + +export { MigrationService, KeysService }; diff --git a/src/middleware/packages/crypto/keys/key-container.js b/src/middleware/packages/crypto/keys/key-container.js deleted file mode 100644 index ed191b8bd..000000000 --- a/src/middleware/packages/crypto/keys/key-container.js +++ /dev/null @@ -1,79 +0,0 @@ -const { ControlledContainerMixin } = require('@semapps/ldp'); -const { Errors: E } = require('moleculer-web'); -const { arrayOf } = require('../utils/utils'); -const { KEY_TYPES } = require('../constants'); - -/** - * DANGER ZONE - * - * Container to store the private keys of actors. - * - * Watch out with permissions. This should be strictly limited to the owner and privileged apps. - * @type {import('moleculer').ServiceSchema} - */ -module.exports = { - name: 'keys.container', - mixins: [ControlledContainerMixin], - settings: { - path: '/key', - acceptedTypes: Object.values(KEY_TYPES), - permissions: (webId, ctx) => { - // If not a pod provider, the container is shared, so any user can append. - return { - anyUser: { - // Warning! ctx.service is the LdpContainerService. The WebAclMiddleware calls this function. This creates confusion. - read: !ctx.service.settings.podProvider, - append: !ctx.service.settings.podProvider - } - }; - }, - newResourcesPermissions: webId => { - if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); - - return { - user: { - uri: webId, - read: true, - write: true, - control: true - } - }; - }, - excludeFromMirror: true, - // Disallow PATCH & PUT, to prevent keys from being overwritten - controlledActions: { - get: 'keys.container.get', // Returns key object with context and type required by Multikey spec. - put: 'keys.container.forbidden', - patch: 'keys.container.forbidden', - delete: 'keys.delete' - } - }, - actions: { - async forbidden(ctx) { - throw new E.ForbiddenError(); - }, - /** - * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. - * See: - * - https://www.w3.org/TR/controller-document/#json-ld-context - * - https://www.w3.org/TR/controller-document/#Multikey - * - * This Action is used by the public key container as well. - * - */ - async get(ctx) { - const resource = await ctx.call('ldp.resource.get', { - ...ctx.params, - jsonContext: ['https://w3id.org/security/multikey/v1', ...(await ctx.call('jsonld.context.get'))] - }); - - // Make type `Multikey` only, to comply with spec. - if (arrayOf(resource.type).includes('sec:Multikey') || arrayOf(resource.type).includes('Multikey')) { - // Type must be Multikey only - resource.type = 'Multikey'; - } - - return resource; - } - } -}; diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts new file mode 100644 index 000000000..b94d0dfd9 --- /dev/null +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -0,0 +1,96 @@ +import { ControlledContainerMixin } from '@semapps/ldp'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { arrayOf } from '../utils/utils.ts'; +import { KEY_TYPES } from '../constants.ts'; + +/** + * DANGER ZONE + * + * Container to store the private keys of actors. + * + * Watch out with permissions. This should be strictly limited to the owner and privileged apps. + * @type {import('moleculer').ServiceSchema} + */ +const KeysContainerSchema = { + name: 'keys.container' as const, + mixins: [ControlledContainerMixin], + settings: { + path: '/key', + acceptedTypes: Object.values(KEY_TYPES), + permissions: (webId: any, ctx: any) => { + // If not a pod provider, the container is shared, so any user can append. + return { + anyUser: { + // Warning! ctx.service is the LdpContainerService. The WebAclMiddleware calls this function. This creates confusion. + read: !ctx.service.settings.podProvider, + append: !ctx.service.settings.podProvider + } + }; + }, + newResourcesPermissions: (webId: any) => { + if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); + + return { + user: { + uri: webId, + read: true, + write: true, + control: true + } + }; + }, + excludeFromMirror: true, + // Disallow PATCH & PUT, to prevent keys from being overwritten + controlledActions: { + get: 'keys.container.get', // Returns key object with context and type required by Multikey spec. + put: 'keys.container.forbidden', + patch: 'keys.container.forbidden', + delete: 'keys.delete' + } + }, + actions: { + forbidden: defineAction({ + async handler(ctx) { + throw new E.ForbiddenError(); + } + }), + + get: defineAction({ + /** + * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. + * See: + * - https://www.w3.org/TR/controller-document/#json-ld-context + * - https://www.w3.org/TR/controller-document/#Multikey + * + * This Action is used by the public key container as well. + * + */ + async handler(ctx) { + const resource = await ctx.call('ldp.resource.get', { + ...ctx.params, + jsonContext: ['https://w3id.org/security/multikey/v1', ...(await ctx.call('jsonld.context.get'))] + }); + + // Make type `Multikey` only, to comply with spec. + if (arrayOf(resource.type).includes('sec:Multikey') || arrayOf(resource.type).includes('Multikey')) { + // Type must be Multikey only + resource.type = 'Multikey'; + } + + return resource; + } + }) + } +} satisfies ServiceSchema; + +export default KeysContainerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysContainerSchema.name]: typeof KeysContainerSchema; + } + } +} diff --git a/src/middleware/packages/crypto/keys/keys.js b/src/middleware/packages/crypto/keys/keys.ts similarity index 78% rename from src/middleware/packages/crypto/keys/keys.js rename to src/middleware/packages/crypto/keys/keys.ts index bab0d9979..bf0e2b569 100644 --- a/src/middleware/packages/crypto/keys/keys.js +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -1,15 +1,17 @@ -const fetch = require('node-fetch'); -const { generateKeyPair } = require('crypto'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { sec } = require('@semapps/ontologies'); -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); -const { arrayOf } = require('../utils/utils'); -const { KEY_TYPES } = require('../constants'); -const KeyContainerService = require('./key-container'); -const PublicKeyContainerService = require('./public-key-container'); -const MigrationService = require('./migration'); -const { KeyPairService } = require('../signature'); +import fetch from 'node-fetch'; +import { generateKeyPair } from 'crypto'; +import { namedNode, triple } from '@rdfjs/data-model'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { sec } from '@semapps/ontologies'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { arrayOf } from '../utils/utils.ts'; +import { KEY_TYPES } from '../constants.ts'; +import KeyContainerService from './key-container.ts'; +import PublicKeyContainerService from './public-key-container.ts'; +import MigrationService from './migration.ts'; +import { KeyPairService } from '../signature/index.ts'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ @@ -26,7 +28,7 @@ const { KeyPairService } = require('../signature'); * @type {import('moleculer').ServiceSchema} */ const KeysService = { - name: 'keys', + name: 'keys' as const, settings: { podProvider: false, actorsKeyPairsDir: null @@ -34,18 +36,21 @@ const KeysService = { dependencies: ['ontologies', 'keys.container', 'keys.public-container', 'signature.keypair', 'keys.migration'], async created() { // Start keys-container and public-keys-container services. + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys.containe... Remove this comment to see the full error message this.broker.createService({ mixins: [KeyContainerService], settings: { podProvider: this.settings.podProvider } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys.public-c... Remove this comment to see the full error message this.broker.createService({ mixins: [PublicKeyContainerService], settings: { podProvider: this.settings.podProvider } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys.migratio... Remove this comment to see the full error message this.broker.createService({ mixins: [MigrationService], settings: { @@ -55,6 +60,7 @@ const KeysService = { }); // Legacy service. + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "signature.key... Remove this comment to see the full error message this.broker.createService({ mixins: [KeyPairService], settings: { @@ -74,13 +80,14 @@ const KeysService = { * Returns all available keys of the given `keyType` in the `/key` container. * If none is available `[]` is returned. */ - getByType: { + getByType: defineAction({ params: { keyType: { type: 'string' }, webId: { type: 'string', optional: true } }, async handler(ctx) { const { keyType } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; // Get the key container, to search by type. @@ -88,13 +95,13 @@ const KeysService = { // Check if key type is present. const matchedKeys = container['ldp:contains'].filter( - keyResource => + (keyResource: any) => arrayOf(keyResource.type || keyResource['@type']).includes(keyType) && keyResource.controller === webId ); return matchedKeys; } - }, + }), /** * Gets the keys by type that are present in the actor's webId. @@ -102,7 +109,7 @@ const KeysService = { * TODO: If this becomes a performance bottleneck, we can use SPARQL queries. * @returns An array of keys present in the webId. */ - getOrCreateWebIdKeys: { + getOrCreateWebIdKeys: defineAction({ params: { keyType: { type: 'string' }, webId: { type: 'string' } @@ -137,23 +144,27 @@ const KeysService = { }) ); } - }, + }), /** * Returns a signing key instance for a given key or key type. If no key is available, a new one is created. * Currently supports Ed25519Multikey only. * @returns {object} The Multikey object. */ - getMultikey: { + getMultikey: defineAction({ params: { webId: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message keyType: { type: 'string', default: KEY_TYPES.ED25519 }, /** Add the secret key to the key object, if not set (or the public key id is provided), it will be removed. */ + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message withPrivateKey: { type: 'boolean', default: false } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { keyId, keyType, withPrivateKey, webId = ctx.meta.webId } = ctx.params; // Get key from parameters, id (URI) or the one associated with the webId (in that priority). @@ -177,7 +188,7 @@ const KeysService = { return keyObject; } - }, + }), /** * Generates key, stores it in the `/key` container. @@ -185,7 +196,7 @@ const KeysService = { * If `attachToWebId` is true (not default), it will publish the key and attach the key to the webId document. * @returns {object} The key resource as located in the `/key` container. */ - createKeyForActor: { + createKeyForActor: defineAction({ params: { webId: { type: 'string' }, keyType: { type: 'string' }, @@ -223,13 +234,13 @@ const KeysService = { return keyObject; } - }, + }), /** * Generate a key of the type specified. * Type must be in the form of a {@link KEY_TYPES} URI. */ - generateKey: { + generateKey: defineAction({ params: { keyType: { type: 'string' } }, @@ -245,13 +256,13 @@ const KeysService = { throw new Error('Key type not supported.'); } - }, + }), /** * Generate ED25519 key pair. * @returns {object} Key pair in [MultiKey format](https://www.w3.org/TR/controller-document/#Multikey). */ - generateEd25519Key: { + generateEd25519Key: defineAction({ params: {}, async handler() { const keyPair = await Ed25519Multikey.generate(); @@ -265,7 +276,7 @@ const KeysService = { keyObject['@type'] = [KEY_TYPES.ED25519, KEY_TYPES.MULTI_KEY, KEY_TYPES.VERIFICATION_METHOD]; return keyObject; } - }, + }), /** * Generate a RSA key pair and returns public and private key in spki pkcs8 PEM encodings, respectively. @@ -276,7 +287,7 @@ const KeysService = { * 'privateKeyPem': privateKeyPkcs8PemString } * ``` */ - generateRsaKey: { + generateRsaKey: defineAction({ params: {}, async handler() { return new Promise((resolve, reject) => { @@ -307,7 +318,7 @@ const KeysService = { ); }); } - }, + }), /** * Attaches a given key to the webId document. @@ -318,10 +329,11 @@ const KeysService = { * @param {string} ctx.keyId The id of the public-private key pair resource. * @param {string} ctx.keyObject Alternatively, the public-private key pair resource itself. */ - attachPublicKeyToWebId: { + attachPublicKeyToWebId: defineAction({ params: { webId: { type: 'string' }, keyId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true } }, async handler(ctx) { @@ -373,10 +385,10 @@ const KeysService = { webId }); } - }, + }), /** Given a key object, remove the key from the webId document. */ - detachFromWebId: { + detachFromWebId: defineAction({ params: { webId: { type: 'string' }, publicKeyId: { type: 'string' } @@ -394,16 +406,18 @@ const KeysService = { webId }); } - }, + }), /** Given a local key (stored in `/key`), add the public key part to the `/public-key` container. */ - publishPublicKeyLocally: { + publishPublicKeyLocally: defineAction({ params: { keyId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const privateKeyUri = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: privateKeyUri })); @@ -431,19 +445,21 @@ const KeysService = { }); return publicKeyUri; } - }, + }), /** * Removes key from `key` container and detaches it from webId document and `public-key` container. */ - delete: { + delete: defineAction({ params: { resourceUri: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const resourceUri = ctx.params.resourceUri || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri, webId })); @@ -460,10 +476,10 @@ const KeysService = { await this.actions.detachFromWebId({ webId, publicKeyId }, { parentCtx: ctx }); } } - }, + }), /** Delete all keys belonging to an actor. */ - deleteAllKeysForWebId: { + deleteAllKeysForWebId: defineAction({ params: { webId: { type: 'string' } }, @@ -474,14 +490,14 @@ const KeysService = { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } } - }, + }), /** * Fetches remote keys from a webId (publicKey or assertionMethod field). * Returns all keys of the given `keyType` or all, if `keyType` is `null`. * Does not filter outdated keys. */ - getRemotePublicKeys: { + getRemotePublicKeys: defineAction({ params: { webId: { type: 'string' }, keyType: { type: 'string', optional: true, default: KEY_TYPES.RSA, nullable: true } @@ -527,13 +543,14 @@ const KeysService = { return keyObjects; } - }, + }), /** * Returns the public key part of a given `keyObject`. */ - getPublicKeyObject: { + getPublicKeyObject: defineAction({ params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, @@ -570,9 +587,9 @@ const KeysService = { /** @type {never} Not implemented yet. */ throw new Error(`Key type ${keyType} not supported.`); } - }, + }), - findPrivateKeyUri: { + findPrivateKeyUri: defineAction({ params: { publicKeyUri: { type: 'string' } }, @@ -591,7 +608,7 @@ const KeysService = { return queryResult[0]?.privateKey?.value; } - } + }) }, methods: {}, hooks: { @@ -606,38 +623,60 @@ const KeysService = { } }, events: { - async 'keys.migration.migrated'() { - this.isMigrated = true; - }, - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - - if (!this.isMigrated) { - // Key creation will be handled by legacy service. - return; + 'keys.migration.migrated': defineServiceEvent({ + async handler() { + // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message + this.isMigrated = true; } + }), - // Wait for the key containers to be created. - const keyContainerUri = await ctx.call('keys.container.getContainerUri', { webId }, { parentCtx: ctx }); - const publicKeyContainerUri = await ctx.call( - 'keys.public-container.getContainerUri', - { webId }, - { parentCtx: ctx } - ); - await ctx.call('keys.container.waitForContainerCreation', { containerUri: keyContainerUri }, { parentCtx: ctx }); - await ctx.call( - 'keys.container.waitForContainerCreation', - { containerUri: publicKeyContainerUri }, - { parentCtx: ctx } - ); - - // Create, publish and attach keys to the webId. - await Promise.all([ - this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.RSA }, { parentCtx: ctx }), - this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) - ]); - } + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + + // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message + if (!this.isMigrated) { + // Key creation will be handled by legacy service. + return; + } + + // Wait for the key containers to be created. + const keyContainerUri = await ctx.call('keys.container.getContainerUri', { webId }, { parentCtx: ctx }); + const publicKeyContainerUri = await ctx.call( + 'keys.public-container.getContainerUri', + { webId }, + { parentCtx: ctx } + ); + await ctx.call( + 'keys.container.waitForContainerCreation', + { containerUri: keyContainerUri }, + { parentCtx: ctx } + ); + await ctx.call( + 'keys.container.waitForContainerCreation', + { containerUri: publicKeyContainerUri }, + { parentCtx: ctx } + ); + + // Create, publish and attach keys to the webId. + await Promise.all([ + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.RSA }, { parentCtx: ctx }), + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) + ]); + } + }) } -}; +} satisfies ServiceSchema; + +export default KeysService; -module.exports = KeysService; +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysService.name]: typeof KeysService; + } + } +} diff --git a/src/middleware/packages/crypto/keys/migration.js b/src/middleware/packages/crypto/keys/migration.js deleted file mode 100644 index 0fda90f08..000000000 --- a/src/middleware/packages/crypto/keys/migration.js +++ /dev/null @@ -1,178 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const { KEY_TYPES } = require('../constants'); - -/** @type {import('moleculer').ServiceSchema} */ -module.exports = { - name: 'keys.migration', - settings: { - actorsKeyPairsDir: null, - podProvider: false - }, - actions: { - /** Migrates cryptographic RSA keys from filesystem storage to the `/keys` ldp containers */ - async migrateKeysToDb(ctx) { - // Check actorsKeyPairsDir for existing keys. - if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { - this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't exist."); - return; - } - - const accounts = await ctx.call('auth.account.find'); - const usernamesByKey = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .filter(fn => fn.endsWith('.key')) - .map(file => file.substring(0, file.length - 4)); - - if (usernamesByKey.length === 0) { - this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't contain any key files."); - return; - } - - let errorUsernames = []; - - this.logger.info(`=== Migrating keys from filesystem to LDP ===`); - - // This can cause deadlocks otherwise. - ctx.meta.skipObjectsWatcher = true; - - for (const { webId, username } of accounts) { - // Do the migration process. - try { - this.logger.info(`Migrating key of ${webId}`); - - if (this.settings.podProvider) ctx.meta.dataset = username; - - const { publicKey, privateKey } = await ctx.call('signature.keypair.get', { - actorUri: webId, - webId: 'system' - }); - - // Delete public key material from webId (later replaced with references to the public key resources). - await this.deleteKeysFromWebId(ctx, webId); - - // Create key resources in db and link to webIds. - await this.attachOrCreateToDb(ctx, webId, publicKey, privateKey); - } catch (err) { - this.logger.error(`An error occurred during migration. Key of ${webId} could not be migrated.`, err); - - errorUsernames.push(username); - - // Try to revert to initial state. - try { - await this.deleteKeysFromWebId(ctx, webId); - } catch (_) { - // pass - } - - // Re-add possibly deleted publicKeys to webId document. This will do nothing if keys are attached. - await ctx.call('signature.keypair.attachPublicKey', { actorUri: webId }); - } - } - - // Keys are stored in db now. - // Finally, move fs keys to ./old folder - const keyFiles = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .filter(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); - fs.mkdirSync(path.join(this.settings.actorsKeyPairsDir, 'old'), { recursive: true }); - keyFiles.map(keyFile => - fs.renameSync( - path.join(this.settings.actorsKeyPairsDir, keyFile), - path.join(this.settings.actorsKeyPairsDir, 'old', keyFile) - ) - ); - - // Stats about missing accounts and key-pairs. - const accountNames = accounts.map(acc => acc.username); - const keysWithoutRegisteredUser = usernamesByKey.filter(keyName => !accountNames.includes(keyName)); - const usersWithoutKeys = accountNames.filter(accName => !usernamesByKey.includes(accName)); - - if (errorUsernames.length > 0) { - this.logger.warn(`During the migration, the following accounts generated errors:`, errorUsernames); - } - if (keysWithoutRegisteredUser.length > 0) { - this.logger.warn( - `During the migration, the following keys were found that did not have a registered user associated:`, - keysWithoutRegisteredUser - ); - } - if (usersWithoutKeys.length > 0) { - this.logger.warn( - `During the migration, the following accounts were found that did not have key pairs. New ones were created:`, - usersWithoutKeys - ); - } - - this.logger.info('=== Keys migration completed ==='); - await ctx.emit('keys.migration.migrated'); - }, - - /** Returns true, if the server has migrated to the new keys service yet, i.e. keys are stored in the user dataset, not on fs. */ - async isMigrated() { - // If the `actorsKeyPairsDir` setting is not set, we assume migration has happened or was never needed. - if (!this.settings.actorsKeyPairsDir) { - return true; - } - - // Check actorsKeyPairsDir for existing keys. - if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { - return true; - } - - const anyKeyFile = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .find(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); - - return !anyKeyFile; - } - }, - methods: { - // Delete old public key blank node and data from the webId. - // Note: updating the triple store directly would usually require to delete the Redis cache for - // the webId, but since we are attaching the new public key in the next step, it is not necessary. - async deleteKeysFromWebId(ctx, webId) { - await ctx.call('triplestore.update', { - query: ` - PREFIX sec: - DELETE { - <${webId}> sec:publicKey ?o . - ?o ?p1 ?o1 . - } - WHERE { - <${webId}> sec:publicKey ?o . - ?o ?p1 ?o1 . - } - `, - webId: 'system' - }); - }, - // Add keys to container / create new keys where missing. - async attachOrCreateToDb(ctx, webId, publicKey, privateKey) { - if (publicKey && privateKey) { - // Add the key using the new keys service. - const keyResource = { - '@type': [KEY_TYPES.RSA, KEY_TYPES.VERIFICATION_METHOD], - publicKeyPem: publicKey, - privateKeyPem: privateKey, - owner: webId, - controller: webId - }; - const keyId = await ctx.call('keys.container.post', { - resource: keyResource, - webId - }); - keyResource.id = keyId; - // Publish key. - await ctx.call( - 'keys.attachPublicKeyToWebId', - { webId, keyObject: keyResource }, - { meta: { skipMigrationCheck: true } } - ); - } else { - this.logger.warn(`No public/private key found for ${webId}, creating it...`); - await ctx.call('keys.createKeyForActor', { webId, keyType: KEY_TYPES.RSA, attachToWebId: true }); - } - } - } -}; diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts new file mode 100644 index 000000000..1a117cce1 --- /dev/null +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -0,0 +1,196 @@ +import fs from 'fs'; +import path from 'path'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; + +/** @type {import('moleculer').ServiceSchema} */ +const KeysMigrationSchema = { + name: 'keys.migration' as const, + settings: { + actorsKeyPairsDir: null, + podProvider: false + }, + actions: { + migrateKeysToDb: defineAction({ + /** Migrates cryptographic RSA keys from filesystem storage to the `/keys` ldp containers */ + async handler(ctx) { + // Check actorsKeyPairsDir for existing keys. + if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { + this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't exist."); + return; + } + + const accounts = await ctx.call('auth.account.find'); + const usernamesByKey = fs + .readdirSync(this.settings.actorsKeyPairsDir) + .filter(fn => fn.endsWith('.key')) + .map(file => file.substring(0, file.length - 4)); + + if (usernamesByKey.length === 0) { + this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't contain any key files."); + return; + } + + let errorUsernames = []; + + this.logger.info(`=== Migrating keys from filesystem to LDP ===`); + + // This can cause deadlocks otherwise. + // @ts-expect-error TS(2339): Property 'skipObjectsWatcher' does not exist on ty... Remove this comment to see the full error message + ctx.meta.skipObjectsWatcher = true; + + for (const { webId, username } of accounts) { + // Do the migration process. + try { + this.logger.info(`Migrating key of ${webId}`); + + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + if (this.settings.podProvider) ctx.meta.dataset = username; + + const { publicKey, privateKey } = await ctx.call('signature.keypair.get', { + actorUri: webId, + webId: 'system' + }); + + // Delete public key material from webId (later replaced with references to the public key resources). + await this.deleteKeysFromWebId(ctx, webId); + + // Create key resources in db and link to webIds. + await this.attachOrCreateToDb(ctx, webId, publicKey, privateKey); + } catch (err) { + this.logger.error(`An error occurred during migration. Key of ${webId} could not be migrated.`, err); + + errorUsernames.push(username); + + // Try to revert to initial state. + try { + await this.deleteKeysFromWebId(ctx, webId); + } catch (_) { + // pass + } + + // Re-add possibly deleted publicKeys to webId document. This will do nothing if keys are attached. + await ctx.call('signature.keypair.attachPublicKey', { actorUri: webId }); + } + } + + // Keys are stored in db now. + // Finally, move fs keys to ./old folder + const keyFiles = fs + .readdirSync(this.settings.actorsKeyPairsDir) + .filter(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); + fs.mkdirSync(path.join(this.settings.actorsKeyPairsDir, 'old'), { recursive: true }); + keyFiles.map(keyFile => + fs.renameSync( + path.join(this.settings.actorsKeyPairsDir, keyFile), + path.join(this.settings.actorsKeyPairsDir, 'old', keyFile) + ) + ); + + // Stats about missing accounts and key-pairs. + const accountNames = accounts.map((acc: any) => acc.username); + const keysWithoutRegisteredUser = usernamesByKey.filter(keyName => !accountNames.includes(keyName)); + const usersWithoutKeys = accountNames.filter((accName: any) => !usernamesByKey.includes(accName)); + + if (errorUsernames.length > 0) { + this.logger.warn(`During the migration, the following accounts generated errors:`, errorUsernames); + } + if (keysWithoutRegisteredUser.length > 0) { + this.logger.warn( + `During the migration, the following keys were found that did not have a registered user associated:`, + keysWithoutRegisteredUser + ); + } + if (usersWithoutKeys.length > 0) { + this.logger.warn( + `During the migration, the following accounts were found that did not have key pairs. New ones were created:`, + usersWithoutKeys + ); + } + + this.logger.info('=== Keys migration completed ==='); + await ctx.emit('keys.migration.migrated'); + } + }), + + isMigrated: defineAction({ + /** Returns true, if the server has migrated to the new keys service yet, i.e. keys are stored in the user dataset, not on fs. */ + async handler() { + // If the `actorsKeyPairsDir` setting is not set, we assume migration has happened or was never needed. + if (!this.settings.actorsKeyPairsDir) { + return true; + } + + // Check actorsKeyPairsDir for existing keys. + if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { + return true; + } + + const anyKeyFile = fs + .readdirSync(this.settings.actorsKeyPairsDir) + .find(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); + + return !anyKeyFile; + } + }) + }, + methods: { + // Delete old public key blank node and data from the webId. + // Note: updating the triple store directly would usually require to delete the Redis cache for + // the webId, but since we are attaching the new public key in the next step, it is not necessary. + async deleteKeysFromWebId(ctx, webId) { + await ctx.call('triplestore.update', { + query: ` + PREFIX sec: + DELETE { + <${webId}> sec:publicKey ?o . + ?o ?p1 ?o1 . + } + WHERE { + <${webId}> sec:publicKey ?o . + ?o ?p1 ?o1 . + } + `, + webId: 'system' + }); + }, + // Add keys to container / create new keys where missing. + async attachOrCreateToDb(ctx, webId, publicKey, privateKey) { + if (publicKey && privateKey) { + // Add the key using the new keys service. + const keyResource = { + '@type': [KEY_TYPES.RSA, KEY_TYPES.VERIFICATION_METHOD], + publicKeyPem: publicKey, + privateKeyPem: privateKey, + owner: webId, + controller: webId + }; + const keyId = await ctx.call('keys.container.post', { + resource: keyResource, + webId + }); + // @ts-expect-error TS(2339): Property 'id' does not exist on type '{ '@type': s... Remove this comment to see the full error message + keyResource.id = keyId; + // Publish key. + await ctx.call( + 'keys.attachPublicKeyToWebId', + { webId, keyObject: keyResource }, + { meta: { skipMigrationCheck: true } } + ); + } else { + this.logger.warn(`No public/private key found for ${webId}, creating it...`); + await ctx.call('keys.createKeyForActor', { webId, keyType: KEY_TYPES.RSA, attachToWebId: true }); + } + } + } +} satisfies ServiceSchema; + +export default KeysMigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysMigrationSchema.name]: typeof KeysMigrationSchema; + } + } +} diff --git a/src/middleware/packages/crypto/keys/public-key-container.js b/src/middleware/packages/crypto/keys/public-key-container.ts similarity index 63% rename from src/middleware/packages/crypto/keys/public-key-container.js rename to src/middleware/packages/crypto/keys/public-key-container.ts index d509532ed..4b72bcd9b 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.js +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -1,20 +1,22 @@ -const { triple, namedNode } = require('@rdfjs/data-model'); -const { ControlledContainerMixin } = require('@semapps/ldp'); -const { Errors: E } = require('moleculer-web'); -const { KEY_TYPES } = require('../constants'); +import { triple, namedNode } from '@rdfjs/data-model'; +import { ControlledContainerMixin } from '@semapps/ldp'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; /** * Container to store the public keys of actors only. * Anonymous read is allowed by default. * */ -module.exports = { - name: 'keys.public-container', +const KeysPublicContainerSchema = { + name: 'keys.public-container' as const, mixins: [ControlledContainerMixin], settings: { path: '/public-key', acceptedTypes: Object.values(KEY_TYPES), - permissions: (webId, ctx) => { + permissions: (webId: any, ctx: any) => { // If no pod provider, the container is shared, so any user can append. return { anyUser: { @@ -24,7 +26,7 @@ module.exports = { } }; }, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); return { @@ -49,9 +51,11 @@ module.exports = { }, actions: { - async forbidden(ctx) { - throw new E.ForbiddenError(); - } + forbidden: defineAction({ + async handler(ctx) { + throw new E.ForbiddenError(); + } + }) }, hooks: { @@ -66,6 +70,7 @@ module.exports = { resourceUri: privateKeyId, triplesToRemove: [ triple( + // @ts-expect-error TS(2345): Argument of type 'Promisify' is not assignabl... Remove this comment to see the full error message namedNode(privateKeyId), namedNode('http://www.w3.org/2000/01/rdf-schema#seeAlso'), namedNode(resourceUri) @@ -75,4 +80,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default KeysPublicContainerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysPublicContainerSchema.name]: typeof KeysPublicContainerSchema; + } + } +} diff --git a/src/middleware/packages/crypto/package.json b/src/middleware/packages/crypto/package.json index c03fbd26b..a868636d7 100644 --- a/src/middleware/packages/crypto/package.json +++ b/src/middleware/packages/crypto/package.json @@ -4,7 +4,7 @@ "description": "Key and Signature Services for Semapps", "license": "Apache-2.0", "author": "Virtual Assembly", - "type": "commonjs", + "type": "module", "dependencies": { "@digitalbazaar/data-integrity": "^2.5.0", "@digitalbazaar/ed25519-multikey": "^1.3.0", @@ -22,16 +22,20 @@ "http-signature-header": "^1.3.1", "jose": "^5.2.0", "jsonld-signatures": "^11.3.2", - "moleculer": "^0.14.18", - "moleculer-web": "^0.10.0-beta1", "node-fetch": "^2.6.6", "url-join": "^4.0.1", "vc-js": "^0.6.4" }, + "peerDependencies": { + "moleculer": "^0.14.35", + "moleculer-web": "^0.10.0-beta1" + }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=22.12.0" - } + "node": ">=22.10.0" + }, + "main": "./index.ts" } diff --git a/src/middleware/packages/crypto/signature/http-signatures.js b/src/middleware/packages/crypto/signature/http-signatures.js deleted file mode 100644 index 0a8abe90c..000000000 --- a/src/middleware/packages/crypto/signature/http-signatures.js +++ /dev/null @@ -1,145 +0,0 @@ -const { createSign, createHash } = require('crypto'); -const { parseRequest, verifySignature } = require('http-signature'); -const { createAuthzHeader, createSignatureString } = require('http-signature-header'); -const { Errors: E } = require('moleculer-web'); -const { KEY_TYPES } = require('../constants'); -const { arrayOf } = require('../utils/utils'); - -const HttpSignatureService = { - // TODO: Rename to signature.http-signatures in a major release. - name: 'signature', - actions: { - async generateSignatureHeaders(ctx) { - const { url, method, body, actorUri } = ctx.params; - // TODO: Use new service. - const [{ privateKeyPem }] = await ctx.call('keys.getOrCreateWebIdKeys', { - keyType: KEY_TYPES.RSA, - webId: actorUri - }); - - const headers = { Date: new Date().toUTCString() }; - const includeHeaders = ['(request-target)', 'host', 'date']; - if (body) { - headers.Digest = this.buildDigest(body); - includeHeaders.push('digest'); - } - - // Generate signature string - const requestOptions = { url, method, headers }; - const signatureString = createSignatureString({ includeHeaders, requestOptions }); - - // Hash signature string - const signer = createSign('sha256'); - signer.update(signatureString); - const signatureHash = signer.sign(privateKeyPem).toString('base64'); - - headers.Signature = createAuthzHeader({ - includeHeaders, - keyId: actorUri, - signature: signatureHash, - algorithm: 'rsa-sha256' - }).substr('Signature '.length); - - return headers; - }, - async verifyDigest(ctx) { - const { body, headers } = ctx.params; - return headers.digest ? this.buildDigest(body) === headers.digest : true; - }, - - /** - * Given url, path, method, headers, validates a given http signature. - * If the signature is valid, it returns the actorUri and the publicKeyPem used to verify the signature. - * Else, it returns `{isValid: false}`. - * @param {object} ctx Context - * @param {object} ctx.params Params - * @param {string} ctx.params.url The URL of the request - * @param {string} ctx.params.path The path of the request - * @param {string} ctx.params.method The method of the request - * @param {object} ctx.params.headers The headers of the request - * @returns {Promise<{isValid: boolean, actorUri: string, publicKeyPem: string}>} - */ - async verifyHttpSignature(ctx) { - const { url, path, method, headers } = ctx.params; - - // If there is a x-forwarded-host header, set is as host - // This is the default behavior for Express server but the ApiGateway doesn't use Express - if (headers['x-forwarded-host']) { - headers.host = headers['x-forwarded-host']; - } - - const parsedSignature = parseRequest({ - url: path || url.replace(new URL(url).origin, ''), // URL without domain name - method, - headers - }); - - const { keyId } = parsedSignature.params; - if (!keyId) return { isValid: false }; - const [actorUri] = keyId.split('#'); - - // TODO: Check if keys are outdated - - const publicKeys = await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); - - if (!publicKeys) return { isValid: false }; - - // Check, if one of the keys is able to verify the signature. - const { isValid: keyValid, publicKey: publicKeyPem } = publicKeys - .flatMap(key => key.publicKeyPem || []) - .map(pubKeyPem => { - try { - return { isValid: verifySignature(parsedSignature, pubKeyPem), publicKey: pubKeyPem }; - } catch (e) { - return { isValid: false }; - } - }) - .find(({ isValid }) => isValid) || { isValid: false, publicKey: null }; - - return { isValid: keyValid, actorUri, publicKeyPem }; - }, - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication - async authenticate(ctx) { - const { route, req, res } = ctx.params; - if (req.headers.signature) { - const { isValid, actorUri } = await this.actions.verifyHttpSignature( - { path: req.originalUrl, method: req.method, headers: req.headers }, - { parentCtx: ctx } - ); - if (isValid) { - ctx.meta.webId = actorUri; - return Promise.resolve(); - } - ctx.meta.webId = 'anon'; - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); - } - ctx.meta.webId = 'anon'; - return Promise.resolve(null); - }, - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization - async authorize(ctx) { - const { route, req, res } = ctx.params; - if (req.headers.signature) { - const { isValid, actorUri } = await this.actions.verifyHttpSignature( - { path: req.originalUrl, method: req.method, headers: req.headers }, - { parentCtx: ctx } - ); - if (isValid) { - ctx.meta.webId = actorUri; - return Promise.resolve(); - } - ctx.meta.webId = 'anon'; - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); - } - ctx.meta.webId = 'anon'; - return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); - } - }, - methods: { - buildDigest(body) { - return `SHA-256=${createHash('sha256').update(body).digest('base64')}`; - } - } -}; - -module.exports = HttpSignatureService; diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts new file mode 100644 index 000000000..2fa4fc06b --- /dev/null +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -0,0 +1,178 @@ +import { createSign, createHash } from 'crypto'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'http... Remove this comment to see the full error message +import { parseRequest, verifySignature } from 'http-signature'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'http... Remove this comment to see the full error message +import { createAuthzHeader, createSignatureString } from 'http-signature-header'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; +import { arrayOf } from '../utils/utils.ts'; + +const HttpSignatureService = { + // TODO: Rename to signature.http-signatures in a major release. + name: 'signature' as const, + actions: { + generateSignatureHeaders: defineAction({ + async handler(ctx) { + const { url, method, body, actorUri } = ctx.params; + // TODO: Use new service. + const [{ privateKeyPem }] = await ctx.call('keys.getOrCreateWebIdKeys', { + keyType: KEY_TYPES.RSA, + webId: actorUri + }); + + const headers = { Date: new Date().toUTCString() }; + const includeHeaders = ['(request-target)', 'host', 'date']; + if (body) { + // @ts-expect-error TS(2339): Property 'Digest' does not exist on type '{ Date: ... Remove this comment to see the full error message + headers.Digest = this.buildDigest(body); + includeHeaders.push('digest'); + } + + // Generate signature string + const requestOptions = { url, method, headers }; + const signatureString = createSignatureString({ includeHeaders, requestOptions }); + + // Hash signature string + const signer = createSign('sha256'); + signer.update(signatureString); + const signatureHash = signer.sign(privateKeyPem).toString('base64'); + + // @ts-expect-error TS(2339): Property 'Signature' does not exist on type '{ Dat... Remove this comment to see the full error message + headers.Signature = createAuthzHeader({ + includeHeaders, + keyId: actorUri, + signature: signatureHash, + algorithm: 'rsa-sha256' + }).substr('Signature '.length); + + return headers; + } + }), + + verifyDigest: defineAction({ + async handler(ctx) { + const { body, headers } = ctx.params; + return headers.digest ? this.buildDigest(body) === headers.digest : true; + } + }), + + verifyHttpSignature: defineAction({ + /** + * Given url, path, method, headers, validates a given http signature. + * If the signature is valid, it returns the actorUri and the publicKeyPem used to verify the signature. + * Else, it returns `{isValid: false}`. + * @param {object} ctx Context + * @param {object} ctx.params Params + * @param {string} ctx.params.url The URL of the request + * @param {string} ctx.params.path The path of the request + * @param {string} ctx.params.method The method of the request + * @param {object} ctx.params.headers The headers of the request + * @returns {Promise<{isValid: boolean, actorUri: string, publicKeyPem: string}>} + */ + async handler(ctx) { + const { url, path, method, headers } = ctx.params; + + // If there is a x-forwarded-host header, set is as host + // This is the default behavior for Express server but the ApiGateway doesn't use Express + if (headers['x-forwarded-host']) { + headers.host = headers['x-forwarded-host']; + } + + const parsedSignature = parseRequest({ + url: path || url.replace(new URL(url).origin, ''), // URL without domain name + method, + headers + }); + + const { keyId } = parsedSignature.params; + if (!keyId) return { isValid: false }; + const [actorUri] = keyId.split('#'); + + // TODO: Check if keys are outdated + + const publicKeys = await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); + + if (!publicKeys) return { isValid: false }; + + // Check, if one of the keys is able to verify the signature. + const { isValid: keyValid, publicKey: publicKeyPem } = publicKeys + .flatMap((key: any) => key.publicKeyPem || []) + .map((pubKeyPem: any) => { + try { + return { isValid: verifySignature(parsedSignature, pubKeyPem), publicKey: pubKeyPem }; + } catch (e) { + return { isValid: false }; + } + }) + .find(({ isValid }: any) => isValid) || { isValid: false, publicKey: null }; + + return { isValid: keyValid, actorUri, publicKeyPem }; + } + }), + + authenticate: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication + async handler(ctx) { + const { route, req, res } = ctx.params; + if (req.headers.signature) { + const { isValid, actorUri } = await this.actions.verifyHttpSignature( + { path: req.originalUrl, method: req.method, headers: req.headers }, + { parentCtx: ctx } + ); + if (isValid) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = actorUri; + return Promise.resolve(); + } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = 'anon'; + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = 'anon'; + return Promise.resolve(null); + } + }), + + authorize: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization + async handler(ctx) { + const { route, req, res } = ctx.params; + if (req.headers.signature) { + const { isValid, actorUri } = await this.actions.verifyHttpSignature( + { path: req.originalUrl, method: req.method, headers: req.headers }, + { parentCtx: ctx } + ); + if (isValid) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = actorUri; + return Promise.resolve(); + } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = 'anon'; + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = 'anon'; + return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); + } + }) + }, + methods: { + buildDigest(body) { + return `SHA-256=${createHash('sha256').update(body).digest('base64')}`; + } + } +} satisfies ServiceSchema; + +export default HttpSignatureService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [HttpSignatureService.name]: typeof HttpSignatureService; + } + } +} diff --git a/src/middleware/packages/crypto/signature/index.js b/src/middleware/packages/crypto/signature/index.js deleted file mode 100644 index cf96939ab..000000000 --- a/src/middleware/packages/crypto/signature/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - SignatureService: require('./http-signatures'), - ProxyService: require('./proxy'), - KeyPairService: require('./keypair') -}; diff --git a/src/middleware/packages/crypto/signature/index.ts b/src/middleware/packages/crypto/signature/index.ts new file mode 100644 index 000000000..4a4699526 --- /dev/null +++ b/src/middleware/packages/crypto/signature/index.ts @@ -0,0 +1,5 @@ +import SignatureService from './http-signatures.ts'; +import ProxyService from './proxy.ts'; +import KeyPairService from './keypair.ts'; + +export { SignatureService, ProxyService, KeyPairService }; diff --git a/src/middleware/packages/crypto/signature/keypair.js b/src/middleware/packages/crypto/signature/keypair.js deleted file mode 100644 index 8858e1abf..000000000 --- a/src/middleware/packages/crypto/signature/keypair.js +++ /dev/null @@ -1,229 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const fetch = require('node-fetch'); -const { generateKeyPair } = require('crypto'); -const { namedNode, blankNode, literal, triple } = require('@rdfjs/data-model'); -const { KEY_TYPES } = require('../constants'); - -/** - * Deprecated Service. - * This service uses a file-system based key store, the new one stores keys in the graph db. - * If the migration has taken place (by calling `keys.migration.migrateKeysToDb`), calls - * will be redirected to the new service. - * @type {import('moleculer').ServiceSchema} - */ -const SignatureService = { - name: 'signature.keypair', - settings: { - actorsKeyPairsDir: null - }, - async created() { - if (this.settings.actorsKeyPairsDir && !fs.existsSync(this.settings.actorsKeyPairsDir)) { - this.logger.warn( - `The \`actorsKeyPairsDir\` is configured for the keys legacy service but the directory (${this.settings.actorsKeyPairsDir}) does not exist! Please remove the setting (preferred) or create the directory.` - ); - } - }, - async started() { - await this.waitForServices('keys.migration'); - this.isMigrated = await this.broker.call('keys.migration.isMigrated'); - }, - actions: { - async generate(ctx) { - const { actorUri } = ctx.params; - - if (this.isMigrated) { - let [key] = await ctx.call('keys.getOrCreateWebIdKeys', { - keyType: KEY_TYPES.RSA, - webId: actorUri - }); - return key.publicKeyPem; - } - - const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); - if (publicKey) { - this.logger.info(`Key for ${actorUri} already exists, skipping...`); - return publicKey; - } - - const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - - return new Promise((resolve, reject) => { - generateKeyPair( - 'rsa', - { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' - } - }, - (err, publicKey, privateKey) => { - if (!err) { - fs.writeFile(privateKeyPath, privateKey, err => reject(err)); - fs.writeFile(publicKeyPath, publicKey, err => reject(err)); - resolve(publicKey); - } else { - reject(err); - } - } - ); - }); - }, - - async delete(ctx) { - const { actorUri } = ctx.params; - - if (this.isMigrated) { - const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); - await ctx.call('keys.delete', { resourceUri: key.id || key['@id'], webId: actorUri }); - return; - } - - const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - - try { - await fs.promises.unlink(privateKeyPath); - await fs.promises.unlink(publicKeyPath); - } catch (e) { - console.log(`Could not delete key pair for actor ${actorUri}`); - } - }, - - async attachPublicKey(ctx) { - const { actorUri } = ctx.params; - - if (this.isMigrated) { - this.logger.info( - `The keys service has been migrated. Key setup is handled by the keys service. This function will not have an effect` - ); - return; - } - - const actor = await ctx.call('ldp.resource.get', { - resourceUri: actorUri, - webId: actorUri - }); - - // Ensure a public key is not already attached - if (!actor.publicKey) { - const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); - - await ctx.call('ldp.resource.patch', { - resourceUri: actorUri, - triplesToAdd: [ - triple(namedNode(actorUri), namedNode('https://w3id.org/security#publicKey'), blankNode('b0')), - triple(blankNode('b0'), namedNode('https://w3id.org/security#owner'), namedNode(actorUri)), - triple(blankNode('b0'), namedNode('https://w3id.org/security#publicKeyPem'), literal(publicKey)) - ], - webId: 'system' - }); - } - }, - - async getPaths(ctx) { - const { actorUri } = ctx.params; - - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - - if (account) { - const privateKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key`); - const publicKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key.pub`); - return { privateKeyPath, publicKeyPath }; - } - throw new Error(`No account found with URI ${actorUri}`); - }, - - async get(ctx) { - const { actorUri } = ctx.params; - - // Call new method, if migrated. - if (this.isMigrated) { - const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { keyType: KEY_TYPES.RSA, webId: actorUri }); - return { - publicKey: key.publicKeyPem, - privateKey: key.privateKeyPem - }; - } - - const { publicKeyPath, privateKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - try { - const publicKey = await fs.promises.readFile(publicKeyPath, { encoding: 'utf8' }); - const privateKey = await fs.promises.readFile(privateKeyPath, { encoding: 'utf8' }); - return { publicKey, privateKey }; - } catch (e) { - return {}; - } - }, - - async getRemotePublicKey(ctx) { - const { actorUri } = ctx.params; - - // Call new method, if migrated. - if (this.isMigrated) { - return (await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }))?.[0] - ?.publicKeyPem; - } - - let response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); - if (!response.ok) return false; - - const actor = await response.json(); - if (!actor || !actor.publicKey) return false; - - // If the public key is not dereferenced - if (typeof actor.publicKey === 'string') { - response = await fetch(actor.publicKey, { headers: { Accept: 'application/json' } }); - if (!response.ok) return false; - const publicKey = await response.json(); - if (!publicKey) return false; - return publicKey.publicKeyPem; - } else { - return actor.publicKey.publicKeyPem; - } - } - }, - hooks: { - before: { - '*': function showDeprecationWarning() { - // Only warn once - if (this.hasWarnedMigration) return; - - if (this.isMigrated) { - this.logger.info( - 'The keys service has been migrated. ' + - 'Key requests and setup are redirected to and handled in the new service. ' + - 'This service might be removed in a future version.' - ); - } else { - this.logger.warn( - 'The keys service has not been migrated yet. ' + - 'This service is still handling key requests and setup. ' + - 'Please migrate to the new keys service.' - ); - } - this.hasWarnedMigration = true; - } - } - }, - events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - if (this.isMigrated) { - return; - } - - await this.actions.generate({ actorUri: webId }, { parentCtx: ctx }); - await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); - }, - async 'keys.migration.migrated'(ctx) { - this.isMigrated = true; - } - } -}; - -module.exports = SignatureService; diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts new file mode 100644 index 000000000..aaff18e38 --- /dev/null +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -0,0 +1,263 @@ +import fs from 'fs'; +import path from 'path'; +import fetch from 'node-fetch'; +import { generateKeyPair } from 'crypto'; +import { namedNode, blankNode, literal, triple } from '@rdfjs/data-model'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; + +/** + * Deprecated Service. + * This service uses a file-system based key store, the new one stores keys in the graph db. + * If the migration has taken place (by calling `keys.migration.migrateKeysToDb`), calls + * will be redirected to the new service. + * @type {import('moleculer').ServiceSchema} + */ +const SignatureService = { + name: 'signature.keypair' as const, + settings: { + actorsKeyPairsDir: null + }, + async created() { + if (this.settings.actorsKeyPairsDir && !fs.existsSync(this.settings.actorsKeyPairsDir)) { + this.logger.warn( + `The \`actorsKeyPairsDir\` is configured for the keys legacy service but the directory (${this.settings.actorsKeyPairsDir}) does not exist! Please remove the setting (preferred) or create the directory.` + ); + } + }, + async started() { + await this.waitForServices('keys.migration'); + this.isMigrated = await this.broker.call('keys.migration.isMigrated'); + }, + actions: { + generate: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + + if (this.isMigrated) { + let [key] = await ctx.call('keys.getOrCreateWebIdKeys', { + keyType: KEY_TYPES.RSA, + webId: actorUri + }); + return key.publicKeyPem; + } + + const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); + if (publicKey) { + this.logger.info(`Key for ${actorUri} already exists, skipping...`); + return publicKey; + } + + const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); + + return new Promise((resolve, reject) => { + generateKeyPair( + 'rsa', + { + modulusLength: 4096, + publicKeyEncoding: { + type: 'spki', + format: 'pem' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'pem' + } + }, + (err, publicKey, privateKey) => { + if (!err) { + fs.writeFile(privateKeyPath, privateKey, err => reject(err)); + fs.writeFile(publicKeyPath, publicKey, err => reject(err)); + resolve(publicKey); + } else { + reject(err); + } + } + ); + }); + } + }), + + delete: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + + if (this.isMigrated) { + const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); + await ctx.call('keys.delete', { resourceUri: key.id || key['@id'], webId: actorUri }); + return; + } + + const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); + + try { + await fs.promises.unlink(privateKeyPath); + await fs.promises.unlink(publicKeyPath); + } catch (e) { + console.log(`Could not delete key pair for actor ${actorUri}`); + } + } + }), + + attachPublicKey: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + + if (this.isMigrated) { + this.logger.info( + `The keys service has been migrated. Key setup is handled by the keys service. This function will not have an effect` + ); + return; + } + + const actor = await ctx.call('ldp.resource.get', { + resourceUri: actorUri, + webId: actorUri + }); + + // Ensure a public key is not already attached + if (!actor.publicKey) { + const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); + + await ctx.call('ldp.resource.patch', { + resourceUri: actorUri, + triplesToAdd: [ + triple(namedNode(actorUri), namedNode('https://w3id.org/security#publicKey'), blankNode('b0')), + triple(blankNode('b0'), namedNode('https://w3id.org/security#owner'), namedNode(actorUri)), + triple(blankNode('b0'), namedNode('https://w3id.org/security#publicKeyPem'), literal(publicKey)) + ], + webId: 'system' + }); + } + } + }), + + getPaths: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + + const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + + if (account) { + const privateKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key`); + const publicKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key.pub`); + return { privateKeyPath, publicKeyPath }; + } + throw new Error(`No account found with URI ${actorUri}`); + } + }), + + get: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + + // Call new method, if migrated. + if (this.isMigrated) { + const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { keyType: KEY_TYPES.RSA, webId: actorUri }); + return { + publicKey: key.publicKeyPem, + privateKey: key.privateKeyPem + }; + } + + const { publicKeyPath, privateKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); + try { + const publicKey = await fs.promises.readFile(publicKeyPath, { encoding: 'utf8' }); + const privateKey = await fs.promises.readFile(privateKeyPath, { encoding: 'utf8' }); + return { publicKey, privateKey }; + } catch (e) { + return {}; + } + } + }), + + getRemotePublicKey: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + + // Call new method, if migrated. + if (this.isMigrated) { + return (await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }))?.[0] + ?.publicKeyPem; + } + + let response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); + if (!response.ok) return false; + + const actor = await response.json(); + if (!actor || !actor.publicKey) return false; + + // If the public key is not dereferenced + if (typeof actor.publicKey === 'string') { + response = await fetch(actor.publicKey, { headers: { Accept: 'application/json' } }); + if (!response.ok) return false; + const publicKey = await response.json(); + if (!publicKey) return false; + return publicKey.publicKeyPem; + } else { + return actor.publicKey.publicKeyPem; + } + } + }) + }, + hooks: { + before: { + '*': function showDeprecationWarning() { + // Only warn once + if (this.hasWarnedMigration) return; + + if (this.isMigrated) { + // @ts-expect-error TS(2339): Property 'info' does not exist on type 'string | A... Remove this comment to see the full error message + this.logger.info( + 'The keys service has been migrated. ' + + 'Key requests and setup are redirected to and handled in the new service. ' + + 'This service might be removed in a future version.' + ); + } else { + // @ts-expect-error TS(2339): Property 'warn' does not exist on type 'string | A... Remove this comment to see the full error message + this.logger.warn( + 'The keys service has not been migrated yet. ' + + 'This service is still handling key requests and setup. ' + + 'Please migrate to the new keys service.' + ); + } + // @ts-expect-error TS(2322): Type 'boolean' is not assignable to type 'string |... Remove this comment to see the full error message + this.hasWarnedMigration = true; + } + } + }, + events: { + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message + if (this.isMigrated) { + return; + } + + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.generate({ actorUri: webId }, { parentCtx: ctx }); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); + } + }), + + 'keys.migration.migrated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message + this.isMigrated = true; + } + }) + } +} satisfies ServiceSchema; + +export default SignatureService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SignatureService.name]: typeof SignatureService; + } + } +} diff --git a/src/middleware/packages/crypto/signature/proxy.js b/src/middleware/packages/crypto/signature/proxy.js deleted file mode 100644 index 058ddf351..000000000 --- a/src/middleware/packages/crypto/signature/proxy.js +++ /dev/null @@ -1,159 +0,0 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const { parseHeader, parseFile, saveDatasetMeta } = require('@semapps/middlewares'); -const fetch = require('node-fetch'); -const { Errors: E } = require('moleculer-web'); - -const stream2buffer = stream => { - return new Promise((resolve, reject) => { - const _buf = []; - stream.on('data', chunk => _buf.push(chunk)); - stream.on('end', () => resolve(Buffer.concat(_buf))); - stream.on('error', err => reject(err)); - }); -}; - -const ProxyService = { - name: 'signature.proxy', - settings: { - podProvider: false - }, - dependencies: ['api', 'ldp'], - async started() { - const basePath = await this.broker.call('ldp.getBasePath'); - - const routeConfig = { - name: 'proxy-endpoint', - authorization: true, - authentication: false, - aliases: { - 'POST /': [parseHeader, parseFile, saveDatasetMeta, 'signature.proxy.api_query'] // parseFile handles multipart/form-data - } - }; - - if (this.settings.podProvider) { - await this.broker.call('api.addRoute', { - route: { path: path.join(basePath, '/:username([^/.][^/]+)/proxy'), ...routeConfig } - }); - } else { - await this.broker.call('api.addRoute', { route: { path: path.join(basePath, '/proxy'), ...routeConfig } }); - } - }, - actions: { - async api_query(ctx) { - const url = ctx.params.id; - const method = ctx.params.method || 'GET'; - const headers = JSON.parse(ctx.params.headers) || { accept: 'application/json' }; - const actorUri = ctx.meta.webId; - - // Only user can query his own proxy URL - if (this.settings.podProvider) { - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - if (account.username !== ctx.params.username) throw new E.ForbiddenError(); - } - - // If a file is uploaded, convert it to a Buffer - const body = - ctx.params.files && ctx.params.files.length > 0 - ? await stream2buffer(ctx.params.files[0].readableStream) - : ctx.meta.rawBody; - - try { - const response = await this.actions.query( - { - url, - method, - headers, - body, - actorUri - }, - { - parentCtx: ctx - } - ); - ctx.meta.$statusCode = response.status; - ctx.meta.$statusMessage = response.statusText; - ctx.meta.$responseHeaders = response.headers; - return response.body; - } catch (e) { - if (e.code !== 404 && e.code !== 403) console.error(e); - ctx.meta.$statusCode = !e.code ? 500 : e.code === 'ECONNREFUSED' ? 502 : e.code; - ctx.meta.$statusMessage = e.message; - } - }, - async query(ctx) { - let { url, method, headers, body, actorUri } = ctx.params; - - const signatureHeaders = await ctx.call('signature.generateSignatureHeaders', { - url, - method, - body, - actorUri - }); - - // Convert Headers object if necessary (otherwise we can't destructure it below) - // Note: if we use NodeJS built-in Headers instead of node-fetch Headers, the constructor name is _Headers - if ( - headers && - typeof headers === 'object' && - (headers.constructor.name === 'Headers' || headers.constructor.name === '_Headers') - ) { - headers = Object.fromEntries(headers); - } - - const response = await fetch(url, { - method, - headers: { - ...headers, - ...signatureHeaders - }, - body - }); - - if (response.ok) { - let responseBody = await response.text(); - try { - responseBody = JSON.parse(responseBody); - } catch (e) { - // Do nothing if body is not JSON - } - - // Remove headers that we don't want to be transfered - response.headers.delete('content-length'); - response.headers.delete('connection'); - response.headers.delete('content-encoding'); - - return { - ok: true, - body: responseBody, - headers: Object.fromEntries(response.headers.entries()), - status: response.status, - statusText: response.statusText - }; - } else { - return { - ok: false, - status: response.status, - statusText: response.statusText - }; - } - } - }, - events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - if (this.settings.podProvider) { - const services = await ctx.call('$node.services'); - if (services.filter(s => s.name === 'activitypub.actor')) { - await ctx.call('activitypub.actor.addEndpoint', { - actorUri: webId, - predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', - endpoint: urlJoin(webId, 'proxy') - }); - } - } - } - } -}; - -module.exports = ProxyService; diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts new file mode 100644 index 000000000..ef22fbf23 --- /dev/null +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -0,0 +1,186 @@ +import path from 'path'; +import urlJoin from 'url-join'; +import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; +import fetch from 'node-fetch'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +const stream2buffer = (stream: any) => { + return new Promise((resolve, reject) => { + const _buf: any = []; + stream.on('data', (chunk: any) => _buf.push(chunk)); + stream.on('end', () => resolve(Buffer.concat(_buf))); + stream.on('error', (err: any) => reject(err)); + }); +}; + +const ProxyService = { + name: 'signature.proxy' as const, + settings: { + podProvider: false + }, + dependencies: ['api', 'ldp'], + async started() { + const basePath = await this.broker.call('ldp.getBasePath'); + + const routeConfig = { + name: 'proxy-endpoint', + authorization: true, + authentication: false, + aliases: { + 'POST /': [parseHeader, parseFile, saveDatasetMeta, 'signature.proxy.api_query'] // parseFile handles multipart/form-data + } + }; + + if (this.settings.podProvider) { + await this.broker.call('api.addRoute', { + route: { path: path.join(basePath, '/:username([^/.][^/]+)/proxy'), ...routeConfig } + }); + } else { + await this.broker.call('api.addRoute', { route: { path: path.join(basePath, '/proxy'), ...routeConfig } }); + } + }, + actions: { + api_query: defineAction({ + async handler(ctx) { + const url = ctx.params.id; + const method = ctx.params.method || 'GET'; + const headers = JSON.parse(ctx.params.headers) || { accept: 'application/json' }; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const actorUri = ctx.meta.webId; + + // Only user can query his own proxy URL + if (this.settings.podProvider) { + const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + if (account.username !== ctx.params.username) throw new E.ForbiddenError(); + } + + // If a file is uploaded, convert it to a Buffer + const body = + ctx.params.files && ctx.params.files.length > 0 + ? await stream2buffer(ctx.params.files[0].readableStream) + : // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. + ctx.meta.rawBody; + + try { + const response = await this.actions.query( + { + url, + method, + headers, + body, + actorUri + }, + { + parentCtx: ctx + } + ); + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = response.status; + // @ts-expect-error TS(2339): Property '$statusMessage' does not exist on type '... Remove this comment to see the full error message + ctx.meta.$statusMessage = response.statusText; + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message + ctx.meta.$responseHeaders = response.headers; + return response.body; + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = !e.code ? 500 : e.code === 'ECONNREFUSED' ? 502 : e.code; + // @ts-expect-error TS(2339): Property '$statusMessage' does not exist on type '... Remove this comment to see the full error message + ctx.meta.$statusMessage = e.message; + } + } + }), + + query: defineAction({ + async handler(ctx) { + let { url, method, headers, body, actorUri } = ctx.params; + + const signatureHeaders = await ctx.call('signature.generateSignatureHeaders', { + url, + method, + body, + actorUri + }); + + // Convert Headers object if necessary (otherwise we can't destructure it below) + // Note: if we use NodeJS built-in Headers instead of node-fetch Headers, the constructor name is _Headers + if ( + headers && + typeof headers === 'object' && + (headers.constructor.name === 'Headers' || headers.constructor.name === '_Headers') + ) { + headers = Object.fromEntries(headers); + } + + const response = await fetch(url, { + method, + headers: { + ...headers, + ...signatureHeaders + }, + body + }); + + if (response.ok) { + let responseBody = await response.text(); + try { + responseBody = JSON.parse(responseBody); + } catch (e) { + // Do nothing if body is not JSON + } + + // Remove headers that we don't want to be transfered + response.headers.delete('content-length'); + response.headers.delete('connection'); + response.headers.delete('content-encoding'); + + return { + ok: true, + body: responseBody, + headers: Object.fromEntries(response.headers.entries()), + status: response.status, + statusText: response.statusText + }; + } else { + return { + ok: false, + status: response.status, + statusText: response.statusText + }; + } + } + }) + }, + events: { + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.podProvider) { + const services = await ctx.call('$node.services'); + if (services.filter((s: any) => s.name === 'activitypub.actor')) { + await ctx.call('activitypub.actor.addEndpoint', { + actorUri: webId, + predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', + endpoint: urlJoin(webId, 'proxy') + }); + } + } + } + }) + } +} satisfies ServiceSchema; + +export default ProxyService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ProxyService.name]: typeof ProxyService; + } + } +} diff --git a/src/middleware/packages/crypto/tsconfig.json b/src/middleware/packages/crypto/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/crypto/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/crypto/utils/noGraphCredentialContext.js b/src/middleware/packages/crypto/utils/noGraphCredentialContext.ts similarity index 99% rename from src/middleware/packages/crypto/utils/noGraphCredentialContext.js rename to src/middleware/packages/crypto/utils/noGraphCredentialContext.ts index 2c2a680fb..d8116c310 100644 --- a/src/middleware/packages/crypto/utils/noGraphCredentialContext.js +++ b/src/middleware/packages/crypto/utils/noGraphCredentialContext.ts @@ -328,4 +328,4 @@ const noGraphCredentialContext = { } }; -module.exports = noGraphCredentialContext; +export default noGraphCredentialContext; diff --git a/src/middleware/packages/crypto/utils/utils.js b/src/middleware/packages/crypto/utils/utils.ts similarity index 86% rename from src/middleware/packages/crypto/utils/utils.js rename to src/middleware/packages/crypto/utils/utils.ts index 85c11a9a9..c6a3aebc1 100644 --- a/src/middleware/packages/crypto/utils/utils.js +++ b/src/middleware/packages/crypto/utils/utils.ts @@ -1,4 +1,4 @@ -const assert = require('node:assert'); +import assert from 'node:assert'; /** * Converts a value to an array. If the value is undefined or null, returns an empty array. @@ -7,7 +7,7 @@ const assert = require('node:assert'); * @param {any} value The value to convert to an array. * @returns {Array} The resulting array. */ -const arrayOf = value => { +const arrayOf = (value: any) => { if (value === undefined || value === null) { return []; } @@ -26,7 +26,7 @@ const arrayOf = value => { * @param {any} object2 Second object to compare * @returns {boolean} True if the objects are deeply equal, false otherwise. */ -const deepStrictEqual = (object1, object2) => { +const deepStrictEqual = (object1: any, object2: any) => { try { assert.deepStrictEqual(object1, object2); } catch (error) { @@ -35,4 +35,4 @@ const deepStrictEqual = (object1, object2) => { return true; }; -module.exports = { arrayOf, deepStrictEqual }; +export { arrayOf, deepStrictEqual }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.js b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts similarity index 92% rename from src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.js rename to src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts index 149fa40ca..142d6b794 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.js +++ b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts @@ -1,9 +1,9 @@ +import { arrayOf, deepStrictEqual } from '../utils/utils.ts'; + const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); -const { arrayOf, deepStrictEqual } = require('../utils/utils'); - /** * Create an instance of this class when verifying capability VC presentations using * the @digitalbazaar/vc library. @@ -17,6 +17,7 @@ class VcCapabilityPresentationProofPurpose extends AuthenticationProofPurpose { */ constructor(options = {}) { super({ ...options, term: 'assertionMethod' }); + // @ts-expect-error TS(2339): Property 'maxChainLength' does not exist on type '... Remove this comment to see the full error message this.maxChainLength = options.maxChainLength || 2; } @@ -37,13 +38,14 @@ class VcCapabilityPresentationProofPurpose extends AuthenticationProofPurpose { * * @returns {Promise<{valid: boolean, error: Error}>} Validation result. */ - async validate(proof, options) { + async validate(proof: any, options: any) { if (!proof || !options) { throw new Error('Proof and options are required.'); } const { document: presentation } = options; // Sort credentials so that we can infer the order of the capability chain. const credentialsOrdered = arrayOf(presentation.verifiableCredential).sort( + // @ts-expect-error TS(2362): The left-hand side of an arithmetic operation must... Remove this comment to see the full error message (c1, c2) => new Date(c1.issuanceDate || c1.proof.created) - new Date(c2.issuanceDate || c2.proof.created) ); @@ -125,4 +127,4 @@ class VcCapabilityPresentationProofPurpose extends AuthenticationProofPurpose { } } -module.exports = VcCapabilityPresentationProofPurpose; +export default VcCapabilityPresentationProofPurpose; diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.js b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts similarity index 81% rename from src/middleware/packages/crypto/verifiable-credentials/VcPurpose.js rename to src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts index 5b41a3928..b6a18e39b 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.js +++ b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts @@ -1,4 +1,5 @@ -const { CredentialIssuancePurpose } = require('@digitalbazaar/vc'); +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { CredentialIssuancePurpose } from '@digitalbazaar/vc'; /** * VC purpose that is the same as the vc.CredentialIssuancePurpose but checks validFrom and validUntil. @@ -13,7 +14,7 @@ class VCPurpose extends CredentialIssuancePurpose { * * @returns {Promise<{valid: boolean, error: Error}>} Resolves on completion. */ - async validate(proof, properties) { + async validate(proof: any, properties: any) { const { documentLoader, document } = properties; // Check validity periods. @@ -26,7 +27,7 @@ class VCPurpose extends CredentialIssuancePurpose { // Validate that VC still exists by fetching it with the document loader and the noCache option. const vc = await documentLoader(document.id, { noCache: true }) - .then(res => res.document) + .then((res: any) => res.document) .catch(() => null); if (!vc) { return { valid: false, error: new Error('The VC does not exist.') }; @@ -41,4 +42,4 @@ class VCPurpose extends CredentialIssuancePurpose { } } -module.exports = VCPurpose; +export default VCPurpose; diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.js b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.js deleted file mode 100644 index 0e3ef9b68..000000000 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.js +++ /dev/null @@ -1,91 +0,0 @@ -const crypto = require('node:crypto'); - -/** - * Service to generate challenges upon request. - * Challenges can be used to created Verifiable Presentations (VC). - * - * Challenges are kept in memory and are valid for up to 5 minutes or until they are used. - * @type {import('moleculer').ServiceSchema} - */ -const ChallengeService = { - name: 'crypto.vc.presentation.challenge', - settings: { - /** Milliseconds challenges should be valid for. @default 5 minutes */ - challengeExpirationMs: 5 * 60 * 1000 - }, - async started() { - // Have the format { challenge: {timestamp: new Date()} } - this.challenges = {}; - }, - actions: { - create() { - if (!this.cleanupTimerSetUp) { - this.startCleanupTimer(); - } - - const challenge = crypto.randomUUID(); - this.challenges[challenge] = { issued: Date.now() }; - - return { challenge }; - }, - - getAll() { - return this.challenges; - }, - - clearAll() { - this.challenges = {}; - }, - - validate(ctx) { - const { challenge } = ctx.params; - - // Does challenge exist? - if (!this.challenges[challenge]) { - return { valid: false, error: new Error('Challenge not found or has expired.') }; - } - - // Is challenge expired? - if (Date.now() - this.challenges[challenge].issued > this.settings.challengeExpirationMs) { - delete this.challenges[challenge]; - return { valid: false, error: new Error('Challenge not found or has expired.') }; - } - - delete this.challenges[challenge]; - - return { valid: true }; - }, - - cleanElapsed() { - const now = Date.now(); - for (const [challenge, { issued }] of Object.entries(this.challenges)) { - if (now - issued > this.settings.challengeExpirationMs) { - delete this.challenges[challenge]; - } - } - } - }, - methods: { - startCleanupTimer() { - this.cleanupTimerSetUp = true; - - // If timer service is available, schedule timer. - if (this.broker.getLocalService('timer')) { - this.broker.call('timer.set', { - key: 'challengeCleanup', - time: Date.now() + this.settings.challengeExpirationMs, - actionName: 'crypto.vc.presentation.challenge.cleanElapsed', - repeat: this.settings.challengeExpirationMs - }); - } else { - // Set up `setInterval`-based solution. - setInterval(() => { - this.actions.cleanElapsed(); - this.cleanupTimerSetUp = false; - }, this.settings.challengeExpirationMs); - } - } - } -}; - -module.exports = ChallengeService; diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts new file mode 100644 index 000000000..824795b15 --- /dev/null +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts @@ -0,0 +1,111 @@ +import crypto from 'node:crypto'; +import { ServiceSchema, defineAction } from 'moleculer'; + +/** + * Service to generate challenges upon request. + * Challenges can be used to created Verifiable Presentations (VC). + * + * Challenges are kept in memory and are valid for up to 5 minutes or until they are used. + * @type {import('moleculer').ServiceSchema} + */ +const ChallengeService = { + name: 'crypto.vc.presentation.challenge' as const, + settings: { + /** Milliseconds challenges should be valid for. @default 5 minutes */ + challengeExpirationMs: 5 * 60 * 1000 + }, + async started() { + // Have the format { challenge: {timestamp: new Date()} } + this.challenges = {}; + }, + actions: { + create: defineAction({ + handler() { + if (!this.cleanupTimerSetUp) { + this.startCleanupTimer(); + } + + const challenge = crypto.randomUUID(); + this.challenges[challenge] = { issued: Date.now() }; + + return { challenge }; + } + }), + + getAll: defineAction({ + handler() { + return this.challenges; + } + }), + + clearAll: defineAction({ + handler() { + this.challenges = {}; + } + }), + + validate: defineAction({ + handler(ctx) { + const { challenge } = ctx.params; + + // Does challenge exist? + if (!this.challenges[challenge]) { + return { valid: false, error: new Error('Challenge not found or has expired.') }; + } + + // Is challenge expired? + if (Date.now() - this.challenges[challenge].issued > this.settings.challengeExpirationMs) { + delete this.challenges[challenge]; + return { valid: false, error: new Error('Challenge not found or has expired.') }; + } + + delete this.challenges[challenge]; + + return { valid: true }; + } + }), + + cleanElapsed: defineAction({ + handler() { + const now = Date.now(); + // @ts-expect-error TS(2339): Property 'issued' does not exist on type 'unknown'... Remove this comment to see the full error message + for (const [challenge, { issued }] of Object.entries(this.challenges)) { + if (now - issued > this.settings.challengeExpirationMs) { + delete this.challenges[challenge]; + } + } + } + }) + }, + methods: { + startCleanupTimer() { + this.cleanupTimerSetUp = true; + + // If timer service is available, schedule timer. + if (this.broker.getLocalService('timer')) { + this.broker.call('timer.set', { + key: 'challengeCleanup', + time: Date.now() + this.settings.challengeExpirationMs, + actionName: 'crypto.vc.presentation.challenge.cleanElapsed', + repeat: this.settings.challengeExpirationMs + }); + } else { + // Set up `setInterval`-based solution. + setInterval(() => { + this.actions.cleanElapsed(); + this.cleanupTimerSetUp = false; + }, this.settings.challengeExpirationMs); + } + } + } +} satisfies ServiceSchema; + +export default ChallengeService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ChallengeService.name]: typeof ChallengeService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.js b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts similarity index 58% rename from src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.js rename to src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 74ef8a234..aa563c6fa 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -1,12 +1,20 @@ -const jsigs = require('jsonld-signatures'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'json... Remove this comment to see the full error message +import jsigs from 'jsonld-signatures'; + +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; + +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; + +import { ServiceSchema, defineAction } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; + const { purposes: { AssertionProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); -/** @type {import('@digitalbazaar/ed25519-multikey')} */ -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); -const { KEY_TYPES } = require('../constants'); /** * Data integrity service for signing objects using the [VC data integrity spec](https://www.w3.org/TR/vc-data-integrity/). @@ -18,11 +26,11 @@ const { KEY_TYPES } = require('../constants'); * @type {import('moleculer').ServiceSchema} */ const DataIntegrityService = { - name: 'crypto.vc.data-integrity', + name: 'crypto.vc.data-integrity' as const, dependencies: ['ldp', 'api'], async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, @@ -32,16 +40,19 @@ const DataIntegrityService = { * Verify an object. * @param {object} ctx.params.object - The object to verify. */ - verifyObject: { + verifyObject: defineAction({ params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, options: { type: 'object', optional: true, params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message proofPurpose: { type: 'string', default: 'assertionMethod' } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message purpose: { type: 'object', optional: true } }, async handler(ctx) { @@ -57,7 +68,7 @@ const DataIntegrityService = { return jsigs.verify(object, { purpose, documentLoader: this.documentLoader, suite }); } - }, + }), /** * Sign an object. @@ -67,12 +78,15 @@ const DataIntegrityService = { * @param {object} [ctx.params.keyObject] - The key object to use. * @param {string} [ctx.params.keyId] - The key ID to use. */ - signObject: { + signObject: defineAction({ params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, options: { type: 'object', optional: true, params: { proofPurpose: { type: 'string', optional: true } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message purpose: { type: 'object', optional: true }, webId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, @@ -81,6 +95,7 @@ const DataIntegrityService = { object, options: { proofPurpose: method = 'assertionMethod' } = {}, purpose = new AssertionProofPurpose({ term: method }), + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, keyObject = undefined, keyId = undefined @@ -103,8 +118,16 @@ const DataIntegrityService = { return jsigs.sign(object, { purpose, documentLoader: this.documentLoader, suite }); } - } + }) } -}; +} satisfies ServiceSchema; + +export default DataIntegrityService; -module.exports = DataIntegrityService; +declare global { + export namespace Moleculer { + export interface AllServices { + [DataIntegrityService.name]: typeof DataIntegrityService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/index.js b/src/middleware/packages/crypto/verifiable-credentials/index.js deleted file mode 100644 index 14c755289..000000000 --- a/src/middleware/packages/crypto/verifiable-credentials/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - DataIntegrityService: require('./data-integrity-service'), - VerifiableCredentialsService: require('./vc-service'), - VCPurpose: require('./VcPurpose'), - VCCapabilityPresentationProofPurpose: require('./VcCapabilityPresentationProofPurpose') -}; diff --git a/src/middleware/packages/crypto/verifiable-credentials/index.ts b/src/middleware/packages/crypto/verifiable-credentials/index.ts new file mode 100644 index 000000000..9bb146b2b --- /dev/null +++ b/src/middleware/packages/crypto/verifiable-credentials/index.ts @@ -0,0 +1,6 @@ +import DataIntegrityService from './data-integrity-service.ts'; +import VerifiableCredentialsService from './vc-service.ts'; +import VCPurpose from './VcPurpose.ts'; +import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; + +export { DataIntegrityService, VerifiableCredentialsService, VCPurpose, VCCapabilityPresentationProofPurpose }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts similarity index 83% rename from src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts index a669e15be..0a3d35e12 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts @@ -1,6 +1,7 @@ -const { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } = require('@semapps/middlewares'); -const path = require('node:path'); -const { VC_API_PATH } = require('../constants'); +import { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } from '@semapps/middlewares'; +import path from 'node:path'; +import { ServiceSchema } from 'moleculer'; +import { VC_API_PATH } from '../constants.ts'; const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; @@ -16,7 +17,7 @@ const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRa * @type {import('moleculer').ServiceSchema} */ const VCApiService = { - name: 'crypto.vc.api', + name: 'crypto.vc.api' as const, dependencies: ['api', 'ldp'], settings: { podProvider: null @@ -83,6 +84,14 @@ const VCApiService = { } }); } -}; +} satisfies ServiceSchema; -module.exports = VCApiService; +export default VCApiService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCApiService.name]: typeof VCApiService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts similarity index 55% rename from src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts index 7638701be..ad6838627 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts @@ -1,7 +1,8 @@ -const { arrayOf } = require('@semapps/ldp'); +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; // Check, if a capability grants access to the resource. -const hasValidCapability = async (ctx, resourceUri, mode) => { +const hasValidCapability = async (ctx: any, resourceUri: any, mode: any) => { const { capabilityPresentation } = ctx.meta.authorization; const vcs = arrayOf(capabilityPresentation.verifiableCredential); @@ -27,23 +28,36 @@ const hasValidCapability = async (ctx, resourceUri, mode) => { return true; }; -module.exports = { - name: 'vc.guard', +const VcGuardSchema = { + name: 'vc.guard' as const, dependencies: 'permissions', async started() { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, actions: { - async hasPermission(ctx) { - const { uri, mode } = ctx.params; + hasPermission: defineAction({ + async handler(ctx) { + const { uri, mode } = ctx.params; - if (ctx.meta.authorization?.capabilityPresentation) { - if (await hasValidCapability(ctx, uri, mode)) { - return true; + // @ts-expect-error TS(2339): Property 'authorization' does not exist on type '{... Remove this comment to see the full error message + if (ctx.meta.authorization?.capabilityPresentation) { + if (await hasValidCapability(ctx, uri, mode)) { + return true; + } } + + return undefined; } + }) + } +} satisfies ServiceSchema; - return undefined; +export default VcGuardSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VcGuardSchema.name]: typeof VcGuardSchema; } } -}; +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.js b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.js deleted file mode 100644 index c05698ef9..000000000 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.js +++ /dev/null @@ -1,96 +0,0 @@ -const path = require('node:path'); -const { ControlledContainerMixin, PseudoIdMixin } = require('@semapps/ldp'); -const { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } = require('../constants'); - -/** - * Container for Verifiable Credentials. Posting to this container will create a new VC. - * The issuance is not handled in this service but in the {@link VCIssuerService}. - * - * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} - */ -const VCCredentialsContainer = { - name: 'crypto.vc.issuer.credential-container', - mixins: [ControlledContainerMixin, PseudoIdMixin], - dependencies: ['ontologies'], - settings: { - path: null, - excludeFromMirror: true, - activateTombstones: false, - acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiableCredential'], - typeIndex: 'private', - podProvider: null, - permissions: (webId, ctx) => { - // If not a pod provider, the container is shared, so any user can append (not read arbitrary VCs though). - return { - anyUser: { - // Caution. Here, `ctx.service` is the LdpContainerService. Because this function is called by the WebAclMiddleware. - read: !ctx.service.settings.podProvider, - append: !ctx.service.settings.podProvider - } - }; - }, - newResourcesPermissions: webId => { - if (webId === 'anon') throw new Error('Credential resource must be created for registered webId.'); - if (webId === 'system') return {}; - - return { - user: { - uri: webId, - read: true, - write: true, - control: true - } - }; - } - }, - /** - * The actions below have their `@context` replaced. - * This is because the proof is considered a separate graph in the original context. - * We can't handle that internally so we use a copy of the context with the `@graph`s removed. - */ - actions: { - async get(ctx) { - const resource = await ctx.call('ldp.resource.get', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - ctx.meta.$responseHeaders = { - ...ctx.meta.$responseHeaders, - 'Cache-Control': 'private, max-age=300, immutable' - }; - return { ...resource, '@context': credentialsContext }; - }, - async put(ctx) { - const { resource } = ctx.params; - return await ctx.call('ldp.resource.put', { - ...ctx.params, - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async post(ctx) { - const { resource } = ctx.params; - return await ctx.call('ldp.container.post', { - ...ctx.params, - containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async list(ctx) { - const container = await ctx.call('ldp.container.list', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - return { ...container, '@context': credentialsContext }; - } - } -}; - -module.exports = VCCredentialsContainer; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts new file mode 100644 index 000000000..f2f158853 --- /dev/null +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -0,0 +1,118 @@ +import path from 'node:path'; +import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; + +/** + * Container for Verifiable Credentials. Posting to this container will create a new VC. + * The issuance is not handled in this service but in the {@link VCIssuerService}. + * + * WARNING: Changing things here can have security implications. + * + * @type {import('moleculer').ServiceSchema} + */ +const VCCredentialsContainer = { + name: 'crypto.vc.issuer.credential-container' as const, + mixins: [ControlledContainerMixin, PseudoIdMixin], + dependencies: ['ontologies'], + settings: { + path: null, + excludeFromMirror: true, + activateTombstones: false, + acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiableCredential'], + typeIndex: 'private', + podProvider: null, + permissions: (webId: any, ctx: any) => { + // If not a pod provider, the container is shared, so any user can append (not read arbitrary VCs though). + return { + anyUser: { + // Caution. Here, `ctx.service` is the LdpContainerService. Because this function is called by the WebAclMiddleware. + read: !ctx.service.settings.podProvider, + append: !ctx.service.settings.podProvider + } + }; + }, + newResourcesPermissions: (webId: any) => { + if (webId === 'anon') throw new Error('Credential resource must be created for registered webId.'); + if (webId === 'system') return {}; + + return { + user: { + uri: webId, + read: true, + write: true, + control: true + } + }; + } + }, + /** + * The actions below have their `@context` replaced. + * This is because the proof is considered a separate graph in the original context. + * We can't handle that internally so we use a copy of the context with the `@graph`s removed. + */ + actions: { + get: defineAction({ + async handler(ctx) { + const resource = await ctx.call('ldp.resource.get', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message + ctx.meta.$responseHeaders = { + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message + ...ctx.meta.$responseHeaders, + 'Cache-Control': 'private, max-age=300, immutable' + }; + return { ...resource, '@context': credentialsContext }; + } + }), + + put: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; + return await ctx.call('ldp.resource.put', { + ...ctx.params, + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + post: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; + return await ctx.call('ldp.container.post', { + ...ctx.params, + containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + list: defineAction({ + async handler(ctx) { + const container = await ctx.call('ldp.container.list', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + return { ...container, '@context': credentialsContext }; + } + }) + } +} satisfies ServiceSchema; + +export default VCCredentialsContainer; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCCredentialsContainer.name]: typeof VCCredentialsContainer; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts similarity index 72% rename from src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index 7ab3c3127..687092247 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -1,13 +1,22 @@ -const { randomUUID } = require('node:crypto'); +import { randomUUID } from 'node:crypto'; + +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import * as vc from '@digitalbazaar/vc'; + +/** @type {import('@digitalbazaar/ed25519-multikey')} */ +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; + +import { ServiceSchema, defineAction } from 'moleculer'; +import { KEY_TYPES, credentialsContext } from '../constants.ts'; + const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); -const vc = require('@digitalbazaar/vc'); -/** @type {import('@digitalbazaar/ed25519-multikey')} */ -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); -const { KEY_TYPES, credentialsContext } = require('../constants'); /** * Service for verifying and creating Verifiable Presentations @@ -19,10 +28,10 @@ const { KEY_TYPES, credentialsContext } = require('../constants'); * @type {import('moleculer').ServiceSchema} */ const VCHolderService = { - name: 'crypto.vc.holder', + name: 'crypto.vc.holder' as const, dependencies: ['jsonld', 'jsonld.context'], async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, @@ -33,11 +42,12 @@ const VCHolderService = { * @param {object} ctx.params - The parameters for creating the presentation. * @returns {object} The signed presentation. */ - createPresentation: { + createPresentation: defineAction({ params: { presentation: { type: 'object', params: { + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message verifiableCredential: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }] }, '@context': { type: 'string', optional: true }, id: { type: 'string', optional: true }, @@ -50,11 +60,14 @@ const VCHolderService = { challenge: { type: 'string' }, domain: { type: 'string', optional: true }, proofPurpose: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message persist: { type: 'boolean', default: false } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message noAnonRead: { type: 'boolean', default: false }, webId: { type: 'string', optional: true } }, @@ -62,6 +75,7 @@ const VCHolderService = { const { presentation: presentationParam, options: { challenge, domain, proofPurpose = 'assertionMethod' }, + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, keyObject = undefined, keyId = undefined, @@ -120,7 +134,7 @@ const VCHolderService = { return signedPresentation; } - } + }) }, methods: { @@ -159,6 +173,14 @@ const VCHolderService = { return resource; } } -}; +} satisfies ServiceSchema; + +export default VCHolderService; -module.exports = VCHolderService; +declare global { + export namespace Moleculer { + export interface AllServices { + [VCHolderService.name]: typeof VCHolderService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts similarity index 72% rename from src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 4a685e579..354827d2e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -1,14 +1,21 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; + +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import * as vc from '@digitalbazaar/vc'; + +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; + +import { ServiceSchema, defineAction } from 'moleculer'; +import { KEY_TYPES, credentialsContext } from '../constants.ts'; + const { purposes: { AssertionProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); -const vc = require('@digitalbazaar/vc'); -/** @type {import('@digitalbazaar/ed25519-multikey')} */ -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); - -const { KEY_TYPES, credentialsContext } = require('../constants'); /** * Service for verifying, reading, and revoking Verifiable Credentials. @@ -18,13 +25,13 @@ const { KEY_TYPES, credentialsContext } = require('../constants'); * @type {import('moleculer').ServiceSchema} */ const VCCredentialService = { - name: 'crypto.vc.issuer', + name: 'crypto.vc.issuer' as const, settings: { podProvider: null }, async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, @@ -50,17 +57,19 @@ const VCCredentialService = { * @param {object} ctx.params - The parameters for creating the VC. * @returns {object} The signed credential. */ - createVC: { + createVC: defineAction({ params: { credential: { type: 'object', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message credentialSubject: { type: 'object' }, '@context': { type: 'string', optional: true }, id: { type: 'string', optional: true }, type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array', items: 'string' }], optional: true }, validFrom: { type: 'string', optional: true }, validUntil: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message proof: { type: 'multi', optional: true, rules: [{ type: 'object' }, { type: 'array', items: 'object' }] } } }, @@ -68,11 +77,14 @@ const VCCredentialService = { type: 'object', default: {}, params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message proofPurpose: { type: 'object', optional: true } } }, webId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; optional: true; default: ... Remove this comment to see the full error message noAnonRead: { type: 'boolean', optional: true, default: false }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, @@ -80,6 +92,7 @@ const VCCredentialService = { const { credential: receivedCredential, options: { proofPurpose = 'assertionMethod' }, + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, noAnonRead = false, purpose = new AssertionProofPurpose({ term: proofPurpose }), @@ -133,7 +146,7 @@ const VCCredentialService = { return signedCredential; } - } + }) }, methods: { /** Creates an ldp resource from the presentation and sets rights. */ @@ -170,6 +183,14 @@ const VCCredentialService = { return resource; } } -}; +} satisfies ServiceSchema; + +export default VCCredentialService; -module.exports = VCCredentialService; +declare global { + export namespace Moleculer { + export interface AllServices { + [VCCredentialService.name]: typeof VCCredentialService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.js b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.js deleted file mode 100644 index d3afc9fd3..000000000 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.js +++ /dev/null @@ -1,88 +0,0 @@ -const { ControlledContainerMixin, PseudoIdMixin } = require('@semapps/ldp'); -const { credentialsContext, credentialsContextNoGraphProof } = require('../constants'); - -/** - * Container for Verifiable Presentations. Posting to this container will create a new VP. - * Service works in analogy to @see {VCCredentialsContainer}. - * - * Note that presentations do not have to be persisted. Upon issuance, the holder can - * provide an unsigned presentation with an id that can be signed as well. - * - * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} - */ -const VCPresentationContainer = { - name: 'crypto.vc.holder.presentation-container', - mixins: [ControlledContainerMixin, PseudoIdMixin], - settings: { - path: null, - excludeFromMirror: true, - activateTombstones: false, - acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiablePresentation'], - typeIndex: 'private', - podProvider: null, - permissions: (webId, ctx) => { - // If not a pod provider, the container is shared, so any user can append. - return { - anyUser: { - // Caution. Here, `ctx.service` is the LdpContainerService. Because this function is called by the WebAclMiddleware. - read: !ctx.service.settings.podProvider, - append: !ctx.service.settings.podProvider - } - }; - }, - newResourcesPermissions: {} - }, - /** - * The actions below have their `@context` replaced. - * This is because the proof is considered a separate graph in the original context. - * We can't handle that internally so we use a copy of the context with the `@graph`s removed. - */ - actions: { - async get(ctx) { - const resource = await ctx.call('ldp.resource.get', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - ctx.meta.$responseHeaders = { - ...ctx.meta.$responseHeaders, - 'Cache-Control': 'private, max-age=300, immutable' - }; - return { ...resource, '@context': credentialsContext }; - }, - async put(ctx) { - const { resource } = ctx.params; - return await ctx.call('ldp.resource.put', { - ...ctx.params, - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async post(ctx) { - // FIXME: The action fails to store the VC with the VP. - // This is okay because persisting VPs is not required - // and with Apods v3 this issue will probably go away. - const { resource } = ctx.params; - return await ctx.call('ldp.container.post', { - ...ctx.params, - containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async list(ctx) { - const container = await ctx.call('ldp.container.list', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - return { ...container, '@context': credentialsContext }; - } - } -}; - -module.exports = VCPresentationContainer; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts new file mode 100644 index 000000000..ecd980b54 --- /dev/null +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -0,0 +1,110 @@ +import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; + +/** + * Container for Verifiable Presentations. Posting to this container will create a new VP. + * Service works in analogy to @see {VCCredentialsContainer}. + * + * Note that presentations do not have to be persisted. Upon issuance, the holder can + * provide an unsigned presentation with an id that can be signed as well. + * + * WARNING: Changing things here can have security implications. + * + * @type {import('moleculer').ServiceSchema} + */ +const VCPresentationContainer = { + name: 'crypto.vc.holder.presentation-container' as const, + mixins: [ControlledContainerMixin, PseudoIdMixin], + settings: { + path: null, + excludeFromMirror: true, + activateTombstones: false, + acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiablePresentation'], + typeIndex: 'private', + podProvider: null, + permissions: (webId: any, ctx: any) => { + // If not a pod provider, the container is shared, so any user can append. + return { + anyUser: { + // Caution. Here, `ctx.service` is the LdpContainerService. Because this function is called by the WebAclMiddleware. + read: !ctx.service.settings.podProvider, + append: !ctx.service.settings.podProvider + } + }; + }, + newResourcesPermissions: {} + }, + /** + * The actions below have their `@context` replaced. + * This is because the proof is considered a separate graph in the original context. + * We can't handle that internally so we use a copy of the context with the `@graph`s removed. + */ + actions: { + get: defineAction({ + async handler(ctx) { + const resource = await ctx.call('ldp.resource.get', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message + ctx.meta.$responseHeaders = { + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message + ...ctx.meta.$responseHeaders, + 'Cache-Control': 'private, max-age=300, immutable' + }; + return { ...resource, '@context': credentialsContext }; + } + }), + + put: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; + return await ctx.call('ldp.resource.put', { + ...ctx.params, + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + post: defineAction({ + async handler(ctx) { + // FIXME: The action fails to store the VC with the VP. + // This is okay because persisting VPs is not required + // and with Apods v3 this issue will probably go away. + const { resource } = ctx.params; + return await ctx.call('ldp.container.post', { + ...ctx.params, + containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + list: defineAction({ + async handler(ctx) { + const container = await ctx.call('ldp.container.list', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + return { ...container, '@context': credentialsContext }; + } + }) + } +} satisfies ServiceSchema; + +export default VCPresentationContainer; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCPresentationContainer.name]: typeof VCPresentationContainer; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-service.js deleted file mode 100644 index 3cc2716d1..000000000 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.js +++ /dev/null @@ -1,61 +0,0 @@ -const { did, cred } = require('@semapps/ontologies'); -const VCAuthorizerService = require('./vc-authorizer-service'); -const VCHolderService = require('./vc-holder-service'); -const VCIssuerService = require('./vc-issuer-service'); -const VCVerifierService = require('./vc-verifier-service'); -const DataIntegrityService = require('./data-integrity-service'); -const VCApiService = require('./vc-api-service'); -const VCCredentialContainer = require('./vc-credential-container'); -const VCPresentationContainer = require('./vc-presentation-container'); -const ChallengeService = require('./challenge-service'); - -/** - * Root service for Verifiable Credential and the VC API. - * - This service will start all other services related to Verifiable Credentials. - * - It also registers the VC API location to the webId. - * - It registers the did ontology. - * - * [VC Spec Overview](https://www.w3.org/TR/vc-overview/) - * VC status and VC workflow services are not implemented. - * - * As of 2025-03, the [VC API spec](https://w3c-ccg.github.io/vc-api/) - * is in v0.3 and undergoing changes. Issuance, challenges and verification - * are implemented. - * - * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} - */ -const VCService = { - name: 'crypto.vc', - dependencies: ['ontologies'], - settings: { - podProvider: false, - enableApi: true - }, - created() { - const { enableApi, podProvider } = this.settings; - this.broker.createService({ mixins: [VCIssuerService] }); - this.broker.createService({ mixins: [VCAuthorizerService] }); - this.broker.createService({ mixins: [VCHolderService] }); - this.broker.createService({ mixins: [VCVerifierService] }); - this.broker.createService({ mixins: [DataIntegrityService] }); - this.broker.createService({ mixins: [ChallengeService] }); - this.broker.createService({ - mixins: [VCPresentationContainer], - settings: { path: 'presentations', podProvider } - }); - this.broker.createService({ - mixins: [VCCredentialContainer], - settings: { path: 'credentials', podProvider } - }); - - if (enableApi) this.broker.createService({ mixins: [VCApiService], settings: { podProvider } }); - }, - async started() { - this.broker.call('ontologies.register', did); - this.broker.call('ontologies.register', cred); - } -}; - -module.exports = VCService; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts new file mode 100644 index 000000000..e5aac8108 --- /dev/null +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts @@ -0,0 +1,79 @@ +import { did, cred } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; +import VCAuthorizerService from './vc-authorizer-service.ts'; +import VCHolderService from './vc-holder-service.ts'; +import VCIssuerService from './vc-issuer-service.ts'; +import VCVerifierService from './vc-verifier-service.ts'; +import DataIntegrityService from './data-integrity-service.ts'; +import VCApiService from './vc-api-service.ts'; +import VCCredentialContainer from './vc-credential-container.ts'; +import VCPresentationContainer from './vc-presentation-container.ts'; +import ChallengeService from './challenge-service.ts'; + +/** + * Root service for Verifiable Credential and the VC API. + * - This service will start all other services related to Verifiable Credentials. + * - It also registers the VC API location to the webId. + * - It registers the did ontology. + * + * [VC Spec Overview](https://www.w3.org/TR/vc-overview/) + * VC status and VC workflow services are not implemented. + * + * As of 2025-03, the [VC API spec](https://w3c-ccg.github.io/vc-api/) + * is in v0.3 and undergoing changes. Issuance, challenges and verification + * are implemented. + * + * WARNING: Changing things here can have security implications. + * + * @type {import('moleculer').ServiceSchema} + */ +const VCService = { + name: 'crypto.vc' as const, + dependencies: ['ontologies'], + settings: { + podProvider: false, + enableApi: true + }, + created() { + const { enableApi, podProvider } = this.settings; + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.iss... Remove this comment to see the full error message + this.broker.createService({ mixins: [VCIssuerService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.guard"; de... Remove this comment to see the full error message + this.broker.createService({ mixins: [VCAuthorizerService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.hol... Remove this comment to see the full error message + this.broker.createService({ mixins: [VCHolderService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.ver... Remove this comment to see the full error message + this.broker.createService({ mixins: [VCVerifierService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.dat... Remove this comment to see the full error message + this.broker.createService({ mixins: [DataIntegrityService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.pre... Remove this comment to see the full error message + this.broker.createService({ mixins: [ChallengeService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.hol... Remove this comment to see the full error message + this.broker.createService({ + mixins: [VCPresentationContainer], + settings: { path: 'presentations', podProvider } + }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.iss... Remove this comment to see the full error message + this.broker.createService({ + mixins: [VCCredentialContainer], + settings: { path: 'credentials', podProvider } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.api... Remove this comment to see the full error message + if (enableApi) this.broker.createService({ mixins: [VCApiService], settings: { podProvider } }); + }, + async started() { + this.broker.call('ontologies.register', did); + this.broker.call('ontologies.register', cred); + } +} satisfies ServiceSchema; + +export default VCService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCService.name]: typeof VCService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts similarity index 67% rename from src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 6160ee00a..7db8b8c88 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.js +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -1,12 +1,17 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message +import * as vc from '@digitalbazaar/vc'; +import { ServiceSchema, defineAction } from 'moleculer'; +import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; +import VCPurpose from './VcPurpose.ts'; +import { arrayOf } from '../utils/utils.ts'; + const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); -const vc = require('@digitalbazaar/vc'); -const VCCapabilityPresentationProofPurpose = require('./VcCapabilityPresentationProofPurpose'); -const VCPurpose = require('./VcPurpose'); -const { arrayOf } = require('../utils/utils'); /** * Service for verifying and creating Verifiable Presentations @@ -17,10 +22,10 @@ const { arrayOf } = require('../utils/utils'); * @type {import('moleculer').ServiceSchema} */ const VCPresentationService = { - name: 'crypto.vc.verifier', + name: 'crypto.vc.verifier' as const, dependencies: ['ldp', 'jsonld'], async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, @@ -29,7 +34,7 @@ const VCPresentationService = { /** * Verify a verifiable credential. */ - verifyVC: { + verifyVC: defineAction({ params: { verifiableCredential: { type: 'object', @@ -40,7 +45,9 @@ const VCPresentationService = { issuer: { type: 'string', optional: true }, validFrom: { type: 'string', optional: true }, validUntil: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message credentialSubject: { type: 'object' }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message proof: { type: 'multi', optional: true, rules: [{ type: 'object' }, { type: 'array', items: 'object' }] } } }, @@ -48,6 +55,7 @@ const VCPresentationService = { type: 'object', default: {}, params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message proofPurpose: { type: 'string', default: 'assertionMethod' } } } @@ -58,6 +66,7 @@ const VCPresentationService = { options: { proofPurpose = 'assertionMethod' } } = ctx.params; + // @ts-expect-error TS(2554): Expected 0 arguments, but got 1. const purpose = new VCPurpose({ term: proofPurpose }); const suite = new DataIntegrityProof({ @@ -73,13 +82,14 @@ const VCPresentationService = { return verificationResult; } - }, + }), /** * Verify a presentation. */ - verifyPresentation: { + verifyPresentation: defineAction({ params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, options: { type: 'object', @@ -88,10 +98,13 @@ const VCPresentationService = { challenge: { type: 'string', optional: true }, domain: { type: 'string', optional: true }, proofPurpose: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message unsignedPresentation: { type: 'boolean', default: false } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message credentialPurpose: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message presentationPurpose: { type: 'object', optional: true } }, async handler(ctx) { @@ -133,23 +146,26 @@ const VCPresentationService = { return verificationResult; } catch (e) { this.logger.error('Error verifying presentation:', e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. return { verified: false, error: e.message }; } } - }, + }), /** * Verify a capability presentation. * @param {object} ctx.params - The parameters for verifying the capability presentation. * @returns {object} The verification result. */ - verifyCapabilityPresentation: { + verifyCapabilityPresentation: defineAction({ params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, options: { type: 'object', default: {}, params: { + // @ts-expect-error TS(2322): Type '{ type: "number"; default: number; }' is not... Remove this comment to see the full error message maxChainLength: { type: 'number', default: 2 }, challenge: { type: 'string', optional: true }, domain: { type: 'string', optional: true } @@ -187,14 +203,23 @@ const VCPresentationService = { // Order the VCs in the presentation by issuance date. const orderedCredentials = arrayOf(presentation.verifiableCredential).sort( + // @ts-expect-error TS(2362): The left-hand side of an arithmetic operation must... Remove this comment to see the full error message (c1, c2) => new Date(c1.issuanceDate || c1.proof.created) - new Date(c2.issuanceDate || c2.proof.created) ); presentation.verifiableCredential = orderedCredentials; return { ...verificationResult, presentation }; } - } + }) } -}; +} satisfies ServiceSchema; + +export default VCPresentationService; -module.exports = VCPresentationService; +declare global { + export namespace Moleculer { + export interface AllServices { + [VCPresentationService.name]: typeof VCPresentationService; + } + } +} diff --git a/src/middleware/packages/importer/index.js b/src/middleware/packages/importer/index.js deleted file mode 100644 index e9069c04d..000000000 --- a/src/middleware/packages/importer/index.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - ImporterMixin: require('./mixins/importer'), - DiscourseImporterMixin: require('./mixins/discourse'), - DrupalImporterMixin: require('./mixins/drupal'), - GoGoCartoImporterMixin: require('./mixins/gogocarto'), - HumHubImporterMixin: require('./mixins/humhub'), - JotformImporterMixin: require('./mixins/jotform'), - MobilizonImporterMixin: require('./mixins/mobilizon'), - PrestaShopImporterMixin: require('./mixins/prestashop'), - YesWikiImporterMixin: require('./mixins/yeswiki'), - WordpressImporterMixin: require('./mixins/wordpress'), - ...require('./utils') -}; diff --git a/src/middleware/packages/importer/index.ts b/src/middleware/packages/importer/index.ts new file mode 100644 index 000000000..3e0459bc1 --- /dev/null +++ b/src/middleware/packages/importer/index.ts @@ -0,0 +1,24 @@ +import ImporterMixin from './mixins/importer.ts'; +import DiscourseImporterMixin from './mixins/discourse.ts'; +import DrupalImporterMixin from './mixins/drupal.ts'; +import GoGoCartoImporterMixin from './mixins/gogocarto.ts'; +import HumHubImporterMixin from './mixins/humhub.ts'; +import JotformImporterMixin from './mixins/jotform.ts'; +import MobilizonImporterMixin from './mixins/mobilizon.ts'; +import PrestaShopImporterMixin from './mixins/prestashop.ts'; +import YesWikiImporterMixin from './mixins/yeswiki.ts'; +import WordpressImporterMixin from './mixins/wordpress.ts'; + +export * from './utils.ts'; +export { + ImporterMixin, + DiscourseImporterMixin, + DrupalImporterMixin, + GoGoCartoImporterMixin, + HumHubImporterMixin, + JotformImporterMixin, + MobilizonImporterMixin, + PrestaShopImporterMixin, + YesWikiImporterMixin, + WordpressImporterMixin +}; diff --git a/src/middleware/packages/importer/mixins/discourse.js b/src/middleware/packages/importer/mixins/discourse.ts similarity index 71% rename from src/middleware/packages/importer/mixins/discourse.js rename to src/middleware/packages/importer/mixins/discourse.ts index 922cf81d5..8af5d043d 100644 --- a/src/middleware/packages/importer/mixins/discourse.js +++ b/src/middleware/packages/importer/mixins/discourse.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -12,7 +13,7 @@ module.exports = { fieldsMapping: { slug: 'slug', created: 'created_at', - updated: data => data.last_posted_at || data.created_at + updated: (data: any) => data.last_posted_at || data.created_at } } }, @@ -20,7 +21,8 @@ module.exports = { if (this.settings.source.discourse.type === 'topics') { this.settings.source.apiUrl = this.settings.source.discourse.baseUrl; this.settings.source.getAllCompact = urlJoin(this.settings.source.discourse.baseUrl, 'latest.json'); - this.settings.source.getOneFull = data => urlJoin(this.settings.source.discourse.baseUrl, 't', `${data.id}.json`); + this.settings.source.getOneFull = (data: any) => + urlJoin(this.settings.source.discourse.baseUrl, 't', `${data.id}.json`); } else { throw new Error('The DiscourseImporterMixin can only import topics for now'); } @@ -42,4 +44,6 @@ module.exports = { } } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/drupal.js b/src/middleware/packages/importer/mixins/drupal.ts similarity index 63% rename from src/middleware/packages/importer/mixins/drupal.js rename to src/middleware/packages/importer/mixins/drupal.ts index 366a1f350..f5e32bd3a 100644 --- a/src/middleware/packages/importer/mixins/drupal.js +++ b/src/middleware/packages/importer/mixins/drupal.ts @@ -1,7 +1,8 @@ -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -17,8 +18,8 @@ module.exports = { }, fieldsMapping: { slug: 'uuid', - created: data => convertToIsoString(data.published), - updated: data => convertToIsoString(data.updated) + created: (data: any) => convertToIsoString(data.published), + updated: (data: any) => convertToIsoString(data.updated) } } }, @@ -26,7 +27,7 @@ module.exports = { async list(url) { const data = await this.fetch(url); if (data && data.nodes) { - return data.nodes.map(n => n.node); + return data.nodes.map((n: any) => n.node); } return false; }, @@ -38,4 +39,6 @@ module.exports = { return false; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/gogocarto.js b/src/middleware/packages/importer/mixins/gogocarto.ts similarity index 81% rename from src/middleware/packages/importer/mixins/gogocarto.js rename to src/middleware/packages/importer/mixins/gogocarto.ts index f543e689d..c5850ea18 100644 --- a/src/middleware/packages/importer/mixins/gogocarto.js +++ b/src/middleware/packages/importer/mixins/gogocarto.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -25,7 +26,7 @@ module.exports = { 'api', 'elements' )}?ontology=gogosync`; - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => urlJoin(this.settings.source.gogocarto.baseUrl, 'api', 'elements', `${data.id}`); } else { throw new Error('The GoGoCartoMixin can only import elements for now'); @@ -41,4 +42,6 @@ module.exports = { return result.data; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/humhub.js b/src/middleware/packages/importer/mixins/humhub.ts similarity index 70% rename from src/middleware/packages/importer/mixins/humhub.js rename to src/middleware/packages/importer/mixins/humhub.ts index e88f82d75..3abae620f 100644 --- a/src/middleware/packages/importer/mixins/humhub.js +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -1,10 +1,11 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; const allowedTypes = ['user', 'space', 'calendar', 'post']; -const getSlugByUrl = url => { +const getSlugByUrl = (url: any) => { if (url) { const splitUrl = url.split('/'); let slug = splitUrl.pop(); @@ -14,7 +15,7 @@ const getSlugByUrl = url => { } }; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -25,7 +26,8 @@ module.exports = { }, fieldsMapping: { // We don't use arrow function as we need to have access to this.settings - slug: function (data) { + slug: function (data: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ slug... Remove this comment to see the full error message switch (this.settings.source.humhub.type) { case 'user': case 'space': @@ -35,14 +37,18 @@ module.exports = { return data.content.metadata.guid; } }, - created: function (data) { + // @ts-expect-error TS(7023): 'created' implicitly has return type 'any' because... Remove this comment to see the full error message + created: function (data: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ slug... Remove this comment to see the full error message switch (this.settings.source.humhub.type) { case 'calendar': case 'post': return convertToIsoString(data.content.metadata.created_at); } }, - updated: function (data) { + // @ts-expect-error TS(7023): 'updated' implicitly has return type 'any' because... Remove this comment to see the full error message + updated: function (data: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ slug... Remove this comment to see the full error message switch (this.settings.source.humhub.type) { case 'calendar': case 'post': @@ -66,9 +72,9 @@ module.exports = { this.settings.source.getAllFull = this.settings.source.apiUrl; if (type === 'calendar') { - this.settings.source.getOneFull = data => `${this.settings.source.apiUrl}/entry/${data.id}`; + this.settings.source.getOneFull = (data: any) => `${this.settings.source.apiUrl}/entry/${data.id}`; } else { - this.settings.source.getOneFull = data => `${this.settings.source.apiUrl}/${data.id}`; + this.settings.source.getOneFull = (data: any) => `${this.settings.source.apiUrl}/${data.id}`; } }, methods: { @@ -109,4 +115,6 @@ module.exports = { return results; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/importer.js b/src/middleware/packages/importer/mixins/importer.ts similarity index 54% rename from src/middleware/packages/importer/mixins/importer.js rename to src/middleware/packages/importer/mixins/importer.ts index 2bf17a682..6ba48b0fe 100644 --- a/src/middleware/packages/importer/mixins/importer.js +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -1,10 +1,11 @@ -const fetch = require('node-fetch'); -const cronParser = require('cron-parser'); -const { promises: fsPromises } = require('fs'); -const { ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const { isDir } = require('../utils'); - -module.exports = { +import fetch from 'node-fetch'; +import cronParser from 'cron-parser'; +import { promises as fsPromises } from 'fs'; +import { ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { isDir } from '../utils.ts'; + +const Schema = { settings: { source: { apiUrl: null, @@ -69,7 +70,7 @@ module.exports = { webId: 'system' }); - this.imported = Object.fromEntries(result.map(node => [node.sourceUri.value, node.id.value])); + this.imported = Object.fromEntries(result.map((node: any) => [node.sourceUri.value, node.id.value])); } else { this.imported = {}; } @@ -90,133 +91,172 @@ module.exports = { } }, actions: { - async freshImport(ctx) { - if (ctx.params.clear === undefined || ctx.params.clear === true) { - this.logger.info('Clearing all existing data...'); + freshImport: defineAction({ + async handler(ctx) { + if (ctx.params.clear === undefined || ctx.params.clear === true) { + this.logger.info('Clearing all existing data...'); - await this.actions.deleteImported(); - } + await this.actions.deleteImported(); + } - await this.prepare(); + await this.prepare(); - if (this.settings.source.getAllCompact) { - this.logger.info('Fetching compact list...'); - - const compactResults = await this.list(this.settings.source.getAllCompact); - - if (compactResults) { - this.logger.info( - `Importing ${compactResults.length} items from ${ - typeof this.settings.source.getAllCompact === 'string' - ? this.settings.source.getAllCompact - : this.settings.source.getAllCompact.url - }...` - ); - - for (const data of compactResults) { - const sourceUri = this.settings.source.getOneFull(data); - const destUri = await this.actions.importOne({ sourceUri }, { parentCtx: ctx }); - if (destUri) this.imported[sourceUri] = destUri; + if (this.settings.source.getAllCompact) { + this.logger.info('Fetching compact list...'); + + const compactResults = await this.list(this.settings.source.getAllCompact); + + if (compactResults) { + this.logger.info( + `Importing ${compactResults.length} items from ${ + typeof this.settings.source.getAllCompact === 'string' + ? this.settings.source.getAllCompact + : this.settings.source.getAllCompact.url + }...` + ); + + for (const data of compactResults) { + const sourceUri = this.settings.source.getOneFull(data); + const destUri = await this.actions.importOne({ sourceUri }, { parentCtx: ctx }); + if (destUri) this.imported[sourceUri] = destUri; + } + } else { + throw new Error( + `Error fetching the endpoint ${ + typeof this.settings.source.getAllCompact === 'string' + ? this.settings.source.getAllCompact + : this.settings.source.getAllCompact.url + }...` + ); } - } else { - throw new Error( - `Error fetching the endpoint ${ - typeof this.settings.source.getAllCompact === 'string' - ? this.settings.source.getAllCompact - : this.settings.source.getAllCompact.url - }...` - ); - } - } else if (this.settings.source.getAllFull) { - this.logger.info('Fetching full list...'); - - const fullResults = await this.list(this.settings.source.getAllFull); - - if (fullResults) { - this.logger.info( - `Importing ${fullResults.length} items from ${ - typeof this.settings.source.getAllFull === 'string' - ? this.settings.source.getAllFull - : this.settings.source.getAllFull.url - }...` - ); - - for (const data of fullResults) { - const sourceUri = this.settings.source.getOneFull && this.settings.source.getOneFull(data); - const destUri = await this.actions.importOne({ sourceUri, data }, { parentCtx: ctx }); - if (destUri) this.imported[sourceUri] = destUri; + } else if (this.settings.source.getAllFull) { + this.logger.info('Fetching full list...'); + + const fullResults = await this.list(this.settings.source.getAllFull); + + if (fullResults) { + this.logger.info( + `Importing ${fullResults.length} items from ${ + typeof this.settings.source.getAllFull === 'string' + ? this.settings.source.getAllFull + : this.settings.source.getAllFull.url + }...` + ); + + for (const data of fullResults) { + const sourceUri = this.settings.source.getOneFull && this.settings.source.getOneFull(data); + const destUri = await this.actions.importOne({ sourceUri, data }, { parentCtx: ctx }); + if (destUri) this.imported[sourceUri] = destUri; + } + } else { + throw new Error( + `Error fetching the endpoint ${ + typeof this.settings.source.getAllFull === 'string' + ? this.settings.source.getAllFull + : this.settings.source.getAllFull.url + }...` + ); } } else { - throw new Error( - `Error fetching the endpoint ${ - typeof this.settings.source.getAllFull === 'string' - ? this.settings.source.getAllFull - : this.settings.source.getAllFull.url - }...` - ); + throw new Error('You must define the setting source.getAllCompact or source.getAllFull'); } - } else { - throw new Error('You must define the setting source.getAllCompact or source.getAllFull'); + + this.logger.info(`Import finished !`); } + }), - this.logger.info(`Import finished !`); - }, - synchronize() { - if (this.createJob) { - this.createJob(this.name, 'synchronize', {}); - } else { - // If QueueMixin is not available, call method with fake job object - return this.processSynchronize({ - data: {}, - progress: number => this.logger.info(`Progress: ${number}%`), - log: message => this.logger.info(message) - }); + synchronize: defineAction({ + handler() { + if (this.createJob) { + this.createJob(this.name, 'synchronize', {}); + } else { + // If QueueMixin is not available, call method with fake job object + return this.processSynchronize({ + data: {}, + progress: (number: any) => this.logger.info(`Progress: ${number}%`), + log: (message: any) => this.logger.info(message) + }); + } } - }, - async importOne(ctx) { - let { sourceUri, destUri, data } = ctx.params; + }), - if (!data) { - data = await this.getOne(sourceUri); + importOne: defineAction({ + async handler(ctx) { + let { sourceUri, destUri, data } = ctx.params; if (!data) { - this.logger.warn(`Invalid ${sourceUri}...`); + data = await this.getOne(sourceUri); + + if (!data) { + this.logger.warn(`Invalid ${sourceUri}...`); + return false; // False = delete resource if it exists + } + } + + const resource = await this.transform(data); + + // If resource is false, it means it is not published + if (!resource) { + this.logger.info(`Skipping ${sourceUri} (not published)...`); return false; // False = delete resource if it exists } - } + if (destUri) { + const oldData = await ctx.call('ldp.resource.get', { + resourceUri: destUri, + webId: 'system' + }); - const resource = await this.transform(data); + const oldUpdatedDate = oldData['dc:modified']; + const newUpdatedDate = this.getField('updated', data); - // If resource is false, it means it is not published - if (!resource) { - this.logger.info(`Skipping ${sourceUri} (not published)...`); - return false; // False = delete resource if it exists - } - if (destUri) { - const oldData = await ctx.call('ldp.resource.get', { - resourceUri: destUri, - webId: 'system' - }); + if (!oldUpdatedDate || !newUpdatedDate || new Date(newUpdatedDate) > new Date(oldUpdatedDate)) { + this.logger.info(`Reimporting ${sourceUri}...`); - const oldUpdatedDate = oldData['dc:modified']; - const newUpdatedDate = this.getField('updated', data); + const oldDataToKeep = + this.settings.dest.predicatesToKeep.length > 0 + ? Object.fromEntries( + Object.entries(oldData).filter(([key]) => this.settings.dest.predicatesToKeep.includes(key)) + ) + : {}; - if (!oldUpdatedDate || !newUpdatedDate || new Date(newUpdatedDate) > new Date(oldUpdatedDate)) { - this.logger.info(`Reimporting ${sourceUri}...`); + try { + await ctx.call('ldp.resource.put', { + resource: { + '@id': destUri, + ...resource, + ...oldDataToKeep, + 'dc:source': sourceUri, + 'dc:created': resource['dc:created'] || this.getField('created', data), + 'dc:modified': resource['dc:modified'] || this.getField('updated', data), + 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri + }, + webId: 'system' + }); + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.warn(`Unable to update ${destUri} (Error message: ${e.message})`); + return false; + } + } else { + this.logger.info(`Skipping ${sourceUri} (not changed)...`); + return true; // True = skipping + } + } else { + this.logger.info(`Importing ${sourceUri}...`); - const oldDataToKeep = - this.settings.dest.predicatesToKeep.length > 0 - ? Object.fromEntries( - Object.entries(oldData).filter(([key]) => this.settings.dest.predicatesToKeep.includes(key)) - ) - : {}; + if (!this.settings.dest.containerUri) { + throw new Error(`Cannot import as dest.containerUri setting is not defined`); + } try { - await ctx.call('ldp.resource.put', { + destUri = await ctx.call('ldp.container.post', { + containerUri: + typeof this.settings.dest.containerUri === 'string' + ? this.settings.dest.containerUri + : this.settings.dest.containerUri(resource), + slug: this.getField('slug', data), resource: { - '@id': destUri, ...resource, - ...oldDataToKeep, 'dc:source': sourceUri, 'dc:created': resource['dc:created'] || this.getField('created', data), 'dc:modified': resource['dc:modified'] || this.getField('updated', data), @@ -225,68 +265,51 @@ module.exports = { webId: 'system' }); } catch (e) { - this.logger.warn(`Unable to update ${destUri} (Error message: ${e.message})`); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.warn(`Unable to import ${sourceUri} (Error message: ${e.message})`); return false; } - } else { - this.logger.info(`Skipping ${sourceUri} (not changed)...`); - return true; // True = skipping - } - } else { - this.logger.info(`Importing ${sourceUri}...`); - if (!this.settings.dest.containerUri) { - throw new Error(`Cannot import as dest.containerUri setting is not defined`); + this.logger.info(`Done! Resource URL: ${destUri}`); } - try { - destUri = await ctx.call('ldp.container.post', { - containerUri: - typeof this.settings.dest.containerUri === 'string' - ? this.settings.dest.containerUri - : this.settings.dest.containerUri(resource), - slug: this.getField('slug', data), - resource: { - ...resource, - 'dc:source': sourceUri, - 'dc:created': resource['dc:created'] || this.getField('created', data), - 'dc:modified': resource['dc:modified'] || this.getField('updated', data), - 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri - }, + return destUri; + } + }), + + deleteImported: defineAction({ + async handler(ctx) { + for (const resourceUri of Object.values(this.imported)) { + this.logger.info(`Deleting ${resourceUri}...`); + + // TODO also delete blank nodes attached to the resources + await ctx.call('ldp.resource.delete', { + resourceUri, webId: 'system' }); - } catch (e) { - this.logger.warn(`Unable to import ${sourceUri} (Error message: ${e.message})`); - return false; } - this.logger.info(`Done! Resource URL: ${destUri}`); + this.imported = {}; } + }), - return destUri; - }, - async deleteImported(ctx) { - for (const resourceUri of Object.values(this.imported)) { - this.logger.info(`Deleting ${resourceUri}...`); + list: defineAction({ + async handler(ctx) { + return await this.list(ctx.params.url || this.settings.source.getAllFull); + } + }), - // TODO also delete blank nodes attached to the resources - await ctx.call('ldp.resource.delete', { - resourceUri, - webId: 'system' - }); + getOne: defineAction({ + async handler(ctx) { + return await this.getOne(this.settings.source.getOneFull(ctx.params.data)); } + }), - this.imported = {}; - }, - async list(ctx) { - return await this.list(ctx.params.url || this.settings.source.getAllFull); - }, - async getOne(ctx) { - return await this.getOne(this.settings.source.getOneFull(ctx.params.data)); - }, - getImported() { - return this.imported; - } + getImported: defineAction({ + handler() { + return this.imported; + } + }) }, methods: { async prepare() { @@ -419,10 +442,12 @@ module.exports = { const oldSourceUris = Object.keys(this.imported); if (this.settings.source.getAllCompact) { - newSourceUris = results.map(data => this.settings.source.getOneFull(data)); + newSourceUris = results.map((data: any) => this.settings.source.getOneFull(data)); } else { // If we have no compact results, put the data in an object so that we can easily use it with importOne - mappedFullResults = Object.fromEntries(results.map(data => [this.settings.source.getOneFull(data), data])); + mappedFullResults = Object.fromEntries( + results.map((data: any) => [this.settings.source.getOneFull(data), data]) + ); newSourceUris = Object.keys(mappedFullResults); } @@ -443,6 +468,7 @@ module.exports = { await this.postActivity(ACTIVITY_TYPES.DELETE, this.imported[sourceUri]); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message deletedUris[sourceUri] = this.imported[sourceUri]; // Remove resource from local cache @@ -455,15 +481,17 @@ module.exports = { // CREATED RESOURCES /// //////////////////////////////////////// - const urisToCreate = newSourceUris.filter(uri => !oldSourceUris.includes(uri)); + const urisToCreate = newSourceUris.filter((uri: any) => !oldSourceUris.includes(uri)); for (const sourceUri of urisToCreate) { this.logger.info(`Resource ${sourceUri} did not exist, importing it...`); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const destUri = await this.actions.importOne({ sourceUri, data: mappedFullResults[sourceUri] }); if (destUri) { await this.postActivity(ACTIVITY_TYPES.CREATE, destUri); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message createdUris[sourceUri] = destUri; // Add resource to local cache @@ -478,18 +506,19 @@ module.exports = { /// //////////////////////////////////////// const urisToUpdate = results - .filter(data => { + .filter((data: any) => { // If an updated field is available in compact results, filter out items outside of the time frame const updated = this.getField('updated', data); return updated ? fromDate < new Date(updated) && new Date(updated) > toDate : true; }) - .map(data => this.settings.source.getOneFull(data)) - .filter(uri => !urisToCreate.includes(uri)); + .map((data: any) => this.settings.source.getOneFull(data)) + .filter((uri: any) => !urisToCreate.includes(uri)); for (const sourceUri of urisToUpdate) { const result = await this.actions.importOne({ sourceUri, destUri: this.imported[sourceUri], + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message data: mappedFullResults[sourceUri] }); @@ -501,6 +530,7 @@ module.exports = { await this.postActivity(ACTIVITY_TYPES.DELETE, this.imported[sourceUri]); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message deletedUris[sourceUri] = this.imported[sourceUri]; // Remove resource from local cache @@ -510,6 +540,7 @@ module.exports = { } else { await this.postActivity(ACTIVITY_TYPES.UPDATE, this.imported[sourceUri]); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message updatedUris[sourceUri] = this.imported[sourceUri]; } } @@ -523,4 +554,6 @@ module.exports = { }; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/jotform.js b/src/middleware/packages/importer/mixins/jotform.ts similarity index 74% rename from src/middleware/packages/importer/mixins/jotform.js rename to src/middleware/packages/importer/mixins/jotform.ts index 823230ef0..048315f4e 100644 --- a/src/middleware/packages/importer/mixins/jotform.js +++ b/src/middleware/packages/importer/mixins/jotform.ts @@ -1,7 +1,8 @@ -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -11,8 +12,8 @@ module.exports = { }, fieldsMapping: { slug: 'id', - created: data => convertToIsoString(data.created_at), - updated: data => convertToIsoString(data.updated_at) + created: (data: any) => convertToIsoString(data.created_at), + updated: (data: any) => convertToIsoString(data.updated_at) } } }, @@ -21,7 +22,7 @@ module.exports = { this.settings.source.apiUrl = 'https://eu-api.jotform.com'; this.settings.source.headers = { apikey: this.settings.source.jotform.apiKey }; this.settings.source.getAllCompact = 'https://eu-api.jotform.com/user/forms'; - this.settings.source.getOneFull = data => `https://eu-api.jotform.com/submission/${data.id}`; + this.settings.source.getOneFull = (data: any) => `https://eu-api.jotform.com/submission/${data.id}`; } else { throw new Error('The JotformImporterMixin can only import submissions for now'); } @@ -50,4 +51,6 @@ module.exports = { return false; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/mobilizon.js b/src/middleware/packages/importer/mixins/mobilizon.ts similarity index 79% rename from src/middleware/packages/importer/mixins/mobilizon.js rename to src/middleware/packages/importer/mixins/mobilizon.ts index 06c124dd8..2d4867d4c 100644 --- a/src/middleware/packages/importer/mixins/mobilizon.js +++ b/src/middleware/packages/importer/mixins/mobilizon.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -43,7 +44,8 @@ module.exports = { ` }) }; - this.settings.source.getOneFull = data => urlJoin(this.settings.source.mobilizon.baseUrl, 'events', data.uuid); + this.settings.source.getOneFull = (data: any) => + urlJoin(this.settings.source.mobilizon.baseUrl, 'events', data.uuid); } else { throw new Error('The MobilizonImporterMixin can only import events for now'); } @@ -54,4 +56,6 @@ module.exports = { return results && results.data && results.data.events && results.data.events.elements; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/prestashop.js b/src/middleware/packages/importer/mixins/prestashop.ts similarity index 71% rename from src/middleware/packages/importer/mixins/prestashop.js rename to src/middleware/packages/importer/mixins/prestashop.ts index 9097c1684..2955c6740 100644 --- a/src/middleware/packages/importer/mixins/prestashop.js +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -1,8 +1,9 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -16,8 +17,8 @@ module.exports = { }, fieldsMapping: { slug: 'link_rewrite', - created: data => convertToIsoString(data.date_add), - updated: data => convertToIsoString(data.date_upd) + created: (data: any) => convertToIsoString(data.date_add), + updated: (data: any) => convertToIsoString(data.date_upd) } } }, @@ -37,7 +38,7 @@ module.exports = { 'api', this.settings.source.prestashop.type )}?display=[id,date_upd]`; - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => urlJoin(this.settings.source.prestashop.baseUrl, 'api', this.settings.source.prestashop.type, `${data.id}`); this.settings.source.headers.Authorization = `Basic ${Buffer.from( `${this.settings.source.prestashop.wsKey}:` @@ -52,6 +53,7 @@ module.exports = { const result = await this.fetch(url); if (result) { return { + // @ts-expect-error TS(2698): Spread types may only be created from object types... Remove this comment to see the full error message ...Object.values(result)[0], type: Object.keys(result)[0] }; @@ -59,4 +61,6 @@ module.exports = { return false; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/wordpress.js b/src/middleware/packages/importer/mixins/wordpress.ts similarity index 86% rename from src/middleware/packages/importer/mixins/wordpress.js rename to src/middleware/packages/importer/mixins/wordpress.ts index ecf89de84..b03b9c2bb 100644 --- a/src/middleware/packages/importer/mixins/wordpress.js +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -1,9 +1,10 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const { getSlugFromUri, delay } = require('@semapps/ldp'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { getSlugFromUri, delay } from '@semapps/ldp'; +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -26,7 +27,7 @@ module.exports = { if (this.settings.source.wordpress.type === 'posts') { this.settings.source.apiUrl = this.settings.source.wordpress.baseUrl; this.settings.source.getAllCompact = urlJoin(this.settings.source.wordpress.baseUrl, 'wp-json/wp/v2/posts'); - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => urlJoin(this.settings.source.wordpress.baseUrl, 'wp-json/wp/v2/posts', `${data.id}`); if (this.settings.source.wordpress.appPassword) { this.settings.source.basicAuth = { @@ -69,6 +70,7 @@ module.exports = { this.logger.warn(`Could not get ${mediaUrl}. Trying again in 30 seconds...`); await delay(30000); } else { + // @ts-expect-error TS(2769): No overload matches this call. throw new Error(e); } } @@ -97,4 +99,6 @@ module.exports = { } } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/yeswiki.js b/src/middleware/packages/importer/mixins/yeswiki.ts similarity index 71% rename from src/middleware/packages/importer/mixins/yeswiki.js rename to src/middleware/packages/importer/mixins/yeswiki.ts index ca0db328a..39bdbc548 100644 --- a/src/middleware/packages/importer/mixins/yeswiki.js +++ b/src/middleware/packages/importer/mixins/yeswiki.ts @@ -1,7 +1,8 @@ -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -12,8 +13,8 @@ module.exports = { }, fieldsMapping: { slug: 'id_fiche', - created: data => convertToIsoString(data.date_creation_fiche), - updated: data => convertToIsoString(data.date_maj_fiche) + created: (data: any) => convertToIsoString(data.date_creation_fiche), + updated: (data: any) => convertToIsoString(data.date_maj_fiche) } } }, @@ -23,14 +24,14 @@ module.exports = { // Note: the form_id parameter is not used by YesWiki, but it allows to have a different base URL for each Bazar list this.settings.source.apiUrl = `${baseUrl}?BazaR/json&demand=entry&form_id=${formId}`; this.settings.source.getAllFull = `${baseUrl}?BazaR/json&demand=entries&id=${formId}`; - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => `${baseUrl}?BazaR/json&demand=entry&form_id=${formId}&id_fiche=${data.id_fiche}`; } else { const apiPath = `api/forms/${formId}/entries/json`; this.settings.source.apiUrl = `${baseUrl}?${apiPath}`; this.settings.source.getAllFull = `${baseUrl}?${apiPath}`; this.settings.source.getAllCompact = `${baseUrl}?${apiPath}&fields=id_fiche,date_maj_fiche`; - this.settings.source.getOneFull = data => `${baseUrl}?${apiPath}/${data.id_fiche}`; + this.settings.source.getOneFull = (data: any) => `${baseUrl}?${apiPath}/${data.id_fiche}`; } }, methods: { @@ -46,4 +47,6 @@ module.exports = { return false; } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/importer/package.json b/src/middleware/packages/importer/package.json index 2e972a62c..0b81750ce 100644 --- a/src/middleware/packages/importer/package.json +++ b/src/middleware/packages/importer/package.json @@ -15,10 +15,16 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/importer/tsconfig.json b/src/middleware/packages/importer/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/importer/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/importer/utils.js b/src/middleware/packages/importer/utils.ts similarity index 56% rename from src/middleware/packages/importer/utils.js rename to src/middleware/packages/importer/utils.ts index eee3ef6a1..f465519ae 100644 --- a/src/middleware/packages/importer/utils.js +++ b/src/middleware/packages/importer/utils.ts @@ -1,11 +1,15 @@ -const { promises: fsPromises } = require('fs'); -const sanitizeHtml = require('sanitize-html'); -const PNF = require('google-libphonenumber').PhoneNumberFormat; +import { promises as fsPromises } from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'sani... Remove this comment to see the full error message +import sanitizeHtml from 'sanitize-html'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'goog... Remove this comment to see the full error message +import googlelibphonenumberModule from 'google-libphonenumber'; + +const PNF = googlelibphonenumberModule.PhoneNumberFormat; const phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance(); -const convertToIsoString = str => str && new Date(str).toISOString(); +const convertToIsoString = (str: any) => str && new Date(str).toISOString(); -const formatPhoneNumber = (number, countryCode) => { +const formatPhoneNumber = (number: any, countryCode: any) => { if (number && countryCode) { try { const parsedNumber = phoneUtil.parseAndKeepRawInput(number, countryCode); @@ -17,19 +21,20 @@ const formatPhoneNumber = (number, countryCode) => { } }; -const frenchAddressSearch = async query => { +const frenchAddressSearch = async (query: any) => { const url = new URL('https://api-adresse.data.gouv.fr/search/'); url.searchParams.set('q', query); const response = await fetch(url.toString()); if (response.ok) { const json = await response.json(); + // @ts-expect-error TS(18046): 'json' is of type 'unknown'. return json.features[0]; } return false; }; -const frenchAddressReverseSearch = async (lat, lon) => { +const frenchAddressReverseSearch = async (lat: any, lon: any) => { const url = new URL('https://api-adresse.data.gouv.fr/reverse/'); url.searchParams.set('lat', lat); url.searchParams.set('lon', lon); @@ -37,14 +42,15 @@ const frenchAddressReverseSearch = async (lat, lon) => { if (response.ok) { const json = await response.json(); + // @ts-expect-error TS(18046): 'json' is of type 'unknown'. return json.features.length > 0 ? json.features[0] : false; } return false; }; -const removeHtmlTags = text => sanitizeHtml(text, { allowedTags: [] }).trim(); +const removeHtmlTags = (text: any) => sanitizeHtml(text, { allowedTags: [] }).trim(); -const isDir = async path => { +const isDir = async (path: any) => { try { const stat = await fsPromises.lstat(path); const value = stat.isDirectory(); @@ -55,7 +61,7 @@ const isDir = async path => { } }; -module.exports = { +export { convertToIsoString, formatPhoneNumber, frenchAddressSearch, diff --git a/src/middleware/packages/inference/index.js b/src/middleware/packages/inference/index.js deleted file mode 100644 index 88c3fc106..000000000 --- a/src/middleware/packages/inference/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - InferenceService: require('./service') -}; diff --git a/src/middleware/packages/inference/index.ts b/src/middleware/packages/inference/index.ts new file mode 100644 index 000000000..3d16f9a12 --- /dev/null +++ b/src/middleware/packages/inference/index.ts @@ -0,0 +1,3 @@ +import InferenceService from './service.ts'; + +export { InferenceService }; diff --git a/src/middleware/packages/inference/package.json b/src/middleware/packages/inference/package.json index cf38c5925..a56160f56 100644 --- a/src/middleware/packages/inference/package.json +++ b/src/middleware/packages/inference/package.json @@ -11,9 +11,15 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/inference/service.js b/src/middleware/packages/inference/service.js deleted file mode 100644 index 12a4b4397..000000000 --- a/src/middleware/packages/inference/service.js +++ /dev/null @@ -1,325 +0,0 @@ -const fetch = require('node-fetch'); -const N3 = require('n3'); - -const { DataFactory } = N3; -const { triple, namedNode } = DataFactory; -const RemoteService = require('./subservices/remote'); - -module.exports = { - name: 'inference', - settings: { - baseUrl: null, - acceptFromRemoteServers: false, - offerToRemoteServers: false - }, - dependencies: ['triplestore', 'ldp', 'jsonld'], - created() { - const { baseUrl, acceptFromRemoteServers, offerToRemoteServers } = this.settings; - if (acceptFromRemoteServers || offerToRemoteServers) { - this.broker.createService({ - mixins: [RemoteService], - settings: { - baseUrl, - acceptFromRemoteServers, - offerToRemoteServers - } - }); - } - }, - async started() { - this.inverseRelations = {}; - // Note: Inverse relationships are also calculated when ontologies.registered events are received (see below) - for (const ontology of await this.broker.call('ontologies.list')) { - if (ontology.owl) { - const result = await this.findInverseRelations(ontology.owl); - this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${ontology.owl}`); - this.inverseRelations = { ...this.inverseRelations, ...result }; - } - } - }, - methods: { - findInverseRelations(owlFile) { - const parser = new N3.Parser({ format: 'Turtle' }); - return new Promise((resolve, reject) => { - fetch(owlFile) - .then(res => { - if (!res.ok) throw new Error(`Unable to fetch ${owlFile}`); - return res.text(); - }) - .then(body => { - const rel = {}; - parser.parse(body, (err, quad) => { - if (err) reject(err); - if (quad) { - if (quad.predicate.id === 'http://www.w3.org/2002/07/owl#inverseOf') { - rel[quad.object.id] = quad.subject.id; - rel[quad.subject.id] = quad.object.id; - } else if ( - quad.predicate.id === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' && - quad.object.id === 'http://www.w3.org/2002/07/owl#SymmetricProperty' - ) { - // SymmetricProperty implies an inverse relation with the same properties - rel[quad.subject.id] = quad.subject.id; - } - } else { - resolve(rel); - } - }); - }) - .catch(err => reject(err)); - }); - }, - generateInverseTriplesFromResource(resource) { - const inverseTriples = []; - for (const property of Object.keys(resource)) { - if (this.inverseRelations[property]) { - for (const uri of resource[property]) { - // uri['@id'] can be undefined if context bad configuration ("@type": "@id" not configured for property) - if (uri['@id']) { - inverseTriples.push( - triple(namedNode(uri['@id']), namedNode(this.inverseRelations[property]), namedNode(resource['@id'])) - ); - } - } - } - } - return inverseTriples; - }, - generateInverseTriples(triples) { - const inverseTriples = []; - if (triples) { - for (const t of triples) { - if (this.inverseRelations[t.predicate.value]) { - inverseTriples.push( - triple( - namedNode(t.object.value), - namedNode(this.inverseRelations[t.predicate.value]), - namedNode(t.subject.value) - ) - ); - } - } - } - return inverseTriples; - }, - triplesToString(triples) { - return triples - .map(triple => `<${triple.subject.id}> <${triple.predicate.id}> <${triple.object.id}> .`) - .join('\n'); - }, - generateInsertQuery(triples) { - return `INSERT DATA { ${this.triplesToString(triples)} }`; - }, - generateDeleteQuery(triples) { - return `DELETE WHERE { ${this.triplesToString(triples)} }`; - }, - // Since the inverse links are added or removed directly in the triple store, - // we need to invalidate manually the cache of the affected resources - cleanResourcesCache(ctx, triples) { - if (this.broker.cacher) { - for (const triple of triples) { - const resourceUri = triple.subject.id; - ctx.call('ldp.cache.invalidateResource', { resourceUri }); - } - } - }, - splitLocalAndRemote(triples) { - const locals = []; - const remotes = []; - for (const triple of triples) { - if (triple.subject.id.startsWith(this.settings.baseUrl)) locals.push(triple); - else remotes.push(triple); - } - return [locals, remotes]; - }, - async filterMissingResources(ctx, triples) { - const existingTriples = []; - for (const triple of triples) { - const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri: triple.subject.id, webId: 'system' }); - if (resourceExist) existingTriples.push(triple); - } - return existingTriples; - }, - // Exclude from triples1 the triples which also exist in triples2 - getTriplesDifference(triples1, triples2) { - return triples1.filter(t1 => !triples2.some(t2 => t1.equals(t2))); - } - }, - events: { - async 'ldp.resource.created'(ctx) { - let { newData } = ctx.params; - newData = await ctx.call('jsonld.parser.expand', { input: newData }); - - let triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); - - const [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); - - // Avoid adding inverse link to non-existent resources - triplesToAdd = await this.filterMissingResources(ctx, addLocals); - - // local data - if (triplesToAdd.length > 0) { - await ctx.call('triplestore.update', { query: this.generateInsertQuery(triplesToAdd), webId: 'system' }); - this.cleanResourcesCache(ctx, triplesToAdd); - } - - // remote data - if (this.settings.offerToRemoteServers) { - for (const triple of addRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: true - }); - } - } - }, - async 'ldp.resource.deleted'(ctx) { - let { oldData } = ctx.params; - oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); - - const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); - - const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); - - if (removeLocals.length > 0) { - await ctx.call('triplestore.update', { query: this.generateDeleteQuery(removeLocals), webId: 'system' }); - this.cleanResourcesCache(ctx, removeLocals); - } - - // remote data - if (this.settings.offerToRemoteServers) { - for (const triple of removeRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: false - }); - } - } - }, - async 'ldp.resource.updated'(ctx) { - let { oldData, newData } = ctx.params; - oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); - newData = await ctx.call('jsonld.parser.expand', { input: newData }); - - const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); - const triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); - - // Filter out triples which are removed and added at the same time - const filteredTriplesToAdd = this.getTriplesDifference(triplesToAdd, triplesToRemove); - const filteredTriplesToRemove = this.getTriplesDifference(triplesToRemove, triplesToAdd); - - let [addLocals, addRemotes] = this.splitLocalAndRemote(filteredTriplesToAdd); - const [removeLocals, removeRemotes] = this.splitLocalAndRemote(filteredTriplesToRemove); - - // Dealing with locals first - - // Avoid adding inverse link to non-existent resources - addLocals = await this.filterMissingResources(ctx, addLocals); - - if (removeLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateDeleteQuery(removeLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, removeLocals); - } - - if (addLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateInsertQuery(addLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, addLocals); - } - - // Dealing with remotes - - // remote relationships are sent to relay actor of remote server - if (this.settings.offerToRemoteServers) { - for (const triple of addRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: true - }); - } - for (const triple of removeRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: false - }); - } - } - }, - async 'ldp.resource.patched'(ctx) { - const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; - - // If the patch is done following a remote inference offer - if (skipInferenceCheck) return; - - const triplesToAdd = this.generateInverseTriples(triplesAdded); - const triplesToRemove = this.generateInverseTriples(triplesRemoved); - - let [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); - const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); - - // Dealing with locals first - - // Avoid adding inverse link to non-existent resources - addLocals = await this.filterMissingResources(ctx, addLocals); - - if (removeLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateDeleteQuery(removeLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, removeLocals); - } - - if (addLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateInsertQuery(addLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, addLocals); - } - - // Dealing with remotes - - // remote relationships are sent to relay actor of remote server - if (this.settings.offerToRemoteServers) { - for (const triple of addRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: true - }); - } - for (const triple of removeRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: false - }); - } - } - }, - async 'ontologies.registered'(ctx) { - const { owl } = ctx.params; - if (owl) { - const result = await this.findInverseRelations(owl); - this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${owl}`); - this.inverseRelations = { ...this.inverseRelations, ...result }; - } - } - } -}; diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts new file mode 100644 index 000000000..30487d29c --- /dev/null +++ b/src/middleware/packages/inference/service.ts @@ -0,0 +1,401 @@ +import fetch from 'node-fetch'; +import N3 from 'n3'; +import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import RemoteService from './subservices/remote.ts'; + +const { DataFactory } = N3; +const { triple, namedNode } = DataFactory; + +const InferenceSchema = { + name: 'inference' as const, + settings: { + baseUrl: null, + acceptFromRemoteServers: false, + offerToRemoteServers: false + }, + dependencies: ['triplestore', 'ldp', 'jsonld'], + created() { + const { baseUrl, acceptFromRemoteServers, offerToRemoteServers } = this.settings; + if (acceptFromRemoteServers || offerToRemoteServers) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "inference.rem... Remove this comment to see the full error message + this.broker.createService({ + mixins: [RemoteService], + settings: { + baseUrl, + acceptFromRemoteServers, + offerToRemoteServers + } + }); + } + }, + async started() { + this.inverseRelations = {}; + // Note: Inverse relationships are also calculated when ontologies.registered events are received (see below) + for (const ontology of await this.broker.call('ontologies.list')) { + if (ontology.owl) { + const result = await this.findInverseRelations(ontology.owl); + this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${ontology.owl}`); + this.inverseRelations = { ...this.inverseRelations, ...result }; + } + } + }, + methods: { + findInverseRelations(owlFile) { + const parser = new N3.Parser({ format: 'Turtle' }); + return new Promise((resolve, reject) => { + fetch(owlFile) + .then(res => { + if (!res.ok) throw new Error(`Unable to fetch ${owlFile}`); + return res.text(); + }) + .then(body => { + const rel = {}; + parser.parse(body, (err, quad) => { + if (err) reject(err); + if (quad) { + if (quad.predicate.id === 'http://www.w3.org/2002/07/owl#inverseOf') { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + rel[quad.object.id] = quad.subject.id; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + rel[quad.subject.id] = quad.object.id; + } else if ( + quad.predicate.id === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' && + quad.object.id === 'http://www.w3.org/2002/07/owl#SymmetricProperty' + ) { + // SymmetricProperty implies an inverse relation with the same properties + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + rel[quad.subject.id] = quad.subject.id; + } + } else { + resolve(rel); + } + }); + }) + .catch(err => reject(err)); + }); + }, + generateInverseTriplesFromResource(resource) { + const inverseTriples = []; + for (const property of Object.keys(resource)) { + if (this.inverseRelations[property]) { + for (const uri of resource[property]) { + // uri['@id'] can be undefined if context bad configuration ("@type": "@id" not configured for property) + if (uri['@id']) { + inverseTriples.push( + triple(namedNode(uri['@id']), namedNode(this.inverseRelations[property]), namedNode(resource['@id'])) + ); + } + } + } + } + return inverseTriples; + }, + generateInverseTriples(triples) { + const inverseTriples = []; + if (triples) { + for (const t of triples) { + if (this.inverseRelations[t.predicate.value]) { + inverseTriples.push( + triple( + namedNode(t.object.value), + namedNode(this.inverseRelations[t.predicate.value]), + namedNode(t.subject.value) + ) + ); + } + } + } + return inverseTriples; + }, + triplesToString(triples) { + return triples + .map((triple: any) => `<${triple.subject.id}> <${triple.predicate.id}> <${triple.object.id}> .`) + .join('\n'); + }, + generateInsertQuery(triples) { + return `INSERT DATA { ${this.triplesToString(triples)} }`; + }, + generateDeleteQuery(triples) { + return `DELETE WHERE { ${this.triplesToString(triples)} }`; + }, + // Since the inverse links are added or removed directly in the triple store, + // we need to invalidate manually the cache of the affected resources + cleanResourcesCache(ctx, triples) { + if (this.broker.cacher) { + for (const triple of triples) { + const resourceUri = triple.subject.id; + ctx.call('ldp.cache.invalidateResource', { resourceUri }); + } + } + }, + splitLocalAndRemote(triples) { + const locals = []; + const remotes = []; + for (const triple of triples) { + if (triple.subject.id.startsWith(this.settings.baseUrl)) locals.push(triple); + else remotes.push(triple); + } + return [locals, remotes]; + }, + async filterMissingResources(ctx, triples) { + const existingTriples = []; + for (const triple of triples) { + const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri: triple.subject.id, webId: 'system' }); + if (resourceExist) existingTriples.push(triple); + } + return existingTriples; + }, + // Exclude from triples1 the triples which also exist in triples2 + getTriplesDifference(triples1, triples2) { + return triples1.filter((t1: any) => !triples2.some((t2: any) => t1.equals(t2))); + } + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'newData' does not exist on type 'Optiona... Remove this comment to see the full error message + let { newData } = ctx.params; + newData = await ctx.call('jsonld.parser.expand', { input: newData }); + + // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message + let triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); + + // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message + const [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); + + // Avoid adding inverse link to non-existent resources + // @ts-expect-error TS(2339): Property 'filterMissingResources' does not exist o... Remove this comment to see the full error message + triplesToAdd = await this.filterMissingResources(ctx, addLocals); + + // local data + if (triplesToAdd.length > 0) { + // @ts-expect-error TS(2339): Property 'generateInsertQuery' does not exist on t... Remove this comment to see the full error message + await ctx.call('triplestore.update', { query: this.generateInsertQuery(triplesToAdd), webId: 'system' }); + // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message + this.cleanResourcesCache(ctx, triplesToAdd); + } + + // remote data + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.offerToRemoteServers) { + for (const triple of addRemotes) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: true + }); + } + } + } + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message + let { oldData } = ctx.params; + oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); + + // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message + const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); + + // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message + const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); + + if (removeLocals.length > 0) { + // @ts-expect-error TS(2339): Property 'generateDeleteQuery' does not exist on t... Remove this comment to see the full error message + await ctx.call('triplestore.update', { query: this.generateDeleteQuery(removeLocals), webId: 'system' }); + // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message + this.cleanResourcesCache(ctx, removeLocals); + } + + // remote data + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.offerToRemoteServers) { + for (const triple of removeRemotes) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: false + }); + } + } + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message + let { oldData, newData } = ctx.params; + oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); + newData = await ctx.call('jsonld.parser.expand', { input: newData }); + + // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message + const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); + // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message + const triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); + + // Filter out triples which are removed and added at the same time + // @ts-expect-error TS(2339): Property 'getTriplesDifference' does not exist on ... Remove this comment to see the full error message + const filteredTriplesToAdd = this.getTriplesDifference(triplesToAdd, triplesToRemove); + // @ts-expect-error TS(2339): Property 'getTriplesDifference' does not exist on ... Remove this comment to see the full error message + const filteredTriplesToRemove = this.getTriplesDifference(triplesToRemove, triplesToAdd); + + // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message + let [addLocals, addRemotes] = this.splitLocalAndRemote(filteredTriplesToAdd); + // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message + const [removeLocals, removeRemotes] = this.splitLocalAndRemote(filteredTriplesToRemove); + + // Dealing with locals first + + // Avoid adding inverse link to non-existent resources + // @ts-expect-error TS(2339): Property 'filterMissingResources' does not exist o... Remove this comment to see the full error message + addLocals = await this.filterMissingResources(ctx, addLocals); + + if (removeLocals.length > 0) { + await ctx.call('triplestore.update', { + // @ts-expect-error TS(2339): Property 'generateDeleteQuery' does not exist on t... Remove this comment to see the full error message + query: this.generateDeleteQuery(removeLocals), + webId: 'system' + }); + // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message + this.cleanResourcesCache(ctx, removeLocals); + } + + if (addLocals.length > 0) { + await ctx.call('triplestore.update', { + // @ts-expect-error TS(2339): Property 'generateInsertQuery' does not exist on t... Remove this comment to see the full error message + query: this.generateInsertQuery(addLocals), + webId: 'system' + }); + // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message + this.cleanResourcesCache(ctx, addLocals); + } + + // Dealing with remotes + + // remote relationships are sent to relay actor of remote server + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.offerToRemoteServers) { + for (const triple of addRemotes) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: true + }); + } + for (const triple of removeRemotes) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: false + }); + } + } + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'triplesAdded' does not exist on type 'Op... Remove this comment to see the full error message + const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; + + // If the patch is done following a remote inference offer + if (skipInferenceCheck) return; + + // @ts-expect-error TS(2339): Property 'generateInverseTriples' does not exist o... Remove this comment to see the full error message + const triplesToAdd = this.generateInverseTriples(triplesAdded); + // @ts-expect-error TS(2339): Property 'generateInverseTriples' does not exist o... Remove this comment to see the full error message + const triplesToRemove = this.generateInverseTriples(triplesRemoved); + + // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message + let [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); + // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message + const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); + + // Dealing with locals first + + // Avoid adding inverse link to non-existent resources + // @ts-expect-error TS(2339): Property 'filterMissingResources' does not exist o... Remove this comment to see the full error message + addLocals = await this.filterMissingResources(ctx, addLocals); + + if (removeLocals.length > 0) { + await ctx.call('triplestore.update', { + // @ts-expect-error TS(2339): Property 'generateDeleteQuery' does not exist on t... Remove this comment to see the full error message + query: this.generateDeleteQuery(removeLocals), + webId: 'system' + }); + // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message + this.cleanResourcesCache(ctx, removeLocals); + } + + if (addLocals.length > 0) { + await ctx.call('triplestore.update', { + // @ts-expect-error TS(2339): Property 'generateInsertQuery' does not exist on t... Remove this comment to see the full error message + query: this.generateInsertQuery(addLocals), + webId: 'system' + }); + // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message + this.cleanResourcesCache(ctx, addLocals); + } + + // Dealing with remotes + + // remote relationships are sent to relay actor of remote server + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.offerToRemoteServers) { + for (const triple of addRemotes) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: true + }); + } + for (const triple of removeRemotes) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: false + }); + } + } + } + }), + + 'ontologies.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'owl' does not exist on type 'Optionalize... Remove this comment to see the full error message + const { owl } = ctx.params; + if (owl) { + // @ts-expect-error TS(2339): Property 'findInverseRelations' does not exist on ... Remove this comment to see the full error message + const result = await this.findInverseRelations(owl); + // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message + this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${owl}`); + // @ts-expect-error TS(2339): Property 'inverseRelations' does not exist on type... Remove this comment to see the full error message + this.inverseRelations = { ...this.inverseRelations, ...result }; + } + } + }) + } +} satisfies ServiceSchema; + +export default InferenceSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [InferenceSchema.name]: typeof InferenceSchema; + } + } +} diff --git a/src/middleware/packages/inference/subservices/remote.js b/src/middleware/packages/inference/subservices/remote.ts similarity index 82% rename from src/middleware/packages/inference/subservices/remote.js rename to src/middleware/packages/inference/subservices/remote.ts index 1a6f26c1b..e1a08b78f 100644 --- a/src/middleware/packages/inference/subservices/remote.js +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -1,12 +1,13 @@ -const fetch = require('node-fetch'); -const N3 = require('n3'); -const { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } = require('@semapps/activitypub'); +import fetch from 'node-fetch'; +import N3 from 'n3'; +import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } from '@semapps/activitypub'; +import { ServiceSchema, defineAction } from 'moleculer'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; -module.exports = { - name: 'inference.remote', +const InferenceRemoteSchema = { + name: 'inference.remote' as const, mixins: [ActivitiesHandlerMixin], settings: { baseUrl: null, @@ -18,7 +19,7 @@ module.exports = { this.relayActor = await this.broker.call('activitypub.relay.getActor'); }, actions: { - offerInference: { + offerInference: defineAction({ visibility: 'public', params: { subject: { type: 'string', optional: false }, @@ -79,17 +80,18 @@ module.exports = { } } catch (e) { this.logger.warn( + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. `Error while connecting to remove server for offering inverse relationship: ${e.message}` ); } } } } - } + }) }, activities: { offerInference: { - async match(activity, fetcher) { + async match(activity: any, fetcher: any) { let { match, dereferencedActivity } = await matchActivity( { type: ACTIVITY_TYPES.OFFER, @@ -122,11 +124,13 @@ module.exports = { return { match, dereferencedActivity }; }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.acceptFromRemoteServers && recipientUri === this.relayActor.id) { const relationship = activity.object.object; if (relationship.subject && relationship.relationship && relationship.object) { if (await ctx.call('ldp.remote.isRemote', { resourceUri: relationship.subject })) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match(... Remove this comment to see the full error message this.logger.warn('Attempt at offering an inverse relationship on a remote resource. Aborting...'); return; } @@ -157,6 +161,7 @@ module.exports = { webId: 'system' }); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ match(... Remove this comment to see the full error message if (this.broker.cacher) { await ctx.call('ldp.cache.invalidateResource', { resourceUri: relationship.subject }); } @@ -165,4 +170,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default InferenceRemoteSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [InferenceRemoteSchema.name]: typeof InferenceRemoteSchema; + } + } +} diff --git a/src/middleware/packages/inference/tsconfig.json b/src/middleware/packages/inference/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/inference/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/jsonld/index.js b/src/middleware/packages/jsonld/index.js deleted file mode 100644 index 1e1622987..000000000 --- a/src/middleware/packages/jsonld/index.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - JsonLdService: require('./service'), - JsonLdApiService: require('./services/api'), - JsonLdContextService: require('./services/context'), - JsonLdDocumentLoaderService: require('./services/document-loader'), - JsonLdParserService: require('./services/parser'), - uriSchemes: require('./utils/uriSchemes'), - isRegisteredURI: require('./utils/utils').isRegisteredURI -}; diff --git a/src/middleware/packages/jsonld/index.ts b/src/middleware/packages/jsonld/index.ts new file mode 100644 index 000000000..9b1d31080 --- /dev/null +++ b/src/middleware/packages/jsonld/index.ts @@ -0,0 +1,16 @@ +import JsonLdService from './service.ts'; +import JsonLdApiService from './services/api/index.ts'; +import JsonLdContextService from './services/context/index.ts'; +import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; +import JsonLdParserService from './services/parser/index.ts'; +import uriSchemes from './utils/uriSchemes.ts'; + +export { + JsonLdService, + JsonLdApiService, + JsonLdContextService, + JsonLdDocumentLoaderService, + JsonLdParserService, + uriSchemes +}; +export const { isRegisteredURI } = require('./utils/utils'); diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index 6befbda5b..b8a611e7b 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -18,10 +18,16 @@ "devDependencies": { "@types/jsonld": "1.5.15" }, + "peerDependencies": { + "moleculer": "^0.14.35" + }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" - } + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts" } diff --git a/src/middleware/packages/jsonld/service.js b/src/middleware/packages/jsonld/service.ts similarity index 52% rename from src/middleware/packages/jsonld/service.js rename to src/middleware/packages/jsonld/service.ts index 6b3c7f27d..186283577 100644 --- a/src/middleware/packages/jsonld/service.js +++ b/src/middleware/packages/jsonld/service.ts @@ -1,11 +1,12 @@ -const urlJoin = require('url-join'); -const JsonLdApiService = require('./services/api'); -const JsonLdContextService = require('./services/context'); -const JsonLdDocumentLoaderService = require('./services/document-loader'); -const JsonLdParserService = require('./services/parser'); - -module.exports = { - name: 'jsonld', +import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; +import JsonLdApiService from './services/api/index.ts'; +import JsonLdContextService from './services/context/index.ts'; +import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; +import JsonLdParserService from './services/parser/index.ts'; + +const JsonldSchema = { + name: 'jsonld' as const, settings: { baseUri: null, localContextPath: '.well-known/context.jsonld', @@ -28,6 +29,7 @@ module.exports = { localContextUri = urlJoin(baseUri, localContextPath); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.docume... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdDocumentLoaderService], settings: { @@ -36,6 +38,7 @@ module.exports = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.contex... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdContextService], settings: { @@ -43,10 +46,12 @@ module.exports = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.parser... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdParserService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.api"; ... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdApiService], settings: { @@ -54,4 +59,14 @@ module.exports = { } }); } -}; +} satisfies ServiceSchema; + +export default JsonldSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldSchema.name]: typeof JsonldSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/services/api/index.js b/src/middleware/packages/jsonld/services/api/index.js deleted file mode 100644 index 408f9a0ed..000000000 --- a/src/middleware/packages/jsonld/services/api/index.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - name: 'jsonld.api', - settings: { - localContextPath: null - }, - dependencies: ['api'], - async started() { - await this.broker.call('api.addRoute', { - route: { - path: this.settings.localContextPath, - name: `local-jsonld-context`, - bodyParsers: { - json: true - }, - aliases: { - 'GET /': 'jsonld.api.getContext' - } - } - }); - }, - actions: { - async getContext(ctx) { - ctx.meta.$responseType = 'application/ld+json'; - return await ctx.call('jsonld.context.getLocal'); - } - } -}; diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts new file mode 100644 index 000000000..aff285235 --- /dev/null +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -0,0 +1,42 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + +const JsonldApiSchema = { + name: 'jsonld.api' as const, + settings: { + localContextPath: null + }, + dependencies: ['api'], + async started() { + await this.broker.call('api.addRoute', { + route: { + path: this.settings.localContextPath, + name: `local-jsonld-context`, + bodyParsers: { + json: true + }, + aliases: { + 'GET /': 'jsonld.api.getContext' + } + } + }); + }, + actions: { + getContext: defineAction({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message + ctx.meta.$responseType = 'application/ld+json'; + return await ctx.call('jsonld.context.getLocal'); + } + }) + } +} satisfies ServiceSchema; + +export default JsonldApiSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldApiSchema.name]: typeof JsonldApiSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/services/context/actions/get.js b/src/middleware/packages/jsonld/services/context/actions/get.ts similarity index 83% rename from src/middleware/packages/jsonld/services/context/actions/get.js rename to src/middleware/packages/jsonld/services/context/actions/get.ts index f77a85497..e83fde630 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.js +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -1,8 +1,10 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', cache: true, async handler(ctx) { - let context = []; + let context: any = []; const ontologies = await ctx.call('ontologies.list'); @@ -21,4 +23,6 @@ module.exports = { return context; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.js b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts similarity index 61% rename from src/middleware/packages/jsonld/services/context/actions/getLocal.js rename to src/middleware/packages/jsonld/services/context/actions/getLocal.ts index ecce05e97..8c4627ba3 100644 --- a/src/middleware/packages/jsonld/services/context/actions/getLocal.js +++ b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts @@ -1,13 +1,15 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', cache: true, async handler(ctx) { - let context = []; + let context: any = []; let ontologies = await ctx.call('ontologies.list'); // Do not include ontologies which want to preserve their context URI - ontologies = ontologies.filter(ont => ont.preserveContextUri !== true); + ontologies = ontologies.filter((ont: any) => ont.preserveContextUri !== true); for (const ontology of ontologies) { if (ontology.jsonldContext) { @@ -15,7 +17,7 @@ module.exports = { } } - const prefixes = Object.fromEntries(ontologies.map(ont => [ont.prefix, ont.namespace])); + const prefixes = Object.fromEntries(ontologies.map((ont: any) => [ont.prefix, ont.namespace])); context = await ctx.call('jsonld.context.parse', { context: [...context, prefixes] @@ -25,4 +27,6 @@ module.exports = { '@context': context }; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.js b/src/middleware/packages/jsonld/services/context/actions/merge.ts similarity index 70% rename from src/middleware/packages/jsonld/services/context/actions/merge.js rename to src/middleware/packages/jsonld/services/context/actions/merge.ts index 854015466..30a921be2 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.js +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -1,15 +1,18 @@ -const { isURL, isObject, mergeObjectInArray } = require('../../../utils/utils'); +import { defineAction } from 'moleculer'; +import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { a: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, b: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } @@ -48,4 +51,6 @@ module.exports = { throw new Error('Could not merge JSON-LD contexts'); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.js b/src/middleware/packages/jsonld/services/context/actions/parse.js deleted file mode 100644 index 474fd6611..000000000 --- a/src/middleware/packages/jsonld/services/context/actions/parse.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - visibility: 'public', - params: { - context: { - type: 'multi', - rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }] - }, - options: { type: 'object', optional: true } - }, - async handler(ctx) { - const { context, options } = ctx.params; - const { contextRaw } = await this.contextParser.parse(context, options); - return contextRaw; - } -}; diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts new file mode 100644 index 000000000..bb68d1598 --- /dev/null +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -0,0 +1,21 @@ +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ + visibility: 'public', + params: { + context: { + type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message + rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }] + }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message + options: { type: 'object', optional: true } + }, + async handler(ctx) { + const { context, options } = ctx.params; + const { contextRaw } = await this.contextParser.parse(context, options); + return contextRaw; + } +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.js b/src/middleware/packages/jsonld/services/context/actions/validate.ts similarity index 57% rename from src/middleware/packages/jsonld/services/context/actions/validate.js rename to src/middleware/packages/jsonld/services/context/actions/validate.ts index d860889b1..9b649d021 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.js +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -1,8 +1,11 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { context: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }] } }, @@ -12,8 +15,11 @@ module.exports = { await this.contextParser.parse(context); return true; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Could not parse context. Error: ${e.message}`); return false; } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/index.js b/src/middleware/packages/jsonld/services/context/index.ts similarity index 55% rename from src/middleware/packages/jsonld/services/context/index.js rename to src/middleware/packages/jsonld/services/context/index.ts index d3365f672..7ceff99e0 100644 --- a/src/middleware/packages/jsonld/services/context/index.js +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -1,12 +1,13 @@ -const { ContextParser } = require('jsonld-context-parser'); -const getAction = require('./actions/get'); -const getLocalAction = require('./actions/getLocal'); -const mergeAction = require('./actions/merge'); -const parseAction = require('./actions/parse'); -const validateAction = require('./actions/validate'); +import { ContextParser } from 'jsonld-context-parser'; +import { ServiceSchema, defineAction } from 'moleculer'; +import getAction from './actions/get.ts'; +import getLocalAction from './actions/getLocal.ts'; +import mergeAction from './actions/merge.ts'; +import parseAction from './actions/parse.ts'; +import validateAction from './actions/validate.ts'; -module.exports = { - name: 'jsonld.context', +const JsonldContextSchema = { + name: 'jsonld.context' as const, settings: { localContextUri: null }, @@ -35,4 +36,14 @@ module.exports = { parse: parseAction, validate: validateAction } -}; +} satisfies ServiceSchema; + +export default JsonldContextSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldContextSchema.name]: typeof JsonldContextSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/services/document-loader/index.js b/src/middleware/packages/jsonld/services/document-loader/index.js deleted file mode 100644 index a3b20c9f4..000000000 --- a/src/middleware/packages/jsonld/services/document-loader/index.js +++ /dev/null @@ -1,83 +0,0 @@ -const jsonld = require('jsonld'); -const fsPromises = require('fs').promises; -const LRU = require('lru-cache'); - -/** Use document loader depending on node / bun runtime. */ -const defaultDocumentLoader = !process.versions.bun - ? jsonld.documentLoaders.node() - : /** Document loader using the modern fetch API. */ - async (url, options) => { - const fetchResult = await fetch(url, { - headers: { - accept: 'application/json, application/ld+json, application/activity+json', - ...options?.headers - }, - redirect: options?.maxRedirects <= 0 ? 'error' : 'follow', - follow: options?.maxRedirects - }); - - const linkHeaderVal = fetchResult.headers.get('link'); - const parsedLinks = !(linkHeaderVal || linkHeaderVal === '') ? {} : jsonld.util.parseLinkHeader(linkHeaderVal); - const contextUrl = parsedLinks['http://www.w3.org/ns/json-ld#context'] || null; - - const document = await fetchResult.json(); - - return { contextUrl, documentUrl: url, document }; - }; - -const cache = new LRU({ max: 500 }); - -module.exports = { - name: 'jsonld.document-loader', - settings: { - cachedContextFiles: [], - localContextUri: null - }, - async started() { - for (const contextFile of this.settings.cachedContextFiles) { - const contextFileContent = await fsPromises.readFile(contextFile.file); - const contextJson = JSON.parse(contextFileContent); - cache.set(contextFile.uri, { - contextUrl: null, - documentUrl: contextFile.uri, - document: contextJson - }); - } - }, - actions: { - async loadWithCache(ctx) { - const { url, options } = ctx.params; - if (url === this.settings.localContextUri) { - // For local context, get it directly as it is frequently updated - // We will use the Redis cache to avoid compiling it every time - return { - contextUrl: null, - documentUrl: url, - document: await ctx.call('jsonld.context.getLocal') - }; - } - if (cache.has(url) && !options?.noCache) { - return cache.get(url); - } - const context = await defaultDocumentLoader(url, options); - if (typeof context.document === 'string') { - context.document = JSON.parse(context.document); - } - cache.set(url, context); - return context; - }, - getCache(ctx) { - const { uri } = ctx.params; - const context = cache.get(uri); - return context?.document; - }, - setCache(ctx) { - const { uri, json } = ctx.params; - cache.set(uri, { - contextUrl: null, - documentUrl: uri, - document: json - }); - } - } -}; diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts new file mode 100644 index 000000000..31d562317 --- /dev/null +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -0,0 +1,109 @@ +import jsonld from 'jsonld'; +import fsModule from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'lru-... Remove this comment to see the full error message +import LRU from 'lru-cache'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const fsPromises = fsModule.promises; + +/** Use document loader depending on node / bun runtime. */ +const defaultDocumentLoader = !process.versions.bun + ? // @ts-expect-error TS(2339): Property 'documentLoaders' does not exist on type ... Remove this comment to see the full error message + jsonld.documentLoaders.node() + : /** Document loader using the modern fetch API. */ + async (url: any, options: any) => { + const fetchResult = await fetch(url, { + headers: { + accept: 'application/json, application/ld+json, application/activity+json', + ...options?.headers + }, + redirect: options?.maxRedirects <= 0 ? 'error' : 'follow', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message + follow: options?.maxRedirects + }); + + const linkHeaderVal = fetchResult.headers.get('link'); + // @ts-expect-error TS(2339): Property 'util' does not exist on type 'typeof imp... Remove this comment to see the full error message + const parsedLinks = !(linkHeaderVal || linkHeaderVal === '') ? {} : jsonld.util.parseLinkHeader(linkHeaderVal); + const contextUrl = parsedLinks['http://www.w3.org/ns/json-ld#context'] || null; + + const document = await fetchResult.json(); + + return { contextUrl, documentUrl: url, document }; + }; + +const cache = new LRU({ max: 500 }); + +const JsonldDocumentLoaderSchema = { + name: 'jsonld.document-loader' as const, + settings: { + cachedContextFiles: [], + localContextUri: null + }, + async started() { + for (const contextFile of this.settings.cachedContextFiles) { + const contextFileContent = await fsPromises.readFile(contextFile.file); + // @ts-expect-error TS(2345): Argument of type 'Buffer' is not ... Remove this comment to see the full error message + const contextJson = JSON.parse(contextFileContent); + cache.set(contextFile.uri, { + contextUrl: null, + documentUrl: contextFile.uri, + document: contextJson + }); + } + }, + actions: { + loadWithCache: defineAction({ + async handler(ctx) { + const { url, options } = ctx.params; + if (url === this.settings.localContextUri) { + // For local context, get it directly as it is frequently updated + // We will use the Redis cache to avoid compiling it every time + return { + contextUrl: null, + documentUrl: url, + document: await ctx.call('jsonld.context.getLocal') + }; + } + if (cache.has(url) && !options?.noCache) { + return cache.get(url); + } + const context = await defaultDocumentLoader(url, options); + if (typeof context.document === 'string') { + context.document = JSON.parse(context.document); + } + cache.set(url, context); + return context; + } + }), + + getCache: defineAction({ + handler(ctx) { + const { uri } = ctx.params; + const context = cache.get(uri); + return context?.document; + } + }), + + setCache: defineAction({ + handler(ctx) { + const { uri, json } = ctx.params; + cache.set(uri, { + contextUrl: null, + documentUrl: uri, + document: json + }); + } + }) + } +} satisfies ServiceSchema; + +export default JsonldDocumentLoaderSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldDocumentLoaderSchema.name]: typeof JsonldDocumentLoaderSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/services/parser/index.js b/src/middleware/packages/jsonld/services/parser/index.js deleted file mode 100644 index f8ba5082b..000000000 --- a/src/middleware/packages/jsonld/services/parser/index.js +++ /dev/null @@ -1,183 +0,0 @@ -const jsonld = require('jsonld'); -const N3 = require('n3'); -const { JsonLdParser } = require('jsonld-streaming-parser'); -const { JsonLdSerializer } = require('jsonld-streaming-serializer'); -const streamifyString = require('streamify-string'); -const rdfParser = require('rdf-parse').default; -const { arrayOf, isURI } = require('../../utils/utils'); - -module.exports = { - name: 'jsonld.parser', - dependencies: ['jsonld.document-loader'], - async started() { - this.jsonld = jsonld; - this.jsonld.documentLoader = (url, options) => - this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); - - // Options: https://github.com/rubensworks/jsonld-streaming-parser.js?tab=readme-ov-file#configuration - this.jsonLdParser = new JsonLdParser({ - documentLoader: { - load: url => this.broker.call('jsonld.document-loader.loadWithCache', { url }).then(context => context.document) - } - }); - }, - actions: { - compact(ctx) { - const { input, context, options } = ctx.params; - return this.jsonld.compact(input, context, options); - }, - expand(ctx) { - const { input, options } = ctx.params; - return this.jsonld.expand(input, options); - }, - flatten(ctx) { - const { input, context, options } = ctx.params; - return this.jsonld.flatten(input, context, options); - }, - frame(ctx) { - const { input, frame, options } = ctx.params; - return this.jsonld.frame(input, frame, options); - }, - normalize(ctx) { - const { input, options } = ctx.params; - return this.jsonld.normalize(input, options); - }, - async fromRDF(ctx) { - const { input, options = {} } = ctx.params; - const { format } = options; - - if (!format || format === 'application/n-quads') { - return await this.jsonld.fromRDF(input, options); - } else { - const quads = await this.rdfToQuads(input, format); - - const context = await ctx.call('jsonld.context.get'); - - // Options: https://github.com/rubensworks/jsonld-streaming-serializer.js?tab=readme-ov-file#configuration - const jsonLdSerializer = new JsonLdSerializer(); - quads.forEach(quad => jsonLdSerializer.write(quad)); - jsonLdSerializer.end(); - - const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); - - return await this.actions.frame( - { - input: jsonLd, - frame: { '@context': context } - // Force results to be in a @graph, even if we have a single result - // options: { omitGraph: false } - }, - { parentCtx: ctx } - ); - } - }, - async toRDF(ctx) { - const { input, options = {} } = ctx.params; - const { format } = options; - - if (!format || format === 'application/n-quads') { - return await this.jsonld.toRDF(input, options); - } else { - // Since JSONLD.js does not support output other than N-Quads, use N3 for that - const quads = await this.actions.toQuads({ input }, { parentCtx: ctx }); - const prefixes = await ctx.call('ontologies.getPrefixes'); - return new Promise((resolve, reject) => { - const writer = new N3.Writer({ format, prefixes }); - writer.addQuads(quads.reverse()); // We reverse quads in order to have the type first - writer.end((error, result) => { - if (error) { - reject(error); - } else { - resolve(result); - } - }); - }); - } - }, - // Return quads in RDF.JS data model - // (this.jsonld.toRDF does not use the same model) - // https://github.com/rdfjs/data-model-spec - toQuads(ctx) { - const { input } = ctx.params; - return new Promise((resolve, reject) => { - const jsonString = typeof input === 'object' ? JSON.stringify(input) : input; - const textStream = streamifyString(jsonString); - const res = []; - this.jsonLdParser - .import(textStream) - .on('data', quad => res.push(quad)) - .on('error', error => reject(error)) - .on('end', () => resolve(res)); - }); - }, - // TODO move to ontologies service ?? - async expandPredicate(ctx) { - let { predicate, context } = ctx.params; - - if (!predicate) throw new Error('No predicate param provided to expandPredicate action'); - - if (isURI(predicate)) return predicate; - - // If no context is provided, use default context - if (!context) context = await ctx.call('jsonld.context.get'); - - const result = await this.actions.expand({ input: { '@context': context, [predicate]: '' } }, { parentCtx: ctx }); - - const expandedPredicate = Object.keys(result[0])?.[0]; - - if (!isURI(expandedPredicate)) { - throw new Error(` - Could not expand predicate (${expandedPredicate}). - Is an ontology missing or not registered yet on the local context ? - `); - } - - return expandedPredicate; - }, - async expandTypes(ctx) { - let { types, context } = ctx.params; - - if (!types) throw new Error('No types param provided to expandTypes action'); - - // If types are already full URIs, return them immediately - if (arrayOf(types).every(type => isURI(type))) return arrayOf(types); - - // If no context is provided, use default context - if (!context) context = await ctx.call('jsonld.context.get'); - - const result = await this.actions.expand({ input: { '@context': context, '@type': types } }, { parentCtx: ctx }); - - const expandedTypes = arrayOf(result?.[0]?.['@type']); - - if (!expandedTypes.every(type => isURI(type))) { - throw new Error(` - Could not expand all types (${expandedTypes.join(', ')}). - Is an ontology missing or not registered yet on the local context ? - `); - } - - return expandedTypes; - } - }, - methods: { - streamToString(stream) { - let res = ''; - return new Promise((resolve, reject) => { - stream.on('data', chunk => (res += chunk)); - stream.on('error', err => reject(err)); - stream.on('end', () => resolve(res)); - }); - }, - rdfToQuads(input, format) { - return new Promise((resolve, reject) => { - const textStream = streamifyString(input); - const res = []; - rdfParser - .parse(textStream, { contentType: format }) - .on('data', quad => res.push(quad)) - .on('error', error => reject(error)) - .on('end', () => resolve(res)); - }); - } - } -}; diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts new file mode 100644 index 000000000..97ee831ce --- /dev/null +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -0,0 +1,229 @@ +import jsonld from 'jsonld'; +import N3 from 'n3'; +import { JsonLdParser } from 'jsonld-streaming-parser'; +import { JsonLdSerializer } from 'jsonld-streaming-serializer'; +import streamifyString from 'streamify-string'; +import rdfParser from 'rdf-parse'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { arrayOf, isURI } from '../../utils/utils.ts'; + +const JsonldParserSchema = { + name: 'jsonld.parser' as const, + dependencies: ['jsonld.document-loader'], + async started() { + this.jsonld = jsonld; + this.jsonld.documentLoader = (url: any, options: any) => + this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); + + // Options: https://github.com/rubensworks/jsonld-streaming-parser.js?tab=readme-ov-file#configuration + this.jsonLdParser = new JsonLdParser({ + documentLoader: { + load: url => this.broker.call('jsonld.document-loader.loadWithCache', { url }).then(context => context.document) + } + }); + }, + actions: { + compact: defineAction({ + handler(ctx) { + const { input, context, options } = ctx.params; + return this.jsonld.compact(input, context, options); + } + }), + + expand: defineAction({ + handler(ctx) { + const { input, options } = ctx.params; + return this.jsonld.expand(input, options); + } + }), + + flatten: defineAction({ + handler(ctx) { + const { input, context, options } = ctx.params; + return this.jsonld.flatten(input, context, options); + } + }), + + frame: defineAction({ + handler(ctx) { + const { input, frame, options } = ctx.params; + return this.jsonld.frame(input, frame, options); + } + }), + + normalize: defineAction({ + handler(ctx) { + const { input, options } = ctx.params; + return this.jsonld.normalize(input, options); + } + }), + + fromRDF: defineAction({ + async handler(ctx) { + const { input, options = {} } = ctx.params; + const { format } = options; + + if (!format || format === 'application/n-quads') { + return await this.jsonld.fromRDF(input, options); + } else { + const quads = await this.rdfToQuads(input, format); + + const context = await ctx.call('jsonld.context.get'); + + // Options: https://github.com/rubensworks/jsonld-streaming-serializer.js?tab=readme-ov-file#configuration + const jsonLdSerializer = new JsonLdSerializer(); + quads.forEach((quad: any) => jsonLdSerializer.write(quad)); + jsonLdSerializer.end(); + + const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); + + return await this.actions.frame( + { + input: jsonLd, + frame: { '@context': context } + // Force results to be in a @graph, even if we have a single result + // options: { omitGraph: false } + }, + { parentCtx: ctx } + ); + } + } + }), + + toRDF: defineAction({ + async handler(ctx) { + const { input, options = {} } = ctx.params; + const { format } = options; + + if (!format || format === 'application/n-quads') { + return await this.jsonld.toRDF(input, options); + } else { + // Since JSONLD.js does not support output other than N-Quads, use N3 for that + const quads = await this.actions.toQuads({ input }, { parentCtx: ctx }); + const prefixes = await ctx.call('ontologies.getPrefixes'); + return new Promise((resolve, reject) => { + const writer = new N3.Writer({ format, prefixes }); + writer.addQuads(quads.reverse()); // We reverse quads in order to have the type first + writer.end((error, result) => { + if (error) { + reject(error); + } else { + resolve(result); + } + }); + }); + } + } + }), + + toQuads: defineAction({ + // Return quads in RDF.JS data model + // (this.jsonld.toRDF does not use the same model) + // https://github.com/rdfjs/data-model-spec + handler(ctx) { + const { input } = ctx.params; + return new Promise((resolve, reject) => { + const jsonString = typeof input === 'object' ? JSON.stringify(input) : input; + const textStream = streamifyString(jsonString); + const res: any = []; + this.jsonLdParser + .import(textStream) + .on('data', (quad: any) => res.push(quad)) + .on('error', (error: any) => reject(error)) + .on('end', () => resolve(res)); + }); + } + }), + + expandPredicate: defineAction({ + // TODO move to ontologies service ?? + async handler(ctx) { + let { predicate, context } = ctx.params; + + if (!predicate) throw new Error('No predicate param provided to expandPredicate action'); + + if (isURI(predicate)) return predicate; + + // If no context is provided, use default context + if (!context) context = await ctx.call('jsonld.context.get'); + + const result = await this.actions.expand( + { input: { '@context': context, [predicate]: '' } }, + { parentCtx: ctx } + ); + + const expandedPredicate = Object.keys(result[0])?.[0]; + + if (!isURI(expandedPredicate)) { + throw new Error(` + Could not expand predicate (${expandedPredicate}). + Is an ontology missing or not registered yet on the local context ? + `); + } + + return expandedPredicate; + } + }), + + expandTypes: defineAction({ + async handler(ctx) { + let { types, context } = ctx.params; + + if (!types) throw new Error('No types param provided to expandTypes action'); + + // If types are already full URIs, return them immediately + if (arrayOf(types).every(type => isURI(type))) return arrayOf(types); + + // If no context is provided, use default context + if (!context) context = await ctx.call('jsonld.context.get'); + + const result = await this.actions.expand( + { input: { '@context': context, '@type': types } }, + { parentCtx: ctx } + ); + + const expandedTypes = arrayOf(result?.[0]?.['@type']); + + if (!expandedTypes.every(type => isURI(type))) { + throw new Error(` + Could not expand all types (${expandedTypes.join(', ')}). + Is an ontology missing or not registered yet on the local context ? + `); + } + + return expandedTypes; + } + }) + }, + methods: { + streamToString(stream) { + let res = ''; + return new Promise((resolve, reject) => { + stream.on('data', (chunk: any) => (res += chunk)); + stream.on('error', (err: any) => reject(err)); + stream.on('end', () => resolve(res)); + }); + }, + rdfToQuads(input, format) { + return new Promise((resolve, reject) => { + const textStream = streamifyString(input); + const res: any = []; + rdfParser + .parse(textStream, { contentType: format }) + .on('data', quad => res.push(quad)) + .on('error', error => reject(error)) + .on('end', () => resolve(res)); + }); + } + } +} satisfies ServiceSchema; + +export default JsonldParserSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldParserSchema.name]: typeof JsonldParserSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/tsconfig.json b/src/middleware/packages/jsonld/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/jsonld/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/jsonld/utils/uriSchemes.js b/src/middleware/packages/jsonld/utils/uriSchemes.ts similarity index 99% rename from src/middleware/packages/jsonld/utils/uriSchemes.js rename to src/middleware/packages/jsonld/utils/uriSchemes.ts index 1ff0ca906..8d497cc52 100644 --- a/src/middleware/packages/jsonld/utils/uriSchemes.js +++ b/src/middleware/packages/jsonld/utils/uriSchemes.ts @@ -1,4 +1,4 @@ -module.exports = [ +export default [ // Commonly used 'http:', 'https:', diff --git a/src/middleware/packages/jsonld/utils/utils.js b/src/middleware/packages/jsonld/utils/utils.ts similarity index 63% rename from src/middleware/packages/jsonld/utils/utils.js rename to src/middleware/packages/jsonld/utils/utils.ts index 0999e49db..aa9527454 100644 --- a/src/middleware/packages/jsonld/utils/utils.js +++ b/src/middleware/packages/jsonld/utils/utils.ts @@ -1,19 +1,21 @@ -const uriSchemes = require('./uriSchemes'); +import uriSchemes from './uriSchemes.ts'; + +const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); -const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); /** If the value starts with `http` or `urn:` */ -const isURI = value => +const isURI = (value: any) => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); + /** If the value starts with a IANA registered or common URI scheme */ -const isRegisteredURI = value => +const isRegisteredURI = (value: any) => (typeof value === 'string' || value instanceof String) && uriSchemes.some(scheme => value.startsWith(scheme)); -const isObject = value => typeof value === 'object' && !Array.isArray(value) && value !== null; +const isObject = (value: any) => typeof value === 'object' && !Array.isArray(value) && value !== null; -const mergeObjectInArray = (obj, arr) => { +const mergeObjectInArray = (obj: any, arr: any) => { let result; // Check if there is already an object in the array - const objectIndex = arr.findIndex(item => isObject(item)); + const objectIndex = arr.findIndex((item: any) => isObject(item)); if (objectIndex === -1) { // No object in the array, append the object result = [...arr, obj]; @@ -25,7 +27,7 @@ const mergeObjectInArray = (obj, arr) => { return result.sort((a, b) => (isURL(a) ? (isURL(b) ? 0 : -1) : isURL(b) ? 1 : 0)); }; -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -38,11 +40,4 @@ const arrayOf = value => { return [value]; }; -module.exports = { - isURL, - isURI, - isRegisteredURI, - isObject, - mergeObjectInArray, - arrayOf -}; +export { isURL, isURI, isRegisteredURI, isObject, mergeObjectInArray, arrayOf }; diff --git a/src/middleware/packages/ldp/adapter.js b/src/middleware/packages/ldp/adapter.js deleted file mode 100644 index 461c9e9dd..000000000 --- a/src/middleware/packages/ldp/adapter.js +++ /dev/null @@ -1,209 +0,0 @@ -const urlJoin = require('url-join'); -const { ServiceSchemaError } = require('moleculer').Errors; - -class LdpAdapter { - constructor({ resourceService = 'ldp.resource', containerService = 'ldp.container' } = {}) { - this.resourceService = resourceService; - this.containerService = containerService; - } - - init(broker, service) { - this.broker = broker; - this.service = service; - } - - async connect() { - if (!this.service.schema.settings.containerUri) { - throw new ServiceSchemaError( - `Missing \`containerUri\` definition in settings of service ${this.service.schema.name}` - ); - } - - await this.broker.waitForServices([this.resourceService, this.containerService], 120000); - - const { containerUri } = this.service.schema.settings; - const exists = await this.broker.call(`${this.containerService}.exist`, { containerUri, webId: 'system' }); - - if (!exists) { - console.log(`Container ${containerUri} doesn't exist, creating it...`); - await this.broker.call(`${this.containerService}.create`, { containerUri }); - } - } - - disconnect() { - return Promise.resolve(); - } - - /** - * Find all entities by filters. - * - * Available filter props: - * - limit - * - offset - * - sort - * - search - * - searchFields - * - query - */ - find(filters) { - return this.broker.call(`${this.containerService}.get`, { - containerUri: this.service.schema.settings.containerUri, - filters: filters.query, - jsonContext: this.service.schema.settings.context - }); - } - - /** - * Find an entity by query - */ - findOne(query) { - throw new Error('Method not implemented'); - } - - /** - * Find an entity by ID. - */ - findById(_id) { - if (!_id.startsWith('http')) { - _id = urlJoin(this.service.schema.settings.containerUri, _id); - } - return this.broker.call(`${this.resourceService}.get`, { - resourceUri: _id, - jsonContext: this.service.schema.settings.context - }); - } - - /** - * Find all entities by IDs - */ - findByIds(ids) { - return Promise.all(ids.map(id => this.findById(id))); - } - - /** - * Get count of filtered entities - * - * Available filter props: - * - search - * - searchFields - * - query - */ - count(filters = {}) { - return this.find(filters).then(result => result['ldp:contains'].length); - } - - /** - * Insert an entity - */ - insert(entity) { - const { slug, ...resource } = entity; - - return this.broker - .call(`${this.resourceService}.post`, { - containerUri: this.service.schema.settings.containerUri, - resource: { - '@context': this.service.schema.settings.context, - ...resource - }, - slug - }) - .then(resourceUri => { - this.broker.call(`${this.containerService}.attach`, { - containerUri: this.service.schema.settings.containerUri, - resourceUri - }); - - return this.findById(resourceUri); - }); - } - - /** - * Insert multiple entities - */ - insertMany(entities) { - throw new Error('Method not implemented'); - } - - /** - * Update many entities by `query` and `update` - */ - updateMany(query, update) { - throw new Error('Method not implemented'); - } - - /** - * Update an entity by ID - */ - updateById(_id, update) { - const { id, '@id': arobaseId, ...resource } = update.$set; - - // Check ID and transform it to URI if necessary - _id = _id || id || arobaseId; - if (!_id) throw new Error('An ID must be specified to update resources'); - if (!_id.startsWith('http')) _id = urlJoin(this.service.schema.settings.containerUri, _id); - - return this.broker - .call(`${this.resourceService}.put`, { - resource: { - '@context': this.service.schema.settings.context, - '@id': _id, - ...resource - } - }) - .then(resourceUri => this.findById(resourceUri)); - } - - /** - * Remove many entities which are matched by `query` - */ - removeMany(query) { - throw new Error('Method not implemented'); - } - - /** - * Remove an entity by ID - */ - removeById(_id) { - return this.broker - .call(`${this.resourceService}.delete`, { - resourceUri: _id - }) - .then(() => { - // We must return the number of deleted resource - // Otherwise the DB adapter returns an error - return 1; - }); - } - - /** - * Clear all entities from the container - */ - clear() { - return this.broker.call(`${this.containerService}.clear`, { - containerUri: this.service.schema.settings.containerUri - }); - } - - /** - * Convert DB entity to JSON object - */ - entityToObject(entity) { - return entity; - } - - /** - * Transforms 'idField' into MongoDB's '_id' - */ - beforeSaveTransformID(entity, idField) { - return entity; - } - - /** - * Transforms MongoDB's '_id' into user defined 'idField' - */ - afterRetrieveTransformID(entity, idField) { - return entity; - } -} - -module.exports = LdpAdapter; diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts new file mode 100644 index 000000000..3cb8c9e3b --- /dev/null +++ b/src/middleware/packages/ldp/adapter.ts @@ -0,0 +1,249 @@ +import urlJoin from 'url-join'; + +import { Errors } from 'moleculer'; + +const { ServiceSchemaError } = Errors; + +class LdpAdapter { + constructor({ resourceService = 'ldp.resource', containerService = 'ldp.container' } = {}) { + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message + this.resourceService = resourceService; + // @ts-expect-error TS(2339): Property 'containerService' does not exist on type... Remove this comment to see the full error message + this.containerService = containerService; + } + + init(broker: any, service: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + this.broker = broker; + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + this.service = service; + } + + async connect() { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + if (!this.service.schema.settings.containerUri) { + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + throw new ServiceSchemaError( + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + `Missing \`containerUri\` definition in settings of service ${this.service.schema.name}` + ); + } + + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + await this.broker.waitForServices([this.resourceService, this.containerService], 120000); + + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + const { containerUri } = this.service.schema.settings; + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + const exists = await this.broker.call(`${this.containerService}.exist`, { containerUri, webId: 'system' }); + + if (!exists) { + console.log(`Container ${containerUri} doesn't exist, creating it...`); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + await this.broker.call(`${this.containerService}.create`, { containerUri }); + } + } + + disconnect() { + return Promise.resolve(); + } + + /** + * Find all entities by filters. + * + * Available filter props: + * - limit + * - offset + * - sort + * - search + * - searchFields + * - query + */ + find(filters: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return this.broker.call(`${this.containerService}.get`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + containerUri: this.service.schema.settings.containerUri, + filters: filters.query, + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + jsonContext: this.service.schema.settings.context + }); + } + + /** + * Find an entity by query + */ + findOne(query: any) { + throw new Error('Method not implemented'); + } + + /** + * Find an entity by ID. + */ + findById(_id: any) { + if (!_id.startsWith('http')) { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + _id = urlJoin(this.service.schema.settings.containerUri, _id); + } + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return this.broker.call(`${this.resourceService}.get`, { + resourceUri: _id, + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + jsonContext: this.service.schema.settings.context + }); + } + + /** + * Find all entities by IDs + */ + findByIds(ids: any) { + return Promise.all(ids.map((id: any) => this.findById(id))); + } + + /** + * Get count of filtered entities + * + * Available filter props: + * - search + * - searchFields + * - query + */ + count(filters = {}) { + return this.find(filters).then((result: any) => result['ldp:contains'].length); + } + + /** + * Insert an entity + */ + insert(entity: any) { + const { slug, ...resource } = entity; + + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return ( + this.broker + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message + .call(`${this.resourceService}.post`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + containerUri: this.service.schema.settings.containerUri, + resource: { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + '@context': this.service.schema.settings.context, + ...resource + }, + slug + }) + .then((resourceUri: any) => { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + this.broker.call(`${this.containerService}.attach`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + containerUri: this.service.schema.settings.containerUri, + resourceUri + }); + + return this.findById(resourceUri); + }) + ); + } + + /** + * Insert multiple entities + */ + insertMany(entities: any) { + throw new Error('Method not implemented'); + } + + /** + * Update many entities by `query` and `update` + */ + updateMany(query: any, update: any) { + throw new Error('Method not implemented'); + } + + /** + * Update an entity by ID + */ + updateById(_id: any, update: any) { + const { id, '@id': arobaseId, ...resource } = update.$set; + + // Check ID and transform it to URI if necessary + _id = _id || id || arobaseId; + if (!_id) throw new Error('An ID must be specified to update resources'); + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + if (!_id.startsWith('http')) _id = urlJoin(this.service.schema.settings.containerUri, _id); + + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return ( + this.broker + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message + .call(`${this.resourceService}.put`, { + resource: { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + '@context': this.service.schema.settings.context, + '@id': _id, + ...resource + } + }) + .then((resourceUri: any) => this.findById(resourceUri)) + ); + } + + /** + * Remove many entities which are matched by `query` + */ + removeMany(query: any) { + throw new Error('Method not implemented'); + } + + /** + * Remove an entity by ID + */ + removeById(_id: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return ( + this.broker + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message + .call(`${this.resourceService}.delete`, { + resourceUri: _id + }) + .then(() => { + // We must return the number of deleted resource + // Otherwise the DB adapter returns an error + return 1; + }) + ); + } + + /** + * Clear all entities from the container + */ + clear() { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return this.broker.call(`${this.containerService}.clear`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + containerUri: this.service.schema.settings.containerUri + }); + } + + /** + * Convert DB entity to JSON object + */ + entityToObject(entity: any) { + return entity; + } + + /** + * Transforms 'idField' into MongoDB's '_id' + */ + beforeSaveTransformID(entity: any, idField: any) { + return entity; + } + + /** + * Transforms MongoDB's '_id' into user defined 'idField' + */ + afterRetrieveTransformID(entity: any, idField: any) { + return entity; + } +} + +export default LdpAdapter; diff --git a/src/middleware/packages/ldp/index.js b/src/middleware/packages/ldp/index.js deleted file mode 100644 index 86bfe137c..000000000 --- a/src/middleware/packages/ldp/index.js +++ /dev/null @@ -1,27 +0,0 @@ -const utils = require('./utils'); - -module.exports = { - LdpService: require('./service'), - // Sub-services - LdpCacheService: require('./services/cache'), - LdpContainerService: require('./services/container'), - LdpLinkHeaderService: require('./services/link-header'), - LdpRegistryService: require('./services/registry'), - LdpResourceService: require('./services/resource'), - PermissionsService: require('./services/permissions'), - // Mixins - ControlledContainerMixin: require('./mixins/controlled-container'), - DereferenceMixin: require('./mixins/dereference'), - PseudoIdMixin: require('./mixins/pseudo-id'), - ImageProcessorMixin: require('./mixins/image-processor'), - MimeTypesMixin: require('./mixins/mime-types'), - DocumentTaggerMixin: require('./mixins/document-tagger'), - DisassemblyMixin: require('./mixins/disassembly'), - SingleResourceContainerMixin: require('./mixins/single-resource-container'), - SpecialEndpointMixin: require('./mixins/special-endpoint'), - OrphanFilesDeletionMixin: require('./mixins/orphan-files-deletion'), - // Other - defaultContainerOptions: require('./services/registry/defaultOptions'), - LdpAdapter: require('./adapter'), - ...utils -}; diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts new file mode 100644 index 000000000..645dd7311 --- /dev/null +++ b/src/middleware/packages/ldp/index.ts @@ -0,0 +1,42 @@ +import LdpService from './service.ts'; +import LdpCacheService from './services/cache/index.ts'; +import LdpContainerService from './services/container/index.ts'; +import LdpLinkHeaderService from './services/link-header/index.ts'; +import LdpRegistryService from './services/registry/index.ts'; +import LdpResourceService from './services/resource/index.ts'; +import PermissionsService from './services/permissions/index.ts'; +import ControlledContainerMixin from './mixins/controlled-container.ts'; +import DereferenceMixin from './mixins/dereference.ts'; +import PseudoIdMixin from './mixins/pseudo-id.ts'; +import ImageProcessorMixin from './mixins/image-processor.ts'; +import MimeTypesMixin from './mixins/mime-types.ts'; +import DocumentTaggerMixin from './mixins/document-tagger.ts'; +import DisassemblyMixin from './mixins/disassembly.ts'; +import SingleResourceContainerMixin from './mixins/single-resource-container.ts'; +import SpecialEndpointMixin from './mixins/special-endpoint.ts'; +import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; +import defaultContainerOptions from './services/registry/defaultOptions.ts'; +import LdpAdapter from './adapter.ts'; + +export * from './utils.ts'; +export { + LdpService, + LdpCacheService, + LdpContainerService, + LdpLinkHeaderService, + LdpRegistryService, + LdpResourceService, + PermissionsService, + ControlledContainerMixin, + DereferenceMixin, + PseudoIdMixin, + ImageProcessorMixin, + MimeTypesMixin, + DocumentTaggerMixin, + DisassemblyMixin, + SingleResourceContainerMixin, + SpecialEndpointMixin, + OrphanFilesDeletionMixin, + defaultContainerOptions, + LdpAdapter +}; diff --git a/src/middleware/packages/ldp/mixins/controlled-container.js b/src/middleware/packages/ldp/mixins/controlled-container.js deleted file mode 100644 index 0b64b348e..000000000 --- a/src/middleware/packages/ldp/mixins/controlled-container.js +++ /dev/null @@ -1,129 +0,0 @@ -const { delay, getParentContainerUri } = require('../utils'); - -module.exports = { - settings: { - path: null, - acceptedTypes: null, - permissions: null, - newResourcesPermissions: null, - controlledActions: {}, - readOnly: false, - excludeFromMirror: false, - activateTombstones: true, - podsContainer: false, - podProvider: false, - typeIndex: undefined - }, - dependencies: ['ldp'], - async started() { - const { path, controlledActions, ...rest } = this.settings; - - const registration = await this.broker.call('ldp.registry.register', { - path, - name: this.name, - controlledActions: { - post: `${this.name}.post`, - list: `${this.name}.list`, - get: `${this.name}.get`, - getHeaderLinks: `${this.name}.getHeaderLinks`, - create: `${this.name}.create`, - patch: `${this.name}.patch`, - put: `${this.name}.put`, - delete: `${this.name}.delete`, - ...this.settings.controlledActions - }, - ...rest - }); - - // If no path was defined in the settings, set the automatically generated path (so that it can be used below) - if (!path) this.settings.path = registration.path; - }, - actions: { - async post(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - } - return await ctx.call('ldp.container.post', ctx.params); - }, - async list(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - } - return ctx.call('ldp.container.get', ctx.params); - }, - async attach(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - } - return ctx.call('ldp.container.attach', ctx.params); - }, - async detach(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - } - return ctx.call('ldp.container.detach', ctx.params); - }, - get(ctx) { - const containerParams = {}; - if (this.settings.accept) containerParams.accept = this.settings.accept; - return ctx.call('ldp.resource.get', { - ...containerParams, - ...ctx.params - }); - }, - getHeaderLinks(ctx) { - return []; - }, - create(ctx) { - return ctx.call('ldp.resource.create', ctx.params); - }, - patch(ctx) { - return ctx.call('ldp.resource.patch', ctx.params); - }, - put(ctx) { - return ctx.call('ldp.resource.put', ctx.params); - }, - delete(ctx) { - return ctx.call('ldp.resource.delete', ctx.params); - }, - exist(ctx) { - return ctx.call('ldp.resource.exist', ctx.params); - }, - getContainerUri(ctx) { - return ctx.call('ldp.registry.getUri', { path: this.settings.path, webId: ctx.params?.webId || ctx.meta?.webId }); - }, - async waitForContainerCreation(ctx) { - let { containerUri } = ctx.params; - let containerExist; - let containerAttached; - - if (!containerUri) { - containerUri = await this.actions.getContainerUri( - { webId: ctx.params.webId || ctx.meta.webId }, - { parentCtx: ctx } - ); - } - - do { - if (containerExist === false) await delay(1000); - containerExist = await ctx.call('ldp.container.exist', { containerUri }); - } while (!containerExist); - - const parentContainerUri = getParentContainerUri(containerUri); - const parentContainerExist = await ctx.call('ldp.container.exist', { containerUri: parentContainerUri }); - - // If a parent container exist, check that the child container has been attached - // Otherwise, it may fail - if (parentContainerExist) { - do { - if (containerAttached === false) await delay(1000); - containerAttached = await ctx.call('ldp.container.includes', { - containerUri: parentContainerUri, - resourceUri: containerUri, - webId: 'system' - }); - } while (!containerAttached); - } - } - } -}; diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts new file mode 100644 index 000000000..250ee29a6 --- /dev/null +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -0,0 +1,176 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import { delay, getParentContainerUri } from '../utils.ts'; + +const Schema = { + settings: { + path: null, + acceptedTypes: null, + permissions: null, + newResourcesPermissions: null, + controlledActions: {}, + readOnly: false, + excludeFromMirror: false, + activateTombstones: true, + podsContainer: false, + podProvider: false, + typeIndex: undefined + }, + dependencies: ['ldp'], + async started() { + const { path, controlledActions, ...rest } = this.settings; + + const registration = await this.broker.call('ldp.registry.register', { + path, + name: this.name, + controlledActions: { + post: `${this.name}.post`, + list: `${this.name}.list`, + get: `${this.name}.get`, + getHeaderLinks: `${this.name}.getHeaderLinks`, + create: `${this.name}.create`, + patch: `${this.name}.patch`, + put: `${this.name}.put`, + delete: `${this.name}.delete`, + ...this.settings.controlledActions + }, + ...rest + }); + + // If no path was defined in the settings, set the automatically generated path (so that it can be used below) + if (!path) this.settings.path = registration.path; + }, + actions: { + post: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return await ctx.call('ldp.container.post', ctx.params); + } + }), + + list: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return ctx.call('ldp.container.get', ctx.params); + } + }), + + attach: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return ctx.call('ldp.container.attach', ctx.params); + } + }), + + detach: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return ctx.call('ldp.container.detach', ctx.params); + } + }), + + get: defineAction({ + handler(ctx) { + const containerParams = {}; + // @ts-expect-error TS(2339): Property 'accept' does not exist on type '{}'. + if (this.settings.accept) containerParams.accept = this.settings.accept; + return ctx.call('ldp.resource.get', { + ...containerParams, + ...ctx.params + }); + } + }), + + getHeaderLinks: defineAction({ + handler(ctx) { + return []; + } + }), + + create: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.create', ctx.params); + } + }), + + patch: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.patch', ctx.params); + } + }), + + put: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.put', ctx.params); + } + }), + + delete: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.delete', ctx.params); + } + }), + + exist: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.exist', ctx.params); + } + }), + + getContainerUri: defineAction({ + handler(ctx) { + return ctx.call('ldp.registry.getUri', { + path: this.settings.path, + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + webId: ctx.params?.webId || ctx.meta?.webId + }); + } + }), + + waitForContainerCreation: defineAction({ + async handler(ctx) { + let { containerUri } = ctx.params; + let containerExist; + let containerAttached; + + if (!containerUri) { + containerUri = await this.actions.getContainerUri( + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + { webId: ctx.params.webId || ctx.meta.webId }, + { parentCtx: ctx } + ); + } + + do { + if (containerExist === false) await delay(1000); + containerExist = await ctx.call('ldp.container.exist', { containerUri }); + } while (!containerExist); + + const parentContainerUri = getParentContainerUri(containerUri); + const parentContainerExist = await ctx.call('ldp.container.exist', { containerUri: parentContainerUri }); + + // If a parent container exist, check that the child container has been attached + // Otherwise, it may fail + if (parentContainerExist) { + do { + if (containerAttached === false) await delay(1000); + containerAttached = await ctx.call('ldp.container.includes', { + containerUri: parentContainerUri, + resourceUri: containerUri, + webId: 'system' + }); + } while (!containerAttached); + } + } + }) + } +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/dereference.js b/src/middleware/packages/ldp/mixins/dereference.ts similarity index 95% rename from src/middleware/packages/ldp/mixins/dereference.js rename to src/middleware/packages/ldp/mixins/dereference.ts index fef345fd6..5e3a21f15 100644 --- a/src/middleware/packages/ldp/mixins/dereference.js +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -1,4 +1,5 @@ -const { isObject, arrayOf } = require('../utils'); +import { ServiceSchema } from 'moleculer'; +import { isObject, arrayOf } from '../utils.ts'; /** * @description MoleculerJS mixin to be applied on the ControlledContainerMixin within a Semapps project. @@ -34,7 +35,7 @@ const { isObject, arrayOf } = require('../utils'); * @type {import('moleculer').ServiceSchema} */ -module.exports = { +const Schema = { dependencies: ['ldp.resource'], methods: { /** @@ -59,6 +60,7 @@ module.exports = { delete result['@context']; return result; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 403 || e.code === 404) { return resourceUri; } else { @@ -146,4 +148,6 @@ module.exports = { get: ['handleAfterGet'] } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/disassembly.js b/src/middleware/packages/ldp/mixins/disassembly.ts similarity index 92% rename from src/middleware/packages/ldp/mixins/disassembly.js rename to src/middleware/packages/ldp/mixins/disassembly.ts index cb5bce8a5..08e00315c 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.js +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -1,6 +1,7 @@ -const { arrayOf } = require('../utils'); +import { ServiceSchema } from 'moleculer'; +import { arrayOf } from '../utils.ts'; -module.exports = { +const Schema = { settings: { disassembly: [] // Example: [{ path: 'pair:hasLocation', container: 'http://localhost:3000/places' }] }, @@ -13,6 +14,7 @@ module.exports = { before: { async create(ctx) { const { resource } = ctx.params; + // @ts-expect-error TS(2349): This expression is not callable. await this.createDisassembly(ctx, resource); }, async put(ctx) { @@ -21,11 +23,13 @@ module.exports = { resourceUri: resource.id || resource['@id'], webId: 'system' }); + // @ts-expect-error TS(2349): This expression is not callable. await this.updateDisassembly(ctx, resource, oldData); } }, after: { async delete(ctx, res) { + // @ts-expect-error TS(2349): This expression is not callable. await this.deleteDisassembly(ctx, res.oldData); return res; } @@ -60,7 +64,7 @@ module.exports = { for (const disassemblyConfig of this.settings.disassembly) { const uriAdded = []; const uriRemoved = []; - let uriKept = []; + let uriKept: any = []; const oldDisassemblyValue = arrayOf(oldData[disassemblyConfig.path]); const newDisassemblyValue = arrayOf(newData[disassemblyConfig.path]); @@ -144,4 +148,6 @@ module.exports = { } } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/document-tagger.js b/src/middleware/packages/ldp/mixins/document-tagger.js deleted file mode 100644 index 7d838e4a3..000000000 --- a/src/middleware/packages/ldp/mixins/document-tagger.js +++ /dev/null @@ -1,82 +0,0 @@ -const { dc } = require('@semapps/ontologies'); -const { getDatasetFromUri } = require('../utils'); - -module.exports = { - settings: { - documentPredicates: { - created: 'http://purl.org/dc/terms/created', - updated: 'http://purl.org/dc/terms/modified', - creator: 'http://purl.org/dc/terms/creator' - } - }, - async started() { - await this.broker.call('ontologies.register', dc); - }, - actions: { - async tagCreatedResource(ctx) { - const { resourceUri, newData, webId, dataset } = ctx.params; - const now = new Date(); - const triples = []; - - if (!newData['dc:created']) { - triples.push( - `<${resourceUri}> <${ - this.settings.documentPredicates.created - }> "${now.toISOString()}"^^ .` - ); - } - - if (!newData['dc:modified']) { - triples.push( - `<${resourceUri}> <${ - this.settings.documentPredicates.updated - }> "${now.toISOString()}"^^ .` - ); - } - - if (!newData['dc:creator'] && webId && webId.startsWith('http')) { - triples.push(`<${resourceUri}> <${this.settings.documentPredicates.creator}> <${webId}> .`); - } - - if (triples.length > 0) { - await ctx.call('triplestore.update', { - query: `INSERT DATA { ${triples.join('\n')} }`, - dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, - webId: 'system' - }); - } - }, - async tagUpdatedResource(ctx) { - const { resourceUri, dataset } = ctx.params; - const now = new Date(); - await ctx.call('triplestore.update', { - query: ` - DELETE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } - INSERT { <${resourceUri}> <${ - this.settings.documentPredicates.updated - }> "${now.toISOString()}"^^ } - WHERE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } - `, - dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, - webId: 'system' - }); - } - }, - events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData, webId, dataset } = ctx.params; - this.actions.tagCreatedResource( - { resourceUri, newData, webId: ctx.meta.impersonatedUser || webId, dataset }, - { parentCtx: ctx } - ); - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, dataset } = ctx.params; - this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri, dataset } = ctx.params; - this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); - } - } -}; diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts new file mode 100644 index 000000000..8976ea585 --- /dev/null +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -0,0 +1,105 @@ +import { dc } from '@semapps/ontologies'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { getDatasetFromUri } from '../utils.ts'; + +const Schema = { + settings: { + documentPredicates: { + created: 'http://purl.org/dc/terms/created', + updated: 'http://purl.org/dc/terms/modified', + creator: 'http://purl.org/dc/terms/creator' + } + }, + async started() { + await this.broker.call('ontologies.register', dc); + }, + actions: { + tagCreatedResource: defineAction({ + async handler(ctx) { + const { resourceUri, newData, webId, dataset } = ctx.params; + const now = new Date(); + const triples = []; + + if (!newData['dc:created']) { + triples.push( + `<${resourceUri}> <${ + this.settings.documentPredicates.created + }> "${now.toISOString()}"^^ .` + ); + } + + if (!newData['dc:modified']) { + triples.push( + `<${resourceUri}> <${ + this.settings.documentPredicates.updated + }> "${now.toISOString()}"^^ .` + ); + } + + if (!newData['dc:creator'] && webId && webId.startsWith('http')) { + triples.push(`<${resourceUri}> <${this.settings.documentPredicates.creator}> <${webId}> .`); + } + + if (triples.length > 0) { + await ctx.call('triplestore.update', { + query: `INSERT DATA { ${triples.join('\n')} }`, + dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, + webId: 'system' + }); + } + } + }), + + tagUpdatedResource: defineAction({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + const now = new Date(); + await ctx.call('triplestore.update', { + query: ` + DELETE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } + INSERT { <${resourceUri}> <${ + this.settings.documentPredicates.updated + }> "${now.toISOString()}"^^ } + WHERE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } + `, + dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, + webId: 'system' + }); + } + }) + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData, webId, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + this.actions.tagCreatedResource( + // @ts-expect-error TS(2339): Property 'impersonatedUser' does not exist on type... Remove this comment to see the full error message + { resourceUri, newData, webId: ctx.meta.impersonatedUser || webId, dataset }, + { parentCtx: ctx } + ); + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }) + } +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/image-processor.js b/src/middleware/packages/ldp/mixins/image-processor.js deleted file mode 100644 index d0bf42579..000000000 --- a/src/middleware/packages/ldp/mixins/image-processor.js +++ /dev/null @@ -1,97 +0,0 @@ -const sharp = require('sharp'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { arrayOf } = require('../utils'); - -const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; - -module.exports = { - settings: { - imageProcessor: { - maxWidth: 1900, - maxHeight: 1000, - jpeg: { - quality: 85 - }, - png: { - compressionLevel: 8 - }, - webp: { - quality: 85 - } - } - }, - actions: { - async processImage(ctx) { - const { resourceUri } = ctx.params; - - const metadata = await ctx.call('ldp.resource.get', { - resourceUri, - jsonContext: { '@vocab': 'http://semapps.org/ns/core#' }, - webId: 'system' - }); - - try { - if (metadata['@type'] === 'File' && SUPPORTED_IMAGES_MIME_TYPES.includes(metadata.mimeType)) { - let image = await sharp(metadata.localPath); - - const { width, height, format } = await image.metadata(); - - if (width > this.settings.imageProcessor.maxWidth || height > this.settings.imageProcessor.maxHeight) { - const maxSize = this.getMaxSize(width, height); - image = image.resize({ width: maxSize.width, height: maxSize.height }); - } - - switch (format) { - case 'jpeg': - image = await image.jpeg(this.settings.imageProcessor.jpeg || {}); - break; - case 'png': - image = await image.png(this.settings.imageProcessor.png || {}); - break; - case 'webp': - image = await image.webp(this.settings.imageProcessor.webp || {}); - break; - default: - break; - } - - // We cannot write directly to the same file as input, so write to a buffer first - const buffer = await image.toBuffer(); - await sharp(buffer).toFile(metadata.localPath); - } - } catch (e) { - this.logger.warn(`Image processing failed (${e.message})`); - } - }, - async processAllImages(ctx) { - const { webId } = ctx.params; - const container = await this.actions.list({ webId }, { parentCtx: ctx }); - if (container['ldp:contains']) { - const resources = arrayOf(container['ldp:contains']); - this.logger.info(`Processing ${resources.length} images...`); - for (const resource of resources) { - this.logger.info(`Processing image ${resource.id}...`); - await this.actions.processImage({ resourceUri: resource.id }, { parentCtx: ctx }); - } - } - this.logger.info('Finished !'); - } - }, - methods: { - getMaxSize(width, height) { - const ratio = Math.min( - this.settings.imageProcessor.maxWidth / width, - this.settings.imageProcessor.maxHeight / height - ); - return { width: Math.round(width * ratio), height: Math.round(height * ratio) }; - } - }, - hooks: { - after: { - async create(ctx, res) { - await this.actions.processImage({ resourceUri: res.resourceUri }, { parentCtx: ctx }); - return res; - } - } - } -}; diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts new file mode 100644 index 000000000..a77b4abc9 --- /dev/null +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -0,0 +1,108 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'shar... Remove this comment to see the full error message +import sharp from 'sharp'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { arrayOf } from '../utils.ts'; + +const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; + +const Schema = { + settings: { + imageProcessor: { + maxWidth: 1900, + maxHeight: 1000, + jpeg: { + quality: 85 + }, + png: { + compressionLevel: 8 + }, + webp: { + quality: 85 + } + } + }, + actions: { + processImage: defineAction({ + async handler(ctx) { + const { resourceUri } = ctx.params; + + const metadata = await ctx.call('ldp.resource.get', { + resourceUri, + jsonContext: { '@vocab': 'http://semapps.org/ns/core#' }, + webId: 'system' + }); + + try { + if (metadata['@type'] === 'File' && SUPPORTED_IMAGES_MIME_TYPES.includes(metadata.mimeType)) { + let image = await sharp(metadata.localPath); + + const { width, height, format } = await image.metadata(); + + if (width > this.settings.imageProcessor.maxWidth || height > this.settings.imageProcessor.maxHeight) { + const maxSize = this.getMaxSize(width, height); + image = image.resize({ width: maxSize.width, height: maxSize.height }); + } + + switch (format) { + case 'jpeg': + image = await image.jpeg(this.settings.imageProcessor.jpeg || {}); + break; + case 'png': + image = await image.png(this.settings.imageProcessor.png || {}); + break; + case 'webp': + image = await image.webp(this.settings.imageProcessor.webp || {}); + break; + default: + break; + } + + // We cannot write directly to the same file as input, so write to a buffer first + const buffer = await image.toBuffer(); + await sharp(buffer).toFile(metadata.localPath); + } + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.warn(`Image processing failed (${e.message})`); + } + } + }), + + processAllImages: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const container = await this.actions.list({ webId }, { parentCtx: ctx }); + if (container['ldp:contains']) { + const resources = arrayOf(container['ldp:contains']); + this.logger.info(`Processing ${resources.length} images...`); + for (const resource of resources) { + this.logger.info(`Processing image ${resource.id}...`); + await this.actions.processImage({ resourceUri: resource.id }, { parentCtx: ctx }); + } + } + this.logger.info('Finished !'); + } + }) + }, + methods: { + getMaxSize(width, height) { + const ratio = Math.min( + this.settings.imageProcessor.maxWidth / width, + this.settings.imageProcessor.maxHeight / height + ); + return { width: Math.round(width * ratio), height: Math.round(height * ratio) }; + } + }, + hooks: { + after: { + async create(ctx, res) { + // @ts-expect-error TS(2339): Property 'processImage' does not exist on type 'st... Remove this comment to see the full error message + await this.actions.processImage({ resourceUri: res.resourceUri }, { parentCtx: ctx }); + return res; + } + } + } +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/mime-types.js b/src/middleware/packages/ldp/mixins/mime-types.ts similarity index 72% rename from src/middleware/packages/ldp/mixins/mime-types.js rename to src/middleware/packages/ldp/mixins/mime-types.ts index 50bf276e5..0adb4ec08 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.js +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -1,7 +1,11 @@ -const { MoleculerError } = require('moleculer').Errors; -const { isMimeTypeMatching } = require('@semapps/mime-types'); +import { isMimeTypeMatching } from '@semapps/mime-types'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = { settings: { mimeTypes: { accepted: [], @@ -20,6 +24,7 @@ module.exports = { before: { async post(ctx) { const { file } = ctx.params; + // @ts-expect-error TS(2339): Property 'mimeTypes' does not exist on type 'strin... Remove this comment to see the full error message const { mimeTypes } = this.settings; if ( @@ -31,4 +36,6 @@ module.exports = { } } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.js b/src/middleware/packages/ldp/mixins/orphan-files-deletion.js deleted file mode 100644 index 1ddde29dc..000000000 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.js +++ /dev/null @@ -1,60 +0,0 @@ -const { CronJob } = require('cron'); - -module.exports = { - settings: { - orphanFilesDeletion: { - cronJob: { - time: '0 0 4 * * *', // Every night at 4am - timeZone: 'Europe/Paris' - } - } - }, - dependencies: ['triplestore', 'ldp.resource'], - actions: { - async checkOrphanFiles(ctx) { - try { - this.logger.info('OrphanFilesDeletion - Check...'); - - const containerUri = await this.actions.getContainerUri(); - const results = await ctx.call('triplestore.query', { - query: ` - SELECT ?file - WHERE { - <${containerUri}> ?file . - FILTER NOT EXISTS { - ?s ?p ?file . - FILTER(?s != <${containerUri}>) - } - } - `, - webId: 'system' - }); - - this.logger.info(`OrphanFilesDeletion - Found ${results.length} orphan files`); - - for (const { file } of results) { - await ctx.call('ldp.resource.delete', { - resourceUri: file.value, - webId: 'system' - }); - - this.logger.info(`OrphanFilesDeletion - ${file.value} deleted`); - } - } catch (error) { - this.logger.error(`OrphanFilesDeletion - Error: ${error.message}`); - } - } - }, - created() { - this.actions.checkOrphanFiles(); - const { cronJob } = this.settings.orphanFilesDeletion || {}; - const { time, timeZone } = cronJob || {}; - - if (cronJob) { - this.cronJob = new CronJob(time, this.actions.checkOrphanFiles, null, true, timeZone); - } - }, - stopped() { - this.cronJob?.stop(); - } -}; diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts new file mode 100644 index 000000000..01e2e3fc5 --- /dev/null +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -0,0 +1,66 @@ +import { CronJob } from 'cron'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const Schema = { + settings: { + orphanFilesDeletion: { + cronJob: { + time: '0 0 4 * * *', // Every night at 4am + timeZone: 'Europe/Paris' + } + } + }, + dependencies: ['triplestore', 'ldp.resource'], + actions: { + checkOrphanFiles: defineAction({ + async handler(ctx) { + try { + this.logger.info('OrphanFilesDeletion - Check...'); + + const containerUri = await this.actions.getContainerUri(); + const results = await ctx.call('triplestore.query', { + query: ` + SELECT ?file + WHERE { + <${containerUri}> ?file . + FILTER NOT EXISTS { + ?s ?p ?file . + FILTER(?s != <${containerUri}>) + } + } + `, + webId: 'system' + }); + + this.logger.info(`OrphanFilesDeletion - Found ${results.length} orphan files`); + + for (const { file } of results) { + await ctx.call('ldp.resource.delete', { + resourceUri: file.value, + webId: 'system' + }); + + this.logger.info(`OrphanFilesDeletion - ${file.value} deleted`); + } + } catch (error) { + // @ts-expect-error TS(18046): 'error' is of type 'unknown'. + this.logger.error(`OrphanFilesDeletion - Error: ${error.message}`); + } + } + }) + }, + created() { + this.actions.checkOrphanFiles(); + const { cronJob } = this.settings.orphanFilesDeletion || {}; + const { time, timeZone } = cronJob || {}; + + if (cronJob) { + this.cronJob = new CronJob(time, this.actions.checkOrphanFiles, null, true, timeZone); + } + }, + stopped() { + this.cronJob?.stop(); + } +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/pseudo-id.js b/src/middleware/packages/ldp/mixins/pseudo-id.ts similarity index 95% rename from src/middleware/packages/ldp/mixins/pseudo-id.js rename to src/middleware/packages/ldp/mixins/pseudo-id.ts index c39dea2a7..1abe545b5 100644 --- a/src/middleware/packages/ldp/mixins/pseudo-id.js +++ b/src/middleware/packages/ldp/mixins/pseudo-id.ts @@ -1,3 +1,5 @@ +import { ServiceSchema } from 'moleculer'; + /** * MoleculerJS mixin to be applied on the ControlledContainerMixin. * Adds support for adding different subjects to the same resource/named graph than the resource URI itself. @@ -9,7 +11,7 @@ * * @type {import('moleculer').ServiceSchema} */ -module.exports = { +const Schema = { dependencies: ['ldp.resource'], settings: { pseudoIdPredicate: 'urn:tmp:pseudoId' @@ -88,4 +90,6 @@ module.exports = { list: ['handleAfterGet'] } } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.js b/src/middleware/packages/ldp/mixins/single-resource-container.js deleted file mode 100644 index 1428b5589..000000000 --- a/src/middleware/packages/ldp/mixins/single-resource-container.js +++ /dev/null @@ -1,102 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const ControlledContainerMixin = require('./controlled-container'); -const { delay } = require('../utils'); - -module.exports = { - mixins: [ControlledContainerMixin], - settings: { - initialValue: {}, - // Override default settings of ControlledContainerMixin - readOnly: true, - excludeFromMirror: true, - activateTombstones: false - }, - async started() { - if (!this.settings.acceptedTypes) - this.settings.acceptedTypes = this.settings.resource.type || this.settings.resource['@type']; - - if (!this.settings.podProvider) { - await this.actions.initializeResource({ webId: 'system' }); - } - }, - actions: { - async initializeResource(ctx) { - const { webId } = ctx.params; - - const containerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); - await this.actions.waitForContainerCreation({ containerUri }, { parentCtx: ctx }); - - let resource = this.settings.initialValue; - if (!resource.type && !resource['@type']) resource.type = this.settings.acceptedTypes; - - return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); - }, - async getResourceUri(ctx) { - const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri }); - return resourcesUris[0]; - }, - async exist(ctx) { - const resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - return !!resourceUri; - }, - async waitForResourceCreation(ctx) { - const { webId } = ctx.params; - let resource; - let attempts = 0; - - do { - attempts += 1; - if (attempts > 1) await delay(1000); - const resourceUri = await this.actions.getResourceUri({ webId }); - - // Now wait for resources to have been effectively created, because when we call the ldp.container.post action, - // the ldp:contains predicate is added first (to ensure WAC permissions work) and then the resource is created - if (resourceUri) { - try { - resource = await this.actions.get( - { resourceUri, webId: 'system' }, - { parentCtx: ctx, meta: { $cache: false } } - ); - } catch (e) { - // Ignore - } - } - } while (!resource || attempts > 30); - - if (!resource) throw new Error(`Resource still had not been created after 30s`); - - return resource.id || resource['@id']; - } - }, - hooks: { - before: { - async get(ctx) { - if (!ctx.params.resourceUri) { - ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); - } - }, - async patch(ctx) { - if (!ctx.params.resourceUri) { - ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); - } - }, - async put(ctx) { - if (!ctx.params.resourceUri) { - ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); - } - } - } - }, - events: { - async 'auth.registered'(ctx) { - if (this.settings.podProvider) { - const { webId } = ctx.params; - await this.actions.initializeResource({ webId }); - } - } - } -}; diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts new file mode 100644 index 000000000..d3d4dbab3 --- /dev/null +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -0,0 +1,127 @@ +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import ControlledContainerMixin from './controlled-container.ts'; +import { delay } from '../utils.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = { + mixins: [ControlledContainerMixin], + settings: { + initialValue: {}, + // Override default settings of ControlledContainerMixin + readOnly: true, + excludeFromMirror: true, + activateTombstones: false + }, + async started() { + if (!this.settings.acceptedTypes) + this.settings.acceptedTypes = this.settings.resource.type || this.settings.resource['@type']; + + if (!this.settings.podProvider) { + await this.actions.initializeResource({ webId: 'system' }); + } + }, + actions: { + initializeResource: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + const containerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); + await this.actions.waitForContainerCreation({ containerUri }, { parentCtx: ctx }); + + let resource = this.settings.initialValue; + if (!resource.type && !resource['@type']) resource.type = this.settings.acceptedTypes; + + return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); + } + }), + + getResourceUri: defineAction({ + async handler(ctx) { + const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri }); + return resourcesUris[0]; + } + }), + + exist: defineAction({ + async handler(ctx) { + const resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + return !!resourceUri; + } + }), + + waitForResourceCreation: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + let resource; + let attempts = 0; + + do { + attempts += 1; + if (attempts > 1) await delay(1000); + const resourceUri = await this.actions.getResourceUri({ webId }); + + // Now wait for resources to have been effectively created, because when we call the ldp.container.post action, + // the ldp:contains predicate is added first (to ensure WAC permissions work) and then the resource is created + if (resourceUri) { + try { + resource = await this.actions.get( + { resourceUri, webId: 'system' }, + { parentCtx: ctx, meta: { $cache: false } } + ); + } catch (e) { + // Ignore + } + } + } while (!resource || attempts > 30); + + if (!resource) throw new Error(`Resource still had not been created after 30s`); + + return resource.id || resource['@id']; + } + }) + }, + hooks: { + before: { + async get(ctx) { + if (!ctx.params.resourceUri) { + // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message + ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); + } + }, + async patch(ctx) { + if (!ctx.params.resourceUri) { + // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message + ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); + } + }, + async put(ctx) { + if (!ctx.params.resourceUri) { + // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message + ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); + } + } + } + }, + events: { + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.podProvider) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.initializeResource({ webId }); + } + } + }) + } +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.js b/src/middleware/packages/ldp/mixins/special-endpoint.ts similarity index 54% rename from src/middleware/packages/ldp/mixins/special-endpoint.js rename to src/middleware/packages/ldp/mixins/special-endpoint.ts index 0bed40885..cd1145479 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.js +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -1,15 +1,18 @@ -const urlJoin = require('url-join'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const { +import urlJoin from 'url-join'; +import { namedNode, triple } from '@rdfjs/data-model'; + +import { parseUrl, parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; + +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { +const Schema = { settings: { baseUrl: null, settingsDataset: null, @@ -27,7 +30,9 @@ module.exports = { const middlewares = [parseUrl, parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; let aliases = {}; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message aliases['GET /'] = [...middlewares, `${this.name}.endpointGet`]; + // @ts-expect-error TS(2774): This condition will always return true since this ... Remove this comment to see the full error message if (this.actions.endpointPost) aliases['POST /'] = [...middlewares, `${this.name}.endpointPost`]; await this.broker.call('api.addRoute', { @@ -64,30 +69,38 @@ module.exports = { } }, actions: { - async endpointAdd(ctx) { - const { predicate, object } = ctx.params; + endpointAdd: defineAction({ + async handler(ctx) { + const { predicate, object } = ctx.params; - await ctx.call( - 'ldp.resource.patch', - { - resourceUri: this.endpointUrl, - triplesToAdd: [triple(namedNode(this.endpointUrl), predicate, object)], - webId: 'system' - }, - { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } - ); - }, - async endpointGet(ctx) { - ctx.meta.$responseType = ctx.meta.headers?.accept; + await ctx.call( + 'ldp.resource.patch', + { + resourceUri: this.endpointUrl, + triplesToAdd: [triple(namedNode(this.endpointUrl), predicate, object)], + webId: 'system' + }, + { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } + ); + } + }), - return await ctx.call( - 'ldp.resource.get', - { - resourceUri: this.endpointUrl, - webId: 'system' - }, - { meta: { dataset: this.settings.settingsDataset } } - ); - } + endpointGet: defineAction({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message + ctx.meta.$responseType = ctx.meta.headers?.accept; + + return await ctx.call( + 'ldp.resource.get', + { + resourceUri: this.endpointUrl, + webId: 'system' + }, + { meta: { dataset: this.settings.settingsDataset } } + ); + } + }) } -}; +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index 323a912e4..3480dae25 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -15,7 +15,6 @@ "dashify": "^2.0.0", "http-link-header": "^1.1.1", "mime-types": "^2.1.35", - "moleculer": "^0.14.17", "moleculer-db": "^0.8.16", "moleculer-schedule": "^0.2.3", "moleculer-web": "^0.10.0-beta1", @@ -30,10 +29,16 @@ "uuid": "^9.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.js b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts similarity index 88% rename from src/middleware/packages/ldp/routes/getCatchAllRoute.js rename to src/middleware/packages/ldp/routes/getCatchAllRoute.ts index 1b7e16238..40c60ad6d 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.js +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts @@ -1,5 +1,6 @@ -const path = require('path'); -const { +import path from 'path'; + +import { parseUrl, parseHeader, parseRawBody, @@ -8,9 +9,9 @@ const { parseJson, parseFile, saveDatasetMeta -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; -function getCatchAllRoute(basePath, podProvider) { +function getCatchAllRoute(basePath: any, podProvider: any) { const middlewares = [ parseUrl, parseHeader, @@ -45,4 +46,4 @@ function getCatchAllRoute(basePath, podProvider) { }; } -module.exports = getCatchAllRoute; +export default getCatchAllRoute; diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.js b/src/middleware/packages/ldp/routes/getPodsRoute.ts similarity index 87% rename from src/middleware/packages/ldp/routes/getPodsRoute.js rename to src/middleware/packages/ldp/routes/getPodsRoute.ts index 6c9d379c3..9a6f82666 100644 --- a/src/middleware/packages/ldp/routes/getPodsRoute.js +++ b/src/middleware/packages/ldp/routes/getPodsRoute.ts @@ -1,5 +1,6 @@ -const path = require('path'); -const { +import path from 'path'; + +import { parseUrl, parseHeader, parseRawBody, @@ -8,9 +9,9 @@ const { parseJson, parseFile, saveDatasetMeta -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; -const transformRouteParamsToSlugParts = (req, res, next) => { +const transformRouteParamsToSlugParts = (req: any, res: any, next: any) => { req.$params.slugParts = []; if (req.$params.username) { req.$params.slugParts.push(req.$params.username); @@ -23,7 +24,7 @@ const transformRouteParamsToSlugParts = (req, res, next) => { next(); }; -function getPodsRoute(basePath) { +function getPodsRoute(basePath: any) { const middlewares = [ parseUrl, parseHeader, @@ -57,4 +58,4 @@ function getPodsRoute(basePath) { }; } -module.exports = getPodsRoute; +export default getPodsRoute; diff --git a/src/middleware/packages/ldp/service.js b/src/middleware/packages/ldp/service.js deleted file mode 100644 index 2d3414170..000000000 --- a/src/middleware/packages/ldp/service.js +++ /dev/null @@ -1,115 +0,0 @@ -const { ldp, semapps } = require('@semapps/ontologies'); -const LdpApiService = require('./services/api'); -const LdpContainerService = require('./services/container'); -const LdpCacheService = require('./services/cache'); -const LdpLinkHeaderService = require('./services/link-header'); -const LdpRegistryService = require('./services/registry'); -const LdpRemoteService = require('./services/remote'); -const LdpResourceService = require('./services/resource'); -const PermissionsService = require('./services/permissions'); - -module.exports = { - name: 'ldp', - settings: { - baseUrl: null, - containers: [], - podProvider: false, - mirrorGraphName: 'http://semapps.org/mirror', - defaultContainerOptions: {}, - preferredViewForResource: null, - resourcesWithContainerPath: true, - binary: { - maxSize: '50Mb' - } - }, - dependencies: ['ldp.container', 'ldp.resource', 'ldp.registry', 'ontologies', 'jsonld'], - async created() { - const { - baseUrl, - containers, - podProvider, - defaultContainerOptions, - mirrorGraphName, - preferredViewForResource, - resourcesWithContainerPath, - binary - } = this.settings; - - this.broker.createService({ - mixins: [LdpContainerService], - settings: { - baseUrl, - podProvider, - mirrorGraphName - }, - hooks: this.schema.hooksContainer || {} - }); - - this.broker.createService({ - mixins: [LdpResourceService], - settings: { - baseUrl, - podProvider, - mirrorGraphName, - preferredViewForResource, - resourcesWithContainerPath, - binary - }, - hooks: this.schema.hooksResource || {} - }); - - this.broker.createService({ - mixins: [LdpRemoteService], - settings: { - baseUrl, - podProvider, - mirrorGraphName - } - }); - - this.broker.createService({ - mixins: [LdpRegistryService], - settings: { - baseUrl, - containers, - defaultOptions: defaultContainerOptions, - podProvider - } - }); - - this.broker.createService({ - mixins: [LdpApiService], - settings: { - baseUrl, - podProvider - } - }); - - this.broker.createService({ mixins: [PermissionsService] }); - - this.broker.createService({ mixins: [LdpLinkHeaderService] }); - - // Only create this service if a cacher is defined - if (this.broker.cacher) { - this.broker.createService({ mixins: [LdpCacheService] }); - } - }, - async started() { - await this.broker.call('ontologies.register', ldp); - // Used by binaries - await this.broker.call('ontologies.register', semapps); - }, - actions: { - getBaseUrl() { - return this.settings.baseUrl; - }, - getBasePath() { - const { pathname } = new URL(this.settings.baseUrl); - return pathname; - }, - getSetting(ctx) { - const { key } = ctx.params; - return this.settings[key]; - } - } -}; diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts new file mode 100644 index 000000000..0dcc566d4 --- /dev/null +++ b/src/middleware/packages/ldp/service.ts @@ -0,0 +1,142 @@ +import { ldp, semapps } from '@semapps/ontologies'; +import { ServiceSchema, defineAction } from 'moleculer'; +import LdpApiService from './services/api/index.ts'; +import LdpContainerService from './services/container/index.ts'; +import LdpCacheService from './services/cache/index.ts'; +import LdpLinkHeaderService from './services/link-header/index.ts'; +import LdpRegistryService from './services/registry/index.ts'; +import LdpRemoteService from './services/remote/index.ts'; +import LdpResourceService from './services/resource/index.ts'; +import PermissionsService from './services/permissions/index.ts'; + +const LdpSchema = { + name: 'ldp' as const, + settings: { + baseUrl: null, + containers: [], + podProvider: false, + mirrorGraphName: 'http://semapps.org/mirror', + defaultContainerOptions: {}, + preferredViewForResource: null, + resourcesWithContainerPath: true, + binary: { + maxSize: '50Mb' + } + }, + dependencies: ['ldp.container', 'ldp.resource', 'ldp.registry', 'ontologies', 'jsonld'], + async created() { + const { + baseUrl, + containers, + podProvider, + defaultContainerOptions, + mirrorGraphName, + preferredViewForResource, + resourcesWithContainerPath, + binary + } = this.settings; + + this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.container"; settings: { baseUrl... Remove this comment to see the full error message + mixins: [LdpContainerService], + settings: { + baseUrl, + podProvider, + mirrorGraphName + }, + hooks: this.schema.hooksContainer || {} + }); + + this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.resource"; settings: { baseUrl:... Remove this comment to see the full error message + mixins: [LdpResourceService], + settings: { + baseUrl, + podProvider, + mirrorGraphName, + preferredViewForResource, + resourcesWithContainerPath, + binary + }, + hooks: this.schema.hooksResource || {} + }); + + this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.remote"; mixins: any[]; setting... Remove this comment to see the full error message + mixins: [LdpRemoteService], + settings: { + baseUrl, + podProvider, + mirrorGraphName + } + }); + + this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.registry"; settings: { baseUrl:... Remove this comment to see the full error message + mixins: [LdpRegistryService], + settings: { + baseUrl, + containers, + defaultOptions: defaultContainerOptions, + podProvider + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ldp.api"; set... Remove this comment to see the full error message + this.broker.createService({ + mixins: [LdpApiService], + settings: { + baseUrl, + podProvider + } + }); + + // @ts-expect-error TS(2322): Type '{ name: "permissions"; actions: { addAuthori... Remove this comment to see the full error message + this.broker.createService({ mixins: [PermissionsService] }); + + // @ts-expect-error TS(2322): Type '{ name: "ldp.link-header"; actions: { get: A... Remove this comment to see the full error message + this.broker.createService({ mixins: [LdpLinkHeaderService] }); + + // Only create this service if a cacher is defined + if (this.broker.cacher) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ldp.cache"; d... Remove this comment to see the full error message + this.broker.createService({ mixins: [LdpCacheService] }); + } + }, + async started() { + await this.broker.call('ontologies.register', ldp); + // Used by binaries + await this.broker.call('ontologies.register', semapps); + }, + actions: { + getBaseUrl: defineAction({ + handler() { + return this.settings.baseUrl; + } + }), + + getBasePath: defineAction({ + handler() { + const { pathname } = new URL(this.settings.baseUrl); + return pathname; + } + }), + + getSetting: defineAction({ + handler(ctx) { + const { key } = ctx.params; + return this.settings[key]; + } + }) + } +} satisfies ServiceSchema; + +export default LdpSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpSchema.name]: typeof LdpSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/api/actions/delete.js b/src/middleware/packages/ldp/services/api/actions/delete.ts similarity index 78% rename from src/middleware/packages/ldp/services/api/actions/delete.js rename to src/middleware/packages/ldp/services/api/actions/delete.ts index 5a27e0e0b..3dd70de4d 100644 --- a/src/middleware/packages/ldp/services/api/actions/delete.js +++ b/src/middleware/packages/ldp/services/api/actions/delete.ts @@ -1,4 +1,4 @@ -module.exports = async function patch(ctx) { +export default async function patch(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; @@ -18,8 +18,11 @@ module.exports = async function patch(ctx) { 'Content-Length': 0 }; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/get.js b/src/middleware/packages/ldp/services/api/actions/get.ts similarity index 90% rename from src/middleware/packages/ldp/services/api/actions/get.js rename to src/middleware/packages/ldp/services/api/actions/get.ts index 5d727886b..f0a4b2045 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.js +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -1,9 +1,12 @@ -const fs = require('fs'); -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { cleanUndefined, parseJson } = require('../../../utils'); +import fs from 'fs'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { cleanUndefined, parseJson } from '../../../utils.ts'; -module.exports = async function get(ctx) { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export default async function get(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; @@ -106,8 +109,11 @@ module.exports = async function get(ctx) { return res; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/head.js b/src/middleware/packages/ldp/services/api/actions/head.ts similarity index 67% rename from src/middleware/packages/ldp/services/api/actions/head.js rename to src/middleware/packages/ldp/services/api/actions/head.ts index 2df25d213..b753013c8 100644 --- a/src/middleware/packages/ldp/services/api/actions/head.js +++ b/src/middleware/packages/ldp/services/api/actions/head.ts @@ -1,4 +1,4 @@ -module.exports = async function head(ctx) { +export default async function head(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; const uri = this.getUriFromSlugParts(slugParts, username); @@ -12,8 +12,11 @@ module.exports = async function head(ctx) { 'Content-Length': 0 }; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/patch.js b/src/middleware/packages/ldp/services/api/actions/patch.ts similarity index 75% rename from src/middleware/packages/ldp/services/api/actions/patch.js rename to src/middleware/packages/ldp/services/api/actions/patch.ts index f3b8b12bc..2a6ae260c 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.js +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -1,10 +1,14 @@ -const { MoleculerError } = require('moleculer').Errors; -const SparqlParser = require('sparqljs').Parser; +import sparqljsModule from 'sparqljs'; +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const SparqlParser = sparqljsModule.Parser; const parser = new SparqlParser(); const ACCEPTED_OPERATIONS = ['insert', 'delete']; -module.exports = async function patch(ctx) { +export default async function patch(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; @@ -27,7 +31,9 @@ module.exports = async function patch(ctx) { const triplesByOperation = Object.fromEntries( parsedQuery.updates + // @ts-expect-error TS(2339): Property 'updateType' does not exist on type 'Upda... Remove this comment to see the full error message .filter(p => ACCEPTED_OPERATIONS.includes(p.updateType)) + // @ts-expect-error TS(2339): Property 'updateType' does not exist on type 'Upda... Remove this comment to see the full error message .map(p => [p.updateType, p[p.updateType][0].triples]) ); @@ -66,8 +72,11 @@ module.exports = async function patch(ctx) { }; ctx.meta.$statusCode = 204; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (!e.code || e.code < 400) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/post.js b/src/middleware/packages/ldp/services/api/actions/post.ts similarity index 73% rename from src/middleware/packages/ldp/services/api/actions/post.js rename to src/middleware/packages/ldp/services/api/actions/post.ts index fe1b4bcdd..4868d67c2 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.js +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -1,9 +1,14 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { v4: uuidv4 } = require('uuid'); -const mime = require('mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message +import { v4 as uuidv4 } from 'uuid'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mime... Remove this comment to see the full error message +import mime from 'mime-types'; -module.exports = async function post(ctx) { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export default async function post(this: any, ctx: any) { try { let { username, slugParts, ...resource } = ctx.params; @@ -52,8 +57,11 @@ module.exports = async function post(ctx) { ctx.meta.$location = resourceUri; ctx.meta.$statusCode = 201; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code < 400 && e.code >= 500) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/put.js b/src/middleware/packages/ldp/services/api/actions/put.js deleted file mode 100644 index 7316f1b11..000000000 --- a/src/middleware/packages/ldp/services/api/actions/put.js +++ /dev/null @@ -1,42 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); - -module.exports = async function post(ctx) { - let { username, slugParts, ...resource } = ctx.params; - - const resourceUri = this.getUriFromSlugParts(slugParts, username); - const resourceId = resource['@id'] || resource.id; - - if (!resourceId) { - resource['@id'] = resourceUri; - } else if (resourceUri !== resourceId) { - throw new MoleculerError(`The @id of the resource is not the same as its URL`, 400, 'BAD_REQUEST'); - } - - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); - - if (ctx.meta.parser === 'file') { - throw new MoleculerError(`PUT method is not supported for non-RDF resources`, 400, 'BAD_REQUEST'); - } - - try { - const contentType = ctx.meta.headers['content-type']; - - // If the body is in Turtle or N-Triples, first convert it to JSON-LD - if (contentType && contentType !== MIME_TYPES.JSON) { - resource = await ctx.call('jsonld.parser.fromRDF', { input: ctx.meta.rawBody, options: { format: contentType } }); - } - - await ctx.call(controlledActions.put || 'ldp.resource.put', { resource }); - - ctx.meta.$statusCode = 204; - ctx.meta.$responseHeaders = { - Link: '; rel="type"', - 'Content-Length': 0 - }; - } catch (e) { - if (e.code !== 404 && e.code !== 403) console.error(e); - ctx.meta.$statusCode = e.code || 500; - ctx.meta.$statusMessage = e.message; - } -}; diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts new file mode 100644 index 000000000..eeea68bde --- /dev/null +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -0,0 +1,57 @@ +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction, Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export default defineAction({ + async handler(ctx) { + let { username, slugParts, ...resource } = ctx.params; + + const resourceUri = this.getUriFromSlugParts(slugParts, username); + const resourceId = resource['@id'] || resource.id; + + if (!resourceId) { + resource['@id'] = resourceUri; + } else if (resourceUri !== resourceId) { + throw new MoleculerError(`The @id of the resource is not the same as its URL`, 400, 'BAD_REQUEST'); + } + + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); + + // @ts-expect-error + if (ctx.meta.parser === 'file') { + throw new MoleculerError(`PUT method is not supported for non-RDF resources`, 400, 'BAD_REQUEST'); + } + + try { + // @ts-expect-error + const contentType = ctx.meta.headers['content-type']; + + // If the body is in Turtle or N-Triples, first convert it to JSON-LD + if (contentType && contentType !== MIME_TYPES.JSON) { + resource = await ctx.call('jsonld.parser.fromRDF', { + // @ts-expect-error + input: ctx.meta.rawBody, + options: { format: contentType } + }); + } + + await ctx.call(controlledActions.put || 'ldp.resource.put', { resource }); + + // @ts-expect-error + ctx.meta.$statusCode = 204; + // @ts-expect-error + ctx.meta.$responseHeaders = { + Link: '; rel="type"', + 'Content-Length': 0 + }; + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + ctx.meta.$statusMessage = e.message; + } + } +}); diff --git a/src/middleware/packages/ldp/services/api/index.js b/src/middleware/packages/ldp/services/api/index.ts similarity index 59% rename from src/middleware/packages/ldp/services/api/index.js rename to src/middleware/packages/ldp/services/api/index.ts index fd14257c6..5af245628 100644 --- a/src/middleware/packages/ldp/services/api/index.js +++ b/src/middleware/packages/ldp/services/api/index.ts @@ -1,15 +1,16 @@ -const urlJoin = require('url-join'); -const deleteAction = require('./actions/delete'); -const getAction = require('./actions/get'); -const headAction = require('./actions/head'); -const patchAction = require('./actions/patch'); -const postAction = require('./actions/post'); -const putAction = require('./actions/put'); -const getCatchAllRoute = require('../../routes/getCatchAllRoute'); -const getPodsRoute = require('../../routes/getPodsRoute'); +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction } from 'moleculer'; +import deleteAction from './actions/delete.ts'; +import getAction from './actions/get.ts'; +import headAction from './actions/head.ts'; +import patchAction from './actions/patch.ts'; +import postAction from './actions/post.ts'; +import putAction from './actions/put.ts'; +import getCatchAllRoute from '../../routes/getCatchAllRoute.ts'; +import getPodsRoute from '../../routes/getPodsRoute.ts'; -module.exports = { - name: 'ldp.api', +const LdpApiSchema = { + name: 'ldp.api' as const, settings: { baseUrl: null, podProvider: false @@ -46,4 +47,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default LdpApiSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpApiSchema.name]: typeof LdpApiSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/cache/index.js b/src/middleware/packages/ldp/services/cache/index.js deleted file mode 100644 index ed80f0259..000000000 --- a/src/middleware/packages/ldp/services/cache/index.js +++ /dev/null @@ -1,93 +0,0 @@ -module.exports = { - name: 'ldp.cache', - dependencies: ['ldp.container'], - actions: { - async generate(ctx) { - const containersUris = await ctx.call('ldp.container.getAll'); - for (const containerUri of containersUris) { - try { - await ctx.call('ldp.container.get', { containerUri }); - this.logger.info(`Generated cache for container ${containerUri}`); - } catch (e) { - this.logger.warn(`Error when generating cache for container ${containerUri}`); - console.error(e); - } - } - }, - async invalidateResource(ctx) { - if (this.broker.cacher) { - const { resourceUri, dataset } = ctx.params; - await this.broker.cacher.clean(`ldp.resource.get:${resourceUri}**`); - await this.broker.cacher.clean(`ldp.resource.getTypes:${resourceUri}**`); - - // Also invalidate the cache of the containers containing the resource - // For deleted resources, no container will be found (containers will be invalidated through the ldp.resource.detached event) - for (const containerUri of await ctx.call('ldp.resource.getContainers', { resourceUri, dataset })) { - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - } - } - }, - async invalidateContainer(ctx) { - if (this.broker.cacher) { - const { containerUri } = ctx.params; - await this.broker.cacher.clean(`ldp.container.get:${containerUri}**`); - await this.broker.cacher.clean(`ldp.resource.getTypes:${containerUri}**`); - } - } - }, - events: { - async 'ldp.resource.deleted'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.container.attached'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.container.patched'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.container.deleted'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.container.detached'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.remote.deleted'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.remote.stored'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - // Invalidate cache also when ACL rights are changed - async 'webacl.resource.updated'(ctx) { - const { uri, isContainer, dataset } = ctx.params; - if (isContainer) { - await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); - } else { - await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); - } - }, - async 'webacl.resource.deleted'(ctx) { - const { uri, isContainer, dataset } = ctx.params; - if (isContainer) { - await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); - } else { - await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); - } - } - } -}; diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts new file mode 100644 index 000000000..41781a72c --- /dev/null +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -0,0 +1,169 @@ +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +const LdpCacheSchema = { + name: 'ldp.cache' as const, + dependencies: ['ldp.container'], + actions: { + generate: defineAction({ + async handler(ctx) { + const containersUris = await ctx.call('ldp.container.getAll'); + for (const containerUri of containersUris) { + try { + await ctx.call('ldp.container.get', { containerUri }); + this.logger.info(`Generated cache for container ${containerUri}`); + } catch (e) { + this.logger.warn(`Error when generating cache for container ${containerUri}`); + console.error(e); + } + } + } + }), + + invalidateResource: defineAction({ + async handler(ctx) { + if (this.broker.cacher) { + const { resourceUri, dataset } = ctx.params; + await this.broker.cacher.clean(`ldp.resource.get:${resourceUri}**`); + await this.broker.cacher.clean(`ldp.resource.getTypes:${resourceUri}**`); + + // Also invalidate the cache of the containers containing the resource + // For deleted resources, no container will be found (containers will be invalidated through the ldp.resource.detached event) + for (const containerUri of await ctx.call('ldp.resource.getContainers', { resourceUri, dataset })) { + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + } + } + }), + + invalidateContainer: defineAction({ + async handler(ctx) { + if (this.broker.cacher) { + const { containerUri } = ctx.params; + await this.broker.cacher.clean(`ldp.container.get:${containerUri}**`); + await this.broker.cacher.clean(`ldp.resource.getTypes:${containerUri}**`); + } + } + }) + }, + events: { + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.container.attached': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message + const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + }), + + 'ldp.container.patched': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message + const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + }), + + 'ldp.container.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message + const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + }), + + 'ldp.container.detached': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message + const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + }), + + 'ldp.remote.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.remote.stored': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, dataset } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'webacl.resource.updated': defineServiceEvent({ + // Invalidate cache also when ACL rights are changed + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message + const { uri, isContainer, dataset } = ctx.params; + if (isContainer) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); + } else { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); + } + } + }), + + 'webacl.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message + const { uri, isContainer, dataset } = ctx.params; + if (isContainer) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); + } else { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); + } + } + }) + } +} satisfies ServiceSchema; + +export default LdpCacheSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpCacheSchema.name]: typeof LdpCacheSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/container/actions/attach.js b/src/middleware/packages/ldp/services/container/actions/attach.ts similarity index 73% rename from src/middleware/packages/ldp/services/container/actions/attach.js rename to src/middleware/packages/ldp/services/container/actions/attach.ts index faaaa20cb..72443e95d 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.js +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,7 +1,11 @@ -const { MoleculerError } = require('moleculer').Errors; -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -13,6 +17,7 @@ module.exports = { }, async handler(ctx) { const { containerUri, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId }); @@ -39,13 +44,17 @@ module.exports = { containerUri, resourceUri, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.container.attached', returnValues, { meta: { webId: null, dataset: null } }); } return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/clear.js b/src/middleware/packages/ldp/services/container/actions/clear.ts similarity index 84% rename from src/middleware/packages/ldp/services/container/actions/clear.js rename to src/middleware/packages/ldp/services/container/actions/clear.ts index b8e96b1c7..6cc30ce8f 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.js +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -16,4 +18,6 @@ module.exports = { await ctx.call('ldp.resource.delete', { resourceUri, webId }); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/create.js b/src/middleware/packages/ldp/services/container/actions/create.ts similarity index 72% rename from src/middleware/packages/ldp/services/container/actions/create.js rename to src/middleware/packages/ldp/services/container/actions/create.ts index 848c4ce07..4962384ed 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.js +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,14 +1,18 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message options: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const { containerUri, title, description, options } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('triplestore.insert', { @@ -23,4 +27,6 @@ module.exports = { ctx.emit('ldp.container.created', { containerUri, options, webId }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.js b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts similarity index 88% rename from src/middleware/packages/ldp/services/container/actions/createAndAttach.js rename to src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 47838788e..c5a983f1f 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.js +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -1,17 +1,19 @@ -const urlJoin = require('url-join'); -const { getParentContainerUri } = require('../../../utils'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; +import { getParentContainerUri } from '../../../utils.ts'; /** * Create a container and attach it to its parent container(s) * Recursively create the parent container(s) if they don't exist * In Pod provider config, the webId is required to find the Pod root */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message options: { type: 'object', optional: true }, webId: { type: 'string', optional: true } // Required in Pod provider config }, @@ -77,4 +79,6 @@ module.exports = { } } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/delete.js b/src/middleware/packages/ldp/services/container/actions/delete.ts similarity index 67% rename from src/middleware/packages/ldp/services/container/actions/delete.js rename to src/middleware/packages/ldp/services/container/actions/delete.ts index 1884207da..22d4c8e21 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.js +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -1,13 +1,16 @@ -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message containerUri: 'string', webId: { type: 'string', optional: true } }, async handler(ctx) { const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Write', webId }); @@ -34,14 +37,18 @@ module.exports = { const returnValues = { containerUri, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, webId }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.container.deleted', returnValues, { meta: { webId: null, dataset: null } }); } return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/detach.js b/src/middleware/packages/ldp/services/container/actions/detach.ts similarity index 77% rename from src/middleware/packages/ldp/services/container/actions/detach.js rename to src/middleware/packages/ldp/services/container/actions/detach.ts index 338575864..97a724c25 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.js +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -9,6 +10,7 @@ module.exports = { }, async handler(ctx) { let { containerUri, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const isRemoteContainer = await ctx.call('ldp.remote.isRemote', { resourceUri: containerUri }); @@ -34,16 +36,20 @@ module.exports = { webId }); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!isRemoteContainer && !ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.detached', { containerUri, resourceUri, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } ); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/exist.js b/src/middleware/packages/ldp/services/container/actions/exist.ts similarity index 88% rename from src/middleware/packages/ldp/services/container/actions/exist.js rename to src/middleware/packages/ldp/services/container/actions/exist.ts index b55e66317..4fac53ad9 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.js +++ b/src/middleware/packages/ldp/services/container/actions/exist.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' } @@ -23,4 +25,6 @@ module.exports = { webId: 'system' }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.ts similarity index 80% rename from src/middleware/packages/ldp/services/container/actions/get.js rename to src/middleware/packages/ldp/services/container/actions/get.ts index 206975243..fa5d12f6c 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.js +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,15 +1,22 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); -const { MoleculerError } = require('moleculer').Errors; -const { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; +import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string', optional: true }, webId: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message filters: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message doNotIncludeResources: { type: 'boolean', default: false }, + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { @@ -17,6 +24,7 @@ module.exports = { }, async handler(ctx) { const { containerUri, accept, filters, doNotIncludeResources, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Read', webId }); @@ -59,7 +67,7 @@ module.exports = { webId }); - const resourcesUris = resourcesResults?.map(node => node.s1.value); + const resourcesUris = resourcesResults?.map((node: any) => node.s1.value); // Request each resources (in parallel) containerResults['http://www.w3.org/ns/ldp#contains'] = await Promise.all( @@ -90,6 +98,7 @@ module.exports = { } } catch (e) { // Ignore a resource if it is not found + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.name !== 'MoleculerError') throw e; } return []; @@ -112,4 +121,6 @@ module.exports = { return compactResults; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.js b/src/middleware/packages/ldp/services/container/actions/getAll.ts similarity index 71% rename from src/middleware/packages/ldp/services/container/actions/getAll.js rename to src/middleware/packages/ldp/services/container/actions/getAll.ts index fa4af1a40..4d3368aca 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.js +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { dataset: { type: 'string', optional: true } @@ -16,6 +18,8 @@ module.exports = { webId: 'system' }); - return result.map(node => node.containerUri.value); + return result.map((node: any) => node.containerUri.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.js b/src/middleware/packages/ldp/services/container/actions/getPath.ts similarity index 63% rename from src/middleware/packages/ldp/services/container/actions/getPath.js rename to src/middleware/packages/ldp/services/container/actions/getPath.ts index 15f8f79ee..b68b331fb 100644 --- a/src/middleware/packages/ldp/services/container/actions/getPath.js +++ b/src/middleware/packages/ldp/services/container/actions/getPath.ts @@ -1,9 +1,12 @@ -const dashify = require('dashify'); -const { isURL } = require('../../../utils'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'dash... Remove this comment to see the full error message +import dashify from 'dashify'; +import { defineAction } from 'moleculer'; +import { isURL } from '../../../utils.ts'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceType: 'string' }, async handler(ctx) { @@ -23,7 +26,9 @@ module.exports = { } } else if (resourceType.match(regex)) { const matchResults = regex.exec(resourceType); + // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. prefix = matchResults[1]; + // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. className = matchResults[2]; ontology = await ctx.call('ontologies.get', { prefix }); } else { @@ -36,4 +41,6 @@ module.exports = { return `/${prefix}/${dashify(className)}`; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.js b/src/middleware/packages/ldp/services/container/actions/getUris.ts similarity index 72% rename from src/middleware/packages/ldp/services/container/actions/getUris.js rename to src/middleware/packages/ldp/services/container/actions/getUris.ts index db617b969..56f5864cf 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.js +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string', optional: true } @@ -17,6 +19,8 @@ module.exports = { webId: 'system' }); - return result.map(node => node.resourceUri.value); + return result.map((node: any) => node.resourceUri.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/includes.js b/src/middleware/packages/ldp/services/container/actions/includes.ts similarity index 84% rename from src/middleware/packages/ldp/services/container/actions/includes.js rename to src/middleware/packages/ldp/services/container/actions/includes.ts index 8e6aabc30..53e7fe7c4 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.js +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -9,6 +11,7 @@ module.exports = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const containerUri = ctx.params.containerUri.replace(/\/+$/, ''); const childUri = ctx.params.resourceUri.replace(/\/+$/, ''); @@ -30,4 +33,6 @@ module.exports = { webId }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.js b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts similarity index 68% rename from src/middleware/packages/ldp/services/container/actions/isEmpty.js rename to src/middleware/packages/ldp/services/container/actions/isEmpty.ts index f4da7cb66..595a0d418 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.js +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -9,7 +11,9 @@ module.exports = { }, async handler(ctx) { const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const { dataset } = ctx.meta; const res = await ctx.call('triplestore.query', { @@ -21,4 +25,6 @@ module.exports = { const num = Number(res[0].count.value); return num === 0; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/patch.js b/src/middleware/packages/ldp/services/container/actions/patch.ts similarity index 76% rename from src/middleware/packages/ldp/services/container/actions/patch.js rename to src/middleware/packages/ldp/services/container/actions/patch.ts index 73284b94d..9d6b549b7 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.js +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,7 +1,11 @@ -const { MoleculerError } = require('moleculer').Errors; -const { isMirror } = require('../../../utils'); +import { defineAction } from 'moleculer'; +import { isMirror } from '../../../utils.ts'; -const checkTripleValidity = (triple, containerUri) => { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const checkTripleValidity = (triple: any, containerUri: any) => { if (triple.subject.value !== containerUri) { throw new MoleculerError( `The subject must be the container URI. Provided ${triple.subject.value}`, @@ -17,16 +21,18 @@ const checkTripleValidity = (triple, containerUri) => { } }; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToAdd: { type: 'array', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToRemove: { type: 'array', optional: true @@ -38,9 +44,10 @@ module.exports = { }, async handler(ctx) { const { containerUri, triplesToAdd, triplesToRemove } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const resourcesAdded = [], - resourcesRemoved = []; + const resourcesAdded = []; + const resourcesRemoved = []; const containerExist = await ctx.call('ldp.container.exist', { containerUri }); if (!containerExist) { @@ -65,6 +72,7 @@ module.exports = { await ctx.call('ldp.container.attach', { containerUri, resourceUri, webId }); resourcesAdded.push(resourceUri); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404 && isMirror(resourceUri, this.settings.baseUrl)) { // We need to import the remote resource this.logger.info(`Importing ${resourceUri}...`); @@ -80,6 +88,7 @@ module.exports = { await ctx.call('ldp.container.attach', { containerUri, resourceUri, webId }); resourcesAdded.push(resourceUri); } catch (e2) { + // @ts-expect-error TS(18046): 'e2' is of type 'unknown'. this.logger.warn(`Error while importing ${resourceUri} : ${e2.message}`); } } @@ -104,16 +113,21 @@ module.exports = { resourcesRemoved.push(resourceUri); } catch (e) { // Fail silently + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Error when detaching ${resourceUri} from ${containerUri}: ${e.message}`); } } } + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.patched', + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. { containerUri, resourcesAdded, resourcesRemoved, dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } ); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.ts similarity index 83% rename from src/middleware/packages/ldp/services/container/actions/post.js rename to src/middleware/packages/ldp/services/container/actions/post.ts index be89be63b..5f75374f9 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,9 +1,13 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const { cleanUndefined } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; +import { cleanUndefined } from '../../../utils.ts'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { @@ -13,10 +17,12 @@ module.exports = { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message resource: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message file: { type: 'object', optional: true @@ -36,6 +42,7 @@ module.exports = { }, async handler(ctx) { let { resource, containerUri, slug, contentType, file, forcedResourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let isContainer = false; let expandedResource; @@ -81,6 +88,7 @@ module.exports = { const containerExist = await ctx.call('ldp.container.exist', { containerUri }); if (!containerExist) { throw new MoleculerError( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Cannot create resource in non-existing container ${containerUri} (webId ${webId} / dataset ${ctx.meta.dataset})`, 400, 'BAD_REQUEST' @@ -132,6 +140,7 @@ module.exports = { throw e; } + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.attached', @@ -146,4 +155,6 @@ module.exports = { return resourceUri; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/index.js b/src/middleware/packages/ldp/services/container/index.js deleted file mode 100644 index 7b974df26..000000000 --- a/src/middleware/packages/ldp/services/container/index.js +++ /dev/null @@ -1,58 +0,0 @@ -const attachAction = require('./actions/attach'); -const clearAction = require('./actions/clear'); -const createAction = require('./actions/create'); -const createAndAttachAction = require('./actions/createAndAttach'); -const deleteAction = require('./actions/delete'); -const detachAction = require('./actions/detach'); -const existAction = require('./actions/exist'); -const isEmptyAction = require('./actions/isEmpty'); -const getAction = require('./actions/get'); -const getAllAction = require('./actions/getAll'); -const getPathAction = require('./actions/getPath'); -const getUrisAction = require('./actions/getUris'); -const includesAction = require('./actions/includes'); -const postAction = require('./actions/post'); -const patchAction = require('./actions/patch'); -const { getDatasetFromUri } = require('../../utils'); - -module.exports = { - name: 'ldp.container', - settings: { - baseUrl: null, - podProvider: false, - mirrorGraphName: null - }, - dependencies: ['triplestore', 'jsonld'], - actions: { - attach: attachAction, - clear: clearAction, - create: createAction, - createAndAttach: createAndAttachAction, - delete: deleteAction, - detach: detachAction, - exist: existAction, - get: getAction, - getAll: getAllAction, - getPath: getPathAction, - getUris: getUrisAction, - includes: includesAction, - isEmpty: isEmptyAction, - post: postAction, - patch: patchAction - }, - hooks: { - before: { - '*'(ctx) { - if ( - this.settings.podProvider && - !ctx.meta.dataset && - ctx.params.containerUri && - ctx.params.containerUri.startsWith(this.settings.baseUrl) - ) { - // this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${ctx.params.containerUri}`); - ctx.meta.dataset = getDatasetFromUri(ctx.params.containerUri); - } - } - } - } -}; diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts new file mode 100644 index 000000000..5fa19164a --- /dev/null +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -0,0 +1,77 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import attachAction from './actions/attach.ts'; +import clearAction from './actions/clear.ts'; +import createAction from './actions/create.ts'; +import createAndAttachAction from './actions/createAndAttach.ts'; +import deleteAction from './actions/delete.ts'; +import detachAction from './actions/detach.ts'; +import existAction from './actions/exist.ts'; +import isEmptyAction from './actions/isEmpty.ts'; +import getAction from './actions/get.ts'; +import getAllAction from './actions/getAll.ts'; +import getPathAction from './actions/getPath.ts'; +import getUrisAction from './actions/getUris.ts'; +import includesAction from './actions/includes.ts'; +import postAction from './actions/post.ts'; +import patchAction from './actions/patch.ts'; +import { getDatasetFromUri } from '../../utils.ts'; + +const LdpContainerSchema = { + name: 'ldp.container' as const, + settings: { + baseUrl: null, + podProvider: false, + mirrorGraphName: null + }, + dependencies: ['triplestore', 'jsonld'], + actions: { + // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message + attach: attachAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message + clear: clearAction, + create: createAction, + createAndAttach: createAndAttachAction, + delete: deleteAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message + detach: detachAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message + exist: existAction, + get: getAction, + getAll: getAllAction, + getPath: getPathAction, + getUris: getUrisAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message + includes: includesAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message + isEmpty: isEmptyAction, + post: postAction, + patch: patchAction + }, + hooks: { + before: { + '*'(ctx) { + if ( + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message + this.settings.podProvider && + !ctx.meta.dataset && + ctx.params.containerUri && + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'string ... Remove this comment to see the full error message + ctx.params.containerUri.startsWith(this.settings.baseUrl) + ) { + // this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${ctx.params.containerUri}`); + ctx.meta.dataset = getDatasetFromUri(ctx.params.containerUri); + } + } + } + } +} satisfies ServiceSchema; + +export default LdpContainerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpContainerSchema.name]: typeof LdpContainerSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.js b/src/middleware/packages/ldp/services/link-header/actions/get.ts similarity index 86% rename from src/middleware/packages/ldp/services/link-header/actions/get.js rename to src/middleware/packages/ldp/services/link-header/actions/get.ts index de06c5841..c96af07c0 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.js +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -1,6 +1,7 @@ -const LinkHeader = require('http-link-header'); +import LinkHeader from 'http-link-header'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { uri: { type: 'string' } @@ -32,4 +33,6 @@ module.exports = { return linkHeader.toString(); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/actions/register.js b/src/middleware/packages/ldp/services/link-header/actions/register.ts similarity index 64% rename from src/middleware/packages/ldp/services/link-header/actions/register.js rename to src/middleware/packages/ldp/services/link-header/actions/register.ts index 4be0ad66c..ac2d15a45 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/register.js +++ b/src/middleware/packages/ldp/services/link-header/actions/register.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { actionName: { type: 'string' } @@ -7,4 +9,6 @@ module.exports = { const { actionName } = ctx.params; this.registeredActionNames.push(actionName); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/index.js b/src/middleware/packages/ldp/services/link-header/index.js deleted file mode 100644 index a24fac762..000000000 --- a/src/middleware/packages/ldp/services/link-header/index.js +++ /dev/null @@ -1,13 +0,0 @@ -const getAction = require('./actions/get'); -const registerAction = require('./actions/register'); - -module.exports = { - name: 'ldp.link-header', - actions: { - get: getAction, - register: registerAction - }, - async started() { - this.registeredActionNames = []; - } -}; diff --git a/src/middleware/packages/ldp/services/link-header/index.ts b/src/middleware/packages/ldp/services/link-header/index.ts new file mode 100644 index 000000000..c577437fa --- /dev/null +++ b/src/middleware/packages/ldp/services/link-header/index.ts @@ -0,0 +1,26 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import getAction from './actions/get.ts'; +import registerAction from './actions/register.ts'; + +const LdpLinkHeaderSchema = { + name: 'ldp.link-header' as const, + actions: { + // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; }, ... Remove this comment to see the full error message + get: getAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ actionName: { type: "string";... Remove this comment to see the full error message + register: registerAction + }, + async started() { + this.registeredActionNames = []; + } +} satisfies ServiceSchema; + +export default LdpLinkHeaderSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpLinkHeaderSchema.name]: typeof LdpLinkHeaderSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts similarity index 63% rename from src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js rename to src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index 62a7563dd..df34d298d 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { actionName: { type: 'string' }, @@ -10,6 +12,8 @@ module.exports = { this.authorizers.push({ actionName, priority }); // Re-order all authorizers by priority - this.authorizers.sort((a, b) => b.priority - a.priority); + this.authorizers.sort((a: any, b: any) => b.priority - a.priority); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.js b/src/middleware/packages/ldp/services/permissions/actions/check.ts similarity index 76% rename from src/middleware/packages/ldp/services/permissions/actions/check.js rename to src/middleware/packages/ldp/services/permissions/actions/check.ts index eca285007..0e46a8cb4 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.js +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,9 +1,13 @@ -const { MoleculerError } = require('moleculer').Errors; +import { defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; /** * Calls "has" action and throws error if no authorization was granted */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { uri: { type: 'string' }, @@ -16,4 +20,6 @@ module.exports = { throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED'); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.js b/src/middleware/packages/ldp/services/permissions/actions/has.ts similarity index 83% rename from src/middleware/packages/ldp/services/permissions/actions/has.js rename to src/middleware/packages/ldp/services/permissions/actions/has.ts index 57cf16ea2..a189e2666 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.js +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { uri: { type: 'string' }, @@ -8,6 +10,7 @@ module.exports = { }, async handler(ctx) { const { uri, type, mode } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // If no authorizers have been registered, assume user can access everything @@ -25,4 +28,6 @@ module.exports = { // If no guards returned a positive return false; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/index.js b/src/middleware/packages/ldp/services/permissions/index.js deleted file mode 100644 index d2b1ca248..000000000 --- a/src/middleware/packages/ldp/services/permissions/index.js +++ /dev/null @@ -1,15 +0,0 @@ -const addAuthorizerAction = require('./actions/addAuthorizer'); -const checkAction = require('./actions/check'); -const hasAction = require('./actions/has'); - -module.exports = { - name: 'permissions', - actions: { - addAuthorizer: addAuthorizerAction, - check: checkAction, - has: hasAction - }, - async started() { - this.authorizers = []; - } -}; diff --git a/src/middleware/packages/ldp/services/permissions/index.ts b/src/middleware/packages/ldp/services/permissions/index.ts new file mode 100644 index 000000000..44c18d0cf --- /dev/null +++ b/src/middleware/packages/ldp/services/permissions/index.ts @@ -0,0 +1,29 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import addAuthorizerAction from './actions/addAuthorizer.ts'; +import checkAction from './actions/check.ts'; +import hasAction from './actions/has.ts'; + +const PermissionsSchema = { + name: 'permissions' as const, + actions: { + // @ts-expect-error TS(2322): Type 'ActionSchema<{ actionName: { type: "string";... Remove this comment to see the full error message + addAuthorizer: addAuthorizerAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; typ... Remove this comment to see the full error message + check: checkAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; typ... Remove this comment to see the full error message + has: hasAction + }, + async started() { + this.authorizers = []; + } +} satisfies ServiceSchema; + +export default PermissionsSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [PermissionsSchema.name]: typeof PermissionsSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.js b/src/middleware/packages/ldp/services/registry/actions/getByType.ts similarity index 67% rename from src/middleware/packages/ldp/services/registry/actions/getByType.js rename to src/middleware/packages/ldp/services/registry/actions/getByType.ts index 88f34e640..8bbf7b6b9 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.js +++ b/src/middleware/packages/ldp/services/registry/actions/getByType.ts @@ -1,10 +1,13 @@ +import { defineAction } from 'moleculer'; + /** * Find the container options for a resource type * This only returns containers registered with the LDP registry, not the ones registered with the TypeIndex. */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } }, async handler(ctx) { @@ -13,9 +16,12 @@ module.exports = { const registeredContainers = await this.actions.list({}, { parentCtx: ctx }); return Object.values(registeredContainers).find(container => - types.some(t => + types.some((t: any) => + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. Array.isArray(container.acceptedTypes) ? container.acceptedTypes.includes(t) : container.acceptedTypes === t ) ); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.js b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts similarity index 86% rename from src/middleware/packages/ldp/services/registry/actions/getByUri.js rename to src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 5615ce3f7..bb72c5d8f 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.js +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,7 +1,9 @@ +import { defineAction } from 'moleculer'; + /** * Find the container options for a container URI */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string', optional: true }, @@ -24,9 +26,12 @@ module.exports = { const path = new URL(containerUri).pathname.replace(basePath, '/'); const registeredContainers = await this.actions.list({}, { parentCtx: ctx }); const containerOptions = + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. Object.values(registeredContainers).find(container => container.pathRegex.test(path)) || {}; return { ...this.settings.defaultOptions, ...containerOptions }; } return this.settings.defaultOptions; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.js b/src/middleware/packages/ldp/services/registry/actions/getUri.ts similarity index 83% rename from src/middleware/packages/ldp/services/registry/actions/getUri.js rename to src/middleware/packages/ldp/services/registry/actions/getUri.ts index 573c8da5b..5eb2bc980 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.js +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,10 +1,11 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; /** * Get the container URI based on its path * In Pod provider config, the webId is required to find the Pod root */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { path: { type: 'string' }, @@ -22,4 +23,6 @@ module.exports = { return urlJoin(this.settings.baseUrl, path); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.js b/src/middleware/packages/ldp/services/registry/actions/list.js deleted file mode 100644 index 1cdc22aba..000000000 --- a/src/middleware/packages/ldp/services/registry/actions/list.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - visibility: 'public', - handler() { - return this.registeredContainers; - } -}; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts new file mode 100644 index 000000000..3baa34cef --- /dev/null +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -0,0 +1,10 @@ +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ + visibility: 'public', + handler() { + return this.registeredContainers; + } +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.js b/src/middleware/packages/ldp/services/registry/actions/register.ts similarity index 76% rename from src/middleware/packages/ldp/services/registry/actions/register.js rename to src/middleware/packages/ldp/services/registry/actions/register.ts index c77023baf..b700075c4 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.js +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,21 +1,29 @@ -const urlJoin = require('url-join'); -const pathJoin = require('path').join; -const { pathToRegexp } = require('path-to-regexp'); -const { arrayOf } = require('../../../utils'); +import urlJoin from 'url-join'; +import pathModule from 'path'; +import { pathToRegexp } from 'path-to-regexp'; +import { defineAction } from 'moleculer'; +import { arrayOf } from '../../../utils.ts'; -module.exports = { +const pathJoin = pathModule.join; + +const Schema = defineAction({ visibility: 'public', params: { path: { type: 'string', optional: true }, fullPath: { type: 'string', optional: true }, name: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message acceptedTypes: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, shapeTreeUri: { type: 'string', optional: true }, excludeFromMirror: { type: 'boolean', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: true; }' is not ... Remove this comment to see the full error message activateTombstones: { type: 'boolean', default: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message permissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message newResourcesPermissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message controlledActions: { type: 'object', optional: true }, readOnly: { type: 'boolean', optional: true }, typeIndex: { type: 'string', optional: true } @@ -26,7 +34,7 @@ module.exports = { // TODO Remove this when we stop using the type for the container path if (!options.acceptedTypes && options.shapeTreeUri) { const services = await this.broker.call('$node.services'); - if (!services.some(s => s.name === 'shape-trees') && !services.some(s => s.name === 'shacl')) + if (!services.some((s: any) => s.name === 'shape-trees') && !services.some((s: any) => s.name === 'shacl')) throw new Error('If you use shapeTreeUri in container options, you need the shape-trees and shacl service'); try { @@ -34,6 +42,7 @@ module.exports = { const [shapeType] = await ctx.call('shacl.getTypes', { resourceUri: shapeUri }); options.acceptedTypes = shapeType; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. throw new Error(`Could not get type from shape ${options.shapeTreeUri}. Error: ${e.message}`); } } @@ -88,4 +97,6 @@ module.exports = { return options; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.js b/src/middleware/packages/ldp/services/registry/defaultOptions.ts similarity index 90% rename from src/middleware/packages/ldp/services/registry/defaultOptions.js rename to src/middleware/packages/ldp/services/registry/defaultOptions.ts index 66d292460..f8a2cdab4 100644 --- a/src/middleware/packages/ldp/services/registry/defaultOptions.js +++ b/src/middleware/packages/ldp/services/registry/defaultOptions.ts @@ -1,7 +1,7 @@ -module.exports = { +const Schema = { readOnly: false, excludeFromMirror: false, - permissions: webId => { + permissions: (webId: any) => { switch (webId) { case 'anon': return { @@ -32,7 +32,7 @@ module.exports = { }; } }, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { switch (webId) { case 'anon': return { @@ -66,3 +66,5 @@ module.exports = { }, controlledActions: {} }; + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/index.js b/src/middleware/packages/ldp/services/registry/index.js deleted file mode 100644 index a6e98df53..000000000 --- a/src/middleware/packages/ldp/services/registry/index.js +++ /dev/null @@ -1,56 +0,0 @@ -const urlJoin = require('url-join'); -const getByTypeAction = require('./actions/getByType'); -const getByUriAction = require('./actions/getByUri'); -const getUriAction = require('./actions/getUri'); -const listAction = require('./actions/list'); -const registerAction = require('./actions/register'); -const defaultOptions = require('./defaultOptions'); - -module.exports = { - name: 'ldp.registry', - settings: { - baseUrl: null, - containers: [], - defaultOptions, - podProvider: false - }, - dependencies: ['ldp.container', 'api'], - actions: { - getByType: getByTypeAction, - getByUri: getByUriAction, - getUri: getUriAction, - list: listAction, - register: registerAction - }, - async started() { - this.registeredContainers = {}; - if (this.settings.podProvider) { - // The auth.account service is a dependency only in POD provider config - await this.broker.waitForServices(['auth.account']); - } - for (let container of this.settings.containers) { - // Ensure backward compatibility - if (typeof container === 'string') container = { path: container }; - // We await each container registration so they happen in order (root container first)git - await this.actions.register(container); - } - }, - events: { - async 'auth.registered'(ctx) { - const { webId, accountData } = ctx.params; - // We want to add user's containers only in Pod provider config - if (this.settings.podProvider) { - const storageUrl = await ctx.call('solid-storage.getUrl', { webId }); - const registeredContainers = await this.actions.list({ dataset: accountData.username }, { parentCtx: ctx }); - // Go through each registered containers - for (const options of Object.values(registeredContainers)) { - await ctx.call('ldp.container.createAndAttach', { - containerUri: urlJoin(storageUrl, options.path), - options, - webId - }); - } - } - } - } -}; diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts new file mode 100644 index 000000000..97dc08a38 --- /dev/null +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -0,0 +1,74 @@ +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import getByTypeAction from './actions/getByType.ts'; +import getByUriAction from './actions/getByUri.ts'; +import getUriAction from './actions/getUri.ts'; +import listAction from './actions/list.ts'; +import registerAction from './actions/register.ts'; +import defaultOptions from './defaultOptions.ts'; + +const LdpRegistrySchema = { + name: 'ldp.registry' as const, + settings: { + baseUrl: null, + containers: [], + defaultOptions, + podProvider: false + }, + dependencies: ['ldp.container', 'api'], + actions: { + getByType: getByTypeAction, + getByUri: getByUriAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ path: { type: "string"; }; we... Remove this comment to see the full error message + getUri: getUriAction, + list: listAction, + register: registerAction + }, + async started() { + this.registeredContainers = {}; + if (this.settings.podProvider) { + // The auth.account service is a dependency only in POD provider config + await this.broker.waitForServices(['auth.account']); + } + for (let container of this.settings.containers) { + // Ensure backward compatibility + if (typeof container === 'string') container = { path: container }; + // We await each container registration so they happen in order (root container first)git + await this.actions.register(container); + } + }, + events: { + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId, accountData } = ctx.params; + // We want to add user's containers only in Pod provider config + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.podProvider) { + const storageUrl = await ctx.call('solid-storage.getUrl', { webId }); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + const registeredContainers = await this.actions.list({ dataset: accountData.username }, { parentCtx: ctx }); + // Go through each registered containers + for (const options of Object.values(registeredContainers)) { + await ctx.call('ldp.container.createAndAttach', { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. + containerUri: urlJoin(storageUrl, options.path), + options, + webId + }); + } + } + } + }) + } +} satisfies ServiceSchema; + +export default LdpRegistrySchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpRegistrySchema.name]: typeof LdpRegistrySchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.js b/src/middleware/packages/ldp/services/remote/actions/delete.ts similarity index 77% rename from src/middleware/packages/ldp/services/remote/actions/delete.js rename to src/middleware/packages/ldp/services/remote/actions/delete.ts index 7f1afdb6c..42ed9debe 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.js +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -6,10 +8,12 @@ module.exports = { }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } @@ -19,6 +23,7 @@ module.exports = { throw new Error(`Cannot delete remote resource in cache without a webId (Provided: ${webId})`); } const account = await ctx.call('auth.account.findByWebId', { webId }); + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = account.username; } @@ -53,13 +58,17 @@ module.exports = { resourceUri, oldData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.remote.deleted', returnValues, { meta: { webId: null, dataset: null } }); } return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/get.js b/src/middleware/packages/ldp/services/remote/actions/get.ts similarity index 77% rename from src/middleware/packages/ldp/services/remote/actions/get.js rename to src/middleware/packages/ldp/services/remote/actions/get.ts index b0c6b0443..92c01bf3a 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.js +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,26 +1,31 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); -const { cleanUndefined } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; +import { cleanUndefined } from '../../../utils.ts'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, webId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message accept: { type: 'string', default: MIME_TYPES.JSON }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, // Inspired from https://developer.chrome.com/docs/workbox/caching-strategies-overview/#caching-strategies strategy: { type: 'enum', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message values: ['cacheFirst', 'networkFirst', 'cacheOnly', 'networkOnly', 'staleWhileRevalidate'], default: 'cacheFirst' } }, async handler(ctx) { const { resourceUri, accept, jsonContext, ...rest } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // Without webId, we have no way to know which dataset to look in, so get from network @@ -31,6 +36,7 @@ module.exports = { if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } @@ -78,4 +84,6 @@ module.exports = { throw new Error(`Unknown strategy: ${strategy}`); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getGraph.js b/src/middleware/packages/ldp/services/remote/actions/getGraph.ts similarity index 79% rename from src/middleware/packages/ldp/services/remote/actions/getGraph.js rename to src/middleware/packages/ldp/services/remote/actions/getGraph.ts index fcd1723d3..6f0393bdb 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getGraph.js +++ b/src/middleware/packages/ldp/services/remote/actions/getGraph.ts @@ -1,6 +1,7 @@ -const { triple, namedNode, variable } = require('@rdfjs/data-model'); +import { triple, namedNode, variable } from '@rdfjs/data-model'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' } @@ -26,4 +27,6 @@ module.exports = { } return false; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.js b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts similarity index 70% rename from src/middleware/packages/ldp/services/remote/actions/getNetwork.js rename to src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index 889248a8a..0295a8c21 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.js +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,14 +1,20 @@ -const fetch = require('node-fetch'); -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); +import fetch from 'node-fetch'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message accept: { type: 'string', default: MIME_TYPES.JSON }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, @@ -16,12 +22,14 @@ module.exports = { }, async handler(ctx) { const { resourceUri, accept, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const headers = new fetch.Headers({ accept }); if (jsonContext) headers.set('JsonLdContext', JSON.stringify(jsonContext)); if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } @@ -57,4 +65,6 @@ module.exports = { } } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.js b/src/middleware/packages/ldp/services/remote/actions/getStored.ts similarity index 73% rename from src/middleware/packages/ldp/services/remote/actions/getStored.js rename to src/middleware/packages/ldp/services/remote/actions/getStored.ts index d76e0c62d..91db61562 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.js +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,14 +1,20 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); -const { MoleculerError } = require('moleculer').Errors; -const { buildBlankNodesQuery } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; +import { buildBlankNodesQuery } from '../../../utils.ts'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message accept: { type: 'string', default: MIME_TYPES.JSON }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, @@ -16,6 +22,7 @@ module.exports = { }, async handler(ctx) { const { resourceUri, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // No options will be returned by ldp.registry.getByUri unless the resource is in a local container (this is the case for activities) @@ -61,7 +68,10 @@ module.exports = { return result; } else { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.js b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts similarity index 82% rename from src/middleware/packages/ldp/services/remote/actions/isRemote.js rename to src/middleware/packages/ldp/services/remote/actions/isRemote.ts index a913e0ecb..4560eaeb1 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.js +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -8,6 +9,7 @@ module.exports = { }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; if (!urlJoin(resourceUri, '/').startsWith(this.settings.baseUrl)) { @@ -30,4 +32,6 @@ module.exports = { } } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.js b/src/middleware/packages/ldp/services/remote/actions/store.ts similarity index 76% rename from src/middleware/packages/ldp/services/remote/actions/store.js rename to src/middleware/packages/ldp/services/remote/actions/store.ts index f2ef5b580..eeef7caa2 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.js +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,12 +1,17 @@ -const { Errors: E } = require('moleculer-web'); -const { hasType } = require('../../../utils'); +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { defineAction } from 'moleculer'; +import { hasType } from '../../../utils.ts'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message resource: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message keepInSync: { type: 'boolean', default: false }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message mirrorGraph: { type: 'boolean', default: false }, webId: { type: 'string', optional: true }, dataset: { type: 'string', optional: true } @@ -88,6 +93,7 @@ module.exports = { dataset }); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.remote.stored', @@ -98,4 +104,6 @@ module.exports = { return resource; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/index.js b/src/middleware/packages/ldp/services/remote/index.ts similarity index 50% rename from src/middleware/packages/ldp/services/remote/index.js rename to src/middleware/packages/ldp/services/remote/index.ts index 1083c265f..63b7a1be6 100644 --- a/src/middleware/packages/ldp/services/remote/index.js +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,14 +1,16 @@ -const Schedule = require('moleculer-schedule'); -const deleteAction = require('./actions/delete'); -const getAction = require('./actions/get'); -const getGraphAction = require('./actions/getGraph'); -const getNetworkAction = require('./actions/getNetwork'); -const getStoredAction = require('./actions/getStored'); -const isRemoteAction = require('./actions/isRemote'); -const storeAction = require('./actions/store'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message +import Schedule from 'moleculer-schedule'; +import { ServiceSchema, defineAction } from 'moleculer'; +import deleteAction from './actions/delete.ts'; +import getAction from './actions/get.ts'; +import getGraphAction from './actions/getGraph.ts'; +import getNetworkAction from './actions/getNetwork.ts'; +import getStoredAction from './actions/getStored.ts'; +import isRemoteAction from './actions/isRemote.ts'; +import storeAction from './actions/store.ts'; -module.exports = { - name: 'ldp.remote', +const LdpRemoteSchema = { + name: 'ldp.remote' as const, mixins: [Schedule], settings: { baseUrl: null, @@ -17,21 +19,28 @@ module.exports = { }, dependencies: ['triplestore', 'jsonld'], actions: { + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message delete: deleteAction, get: getAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message getGraph: getGraphAction, getNetwork: getNetworkAction, getStored: getStoredAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message isRemote: isRemoteAction, store: storeAction, - runCron() { - this.updateSingleMirroredResources(); - } // Used by tests + + runCron: defineAction({ + // Used by tests + handler() { + this.updateSingleMirroredResources(); + } + }) }, methods: { async proxyAvailable() { const services = await this.broker.call('$node.services'); - return services.some(s => s.name === 'signature.proxy'); + return services.some((s: any) => s.name === 'signature.proxy'); }, async updateSingleMirroredResources() { if (!this.settings.podProvider) { @@ -46,7 +55,7 @@ module.exports = { ` }); - for (const resourceUri of singles.map(node => node.s.value)) { + for (const resourceUri of singles.map((node: any) => node.s.value)) { try { await this.actions.store({ resourceUri, @@ -54,6 +63,7 @@ module.exports = { mirrorGraph: true }); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 403 || e.code === 404 || e.code === 401) { await this.actions.delete({ resourceUri }); } else { @@ -72,4 +82,14 @@ module.exports = { handler: 'updateSingleMirroredResources' } ] -}; +} satisfies ServiceSchema; + +export default LdpRemoteSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpRemoteSchema.name]: typeof LdpRemoteSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts similarity index 69% rename from src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js rename to src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index 56eaa0f2c..0afa95952 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -1,10 +1,12 @@ -const { waitForResource } = require('../../../utils'); +import { defineAction } from 'moleculer'; +import { waitForResource } from '../../../utils.ts'; /** @type {import('moleculer').ServiceActionsSchema} */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message predicates: { type: 'array', optional: true }, delayMs: { type: 'number', optional: true }, maxTries: { type: 'number', optional: true }, @@ -13,6 +15,7 @@ module.exports = { webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, @@ -33,4 +36,6 @@ module.exports = { ) ); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/create.js b/src/middleware/packages/ldp/services/resource/actions/create.ts similarity index 78% rename from src/middleware/packages/ldp/services/resource/actions/create.js rename to src/middleware/packages/ldp/services/resource/actions/create.ts index ec05a017a..75c4dab06 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.js +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,9 +1,14 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resource: 'object', webId: { type: 'string', @@ -16,6 +21,7 @@ module.exports = { }, async handler(ctx) { let { resource, contentType } = ctx.params; + // @ts-expect-error const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourceUri = resource.id || resource['@id']; @@ -53,7 +59,7 @@ module.exports = { const triplesToAdd = newTriples.reverse(); - const newBlankNodes = newTriples.filter(triple => triple.object.termType === 'Variable'); + const newBlankNodes = newTriples.filter((triple: any) => triple.object.termType === 'Variable'); // Generate the query let query = ''; @@ -81,13 +87,17 @@ module.exports = { resourceUri, newData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.created', returnValues, { meta: { webId: null, dataset: null } }); } return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.ts similarity index 77% rename from src/middleware/packages/ldp/services/resource/actions/delete.js rename to src/middleware/packages/ldp/services/resource/actions/delete.ts index 8b85badce..4bfb399aa 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.js +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,13 +1,16 @@ -const fs = require('fs'); +import fs from 'fs'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', webId: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { @@ -60,15 +63,19 @@ module.exports = { containersUris, oldData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; ctx.call('triplestore.deleteOrphanBlankNodes'); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.deleted', returnValues, { meta: { webId: null, dataset: null } }); } return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.js b/src/middleware/packages/ldp/services/resource/actions/exist.ts similarity index 86% rename from src/middleware/packages/ldp/services/resource/actions/exist.js rename to src/middleware/packages/ldp/services/resource/actions/exist.ts index 19fd2a3df..961b7ae8f 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.js +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,6 +1,7 @@ -const { triple, namedNode, variable } = require('@rdfjs/data-model'); +import { triple, namedNode, variable } from '@rdfjs/data-model'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -9,6 +10,7 @@ module.exports = { }, async handler(ctx) { const { resourceUri, acceptTombstones } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let exist = await ctx.call('triplestore.tripleExist', { @@ -47,4 +49,6 @@ module.exports = { return exist; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.js b/src/middleware/packages/ldp/services/resource/actions/generateId.ts similarity index 64% rename from src/middleware/packages/ldp/services/resource/actions/generateId.js rename to src/middleware/packages/ldp/services/resource/actions/generateId.ts index de6659ae4..93c5daf2e 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.js +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -1,12 +1,17 @@ -const createSlug = require('speakingurl'); -const { v4: uuidv4 } = require('uuid'); -const urlJoin = require('url-join'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'spea... Remove this comment to see the full error message +import createSlug from 'speakingurl'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message +import { v4 as uuidv4 } from 'uuid'; +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message containerUri: 'string', slug: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message isContainer: { type: 'boolean', default: false } }, async handler(ctx) { @@ -24,7 +29,8 @@ module.exports = { if ((!this.settings.resourcesWithContainerPath || !containerUri) && !isContainer) { // Use the root container URI containerUri = this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) + ? // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) : this.settings.baseUrl; } @@ -59,4 +65,6 @@ module.exports = { return urlJoin(containerUri, slug || uuid); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.ts similarity index 76% rename from src/middleware/packages/ldp/services/resource/actions/get.js rename to src/middleware/packages/ldp/services/resource/actions/get.ts index 63476d41c..c375f2310 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,8 +1,12 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { buildBlankNodesQuery } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; +import { buildBlankNodesQuery } from '../../../utils.ts'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -10,11 +14,13 @@ module.exports = { accept: { type: 'string', optional: true }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { + // @ts-expect-error TS(2322): Type '(ctx: Context, Gener... Remove this comment to see the full error message async enabled(ctx) { // Do not cache remote resources as we have no mechanism to clear this cache const isRemote = await ctx.call('ldp.remote.isRemote', { resourceUri: ctx.params.resourceUri }); @@ -24,6 +30,7 @@ module.exports = { }, async handler(ctx) { const { resourceUri, accept, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (accept && accept !== MIME_TYPES.JSON) @@ -63,4 +70,6 @@ module.exports = { } }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.js b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts similarity index 69% rename from src/middleware/packages/ldp/services/resource/actions/getContainers.js rename to src/middleware/packages/ldp/services/resource/actions/getContainers.ts index 20bb62d4e..464689d83 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.js +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,13 +1,16 @@ -const { getContainerFromUri } = require('../../../utils'); +import { defineAction } from 'moleculer'; +import { getContainerFromUri } from '../../../utils.ts'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', dataset: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; // In the POD provider config, the root container with actors is not a real LDP container @@ -30,6 +33,8 @@ module.exports = { webId: 'system' }); - return result.map(node => node.containerUri.value); + return result.map((node: any) => node.containerUri.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.js b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts similarity index 55% rename from src/middleware/packages/ldp/services/resource/actions/getTypes.js rename to src/middleware/packages/ldp/services/resource/actions/getTypes.ts index cfb5c2a1c..8d8e28861 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.js +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -1,6 +1,9 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string' }, cache: { @@ -19,6 +22,8 @@ module.exports = { webId: 'system' }); - return result.map(node => node.type.value); + return result.map((node: any) => node.type.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.js b/src/middleware/packages/ldp/services/resource/actions/patch.ts similarity index 72% rename from src/middleware/packages/ldp/services/resource/actions/patch.js rename to src/middleware/packages/ldp/services/resource/actions/patch.ts index 1f48b3bef..37518525c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.js +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,6 +1,10 @@ -const { MoleculerError } = require('moleculer').Errors; +import { defineAction } from 'moleculer'; -function checkTriplesSubjectIsResource(triples, resourceUri) { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +function checkTriplesSubjectIsResource(triples: any, resourceUri: any) { for (const triple of triples) { switch (triple.subject.termType) { case 'NamedNode': @@ -16,16 +20,18 @@ function checkTriplesSubjectIsResource(triples, resourceUri) { } } -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToAdd: { type: 'array', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToRemove: { type: 'array', optional: true @@ -41,6 +47,7 @@ module.exports = { }, async handler(ctx) { let { resourceUri, triplesToAdd, triplesToRemove, skipInferenceCheck, webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; if (await ctx.call('ldp.remote.isRemote', { resourceUri })) @@ -67,6 +74,7 @@ module.exports = { if (triplesToRemove) { checkTriplesSubjectIsResource(triplesToRemove, resourceUri); + // @ts-expect-error TS(2345): Argument of type '{ updateType: string; delete: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'delete', delete: [{ type: 'bgp', triples: triplesToRemove }] @@ -75,6 +83,7 @@ module.exports = { if (triplesToAdd) { checkTriplesSubjectIsResource(triplesToAdd, resourceUri); + // @ts-expect-error TS(2345): Argument of type '{ updateType: string; insert: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'insert', insert: [{ type: 'bgp', triples: triplesToAdd }] @@ -92,13 +101,17 @@ module.exports = { triplesRemoved: triplesToRemove, skipInferenceCheck, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.patched', returnValues, { meta: { webId: null, dataset: null } }); } return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.ts similarity index 83% rename from src/middleware/packages/ldp/services/resource/actions/put.js rename to src/middleware/packages/ldp/services/resource/actions/put.ts index 7e85d0abd..df597e389 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.js +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,10 +1,15 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { cleanUndefined } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; +import { cleanUndefined } from '../../../utils.ts'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, @@ -20,6 +25,7 @@ module.exports = { async handler(ctx) { let { resource, contentType } = ctx.params; let { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; let newData; @@ -33,6 +39,7 @@ module.exports = { if (await ctx.call('ldp.remote.isRemote', { resourceUri })) throw new MoleculerError( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Remote resource ${resourceUri} cannot be modified (dataset: ${ctx.meta.dataset})`, 403, 'FORBIDDEN' @@ -96,10 +103,10 @@ module.exports = { // Keep track of blank nodes to use in WHERE clause const newBlankNodes = this.getTriplesDifference(newTriples, oldTriples).filter( - triple => triple.object.termType === 'Variable' + (triple: any) => triple.object.termType === 'Variable' ); const existingBlankNodes = oldTriples.filter( - triple => triple.object.termType === 'Variable' || triple.subject.termType === 'Variable' + (triple: any) => triple.object.termType === 'Variable' || triple.subject.termType === 'Variable' ); // Generate the query @@ -131,6 +138,7 @@ module.exports = { } ); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.resource.updated', @@ -139,6 +147,7 @@ module.exports = { oldData, newData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }, { @@ -158,4 +167,6 @@ module.exports = { webId }; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.js b/src/middleware/packages/ldp/services/resource/actions/upload.ts similarity index 57% rename from src/middleware/packages/ldp/services/resource/actions/upload.js rename to src/middleware/packages/ldp/services/resource/actions/upload.ts index 3069ed2c5..5f8c8b5a7 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.js +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -1,12 +1,18 @@ -const path = require('path'); -const fs = require('fs'); -const { MoleculerError } = require('moleculer').Errors; -const { getSlugFromUri, getContainerFromUri } = require('../../../utils'); +import path from 'path'; +import fs from 'fs'; +import { defineAction } from 'moleculer'; +import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; -module.exports = { +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message file: 'object' }, async handler(ctx) { @@ -24,10 +30,12 @@ module.exports = { try { await this.streamToFile(file.readableStream, localPath, this.settings.binary.maxSize); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 413) { throw e; // File too large } else { console.error(e); + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message throw new MoleculerError(e, 500, 'Server Error'); } } @@ -42,4 +50,6 @@ module.exports = { fileName }; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/index.js b/src/middleware/packages/ldp/services/resource/index.js deleted file mode 100644 index 48d936d94..000000000 --- a/src/middleware/packages/ldp/services/resource/index.js +++ /dev/null @@ -1,55 +0,0 @@ -const awaitCreateCompleteAction = require('./actions/awaitCreateComplete'); -const getAction = require('./actions/get'); -const createAction = require('./actions/create'); -const patchAction = require('./actions/patch'); -const putAction = require('./actions/put'); -const deleteAction = require('./actions/delete'); -const existAction = require('./actions/exist'); -const generateIdAction = require('./actions/generateId'); -const getContainersAction = require('./actions/getContainers'); -const getTypesAction = require('./actions/getTypes'); -const uploadAction = require('./actions/upload'); -const methods = require('./methods'); -const { getDatasetFromUri } = require('../../utils'); - -module.exports = { - name: 'ldp.resource', - settings: { - baseUrl: null, - podProvider: false, - mirrorGraphName: null, - preferredViewForResource: null, - binary: { - maxSize: '50Mb' - } - }, - dependencies: ['triplestore', 'jsonld'], - actions: { - awaitCreateComplete: awaitCreateCompleteAction, - create: createAction, - delete: deleteAction, - exist: existAction, - generateId: generateIdAction, - get: getAction, - getContainers: getContainersAction, - getTypes: getTypesAction, - patch: patchAction, - put: putAction, - upload: uploadAction - }, - hooks: { - before: { - '*'(ctx) { - if (this.settings.podProvider && !ctx.meta.dataset) { - // If we have a pod provider, guess the dataset from the URI - const uri = - ctx.params.resourceUri || (ctx.params.resource && (ctx.params.resource.id || ctx.params.resource['@id'])); - if (uri && uri.startsWith(this.settings.baseUrl)) { - ctx.meta.dataset = getDatasetFromUri(uri); - } - } - } - } - }, - methods -}; diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts new file mode 100644 index 000000000..cca5e4ed0 --- /dev/null +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -0,0 +1,69 @@ +import { ServiceSchema, defineAction } from 'moleculer'; +import awaitCreateCompleteAction from './actions/awaitCreateComplete.ts'; +import getAction from './actions/get.ts'; +import createAction from './actions/create.ts'; +import patchAction from './actions/patch.ts'; +import putAction from './actions/put.ts'; +import deleteAction from './actions/delete.ts'; +import existAction from './actions/exist.ts'; +import generateIdAction from './actions/generateId.ts'; +import getContainersAction from './actions/getContainers.ts'; +import getTypesAction from './actions/getTypes.ts'; +import uploadAction from './actions/upload.ts'; +import methods from './methods.ts'; +import { getDatasetFromUri } from '../../utils.ts'; + +const LdpResourceSchema = { + name: 'ldp.resource' as const, + settings: { + baseUrl: null, + podProvider: false, + mirrorGraphName: null, + preferredViewForResource: null, + binary: { + maxSize: '50Mb' + } + }, + dependencies: ['triplestore', 'jsonld'], + actions: { + awaitCreateComplete: awaitCreateCompleteAction, + create: createAction, + delete: deleteAction, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message + exist: existAction, + generateId: generateIdAction, + get: getAction, + getContainers: getContainersAction, + getTypes: getTypesAction, + patch: patchAction, + put: putAction, + upload: uploadAction + }, + hooks: { + before: { + '*'(ctx) { + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message + if (this.settings.podProvider && !ctx.meta.dataset) { + // If we have a pod provider, guess the dataset from the URI + const uri = + ctx.params.resourceUri || (ctx.params.resource && (ctx.params.resource.id || ctx.params.resource['@id'])); + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'string ... Remove this comment to see the full error message + if (uri && uri.startsWith(this.settings.baseUrl)) { + ctx.meta.dataset = getDatasetFromUri(uri); + } + } + } + } + }, + methods +} satisfies ServiceSchema; + +export default LdpResourceSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpResourceSchema.name]: typeof LdpResourceSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/resource/methods.js b/src/middleware/packages/ldp/services/resource/methods.ts similarity index 55% rename from src/middleware/packages/ldp/services/resource/methods.js rename to src/middleware/packages/ldp/services/resource/methods.ts index 1e6afcf47..99f0684f7 100644 --- a/src/middleware/packages/ldp/services/resource/methods.js +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -1,17 +1,25 @@ -const fs = require('fs'); -const bytes = require('bytes'); -const { variable } = require('@rdfjs/data-model'); -const { MoleculerError } = require('moleculer').Errors; +import fs from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'byte... Remove this comment to see the full error message +import bytes from 'bytes'; +import rdfparseModule from 'rdf-parse'; +import streamifyString from 'streamify-string'; +import { variable } from '@rdfjs/data-model'; + +import { Errors } from 'moleculer'; + +const rdfParser = rdfparseModule.default; + +const { MoleculerError } = Errors; // TODO put each method in a different file (problems with "this" not working) -module.exports = { - streamToFile(inputStream, filePath, maxSize) { +export default { + streamToFile(inputStream: any, filePath: any, maxSize: any) { return new Promise((resolve, reject) => { const fileWriteStream = fs.createWriteStream(filePath); const maxSizeInBytes = maxSize && bytes.parse(maxSize); let fileSize = 0; inputStream - .on('data', chunk => { + .on('data', (chunk: any) => { if (maxSizeInBytes) { fileSize += chunk.length; if (fileSize > maxSizeInBytes) { @@ -25,13 +33,34 @@ module.exports = { .on('error', reject); }); }, + // @ts-expect-error + async bodyToTriples(body, contentType) { + if (contentType === MIME_TYPES.JSON) { + // @ts-expect-error + return await this.broker.call('jsonld.parser.toQuads', { input: body }); + } + if (!(typeof body === 'string')) throw new MoleculerError('no body provided', 400, 'BAD_REQUEST'); + return new Promise((resolve, reject) => { + const textStream = streamifyString(body); + // @ts-expect-error + const res = []; + rdfParser + .parse(textStream, { contentType }) + .on('data', quad => res.push(quad)) + .on('error', error => reject(error)) + // @ts-expect-error + .on('end', () => resolve(res)); + }); + }, // Filter out triples whose subject is not the resource itself // We don't want to update or delete resources with IDs - filterOtherNamedNodes(triples, resourceUri) { - return triples.filter(triple => !(triple.subject.termType === 'NamedNode' && triple.subject.value !== resourceUri)); + filterOtherNamedNodes(triples: any, resourceUri: any) { + return triples.filter( + (triple: any) => !(triple.subject.termType === 'NamedNode' && triple.subject.value !== resourceUri) + ); }, - convertBlankNodesToVars(triples) { - return triples.map(triple => { + convertBlankNodesToVars(triples: any) { + return triples.map((triple: any) => { if (triple.subject.termType === 'BlankNode') { triple.subject = variable(triple.subject.value); } @@ -42,10 +71,10 @@ module.exports = { }); }, // Exclude from triples1 the triples which also exist in triples2 - getTriplesDifference(triples1, triples2) { - return triples1.filter(t1 => !triples2.some(t2 => t1.equals(t2))); + getTriplesDifference(triples1: any, triples2: any) { + return triples1.filter((t1: any) => !triples2.some((t2: any) => t1.equals(t2))); }, - nodeToString(node) { + nodeToString(node: any) { switch (node.termType) { case 'Variable': return `?${node.value}`; @@ -66,26 +95,28 @@ module.exports = { throw new Error(`Unknown node type: ${node.termType}`); } }, - buildJsonVariable(identifier, triples) { - const blankVariables = triples.filter(t => t.subject.value.localeCompare(identifier) === 0); + buildJsonVariable(identifier: any, triples: any) { + const blankVariables = triples.filter((t: any) => t.subject.value.localeCompare(identifier) === 0); const json = {}; let allIdentifiers = [identifier]; for (const blankVariable of blankVariables) { if (blankVariable.object.termType === 'Variable') { const jsonVariable = this.buildJsonVariable(blankVariable.object.value, triples); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message json[blankVariable.predicate.value] = jsonVariable.json; allIdentifiers = allIdentifiers.concat(jsonVariable.allIdentifiers); } else { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message json[blankVariable.predicate.value] = blankVariable.object.value; } } return { json, allIdentifiers }; }, - removeDuplicatedVariables(triples) { - const roots = triples.filter(n => n.object.termType === 'Variable' && n.subject.termType !== 'Variable'); - const rootsIdentifiers = roots.reduce((previousValue, currentValue) => { + removeDuplicatedVariables(triples: any) { + const roots = triples.filter((n: any) => n.object.termType === 'Variable' && n.subject.termType !== 'Variable'); + const rootsIdentifiers = roots.reduce((previousValue: any, currentValue: any) => { const result = previousValue; - if (!result.find(i => i.localeCompare(currentValue.object.value) === 0)) { + if (!result.find((i: any) => i.localeCompare(currentValue.object.value) === 0)) { result.push(currentValue.object.value); } return result; @@ -99,9 +130,10 @@ module.exports = { allIdentifiers: jsonVariable.allIdentifiers }); } - const keepVariables = []; + const keepVariables: any = []; const duplicatedVariables = []; for (var rootJson of rootsJson) { + // @ts-expect-error TS(7006): Parameter 'kp' implicitly has an 'any' type. if (keepVariables.find(kp => kp.stringified.localeCompare(rootJson.stringified) === 0)) { duplicatedVariables.push(rootJson); } else { @@ -110,19 +142,19 @@ module.exports = { } const allRemovedIdentifiers = duplicatedVariables.map(dv => dv.allIdentifiers).flat(); const removedDuplicatedVariables = triples.filter( - t => !allRemovedIdentifiers.includes(t.object.value) && !allRemovedIdentifiers.includes(t.subject.value) + (t: any) => !allRemovedIdentifiers.includes(t.object.value) && !allRemovedIdentifiers.includes(t.subject.value) ); return removedDuplicatedVariables; }, - triplesToString(triples) { + triplesToString(triples: any) { return triples .map( - triple => + (triple: any) => `${this.nodeToString(triple.subject)} <${triple.predicate.value}> ${this.nodeToString(triple.object)} .` ) .join('\n'); }, - bindNewBlankNodes(triples) { - return triples.map(triple => `BIND (BNODE() AS ?${triple.object.value}) .`).join('\n'); + bindNewBlankNodes(triples: any) { + return triples.map((triple: any) => `BIND (BNODE() AS ?${triple.object.value}) .`).join('\n'); } }; diff --git a/src/middleware/packages/ldp/tsconfig.json b/src/middleware/packages/ldp/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/ldp/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/ldp/utils.js b/src/middleware/packages/ldp/utils.ts similarity index 74% rename from src/middleware/packages/ldp/utils.js rename to src/middleware/packages/ldp/utils.ts index 46140f54b..87823ae30 100644 --- a/src/middleware/packages/ldp/utils.js +++ b/src/middleware/packages/ldp/utils.ts @@ -1,10 +1,9 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); - const regexProtocolAndHostAndPort = new RegExp('^http(s)?:\\/\\/([\\w-\\.:]*)'); -function createFragmentURL(baseUrl, serverUrl) { +function createFragmentURL(baseUrl: any, serverUrl: any) { let fragment = 'me'; const res = serverUrl.match(regexProtocolAndHostAndPort); if (res) fragment = res[2].replace('-', '_').replace('.', '_').replace(':', '_'); @@ -12,11 +11,11 @@ function createFragmentURL(baseUrl, serverUrl) { return urlJoin(baseUrl, `#${fragment}`); } -const isMirror = (resourceUri, baseUrl) => { +const isMirror = (resourceUri: any, baseUrl: any) => { return !urlJoin(resourceUri, '/').startsWith(baseUrl); }; -const buildBlankNodesQuery = depth => { +const buildBlankNodesQuery = (depth: any) => { const BASE_QUERY = '?s1 ?p1 ?o1 .'; let construct = BASE_QUERY; let where = ''; @@ -40,13 +39,13 @@ const buildBlankNodesQuery = depth => { return { construct, where }; }; -const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); +const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); /** If the value starts with `http` or `urn:` */ -const isURI = value => +const isURI = (value: any) => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); -const buildFiltersQuery = filters => { +const buildFiltersQuery = (filters: any) => { let where = ''; if (filters) { Object.keys(filters).forEach((predicate, i) => { @@ -67,18 +66,16 @@ const buildFiltersQuery = filters => { return { where }; }; -const isObject = value => typeof value === 'object' && !Array.isArray(value) && value !== null; - -const getSlugFromUri = uri => uri.match(new RegExp(`.*/(.*)`))[1]; +const isObject = (value: any) => typeof value === 'object' && !Array.isArray(value) && value !== null; +const getSlugFromUri = (uri: any) => uri.match(new RegExp(`.*/(.*)`))[1]; /** @deprecated Use the ldp.resource.getContainers action instead */ -const getContainerFromUri = uri => uri.match(new RegExp(`(.*)/.*`))[1]; +const getContainerFromUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; -const getParentContainerUri = uri => uri.match(new RegExp(`(.*)/.*`))[1]; +const getParentContainerUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; +const getParentContainerPath = (path: any) => path.match(new RegExp(`(.*)/.*`))[1]; -const getParentContainerPath = path => path.match(new RegExp(`(.*)/.*`))[1]; - -const getPathFromUri = uri => { +const getPathFromUri = (uri: any) => { try { const urlObject = new URL(uri); return urlObject.pathname; @@ -88,7 +85,7 @@ const getPathFromUri = uri => { }; // Transforms "http://localhost:3000/alice/data" to "alice" -const getDatasetFromUri = uri => { +const getDatasetFromUri = (uri: any) => { const path = getPathFromUri(uri); if (path) { const parts = path.split('/'); @@ -99,7 +96,7 @@ const getDatasetFromUri = uri => { }; // Transforms "http://localhost:3000/alice/data" to "http://localhost:3000/alice" -const getWebIdFromUri = uri => { +const getWebIdFromUri = (uri: any) => { const path = getPathFromUri(uri); if (path) { const parts = path.split('/'); @@ -112,27 +109,26 @@ const getWebIdFromUri = uri => { } }; -const getId = resource => resource.id || resource['@id']; - -const getType = resource => resource.type || resource['@type']; +const getId = (resource: any) => resource.id || resource['@id']; +const getType = (resource: any) => resource.type || resource['@type']; -const hasType = (resource, type) => { +const hasType = (resource: any, type: any) => { const resourceType = getType(resource); return Array.isArray(resourceType) ? resourceType.includes(type) : resourceType === type; }; -const isContainer = resource => hasType(resource, 'ldp:Container'); +const isContainer = (resource: any) => hasType(resource, 'ldp:Container'); /** @deprecated Use arrayOf instead */ -const defaultToArray = value => (!value ? undefined : Array.isArray(value) ? value : [value]); +const defaultToArray = (value: any) => (!value ? undefined : Array.isArray(value) ? value : [value]); -const delay = t => new Promise(resolve => setTimeout(resolve, t)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); // Remove undefined values from object -const cleanUndefined = obj => +const cleanUndefined = (obj: any) => Object.keys(obj).reduce((acc, key) => (obj[key] === undefined ? acc : { ...acc, [key]: obj[key] }), {}); -const parseJson = json => { +const parseJson = (json: any) => { try { if (json) { return JSON.parse(json); @@ -143,7 +139,7 @@ const parseJson = json => { return json; }; -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -163,7 +159,7 @@ const arrayOf = value => { * `undefined`. * @type {import("./utilTypes").waitForResource} */ -const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { +const waitForResource = async (delayMs: any, fieldNames: any, maxTries: any, callback: any) => { for (let i = 0; i < maxTries; i += 1) { const result = await callback(); // If a result (and the expected field, if required) is present, return. @@ -175,7 +171,7 @@ const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { throw new Error(`Waiting for resource failed. No results after ${maxTries} tries`); }; -module.exports = { +export { buildBlankNodesQuery, buildFiltersQuery, isURL, diff --git a/src/middleware/packages/middlewares/index.js b/src/middleware/packages/middlewares/index.ts similarity index 78% rename from src/middleware/packages/middlewares/index.js rename to src/middleware/packages/middlewares/index.ts index 314668ccb..afc69f9c6 100644 --- a/src/middleware/packages/middlewares/index.js +++ b/src/middleware/packages/middlewares/index.ts @@ -1,26 +1,30 @@ -const { MoleculerError } = require('moleculer').Errors; -const { negotiateTypeMime, MIME_TYPES } = require('@semapps/mime-types'); -const Busboy = require('busboy'); -const streams = require('memory-streams'); +import { negotiateTypeMime, MIME_TYPES } from '@semapps/mime-types'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'busb... Remove this comment to see the full error message +import Busboy from 'busboy'; +import streams from 'memory-streams'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; const handledMimeTypes = [MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE, MIME_TYPES.SPARQL_UPDATE]; // Put requested URL and query string in meta so that services may use them independently // Set here https://github.com/moleculerjs/moleculer-web/blob/c6ec80056a64ea15c57d6e2b946ce978d673ae92/src/index.js#L151-L161 -const parseUrl = async (req, res, next) => { +const parseUrl = async (req: any, res: any, next: any) => { req.$ctx.meta.requestUrl = req.parsedUrl; req.$ctx.meta.queryString = req.query; next(); }; -const parseHeader = async (req, res, next) => { +const parseHeader = async (req: any, res: any, next: any) => { req.$ctx.meta.headers = req.headers ? { ...req.headers } : {}; // Also remember original headers (needed for HTTP signatures verification and files type negociation) req.$ctx.meta.originalHeaders = req.headers ? { ...req.headers } : {}; next(); }; -const negotiateContentType = (req, res, next) => { +const negotiateContentType = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateContentType middleware`); @@ -44,7 +48,7 @@ const negotiateContentType = (req, res, next) => { } }; -const negotiateAccept = (req, res, next) => { +const negotiateAccept = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateAccept middleware`); @@ -63,14 +67,14 @@ const negotiateAccept = (req, res, next) => { } }; -const parseRawBody = (req, res, next) => { +const parseRawBody = (req: any, res: any, next: any) => { if (!req.$ctx.meta.contentTypeNegotiated) throw new Error(`The negotiateContentType middleware must be added before the parseRawBody middleware`); // We don't want to parse the raw body for files, otherwise the stream will not be available anymore if (handledMimeTypes.includes(req.$ctx.meta.headers['content-type'])) { let data = ''; - req.on('data', chunk => { + req.on('data', (chunk: any) => { data += chunk; }); req.on('end', () => { @@ -84,7 +88,7 @@ const parseRawBody = (req, res, next) => { } }; -const parseJson = async (req, res, next) => { +const parseJson = async (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseJson middleware`); @@ -103,7 +107,7 @@ const parseJson = async (req, res, next) => { next(); }; -const parseFile = (req, res, next) => { +const parseFile = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseFile middleware`); @@ -112,10 +116,12 @@ const parseFile = (req, res, next) => { if (!handledMimeTypes.includes(contentType) && (req.method === 'POST' || req.method === 'PUT')) { if (contentType.includes('multipart/form-data')) { const busboy = new Busboy({ headers: req.$ctx.meta.headers }); - const files = []; - busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { + const files: any = []; + busboy.on('file', (fieldname: any, file: any, filename: any, encoding: any, mimetype: any) => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. const readableStream = new streams.ReadableStream(); - file.on('data', data => readableStream.push(data)); + // @ts-expect-error + file.on('data', (data: any) => readableStream.push(data)); files.push({ fieldname, readableStream, @@ -124,7 +130,7 @@ const parseFile = (req, res, next) => { mimetype }); }); - busboy.on('field', (fieldname, val) => { + busboy.on('field', (fieldname: any, val: any) => { req.$params[fieldname] = val; }); busboy.on('finish', () => { @@ -148,31 +154,31 @@ const parseFile = (req, res, next) => { } }; -const saveDatasetMeta = (req, res, next) => { +const saveDatasetMeta = (req: any, res: any, next: any) => { req.$ctx.meta.dataset = req.$params.username; next(); }; /** @type {(msg: string) => never} */ -const throw400 = msg => { +const throw400 = (msg: any) => { throw new MoleculerError(msg, 400, 'BAD_REQUEST', { status: 'Bad Request', text: msg }); }; /** @type {(msg: string) => never} */ -const throw403 = msg => { +const throw403 = (msg: any) => { throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED', { status: 'Forbidden', text: msg }); }; /** @type {(msg: string) => never} */ -const throw404 = msg => { +const throw404 = (msg: any) => { throw new MoleculerError('Forbidden', 404, 'NOT_FOUND', { status: 'Not found', text: msg }); }; -const throw500 = msg => { +const throw500 = (msg: any) => { throw new MoleculerError(msg, 500, 'INTERNAL_SERVER_ERROR', { status: 'Server Error', text: msg }); }; -module.exports = { +export { parseUrl, parseHeader, parseRawBody, diff --git a/src/middleware/packages/middlewares/package.json b/src/middleware/packages/middlewares/package.json index 7387361ef..810fcba17 100644 --- a/src/middleware/packages/middlewares/package.json +++ b/src/middleware/packages/middlewares/package.json @@ -7,13 +7,18 @@ "dependencies": { "@semapps/mime-types": "1.1.4", "busboy": "^0.3.1", - "memory-streams": "^0.1.3", - "moleculer": "^0.14.18" + "memory-streams": "^0.1.3" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/middlewares/tsconfig.json b/src/middleware/packages/middlewares/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/middlewares/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/migration/index.js b/src/middleware/packages/migration/index.js deleted file mode 100644 index 64f1cfa83..000000000 --- a/src/middleware/packages/migration/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - MigrationService: require('./service') -}; diff --git a/src/middleware/packages/migration/index.ts b/src/middleware/packages/migration/index.ts new file mode 100644 index 000000000..b96e5278a --- /dev/null +++ b/src/middleware/packages/migration/index.ts @@ -0,0 +1,3 @@ +import MigrationService from './service.ts'; + +export { MigrationService }; diff --git a/src/middleware/packages/migration/package.json b/src/middleware/packages/migration/package.json index d45956cdd..d6059970b 100644 --- a/src/middleware/packages/migration/package.json +++ b/src/middleware/packages/migration/package.json @@ -9,9 +9,15 @@ "@semapps/webacl": "1.1.4" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/migration/service.js b/src/middleware/packages/migration/service.js deleted file mode 100644 index d33873a3e..000000000 --- a/src/middleware/packages/migration/service.js +++ /dev/null @@ -1,181 +0,0 @@ -const { getAclUriFromResourceUri } = require('@semapps/webacl'); -const { getContainerFromUri } = require('@semapps/ldp'); - -module.exports = { - name: 'migration', - settings: { - baseUrl: undefined - }, - created() { - if (!this.settings.baseUrl) { - throw new Error('The baseUrl setting of the migration service is mandatory'); - } - }, - actions: { - async replacePredicate(ctx) { - const { oldPredicate, newPredicate, dataset } = ctx.params; - - if (!oldPredicate.startsWith('http')) - throw new Error(`oldPredicate must be a full URI. Received: ${oldPredicate}`); - if (!newPredicate.startsWith('http')) - throw new Error(`newPredicate must be a full URI. Received: ${oldPredicate}`); - - this.logger.info(`Replacing predicate ${oldPredicate} with ${newPredicate}...`); - - await ctx.call('triplestore.update', { - query: ` - DELETE { ?s <${oldPredicate}> ?o . } - INSERT { ?s <${newPredicate}> ?o . } - WHERE { ?s <${oldPredicate}> ?o . } - `, - dataset, - webId: 'system' - }); - }, - async moveResourcesToContainer(ctx) { - const { oldContainerUri, newContainerUri, dataset } = ctx.params; - - const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: oldContainerUri }); - - for (let oldResourceUri of resourcesUris) { - const newResourceUri = oldResourceUri.replace(oldContainerUri, newContainerUri); - - await this.actions.moveResource({ oldResourceUri, newResourceUri, dataset }, { parentCtx: ctx }); - - this.logger.info( - `All resources moved. You should consider deleting the old container with this command: call ldp.container.delete --containerUri ${oldContainerUri} --webId system` - ); - } - }, - async moveResource(ctx) { - const { oldResourceUri, newResourceUri, dataset } = ctx.params; - - this.logger.info(`Moving resource ${oldResourceUri} to ${newResourceUri}...`); - - await ctx.call('triplestore.update', { - query: ` - DELETE { <${oldResourceUri}> ?p ?o } - INSERT { <${newResourceUri}> ?p ?o } - WHERE { <${oldResourceUri}> ?p ?o } - `, - dataset, - webId: 'system' - }); - - await ctx.call('triplestore.update', { - query: ` - DELETE { ?s ?p <${oldResourceUri}> } - INSERT { ?s ?p <${newResourceUri}> } - WHERE { ?s ?p <${oldResourceUri}> } - `, - dataset, - webId: 'system' - }); - - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?s ?p <${oldResourceUri}> } - INSERT { ?s ?p <${newResourceUri}> } - WHERE { ?s ?p <${oldResourceUri}> } - `, - dataset, - webId: 'system' - }); - - const oldContainerUri = getContainerFromUri(oldResourceUri); - const newContainerUri = getContainerFromUri(newResourceUri); - - await ctx.call('triplestore.update', { - query: ` - PREFIX ldp: - DELETE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } - INSERT { <${newContainerUri}> ldp:contains <${newResourceUri}> } - WHERE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } - `, - dataset, - webId: 'system' - }); - - await this.actions.moveAclRights({ newResourceUri, oldResourceUri, dataset }, { parentCtx: ctx }); - }, - async moveAclGroup(ctx) { - const { oldGroupUri, newGroupUri, dataset } = ctx.params; - - this.logger.info(`Moving ACL group ${oldGroupUri} to ${newGroupUri}...`); - - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { <${oldGroupUri}> ?p ?o } - INSERT { <${newGroupUri}> ?p ?o } - WHERE { <${oldGroupUri}> ?p ?o } - `, - dataset, - webId: 'system' - }); - - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?s ?p <${oldGroupUri}> } - INSERT { ?s ?p <${newGroupUri}> } - WHERE { ?s ?p <${oldGroupUri}> } - `, - dataset, - webId: 'system' - }); - - await this.actions.moveAclRights( - { newResourceUri: newGroupUri, oldResourceUri: oldGroupUri, dataset }, - { parentCtx: ctx } - ); - }, - async moveAclRights(ctx) { - const { oldResourceUri, newResourceUri, dataset } = ctx.params; - - for (const right of ['Read', 'Append', 'Write', 'Control']) { - const oldResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, oldResourceUri)}#${right}`; - const newResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, newResourceUri)}#${right}`; - - this.logger.info(`Moving ACL rights ${oldResourceAclUri} to ${newResourceAclUri}...`); - - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { <${oldResourceAclUri}> ?p ?o } - INSERT { <${newResourceAclUri}> ?p ?o } - WHERE { <${oldResourceAclUri}> ?p ?o } - `, - dataset, - webId: 'system' - }); - } - }, - async clearUserRights(ctx) { - const { userUri, dataset } = ctx.params; - - // Remove user from all WebACL groups he may be member of - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?groupUri <${userUri}> } - WHERE { ?groupUri <${userUri}> } - `, - dataset, - webId: 'system' - }); - - // Remove all authorization given specifically to this user - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?authorizationUri <${userUri}> } - WHERE { ?authorizationUri <${userUri}> } - `, - dataset, - webId: 'system' - }); - } - } -}; diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts new file mode 100644 index 000000000..f7589311f --- /dev/null +++ b/src/middleware/packages/migration/service.ts @@ -0,0 +1,209 @@ +import { getAclUriFromResourceUri } from '@semapps/webacl'; +import { getContainerFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const MigrationSchema = { + name: 'migration' as const, + settings: { + baseUrl: undefined + }, + created() { + if (!this.settings.baseUrl) { + throw new Error('The baseUrl setting of the migration service is mandatory'); + } + }, + actions: { + replacePredicate: defineAction({ + async handler(ctx) { + const { oldPredicate, newPredicate, dataset } = ctx.params; + + if (!oldPredicate.startsWith('http')) + throw new Error(`oldPredicate must be a full URI. Received: ${oldPredicate}`); + if (!newPredicate.startsWith('http')) + throw new Error(`newPredicate must be a full URI. Received: ${oldPredicate}`); + + this.logger.info(`Replacing predicate ${oldPredicate} with ${newPredicate}...`); + + await ctx.call('triplestore.update', { + query: ` + DELETE { ?s <${oldPredicate}> ?o . } + INSERT { ?s <${newPredicate}> ?o . } + WHERE { ?s <${oldPredicate}> ?o . } + `, + dataset, + webId: 'system' + }); + } + }), + + moveResourcesToContainer: defineAction({ + async handler(ctx) { + const { oldContainerUri, newContainerUri, dataset } = ctx.params; + + const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: oldContainerUri }); + + for (let oldResourceUri of resourcesUris) { + const newResourceUri = oldResourceUri.replace(oldContainerUri, newContainerUri); + + await this.actions.moveResource({ oldResourceUri, newResourceUri, dataset }, { parentCtx: ctx }); + + this.logger.info( + `All resources moved. You should consider deleting the old container with this command: call ldp.container.delete --containerUri ${oldContainerUri} --webId system` + ); + } + } + }), + + moveResource: defineAction({ + async handler(ctx) { + const { oldResourceUri, newResourceUri, dataset } = ctx.params; + + this.logger.info(`Moving resource ${oldResourceUri} to ${newResourceUri}...`); + + await ctx.call('triplestore.update', { + query: ` + DELETE { <${oldResourceUri}> ?p ?o } + INSERT { <${newResourceUri}> ?p ?o } + WHERE { <${oldResourceUri}> ?p ?o } + `, + dataset, + webId: 'system' + }); + + await ctx.call('triplestore.update', { + query: ` + DELETE { ?s ?p <${oldResourceUri}> } + INSERT { ?s ?p <${newResourceUri}> } + WHERE { ?s ?p <${oldResourceUri}> } + `, + dataset, + webId: 'system' + }); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { ?s ?p <${oldResourceUri}> } + INSERT { ?s ?p <${newResourceUri}> } + WHERE { ?s ?p <${oldResourceUri}> } + `, + dataset, + webId: 'system' + }); + + const oldContainerUri = getContainerFromUri(oldResourceUri); + const newContainerUri = getContainerFromUri(newResourceUri); + + await ctx.call('triplestore.update', { + query: ` + PREFIX ldp: + DELETE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } + INSERT { <${newContainerUri}> ldp:contains <${newResourceUri}> } + WHERE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } + `, + dataset, + webId: 'system' + }); + + await this.actions.moveAclRights({ newResourceUri, oldResourceUri, dataset }, { parentCtx: ctx }); + } + }), + + moveAclGroup: defineAction({ + async handler(ctx) { + const { oldGroupUri, newGroupUri, dataset } = ctx.params; + + this.logger.info(`Moving ACL group ${oldGroupUri} to ${newGroupUri}...`); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { <${oldGroupUri}> ?p ?o } + INSERT { <${newGroupUri}> ?p ?o } + WHERE { <${oldGroupUri}> ?p ?o } + `, + dataset, + webId: 'system' + }); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { ?s ?p <${oldGroupUri}> } + INSERT { ?s ?p <${newGroupUri}> } + WHERE { ?s ?p <${oldGroupUri}> } + `, + dataset, + webId: 'system' + }); + + await this.actions.moveAclRights( + { newResourceUri: newGroupUri, oldResourceUri: oldGroupUri, dataset }, + { parentCtx: ctx } + ); + } + }), + + moveAclRights: defineAction({ + async handler(ctx) { + const { oldResourceUri, newResourceUri, dataset } = ctx.params; + + for (const right of ['Read', 'Append', 'Write', 'Control']) { + const oldResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, oldResourceUri)}#${right}`; + const newResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, newResourceUri)}#${right}`; + + this.logger.info(`Moving ACL rights ${oldResourceAclUri} to ${newResourceAclUri}...`); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { <${oldResourceAclUri}> ?p ?o } + INSERT { <${newResourceAclUri}> ?p ?o } + WHERE { <${oldResourceAclUri}> ?p ?o } + `, + dataset, + webId: 'system' + }); + } + } + }), + + clearUserRights: defineAction({ + async handler(ctx) { + const { userUri, dataset } = ctx.params; + + // Remove user from all WebACL groups he may be member of + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { ?groupUri <${userUri}> } + WHERE { ?groupUri <${userUri}> } + `, + dataset, + webId: 'system' + }); + + // Remove all authorization given specifically to this user + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { ?authorizationUri <${userUri}> } + WHERE { ?authorizationUri <${userUri}> } + `, + dataset, + webId: 'system' + }); + } + }) + } +} satisfies ServiceSchema; + +export default MigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [MigrationSchema.name]: typeof MigrationSchema; + } + } +} diff --git a/src/middleware/packages/migration/tsconfig.json b/src/middleware/packages/migration/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/migration/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/mime-types/constants.js b/src/middleware/packages/mime-types/constants.ts similarity index 97% rename from src/middleware/packages/mime-types/constants.js rename to src/middleware/packages/mime-types/constants.ts index f1f58a44d..09d2c3090 100644 --- a/src/middleware/packages/mime-types/constants.js +++ b/src/middleware/packages/mime-types/constants.ts @@ -68,7 +68,4 @@ const TYPES_REPO = [ } ]; -module.exports = { - MIME_TYPES, - TYPES_REPO -}; +export { MIME_TYPES, TYPES_REPO }; diff --git a/src/middleware/packages/mime-types/index.js b/src/middleware/packages/mime-types/index.ts similarity index 58% rename from src/middleware/packages/mime-types/index.js rename to src/middleware/packages/mime-types/index.ts index 1899e9473..4a7a732b4 100644 --- a/src/middleware/packages/mime-types/index.js +++ b/src/middleware/packages/mime-types/index.ts @@ -1,9 +1,13 @@ -const Negotiator = require('negotiator'); -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES, TYPES_REPO } = require('./constants'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'nego... Remove this comment to see the full error message +import Negotiator from 'negotiator'; +import { MIME_TYPES, TYPES_REPO } from './constants.ts'; -const negotiateType = function (incomingType) { - const availableMediaTypes = []; +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const negotiateType = function (incomingType: any) { + const availableMediaTypes: any = []; const negotiatorType = incomingType; TYPES_REPO.forEach(trSupported => { trSupported.mimeFull.forEach(tr => availableMediaTypes.push(tr)); @@ -20,21 +24,21 @@ const negotiateType = function (incomingType) { throw new MoleculerError(`Type not supported : ${incomingType}`, 400, 'TYPE_NOT_SUPPORTED'); }; -const negotiateTypeMime = function (incomingType) { +const negotiateTypeMime = function (incomingType: any) { return negotiateType(incomingType).mime; }; -const negotiateTypeN3 = function (incomingType) { +const negotiateTypeN3 = function (incomingType: any) { return negotiateType(incomingType).N3Mapping; }; -const negotiateTypeFuseki = function (incomingType) { +const negotiateTypeFuseki = function (incomingType: any) { return negotiateType(incomingType).fusekiMapping; }; // Return true if the provided `type` is accepted by the allowedTypes. // Note that allowedTypes may include wild cards such as "image/*" -const isMimeTypeMatching = (type, types) => { +const isMimeTypeMatching = (type: any, types: any) => { const negotiator = new Negotiator({ headers: { accept: Array.isArray(types) ? types.join(', ') : types @@ -46,11 +50,4 @@ const isMimeTypeMatching = (type, types) => { return !!result; }; -module.exports = { - MIME_TYPES, - negotiateType, - negotiateTypeMime, - negotiateTypeN3, - negotiateTypeFuseki, - isMimeTypeMatching -}; +export { MIME_TYPES, negotiateType, negotiateTypeMime, negotiateTypeN3, negotiateTypeFuseki, isMimeTypeMatching }; diff --git a/src/middleware/packages/mime-types/package.json b/src/middleware/packages/mime-types/package.json index 396505f20..8d691d8df 100644 --- a/src/middleware/packages/mime-types/package.json +++ b/src/middleware/packages/mime-types/package.json @@ -5,14 +5,19 @@ "license": "Apache-2.0", "author": "Virtual Assembly", "dependencies": { - "moleculer": "^0.14.18", "negotiator": "^0.6.2" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/mime-types/tsconfig.json b/src/middleware/packages/mime-types/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/mime-types/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/nodeinfo/index.js b/src/middleware/packages/nodeinfo/index.js deleted file mode 100644 index e712eab29..000000000 --- a/src/middleware/packages/nodeinfo/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - NodeinfoService: require('./service') -}; diff --git a/src/middleware/packages/nodeinfo/index.ts b/src/middleware/packages/nodeinfo/index.ts new file mode 100644 index 000000000..916529fe9 --- /dev/null +++ b/src/middleware/packages/nodeinfo/index.ts @@ -0,0 +1,3 @@ +import NodeinfoService from './service.ts'; + +export { NodeinfoService }; diff --git a/src/middleware/packages/nodeinfo/package.json b/src/middleware/packages/nodeinfo/package.json index 29ceb9720..7336b5245 100644 --- a/src/middleware/packages/nodeinfo/package.json +++ b/src/middleware/packages/nodeinfo/package.json @@ -8,9 +8,15 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/nodeinfo/service.js b/src/middleware/packages/nodeinfo/service.ts similarity index 50% rename from src/middleware/packages/nodeinfo/service.js rename to src/middleware/packages/nodeinfo/service.ts index 5fe8b5d4c..238b84189 100644 --- a/src/middleware/packages/nodeinfo/service.js +++ b/src/middleware/packages/nodeinfo/service.ts @@ -1,8 +1,9 @@ -const path = require('path'); -const urlJoin = require('url-join'); +import path from 'path'; +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction } from 'moleculer'; const NodeinfoService = { - name: 'nodeinfo', + name: 'nodeinfo' as const, settings: { baseUrl: null, software: { @@ -57,36 +58,55 @@ const NodeinfoService = { }); }, actions: { - addLink(ctx) { - const { rel, href } = ctx.params; - this.links.push({ rel, href }); - }, - getLinks() { - return { - links: this.links - }; - }, - async getSchema(ctx) { - const users = await this.actions.getUsersCount({}, { parentCtx: ctx }); - return { - version: '2.1', - software: this.settings.software, - protocols: this.settings.protocols, - services: this.settings.services, - openRegistrations: this.settings.openRegistrations, - usage: { users }, - metadata: this.settings.metadata - }; - }, - // Overwrite this method to return your users count - async getUsersCount() { - return { - total: 0, - activeHalfYear: 0, - activeMonth: 0 - }; - } + addLink: defineAction({ + handler(ctx) { + const { rel, href } = ctx.params; + this.links.push({ rel, href }); + } + }), + + getLinks: defineAction({ + handler() { + return { + links: this.links + }; + } + }), + + getSchema: defineAction({ + async handler(ctx) { + const users = await this.actions.getUsersCount({}, { parentCtx: ctx }); + return { + version: '2.1', + software: this.settings.software, + protocols: this.settings.protocols, + services: this.settings.services, + openRegistrations: this.settings.openRegistrations, + usage: { users }, + metadata: this.settings.metadata + }; + } + }), + + getUsersCount: defineAction({ + // Overwrite this method to return your users count + async handler() { + return { + total: 0, + activeHalfYear: 0, + activeMonth: 0 + }; + } + }) } -}; +} satisfies ServiceSchema; -module.exports = NodeinfoService; +export default NodeinfoService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [NodeinfoService.name]: typeof NodeinfoService; + } + } +} diff --git a/src/middleware/packages/nodeinfo/tsconfig.json b/src/middleware/packages/nodeinfo/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/nodeinfo/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/notifications/index.js b/src/middleware/packages/notifications/index.js deleted file mode 100644 index 9b3e45ba1..000000000 --- a/src/middleware/packages/notifications/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - DigestNotificationsService: require('./services/digest/service'), - ExpoPushNotificationsService: require('./services/expo-push/service'), - SingleMailNotificationsService: require('./services/single-mail/service') -}; diff --git a/src/middleware/packages/notifications/index.ts b/src/middleware/packages/notifications/index.ts new file mode 100644 index 000000000..88fce6ba8 --- /dev/null +++ b/src/middleware/packages/notifications/index.ts @@ -0,0 +1,5 @@ +import DigestNotificationsService from './services/digest/service.ts'; +import ExpoPushNotificationsService from './services/expo-push/service.ts'; +import SingleMailNotificationsService from './services/single-mail/service.ts'; + +export { DigestNotificationsService, ExpoPushNotificationsService, SingleMailNotificationsService }; diff --git a/src/middleware/packages/notifications/package.json b/src/middleware/packages/notifications/package.json index a4371c65f..97851ce1d 100644 --- a/src/middleware/packages/notifications/package.json +++ b/src/middleware/packages/notifications/package.json @@ -9,15 +9,20 @@ "@semapps/triplestore": "1.1.4", "cron-parser": "^4.3.0", "expo-server-sdk": "^3.4.0", - "moleculer": "^0.14.18", "moleculer-db": "^0.8.15", "moleculer-mail": "^1.2.5", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/notifications/services/digest/service.js b/src/middleware/packages/notifications/services/digest/service.js deleted file mode 100644 index 2c83533f8..000000000 --- a/src/middleware/packages/notifications/services/digest/service.js +++ /dev/null @@ -1,149 +0,0 @@ -const MailService = require('moleculer-mail'); -const cronParser = require('cron-parser'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const DigestSubscriptionService = require('./subscription'); - -const DigestNotificationsService = { - name: 'digest', - mixins: [MailService], - settings: { - frequencies: { - // Example for everyday at 5pm: - // daily: '0 0 17 * * *', - }, - timeZone: 'Europe/Paris', - subscriptionsDataset: 'settings', - templateFolder: null, - // See moleculer-mail doc https://github.com/moleculerjs/moleculer-addons/tree/master/packages/moleculer-mail - from: null, - transport: null, - // Data available in all templates - data: {} - }, - dependencies: ['digest.subscription'], - created() { - this.broker.createService({ - mixins: [DigestSubscriptionService], - adapter: new TripleStoreAdapter({ type: 'DigestSubscription', dataset: this.settings.subscriptionsDataset }) - }); - }, - async started() { - if (!this.createJob) - throw new Error('The QueueMixin of moleculer-bull must be added for the DigestService to work'); - - for (const [jobName, cronExp] of Object.entries(this.settings.frequencies)) { - // See https://github.com/OptimalBits/bull/blob/master/REFERENCE.md#queueadd - this.createJob('build', jobName, {}, { repeat: { cron: cronExp, tz: this.settings.timeZone } }); - } - }, - actions: { - async build(ctx) { - const { frequency, timestamp } = ctx.params; - const success = []; - const failures = []; - - const currentDate = timestamp ? new Date(timestamp) : new Date(); - - const interval = cronParser.parseExpression(this.settings.frequencies[frequency], { - currentDate, - tz: this.settings.timeZone - }); - - const previousDate = new Date(interval.prev().toISOString()); - - const subscriptions = await ctx.call('digest.subscription.find', { query: { frequency } }); - - for (const subscription of subscriptions) { - try { - const subscriber = await ctx.call('activitypub.actor.get', { actorUri: subscription.webId }); - const account = await ctx.call('auth.account.findByWebId', { webId: subscription.webId }); - const newActivities = await ctx.call('activitypub.inbox.getByDates', { - collectionUri: subscriber.inbox, - fromDate: previousDate, - toDate: currentDate - }); - - if (newActivities.length > 0) { - const notifications = []; - const notificationsByCategories = {}; - - // Map received activities to notifications - for (const activity of newActivities) { - const notification = await ctx.call('activity-mapping.map', { - activity, - locale: subscription.locale || account.locale - }); - if (notification && (await this.filterNotification(notification, subscription, notifications))) { - notifications.push(notification); - if (notification.category) { - if (!notificationsByCategories[notification.category]) - notificationsByCategories[notification.category] = { - category: notification.category, - notifications: [] - }; - notificationsByCategories[notification.category].notifications.push(notification); - } - } - } - - // If we have at least one notification, send email - if (notifications.length > 0) { - await this.actions.send( - { - to: subscription.email || account.email, - template: 'digest', - locale: subscription.locale || account.locale, - data: { - notifications, - notificationsByCategories, - subscription, - subscriber, - account - } - }, - { - parentCtx: ctx - } - ); - - success.push({ - email: subscription.email || account.email, - locale: subscription.locale || account.locale, - numNotifications: notifications.length, - categories: Object.keys(notificationsByCategories), - notificationsIds: notifications.map(n => n.id), - subscription - }); - } - } - } catch (e) { - failures.push({ - error: e.message, - subscription - }); - } - } - - return { failures, success }; - } - }, - methods: { - // Optional method called for each notification - // Return true if you want the notification to be included in the digest - async filterNotification(notification, subscription) { - return true; - } - }, - queues: { - build: [ - { - name: '*', - process(job) { - return this.actions.build({ frequency: job.name, timestamp: job.opts.prevMillis }); - } - } - ] - } -}; - -module.exports = DigestNotificationsService; diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts new file mode 100644 index 000000000..8c2e19501 --- /dev/null +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -0,0 +1,167 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message +import MailService from 'moleculer-mail'; +import cronParser from 'cron-parser'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; +import DigestSubscriptionService from './subscription.ts'; + +const DigestNotificationsService = { + name: 'digest' as const, + mixins: [MailService], + settings: { + frequencies: { + // Example for everyday at 5pm: + // daily: '0 0 17 * * *', + }, + timeZone: 'Europe/Paris', + subscriptionsDataset: 'settings', + templateFolder: null, + // See moleculer-mail doc https://github.com/moleculerjs/moleculer-addons/tree/master/packages/moleculer-mail + from: null, + transport: null, + // Data available in all templates + data: {} + }, + dependencies: ['digest.subscription'], + created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "digest.subscr... Remove this comment to see the full error message + this.broker.createService({ + mixins: [DigestSubscriptionService], + adapter: new TripleStoreAdapter({ type: 'DigestSubscription', dataset: this.settings.subscriptionsDataset }) + }); + }, + async started() { + if (!this.createJob) + throw new Error('The QueueMixin of moleculer-bull must be added for the DigestService to work'); + + for (const [jobName, cronExp] of Object.entries(this.settings.frequencies)) { + // See https://github.com/OptimalBits/bull/blob/master/REFERENCE.md#queueadd + this.createJob('build', jobName, {}, { repeat: { cron: cronExp, tz: this.settings.timeZone } }); + } + }, + actions: { + build: defineAction({ + async handler(ctx) { + const { frequency, timestamp } = ctx.params; + const success = []; + const failures = []; + + const currentDate = timestamp ? new Date(timestamp) : new Date(); + + const interval = cronParser.parseExpression(this.settings.frequencies[frequency], { + currentDate, + tz: this.settings.timeZone + }); + + const previousDate = new Date(interval.prev().toISOString()); + + const subscriptions = await ctx.call('digest.subscription.find', { query: { frequency } }); + + for (const subscription of subscriptions) { + try { + const subscriber = await ctx.call('activitypub.actor.get', { actorUri: subscription.webId }); + const account = await ctx.call('auth.account.findByWebId', { webId: subscription.webId }); + const newActivities = await ctx.call('activitypub.inbox.getByDates', { + collectionUri: subscriber.inbox, + fromDate: previousDate, + toDate: currentDate + }); + + if (newActivities.length > 0) { + const notifications = []; + const notificationsByCategories = {}; + + // Map received activities to notifications + for (const activity of newActivities) { + const notification = await ctx.call('activity-mapping.map', { + activity, + locale: subscription.locale || account.locale + }); + if (notification && (await this.filterNotification(notification, subscription, notifications))) { + notifications.push(notification); + if (notification.category) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + if (!notificationsByCategories[notification.category]) + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + notificationsByCategories[notification.category] = { + category: notification.category, + notifications: [] + }; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + notificationsByCategories[notification.category].notifications.push(notification); + } + } + } + + // If we have at least one notification, send email + if (notifications.length > 0) { + await this.actions.send( + { + to: subscription.email || account.email, + template: 'digest', + locale: subscription.locale || account.locale, + data: { + notifications, + notificationsByCategories, + subscription, + subscriber, + account + } + }, + { + parentCtx: ctx + } + ); + + success.push({ + email: subscription.email || account.email, + locale: subscription.locale || account.locale, + numNotifications: notifications.length, + categories: Object.keys(notificationsByCategories), + notificationsIds: notifications.map(n => n.id), + subscription + }); + } + } + } catch (e) { + failures.push({ + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + error: e.message, + subscription + }); + } + } + + return { failures, success }; + } + }) + }, + methods: { + // Optional method called for each notification + // Return true if you want the notification to be included in the digest + async filterNotification(notification, subscription) { + return true; + } + }, + queues: { + build: [ + { + name: '*', + process(job: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ name:... Remove this comment to see the full error message + return this.actions.build({ frequency: job.name, timestamp: job.opts.prevMillis }); + } + } + ] + } +} satisfies ServiceSchema; + +export default DigestNotificationsService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [DigestNotificationsService.name]: typeof DigestNotificationsService; + } + } +} diff --git a/src/middleware/packages/notifications/services/digest/subscription.js b/src/middleware/packages/notifications/services/digest/subscription.js deleted file mode 100644 index 6cd17c169..000000000 --- a/src/middleware/packages/notifications/services/digest/subscription.js +++ /dev/null @@ -1,19 +0,0 @@ -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); - -module.exports = { - name: 'digest.subscription', - mixins: [DbService], - adapter: new TripleStoreAdapter({ type: 'DigestSubscription', dataset: 'settings' }), - settings: { - idField: '@id' - }, - dependencies: ['triplestore'], - actions: { - async findByWebId(ctx) { - const { webId } = ctx.params; - const subscriptions = await this._find(ctx, { query: { webId } }); - return subscriptions.length > 0 ? subscriptions[0] : null; - } - } -}; diff --git a/src/middleware/packages/notifications/services/digest/subscription.ts b/src/middleware/packages/notifications/services/digest/subscription.ts new file mode 100644 index 000000000..4d760bf93 --- /dev/null +++ b/src/middleware/packages/notifications/services/digest/subscription.ts @@ -0,0 +1,32 @@ +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const DigestSubscriptionSchema = { + name: 'digest.subscription' as const, + mixins: [DbService], + adapter: new TripleStoreAdapter({ type: 'DigestSubscription', dataset: 'settings' }), + settings: { + idField: '@id' + }, + dependencies: ['triplestore'], + actions: { + findByWebId: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const subscriptions = await this._find(ctx, { query: { webId } }); + return subscriptions.length > 0 ? subscriptions[0] : null; + } + }) + } +} satisfies ServiceSchema; + +export default DigestSubscriptionSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [DigestSubscriptionSchema.name]: typeof DigestSubscriptionSchema; + } + } +} diff --git a/src/middleware/packages/notifications/services/expo-push/device.js b/src/middleware/packages/notifications/services/expo-push/device.js deleted file mode 100644 index b27d3e6cd..000000000 --- a/src/middleware/packages/notifications/services/expo-push/device.js +++ /dev/null @@ -1,86 +0,0 @@ -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); - -const ExpoPushDeviceService = { - name: 'expo-push.device', - mixins: [DbService], - adapter: new TripleStoreAdapter({ type: 'Device', dataset: 'settings' }), - settings: { - idField: '@id', - newDeviceNotification: { - message: null, - data: {} - } - }, - actions: { - async subscribe(ctx) { - const { name, yearClass, userUri, pushToken } = ctx.params; - - let device = await this.actions.find( - { - query: { - ownedBy: userUri, - pushToken: pushToken - } - }, - { parentCtx: ctx } - ); - - if (!device['ldp:contains']) { - device = await this.actions.create( - { - name: name, - yearClass: yearClass, - ownedBy: userUri, - pushToken: pushToken, - addedAt: new Date().toISOString() - }, - { parentCtx: ctx } - ); - - if (this.settings.newDeviceNotification && this.settings.newDeviceNotification.message) { - await ctx.call('push.notification.send', { - to: userUri, - ...this.settings.newDeviceNotification - }); - } - } else { - // If there was an error message on the device, clear it - device = await this.actions.update( - { - '@id': device['ldp:contains'][0]['@id'], - name: name, - yearClass: yearClass, - errorMessage: null - }, - { parentCtx: ctx } - ); - } - - return device; - }, - async findUsersDevices(ctx) { - const devices = []; - - for (const userUri of ctx.params.users) { - const container = await this.actions.find( - { - query: { - ownedBy: userUri, - errorMessage: null - } - }, - { parentCtx: ctx } - ); - - if (container['ldp:contains']) { - devices.push(...container['ldp:contains']); - } - } - - return devices; - } - } -}; - -module.exports = ExpoPushDeviceService; diff --git a/src/middleware/packages/notifications/services/expo-push/device.ts b/src/middleware/packages/notifications/services/expo-push/device.ts new file mode 100644 index 000000000..431ff6308 --- /dev/null +++ b/src/middleware/packages/notifications/services/expo-push/device.ts @@ -0,0 +1,100 @@ +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const ExpoPushDeviceService = { + name: 'expo-push.device' as const, + mixins: [DbService], + adapter: new TripleStoreAdapter({ type: 'Device', dataset: 'settings' }), + settings: { + idField: '@id', + newDeviceNotification: { + message: null, + data: {} + } + }, + actions: { + subscribe: defineAction({ + async handler(ctx) { + const { name, yearClass, userUri, pushToken } = ctx.params; + + let device = await this.actions.find( + { + query: { + ownedBy: userUri, + pushToken: pushToken + } + }, + { parentCtx: ctx } + ); + + if (!device['ldp:contains']) { + device = await this.actions.create( + { + name: name, + yearClass: yearClass, + ownedBy: userUri, + pushToken: pushToken, + addedAt: new Date().toISOString() + }, + { parentCtx: ctx } + ); + + if (this.settings.newDeviceNotification && this.settings.newDeviceNotification.message) { + await ctx.call('push.notification.send', { + to: userUri, + ...this.settings.newDeviceNotification + }); + } + } else { + // If there was an error message on the device, clear it + device = await this.actions.update( + { + '@id': device['ldp:contains'][0]['@id'], + name: name, + yearClass: yearClass, + errorMessage: null + }, + { parentCtx: ctx } + ); + } + + return device; + } + }), + + findUsersDevices: defineAction({ + async handler(ctx) { + const devices = []; + + for (const userUri of ctx.params.users) { + const container = await this.actions.find( + { + query: { + ownedBy: userUri, + errorMessage: null + } + }, + { parentCtx: ctx } + ); + + if (container['ldp:contains']) { + devices.push(...container['ldp:contains']); + } + } + + return devices; + } + }) + } +} satisfies ServiceSchema; + +export default ExpoPushDeviceService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ExpoPushDeviceService.name]: typeof ExpoPushDeviceService; + } + } +} diff --git a/src/middleware/packages/notifications/services/expo-push/notification.js b/src/middleware/packages/notifications/services/expo-push/notification.js deleted file mode 100644 index 4b87f40dc..000000000 --- a/src/middleware/packages/notifications/services/expo-push/notification.js +++ /dev/null @@ -1,155 +0,0 @@ -const DbService = require('moleculer-db'); -const { Expo } = require('expo-server-sdk'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); - -const ExpoPushNotificationService = { - name: 'expo-push.notification', - mixins: [DbService], - adapter: new TripleStoreAdapter({ type: 'PushNotification', dataset: 'settings' }), - settings: { - idField: '@id' - }, - started() { - this.expo = new Expo(); - - // Check receipts every 5 minutes - setInterval(this.actions.checkReceipts, 5 * 60 * 1000); - }, - actions: { - async send(ctx) { - await this.actions.queue(ctx.params, { parentCtx: ctx }); - - this.actions.processQueue({}, { parentCtx: ctx }); - }, - async queue(ctx) { - const { to, message, data } = ctx.params; - - const devices = await ctx.call('push.device.findUsersDevices', { - users: Array.isArray(to) ? to : [to] - }); - - for (const device of devices) { - await this.actions.create( - { - deviceId: device.id, - addedAt: new Date().toISOString(), - status: 'queued', - message: JSON.stringify({ - to: device.pushToken, - body: message, - data - }) - }, - { parentCtx: ctx } - ); - } - }, - async processQueue(ctx) { - const notifications = await this.findByStatus('queued', ctx); - - for (const notification of notifications) { - const message = JSON.parse(notification['semapps:message']); - - if (!Expo.isExpoPushToken(message.to)) { - await this.markAsError(notification['@id'], `${message.to} is not a valid Expo push token`, ctx); - } else { - const receipt = await this.expo.sendPushNotificationsAsync([message]); - - // NOTE: Not all tickets have IDs; for example, tickets for notifications - // that could not be enqueued will have error information and no receipt ID. - if (receipt[0].id) { - await this.actions.update( - { - '@id': notification['@id'], - status: 'processed', - receiptId: receipt[0].id - }, - { parentCtx: ctx } - ); - } else { - // NOTE: If a ticket contains an error code in ticket.details.error, you - // must handle it appropriately. The error codes are listed in the Expo - // documentation: - // https://docs.expo.io/versions/latest/guides/push-notifications#response-format - await this.markAsError(notification['@id'], receipt.details.error, ctx); - } - } - } - }, - async checkReceipts(ctx) { - const notifications = await this.findByStatus('processed', ctx); - - if (notifications) { - const receiptIdChunks = this.expo.chunkPushNotificationReceiptIds( - notifications.map(notification => notification['semapps:receiptId']) - ); - - // Like sending notifications, there are different strategies you could use - // to retrieve batches of receipts from the Expo service. - for (const chunk of receiptIdChunks) { - try { - const receipts = await this.expo.getPushNotificationReceiptsAsync(chunk); - - // The receipts specify whether Apple or Google successfully received the - // notification and information about an error, if one occurred. - for (const receiptId in receipts) { - let { status, message, details } = receipts[receiptId]; - const notificationId = notifications.find(notification => notification.receiptId === receiptId)['@id']; - - if (status === 'ok') { - await this.actions.update( - { - '@id': notificationId, - status: 'checked', - receiptStatus: status - }, - { parentCtx: ctx } - ); - } else if (status === 'error') { - // Append the error code to the message for easier debug - if (details && details.error) { - // The error codes are listed in the Expo documentation: - // https://docs.expo.io/versions/latest/guides/push-notifications/#individual-errors - message = `Error code ${details.error}. ${message}`; - } - - await this.markAsError(notificationId, message, ctx); - } - } - } catch (error) { - console.error(error); - } - } - } - } - }, - methods: { - async findByStatus(status, ctx) { - const collection = await this.actions.find( - { - query: { status } - }, - { parentCtx: ctx } - ); - return collection['ldp:contains'] || []; - }, - async markAsError(notificationId, message, ctx) { - const notification = await this.actions.update( - { - '@id': notificationId, - status: 'error', - errorMessage: message - }, - { parentCtx: ctx } - ); - - // Also mark device as error - await ctx.call('push.device.update', { - '@id': notification.deviceId, - errorMessage: message - }); - } - } -}; - -module.exports = ExpoPushNotificationService; diff --git a/src/middleware/packages/notifications/services/expo-push/notification.ts b/src/middleware/packages/notifications/services/expo-push/notification.ts new file mode 100644 index 000000000..934d73ea4 --- /dev/null +++ b/src/middleware/packages/notifications/services/expo-push/notification.ts @@ -0,0 +1,177 @@ +import DbService from 'moleculer-db'; +import { Expo } from 'expo-server-sdk'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const ExpoPushNotificationService = { + name: 'expo-push.notification' as const, + mixins: [DbService], + adapter: new TripleStoreAdapter({ type: 'PushNotification', dataset: 'settings' }), + settings: { + idField: '@id' + }, + started() { + this.expo = new Expo(); + + // Check receipts every 5 minutes + setInterval(this.actions.checkReceipts, 5 * 60 * 1000); + }, + actions: { + send: defineAction({ + async handler(ctx) { + await this.actions.queue(ctx.params, { parentCtx: ctx }); + + this.actions.processQueue({}, { parentCtx: ctx }); + } + }), + + queue: defineAction({ + async handler(ctx) { + const { to, message, data } = ctx.params; + + const devices = await ctx.call('push.device.findUsersDevices', { + users: Array.isArray(to) ? to : [to] + }); + + for (const device of devices) { + await this.actions.create( + { + deviceId: device.id, + addedAt: new Date().toISOString(), + status: 'queued', + message: JSON.stringify({ + to: device.pushToken, + body: message, + data + }) + }, + { parentCtx: ctx } + ); + } + } + }), + + processQueue: defineAction({ + async handler(ctx) { + const notifications = await this.findByStatus('queued', ctx); + + for (const notification of notifications) { + const message = JSON.parse(notification['semapps:message']); + + if (!Expo.isExpoPushToken(message.to)) { + await this.markAsError(notification['@id'], `${message.to} is not a valid Expo push token`, ctx); + } else { + const receipt = await this.expo.sendPushNotificationsAsync([message]); + + // NOTE: Not all tickets have IDs; for example, tickets for notifications + // that could not be enqueued will have error information and no receipt ID. + if (receipt[0].id) { + await this.actions.update( + { + '@id': notification['@id'], + status: 'processed', + receiptId: receipt[0].id + }, + { parentCtx: ctx } + ); + } else { + // NOTE: If a ticket contains an error code in ticket.details.error, you + // must handle it appropriately. The error codes are listed in the Expo + // documentation: + // https://docs.expo.io/versions/latest/guides/push-notifications#response-format + await this.markAsError(notification['@id'], receipt.details.error, ctx); + } + } + } + } + }), + + checkReceipts: defineAction({ + async handler(ctx) { + const notifications = await this.findByStatus('processed', ctx); + + if (notifications) { + const receiptIdChunks = this.expo.chunkPushNotificationReceiptIds( + notifications.map((notification: any) => notification['semapps:receiptId']) + ); + + // Like sending notifications, there are different strategies you could use + // to retrieve batches of receipts from the Expo service. + for (const chunk of receiptIdChunks) { + try { + const receipts = await this.expo.getPushNotificationReceiptsAsync(chunk); + + // The receipts specify whether Apple or Google successfully received the + // notification and information about an error, if one occurred. + for (const receiptId in receipts) { + let { status, message, details } = receipts[receiptId]; + const notificationId = notifications.find((notification: any) => notification.receiptId === receiptId)[ + '@id' + ]; + + if (status === 'ok') { + await this.actions.update( + { + '@id': notificationId, + status: 'checked', + receiptStatus: status + }, + { parentCtx: ctx } + ); + } else if (status === 'error') { + // Append the error code to the message for easier debug + if (details && details.error) { + // The error codes are listed in the Expo documentation: + // https://docs.expo.io/versions/latest/guides/push-notifications/#individual-errors + message = `Error code ${details.error}. ${message}`; + } + + await this.markAsError(notificationId, message, ctx); + } + } + } catch (error) { + console.error(error); + } + } + } + } + }) + }, + methods: { + async findByStatus(status, ctx) { + const collection = await this.actions.find( + { + query: { status } + }, + { parentCtx: ctx } + ); + return collection['ldp:contains'] || []; + }, + async markAsError(notificationId, message, ctx) { + const notification = await this.actions.update( + { + '@id': notificationId, + status: 'error', + errorMessage: message + }, + { parentCtx: ctx } + ); + + // Also mark device as error + await ctx.call('push.device.update', { + '@id': notification.deviceId, + errorMessage: message + }); + } + } +} satisfies ServiceSchema; + +export default ExpoPushNotificationService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ExpoPushNotificationService.name]: typeof ExpoPushNotificationService; + } + } +} diff --git a/src/middleware/packages/notifications/services/expo-push/service.js b/src/middleware/packages/notifications/services/expo-push/service.ts similarity index 62% rename from src/middleware/packages/notifications/services/expo-push/service.js rename to src/middleware/packages/notifications/services/expo-push/service.ts index 7a8f283b8..0a6c7b047 100644 --- a/src/middleware/packages/notifications/services/expo-push/service.js +++ b/src/middleware/packages/notifications/services/expo-push/service.ts @@ -1,9 +1,10 @@ -const path = require('path'); -const ExpoPushDeviceService = require('./device'); -const ExpoPushNotificationService = require('./notification'); +import path from 'path'; +import { ServiceSchema } from 'moleculer'; +import ExpoPushDeviceService from './device.ts'; +import ExpoPushNotificationService from './notification.ts'; const ExpoPushService = { - name: 'expo-push', + name: 'expo-push' as const, settings: { baseUrl: null, newDeviceNotification: { @@ -13,6 +14,7 @@ const ExpoPushService = { }, dependencies: ['api'], created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "expo-push.dev... Remove this comment to see the full error message this.broker.createService({ mixins: [ExpoPushDeviceService], settings: { @@ -20,6 +22,7 @@ const ExpoPushService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "expo-push.not... Remove this comment to see the full error message this.broker.createService({ mixins: [ExpoPushNotificationService] }); }, async started() { @@ -43,6 +46,14 @@ const ExpoPushService = { } }); } -}; +} satisfies ServiceSchema; -module.exports = ExpoPushService; +export default ExpoPushService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ExpoPushService.name]: typeof ExpoPushService; + } + } +} diff --git a/src/middleware/packages/notifications/services/single-mail/service.js b/src/middleware/packages/notifications/services/single-mail/service.js deleted file mode 100644 index 918cd194f..000000000 --- a/src/middleware/packages/notifications/services/single-mail/service.js +++ /dev/null @@ -1,98 +0,0 @@ -const urlJoin = require('url-join'); -const path = require('path'); -const MailService = require('moleculer-mail'); -const { getSlugFromUri } = require('@semapps/ldp'); - -const delay = t => new Promise(resolve => setTimeout(resolve, t)); - -const SingleMailNotificationsService = { - name: 'notifications.single-mail', - mixins: [MailService], - settings: { - defaultLocale: 'en', - defaultFrontUrl: null, - color: '#E2003B', - delay: 0, - podProvider: false, - // See moleculer-mail doc https://github.com/moleculerjs/moleculer-addons/tree/master/packages/moleculer-mail - templateFolder: path.join(__dirname, '../../templates'), - from: null, - transport: null, - data: {} - }, - events: { - async 'activitypub.inbox.received'(ctx) { - const { activity, recipients } = ctx.params; - - if (this.settings.delay) { - await delay(this.settings.delay); - } - - for (const recipientUri of recipients) { - const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); - - if (account) { - ctx.meta.webId = recipientUri; - ctx.meta.dataset = this.settings.podProvider ? getSlugFromUri(recipientUri) : undefined; - - const locale = account?.preferredLocale || this.settings.defaultLocale; - const notification = await ctx.call('activity-mapping.map', { activity, locale }); - - if (notification && (await this.filterNotification(notification, activity, recipientUri))) { - if (notification.actionLink) - notification.actionLink = await this.formatLink(notification.actionLink, recipientUri); - - await this.queueMail(ctx, notification.key, { - to: account.email, - locale, - data: { - ...notification, - color: this.settings.color, - descriptionWithBr: notification.description - ? notification.description.replace(/\r\n|\r|\n/g, '
') - : undefined - } - }); - } - } else { - this.logger.warn(`No account found for local recipient ${recipientUri}`); - } - } - } - }, - methods: { - // Optional method called for each notification - // Return true if you want the notification to be sent by email - async filterNotification(notification, activity, recipientUri) { - return true; - }, - // Method called to format "actionLink" returned for each notification - // You can overwrite it to adapt it to your needs - async formatLink(link, recipientUri) { - if (link && !link.startsWith('http')) { - return urlJoin(this.settings.defaultFrontUrl, link); - } - return link; - }, - async queueMail(ctx, key, payload) { - payload.template = 'single-mail'; - if (this.createJob) { - return this.createJob('sendMail', key, payload); - } - await this.actions.send(payload, { parentCtx: ctx }); - } - }, - queues: { - sendMail: { - name: '*', - async process(job) { - job.progress(0); - const result = await this.actions.send(job.data); - job.progress(100); - return result; - } - } - } -}; - -module.exports = SingleMailNotificationsService; diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts new file mode 100644 index 000000000..c9c9f1ec4 --- /dev/null +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -0,0 +1,126 @@ +import urlJoin from 'url-join'; +import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message +import MailService from 'moleculer-mail'; +import { getSlugFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import { fileURLToPath } from 'url'; + +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); + +const SingleMailNotificationsService = { + name: 'notifications.single-mail' as const, + mixins: [MailService], + settings: { + defaultLocale: 'en', + defaultFrontUrl: null, + color: '#E2003B', + delay: 0, + podProvider: false, + // See moleculer-mail doc https://github.com/moleculerjs/moleculer-addons/tree/master/packages/moleculer-mail + templateFolder: path.join(__dirname, '../../templates'), + from: null, + transport: null, + data: {} + }, + events: { + 'activitypub.inbox.received': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message + const { activity, recipients } = ctx.params; + + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.delay) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + await delay(this.settings.delay); + } + + for (const recipientUri of recipients) { + const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); + + if (account) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + ctx.meta.webId = recipientUri; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + ctx.meta.dataset = this.settings.podProvider ? getSlugFromUri(recipientUri) : undefined; + + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + const locale = account?.preferredLocale || this.settings.defaultLocale; + const notification = await ctx.call('activity-mapping.map', { activity, locale }); + + // @ts-expect-error TS(2339): Property 'filterNotification' does not exist on ty... Remove this comment to see the full error message + if (notification && (await this.filterNotification(notification, activity, recipientUri))) { + if (notification.actionLink) + // @ts-expect-error TS(2339): Property 'formatLink' does not exist on type 'Serv... Remove this comment to see the full error message + notification.actionLink = await this.formatLink(notification.actionLink, recipientUri); + + // @ts-expect-error TS(2339): Property 'queueMail' does not exist on type 'Servi... Remove this comment to see the full error message + await this.queueMail(ctx, notification.key, { + to: account.email, + locale, + data: { + ...notification, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + color: this.settings.color, + descriptionWithBr: notification.description + ? notification.description.replace(/\r\n|\r|\n/g, '
') + : undefined + } + }); + } + } else { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message + this.logger.warn(`No account found for local recipient ${recipientUri}`); + } + } + } + }) + }, + methods: { + // Optional method called for each notification + // Return true if you want the notification to be sent by email + async filterNotification(notification, activity, recipientUri) { + return true; + }, + // Method called to format "actionLink" returned for each notification + // You can overwrite it to adapt it to your needs + async formatLink(link, recipientUri) { + if (link && !link.startsWith('http')) { + return urlJoin(this.settings.defaultFrontUrl, link); + } + return link; + }, + async queueMail(ctx, key, payload) { + payload.template = 'single-mail'; + if (this.createJob) { + return this.createJob('sendMail', key, payload); + } + await this.actions.send(payload, { parentCtx: ctx }); + } + }, + queues: { + sendMail: { + name: '*', + // @ts-expect-error TS(7023): 'process' implicitly has return type 'any' because... Remove this comment to see the full error message + async process(job: any) { + job.progress(0); + // @ts-expect-error TS(7022): 'result' implicitly has type 'any' because it does... Remove this comment to see the full error message + const result = await this.actions.send(job.data); + job.progress(100); + return result; + } + } + } +} satisfies ServiceSchema; + +export default SingleMailNotificationsService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SingleMailNotificationsService.name]: typeof SingleMailNotificationsService; + } + } +} diff --git a/src/middleware/packages/notifications/tsconfig.json b/src/middleware/packages/notifications/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/notifications/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/ontologies/actions/findNamespace.js b/src/middleware/packages/ontologies/actions/findNamespace.ts similarity index 54% rename from src/middleware/packages/ontologies/actions/findNamespace.js rename to src/middleware/packages/ontologies/actions/findNamespace.ts index 5201c3177..0bff8844a 100644 --- a/src/middleware/packages/ontologies/actions/findNamespace.js +++ b/src/middleware/packages/ontologies/actions/findNamespace.ts @@ -1,8 +1,10 @@ -const fetch = require('node-fetch'); +import fetch from 'node-fetch'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message prefix: 'string' }, async handler(ctx) { @@ -18,4 +20,6 @@ module.exports = { return null; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/findPrefix.js b/src/middleware/packages/ontologies/actions/findPrefix.ts similarity index 65% rename from src/middleware/packages/ontologies/actions/findPrefix.js rename to src/middleware/packages/ontologies/actions/findPrefix.ts index 26963d9cf..6aa3dde68 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.js +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -1,9 +1,11 @@ -const fetch = require('node-fetch'); -const { isURL } = require('../utils'); +import fetch from 'node-fetch'; +import { defineAction } from 'moleculer'; +import { isURL } from '../utils.ts'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message uri: 'string' }, async handler(ctx) { @@ -23,4 +25,6 @@ module.exports = { return null; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/get.js b/src/middleware/packages/ontologies/actions/get.ts similarity index 80% rename from src/middleware/packages/ontologies/actions/get.js rename to src/middleware/packages/ontologies/actions/get.ts index 52eea04fc..69f4e31ed 100644 --- a/src/middleware/packages/ontologies/actions/get.js +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { prefix: { type: 'string', optional: true }, @@ -13,8 +15,10 @@ module.exports = { if (prefix) { ontology = this.ontologies[prefix] || false; } else if (namespace) { + // @ts-expect-error TS(18046): 'o' is of type 'unknown'. ontology = Object.values(this.ontologies).find(o => o.namespace === namespace); } else if (uri) { + // @ts-expect-error TS(18046): 'o' is of type 'unknown'. ontology = Object.values(this.ontologies).find(o => uri.startsWith(o.namespace)); } else { throw new Error('You must provide a prefix, namespace or uri parameter'); @@ -26,4 +30,6 @@ module.exports = { return ontology; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.js b/src/middleware/packages/ontologies/actions/getPrefixes.js deleted file mode 100644 index 4eff4de7f..000000000 --- a/src/middleware/packages/ontologies/actions/getPrefixes.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - visibility: 'public', - cache: true, - async handler(ctx) { - const ontologies = await this.actions.list({}, { parentCtx: ctx }); - return Object.fromEntries( - ontologies - .sort((a, b) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) - .map(ontology => [ontology.prefix, ontology.namespace]) - ); - } -}; diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts new file mode 100644 index 000000000..b492796ea --- /dev/null +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -0,0 +1,16 @@ +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ + visibility: 'public', + cache: true, + async handler(ctx) { + const ontologies = await this.actions.list({}, { parentCtx: ctx }); + return Object.fromEntries( + ontologies + .sort((a: any, b: any) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) + .map((ontology: any) => [ontology.prefix, ontology.namespace]) + ); + } +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.js b/src/middleware/packages/ontologies/actions/getRdfPrefixes.js deleted file mode 100644 index 19187e7a2..000000000 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - visibility: 'public', - cache: true, - async handler(ctx) { - const ontologies = await this.actions.list({}, { parentCtx: ctx }); - return ontologies - .sort((a, b) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) - .map(ontology => `PREFIX ${ontology.prefix}: <${ontology.namespace}>`) - .join('\n'); - } -}; diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts new file mode 100644 index 000000000..ba2a6e156 --- /dev/null +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -0,0 +1,15 @@ +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ + visibility: 'public', + cache: true, + async handler(ctx) { + const ontologies = await this.actions.list({}, { parentCtx: ctx }); + return ontologies + .sort((a: any, b: any) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) + .map((ontology: any) => `PREFIX ${ontology.prefix}: <${ontology.namespace}>`) + .join('\n'); + } +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/list.js b/src/middleware/packages/ontologies/actions/list.js deleted file mode 100644 index dd49c0d40..000000000 --- a/src/middleware/packages/ontologies/actions/list.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - visibility: 'public', - cache: true, - handler() { - return Object.values(this.ontologies); - } -}; diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts new file mode 100644 index 000000000..f047412a5 --- /dev/null +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -0,0 +1,11 @@ +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ + visibility: 'public', + cache: true, + handler() { + return Object.values(this.ontologies); + } +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.js b/src/middleware/packages/ontologies/actions/prefixToUri.ts similarity index 66% rename from src/middleware/packages/ontologies/actions/prefixToUri.js rename to src/middleware/packages/ontologies/actions/prefixToUri.ts index 0fc06a8e7..10578bce5 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.js +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -1,10 +1,12 @@ -const { isURL } = require('../utils'); +import { defineAction } from 'moleculer'; +import { isURL } from '../utils.ts'; const regexPrefix = /^([^:]+):([^:]+)$/gm; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message value: 'string' }, cache: true, @@ -17,6 +19,7 @@ module.exports = { if (!value.match(regexPrefix)) throw new Error(`The provided value ${value} is neither prefixed, nor a full URI`); const matchResults = regexPrefix.exec(value); + // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. const prefix = matchResults[1]; const ontology = await this.actions.get({ prefix }); @@ -24,4 +27,6 @@ module.exports = { return value.replace(`${ontology.prefix}:`, ontology.namespace); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/register.js b/src/middleware/packages/ontologies/actions/register.ts similarity index 66% rename from src/middleware/packages/ontologies/actions/register.js rename to src/middleware/packages/ontologies/actions/register.ts index 26939f8e6..41036d902 100644 --- a/src/middleware/packages/ontologies/actions/register.js +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -1,17 +1,23 @@ -const { isURL, arrayOf } = require('../utils'); +import { defineAction } from 'moleculer'; +import { isURL, arrayOf } from '../utils.ts'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message prefix: 'string', + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message namespace: 'string', owl: { type: 'string', optional: true }, jsonldContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message preserveContextUri: { type: 'boolean', default: false }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message persist: { type: 'boolean', default: false } }, async handler(ctx) { @@ -56,4 +62,6 @@ module.exports = { ctx.emit('ontologies.registered', { prefix, namespace, owl, jsonldContext, preserveContextUri }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/index.js b/src/middleware/packages/ontologies/index.js deleted file mode 100644 index 1030a036d..000000000 --- a/src/middleware/packages/ontologies/index.js +++ /dev/null @@ -1,16 +0,0 @@ -const OntologiesService = require('./service'); -const OntologiesRegistryService = require('./sub-services/registry'); -const coreOntologies = require('./ontologies/core'); -const customOntologies = require('./ontologies/custom'); -const solidOntologies = require('./ontologies/solid'); - -module.exports = { - OntologiesService, - OntologiesRegistryService, - coreOntologies: Object.values(coreOntologies), - solidOntologies: Object.values(solidOntologies), - customOntologies: Object.values(customOntologies), - ...coreOntologies, - ...solidOntologies, - ...customOntologies -}; diff --git a/src/middleware/packages/ontologies/index.ts b/src/middleware/packages/ontologies/index.ts new file mode 100644 index 000000000..dae6c20ea --- /dev/null +++ b/src/middleware/packages/ontologies/index.ts @@ -0,0 +1,9 @@ +import OntologiesService from './service.ts'; +import OntologiesRegistryService from './sub-services/registry.ts'; + +export { OntologiesService, OntologiesRegistryService }; + +export * from './ontologies/core/index.ts'; +export * from './ontologies/solid/index.ts'; +export * from './ontologies/custom/index.ts'; +export { skos } from './ontologies/core/index.ts'; diff --git a/src/middleware/packages/ontologies/ontologies/core/index.js b/src/middleware/packages/ontologies/ontologies/core/index.js deleted file mode 100644 index 8528465e3..000000000 --- a/src/middleware/packages/ontologies/ontologies/core/index.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - acl: require('./acl.json'), - as: require('./as.json'), - cred: require('./cred.json'), - dc: require('./dc.json'), - did: require('./did.json'), - foaf: require('./foaf.json'), - ldp: require('./ldp.json'), - rdf: require('./rdf.json'), - rdfs: require('./rdfs.json'), - sec: require('./sec.json'), - semapps: require('./semapps.json'), - skos: require('./skos.json'), - vcard: require('./vcard.json'), - void: require('./void.json'), - xsd: require('./xsd.json') -}; diff --git a/src/middleware/packages/ontologies/ontologies/core/index.ts b/src/middleware/packages/ontologies/ontologies/core/index.ts new file mode 100644 index 000000000..297091a3b --- /dev/null +++ b/src/middleware/packages/ontologies/ontologies/core/index.ts @@ -0,0 +1,34 @@ +import acl from './acl.json' with { type: 'json' }; +import as from './as.json' with { type: 'json' }; +import cred from './cred.json' with { type: 'json' }; +import dc from './dc.json' with { type: 'json' }; +import did from './did.json' with { type: 'json' }; +import foaf from './foaf.json' with { type: 'json' }; +import ldp from './ldp.json' with { type: 'json' }; +import rdf from './rdf.json' with { type: 'json' }; +import rdfs from './rdfs.json' with { type: 'json' }; +import sec from './sec.json' with { type: 'json' }; +import semapps from './semapps.json' with { type: 'json' }; +import skos from './skos.json' with { type: 'json' }; +import vcard from './vcard.json' with { type: 'json' }; +import voidOntology from './void.json' with { type: 'json' }; +import xsd from './xsd.json' with { type: 'json' }; + +export { + acl, + as, + cred, + dc, + did, + foaf, + ldp, + rdf, + rdfs, + sec, + semapps, + skos, + vcard, + voidOntology as void, + xsd, + voidOntology +}; diff --git a/src/middleware/packages/ontologies/ontologies/custom/index.js b/src/middleware/packages/ontologies/ontologies/custom/index.js deleted file mode 100644 index f4bdc3c42..000000000 --- a/src/middleware/packages/ontologies/ontologies/custom/index.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - mp: require('./mp.json'), - oasis: require('./oasis.json'), - og: require('./og.json'), - pair: require('./pair.json'), - petr: require('./petr.json'), - schema: require('./schema.json'), - skos: require('./skos.json'), - syreen: require('./syreen.json'), - tutor: require('./tutor.json') -}; diff --git a/src/middleware/packages/ontologies/ontologies/custom/index.ts b/src/middleware/packages/ontologies/ontologies/custom/index.ts new file mode 100644 index 000000000..76cd198e3 --- /dev/null +++ b/src/middleware/packages/ontologies/ontologies/custom/index.ts @@ -0,0 +1,11 @@ +import mp from './mp.json' with { type: 'json' }; +import oasis from './oasis.json' with { type: 'json' }; +import og from './og.json' with { type: 'json' }; +import pair from './pair.json' with { type: 'json' }; +import petr from './petr.json' with { type: 'json' }; +import schema from './schema.json' with { type: 'json' }; +import skos from './skos.json' with { type: 'json' }; +import syreen from './syreen.json' with { type: 'json' }; +import tutor from './tutor.json' with { type: 'json' }; + +export { mp, oasis, og, pair, petr, schema, skos, syreen, tutor }; diff --git a/src/middleware/packages/ontologies/ontologies/solid/index.js b/src/middleware/packages/ontologies/ontologies/solid/index.js deleted file mode 100644 index 5ec4d923c..000000000 --- a/src/middleware/packages/ontologies/ontologies/solid/index.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - apods: require('./apods.json'), - interop: require('./interop.json'), - notify: require('./notify.json'), - oidc: require('./oidc.json'), - pim: require('./pim.json'), - solid: require('./solid.json') -}; diff --git a/src/middleware/packages/ontologies/ontologies/solid/index.ts b/src/middleware/packages/ontologies/ontologies/solid/index.ts new file mode 100644 index 000000000..064cafe89 --- /dev/null +++ b/src/middleware/packages/ontologies/ontologies/solid/index.ts @@ -0,0 +1,8 @@ +import apods from './apods.json' with { type: 'json' }; +import interop from './interop.json' with { type: 'json' }; +import notify from './notify.json' with { type: 'json' }; +import oidc from './oidc.json' with { type: 'json' }; +import pim from './pim.json' with { type: 'json' }; +import solid from './solid.json' with { type: 'json' }; + +export { apods, interop, notify, oidc, pim, solid }; diff --git a/src/middleware/packages/ontologies/package.json b/src/middleware/packages/ontologies/package.json index b346b5c23..ee0447e65 100644 --- a/src/middleware/packages/ontologies/package.json +++ b/src/middleware/packages/ontologies/package.json @@ -10,9 +10,15 @@ "node-fetch": "^2.6.6" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/ontologies/service.js b/src/middleware/packages/ontologies/service.ts similarity index 53% rename from src/middleware/packages/ontologies/service.js rename to src/middleware/packages/ontologies/service.ts index 3d88f801b..22c5f7566 100644 --- a/src/middleware/packages/ontologies/service.js +++ b/src/middleware/packages/ontologies/service.ts @@ -1,16 +1,17 @@ -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const OntologiesRegistryService = require('./sub-services/registry'); -const findPrefixAction = require('./actions/findPrefix'); -const findNamespaceAction = require('./actions/findNamespace'); -const getAction = require('./actions/get'); -const getPrefixesAction = require('./actions/getPrefixes'); -const getRdfPrefixesAction = require('./actions/getRdfPrefixes'); -const listAction = require('./actions/list'); -const prefixToUriAction = require('./actions/prefixToUri'); -const registerAction = require('./actions/register'); +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; +import OntologiesRegistryService from './sub-services/registry.ts'; +import findPrefixAction from './actions/findPrefix.ts'; +import findNamespaceAction from './actions/findNamespace.ts'; +import getAction from './actions/get.ts'; +import getPrefixesAction from './actions/getPrefixes.ts'; +import getRdfPrefixesAction from './actions/getRdfPrefixes.ts'; +import listAction from './actions/list.ts'; +import prefixToUriAction from './actions/prefixToUri.ts'; +import registerAction from './actions/register.ts'; -module.exports = { - name: 'ontologies', +const OntologiesSchema = { + name: 'ontologies' as const, settings: { ontologies: [], persistRegistry: false, @@ -19,6 +20,7 @@ module.exports = { async created() { const { persistRegistry, settingsDataset } = this.settings; if (persistRegistry) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ontologies.re... Remove this comment to see the full error message this.broker.createService({ mixins: [OntologiesRegistryService], adapter: new TripleStoreAdapter({ type: 'Ontology', dataset: settingsDataset }) @@ -51,4 +53,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default OntologiesSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [OntologiesSchema.name]: typeof OntologiesSchema; + } + } +} diff --git a/src/middleware/packages/ontologies/sub-services/registry.js b/src/middleware/packages/ontologies/sub-services/registry.js deleted file mode 100644 index 9d3c8b7f4..000000000 --- a/src/middleware/packages/ontologies/sub-services/registry.js +++ /dev/null @@ -1,44 +0,0 @@ -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); - -module.exports = { - name: 'ontologies.registry', - mixins: [DbService], - adapter: new TripleStoreAdapter({ type: 'Ontology', dataset: 'settings' }), - settings: { - idField: '@id' - }, - actions: { - async getByPrefix(ctx) { - const { prefix } = ctx.params; - const [ontology] = await this._find(ctx, { query: { prefix } }); - return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; - }, - async getByNamespace(ctx) { - const { namespace } = ctx.params; - const [ontology] = await this._find(ctx, { query: { namespace } }); - return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; - }, - async list(ctx) { - const ontologies = await this._list(ctx, {}); - return ontologies.rows.map(({ prefix, namespace }) => ({ prefix, namespace })); - }, - async updateOrCreate(ctx) { - const { prefix, namespace } = ctx.params; - - const ontology = await this.actions.getByPrefix({ prefix }, { parentCtx: ctx }); - - if (ontology) { - await this._update(ctx, { - '@id': ontology['@id'], - namespace - }); - } else { - await this._create(ctx, { - prefix, - namespace - }); - } - } - } -}; diff --git a/src/middleware/packages/ontologies/sub-services/registry.ts b/src/middleware/packages/ontologies/sub-services/registry.ts new file mode 100644 index 000000000..646db4b75 --- /dev/null +++ b/src/middleware/packages/ontologies/sub-services/registry.ts @@ -0,0 +1,66 @@ +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const OntologiesRegistrySchema = { + name: 'ontologies.registry' as const, + mixins: [DbService], + adapter: new TripleStoreAdapter({ type: 'Ontology', dataset: 'settings' }), + settings: { + idField: '@id' + }, + actions: { + getByPrefix: defineAction({ + async handler(ctx) { + const { prefix } = ctx.params; + const [ontology] = await this._find(ctx, { query: { prefix } }); + return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; + } + }), + + getByNamespace: defineAction({ + async handler(ctx) { + const { namespace } = ctx.params; + const [ontology] = await this._find(ctx, { query: { namespace } }); + return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; + } + }), + + list: defineAction({ + async handler(ctx) { + const ontologies = await this._list(ctx, {}); + return ontologies.rows.map(({ prefix, namespace }: any) => ({ prefix, namespace })); + } + }), + + updateOrCreate: defineAction({ + async handler(ctx) { + const { prefix, namespace } = ctx.params; + + const ontology = await this.actions.getByPrefix({ prefix }, { parentCtx: ctx }); + + if (ontology) { + await this._update(ctx, { + '@id': ontology['@id'], + namespace + }); + } else { + await this._create(ctx, { + prefix, + namespace + }); + } + } + }) + } +} satisfies ServiceSchema; + +export default OntologiesRegistrySchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [OntologiesRegistrySchema.name]: typeof OntologiesRegistrySchema; + } + } +} diff --git a/src/middleware/packages/ontologies/tsconfig.json b/src/middleware/packages/ontologies/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/ontologies/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/ontologies/utils.js b/src/middleware/packages/ontologies/utils.ts similarity index 59% rename from src/middleware/packages/ontologies/utils.js rename to src/middleware/packages/ontologies/utils.ts index 89efbffe7..add7a1363 100644 --- a/src/middleware/packages/ontologies/utils.js +++ b/src/middleware/packages/ontologies/utils.ts @@ -1,4 +1,4 @@ -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -11,9 +11,5 @@ const arrayOf = value => { return [value]; }; -const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); - -module.exports = { - arrayOf, - isURL -}; +const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); +export { arrayOf, isURL }; diff --git a/src/middleware/packages/solid/index.js b/src/middleware/packages/solid/index.js deleted file mode 100644 index f8ee053b0..000000000 --- a/src/middleware/packages/solid/index.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - AuthorizerService: require('./services/authorizer'), - EndpointService: require('./services/endpoint'), - NotificationsProviderService: require('./services/notifications/provider'), - NotificationsListenerService: require('./services/notifications/listener'), - PreferencesFileService: require('./services/preferences-file'), - StorageService: require('./services/storage'), - TypeIndexesService: require('./services/type-index/type-indexes') -}; diff --git a/src/middleware/packages/solid/index.ts b/src/middleware/packages/solid/index.ts new file mode 100644 index 000000000..d84949694 --- /dev/null +++ b/src/middleware/packages/solid/index.ts @@ -0,0 +1,17 @@ +import AuthorizerService from './services/authorizer.ts'; +import EndpointService from './services/endpoint.ts'; +import NotificationsProviderService from './services/notifications/provider.ts'; +import NotificationsListenerService from './services/notifications/listener.ts'; +import PreferencesFileService from './services/preferences-file.ts'; +import StorageService from './services/storage.ts'; +import TypeIndexesService from './services/type-index/type-indexes.ts'; + +export { + AuthorizerService, + EndpointService, + NotificationsProviderService, + NotificationsListenerService, + PreferencesFileService, + StorageService, + TypeIndexesService +}; diff --git a/src/middleware/packages/solid/package.json b/src/middleware/packages/solid/package.json index 66b87ae2e..2c95b82bf 100644 --- a/src/middleware/packages/solid/package.json +++ b/src/middleware/packages/solid/package.json @@ -14,7 +14,6 @@ "@semapps/triplestore": "1.1.4", "@semapps/webid": "1.1.4", "http-link-header": "^1.1.1", - "moleculer": "^0.14.19", "moleculer-bull": "^0.2.5", "moleculer-db": "^0.8.16", "moleculer-web": "^0.10.0-beta1", @@ -24,9 +23,15 @@ "uuid": "^9.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/solid/services/authorizer.js b/src/middleware/packages/solid/services/authorizer.js deleted file mode 100644 index 00b0d58c7..000000000 --- a/src/middleware/packages/solid/services/authorizer.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - name: 'solid-authorizer', - dependencies: 'permissions', - async started() { - await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission`, priority: 1 }); - }, - actions: { - async hasPermission(ctx) { - const { uri, webId } = ctx.params; - - // The owner has access to all resources on their Pod - if (uri.startsWith(`${webId}/`)) { - return true; - } - - return undefined; - } - } -}; diff --git a/src/middleware/packages/solid/services/authorizer.ts b/src/middleware/packages/solid/services/authorizer.ts new file mode 100644 index 000000000..d3ce7b51b --- /dev/null +++ b/src/middleware/packages/solid/services/authorizer.ts @@ -0,0 +1,33 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + +const SolidAuthorizerSchema = { + name: 'solid-authorizer' as const, + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission`, priority: 1 }); + }, + actions: { + hasPermission: defineAction({ + async handler(ctx) { + const { uri, webId } = ctx.params; + + // The owner has access to all resources on their Pod + if (uri.startsWith(`${webId}/`)) { + return true; + } + + return undefined; + } + }) + } +} satisfies ServiceSchema; + +export default SolidAuthorizerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidAuthorizerSchema.name]: typeof SolidAuthorizerSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/endpoint.js b/src/middleware/packages/solid/services/endpoint.js deleted file mode 100644 index 7b2a58644..000000000 --- a/src/middleware/packages/solid/services/endpoint.js +++ /dev/null @@ -1,28 +0,0 @@ -const { SpecialEndpointMixin } = require('@semapps/ldp'); - -module.exports = { - name: 'solid-endpoint', - mixins: [SpecialEndpointMixin], - settings: { - baseUrl: null, - settingsDataset: null, - endpoint: { - path: '/.well-known/solid', - initialData: { - type: 'http://www.w3.org/ns/pim/space#Storage' - } - } - }, - dependencies: ['api', 'ldp'], - async started() { - await this.broker.call('ldp.link-header.register', { actionName: 'solid-endpoint.getLink' }); - }, - actions: { - getLink() { - return { - uri: this.endpointUrl, - rel: 'http://www.w3.org/ns/solid/terms#storageDescription' - }; - } - } -}; diff --git a/src/middleware/packages/solid/services/endpoint.ts b/src/middleware/packages/solid/services/endpoint.ts new file mode 100644 index 000000000..8a52e08eb --- /dev/null +++ b/src/middleware/packages/solid/services/endpoint.ts @@ -0,0 +1,41 @@ +import { SpecialEndpointMixin } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const SolidEndpointSchema = { + name: 'solid-endpoint' as const, + mixins: [SpecialEndpointMixin], + settings: { + baseUrl: null, + settingsDataset: null, + endpoint: { + path: '/.well-known/solid', + initialData: { + type: 'http://www.w3.org/ns/pim/space#Storage' + } + } + }, + dependencies: ['api', 'ldp'], + async started() { + await this.broker.call('ldp.link-header.register', { actionName: 'solid-endpoint.getLink' }); + }, + actions: { + getLink: defineAction({ + handler() { + return { + uri: this.endpointUrl, + rel: 'http://www.w3.org/ns/solid/terms#storageDescription' + }; + } + }) + } +} satisfies ServiceSchema; + +export default SolidEndpointSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidEndpointSchema.name]: typeof SolidEndpointSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js deleted file mode 100644 index 2504d43cc..000000000 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js +++ /dev/null @@ -1,309 +0,0 @@ -const urlJoin = require('url-join'); -const { Errors: E } = require('moleculer-web'); -const { SpecialEndpointMixin, ControlledContainerMixin, getDatasetFromUri, arrayOf } = require('@semapps/ldp'); -const { ACTIVITY_TYPES } = require('@semapps/activitypub'); -const { namedNode } = require('@rdfjs/data-model'); -const { v4: uuidV4 } = require('uuid'); -const moment = require('moment'); - -/** - * Solid Notification Channel mixin. - * Use this mixin to implement solid notification channels. - * The settings, actions, and methods to be implemented are marked in the code. - * - * By default, this service supports the following features: - * - `notify:endAt`, `notify:startAt` channel properties to only trigger events within these time bounds. - * - `notify:state` for resources (will return `dc:modified` - * - `notify:rate` the channel's min duration between firing events. - * - * Note: modifying a channel resource using the ldp API will not take effect until a server restart. - */ -module.exports = { - // name: 'solid-notifications.provider.', - mixins: [ControlledContainerMixin, SpecialEndpointMixin], - settings: { - // Channel properties (to be overridden) - channelType: null, // E.g. 'WebhookChannel2023', - typePredicate: null, // E.g. 'notify:WebhookChannel2023', defaults to `notify:${this.settings.channelType}`, - acceptedTypes: [], // E.g. ['notify:WebhookChannel2023'], - sendOrReceive: null, // Either 'send' or 'receive' (will set `sendTo` or `receiveFrom` URIs). - - baseUrl: null, - // ControlledContainerMixin - excludeFromMirror: true, - activateTombstones: false, - // Like the CSS, we allow anyone with the URI of the channel to read and delete it - // https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#unsubscribing-from-a-notification-channel - newResourcesPermissions: { - anon: { - read: true, - write: true - } - }, - - // SpecialEndpointMixin (to be filled by channels services) - settingsDataset: null, - endpoint: { - path: null, - initialData: {} - } - }, - dependencies: ['api', 'solid-endpoint'], - async created() { - if (!this.settings.baseUrl) throw new Error('The baseUrl setting is required'); - if (this.settings.sendOrReceive !== 'receive' && this.settings.sendOrReceive !== 'send') - throw new Error('The setting `sendOrReceive` must be set to `send` or `receive`, depending on channelType.'); - if (!this.settings.channelType) throw new Error('The setting channelType must be set (e.g. `WebhookChannel2023`).'); - if (!this.settings.typePredicate) this.settings.typePredicate = `notify:${this.settings.channelType}`; - if (this.settings.acceptedTypes?.length <= 0) this.settings.acceptedTypes = [this.settings.typePredicate]; - }, - async started() { - const { channelType } = this.settings; - - await this.broker.call('solid-endpoint.endpointAdd', { - predicate: namedNode('http://www.w3.org/ns/solid/notifications#subscription'), - object: namedNode(urlJoin(this.settings.baseUrl, '.notifications', channelType)) - }); - - this.channels = []; - - // Do not await all channels to be loaded - this.loadChannelsFromDb({ removeOldChannels: true }); - }, - actions: { - // Action called by the SpecialEndpointMixin when POSTing to the endpoint - async endpointPost(ctx) { - // Expect format https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#webhooks - // Correct context: https://github.com/solid/vocab/blob/main/solid-notifications-context.jsonld - const type = ctx.params.type || ctx.params['@type']; - const topic = ctx.params.topic || ctx.params['notify:topic']; - const sendToParam = ctx.params.sendTo || ctx.params['notify:sendTo']; - const { webId } = ctx.meta; - - // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... - if (!this.settings.acceptedTypes.includes(type) && this.settings.channelType !== type) - throw new Error(`Only one of ${this.settings.acceptedTypes} is accepted on this endpoint`); - - // Ensure topic exist (LDP resource, container or collection) - const exists = await ctx.call('ldp.resource.exist', { - resourceUri: topic, - webId: 'system' - }); - if (!exists) throw new E.BadRequestError('Cannot watch non-existing resource'); - - // Ensure topic can be watched by the authenticated agent - const rights = await ctx.call('webacl.resource.hasRights', { - resourceUri: topic, - rights: { read: true }, - webId - }); - // TODO: Should a client without read rights know about the existence of that resource? - if (!rights.read) throw new E.ForbiddenError('You need acl:Read rights on the resource'); - - // Find container URI from topic (must be stored on same Pod) - const topicWebId = urlJoin(this.settings.baseUrl, getDatasetFromUri(topic)); - const channelContainerUri = await this.actions.getContainerUri({ webId: topicWebId }, { parentCtx: ctx }); - - // Create receiveFrom URI if needed (e.g. for web sockets). - const receiveFrom = - (this.settings.sendOrReceive === 'receive' && (await this.createReceiveFromUri(topic, webId))) || undefined; - const sendTo = (this.settings.sendOrReceive === 'send' && sendToParam) || undefined; - - // Post channel on Pod - const channelUri = await this.actions.post( - { - containerUri: channelContainerUri, - resource: { - type: this.settings.typePredicate, - 'notify:topic': topic, - 'notify:sendTo': sendTo, - 'notify:receiveFrom': receiveFrom - }, - webId: 'system' - }, - { parentCtx: ctx } - ); - - // Keep track of channel internally. - const channel = { - id: channelUri, - topic, - sendTo, - receiveFrom, - webId: topicWebId - }; - this.channels.push(channel); - this.onChannelCreated(channel); - - ctx.meta.$responseType = 'application/ld+json'; - return this.actions.get( - { - resourceUri: channelUri, - webId: 'system' - }, - { parentCtx: ctx } - ); - }, - getCache() { - return this.channels; - }, - resetCache() { - this.channels = []; - } - }, - events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); - }, - async 'ldp.resource.deleted'(ctx) { - const { resourceUri } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); - }, - async 'ldp.container.attached'(ctx) { - const { containerUri, resourceUri } = ctx.params; - this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); - }, - async 'ldp.container.detached'(ctx) { - const { containerUri, resourceUri } = ctx.params; - this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); - }, - async 'activitypub.collection.added'(ctx) { - const { collectionUri, itemUri, item } = ctx.params; - // Mastodon sometimes send unfetchable activities (like `Accept` activities) - // In this case, we receive the activity as `item` and `itemUri` is undefined - // We will send a notification to the listener with the whole activity - this.onContainerOrCollectionEvent(collectionUri, itemUri || item, ACTIVITY_TYPES.ADD); - }, - async 'activitypub.collection.removed'(ctx) { - const { collectionUri, itemUri } = ctx.params; - this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); - } - }, - methods: { - async getModified(resourceUri) { - return await this.broker.call('ldp.resource.get', { resourceUri, webId: 'system' })?.['dc:modified']; - }, - getMatchingChannels(topic) { - const now = new Date(); - const matchedChannels = this.channels - .filter(c => c.topic === topic) - .filter(c => (c.startAt ? new Date(c.startAt) <= now : true)) - .filter(c => (c.endAt ? new Date(c.endAt) > now : true)) - // Check if rate is exceeded. - .filter(c => { - if (!(c.lastTriggered && c.rate)) return true; - return moment.duration(c.rate).asMilliseconds() < now - c.lastTriggered; - }); - - return matchedChannels; - }, - onContainerOrCollectionEvent(containerOrCollectionUri, resourceUriOrResource, type) { - const activity = { - '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], - id: `urn:uuid:${uuidV4()}`, - type, - object: resourceUriOrResource, - target: containerOrCollectionUri - }; - this.triggerChannelsForTopic(containerOrCollectionUri, activity); - }, - onResourceEvent(resourceUri, type, state) { - const activity = { - '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], - id: `urn:uuid:${uuidV4()}`, - type, - object: resourceUri, - state - }; - this.triggerChannelsForTopic(resourceUri, activity); - }, - async triggerChannelsForTopic(topicUri, activity) { - const channelsToTrigger = this.getMatchingChannels(topicUri); - - // First set lastTriggered, so channels with rate are not triggered multiple times. - const now = new Date(); - for (const channel of channelsToTrigger) { - channel.lastTriggered = now; - } - - // Trigger onEvent for each channel (handled by implementing service). - await Promise.all( - channelsToTrigger.map(async channel => { - await this.onEvent(channel, activity); - }) - ); - }, - async loadChannelsFromDb({ removeOldChannels }) { - const accounts = await this.broker.call('auth.account.find'); - for (const { webId } of accounts) { - this.logger.debug(`Loading notification channels of ${webId}...`); - try { - const container = await this.actions.list({ webId }); - for (const channel of arrayOf(container['ldp:contains'])) { - // Remove channels where endAt is in the past. - if (removeOldChannels && channel['notify:endAt'] < new Date()) { - this.broker.call('ldp.resource.delete', { - resourceUri: channel.id || channel['@id'], - webId: 'system' - }); - continue; - } - - this.channels.push({ - id: channel.id || channel['@id'], - topic: channel['notify:topic'], - sendTo: channel['notify:sendTo'], - receiveFrom: channel['notify:receiveFrom'], - startAt: channel['notify:startAt'], - endAt: channel['notify:endAt'], - accept: channel['notify:accept'], - rate: channel['notify:rate'], - webId - }); - } - } catch (e) { - this.logger.error(`Could not load notifications channels of ${webId}. Error: ${e.message}`); - } - } - }, - // METHODS TO IMPLEMENT by implementing service. - // - async onEvent(channel, activity) { - // This will be called for each channel when its topic changed. - // The activity is to be sent to the subscriber by the implementing service. - // Please add `published: new Date().toISOString()` to the activity when you send it. - throw new Error('Not implemented. Please implement this method in your service.'); - }, - async createReceiveFromUri(topic, webId) { - // Create a random URI to be registered for `receiveFrom` for a new channel under `this.channels`. - throw new Error('Not implemented. Please implement this method in your service.'); - }, - onChannelCreated(channel) { - // Do nothing by default. Can be overridden. - }, - onChannelDeleted(channel) { - // Do nothing by default. Can be overridden. - } - }, - - hooks: { - after: { - delete(ctx, res) { - const { resourceUri } = ctx.params; - const channel = this.channels.find(c => c.id === resourceUri); - this.channels = this.channels.filter(c => c.id !== resourceUri); - this.onChannelDeleted(channel); - return res; - } - } - } -}; diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts new file mode 100644 index 000000000..31d5cf0e2 --- /dev/null +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -0,0 +1,370 @@ +import urlJoin from 'url-join'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { SpecialEndpointMixin, ControlledContainerMixin, getDatasetFromUri, arrayOf } from '@semapps/ldp'; +import { ACTIVITY_TYPES } from '@semapps/activitypub'; +import { namedNode } from '@rdfjs/data-model'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message +import { v4 as uuidV4 } from 'uuid'; +import moment from 'moment'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +/** + * Solid Notification Channel mixin. + * Use this mixin to implement solid notification channels. + * The settings, actions, and methods to be implemented are marked in the code. + * + * By default, this service supports the following features: + * - `notify:endAt`, `notify:startAt` channel properties to only trigger events within these time bounds. + * - `notify:state` for resources (will return `dc:modified` + * - `notify:rate` the channel's min duration between firing events. + * + * Note: modifying a channel resource using the ldp API will not take effect until a server restart. + */ +const Schema = { + // name: 'solid-notifications.provider.', + mixins: [ControlledContainerMixin, SpecialEndpointMixin], + settings: { + // Channel properties (to be overridden) + channelType: null, // E.g. 'WebhookChannel2023', + typePredicate: null, // E.g. 'notify:WebhookChannel2023', defaults to `notify:${this.settings.channelType}`, + acceptedTypes: [], // E.g. ['notify:WebhookChannel2023'], + sendOrReceive: null, // Either 'send' or 'receive' (will set `sendTo` or `receiveFrom` URIs). + + baseUrl: null, + // ControlledContainerMixin + excludeFromMirror: true, + activateTombstones: false, + // Like the CSS, we allow anyone with the URI of the channel to read and delete it + // https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#unsubscribing-from-a-notification-channel + newResourcesPermissions: { + anon: { + read: true, + write: true + } + }, + + // SpecialEndpointMixin (to be filled by channels services) + settingsDataset: null, + endpoint: { + path: null, + initialData: {} + } + }, + dependencies: ['api', 'solid-endpoint'], + async created() { + if (!this.settings.baseUrl) throw new Error('The baseUrl setting is required'); + if (this.settings.sendOrReceive !== 'receive' && this.settings.sendOrReceive !== 'send') + throw new Error('The setting `sendOrReceive` must be set to `send` or `receive`, depending on channelType.'); + if (!this.settings.channelType) throw new Error('The setting channelType must be set (e.g. `WebhookChannel2023`).'); + if (!this.settings.typePredicate) this.settings.typePredicate = `notify:${this.settings.channelType}`; + if (this.settings.acceptedTypes?.length <= 0) this.settings.acceptedTypes = [this.settings.typePredicate]; + }, + async started() { + const { channelType } = this.settings; + + await this.broker.call('solid-endpoint.endpointAdd', { + predicate: namedNode('http://www.w3.org/ns/solid/notifications#subscription'), + object: namedNode(urlJoin(this.settings.baseUrl, '.notifications', channelType)) + }); + + this.channels = []; + + // Do not await all channels to be loaded + this.loadChannelsFromDb({ removeOldChannels: true }); + }, + actions: { + endpointPost: defineAction({ + // Action called by the SpecialEndpointMixin when POSTing to the endpoint + async handler(ctx) { + // Expect format https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#webhooks + // Correct context: https://github.com/solid/vocab/blob/main/solid-notifications-context.jsonld + const type = ctx.params.type || ctx.params['@type']; + const topic = ctx.params.topic || ctx.params['notify:topic']; + const sendToParam = ctx.params.sendTo || ctx.params['notify:sendTo']; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const { webId } = ctx.meta; + + // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... + if (!this.settings.acceptedTypes.includes(type) && this.settings.channelType !== type) + throw new Error(`Only one of ${this.settings.acceptedTypes} is accepted on this endpoint`); + + // Ensure topic exist (LDP resource, container or collection) + const exists = await ctx.call('ldp.resource.exist', { + resourceUri: topic, + webId: 'system' + }); + if (!exists) throw new E.BadRequestError('Cannot watch non-existing resource'); + + // Ensure topic can be watched by the authenticated agent + const rights = await ctx.call('webacl.resource.hasRights', { + resourceUri: topic, + rights: { read: true }, + webId + }); + // TODO: Should a client without read rights know about the existence of that resource? + if (!rights.read) throw new E.ForbiddenError('You need acl:Read rights on the resource'); + + // Find container URI from topic (must be stored on same Pod) + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message + const topicWebId = urlJoin(this.settings.baseUrl, getDatasetFromUri(topic)); + const channelContainerUri = await this.actions.getContainerUri({ webId: topicWebId }, { parentCtx: ctx }); + + // Create receiveFrom URI if needed (e.g. for web sockets). + const receiveFrom = + (this.settings.sendOrReceive === 'receive' && (await this.createReceiveFromUri(topic, webId))) || undefined; + const sendTo = (this.settings.sendOrReceive === 'send' && sendToParam) || undefined; + + // Post channel on Pod + const channelUri = await this.actions.post( + { + containerUri: channelContainerUri, + resource: { + type: this.settings.typePredicate, + 'notify:topic': topic, + 'notify:sendTo': sendTo, + 'notify:receiveFrom': receiveFrom + }, + webId: 'system' + }, + { parentCtx: ctx } + ); + + // Keep track of channel internally. + const channel = { + id: channelUri, + topic, + sendTo, + receiveFrom, + webId: topicWebId + }; + this.channels.push(channel); + this.onChannelCreated(channel); + + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message + ctx.meta.$responseType = 'application/ld+json'; + return this.actions.get( + { + resourceUri: channelUri, + webId: 'system' + }, + { parentCtx: ctx } + ); + } + }), + + getCache: defineAction({ + handler() { + return this.channels; + } + }), + + resetCache: defineAction({ + handler() { + this.channels = []; + } + }) + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); + } + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); + } + }), + + 'ldp.container.attached': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message + const { containerUri, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message + this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); + } + }), + + 'ldp.container.detached': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message + const { containerUri, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message + this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); + } + }), + + 'activitypub.collection.added': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message + const { collectionUri, itemUri, item } = ctx.params; + // Mastodon sometimes send unfetchable activities (like `Accept` activities) + // In this case, we receive the activity as `item` and `itemUri` is undefined + // We will send a notification to the listener with the whole activity + // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message + this.onContainerOrCollectionEvent(collectionUri, itemUri || item, ACTIVITY_TYPES.ADD); + } + }), + + 'activitypub.collection.removed': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message + const { collectionUri, itemUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message + this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); + } + }) + }, + methods: { + async getModified(resourceUri) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + return await this.broker.call('ldp.resource.get', { resourceUri, webId: 'system' })?.['dc:modified']; + }, + getMatchingChannels(topic) { + const now = new Date(); + const matchedChannels = this.channels + .filter((c: any) => c.topic === topic) + .filter((c: any) => (c.startAt ? new Date(c.startAt) <= now : true)) + .filter((c: any) => (c.endAt ? new Date(c.endAt) > now : true)) + // Check if rate is exceeded. + .filter((c: any) => { + if (!(c.lastTriggered && c.rate)) return true; + // @ts-expect-error TS(2362): The left-hand side of an arithmetic operation must... Remove this comment to see the full error message + return moment.duration(c.rate).asMilliseconds() < now - c.lastTriggered; + }); + + return matchedChannels; + }, + onContainerOrCollectionEvent(containerOrCollectionUri, resourceUriOrResource, type) { + const activity = { + '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], + id: `urn:uuid:${uuidV4()}`, + type, + object: resourceUriOrResource, + target: containerOrCollectionUri + }; + this.triggerChannelsForTopic(containerOrCollectionUri, activity); + }, + onResourceEvent(resourceUri, type, state) { + const activity = { + '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], + id: `urn:uuid:${uuidV4()}`, + type, + object: resourceUri, + state + }; + this.triggerChannelsForTopic(resourceUri, activity); + }, + async triggerChannelsForTopic(topicUri, activity) { + const channelsToTrigger = this.getMatchingChannels(topicUri); + + // First set lastTriggered, so channels with rate are not triggered multiple times. + const now = new Date(); + for (const channel of channelsToTrigger) { + channel.lastTriggered = now; + } + + // Trigger onEvent for each channel (handled by implementing service). + await Promise.all( + channelsToTrigger.map(async (channel: any) => { + await this.onEvent(channel, activity); + }) + ); + }, + async loadChannelsFromDb({ removeOldChannels }) { + const accounts = await this.broker.call('auth.account.find'); + for (const { webId } of accounts) { + this.logger.debug(`Loading notification channels of ${webId}...`); + try { + const container = await this.actions.list({ webId }); + for (const channel of arrayOf(container['ldp:contains'])) { + // Remove channels where endAt is in the past. + if (removeOldChannels && channel['notify:endAt'] < new Date()) { + this.broker.call('ldp.resource.delete', { + resourceUri: channel.id || channel['@id'], + webId: 'system' + }); + continue; + } + + this.channels.push({ + id: channel.id || channel['@id'], + topic: channel['notify:topic'], + sendTo: channel['notify:sendTo'], + receiveFrom: channel['notify:receiveFrom'], + startAt: channel['notify:startAt'], + endAt: channel['notify:endAt'], + accept: channel['notify:accept'], + rate: channel['notify:rate'], + webId + }); + } + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.error(`Could not load notifications channels of ${webId}. Error: ${e.message}`); + } + } + }, + // METHODS TO IMPLEMENT by implementing service. + // + async onEvent(channel, activity) { + // This will be called for each channel when its topic changed. + // The activity is to be sent to the subscriber by the implementing service. + // Please add `published: new Date().toISOString()` to the activity when you send it. + throw new Error('Not implemented. Please implement this method in your service.'); + }, + async createReceiveFromUri(topic, webId) { + // Create a random URI to be registered for `receiveFrom` for a new channel under `this.channels`. + throw new Error('Not implemented. Please implement this method in your service.'); + }, + onChannelCreated(channel) { + // Do nothing by default. Can be overridden. + }, + onChannelDeleted(channel) { + // Do nothing by default. Can be overridden. + } + }, + + hooks: { + after: { + delete(ctx, res) { + const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'find' does not exist on type 'string | A... Remove this comment to see the full error message + const channel = this.channels.find((c: any) => c.id === resourceUri); + // @ts-expect-error TS(2339): Property 'filter' does not exist on type 'string |... Remove this comment to see the full error message + this.channels = this.channels.filter((c: any) => c.id !== resourceUri); + // @ts-expect-error TS(2349): This expression is not callable. + this.onChannelDeleted(channel); + return res; + } + } + } +} satisfies Partial; + +export default Schema; diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.js b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts similarity index 63% rename from src/middleware/packages/solid/services/notifications/channels/webhook-channel.js rename to src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index 6c46023a1..32a93dcc8 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.js +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,5 +1,6 @@ -const fetch = require('node-fetch'); -const NotificationChannelMixin = require('./notification-channel.mixin'); +import fetch from 'node-fetch'; +import { ServiceSchema, defineAction } from 'moleculer'; +import NotificationChannelMixin from './notification-channel.mixin.ts'; const queueOptions = process.env.NODE_ENV === 'test' @@ -15,7 +16,7 @@ const queueOptions = /** @type {import('moleculer').ServiceSchema} */ const WebhookChannel2023Service = { - name: 'solid-notifications.provider.webhook', + name: 'solid-notifications.provider.webhook' as const, mixins: [NotificationChannelMixin], settings: { channelType: 'WebhookChannel2023', @@ -34,18 +35,23 @@ const WebhookChannel2023Service = { if (!this.createJob) throw new Error('The QueueMixin must be configured with this service'); }, actions: { - async getAppChannels(ctx) { - const { appUri, webId } = ctx.params; - const { origin: appOrigin } = new URL(appUri); - return this.channels.filter(c => c.webId === webId && c.sendTo.startsWith(appOrigin)); - }, - async deleteAppChannels(ctx) { - const { appUri, webId } = ctx.params; - const appChannels = await this.actions.getAppChannels({ appUri, webId }, { parentCtx: ctx }); - for (const appChannel of appChannels) { - await this.actions.delete({ resourceUri: appChannel.id, webId: appChannel.webId }); + getAppChannels: defineAction({ + async handler(ctx) { + const { appUri, webId } = ctx.params; + const { origin: appOrigin } = new URL(appUri); + return this.channels.filter((c: any) => c.webId === webId && c.sendTo.startsWith(appOrigin)); } - } + }), + + deleteAppChannels: defineAction({ + async handler(ctx) { + const { appUri, webId } = ctx.params; + const appChannels = await this.actions.getAppChannels({ appUri, webId }, { parentCtx: ctx }); + for (const appChannel of appChannels) { + await this.actions.delete({ resourceUri: appChannel.id, webId: appChannel.webId }); + } + } + }) }, methods: { onEvent(channel, activity) { @@ -55,7 +61,7 @@ const WebhookChannel2023Service = { queues: { webhookPost: { name: '*', - async process(job) { + async process(job: any) { const { channel, activity } = job.data; try { @@ -71,6 +77,7 @@ const WebhookChannel2023Service = { }); if (response.status >= 400) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ name:... Remove this comment to see the full error message await this.actions.delete({ resourceUri: channel.id, webId: channel.webId }); throw new Error( `Webhook ${channel.sendTo} returned a ${response.status} error (${response.statusText}). It has been deleted.` @@ -82,16 +89,26 @@ const WebhookChannel2023Service = { return { ok: response.ok, status: response.status, statusText: response.statusText }; } catch (e) { if (job.attemptsMade + 1 >= job.opts.attempts) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ name: ... Remove this comment to see the full error message this.logger.warn(`Webhook ${channel.sendTo} failed ${job.opts.attempts} times, deleting it...`); // DO NOT DELETE YET TO IMPROVE MONITORING // await this.actions.delete({ resourceUri: channel.id, webId: channel.webId }); } + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. throw new Error(`Posting to webhook ${channel.sendTo} failed. Error: ${e.message}`); } } } } -}; +} satisfies ServiceSchema; -module.exports = WebhookChannel2023Service; +export default WebhookChannel2023Service; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebhookChannel2023Service.name]: typeof WebhookChannel2023Service; + } + } +} diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.js b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts similarity index 65% rename from src/middleware/packages/solid/services/notifications/channels/websocket-channel.js rename to src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index 15467e08d..101ae1c25 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.js +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -1,10 +1,12 @@ -const urlJoin = require('url-join'); -const { v4: uuidV4 } = require('uuid'); -const NotificationChannelMixin = require('./notification-channel.mixin'); +import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message +import { v4 as uuidV4 } from 'uuid'; +import { ServiceSchema } from 'moleculer'; +import NotificationChannelMixin from './notification-channel.mixin.ts'; /** @type {import('moleculer').ServiceSchema} */ const WebSocketChannel2023Service = { - name: 'solid-notifications.provider.websocket', + name: 'solid-notifications.provider.websocket' as const, mixins: [NotificationChannelMixin], settings: { channelType: 'WebSocketChannel2023', @@ -27,10 +29,10 @@ const WebSocketChannel2023Service = { route: `/.notifications/WebSocketChannel2023/socket/:id`, handlers: { /** @param {import('@activitypods/core/services/websocket/websocket.mixin').Connection} connection */ - onConnection: connection => { + onConnection: (connection: any) => { this.logger.debug('onConnection', connection.requestUrl); - const channel = this.channels.find(c => c.receiveFrom === connection.requestUrl); + const channel = this.channels.find((c: any) => c.receiveFrom === connection.requestUrl); // Check if the requested channel is registered. if (!channel) { connection.webSocket.close(404, 'Channel not found.'); @@ -38,15 +40,15 @@ const WebSocketChannel2023Service = { } this.socketConnections.push(connection); }, - onClose: (event, connection) => { + onClose: (event: any, connection: any) => { this.logger.debug('onClose', connection.requestUrl); - this.socketConnections = this.socketConnections.filter(c => c !== connection); + this.socketConnections = this.socketConnections.filter((c: any) => c !== connection); }, // onMessage: (message, connection) => { // this.logger.debug('onMessage', message, connection.requestUrl); // // We don't expect any messages. // }, - onError: (event, connection) => { + onError: (event: any, connection: any) => { this.logger.debug('onError', event, connection.requestUrl); // There is nothing to handle here. } @@ -57,8 +59,8 @@ const WebSocketChannel2023Service = { onChannelDeleted(channel) { // Close open connections (is removed from array on close event). this.socketConnections - .filter(socketConnection => socketConnection.requestUrl === channel.receiveFrom) - .forEach(connection => connection.webSocket.close(1001, 'The channel was deleted.')); + .filter((socketConnection: any) => socketConnection.requestUrl === channel.receiveFrom) + .forEach((connection: any) => connection.webSocket.close(1001, 'The channel was deleted.')); }, onEvent(channel, activity) { const message = JSON.stringify({ @@ -67,8 +69,8 @@ const WebSocketChannel2023Service = { }); this.socketConnections - .filter(socketConnection => socketConnection.requestUrl === channel.receiveFrom) - .forEach(connection => connection.webSocket.send(message)); + .filter((socketConnection: any) => socketConnection.requestUrl === channel.receiveFrom) + .forEach((connection: any) => connection.webSocket.send(message)); }, createReceiveFromUri() { // Create a random URI to be registered for `receiveFrom` for a new channel under `this.channels`. @@ -82,6 +84,14 @@ const WebSocketChannel2023Service = { ); } } -}; +} satisfies ServiceSchema; -module.exports = WebSocketChannel2023Service; +export default WebSocketChannel2023Service; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebSocketChannel2023Service.name]: typeof WebSocketChannel2023Service; + } + } +} diff --git a/src/middleware/packages/solid/services/notifications/listener.js b/src/middleware/packages/solid/services/notifications/listener.js deleted file mode 100644 index 1673dea8c..000000000 --- a/src/middleware/packages/solid/services/notifications/listener.js +++ /dev/null @@ -1,200 +0,0 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const LinkHeader = require('http-link-header'); -const { v4: uuidv4 } = require('uuid'); -const DbService = require('moleculer-db'); -const { MoleculerError } = require('moleculer').Errors; -const { parseHeader, parseRawBody, negotiateContentType, parseJson } = require('@semapps/middlewares'); -const { notify } = require('@semapps/ontologies'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); - -module.exports = { - name: 'solid-notifications.listener', - mixins: [DbService], - adapter: new TripleStoreAdapter({ type: 'WebhookChannelListener', dataset: 'settings' }), - settings: { - baseUrl: undefined, - // DbService settings - idField: '@id' - }, - dependencies: ['api', 'app', 'ontologies'], - async started() { - if (!this.settings.baseUrl) throw new Error(`The baseUrl setting is required`); - - await this.broker.call('ontologies.register', notify); - - // Retrieve all active listeners - const results = await this.actions.list({}); - this.listeners = results.rows; - - const { pathname: basePath } = new URL(this.settings.baseUrl); - - await this.broker.call('api.addRoute', { - route: { - path: path.join(basePath, '/.webhooks/:uuid'), - authorization: false, - authentication: false, - aliases: { - 'POST /': [ - parseHeader, - negotiateContentType, - parseRawBody, - parseJson, - 'solid-notifications.listener.transfer' - ] - }, - bodyParsers: false - } - }); - }, - actions: { - async register(ctx) { - const { resourceUri, actionName } = ctx.params; - - const appActor = await ctx.call('app.get'); - - // Check if a listener already exist - const existingListener = this.listeners.find( - listener => listener.resourceUri === resourceUri && listener.actionName === actionName - ); - - if (existingListener) { - try { - // Check if channel still exist. If not, it will throw an error. - await ctx.call('ldp.remote.get', { - resourceUri: existingListener.channelUri, - webId: appActor.id, - strategy: 'networkOnly' - }); - - // If the channel still exist, registration is not needed - return existingListener; - } catch (e) { - if (e.code === 404) { - this.logger.warn( - `Channel ${existingListener.channelUri} doesn't exist anymore. Registering a new channel...` - ); - this.actions.remove({ id: existingListener['@id'] }, { parentCtx: ctx }); - this.listeners = this.listeners.filter(l => l['@id'] !== existingListener['@id']); - } else { - throw e; - } - } - } - - // Discover webhook endpoint - const storageDescription = await this.getSolidEndpoint(resourceUri); - if (!storageDescription) throw new Error(`No storageDescription found for resourceUri ${resourceUri}`); - - // Fetch all subscriptions URLs - const results = await Promise.all( - storageDescription['notify:subscription'].map(channelSubscriptionUrl => - fetch(channelSubscriptionUrl, { - headers: { - Accept: 'application/ld+json' - } - }).then(res => res.ok && res.json()) - ) - ); - - // Find webhook channel - const webhookSubscription = results.find( - subscription => subscription && subscription['notify:channelType'] === 'notify:WebhookChannel2023' - ); - - if (!webhookSubscription) throw new Error(`No webhook subscription URL found for resourceUri ${resourceUri}`); - - // Ensure webhookSubscription['notify:feature'] are correct - - // Generate a webhook path - const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuidv4()); - - // Persist listener on the settings dataset - // We must do it before creating the webhook channel, in case the webhook is called immediately - let listener = await this._create(ctx, { - webhookUrl, - resourceUri, - actionName - }); - - this.listeners.push(listener); - - // Create a webhook channel (authenticate with HTTP signature) - const { body } = await ctx.call('signature.proxy.query', { - url: webhookSubscription.id || webhookSubscription['@id'], - method: 'POST', - headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), - body: JSON.stringify({ - '@context': { - notify: 'http://www.w3.org/ns/solid/notifications#' - }, - '@type': 'notify:WebhookChannel2023', - 'notify:topic': resourceUri, - 'notify:sendTo': webhookUrl - }), - actorUri: appActor.id - }); - - // Keep track of the channel URI, to be able to check if it still exists - listener.channelUri = body.id; - await this._update(ctx, listener); - const listenerIndex = this.listeners.findIndex(l => l['@id'] === listener['@id']); - this.listeners[listenerIndex] = listener; - - return listener; - }, - async transfer(ctx) { - const { uuid, ...data } = ctx.params; - const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuid); - - const listener = this.listeners.find(l => l.webhookUrl === webhookUrl); - - if (listener) { - try { - // Do no wait for the action to finish, so that the result can be immediately returned - ctx.call(listener.actionName, data); - } catch (e) { - // Ignore errors that the actions may generate (otherwise 404 errors will be considered as non-existing webhooks) - } - ctx.meta.$statusCode = 200; - } else { - throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); - } - }, - getCache() { - return this.listeners; - } - }, - methods: { - async getSolidEndpoint(resourceUri) { - let solidEndpointUrl; - - try { - const response = await fetch(resourceUri, { method: 'HEAD' }); - const linkHeader = LinkHeader.parse(response.headers.get('Link')); - const storageDescriptionLinkHeader = linkHeader.rel('http://www.w3.org/ns/solid/terms#storageDescription'); - solidEndpointUrl = storageDescriptionLinkHeader[0].uri; - } catch (e) { - // Ignore errors, we will display a warning below - } - - if (!solidEndpointUrl) { - this.logger.warn(`Could not get link header for ${resourceUri}`); - // Assume same endpoint as ActivityPods or CSS - solidEndpointUrl = urlJoin(new URL(resourceUri).origin, '.well-known', 'solid'); - } - - const response = await fetch(solidEndpointUrl, { - headers: { - Accept: 'application/ld+json' - } - }); - - if (response.ok) { - return await response.json(); - } - return false; - } - } -}; diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts new file mode 100644 index 000000000..f9be16c16 --- /dev/null +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -0,0 +1,226 @@ +import path from 'path'; +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import LinkHeader from 'http-link-header'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message +import { v4 as uuidv4 } from 'uuid'; +import DbService from 'moleculer-db'; +import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; +import { notify } from '@semapps/ontologies'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +const SolidNotificationsListenerSchema = { + name: 'solid-notifications.listener' as const, + mixins: [DbService], + adapter: new TripleStoreAdapter({ type: 'WebhookChannelListener', dataset: 'settings' }), + settings: { + baseUrl: undefined, + // DbService settings + idField: '@id' + }, + dependencies: ['api', 'app', 'ontologies'], + async started() { + if (!this.settings.baseUrl) throw new Error(`The baseUrl setting is required`); + + await this.broker.call('ontologies.register', notify); + + // Retrieve all active listeners + const results = await this.actions.list({}); + this.listeners = results.rows; + + const { pathname: basePath } = new URL(this.settings.baseUrl); + + await this.broker.call('api.addRoute', { + route: { + path: path.join(basePath, '/.webhooks/:uuid'), + authorization: false, + authentication: false, + aliases: { + 'POST /': [ + parseHeader, + negotiateContentType, + parseRawBody, + parseJson, + 'solid-notifications.listener.transfer' + ] + }, + bodyParsers: false + } + }); + }, + actions: { + register: defineAction({ + async handler(ctx) { + const { resourceUri, actionName } = ctx.params; + + const appActor = await ctx.call('app.get'); + + // Check if a listener already exist + const existingListener = this.listeners.find( + (listener: any) => listener.resourceUri === resourceUri && listener.actionName === actionName + ); + + if (existingListener) { + try { + // Check if channel still exist. If not, it will throw an error. + await ctx.call('ldp.remote.get', { + resourceUri: existingListener.channelUri, + webId: appActor.id, + strategy: 'networkOnly' + }); + + // If the channel still exist, registration is not needed + return existingListener; + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + if (e.code === 404) { + this.logger.warn( + `Channel ${existingListener.channelUri} doesn't exist anymore. Registering a new channel...` + ); + this.actions.remove({ id: existingListener['@id'] }, { parentCtx: ctx }); + this.listeners = this.listeners.filter((l: any) => l['@id'] !== existingListener['@id']); + } else { + throw e; + } + } + } + + // Discover webhook endpoint + const storageDescription = await this.getSolidEndpoint(resourceUri); + if (!storageDescription) throw new Error(`No storageDescription found for resourceUri ${resourceUri}`); + + // Fetch all subscriptions URLs + const results = await Promise.all( + storageDescription['notify:subscription'].map((channelSubscriptionUrl: any) => + fetch(channelSubscriptionUrl, { + headers: { + Accept: 'application/ld+json' + } + }).then(res => res.ok && res.json()) + ) + ); + + // Find webhook channel + const webhookSubscription = results.find( + subscription => subscription && subscription['notify:channelType'] === 'notify:WebhookChannel2023' + ); + + if (!webhookSubscription) throw new Error(`No webhook subscription URL found for resourceUri ${resourceUri}`); + + // Ensure webhookSubscription['notify:feature'] are correct + + // Generate a webhook path + const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuidv4()); + + // Persist listener on the settings dataset + // We must do it before creating the webhook channel, in case the webhook is called immediately + let listener = await this._create(ctx, { + webhookUrl, + resourceUri, + actionName + }); + + this.listeners.push(listener); + + // Create a webhook channel (authenticate with HTTP signature) + const { body } = await ctx.call('signature.proxy.query', { + url: webhookSubscription.id || webhookSubscription['@id'], + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: JSON.stringify({ + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebhookChannel2023', + 'notify:topic': resourceUri, + 'notify:sendTo': webhookUrl + }), + actorUri: appActor.id + }); + + // Keep track of the channel URI, to be able to check if it still exists + listener.channelUri = body.id; + await this._update(ctx, listener); + const listenerIndex = this.listeners.findIndex((l: any) => l['@id'] === listener['@id']); + this.listeners[listenerIndex] = listener; + + return listener; + } + }), + + transfer: defineAction({ + async handler(ctx) { + const { uuid, ...data } = ctx.params; + const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuid); + + const listener = this.listeners.find((l: any) => l.webhookUrl === webhookUrl); + + if (listener) { + try { + // Do no wait for the action to finish, so that the result can be immediately returned + ctx.call(listener.actionName, data); + } catch (e) { + // Ignore errors that the actions may generate (otherwise 404 errors will be considered as non-existing webhooks) + } + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = 200; + } else { + throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); + } + } + }), + + getCache: defineAction({ + handler() { + return this.listeners; + } + }) + }, + methods: { + async getSolidEndpoint(resourceUri) { + let solidEndpointUrl; + + try { + const response = await fetch(resourceUri, { method: 'HEAD' }); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message + const linkHeader = LinkHeader.parse(response.headers.get('Link')); + const storageDescriptionLinkHeader = linkHeader.rel('http://www.w3.org/ns/solid/terms#storageDescription'); + solidEndpointUrl = storageDescriptionLinkHeader[0].uri; + } catch (e) { + // Ignore errors, we will display a warning below + } + + if (!solidEndpointUrl) { + this.logger.warn(`Could not get link header for ${resourceUri}`); + // Assume same endpoint as ActivityPods or CSS + solidEndpointUrl = urlJoin(new URL(resourceUri).origin, '.well-known', 'solid'); + } + + const response = await fetch(solidEndpointUrl, { + headers: { + Accept: 'application/ld+json' + } + }); + + if (response.ok) { + return await response.json(); + } + return false; + } + } +} satisfies ServiceSchema; + +export default SolidNotificationsListenerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidNotificationsListenerSchema.name]: typeof SolidNotificationsListenerSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/notifications/provider.js b/src/middleware/packages/solid/services/notifications/provider.ts similarity index 54% rename from src/middleware/packages/solid/services/notifications/provider.js rename to src/middleware/packages/solid/services/notifications/provider.ts index 2510c5d6a..f7c857a75 100644 --- a/src/middleware/packages/solid/services/notifications/provider.js +++ b/src/middleware/packages/solid/services/notifications/provider.ts @@ -1,10 +1,12 @@ -const QueueMixin = require('moleculer-bull'); -const { notify } = require('@semapps/ontologies'); -const WebhookChannelService = require('./channels/webhook-channel'); -const WebSocketChannelService = require('./channels/websocket-channel'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message +import QueueMixin from 'moleculer-bull'; +import { notify } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; +import WebhookChannelService from './channels/webhook-channel.ts'; +import WebSocketChannelService from './channels/websocket-channel.ts'; -module.exports = { - name: 'solid-notifications.provider', +const SolidNotificationsProviderSchema = { + name: 'solid-notifications.provider' as const, settings: { baseUrl: null, settingsDataset: null, @@ -24,7 +26,7 @@ module.exports = { if (channels.webhook) { this.broker.createService({ - name: 'solid-notifications.provider.webhook', + name: 'solid-notifications.provider.webhook' as const, mixins: [WebhookChannelService, QueueMixin(queueServiceUrl)], settings: { baseUrl, settingsDataset } }); @@ -32,7 +34,7 @@ module.exports = { if (channels.websocket) { this.broker.createService({ - name: 'solid-notifications.provider.websocket', + name: 'solid-notifications.provider.websocket' as const, mixins: [WebSocketChannelService], settings: { baseUrl, settingsDataset } }); @@ -41,4 +43,14 @@ module.exports = { async started() { await this.broker.call('ontologies.register', notify); } -}; +} satisfies ServiceSchema; + +export default SolidNotificationsProviderSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidNotificationsProviderSchema.name]: typeof SolidNotificationsProviderSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/preferences-file.js b/src/middleware/packages/solid/services/preferences-file.ts similarity index 60% rename from src/middleware/packages/solid/services/preferences-file.js rename to src/middleware/packages/solid/services/preferences-file.ts index 91fa106f3..3370bb06d 100644 --- a/src/middleware/packages/solid/services/preferences-file.js +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -1,9 +1,10 @@ -const { SingleResourceContainerMixin } = require('@semapps/ldp'); -const { pim } = require('@semapps/ontologies'); -const { namedNode, triple } = require('@rdfjs/data-model'); +import { SingleResourceContainerMixin } from '@semapps/ldp'; +import { pim } from '@semapps/ontologies'; +import { namedNode, triple } from '@rdfjs/data-model'; +import { ServiceSchema } from 'moleculer'; -module.exports = { - name: 'solid-preferences-file', +const SolidPreferencesFileSchema = { + name: 'solid-preferences-file' as const, mixins: [SingleResourceContainerMixin], settings: { acceptedTypes: ['pim:ConfigurationFile'], @@ -35,4 +36,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default SolidPreferencesFileSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidPreferencesFileSchema.name]: typeof SolidPreferencesFileSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/storage.js b/src/middleware/packages/solid/services/storage.js deleted file mode 100644 index 80f410f5c..000000000 --- a/src/middleware/packages/solid/services/storage.js +++ /dev/null @@ -1,89 +0,0 @@ -const urlJoin = require('url-join'); -const { triple, namedNode } = require('@rdfjs/data-model'); -const { pim } = require('@semapps/ontologies'); - -/** @type {import('moleculer').ServiceSchema} */ -module.exports = { - name: 'solid-storage', - settings: { - baseUrl: null, - pathName: 'data' - }, - dependencies: ['ontologies', 'ldp.registry'], - async started() { - if (!this.settings.baseUrl) throw new Error('The baseUrl setting of the solid-storage service is required'); - - await this.broker.call('ontologies.register', pim); - - // Register root container for the storage (/:username/data/) - // Do not await or we will have a circular dependency with the LdpRegistryService - this.broker.call('ldp.registry.register', { - path: '/', - excludeFromMirror: true, - permissions: {}, - newResourcesPermissions: {} - }); - }, - actions: { - async create(ctx) { - const { username } = ctx.params; - if (!username) throw new Error('Cannot create Solid storage without a username'); - - await ctx.call('triplestore.dataset.create', { - dataset: username, - secure: false // TODO Remove when we switch to Fuseki 5 - }); - - ctx.meta.dataset = username; - - // Create the storage root container so that the LdpRegistryService can create the default containers - const storageRootUri = urlJoin(this.settings.baseUrl, username, this.settings.pathName); - await ctx.call('ldp.container.create', { containerUri: storageRootUri, webId: 'system' }); - - return storageRootUri; - }, - async getUrl(ctx) { - const { webId } = ctx.params; - // This is faster, but later we should use the 'pim:storage' property of the webId - return urlJoin(webId, this.settings.pathName); - } - }, - events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - - const storageUrl = await this.actions.getUrl({ webId }, { parentCtx: ctx }); - - // Attach the storage URL to the webId - await ctx.call('ldp.resource.patch', { - resourceUri: webId, - triplesToAdd: [ - triple(namedNode(webId), namedNode('http://www.w3.org/ns/pim/space#storage'), namedNode(storageUrl)) - ], - webId: 'system' - }); - - // Give full rights to user on his storage - await ctx.call('webacl.resource.addRights', { - resourceUri: storageUrl, - additionalRights: { - user: { - uri: webId, - read: true, - write: true, - control: true - }, - default: { - user: { - uri: webId, - read: true, - write: true, - control: true - } - } - }, - webId: 'system' - }); - } - } -}; diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts new file mode 100644 index 000000000..734693367 --- /dev/null +++ b/src/middleware/packages/solid/services/storage.ts @@ -0,0 +1,110 @@ +import urlJoin from 'url-join'; +import { triple, namedNode } from '@rdfjs/data-model'; +import { pim } from '@semapps/ontologies'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +/** @type {import('moleculer').ServiceSchema} */ +const SolidStorageSchema = { + name: 'solid-storage' as const, + settings: { + baseUrl: null, + pathName: 'data' + }, + dependencies: ['ontologies', 'ldp.registry'], + async started() { + if (!this.settings.baseUrl) throw new Error('The baseUrl setting of the solid-storage service is required'); + + await this.broker.call('ontologies.register', pim); + + // Register root container for the storage (/:username/data/) + // Do not await or we will have a circular dependency with the LdpRegistryService + this.broker.call('ldp.registry.register', { + path: '/', + excludeFromMirror: true, + permissions: {}, + newResourcesPermissions: {} + }); + }, + actions: { + create: defineAction({ + async handler(ctx) { + const { username } = ctx.params; + if (!username) throw new Error('Cannot create Solid storage without a username'); + + await ctx.call('triplestore.dataset.create', { + dataset: username, + secure: false // TODO Remove when we switch to Fuseki 5 + }); + + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + ctx.meta.dataset = username; + + // Create the storage root container so that the LdpRegistryService can create the default containers + const storageRootUri = urlJoin(this.settings.baseUrl, username, this.settings.pathName); + await ctx.call('ldp.container.create', { containerUri: storageRootUri, webId: 'system' }); + + return storageRootUri; + } + }), + + getUrl: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + // This is faster, but later we should use the 'pim:storage' property of the webId + return urlJoin(webId, this.settings.pathName); + } + }) + }, + events: { + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + const storageUrl = await this.actions.getUrl({ webId }, { parentCtx: ctx }); + + // Attach the storage URL to the webId + await ctx.call('ldp.resource.patch', { + resourceUri: webId, + triplesToAdd: [ + triple(namedNode(webId), namedNode('http://www.w3.org/ns/pim/space#storage'), namedNode(storageUrl)) + ], + webId: 'system' + }); + + // Give full rights to user on his storage + await ctx.call('webacl.resource.addRights', { + resourceUri: storageUrl, + additionalRights: { + user: { + uri: webId, + read: true, + write: true, + control: true + }, + default: { + user: { + uri: webId, + read: true, + write: true, + control: true + } + } + }, + webId: 'system' + }); + } + }) + } +} satisfies ServiceSchema; + +export default SolidStorageSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidStorageSchema.name]: typeof SolidStorageSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.js b/src/middleware/packages/solid/services/type-index/type-indexes.js deleted file mode 100644 index 661e06b86..000000000 --- a/src/middleware/packages/solid/services/type-index/type-indexes.js +++ /dev/null @@ -1,188 +0,0 @@ -const { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } = require('@semapps/ldp'); -const { solid, skos, apods } = require('@semapps/ontologies'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const TypeRegistrationsService = require('./type-registrations'); - -module.exports = { - name: 'type-indexes', - mixins: [ControlledContainerMixin, DereferenceMixin], - settings: { - acceptedTypes: ['solid:TypeIndex'], - permissions: {}, - newResourcesPermissions: {}, - excludeFromMirror: true, - activateTombstones: false, - // DereferenceMixin settings - dereferencePlan: [{ property: 'solid:hasTypeRegistration' }] - }, - dependencies: ['ontologies'], - created() { - this.broker.createService({ - mixins: [TypeRegistrationsService] - }); - }, - async started() { - await this.broker.call('ontologies.register', solid); - // The following ontologies are used for the type description - await this.broker.call('ontologies.register', skos); - await this.broker.call('ontologies.register', apods); - }, - actions: { - async createPublicIndex(ctx) { - const { webId } = ctx.params; - - const indexUri = await this.actions.post( - { - resource: { - type: ['solid:TypeIndex', 'solid:ListedDocument'] - }, - webId - }, - { parentCtx: ctx } - ); - - // Give anonymous read permission - await ctx.call('webacl.resource.addRights', { - resourceUri: indexUri, - additionalRights: { - anon: { - read: true - } - }, - webId: 'system' - }); - - await ctx.call('ldp.resource.patch', { - resourceUri: webId, - triplesToAdd: [ - triple(namedNode(webId), namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), namedNode(indexUri)) - ], - webId - }); - }, - async createPrivateIndex(ctx) { - const { webId } = ctx.params; - - if (!(await this.preferencesFileAvailable())) - throw new Error(`The private type index requires the SolidPreferencesFile service`); - - const preferencesUri = await ctx.call('solid-preferences-file.getResourceUri', { webId }); - if (!preferencesUri) throw new Error(`No preferences file found for user ${webId}`); - - const privateIndex = await this.actions.getPrivateIndex({ webId }); - if (privateIndex) throw new Error(`A private index already exist for user ${webId}`); - - const indexUri = await this.actions.post( - { - resource: { - type: ['solid:TypeIndex', 'solid:UnlistedDocument'] - }, - contentType: MIME_TYPES.JSON, - webId - }, - { parentCtx: ctx } - ); - - await ctx.call('solid-preferences-file.patch', { - resourceUri: preferencesUri, - triplesToAdd: [ - triple( - namedNode(preferencesUri), - namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), - namedNode(indexUri) - ) - ], - webId - }); - }, - async getPublicIndex(ctx) { - const { webId } = ctx.params; - - const user = await ctx.call('ldp.resource.get', { - resourceUri: webId, - webId - }); - - return user['solid:publicTypeIndex']; - }, - async getPrivateIndex(ctx) { - const { webId } = ctx.params; - - if (!(await this.preferencesFileAvailable())) - throw new Error(`The private type index requires the SolidPreferencesFile service`); - - const preferencesFileUri = await ctx.call('solid-preferences-file.get', { webId }); - - return preferencesFileUri?.['solid:privateTypeIndex']; - }, - async waitForIndexCreation(ctx) { - const { type, webId } = ctx.params; - let indexUri; - let attempts = 0; - - do { - attempts += 1; - if (attempts > 1) await delay(1000); - try { - indexUri = - type === 'private' - ? await this.actions.getPrivateIndex({ webId }) - : await this.actions.getPublicIndex({ webId }); - } catch (e) { - // Ignore 404 errors - if (e.code !== 404) throw e; - } - } while (!indexUri || attempts > 30); - - if (!indexUri) - throw new Error(`${type === 'private' ? 'Private' : 'Public'} TypeIndex still has not been created after 30s`); - - return indexUri; - }, - /** - * Wait until all type registrations have been created for the newly-created user - */ - async awaitCreateComplete(ctx) { - const { webId } = ctx.params; - - const containers = await ctx.call('ldp.registry.list'); - const numContainersWithTypeIndex = Object.values(containers).filter(container => container.typeIndex).length; - - let numTypeRegistrations; - let attempts = 0; - do { - attempts += 1; - if (attempts > 1) await delay(1000); - const typeRegistrationsContainer = await ctx.call('type-registrations.list', { webId }); - numTypeRegistrations = arrayOf(typeRegistrationsContainer['ldp:contains']).length; - if (attempts > 30) - throw new Error( - `After 30s, user ${webId} has only ${numTypeRegistrations} types registrations. Expecting ${numContainersWithTypeIndex}` - ); - } while (numTypeRegistrations < numContainersWithTypeIndex); - } - }, - methods: { - async preferencesFileAvailable() { - const services = await this.broker.call('$node.services'); - return services.some(s => s.name === 'solid-preferences-file'); - } - }, - events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - - // Wait until the /solid/type-index container has been created for the user - const indexesContainerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); - await this.actions.waitForContainerCreation({ containerUri: indexesContainerUri }, { parentCtx: ctx }); - - // Wait until the /solid/type-registration container has been created for the user - const registrationsContainerUri = await ctx.call('type-registrations.getContainerUri', { webId }); - await ctx.call('type-registrations.waitForContainerCreation', { containerUri: registrationsContainerUri }); - - await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); - await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); - } - } -}; diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts new file mode 100644 index 000000000..581487ee4 --- /dev/null +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -0,0 +1,228 @@ +import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@semapps/ldp'; +import { solid, skos, apods } from '@semapps/ontologies'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { namedNode, triple } from '@rdfjs/data-model'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import TypeRegistrationsService from './type-registrations.ts'; + +const TypeIndexesSchema = { + name: 'type-indexes' as const, + mixins: [ControlledContainerMixin, DereferenceMixin], + settings: { + acceptedTypes: ['solid:TypeIndex'], + permissions: {}, + newResourcesPermissions: {}, + excludeFromMirror: true, + activateTombstones: false, + // DereferenceMixin settings + dereferencePlan: [{ property: 'solid:hasTypeRegistration' }] + }, + dependencies: ['ontologies'], + created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "type-registra... Remove this comment to see the full error message + this.broker.createService({ + mixins: [TypeRegistrationsService] + }); + }, + async started() { + await this.broker.call('ontologies.register', solid); + // The following ontologies are used for the type description + await this.broker.call('ontologies.register', skos); + await this.broker.call('ontologies.register', apods); + }, + actions: { + createPublicIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + const indexUri = await this.actions.post( + { + resource: { + type: ['solid:TypeIndex', 'solid:ListedDocument'] + }, + webId + }, + { parentCtx: ctx } + ); + + // Give anonymous read permission + await ctx.call('webacl.resource.addRights', { + resourceUri: indexUri, + additionalRights: { + anon: { + read: true + } + }, + webId: 'system' + }); + + await ctx.call('ldp.resource.patch', { + resourceUri: webId, + triplesToAdd: [ + triple(namedNode(webId), namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), namedNode(indexUri)) + ], + webId + }); + } + }), + + createPrivateIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + if (!(await this.preferencesFileAvailable())) + throw new Error(`The private type index requires the SolidPreferencesFile service`); + + const preferencesUri = await ctx.call('solid-preferences-file.getResourceUri', { webId }); + if (!preferencesUri) throw new Error(`No preferences file found for user ${webId}`); + + const privateIndex = await this.actions.getPrivateIndex({ webId }); + if (privateIndex) throw new Error(`A private index already exist for user ${webId}`); + + const indexUri = await this.actions.post( + { + resource: { + type: ['solid:TypeIndex', 'solid:UnlistedDocument'] + }, + contentType: MIME_TYPES.JSON, + webId + }, + { parentCtx: ctx } + ); + + await ctx.call('solid-preferences-file.patch', { + resourceUri: preferencesUri, + triplesToAdd: [ + triple( + namedNode(preferencesUri), + namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), + namedNode(indexUri) + ) + ], + webId + }); + } + }), + + getPublicIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + const user = await ctx.call('ldp.resource.get', { + resourceUri: webId, + webId + }); + + return user['solid:publicTypeIndex']; + } + }), + + getPrivateIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + if (!(await this.preferencesFileAvailable())) + throw new Error(`The private type index requires the SolidPreferencesFile service`); + + const preferencesFileUri = await ctx.call('solid-preferences-file.get', { webId }); + + return preferencesFileUri?.['solid:privateTypeIndex']; + } + }), + + waitForIndexCreation: defineAction({ + async handler(ctx) { + const { type, webId } = ctx.params; + let indexUri; + let attempts = 0; + + do { + attempts += 1; + if (attempts > 1) await delay(1000); + try { + indexUri = + type === 'private' + ? await this.actions.getPrivateIndex({ webId }) + : await this.actions.getPublicIndex({ webId }); + } catch (e) { + // Ignore 404 errors + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + if (e.code !== 404) throw e; + } + } while (!indexUri || attempts > 30); + + if (!indexUri) + throw new Error( + `${type === 'private' ? 'Private' : 'Public'} TypeIndex still has not been created after 30s` + ); + + return indexUri; + } + }), + + awaitCreateComplete: defineAction({ + /** + * Wait until all type registrations have been created for the newly-created user + */ + async handler(ctx) { + const { webId } = ctx.params; + + const containers = await ctx.call('ldp.registry.list'); + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. + const numContainersWithTypeIndex = Object.values(containers).filter(container => container.typeIndex).length; + + let numTypeRegistrations; + let attempts = 0; + do { + attempts += 1; + if (attempts > 1) await delay(1000); + const typeRegistrationsContainer = await ctx.call('type-registrations.list', { webId }); + numTypeRegistrations = arrayOf(typeRegistrationsContainer['ldp:contains']).length; + if (attempts > 30) + throw new Error( + `After 30s, user ${webId} has only ${numTypeRegistrations} types registrations. Expecting ${numContainersWithTypeIndex}` + ); + } while (numTypeRegistrations < numContainersWithTypeIndex); + } + }) + }, + methods: { + async preferencesFileAvailable() { + const services = await this.broker.call('$node.services'); + return services.some((s: any) => s.name === 'solid-preferences-file'); + } + }, + events: { + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + + // Wait until the /solid/type-index container has been created for the user + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + const indexesContainerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.waitForContainerCreation({ containerUri: indexesContainerUri }, { parentCtx: ctx }); + + // Wait until the /solid/type-registration container has been created for the user + const registrationsContainerUri = await ctx.call('type-registrations.getContainerUri', { webId }); + await ctx.call('type-registrations.waitForContainerCreation', { containerUri: registrationsContainerUri }); + + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); + } + }) + } +} satisfies ServiceSchema; + +export default TypeIndexesSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [TypeIndexesSchema.name]: typeof TypeIndexesSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.js b/src/middleware/packages/solid/services/type-index/type-registrations.ts similarity index 79% rename from src/middleware/packages/solid/services/type-index/type-registrations.js rename to src/middleware/packages/solid/services/type-index/type-registrations.ts index a634f4423..10ab2dbcd 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.js +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -1,9 +1,10 @@ -const urlJoin = require('url-join'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const { ControlledContainerMixin, arrayOf } = require('@semapps/ldp'); +import urlJoin from 'url-join'; +import { namedNode, triple } from '@rdfjs/data-model'; +import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; -module.exports = { - name: 'type-registrations', +const TypeRegistrationsSchema = { + name: 'type-registrations' as const, mixins: [ControlledContainerMixin], settings: { acceptedTypes: ['solid:TypeRegistration'], @@ -13,12 +14,14 @@ module.exports = { activateTombstones: false }, actions: { - register: { + register: defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message types: { type: 'array' }, containerUri: { type: 'string' }, webId: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message isPrivate: { type: 'boolean', default: false } }, async handler(ctx) { @@ -38,7 +41,7 @@ module.exports = { types: existingRegistration['solid:forClass'] }); - const newExpandedTypes = expandedTypes.filter(t => !oldExpandedTypes.includes(t)); + const newExpandedTypes = expandedTypes.filter((t: any) => !oldExpandedTypes.includes(t)); if (newExpandedTypes.length > 0) { for (const expandedType of newExpandedTypes) { @@ -108,13 +111,14 @@ module.exports = { return registrationUri; } } - }, + }), + /** * Bind an application to a certain type of resources * If no other app is bound with this type yet, it will be marked as the default app * Otherwise, the app will be added to the list of available apps, that the user can switch to */ - bindApp: { + bindApp: defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -135,11 +139,12 @@ module.exports = { await ctx.call('type-registrations.put', { resource: registration, webId }); } - }, + }), + /** * Unbind an application from a certain type of resource (Mirror of the above action.) */ - unbindApp: { + unbindApp: defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -168,8 +173,9 @@ module.exports = { webId }); } - }, - getByType: { + }), + + getByType: defineAction({ visibility: 'public', params: { type: { type: 'string' }, @@ -191,8 +197,9 @@ module.exports = { // There can be several TypeRegistration per type return arrayOf(filteredContainer['ldp:contains']); } - }, - getByContainerUri: { + }), + + getByContainerUri: defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -212,8 +219,9 @@ module.exports = { // There should be only one TypeRegistration per container return arrayOf(filteredContainer['ldp:contains'])[0]; } - }, - findContainersUris: { + }), + + findContainersUris: defineAction({ visibility: 'public', params: { type: { type: 'string' }, @@ -224,14 +232,15 @@ module.exports = { const registrations = await this.actions.getByType({ type, webId }, { parentCtx: ctx }); - return registrations.map(r => r['solid:instanceContainer']); + return registrations.map((r: any) => r['solid:instanceContainer']); } - }, + }), + /** * Reset the public and private registries of the given user * Based on the information found on the LDP registry */ - resetFromRegistry: { + resetFromRegistry: defineAction({ visibility: 'public', params: { webId: { type: 'string' } @@ -257,13 +266,17 @@ module.exports = { const podUrl = await ctx.call('solid-storage.getUrl', { webId }); for (const options of Object.values(registeredContainers)) { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. if (options.typeIndex) { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. const containerUri = urlJoin(podUrl, options.path); await this.actions.register( { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. types: arrayOf(options.acceptedTypes), containerUri, webId, + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. isPrivate: options.typeIndex === 'private' }, { parentCtx: ctx } @@ -271,26 +284,30 @@ module.exports = { } } } - } + }) }, events: { - async 'ldp.container.created'(ctx) { - const { containerUri, options, webId } = ctx.params; + 'ldp.container.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message + const { containerUri, options, webId } = ctx.params; - if (options?.typeIndex) { - await ctx.call('type-indexes.waitForIndexCreation', { type: options.typeIndex, webId }); + if (options?.typeIndex) { + await ctx.call('type-indexes.waitForIndexCreation', { type: options.typeIndex, webId }); - await this.actions.register( - { - types: arrayOf(options?.acceptedTypes), - containerUri, - webId, - isPrivate: options.typeIndex === 'private' - }, - { parentCtx: ctx } - ); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.register( + { + types: arrayOf(options?.acceptedTypes), + containerUri, + webId, + isPrivate: options.typeIndex === 'private' + }, + { parentCtx: ctx } + ); + } } - } + }) }, hooks: { after: { @@ -312,4 +329,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default TypeRegistrationsSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [TypeRegistrationsSchema.name]: typeof TypeRegistrationsSchema; + } + } +} diff --git a/src/middleware/packages/solid/tsconfig.json b/src/middleware/packages/solid/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/solid/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/sparql-endpoint/getRoute.js b/src/middleware/packages/sparql-endpoint/getRoute.ts similarity index 87% rename from src/middleware/packages/sparql-endpoint/getRoute.js rename to src/middleware/packages/sparql-endpoint/getRoute.ts index 1204a1b9e..c5585cbee 100644 --- a/src/middleware/packages/sparql-endpoint/getRoute.js +++ b/src/middleware/packages/sparql-endpoint/getRoute.ts @@ -1,14 +1,14 @@ -const { +import { parseHeader, parseRawBody, negotiateAccept, saveDatasetMeta, negotiateContentType -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, saveDatasetMeta]; -function getRoute(path) { +function getRoute(path: any) { return { path, name: 'sparql-endpoint', @@ -25,7 +25,7 @@ function getRoute(path) { json: false, urlencoded: false }, - onError(req, res, err) { + onError(req: any, res: any, err: any) { const { type, code, message, data, name } = err; res.writeHead(Number(code) || 500, data && data.status ? data.status : 'Server error', { 'Content-Type': 'application/json' @@ -35,4 +35,4 @@ function getRoute(path) { }; } -module.exports = getRoute; +export default getRoute; diff --git a/src/middleware/packages/sparql-endpoint/index.js b/src/middleware/packages/sparql-endpoint/index.js deleted file mode 100644 index 5690ee81f..000000000 --- a/src/middleware/packages/sparql-endpoint/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - SparqlEndpointService: require('./service') -}; diff --git a/src/middleware/packages/sparql-endpoint/index.ts b/src/middleware/packages/sparql-endpoint/index.ts new file mode 100644 index 000000000..1a645c35a --- /dev/null +++ b/src/middleware/packages/sparql-endpoint/index.ts @@ -0,0 +1,3 @@ +import SparqlEndpointService from './service.ts'; + +export { SparqlEndpointService }; diff --git a/src/middleware/packages/sparql-endpoint/package.json b/src/middleware/packages/sparql-endpoint/package.json index b3149c47f..3260bce7c 100644 --- a/src/middleware/packages/sparql-endpoint/package.json +++ b/src/middleware/packages/sparql-endpoint/package.json @@ -9,15 +9,20 @@ "@semapps/middlewares": "1.1.4", "@semapps/mime-types": "1.1.4", "@semapps/triplestore": "1.1.4", - "moleculer": "^0.14.18", "moleculer-web": "^0.10.0-beta1", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "684ba335d0759920f4134f550431b3c3af8e2599", "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/sparql-endpoint/service.js b/src/middleware/packages/sparql-endpoint/service.js deleted file mode 100644 index 199f022fc..000000000 --- a/src/middleware/packages/sparql-endpoint/service.js +++ /dev/null @@ -1,67 +0,0 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const getRoute = require('./getRoute'); - -const SparqlEndpointService = { - name: 'sparqlEndpoint', - settings: { - defaultAccept: 'text/turtle', - ignoreAcl: false, - podProvider: false - }, - dependencies: ['triplestore', 'api', 'ldp'], - async started() { - const basePath = await this.broker.call('ldp.getBasePath'); - if (this.settings.podProvider) { - await this.broker.call('api.addRoute', { - route: getRoute(path.join(basePath, '/:username([^/.][^/]+)/sparql')), - toBottom: false - }); - } else { - await this.broker.call('api.addRoute', { route: getRoute(path.join(basePath, '/sparql')), toBottom: false }); - } - }, - actions: { - async query(ctx) { - const query = ctx.params.query || ctx.meta.rawBody; - const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; - - if (this.settings.podProvider) { - const [account] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); - if (!account) throw new Error(`No account found with username ${ctx.params.username}`); - - if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { - throw new Error(`You can only query your own SPARQL endpoint`); - } - } - - const response = await ctx.call('triplestore.query', { - query, - accept, - dataset: this.settings.podProvider ? ctx.params.username : undefined, - // In Pod provider config, query as system when the Pod owner is querying his own data - webId: this.settings.ignoreAcl ? 'system' : ctx.meta.webId - }); - - if (ctx.meta.$responseType === undefined) { - ctx.meta.$responseType = ctx.meta.responseType || accept; - } - - return response; - } - }, - events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - if (this.settings.podProvider) { - await ctx.call('activitypub.actor.addEndpoint', { - actorUri: webId, - predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', - endpoint: urlJoin(webId, 'sparql') - }); - } - } - } -}; - -module.exports = SparqlEndpointService; diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts new file mode 100644 index 000000000..d5eeb7921 --- /dev/null +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -0,0 +1,89 @@ +// @ts-expect-error +import path from 'path'; +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import getRoute from './getRoute.ts'; + +const SparqlEndpointService = { + name: 'sparqlEndpoint' as const, + settings: { + defaultAccept: 'text/turtle', + ignoreAcl: false, + podProvider: false + }, + dependencies: ['triplestore', 'api', 'ldp'], + async started() { + const basePath = await this.broker.call('ldp.getBasePath'); + if (this.settings.podProvider) { + await this.broker.call('api.addRoute', { + route: getRoute(path.join(basePath, '/:username([^/.][^/]+)/sparql')), + toBottom: false + }); + } else { + await this.broker.call('api.addRoute', { route: getRoute(path.join(basePath, '/sparql')), toBottom: false }); + } + }, + actions: { + query: defineAction({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. + const query = ctx.params.query || ctx.meta.rawBody; + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. + const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; + + if (this.settings.podProvider) { + const [account] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); + if (!account) throw new Error(`No account found with username ${ctx.params.username}`); + + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { + throw new Error(`You can only query your own SPARQL endpoint`); + } + } + + const response = await ctx.call('triplestore.query', { + query, + accept, + dataset: this.settings.podProvider ? ctx.params.username : undefined, + // In Pod provider config, query as system when the Pod owner is querying his own data + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + webId: this.settings.ignoreAcl ? 'system' : ctx.meta.webId + }); + + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message + if (ctx.meta.$responseType === undefined) { + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message + ctx.meta.$responseType = ctx.meta.responseType || accept; + } + + return response; + } + }) + }, + events: { + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + if (this.settings.podProvider) { + await ctx.call('activitypub.actor.addEndpoint', { + actorUri: webId, + predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', + endpoint: urlJoin(webId, 'sparql') + }); + } + } + }) + } +} satisfies ServiceSchema; + +export default SparqlEndpointService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SparqlEndpointService.name]: typeof SparqlEndpointService; + } + } +} diff --git a/src/middleware/packages/sparql-endpoint/tsconfig.json b/src/middleware/packages/sparql-endpoint/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/sparql-endpoint/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/sync/index.js b/src/middleware/packages/sync/index.js deleted file mode 100644 index 1ee79d4b1..000000000 --- a/src/middleware/packages/sync/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - ObjectsWatcherMiddleware: require('./middlewares/objects-watcher'), - AggregatorService: require('./services/aggregator'), - MirrorService: require('./services/mirror'), - SynchronizerService: require('./services/synchronizer') -}; diff --git a/src/middleware/packages/sync/index.ts b/src/middleware/packages/sync/index.ts new file mode 100644 index 000000000..367cd813f --- /dev/null +++ b/src/middleware/packages/sync/index.ts @@ -0,0 +1,6 @@ +import ObjectsWatcherMiddleware from './middlewares/objects-watcher.ts'; +import AggregatorService from './services/aggregator.ts'; +import MirrorService from './services/mirror.ts'; +import SynchronizerService from './services/synchronizer.ts'; + +export { ObjectsWatcherMiddleware, AggregatorService, MirrorService, SynchronizerService }; diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.js b/src/middleware/packages/sync/middlewares/objects-watcher.ts similarity index 87% rename from src/middleware/packages/sync/middlewares/objects-watcher.js rename to src/middleware/packages/sync/middlewares/objects-watcher.ts index 5ac02c810..13a908189 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.js +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -1,4 +1,4 @@ -const { PUBLIC_URI, ACTIVITY_TYPES } = require('@semapps/activitypub'); +import { PUBLIC_URI, ACTIVITY_TYPES } from '@semapps/activitypub'; const handledLdpActions = ['ldp.container.post', 'ldp.resource.put', 'ldp.resource.patch', 'ldp.resource.delete']; @@ -10,15 +10,16 @@ const handledWacActions = [ ]; const ObjectsWatcherMiddleware = (config = {}) => { + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type '{}'. const { baseUrl, podProvider = false, postWithoutRecipients = false, transientActivities = false } = config; - let relayActor; - let excludedContainersPathRegex = []; + let relayActor: any; + let excludedContainersPathRegex: any = []; let initialized = false; let cacherActivated = false; if (!baseUrl) throw new Error('The baseUrl setting is missing from ObjectsWatcherMiddleware'); - const isHandled = actionName => { + const isHandled = (actionName: any) => { // In a Pod provider config, we want to handle only LDP-related actions // The AnnouncerService takes care of resources sharing with other users if (podProvider) { @@ -29,7 +30,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { }; /** Get owner WebID of resource (by looking at the slash URI). */ - const getActor = async (ctx, resourceUri) => { + const getActor = async (ctx: any, resourceUri: any) => { if (podProvider) { const url = new URL(resourceUri); const podOwnerUri = `${url.origin}/${url.pathname.split('/')[1]}`; @@ -38,7 +39,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { return relayActor; }; - const clearWebAclCache = async (ctx, resourceUri, containerUri) => { + const clearWebAclCache = async (ctx: any, resourceUri: any, containerUri: any) => { if (cacherActivated) { // TODO Use WebAclMiddleware instead of events to clear cache immediately // https://github.com/assemblee-virtuelle/semapps/issues/1127 @@ -50,24 +51,25 @@ const ObjectsWatcherMiddleware = (config = {}) => { } }; - const getRecipients = async (ctx, resourceUri) => { + const getRecipients = async (ctx: any, resourceUri: any) => { const isPublic = await ctx.call('webacl.resource.isPublic', { resourceUri }); const actor = await getActor(ctx, resourceUri); const usersWithReadRights = await ctx.call('webacl.resource.getUsersWithReadRights', { resourceUri }); - const recipients = usersWithReadRights.filter(u => u !== actor.id); + const recipients = usersWithReadRights.filter((u: any) => u !== actor.id); if (isPublic) { return [...recipients, actor.followers, PUBLIC_URI]; } return recipients; }; - const isExcluded = containersUris => { - return containersUris.some(uri => + const isExcluded = (containersUris: any) => { + return containersUris.some((uri: any) => + // @ts-expect-error TS(7006): Parameter 'pathRegex' implicitly has an 'any' type... Remove this comment to see the full error message excludedContainersPathRegex.some(pathRegex => pathRegex.test(new URL(uri).pathname)) ); }; - const outboxPost = async (ctx, resourceUri, recipients, activity) => { + const outboxPost = async (ctx: any, resourceUri: any, recipients: any, activity: any) => { if (recipients.length > 0 || postWithoutRecipients) { const actor = await getActor(ctx, resourceUri); @@ -87,7 +89,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { return { name: 'ObjectsWatcherMiddleware', - async started(broker) { + async started(broker: any) { if (!podProvider) { await broker.waitForServices('activitypub.relay'); relayActor = await broker.call('activitypub.relay.getActor'); @@ -95,7 +97,9 @@ const ObjectsWatcherMiddleware = (config = {}) => { const containers = await broker.call('ldp.registry.list'); for (const container of Object.values(containers)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. if (container.excludeFromMirror === true && !excludedContainersPathRegex.includes(container.pathRegex)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. excludedContainersPathRegex.push(container.pathRegex); } } @@ -103,9 +107,9 @@ const ObjectsWatcherMiddleware = (config = {}) => { initialized = true; cacherActivated = !!broker.cacher; }, - localAction: (next, action) => { + localAction: (next: any, action: any) => { if (isHandled(action.name)) { - return async ctx => { + return async (ctx: any) => { // Don't handle actions until middleware is fully started // Otherwise, the creation of the relay actor calls the middleware before it started if (!initialized) return await next(ctx); @@ -116,7 +120,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { let resourceUri; let containerUri; let oldContainers; - let oldRecipients; + let oldRecipients: any; switch (action.name) { case 'ldp.container.post': @@ -245,7 +249,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { // Clear cache now otherwise getRecipients() may return the old cache rights await clearWebAclCache(ctx, resourceUri, containerUri); const newRecipients = await getRecipients(ctx, ctx.params.resourceUri); - const recipientsAdded = newRecipients.filter(u => !oldRecipients.includes(u)); + const recipientsAdded = newRecipients.filter((u: any) => !oldRecipients.includes(u)); if (recipientsAdded.length > 0) { const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri @@ -266,7 +270,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { const newRecipients = await getRecipients(ctx, ctx.params.resourceUri); const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri }); - const recipientsAdded = newRecipients.filter(u => !oldRecipients.includes(u)); + const recipientsAdded = newRecipients.filter((u: any) => !oldRecipients.includes(u)); if (recipientsAdded.length > 0) { outboxPost(ctx, ctx.params.resourceUri, recipientsAdded, { type: ACTIVITY_TYPES.CREATE, @@ -275,7 +279,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { }); } - const recipientsRemoved = oldRecipients.filter(u => !newRecipients.includes(u)); + const recipientsRemoved = oldRecipients.filter((u: any) => !newRecipients.includes(u)); if (recipientsRemoved.length > 0) { outboxPost(ctx, ctx.params.resourceUri, recipientsRemoved, { type: ACTIVITY_TYPES.DELETE, @@ -287,6 +291,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { if (actionReturnValue.isContainer && actionReturnValue.addDefaultPublicRead) { const subUris = await ctx.call('ldp.container.getUris', { containerUri: ctx.params.resourceUri }); // TODO check that sub-resources did not already have public read rights individually (must be done before) + // @ts-expect-error TS(2554): Expected 4 arguments, but got 3. outboxPost(ctx, ctx.params.resourceUri, { type: ACTIVITY_TYPES.CREATE, object: subUris, @@ -297,6 +302,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { if (actionReturnValue.isContainer && actionReturnValue.removeDefaultPublicRead) { const subUris = await ctx.call('ldp.container.getUris', { containerUri: ctx.params.resourceUri }); // TODO check that sub-resources did not already have public read rights individually (must be done before) + // @ts-expect-error TS(2554): Expected 4 arguments, but got 3. outboxPost(ctx, ctx.params.resourceUri, { type: ACTIVITY_TYPES.DELETE, object: subUris, @@ -314,7 +320,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { // Clear cache now otherwise getRecipients() may return the old cache rights await clearWebAclCache(ctx, resourceUri, containerUri); const newRecipients = await getRecipients(ctx, ctx.params.resourceUri); - const recipientsRemoved = oldRecipients.filter(u => !newRecipients.includes(u)); + const recipientsRemoved = oldRecipients.filter((u: any) => !newRecipients.includes(u)); if (recipientsRemoved.length > 0 && !newRecipients.includes(PUBLIC_URI)) { const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri @@ -337,9 +343,9 @@ const ObjectsWatcherMiddleware = (config = {}) => { // Do not use the middleware for this action return next; }, - localEvent(next, event) { + localEvent(next: any, event: any) { if (event.name === 'ldp.registry.registered') { - return async ctx => { + return async (ctx: any) => { const { container } = ctx.params; if (container.excludeFromMirror === true && !excludedContainersPathRegex.includes(container.pathRegex)) { excludedContainersPathRegex.push(container.pathRegex); @@ -352,4 +358,4 @@ const ObjectsWatcherMiddleware = (config = {}) => { }; }; -module.exports = ObjectsWatcherMiddleware; +export default ObjectsWatcherMiddleware; diff --git a/src/middleware/packages/sync/package.json b/src/middleware/packages/sync/package.json index 0f3f3ca0b..26ea268e7 100644 --- a/src/middleware/packages/sync/package.json +++ b/src/middleware/packages/sync/package.json @@ -8,14 +8,19 @@ "@semapps/activitypub": "1.1.4", "@semapps/ldp": "1.1.4", "@semapps/mime-types": "1.1.4", - "moleculer": "^0.14.17", "node-fetch": "^2.6.6", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/sync/services/aggregator.js b/src/middleware/packages/sync/services/aggregator.js deleted file mode 100644 index 38a654cd0..000000000 --- a/src/middleware/packages/sync/services/aggregator.js +++ /dev/null @@ -1,48 +0,0 @@ -const { ActivitiesHandlerMixin, ACTIVITY_TYPES } = require('@semapps/activitypub'); -const SynchronizerService = require('./synchronizer'); - -module.exports = { - name: 'aggregator', - mixins: [ActivitiesHandlerMixin], - settings: { - acceptFollowOffers: true, - mirrorGraph: true - }, - dependencies: ['activitypub.relay'], - created() { - this.broker.createService({ - mixins: [SynchronizerService], - settings: { - podProvider: false, - mirrorGraph: this.settings.mirrorGraph, - synchronizeContainers: false, - attachToLocalContainers: true - } - }); - }, - async started() { - this.relayActor = await this.broker.call('activitypub.relay.getActor'); - }, - activities: { - offerFollow: { - match: { - type: ACTIVITY_TYPES.OFFER, - object: { - type: ACTIVITY_TYPES.FOLLOW - } - }, - async onReceive(ctx, activity, recipientUri) { - if (this.settings.acceptFollowOffers && recipientUri === this.relayActor.id) { - return await ctx.call('activitypub.outbox.post', { - collectionUri: this.relayActor.outbox, - '@context': 'https://www.w3.org/ns/activitystreams', - actor: this.relayActor.id, - type: ACTIVITY_TYPES.FOLLOW, - object: activity.actor, - to: activity.actor - }); - } - } - } - } -}; diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts new file mode 100644 index 000000000..a3a582319 --- /dev/null +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -0,0 +1,64 @@ +import { ActivitiesHandlerMixin, ACTIVITY_TYPES } from '@semapps/activitypub'; +import { ServiceSchema } from 'moleculer'; +import SynchronizerService from './synchronizer.ts'; + +const AggregatorSchema = { + name: 'aggregator' as const, + mixins: [ActivitiesHandlerMixin], + settings: { + acceptFollowOffers: true, + mirrorGraph: true + }, + dependencies: ['activitypub.relay'], + created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "synchronizer"... Remove this comment to see the full error message + this.broker.createService({ + mixins: [SynchronizerService], + settings: { + podProvider: false, + mirrorGraph: this.settings.mirrorGraph, + synchronizeContainers: false, + attachToLocalContainers: true + } + }); + }, + async started() { + this.relayActor = await this.broker.call('activitypub.relay.getActor'); + }, + activities: { + offerFollow: { + match: { + type: ACTIVITY_TYPES.OFFER, + object: { + type: ACTIVITY_TYPES.FOLLOW + } + }, + // @ts-expect-error TS(7023): 'onReceive' implicitly has return type 'any' becau... Remove this comment to see the full error message + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message + if (this.settings.acceptFollowOffers && recipientUri === this.relayActor.id) { + return await ctx.call('activitypub.outbox.post', { + // @ts-expect-error TS(2339): Property 'relayActor' does not exist on type '{ ma... Remove this comment to see the full error message + collectionUri: this.relayActor.outbox, + '@context': 'https://www.w3.org/ns/activitystreams', + // @ts-expect-error TS(2339): Property 'relayActor' does not exist on type '{ ma... Remove this comment to see the full error message + actor: this.relayActor.id, + type: ACTIVITY_TYPES.FOLLOW, + object: activity.actor, + to: activity.actor + }); + } + } + } + } +} satisfies ServiceSchema; + +export default AggregatorSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AggregatorSchema.name]: typeof AggregatorSchema; + } + } +} diff --git a/src/middleware/packages/sync/services/mirror.js b/src/middleware/packages/sync/services/mirror.ts similarity index 83% rename from src/middleware/packages/sync/services/mirror.js rename to src/middleware/packages/sync/services/mirror.ts index 6a6e8d80b..4ebca7fce 100644 --- a/src/middleware/packages/sync/services/mirror.js +++ b/src/middleware/packages/sync/services/mirror.ts @@ -1,14 +1,18 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const { MoleculerError } = require('moleculer').Errors; -const { createFragmentURL, arrayOf } = require('@semapps/ldp'); -const { ACTIVITY_TYPES } = require('@semapps/activitypub'); -const SynchronizerService = require('./synchronizer'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { createFragmentURL, arrayOf } from '@semapps/ldp'; +import { ACTIVITY_TYPES } from '@semapps/activitypub'; +import { ServiceSchema, defineAction } from 'moleculer'; +import SynchronizerService from './synchronizer.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); -module.exports = { - name: 'mirror', +const MirrorSchema = { + name: 'mirror' as const, settings: { graphName: 'http://semapps.org/mirror', servers: [] @@ -23,6 +27,7 @@ module.exports = { 'ldp.registry' ], created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "synchronizer"... Remove this comment to see the full error message this.broker.createService({ mixins: [SynchronizerService], settings: { @@ -45,7 +50,7 @@ module.exports = { } }, actions: { - mirror: { + mirror: defineAction({ visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -86,8 +91,10 @@ module.exports = { const json = await response.json(); const mapServers = {}; for (const s of json['@graph']) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message mapServers[s['@id']] = s; } + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const server = mapServers[createFragmentURL('', serverUrl)]; if (!server) throw new MoleculerError( @@ -170,6 +177,16 @@ module.exports = { return remoteRelayActorUri; } + }) + } +} satisfies ServiceSchema; + +export default MirrorSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [MirrorSchema.name]: typeof MirrorSchema; } } -}; +} diff --git a/src/middleware/packages/sync/services/synchronizer.js b/src/middleware/packages/sync/services/synchronizer.ts similarity index 69% rename from src/middleware/packages/sync/services/synchronizer.js rename to src/middleware/packages/sync/services/synchronizer.ts index cdc0b1d14..5ea15c16d 100644 --- a/src/middleware/packages/sync/services/synchronizer.js +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -1,8 +1,9 @@ -const { arrayOf } = require('@semapps/ldp'); -const { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin } = require('@semapps/activitypub'); +import { arrayOf } from '@semapps/ldp'; +import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin } from '@semapps/activitypub'; +import { ServiceSchema } from 'moleculer'; const SynchronizerService = { - name: 'synchronizer', + name: 'synchronizer' as const, mixins: [ActivitiesHandlerMixin], settings: { podProvider: false, @@ -46,11 +47,11 @@ const SynchronizerService = { const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice return ( url === actorUri || - url.startsWith(actorUri + '/') || + url.startsWith(`${actorUri}/`) || url === aclBase || - url.startsWith(aclBase + '/') || + url.startsWith(`${aclBase}/`) || url === aclGroupBase || - url.startsWith(aclGroupBase + '/') + url.startsWith(`${aclGroupBase}/`) ); } else { const { origin } = new URL(actorUri); @@ -63,23 +64,27 @@ const SynchronizerService = { match: { type: ACTIVITY_TYPES.CREATE }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { for (let resource of arrayOf(activity.object)) { const resourceUri = typeof resource === 'string' ? resource : resource['@id'] || resource.id; // Ignore if the resource is on the same server + // @ts-expect-error TS(2339): Property 'isLocal' does not exist on type '{ match... Remove this comment to see the full error message if (!this.isLocal(resourceUri, recipientUri)) { resource = await ctx.call( 'ldp.remote.store', typeof resource === 'string' ? { resourceUri: resource, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } : { resource: { '@context': activity['@context'], ...resource }, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } @@ -87,6 +92,7 @@ const SynchronizerService = { const type = resource['@type'] || resource.type; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (activity.target && this.settings.synchronizeContainers) { for (const containerUri of arrayOf(activity.target)) { await ctx.call('ldp.container.attach', { @@ -97,9 +103,11 @@ const SynchronizerService = { } } + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.attachToLocalContainers) { let containerUri; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.podProvider) { // If this is a Pod provider, try to find the container with the type-registrations service [containerUri] = await ctx.call('type-registrations.findContainersUris', { @@ -120,6 +128,7 @@ const SynchronizerService = { if (containerUri) { await ctx.call('ldp.container.attach', { containerUri, resourceUri, webId: recipientUri }); } else { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match:... Remove this comment to see the full error message this.logger.warn( `Cannot attach resource ${resourceUri} of type "${type}", no matching local containers were found` ); @@ -134,7 +143,8 @@ const SynchronizerService = { match: { type: ACTIVITY_TYPES.UPDATE }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { for (let resource of arrayOf(activity.object)) { resource = await ctx.call( @@ -142,11 +152,13 @@ const SynchronizerService = { typeof resource === 'string' ? { resourceUri: resource, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } : { resource: { '@context': activity['@context'], ...resource }, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } @@ -159,7 +171,8 @@ const SynchronizerService = { match: { type: ACTIVITY_TYPES.DELETE }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { for (const resource of arrayOf(activity.object)) { const resourceUri = typeof resource === 'string' ? resource : resource.id || resource['@id']; @@ -174,11 +187,14 @@ const SynchronizerService = { webId: recipientUri }); } catch (e) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match:... Remove this comment to see the full error message this.logger.warn( + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. `Remote resource ${resourceUri} not deleted as it was not found on local dataset. Error ${e.message}` ); } + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (activity.target && this.settings.synchronizeContainers) { for (const containerUri of arrayOf(activity.target)) { await ctx.call('ldp.container.detach', { @@ -199,8 +215,10 @@ const SynchronizerService = { type: OBJECT_TYPES.RELATIONSHIP } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.synchronizeContainers) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { const predicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: activity.object.relationship, @@ -224,8 +242,10 @@ const SynchronizerService = { type: OBJECT_TYPES.RELATIONSHIP } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.synchronizeContainers) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { const predicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: activity.object.relationship, @@ -243,6 +263,14 @@ const SynchronizerService = { } } } -}; +} satisfies ServiceSchema; -module.exports = SynchronizerService; +export default SynchronizerService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SynchronizerService.name]: typeof SynchronizerService; + } + } +} diff --git a/src/middleware/packages/sync/tsconfig.json b/src/middleware/packages/sync/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/sync/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.js b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts similarity index 77% rename from src/middleware/packages/triplestore/actions/countTriplesOfSubject.js rename to src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index 74b86e499..3bae3fbda 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.js +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { uri: { @@ -18,7 +20,9 @@ module.exports = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) @@ -38,4 +42,6 @@ module.exports = { return results.length; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.js b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts similarity index 84% rename from src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.js rename to src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts index 6584cce69..b5f81a598 100644 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.js +++ b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { dataset: { @@ -11,6 +13,7 @@ module.exports = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; const { graphName } = ctx.params; @@ -39,4 +42,6 @@ module.exports = { ); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/dropAll.js b/src/middleware/packages/triplestore/actions/dropAll.ts similarity index 70% rename from src/middleware/packages/triplestore/actions/dropAll.js rename to src/middleware/packages/triplestore/actions/dropAll.ts index 021466d83..f83c22781 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.js +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { webId: { @@ -13,7 +14,9 @@ module.exports = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) @@ -27,4 +30,6 @@ module.exports = { } }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/insert.js b/src/middleware/packages/triplestore/actions/insert.ts similarity index 77% rename from src/middleware/packages/triplestore/actions/insert.js rename to src/middleware/packages/triplestore/actions/insert.ts index d21afef71..c2fbd8605 100644 --- a/src/middleware/packages/triplestore/actions/insert.js +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,8 +1,10 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, @@ -21,7 +23,9 @@ module.exports = { }, async handler(ctx) { const { resource, graphName } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; // Convert JSON-LD to N-Quads @@ -51,4 +55,6 @@ module.exports = { }); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/query.js b/src/middleware/packages/triplestore/actions/query.ts similarity index 74% rename from src/middleware/packages/triplestore/actions/query.js rename to src/middleware/packages/triplestore/actions/query.ts index 4d67a12fb..1a236dcf0 100644 --- a/src/middleware/packages/triplestore/actions/query.js +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,13 +1,16 @@ -const urlJoin = require('url-join'); -const { MIME_TYPES, negotiateType } = require('@semapps/mime-types'); +import urlJoin from 'url-join'; +import { MIME_TYPES, negotiateType } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { query: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message accept: { type: 'string', default: MIME_TYPES.JSON @@ -23,7 +26,9 @@ module.exports = { }, async handler(ctx) { let { accept, query } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!dataset) throw new Error(`No dataset defined for triplestore query: ${query}`); @@ -47,9 +52,11 @@ module.exports = { // we don't use the property ctx.meta.$responseType because we are not in a HTTP API call here // we are in an moleculer Action. // we use a different name (without the $) and then retrieve this value in the API action (sparqlendpoint.query) to set the $responseType + // @ts-expect-error TS(2339): Property 'responseType' does not exist on type '{}... Remove this comment to see the full error message ctx.meta.responseType = response.headers.get('content-type'); const regex = /(CONSTRUCT|SELECT|ASK).*/gm; + // @ts-expect-error TS(2531): Object is possibly 'null'. const verb = regex.exec(query)[1]; switch (verb) { case 'ASK': @@ -76,4 +83,6 @@ module.exports = { throw new Error('SPARQL Verb not supported'); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/tripleExist.js b/src/middleware/packages/triplestore/actions/tripleExist.ts similarity index 72% rename from src/middleware/packages/triplestore/actions/tripleExist.js rename to src/middleware/packages/triplestore/actions/tripleExist.ts index 25f4b6845..4e9ab68f4 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.js +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -1,6 +1,9 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message triple: { type: 'object' }, @@ -19,7 +22,9 @@ module.exports = { }, async handler(ctx) { const { triple, graphName } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) @@ -43,4 +48,6 @@ module.exports = { dataset }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/update.js b/src/middleware/packages/triplestore/actions/update.ts similarity index 74% rename from src/middleware/packages/triplestore/actions/update.js rename to src/middleware/packages/triplestore/actions/update.ts index bce5936d8..949b79497 100644 --- a/src/middleware/packages/triplestore/actions/update.js +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -1,10 +1,12 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { query: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, webId: { @@ -18,7 +20,9 @@ module.exports = { }, async handler(ctx) { let { query } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!dataset) throw new Error(`No dataset defined for triplestore update: ${query}`); @@ -41,4 +45,6 @@ module.exports = { }); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/adapter.js b/src/middleware/packages/triplestore/adapter.ts similarity index 52% rename from src/middleware/packages/triplestore/adapter.js rename to src/middleware/packages/triplestore/adapter.ts index cd0428efa..6364a2339 100644 --- a/src/middleware/packages/triplestore/adapter.js +++ b/src/middleware/packages/triplestore/adapter.ts @@ -1,26 +1,37 @@ /* eslint-disable class-methods-use-this */ -const { MIME_TYPES } = require('@semapps/mime-types'); -const { v4: uuidv4 } = require('uuid'); -const { frame } = require('jsonld'); -const { sanitizeSparqlUri, sanitizeSparqlString } = require('./utils'); +import { MIME_TYPES } from '@semapps/mime-types'; + +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message +import { v4 as uuidv4 } from 'uuid'; +import { frame } from 'jsonld'; +import { sanitizeSparqlUri, sanitizeSparqlString } from './utils.ts'; class TripleStoreAdapter { - constructor({ type, dataset, baseUri, ontology = 'http://semapps.org/ns/core#' }) { + constructor({ type, dataset, baseUri, ontology = 'http://semapps.org/ns/core#' }: any) { + // @ts-expect-error TS(2339): Property 'type' does not exist on type 'TripleStor... Remove this comment to see the full error message this.type = type; + // @ts-expect-error TS(2339): Property 'baseUri' does not exist on type 'TripleS... Remove this comment to see the full error message this.baseUri = baseUri || `urn:${type}:`; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message this.dataset = dataset; + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message this.ontology = ontology; } - init(broker, service) { + init(broker: any, service: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message this.broker = broker; + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'TripleS... Remove this comment to see the full error message this.service = service; } async connect() { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message await this.broker.waitForServices(['triplestore'], 120000); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message await this.broker.call('triplestore.dataset.create', { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset, secure: false // TODO Remove when we switch to Fuseki 5 }); @@ -41,12 +52,13 @@ class TripleStoreAdapter { * - searchFields * - query */ - find(params) { + find(params: any) { const { query } = params; // Ensure that the value does not contain SPARQL injection if (query) Object.values(query).forEach(value => sanitizeSparqlString(value)); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.query', { query: ` @@ -54,25 +66,31 @@ class TripleStoreAdapter { ?s ?p ?o } WHERE { - ?s a <${this.ontology + this.type}> . + ?s a <${ + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message + this.ontology + this.type + }> . ?s ?p ?o . ${ query ? Object.keys(query) + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message .map(predicate => `?s <${this.ontology + predicate}> "${query[predicate]}"`) .join(' . ') : '' } } `, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) - .then(result => { + .then((result: any) => { return frame(result, { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message '@context': { '@vocab': this.ontology } }); }) - .then(result => { + .then((result: any) => { if (result['@graph']) { // Several results return result['@graph']; @@ -89,14 +107,15 @@ class TripleStoreAdapter { /** * Find an entity by query */ - findOne(query) { + findOne(query: any) { throw new Error('Method not implemented'); } /** * Find an entity by ID. */ - findById(_id) { + findById(_id: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.query', { query: ` @@ -105,10 +124,12 @@ class TripleStoreAdapter { <${sanitizeSparqlUri(_id)}> ?p ?o . } `, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) - .then(result => { + .then((result: any) => { return frame(result, { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message '@context': { '@vocab': this.ontology }, '@id': _id }); @@ -118,8 +139,8 @@ class TripleStoreAdapter { /** * Find all entities by IDs */ - findByIds(ids) { - return Promise.all(ids.map(id => this.findById(id))); + findByIds(ids: any) { + return Promise.all(ids.map((id: any) => this.findById(id))); } /** @@ -131,28 +152,34 @@ class TripleStoreAdapter { * - query */ count(filters = {}) { - return this.find(filters).then(result => result.length); + return this.find(filters).then((result: any) => result.length); } /** * Insert an entity */ - insert(entity) { + insert(entity: any) { const { slug, ...resource } = entity; + // @ts-expect-error TS(2339): Property 'baseUri' does not exist on type 'TripleS... Remove this comment to see the full error message resource['@id'] = this.baseUri + (slug || uuidv4()); // Ensure no predicates include an ontology const keyWithOntology = Object.keys(resource).find(key => key.includes(':')); if (keyWithOntology) + // @ts-expect-error TS(2339): Property 'type' does not exist on type 'TripleStor... Remove this comment to see the full error message throw new Error(`Cannot create a ${this.type} with key ${keyWithOntology} (no ontology allowed)`); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.insert', { resource: { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message '@context': { '@vocab': this.ontology }, + // @ts-expect-error TS(2339): Property 'type' does not exist on type 'TripleStor... Remove this comment to see the full error message '@type': this.type, ...resource }, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) .then(() => this.findById(resource['@id'])); @@ -161,21 +188,21 @@ class TripleStoreAdapter { /** * Insert multiple entities */ - insertMany(entities) { + insertMany(entities: any) { throw new Error('Method not implemented'); } /** * Update many entities by `query` and `update` */ - updateMany(query, update) { + updateMany(query: any, update: any) { throw new Error('Method not implemented'); } /** * Update an entity by ID */ - updateById(_id, update) { + updateById(_id: any, update: any) { let { id, '@id': arobaseId, ...newData } = update.$set; // Check ID and transform it to URI if necessary @@ -183,15 +210,19 @@ class TripleStoreAdapter { if (!_id) throw new Error('An ID must be specified to update resources'); return this.findById(_id) - .then(oldData => { + .then((oldData: any) => { newData = { ...oldData, ...newData }; + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker.call('triplestore.update', { query: ` DELETE { <${sanitizeSparqlUri(_id)}> ?p ?o . } INSERT { - <${sanitizeSparqlUri(_id)}> a <${this.ontology + this.type}> . + <${sanitizeSparqlUri(_id)}> a <${ + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message + this.ontology + this.type + }> . ${ newData ? Object.keys(newData) @@ -203,6 +234,7 @@ class TripleStoreAdapter { }) .map( predicate => + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message `<${_id}> <${this.ontology + predicate}> ${ Array.isArray(newData[predicate]) ? newData[predicate].map(o => `"${o}"`).join(', ') @@ -218,6 +250,7 @@ class TripleStoreAdapter { } `, contentType: MIME_TYPES.JSON, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }); }) @@ -227,17 +260,19 @@ class TripleStoreAdapter { /** * Remove many entities which are matched by `query` */ - removeMany(query) { + removeMany(query: any) { throw new Error('Method not implemented'); } /** * Remove an entity by ID */ - removeById(_id) { + removeById(_id: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.update', { query: `DELETE WHERE { <${_id}> ?p ?o . }`, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) .then(() => { @@ -259,23 +294,23 @@ class TripleStoreAdapter { /** * Convert DB entity to JSON object */ - entityToObject(entity) { + entityToObject(entity: any) { return entity; } /** * Transforms 'idField' into MongoDB's '_id' */ - beforeSaveTransformID(entity, idField) { + beforeSaveTransformID(entity: any, idField: any) { return entity; } /** * Transforms MongoDB's '_id' into user defined 'idField' */ - afterRetrieveTransformID(entity, idField) { + afterRetrieveTransformID(entity: any, idField: any) { return entity; } } -module.exports = TripleStoreAdapter; +export default TripleStoreAdapter; diff --git a/src/middleware/packages/triplestore/index.js b/src/middleware/packages/triplestore/index.js deleted file mode 100644 index 4205f2365..000000000 --- a/src/middleware/packages/triplestore/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const utils = require('./utils'); - -module.exports = { - DatasetService: require('./subservices/dataset'), - TripleStoreAdapter: require('./adapter'), - TripleStoreService: require('./service'), - ...utils -}; diff --git a/src/middleware/packages/triplestore/index.ts b/src/middleware/packages/triplestore/index.ts new file mode 100644 index 000000000..3f346b217 --- /dev/null +++ b/src/middleware/packages/triplestore/index.ts @@ -0,0 +1,6 @@ +import DatasetService from './subservices/dataset.ts'; +import TripleStoreAdapter from './adapter.ts'; +import TripleStoreService from './service.ts'; + +export * from './utils.ts'; +export { DatasetService, TripleStoreAdapter, TripleStoreService }; diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 6179f36d6..4b3c0f2a4 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -8,7 +8,6 @@ "@semapps/middlewares": "1.1.4", "@semapps/mime-types": "1.1.4", "jsonld": "^3.3.2", - "moleculer": "^0.14.29", "negotiator": "^0.6.2", "node-fetch": "^2.6.6", "sparqljs": "^3.5.2", @@ -18,10 +17,16 @@ "uuid": "^9.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" + }, + "peerDependencies": { + "moleculer": "^0.14.35" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" - } + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts" } diff --git a/src/middleware/packages/triplestore/service.js b/src/middleware/packages/triplestore/service.ts similarity index 61% rename from src/middleware/packages/triplestore/service.js rename to src/middleware/packages/triplestore/service.ts index 4dc0f657b..835b2d408 100644 --- a/src/middleware/packages/triplestore/service.js +++ b/src/middleware/packages/triplestore/service.ts @@ -1,19 +1,24 @@ -const { SparqlJsonParser } = require('sparqljson-parse'); -const SparqlGenerator = require('sparqljs').Generator; -const { MoleculerError } = require('moleculer').Errors; -const fetch = require('node-fetch'); -const { throw403, throw500 } = require('@semapps/middlewares'); -const countTriplesOfSubject = require('./actions/countTriplesOfSubject'); -const deleteOrphanBlankNodes = require('./actions/deleteOrphanBlankNodes'); -const dropAll = require('./actions/dropAll'); -const insert = require('./actions/insert'); -const query = require('./actions/query'); -const update = require('./actions/update'); -const tripleExist = require('./actions/tripleExist'); -const DatasetService = require('./subservices/dataset'); +import { SparqlJsonParser } from 'sparqljson-parse'; +import sparqljsModule from 'sparqljs'; +import fetch from 'node-fetch'; +import { throw403, throw500 } from '@semapps/middlewares'; +import { ServiceSchema, defineAction } from 'moleculer'; +import countTriplesOfSubject from './actions/countTriplesOfSubject.ts'; +import deleteOrphanBlankNodes from './actions/deleteOrphanBlankNodes.ts'; +import dropAll from './actions/dropAll.ts'; +import insert from './actions/insert.ts'; +import query from './actions/query.ts'; +import update from './actions/update.ts'; +import tripleExist from './actions/tripleExist.ts'; +import DatasetService from './subservices/dataset.ts'; + +const SparqlGenerator = sparqljsModule.Generator; +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; const TripleStoreService = { - name: 'triplestore', + name: 'triplestore' as const, settings: { url: null, user: null, @@ -29,6 +34,7 @@ const TripleStoreService = { this.subservices = {}; if (dataset !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message this.subservices.dataset = this.broker.createService({ mixins: [DatasetService], settings: { @@ -52,6 +58,7 @@ const TripleStoreService = { update, query, dropAll, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; web... Remove this comment to see the full error message countTriplesOfSubject, tripleExist, deleteOrphanBlankNodes @@ -92,6 +99,14 @@ const TripleStoreService = { } } } -}; +} satisfies ServiceSchema; + +export default TripleStoreService; -module.exports = TripleStoreService; +declare global { + export namespace Moleculer { + export interface AllServices { + [TripleStoreService.name]: typeof TripleStoreService; + } + } +} diff --git a/src/middleware/packages/triplestore/subservices/dataset.js b/src/middleware/packages/triplestore/subservices/dataset.js deleted file mode 100644 index 3f6a06fb8..000000000 --- a/src/middleware/packages/triplestore/subservices/dataset.js +++ /dev/null @@ -1,163 +0,0 @@ -const fetch = require('node-fetch'); -const fs = require('fs'); -const path = require('path'); -const urlJoin = require('url-join'); -const format = require('string-template'); - -const delay = t => new Promise(resolve => setTimeout(resolve, t)); - -/** @type {import('moleculer').ServiceSchema} */ -const DatasetService = { - name: 'triplestore.dataset', - settings: { - url: null, - user: null, - password: null, - fusekiBase: null - }, - started() { - this.headers = { - Authorization: `Basic ${Buffer.from(`${this.settings.user}:${this.settings.password}`).toString('base64')}` - }; - }, - actions: { - async backup(ctx) { - const { dataset } = ctx.params; - - // Ask Fuseki to backup the given dataset - const response = await fetch(urlJoin(this.settings.url, '$/backup', dataset), { - method: 'POST', - headers: this.headers - }); - - // Wait for backup to complete - const { taskId } = await response.json(); - await this.actions.waitForTaskCompletion({ taskId }, { parentCtx: ctx }); - }, - async create(ctx) { - const { dataset, secure } = ctx.params; - if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); - const exist = await this.actions.exist({ dataset }, { parentCtx: ctx }); - if (!exist) { - this.logger.info(`Dataset ${dataset} doesn't exist. Creating it...`); - let response; - - if (dataset.endsWith('Acl') || dataset.endsWith('Mirror')) - throw new Error(`Error when creating dataset ${dataset}. Its name cannot end with Acl or Mirror`); - - const templateFilePath = path.join(__dirname, '../templates', secure ? 'secure-dataset.ttl' : 'dataset.ttl'); - const template = await fs.promises.readFile(templateFilePath, 'utf8'); - const assembler = format(template, { dataset: dataset }); - response = await fetch(urlJoin(this.settings.url, '$/datasets'), { - method: 'POST', - headers: { ...this.headers, 'Content-Type': 'text/turtle' }, - body: assembler - }); - - if (response.status === 200) { - await this.actions.waitForCreation({ dataset }, { parentCtx: ctx }); - this.logger.info(`Created ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); - } else { - this.logger.info(await response.text()); - throw new Error(`Error when creating ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); - } - } - }, - async exist(ctx) { - const { dataset } = ctx.params; - const response = await fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { - headers: this.headers - }); - return response.status === 200; - }, - async list() { - const response = await fetch(urlJoin(this.settings.url, '$/datasets'), { - headers: this.headers - }); - - if (response.ok) { - const json = await response.json(); - return json.datasets.map(dataset => dataset['ds.name'].substring(1)); - } - return []; - }, - async isSecure(ctx) { - const { dataset } = ctx.params; - // Check if http://semapps.org/webacl graph exists - return await ctx.call('triplestore.query', { - query: `ASK WHERE { GRAPH { ?s ?p ?o } }`, - dataset, - webId: 'system' - }); - }, - async waitForCreation(ctx) { - const { dataset } = ctx.params; - let datasetExist; - do { - await delay(1000); - datasetExist = await this.actions.exist({ dataset }, { parentCtx: ctx }); - } while (!datasetExist); - }, - async waitForTaskCompletion(ctx) { - const { taskId } = ctx.params; - let task; - - do { - await delay(1000); - - const response = await fetch(urlJoin(this.settings.url, '$/tasks/', `${taskId}`), { - method: 'GET', - headers: this.headers - }); - - if (response.ok) { - task = await response.json(); - } - } while (!task || !task.finished); - }, - delete: { - params: { - dataset: { type: 'string' }, - iKnowWhatImDoing: { type: 'boolean' } - }, - async handler(ctx) { - const { dataset, iKnowWhatImDoing } = ctx.params; - if (!iKnowWhatImDoing) { - throw new Error('Please confirm that you know what you are doing by setting `iKnowWhatImDoing` to `true`.'); - } - const isSecure = await this.actions.isSecure({ dataset }); - - if (isSecure && !this.settings.fusekiBase) - throw new Error( - 'Please provide the fusekiBase dir setting to the triplestore service, to delete a secure dataset.' - ); - - const response = await fetch(urlJoin(this.settings.url, '$/datasets', dataset), { - method: 'DELETE', - headers: this.headers - }); - if (!response.ok) { - throw new Error(`Failed to delete dataset ${dataset}: ${response.statusText}`); - } - - // If this is a secure dataset, we need to delete stuff manually. - if (isSecure) { - const dbDir = path.join(this.settings.fusekiBase, 'databases', dataset); - const dbAclDir = path.join(this.settings.fusekiBase, 'databases', `${dataset}Acl`); - const dbMirrorDir = path.join(this.settings.fusekiBase, 'databases', `${dataset}Mirror`); - const confFile = path.join(this.settings.fusekiBase, 'configuration', `${dataset}.ttl`); - - // Delete all, if present. - await Promise.all([ - fs.promises.rm(dbDir, { recursive: true, force: true }), - fs.promises.rm(dbAclDir, { recursive: true, force: true }), - fs.promises.rm(dbMirrorDir, { recursive: true, force: true }), - fs.promises.rm(confFile, { force: true }) - ]); - } - } - } - } -}; - -module.exports = DatasetService; diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts new file mode 100644 index 000000000..9b9ce94e8 --- /dev/null +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -0,0 +1,195 @@ +import fetch from 'node-fetch'; +import fs from 'fs'; +import path from 'path'; +import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'stri... Remove this comment to see the full error message +import format from 'string-template'; +import { ServiceSchema, defineAction } from 'moleculer'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); + +const DatasetService = { + name: 'triplestore.dataset' as const, + settings: { + url: null, + user: null, + password: null, + fusekiBase: null + }, + started() { + this.headers = { + Authorization: `Basic ${Buffer.from(`${this.settings.user}:${this.settings.password}`).toString('base64')}` + }; + }, + actions: { + backup: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + + // Ask Fuseki to backup the given dataset + const response = await fetch(urlJoin(this.settings.url, '$/backup', dataset), { + method: 'POST', + headers: this.headers + }); + + // Wait for backup to complete + const { taskId } = await response.json(); + await this.actions.waitForTaskCompletion({ taskId }, { parentCtx: ctx }); + } + }), + + create: defineAction({ + async handler(ctx) { + const { dataset, secure } = ctx.params; + if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); + const exist = await this.actions.exist({ dataset }, { parentCtx: ctx }); + if (!exist) { + this.logger.info(`Dataset ${dataset} doesn't exist. Creating it...`); + let response; + + if (dataset.endsWith('Acl') || dataset.endsWith('Mirror')) + throw new Error(`Error when creating dataset ${dataset}. Its name cannot end with Acl or Mirror`); + + const templateFilePath = path.join(__dirname, '../templates', secure ? 'secure-dataset.ttl' : 'dataset.ttl'); + const template = await fs.promises.readFile(templateFilePath, 'utf8'); + const assembler = format(template, { dataset: dataset }); + response = await fetch(urlJoin(this.settings.url, '$/datasets'), { + method: 'POST', + headers: { ...this.headers, 'Content-Type': 'text/turtle' }, + body: assembler + }); + + if (response.status === 200) { + await this.actions.waitForCreation({ dataset }, { parentCtx: ctx }); + this.logger.info(`Created ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); + } else { + this.logger.info(await response.text()); + throw new Error(`Error when creating ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); + } + } + } + }), + + exist: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + const response = await fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { + headers: this.headers + }); + return response.status === 200; + } + }), + + list: defineAction({ + async handler() { + const response = await fetch(urlJoin(this.settings.url, '$/datasets'), { + headers: this.headers + }); + + if (response.ok) { + const json = await response.json(); + return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); + } + return []; + } + }), + + isSecure: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + // Check if http://semapps.org/webacl graph exists + return await ctx.call('triplestore.query', { + query: `ASK WHERE { GRAPH { ?s ?p ?o } }`, + dataset, + webId: 'system' + }); + } + }), + + waitForCreation: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + let datasetExist; + do { + await delay(1000); + datasetExist = await this.actions.exist({ dataset }, { parentCtx: ctx }); + } while (!datasetExist); + } + }), + + waitForTaskCompletion: defineAction({ + async handler(ctx) { + const { taskId } = ctx.params; + let task; + + do { + await delay(1000); + + const response = await fetch(urlJoin(this.settings.url, '$/tasks/', `${taskId}`), { + method: 'GET', + headers: this.headers + }); + + if (response.ok) { + task = await response.json(); + } + } while (!task || !task.finished); + } + }), + + delete: defineAction({ + params: { + dataset: { type: 'string' }, + iKnowWhatImDoing: { type: 'boolean' } + }, + async handler(ctx) { + const { dataset, iKnowWhatImDoing } = ctx.params; + if (!iKnowWhatImDoing) { + throw new Error('Please confirm that you know what you are doing by setting `iKnowWhatImDoing` to `true`.'); + } + const isSecure = await this.actions.isSecure({ dataset }); + + if (isSecure && !this.settings.fusekiBase) + throw new Error( + 'Please provide the fusekiBase dir setting to the triplestore service, to delete a secure dataset.' + ); + + const response = await fetch(urlJoin(this.settings.url, '$/datasets', dataset), { + method: 'DELETE', + headers: this.headers + }); + if (!response.ok) { + throw new Error(`Failed to delete dataset ${dataset}: ${response.statusText}`); + } + + // If this is a secure dataset, we need to delete stuff manually. + if (isSecure) { + const dbDir = path.join(this.settings.fusekiBase, 'databases', dataset); + const dbAclDir = path.join(this.settings.fusekiBase, 'databases', `${dataset}Acl`); + const dbMirrorDir = path.join(this.settings.fusekiBase, 'databases', `${dataset}Mirror`); + const confFile = path.join(this.settings.fusekiBase, 'configuration', `${dataset}.ttl`); + + // Delete all, if present. + await Promise.all([ + fs.promises.rm(dbDir, { recursive: true, force: true }), + fs.promises.rm(dbAclDir, { recursive: true, force: true }), + fs.promises.rm(dbMirrorDir, { recursive: true, force: true }), + fs.promises.rm(confFile, { force: true }) + ]); + } + } + }) + } +} satisfies ServiceSchema; + +export default DatasetService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [DatasetService.name]: typeof DatasetService; + } + } +} diff --git a/src/middleware/packages/triplestore/tsconfig.json b/src/middleware/packages/triplestore/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/triplestore/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/triplestore/utils.js b/src/middleware/packages/triplestore/utils.ts similarity index 79% rename from src/middleware/packages/triplestore/utils.js rename to src/middleware/packages/triplestore/utils.ts index cfb2195fc..b22305dce 100644 --- a/src/middleware/packages/triplestore/utils.js +++ b/src/middleware/packages/triplestore/utils.ts @@ -1,9 +1,11 @@ -const { MoleculerError } = require('moleculer').Errors; +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; /** * Throw an error if the value includes a bracket or a space */ -const sanitizeSparqlUri = value => { +const sanitizeSparqlUri = (value: any) => { if (value && (value.includes('>') || value.includes('<') || /\s/g.test(value))) { throw new MoleculerError('SPARQL injection detected', 400, 'SPARQL_INJECTION'); } else { @@ -14,7 +16,7 @@ const sanitizeSparqlUri = value => { /** * Throw an error if the value includes a quote */ -const sanitizeSparqlString = value => { +const sanitizeSparqlString = (value: any) => { if (value && value.includes('"')) { throw new MoleculerError('SPARQL injection detected', 400, 'SPARQL_INJECTION'); } else { @@ -26,7 +28,7 @@ const sanitizeSparqlString = value => { * Tagged template literal that can be used to check that all variables passed are either URIs or strings. * URIs are detected by looking if they are surrounded by brackets, and strings if they are surrounded by quotes */ -const sanitizeSparqlQuery = (fragments, ...values) => { +const sanitizeSparqlQuery = (fragments: any, ...values: any[]) => { values.forEach((value, i) => { if (fragments[i].endsWith('<') && fragments[i + 1].startsWith('>')) { sanitizeSparqlUri(value); @@ -39,8 +41,4 @@ const sanitizeSparqlQuery = (fragments, ...values) => { return values.reduce((acc, value, i) => `${acc}${fragments[i]}${value}`, '') + fragments.slice(-1); }; -module.exports = { - sanitizeSparqlUri, - sanitizeSparqlString, - sanitizeSparqlQuery -}; +export { sanitizeSparqlUri, sanitizeSparqlString, sanitizeSparqlQuery }; diff --git a/src/middleware/packages/void/index.js b/src/middleware/packages/void/index.js deleted file mode 100644 index 397978225..000000000 --- a/src/middleware/packages/void/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - VoidService: require('./service') -}; diff --git a/src/middleware/packages/void/index.ts b/src/middleware/packages/void/index.ts new file mode 100644 index 000000000..266cf6288 --- /dev/null +++ b/src/middleware/packages/void/index.ts @@ -0,0 +1,3 @@ +import VoidService from './service.ts'; + +export { VoidService }; diff --git a/src/middleware/packages/void/package.json b/src/middleware/packages/void/package.json index 0f536c0ad..c93a92e7e 100644 --- a/src/middleware/packages/void/package.json +++ b/src/middleware/packages/void/package.json @@ -10,14 +10,19 @@ "@semapps/mime-types": "1.1.4", "@semapps/ontologies": "1.1.4", "jsonld-streaming-serializer": "^1.2.0", - "moleculer": "^0.14.17", "n3": "^1.8.0", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/void/service.js b/src/middleware/packages/void/service.ts similarity index 74% rename from src/middleware/packages/void/service.js rename to src/middleware/packages/void/service.ts index 600a5c112..e2bd27de4 100644 --- a/src/middleware/packages/void/service.js +++ b/src/middleware/packages/void/service.ts @@ -1,13 +1,16 @@ -const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { void: voidOntology } = require('@semapps/ontologies'); -const { JsonLdSerializer } = require('jsonld-streaming-serializer'); -const { DataFactory, Writer } = require('n3'); +import urlJoin from 'url-join'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { void as voidOntology } from '@semapps/ontologies'; +import { JsonLdSerializer } from 'jsonld-streaming-serializer'; +import { DataFactory, Writer } from 'n3'; +import { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } from '@semapps/ldp'; +import { parseHeader } from '@semapps/middlewares'; +import { ServiceSchema, defineAction } from 'moleculer'; const { quad, namedNode, literal, blankNode } = DataFactory; -const { MoleculerError } = require('moleculer').Errors; -const { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } = require('@semapps/ldp'); -const { parseHeader } = require('@semapps/middlewares'); +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; const prefixes = { dc: 'http://purl.org/dc/terms/', @@ -16,11 +19,11 @@ const prefixes = { xsd: 'http://www.w3.org/2001/XMLSchema#' }; -function streamToString(stream) { +function streamToString(stream: any) { let res = ''; return new Promise((resolve, reject) => { - stream.on('data', chunk => (res += chunk)); - stream.on('error', err => reject(err)); + stream.on('data', (chunk: any) => (res += chunk)); + stream.on('error', (err: any) => reject(err)); stream.on('end', () => resolve(res)); }); } @@ -48,15 +51,16 @@ const jsonContext = { 'void:classPartition': { '@type': '@id' } }; -const addClassPartition = (serverUrl, partition, graph, scalar) => { +const addClassPartition = (serverUrl: any, partition: any, graph: any, scalar: any) => { const blank = blankNode(`b${scalar}`); + // @ts-expect-error TS(2339): Property 'data' does not exist on type 'BlankNode'... Remove this comment to see the full error message blank.data = [ { s: blankNode(`b${scalar}`), p: namedNode('http://rdfs.org/ns/void#uriSpace'), o: literal(partition['http://rdfs.org/ns/void#uriSpace']) }, - ...partition['http://rdfs.org/ns/void#class'].map(t => { + ...partition['http://rdfs.org/ns/void#class'].map((t: any) => { return { s: blankNode(`b${scalar}`), p: namedNode('http://rdfs.org/ns/void#class'), o: namedNode(t) }; }), { @@ -69,9 +73,11 @@ const addClassPartition = (serverUrl, partition, graph, scalar) => { } ]; if (partition['http://semapps.org/ns/core#doNotMirror']) + // @ts-expect-error TS(2339): Property 'data' does not exist on type 'BlankNode'... Remove this comment to see the full error message blank.data.push({ s: blankNode(`b${scalar}`), p: namedNode('http://semapps.org/ns/core#doNotMirror'), + // @ts-expect-error TS(2345): Argument of type 'boolean' is not assignable to pa... Remove this comment to see the full error message o: literal(true, namedNode('http://www.w3.org/2001/XMLSchema#boolean')) }); @@ -79,15 +85,15 @@ const addClassPartition = (serverUrl, partition, graph, scalar) => { }; const addMirrorServer = async ( - baseUrl, - serverUrl, - graph, - hasSparql, - containers, - mirrorGraph, - ctx, - nextScalar, - originalVoid + baseUrl: any, + serverUrl: any, + graph: any, + hasSparql: any, + containers: any, + mirrorGraph: any, + ctx: any, + nextScalar: any, + originalVoid: any ) => { const thisServer = createFragmentURL(baseUrl, serverUrl); @@ -123,6 +129,7 @@ const addMirrorServer = async ( for (const p of arrayOf(originalPartitions)) { // we skip empty containers and doNotMirror containers if (p['void:entities'] === '0' || p['semapps:doNotMirror']) continue; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message partitionsMap[p['void:uriSpace']] = p; } } @@ -135,21 +142,22 @@ const addMirrorServer = async ( const partition = { 'http://rdfs.org/ns/void#uriSpace': p, - 'http://rdfs.org/ns/void#class': types.map(type => type.t.value) + 'http://rdfs.org/ns/void#class': types.map((type: any) => type.t.value) }; const count = await ctx.call('triplestore.query', { query: `SELECT (COUNT (?o) as ?count) FROM <${mirrorGraph}> { <${p}> ?o }` }); + // @ts-expect-error TS(2551): Property 'http://rdfs.org/ns/void#entities' does n... Remove this comment to see the full error message partition['http://rdfs.org/ns/void#entities'] = Number(count[0].count.value); addClassPartition(thisServer, partition, graph, nextScalar + i); } }; -module.exports = { - name: 'void', +const VoidSchema = { + name: 'void' as const, settings: { baseUrl: null, mirrorGraphName: 'http://semapps.org/mirror', @@ -174,7 +182,7 @@ module.exports = { }); }, actions: { - getRemote: { + getRemote: defineAction({ visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -193,11 +201,13 @@ module.exports = { return json; } } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Silently ignored error when fetching void endpoint: ${e.message}`); } } - }, - get: { + }), + + get: defineAction({ visibility: 'public', params: { accept: { type: 'string', optional: true } @@ -260,7 +270,7 @@ module.exports = { const services = await ctx.call('$node.services'); const hasSparql = - services.filter(s => s.name === 'sparqlEndpoint').length > 0 + services.filter((s: any) => s.name === 'sparqlEndpoint').length > 0 ? urlJoin(this.settings.baseUrl, 'sparql') : undefined; if (hasSparql) @@ -295,13 +305,16 @@ module.exports = { }); const serversMap = {}; - for (const s of serversContainers.map(sc => sc.s.value)) { + for (const s of serversContainers.map((sc: any) => sc.s.value)) { const res = s.match(regexProtocolAndHostAndPort); if (res) { const name = urlJoin(res[0], '/'); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message let serverName = serversMap[name]; if (!serverName) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message serversMap[name] = []; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message serverName = serversMap[name]; } serverName.push(s); @@ -314,8 +327,10 @@ module.exports = { if (json) { const mapServers = {}; for (const s of json['@graph']) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message mapServers[s['@id']] = s; } + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const server = mapServers[createFragmentURL('', serverUrl)]; originalVoid = server; } @@ -325,15 +340,18 @@ module.exports = { serverUrl, graph, hasSparql, + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message serversMap[serverUrl], this.settings.mirrorGraphName, ctx, scalar, originalVoid ); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message scalar += serversMap[serverUrl].length; } + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = accept; // TODO use Etag instead to keep track of changes in VOID @@ -344,17 +362,21 @@ module.exports = { return await this.formatOutput(ctx, graph, url, accept === MIME_TYPES.JSON); } - }, - api_get: async function api(ctx) { - let { accept } = ctx.meta.headers; - if (accept.includes('*/*')) accept = MIME_TYPES.JSON; - else if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) - throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); - - return await ctx.call('void.get', { - accept: accept - }); - } + }), + + api_get: defineAction({ + handler: async function api(ctx) { + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. + let { accept } = ctx.meta.headers; + if (accept.includes('*/*')) accept = MIME_TYPES.JSON; + else if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) + throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); + + return await ctx.call('void.get', { + accept: accept + }); + } + }) }, methods: { async getContainers(ctx) { @@ -363,17 +385,22 @@ module.exports = { const res = await Promise.all( Object.values(registeredContainers) + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. .filter(c => c.acceptedTypes) .map(async c => { const partition = { + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. 'http://rdfs.org/ns/void#uriSpace': urlJoin(baseUrl, c.path), + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. 'http://rdfs.org/ns/void#class': arrayOf(c.acceptedTypes) }; + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. if (c.excludeFromMirror) partition['http://semapps.org/ns/core#doNotMirror'] = true; const count = await ctx.call('triplestore.query', { query: `SELECT (COUNT (?o) as ?count) { <${partition['http://rdfs.org/ns/void#uriSpace']}> ?o }`, webId: 'system' }); + // @ts-expect-error TS(2551): Property 'http://rdfs.org/ns/void#entities' does n... Remove this comment to see the full error message partition['http://rdfs.org/ns/void#entities'] = Number(count[0].count.value); return partition; }) @@ -388,9 +415,9 @@ module.exports = { prefixes: { ...prefixes, ...prefix, '': `${voidUrl}#` }, format: 'Turtle' }); - output.forEach(f => { + output.forEach((f: any) => { if (f.o.termType === 'BlankNode') { - const predicates = f.o.data.map(p => { + const predicates = f.o.data.map((p: any) => { let obj = p.o; if (Array.isArray(obj)) obj = writer.list(obj); return { @@ -432,6 +459,7 @@ module.exports = { } mySerializer.end(); + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message const jsonLd = JSON.parse(await streamToString(mySerializer)); const compactJsonLd = await ctx.call('jsonld.parser.frame', { @@ -450,4 +478,14 @@ module.exports = { return compactJsonLd; } } -}; +} satisfies ServiceSchema; + +export default VoidSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VoidSchema.name]: typeof VoidSchema; + } + } +} diff --git a/src/middleware/packages/void/tsconfig.json b/src/middleware/packages/void/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/void/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.js b/src/middleware/packages/webacl/bots/authorizer-bot.js deleted file mode 100644 index 316a4d2d5..000000000 --- a/src/middleware/packages/webacl/bots/authorizer-bot.js +++ /dev/null @@ -1,112 +0,0 @@ -module.exports = { - name: 'authorizer-bot', - settings: { - rules: [] - }, - dependencies: ['webacl.resource'], - methods: { - matchRule(rule, record) { - if (typeof rule.match === 'function') { - // If match is a function, pass it the record - return rule.match(record); - } - // If match is an object, go through all entries and check they match with the record - return Object.keys(rule.match).every(predicate => { - const value = rule.match[predicate]; - return Array.isArray(record[predicate]) ? record[predicate].includes(value) : record[predicate] === value; - }); - }, - getUsers(rule, record) { - let users; - if (typeof rule.users === 'function') { - // If users is a function, pass it the record - users = rule.users(record); - } else { - users = rule.users; - } - if (!users) return []; - return Array.isArray(users) ? users : [users]; - } - }, - events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - const users = this.getUsers(rule, newData); - for (const user of users) { - await ctx.call('webacl.resource.addRights', { - resourceUri, - additionalRights: { - user: { - uri: user, - ...rule.rights - } - }, - webId: 'system' - }); - } - if (users.length > 0) { - ctx.emit('authorizer.added', { - resourceUri, - users, - rule - }); - } - } - } - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData, oldData } = ctx.params; - - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - const newUsers = this.getUsers(rule, newData); - const oldUsers = this.getUsers(rule, oldData); - - const usersToAdd = newUsers.filter(t1 => !oldUsers.some(t2 => t1 === t2)); - for (const userUri of usersToAdd) { - await ctx.call('webacl.resource.addRights', { - resourceUri, - additionalRights: { - user: { - uri: userUri, - ...rule.rights - } - }, - webId: 'system' - }); - } - if (usersToAdd.length > 0) { - ctx.emit('authorizer.added', { - resourceUri, - users: usersToAdd, - rule - }); - } - - const usersToRemove = oldUsers.filter(t1 => !newUsers.some(t2 => t1 === t2)); - for (const userUri of usersToRemove) { - await ctx.call('webacl.resource.removeRights', { - resourceUri, - rights: { - user: { - uri: userUri, - ...rule.rights - } - }, - webId: 'system' - }); - } - if (usersToRemove.length > 0) { - ctx.emit('authorizer.removed', { - resourceUri, - users: usersToRemove, - rule - }); - } - } - } - } - } -}; diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts new file mode 100644 index 000000000..2a8ce4276 --- /dev/null +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -0,0 +1,138 @@ +import { ServiceSchema, defineServiceEvent } from 'moleculer'; + +const AuthorizerBotSchema = { + name: 'authorizer-bot' as const, + settings: { + rules: [] + }, + dependencies: ['webacl.resource'], + methods: { + matchRule(rule, record) { + if (typeof rule.match === 'function') { + // If match is a function, pass it the record + return rule.match(record); + } + // If match is an object, go through all entries and check they match with the record + return Object.keys(rule.match).every(predicate => { + const value = rule.match[predicate]; + return Array.isArray(record[predicate]) ? record[predicate].includes(value) : record[predicate] === value; + }); + }, + getUsers(rule, record) { + let users; + if (typeof rule.users === 'function') { + // If users is a function, pass it the record + users = rule.users(record); + } else { + users = rule.users; + } + if (!users) return []; + return Array.isArray(users) ? users : [users]; + } + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + for (const rule of this.settings.rules) { + // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message + if (this.matchRule(rule, newData)) { + // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message + const users = this.getUsers(rule, newData); + for (const user of users) { + await ctx.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { + uri: user, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (users.length > 0) { + ctx.emit('authorizer.added', { + resourceUri, + users, + rule + }); + } + } + } + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData, oldData } = ctx.params; + + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + for (const rule of this.settings.rules) { + // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message + if (this.matchRule(rule, newData)) { + // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message + const newUsers = this.getUsers(rule, newData); + // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message + const oldUsers = this.getUsers(rule, oldData); + + const usersToAdd = newUsers.filter((t1: any) => !oldUsers.some((t2: any) => t1 === t2)); + for (const userUri of usersToAdd) { + await ctx.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { + uri: userUri, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (usersToAdd.length > 0) { + ctx.emit('authorizer.added', { + resourceUri, + users: usersToAdd, + rule + }); + } + + const usersToRemove = oldUsers.filter((t1: any) => !newUsers.some((t2: any) => t1 === t2)); + for (const userUri of usersToRemove) { + await ctx.call('webacl.resource.removeRights', { + resourceUri, + rights: { + user: { + uri: userUri, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (usersToRemove.length > 0) { + ctx.emit('authorizer.removed', { + resourceUri, + users: usersToRemove, + rule + }); + } + } + } + } + }) + } +} satisfies ServiceSchema; + +export default AuthorizerBotSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthorizerBotSchema.name]: typeof AuthorizerBotSchema; + } + } +} diff --git a/src/middleware/packages/webacl/bots/groups-manager.js b/src/middleware/packages/webacl/bots/groups-manager.js deleted file mode 100644 index dd3838b69..000000000 --- a/src/middleware/packages/webacl/bots/groups-manager.js +++ /dev/null @@ -1,117 +0,0 @@ -const { arrayOf } = require('@semapps/ldp'); -const { hasType } = require('../utils'); - -module.exports = { - name: 'groups-manager', - settings: { - usersContainer: null, - rules: [] - }, - dependencies: ['webacl.group'], - async started() { - for (const rule of this.settings.rules) { - if (!(await this.broker.call('webacl.group.exist', { groupSlug: rule.groupSlug }))) { - this.logger.info(`Group ${rule.groupSlug} doesn't exist, creating it...`); - await this.broker.call('webacl.group.create', { groupSlug: rule.groupSlug, webId: 'system' }); - } - } - }, - actions: { - async refreshAll(ctx) { - const usersContainer = await ctx.call('ldp.container.get', { - containerUri: this.settings.usersContainer, - webId: 'system' - }); - - for (const user of arrayOf(usersContainer['ldp:contains'])) { - const userUri = user['@id'] || user.id; - this.logger.info(`Refreshing user ${userUri}...`); - for (const rule of this.settings.rules) { - if (this.matchRule(rule, user)) { - this.logger.info(`Adding user ${userUri} to group ${rule.groupSlug}`); - await ctx.call('webacl.group.addMember', { - groupSlug: rule.groupSlug, - memberUri: user.id, - webId: 'system' - }); - } else { - this.logger.info(`Removing user ${userUri} from group ${rule.groupSlug} (if it exists)`); - await ctx.call('webacl.group.removeMember', { - groupSlug: rule.groupSlug, - memberUri: user.id, - webId: 'system' - }); - } - } - } - } - }, - methods: { - matchRule(rule, record) { - if (typeof rule.match === 'function') { - // If match is a function, pass it the record - return rule.match(record); - } - // If match is an object, go through all entries and check they match with the record - return Object.keys(rule.match).every(predicate => { - const value = rule.match[predicate]; - return Array.isArray(record[predicate]) ? record[predicate].includes(value) : record[predicate] === value; - }); - }, - isUser(resource) { - return hasType(resource, 'foaf:Person'); - } - }, - events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - if (this.isUser(newData)) { - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); - await ctx.call('webacl.group.addMember', { - groupSlug: rule.groupSlug, - memberUri: resourceUri, - webId: 'system' - }); - } - } - } - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData } = ctx.params; - if (this.isUser(newData)) { - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); - await ctx.call('webacl.group.addMember', { - groupSlug: rule.groupSlug, - memberUri: resourceUri, - webId: 'system' - }); - } else { - this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); - await ctx.call('webacl.group.removeMember', { - groupSlug: rule.groupSlug, - memberUri: resourceUri, - webId: 'system' - }); - } - } - } - }, - async 'ldp.resource.deleted'(ctx) { - const { resourceUri, oldData } = ctx.params; - if (this.isUser(oldData)) { - for (const rule of this.settings.rules) { - this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); - await ctx.call('webacl.group.removeMember', { - groupSlug: rule.groupSlug, - memberUri: resourceUri, - webId: 'system' - }); - } - } - } - } -}; diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts new file mode 100644 index 000000000..70884e8ff --- /dev/null +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -0,0 +1,153 @@ +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { hasType } from '../utils.ts'; + +const GroupsManagerSchema = { + name: 'groups-manager' as const, + settings: { + usersContainer: null, + rules: [] + }, + dependencies: ['webacl.group'], + async started() { + for (const rule of this.settings.rules) { + if (!(await this.broker.call('webacl.group.exist', { groupSlug: rule.groupSlug }))) { + this.logger.info(`Group ${rule.groupSlug} doesn't exist, creating it...`); + await this.broker.call('webacl.group.create', { groupSlug: rule.groupSlug, webId: 'system' }); + } + } + }, + actions: { + refreshAll: defineAction({ + async handler(ctx) { + const usersContainer = await ctx.call('ldp.container.get', { + containerUri: this.settings.usersContainer, + webId: 'system' + }); + + for (const user of arrayOf(usersContainer['ldp:contains'])) { + const userUri = user['@id'] || user.id; + this.logger.info(`Refreshing user ${userUri}...`); + for (const rule of this.settings.rules) { + if (this.matchRule(rule, user)) { + this.logger.info(`Adding user ${userUri} to group ${rule.groupSlug}`); + await ctx.call('webacl.group.addMember', { + groupSlug: rule.groupSlug, + memberUri: user.id, + webId: 'system' + }); + } else { + this.logger.info(`Removing user ${userUri} from group ${rule.groupSlug} (if it exists)`); + await ctx.call('webacl.group.removeMember', { + groupSlug: rule.groupSlug, + memberUri: user.id, + webId: 'system' + }); + } + } + } + } + }) + }, + methods: { + matchRule(rule, record) { + if (typeof rule.match === 'function') { + // If match is a function, pass it the record + return rule.match(record); + } + // If match is an object, go through all entries and check they match with the record + return Object.keys(rule.match).every(predicate => { + const value = rule.match[predicate]; + return Array.isArray(record[predicate]) ? record[predicate].includes(value) : record[predicate] === value; + }); + }, + isUser(resource) { + return hasType(resource, 'foaf:Person'); + } + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'isUser' does not exist on type 'ServiceE... Remove this comment to see the full error message + if (this.isUser(newData)) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + for (const rule of this.settings.rules) { + // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message + if (this.matchRule(rule, newData)) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message + this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); + await ctx.call('webacl.group.addMember', { + groupSlug: rule.groupSlug, + memberUri: resourceUri, + webId: 'system' + }); + } + } + } + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'isUser' does not exist on type 'ServiceE... Remove this comment to see the full error message + if (this.isUser(newData)) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + for (const rule of this.settings.rules) { + // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message + if (this.matchRule(rule, newData)) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message + this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); + await ctx.call('webacl.group.addMember', { + groupSlug: rule.groupSlug, + memberUri: resourceUri, + webId: 'system' + }); + } else { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message + this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); + await ctx.call('webacl.group.removeMember', { + groupSlug: rule.groupSlug, + memberUri: resourceUri, + webId: 'system' + }); + } + } + } + } + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, oldData } = ctx.params; + // @ts-expect-error TS(2339): Property 'isUser' does not exist on type 'ServiceE... Remove this comment to see the full error message + if (this.isUser(oldData)) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + for (const rule of this.settings.rules) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message + this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); + await ctx.call('webacl.group.removeMember', { + groupSlug: rule.groupSlug, + memberUri: resourceUri, + webId: 'system' + }); + } + } + } + }) + } +} satisfies ServiceSchema; + +export default GroupsManagerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [GroupsManagerSchema.name]: typeof GroupsManagerSchema; + } + } +} diff --git a/src/middleware/packages/webacl/index.js b/src/middleware/packages/webacl/index.js deleted file mode 100644 index b81aa6d11..000000000 --- a/src/middleware/packages/webacl/index.js +++ /dev/null @@ -1,10 +0,0 @@ -const utils = require('./utils'); - -module.exports = { - GroupsManagerBot: require('./bots/groups-manager'), - AuthorizerBot: require('./bots/authorizer-bot'), - WebAclService: require('./service'), - WebAclMiddleware: require('./middlewares/webacl'), - CacherMiddleware: require('./middlewares/cacher'), - ...utils -}; diff --git a/src/middleware/packages/webacl/index.ts b/src/middleware/packages/webacl/index.ts new file mode 100644 index 000000000..47fe64e70 --- /dev/null +++ b/src/middleware/packages/webacl/index.ts @@ -0,0 +1,8 @@ +import GroupsManagerBot from './bots/groups-manager.ts'; +import AuthorizerBot from './bots/authorizer-bot.ts'; +import WebAclService from './service.ts'; +import WebAclMiddleware from './middlewares/webacl.ts'; +import CacherMiddleware from './middlewares/cacher.ts'; + +export * from './utils.ts'; +export { GroupsManagerBot, AuthorizerBot, WebAclService, WebAclMiddleware, CacherMiddleware }; diff --git a/src/middleware/packages/webacl/middlewares/cacher.js b/src/middleware/packages/webacl/middlewares/cacher.ts similarity index 62% rename from src/middleware/packages/webacl/middlewares/cacher.js rename to src/middleware/packages/webacl/middlewares/cacher.ts index e033f6be7..1a1d2896d 100644 --- a/src/middleware/packages/webacl/middlewares/cacher.js +++ b/src/middleware/packages/webacl/middlewares/cacher.ts @@ -1,25 +1,28 @@ -const { Cachers } = require('moleculer'); +import { Cachers } from 'moleculer'; -let cacher; +let cacher: any; // It has been suggested to put this middleware in Moleculer core code: // https://github.com/moleculerjs/moleculer/issues/892 -const CacherMiddleware = opts => ({ +const CacherMiddleware = (opts: any) => ({ name: 'CacherMiddleware', - created(broker) { + + created(broker: any) { if (opts) { + // @ts-expect-error TS(2339): Property 'resolve' does not exist on type 'typeof ... Remove this comment to see the full error message broker.cacher = Cachers.resolve(opts); broker.cacher.init(broker); cacher = broker.cacher.middleware(); } }, + // TODO see why this is not called by Moleculer // async stopped(broker) { // if (opts) { // await broker.cacher.close(); // } // }, - localAction(next, action) { + localAction(next: any, action: any) { if (cacher) { return cacher.localAction(next, action); } @@ -27,4 +30,4 @@ const CacherMiddleware = opts => ({ } }); -module.exports = CacherMiddleware; +export default CacherMiddleware; diff --git a/src/middleware/packages/webacl/middlewares/webacl.js b/src/middleware/packages/webacl/middlewares/webacl.ts similarity index 95% rename from src/middleware/packages/webacl/middlewares/webacl.js rename to src/middleware/packages/webacl/middlewares/webacl.ts index 046dc213e..19943e87e 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.js +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -1,6 +1,6 @@ -const urlJoin = require('url-join'); -const { defaultContainerOptions } = require('@semapps/ldp'); -const { getSlugFromUri } = require('../utils'); +import urlJoin from 'url-join'; +import { defaultContainerOptions } from '@semapps/ldp'; +import { getSlugFromUri } from '../utils.ts'; const modifyActions = [ 'ldp.resource.create', @@ -15,7 +15,7 @@ const modifyActions = [ const tripleStoreActions = ['triplestore.insert', 'triplestore.query', 'triplestore.update', 'triplestore.dropAll']; -const addRightsToNewResource = async (ctx, resourceUri, webId) => { +const addRightsToNewResource = async (ctx: any, resourceUri: any, webId: any) => { const { newResourcesPermissions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); const newRights = typeof newResourcesPermissions === 'function' ? newResourcesPermissions(webId, ctx) : newResourcesPermissions; @@ -35,7 +35,7 @@ const addRightsToNewResource = async (ctx, resourceUri, webId) => { ); }; -const addRightsToNewUser = async (ctx, userUri) => { +const addRightsToNewUser = async (ctx: any, userUri: any) => { // Manually add the permissions for the user resource now that we have its webId // First delete the default permissions added by the middleware when we called ldp.resource.create await ctx.call( @@ -78,14 +78,14 @@ const addRightsToNewUser = async (ctx, userUri) => { * Middleware that ensures that requests are conforming ACL records. * @type {import('moleculer').Middleware} */ -const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://semapps.org/webacl' }) => ({ +const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://semapps.org/webacl' }: any) => ({ name: 'WebAclMiddleware', async started() { if (!baseUrl) throw new Error('The baseUrl config is missing for the WebACL middleware'); }, - localAction: (next, action) => { + localAction: (next: any, action: any) => { if (modifyActions.includes(action.name)) { - return async ctx => { + return async (ctx: any) => { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let actionReturnValue; @@ -293,7 +293,7 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se return actionReturnValue; }; } else if (tripleStoreActions.includes(action.name)) { - return async ctx => { + return async (ctx: any) => { if (podProvider) { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const dataset = ctx.params.dataset || ctx.meta.dataset; @@ -314,4 +314,4 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se } }); -module.exports = WebAclMiddleware; +export default WebAclMiddleware; diff --git a/src/middleware/packages/webacl/package.json b/src/middleware/packages/webacl/package.json index 8c835c47a..eea35b058 100644 --- a/src/middleware/packages/webacl/package.json +++ b/src/middleware/packages/webacl/package.json @@ -6,7 +6,8 @@ "homepage": "https://github.com/assemblee-virtuelle/semapps#readme", "license": "Apache-2.0", "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "repository": { "type": "git", @@ -23,7 +24,6 @@ "@semapps/ontologies": "1.1.4", "@semapps/triplestore": "1.1.4", "jsonld-streaming-serializer": "^1.2.0", - "moleculer": "^0.14.18", "n3": "^1.8.0", "rdf-parse": "^1.7.0", "speakingurl": "^14.0.1", @@ -32,9 +32,14 @@ }, "gitHead": "684ba335d0759920f4134f550431b3c3af8e2599", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, "devDependencies": { "@types/url-join": "^4.0.1" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/webacl/routes/getRoutes.js b/src/middleware/packages/webacl/routes/getRoutes.ts similarity index 87% rename from src/middleware/packages/webacl/routes/getRoutes.js rename to src/middleware/packages/webacl/routes/getRoutes.ts index d096a220e..e0fbde78f 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.js +++ b/src/middleware/packages/webacl/routes/getRoutes.ts @@ -1,7 +1,8 @@ -const path = require('path'); -const { parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson } = require('@semapps/middlewares'); +import path from 'path'; -const onError = (req, res, err) => { +import { parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson } from '@semapps/middlewares'; + +const onError = (req: any, res: any, err: any) => { const { type, code, message, data, name } = err; res.writeHead(Number(code) || 500, data && data.status ? data.status : 'Server error', { 'Content-Type': 'application/json' @@ -9,7 +10,7 @@ const onError = (req, res, err) => { res.end(JSON.stringify({ type, code, message, data, name })); }; -const getRoutes = (basePath, podProvider) => { +const getRoutes = (basePath: any, podProvider: any) => { const middlewares = [parseHeader, negotiateContentType, negotiateAccept, parseRawBody, parseJson]; return [ @@ -67,4 +68,4 @@ const getRoutes = (basePath, podProvider) => { ]; }; -module.exports = getRoutes; +export default getRoutes; diff --git a/src/middleware/packages/webacl/service.js b/src/middleware/packages/webacl/service.ts similarity index 50% rename from src/middleware/packages/webacl/service.js rename to src/middleware/packages/webacl/service.ts index 09856a3c6..c82967479 100644 --- a/src/middleware/packages/webacl/service.js +++ b/src/middleware/packages/webacl/service.ts @@ -1,12 +1,13 @@ -const { acl, vcard, rdfs } = require('@semapps/ontologies'); -const WebAclResourceService = require('./services/resource'); -const WebAclCacheService = require('./services/cache'); -const WebAclGroupService = require('./services/group'); -const WebAclAuthorizerService = require('./services/authorizer'); -const getRoutes = require('./routes/getRoutes'); - -module.exports = { - name: 'webacl', +import { acl, vcard, rdfs } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; +import WebAclResourceService from './services/resource/index.ts'; +import WebAclCacheService from './services/cache/index.ts'; +import WebAclGroupService from './services/group/index.ts'; +import WebAclAuthorizerService from './services/authorizer/index.ts'; +import getRoutes from './routes/getRoutes.ts'; + +const WebaclSchema = { + name: 'webacl' as const, settings: { baseUrl: null, graphName: 'http://semapps.org/webacl', @@ -18,6 +19,7 @@ module.exports = { const { baseUrl, graphName, podProvider, superAdmins } = this.settings; this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "webacl.resource"; settings: { baseU... Remove this comment to see the full error message mixins: [WebAclResourceService], settings: { baseUrl, @@ -27,6 +29,7 @@ module.exports = { }); this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "webacl.group"; settings: { baseUrl:... Remove this comment to see the full error message mixins: [WebAclGroupService], settings: { baseUrl, @@ -36,10 +39,12 @@ module.exports = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl.author... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclAuthorizerService] }); // Only create this service if a cacher is defined if (this.broker.cacher) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl.cache"... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclCacheService] }); } }, @@ -54,4 +59,14 @@ module.exports = { await this.broker.call('ontologies.register', vcard); await this.broker.call('ontologies.register', rdfs); } -}; +} satisfies ServiceSchema; + +export default WebaclSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclSchema.name]: typeof WebaclSchema; + } + } +} diff --git a/src/middleware/packages/webacl/services/authorizer/index.js b/src/middleware/packages/webacl/services/authorizer/index.js deleted file mode 100644 index fe05618c7..000000000 --- a/src/middleware/packages/webacl/services/authorizer/index.js +++ /dev/null @@ -1,35 +0,0 @@ -// A acl:Write permission implicitly gives acl:Read and acl:Append permissions -const modeMapping = { - 'acl:Read': ['read', 'write'], - 'acl:Append': ['append', 'write'], - 'acl:Write': ['write'], - 'acl:Control': ['control'] -}; - -module.exports = { - name: 'webacl.authorizer', - dependencies: 'permissions', - async started() { - await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); - }, - actions: { - async hasPermission(ctx) { - const { uri, type, mode, webId } = ctx.params; - - if (type === 'resource' || type === 'container') { - const modesToCheck = modeMapping[mode]; - - const rights = await ctx.call('webacl.resource.hasRights', { - resourceUri: uri, - webId, - rights: Object.fromEntries(modesToCheck.map(m => [m, true])) - }); - - // Return true if there is at least one true value - return Object.values(rights).some(r => r); - } - - return undefined; - } - } -}; diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts new file mode 100644 index 000000000..47d619917 --- /dev/null +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -0,0 +1,50 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + +// A acl:Write permission implicitly gives acl:Read and acl:Append permissions +const modeMapping = { + 'acl:Read': ['read', 'write'], + 'acl:Append': ['append', 'write'], + 'acl:Write': ['write'], + 'acl:Control': ['control'] +}; + +const WebaclAuthorizerSchema = { + name: 'webacl.authorizer' as const, + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); + }, + actions: { + hasPermission: defineAction({ + async handler(ctx) { + const { uri, type, mode, webId } = ctx.params; + + if (type === 'resource' || type === 'container') { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + const modesToCheck = modeMapping[mode]; + + const rights = await ctx.call('webacl.resource.hasRights', { + resourceUri: uri, + webId, + rights: Object.fromEntries(modesToCheck.map((m: any) => [m, true])) + }); + + // Return true if there is at least one true value + return Object.values(rights).some(r => r); + } + + return undefined; + } + }) + } +} satisfies ServiceSchema; + +export default WebaclAuthorizerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclAuthorizerSchema.name]: typeof WebaclAuthorizerSchema; + } + } +} diff --git a/src/middleware/packages/webacl/services/cache/index.js b/src/middleware/packages/webacl/services/cache/index.js deleted file mode 100644 index ccac4e686..000000000 --- a/src/middleware/packages/webacl/services/cache/index.js +++ /dev/null @@ -1,81 +0,0 @@ -module.exports = { - name: 'webacl.cache', - actions: { - // Invalidate the WebACL cache of the given resource - // If specificUriOnly is false, it will invalidate all resources starting with the given URI - async invalidateResourceRights(ctx) { - if (this.broker.cacher) { - const { uri, specificUriOnly } = ctx.params; - await this.broker.cacher.clean(`webacl.resource.getRights:${uri}${specificUriOnly ? '|**' : '**'}`); - await this.broker.cacher.clean(`webacl.resource.hasRights:${uri}${specificUriOnly ? '|**' : '**'}`); - } - }, - // Invalidate all WebACL cache for the given user - async invalidateAllUserRights(ctx) { - if (this.broker.cacher) { - const { uri } = ctx.params; - await this.broker.cacher.clean(`webacl.resource.getRights:**${uri}**`); - await this.broker.cacher.clean(`webacl.resource.hasRights:**${uri}**`); - } - }, - async invalidateAllUserRightsOnPod(ctx) { - if (this.broker.cacher) { - const { webId, podOwner } = ctx.params; - await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}|**|${webId}`); - await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}|**|${webId}`); - await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}/**|**|${webId}`); - await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}/**|**|${webId}`); - } - }, - async generateForUser(ctx) { - const { webId } = ctx.params; - this.logger.info(`Generating cache for user ${webId}`); - const containers = await ctx.call('ldp.container.getAll'); - for (const containerUri of containers) { - this.logger.info(`Generating cache for container ${containerUri}`); - const resources = await ctx.call('ldp.container.getUris', { containerUri }); - for (const resourceUri of resources) { - await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, - webId - }); - } - } - }, - async generateForAll(ctx) { - const { usersContainer } = ctx.params; - const users = await ctx.call('ldp.container.getUris', { containerUri: usersContainer }); - for (const webId of users) { - await this.actions.generateForUser({ webId }, { parentCtx: ctx }); - } - } - }, - events: { - async 'webacl.resource.updated'(ctx) { - const { uri, isContainer, defaultRightsUpdated } = ctx.params; - await this.actions.invalidateResourceRights( - { uri, specificUriOnly: !isContainer || !defaultRightsUpdated }, - { parentCtx: ctx } - ); - }, - async 'webacl.resource.deleted'(ctx) { - const { uri, isContainer } = ctx.params; - await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); - }, - async 'webacl.resource.user-deleted'(ctx) { - const { webId } = ctx.params; - await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); - }, - async 'webacl.group.member-added'(ctx) { - const { groupUri, memberUri } = ctx.params; - await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); - await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); - }, - async 'webacl.group.member-removed'(ctx) { - const { groupUri, memberUri } = ctx.params; - await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); - await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); - } - } -}; diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts new file mode 100644 index 000000000..a9226b1ff --- /dev/null +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -0,0 +1,133 @@ +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +const WebaclCacheSchema = { + name: 'webacl.cache' as const, + actions: { + invalidateResourceRights: defineAction({ + // Invalidate the WebACL cache of the given resource + // If specificUriOnly is false, it will invalidate all resources starting with the given URI + async handler(ctx) { + if (this.broker.cacher) { + const { uri, specificUriOnly } = ctx.params; + await this.broker.cacher.clean(`webacl.resource.getRights:${uri}${specificUriOnly ? '|**' : '**'}`); + await this.broker.cacher.clean(`webacl.resource.hasRights:${uri}${specificUriOnly ? '|**' : '**'}`); + } + } + }), + + invalidateAllUserRights: defineAction({ + // Invalidate all WebACL cache for the given user + async handler(ctx) { + if (this.broker.cacher) { + const { uri } = ctx.params; + await this.broker.cacher.clean(`webacl.resource.getRights:**${uri}**`); + await this.broker.cacher.clean(`webacl.resource.hasRights:**${uri}**`); + } + } + }), + + invalidateAllUserRightsOnPod: defineAction({ + async handler(ctx) { + if (this.broker.cacher) { + const { webId, podOwner } = ctx.params; + await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}|**|${webId}`); + await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}|**|${webId}`); + await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}/**|**|${webId}`); + await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}/**|**|${webId}`); + } + } + }), + + generateForUser: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + this.logger.info(`Generating cache for user ${webId}`); + const containers = await ctx.call('ldp.container.getAll'); + for (const containerUri of containers) { + this.logger.info(`Generating cache for container ${containerUri}`); + const resources = await ctx.call('ldp.container.getUris', { containerUri }); + for (const resourceUri of resources) { + await ctx.call('webacl.resource.hasRights', { + resourceUri, + rights: { read: true }, + webId + }); + } + } + } + }), + + generateForAll: defineAction({ + async handler(ctx) { + const { usersContainer } = ctx.params; + const users = await ctx.call('ldp.container.getUris', { containerUri: usersContainer }); + for (const webId of users) { + await this.actions.generateForUser({ webId }, { parentCtx: ctx }); + } + } + }) + }, + events: { + 'webacl.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message + const { uri, isContainer, defaultRightsUpdated } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResourceRights( + { uri, specificUriOnly: !isContainer || !defaultRightsUpdated }, + { parentCtx: ctx } + ); + } + }), + + 'webacl.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message + const { uri, isContainer } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); + } + }), + + 'webacl.resource.user-deleted': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + const { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); + } + }), + + 'webacl.group.member-added': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message + const { groupUri, memberUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); + } + }), + + 'webacl.group.member-removed': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message + const { groupUri, memberUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message + await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); + } + }) + } +} satisfies ServiceSchema; + +export default WebaclCacheSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclCacheSchema.name]: typeof WebaclCacheSchema; + } + } +} diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.js b/src/middleware/packages/webacl/services/group/actions/addMember.js deleted file mode 100644 index e87be7e62..000000000 --- a/src/middleware/packages/webacl/services/group/actions/addMember.js +++ /dev/null @@ -1,64 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const urlJoin = require('url-join'); - -module.exports = { - api: async function api(ctx) { - if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - - await ctx.call('webacl.group.addMember', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, - memberUri: ctx.params.memberUri - }); - - ctx.meta.$statusCode = 204; - }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - memberUri: { type: 'string', optional: false, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri, memberUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - // TODO: check that the member exists ? - - // Check we have Append ou Write permissions on the group - if (webId !== 'system') { - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - append: true, - write: true - }, - webId - }); - if (!groupRights.append && !groupRights.write) - throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX vcard: - INSERT DATA { - GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember <${memberUri}> - } - } - `, - webId: 'system' - }); - - ctx.emit('webacl.group.member-added', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts new file mode 100644 index 000000000..28b5b6afa --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -0,0 +1,69 @@ +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const api = async function api(this: any, ctx: any) { + if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + + await ctx.call('webacl.group.addMember', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, + memberUri: ctx.params.memberUri + }); + + ctx.meta.$statusCode = 204; +}; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + memberUri: { type: 'string', optional: false, trim: true }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupSlug, groupUri, memberUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + + // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + + // TODO: check that the member exists ? + + // Check we have Append ou Write permissions on the group + if (webId !== 'system') { + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + append: true, + write: true + }, + webId + }); + if (!groupRights.append && !groupRights.write) + throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); + } + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX vcard: + INSERT DATA { + GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember <${memberUri}> + } + } + `, + webId: 'system' + }); + + ctx.emit('webacl.group.member-added', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/create.js b/src/middleware/packages/webacl/services/group/actions/create.js deleted file mode 100644 index a0a597df0..000000000 --- a/src/middleware/packages/webacl/services/group/actions/create.js +++ /dev/null @@ -1,82 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const createSlug = require('speakingurl'); -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); - -module.exports = { - api: async function api(ctx) { - if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - - const { groupUri } = await ctx.call('webacl.group.create', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.meta.headers.slug}` : ctx.meta.headers.slug - }); - - ctx.meta.$responseHeaders = { - Location: groupUri, - 'Content-Length': 0 - }; - // We need to set this also here (in addition to above) or we get a Moleculer warning - ctx.meta.$location = groupUri; - ctx.meta.$statusCode = 201; - }, - action: { - visibility: 'public', - params: { - groupUri: { type: 'string', optional: true }, - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupUri, groupSlug } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri) { - groupSlug = createSlug(groupSlug, { lang: 'fr', custom: { '.': '.', '/': '/' } }); - groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - } - - if (await this.actions.exist({ groupUri, webId: 'system' }, { parentCtx: ctx })) { - throw new MoleculerError('Group already exists', 400, 'BAD_REQUEST'); - } - - const newRights = {}; - if (webId === 'anon') { - newRights.anon = { - read: true, - write: true - }; - } else if (webId === 'system') { - newRights.anon = { - read: true - }; - } else { - newRights.user = { - uri: webId, - read: true, - write: true, - control: true - }; - } - await ctx.call('webacl.resource.addRights', { - webId: 'system', - resourceUri: groupUri, - newRights - }); - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX vcard: - INSERT DATA { - GRAPH <${this.settings.graphName}> { - <${groupUri}> a vcard:Group - } - } - `, - webId: 'system' - }); - - return { groupUri }; - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts new file mode 100644 index 000000000..3df143463 --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -0,0 +1,91 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'spea... Remove this comment to see the full error message +import createSlug from 'speakingurl'; +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const api = async function api(this: any, ctx: any) { + if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + + const { groupUri } = await ctx.call('webacl.group.create', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.meta.headers.slug}` : ctx.meta.headers.slug + }); + + ctx.meta.$responseHeaders = { + Location: groupUri, + 'Content-Length': 0 + }; + // We need to set this also here (in addition to above) or we get a Moleculer warning + ctx.meta.$location = groupUri; + ctx.meta.$statusCode = 201; +}; + +export const action = defineAction({ + visibility: 'public', + params: { + groupUri: { type: 'string', optional: true }, + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupUri, groupSlug } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + if (!groupUri) { + groupSlug = createSlug(groupSlug, { lang: 'fr', custom: { '.': '.', '/': '/' } }); + // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message + groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + } + + if (await this.actions.exist({ groupUri, webId: 'system' }, { parentCtx: ctx })) { + throw new MoleculerError('Group already exists', 400, 'BAD_REQUEST'); + } + + const newRights = {}; + if (webId === 'anon') { + // @ts-expect-error TS(2339): Property 'anon' does not exist on type '{}'. + newRights.anon = { + read: true, + write: true + }; + } else if (webId === 'system') { + // @ts-expect-error TS(2339): Property 'anon' does not exist on type '{}'. + newRights.anon = { + read: true + }; + } else { + // @ts-expect-error TS(2339): Property 'user' does not exist on type '{}'. + newRights.user = { + uri: webId, + read: true, + write: true, + control: true + }; + } + await ctx.call('webacl.resource.addRights', { + webId: 'system', + resourceUri: groupUri, + newRights + }); + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX vcard: + INSERT DATA { + GRAPH <${this.settings.graphName}> { + <${groupUri}> a vcard:Group + } + } + `, + webId: 'system' + }); + + return { groupUri }; + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/delete.js b/src/middleware/packages/webacl/services/group/actions/delete.js deleted file mode 100644 index 96335dc5e..000000000 --- a/src/middleware/packages/webacl/services/group/actions/delete.js +++ /dev/null @@ -1,60 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const { removeAgentGroupOrAgentFromAuthorizations } = require('../../../utils'); - -module.exports = { - api: async function api(ctx) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.delete', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id - }); - - ctx.meta.$statusCode = 204; - }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - // TODO: check that the group exists ? - - if (webId !== 'system') { - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - write: true - }, - webId - }); - if (!groupRights.write) - throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - DELETE WHERE { - GRAPH <${this.settings.graphName}> { - <${groupUri}> ?p ?o. - } - } - `, - webId: 'system' - }); - - await ctx.call('webacl.resource.deleteAllRights', { resourceUri: groupUri }); - - await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts new file mode 100644 index 000000000..517231305 --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -0,0 +1,64 @@ +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; +import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const api = async function api(this: any, ctx: any) { + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + await ctx.call('webacl.group.delete', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id + }); + + ctx.meta.$statusCode = 204; +}; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupSlug, groupUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + + // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + + // TODO: check that the group exists ? + + if (webId !== 'system') { + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + write: true + }, + webId + }); + if (!groupRights.write) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); + } + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + DELETE WHERE { + GRAPH <${this.settings.graphName}> { + <${groupUri}> ?p ?o. + } + } + `, + webId: 'system' + }); + + await ctx.call('webacl.resource.deleteAllRights', { resourceUri: groupUri }); + + await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/exist.js b/src/middleware/packages/webacl/services/group/actions/exist.js deleted file mode 100644 index a613cda30..000000000 --- a/src/middleware/packages/webacl/services/group/actions/exist.js +++ /dev/null @@ -1,31 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); - -module.exports = { - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true } - }, - async handler(ctx) { - let { groupUri, groupSlug } = ctx.params; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - return await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX vcard: - ASK WHERE { - GRAPH <${this.settings.graphName}> { - <${groupUri}> a vcard:Group . - } - } - `, - webId: 'system' - }); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts new file mode 100644 index 000000000..9d8651370 --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -0,0 +1,34 @@ +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true } + }, + async handler(ctx) { + let { groupUri, groupSlug } = ctx.params; + + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + + return await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX vcard: + ASK WHERE { + GRAPH <${this.settings.graphName}> { + <${groupUri}> a vcard:Group . + } + } + `, + webId: 'system' + }); + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.js b/src/middleware/packages/webacl/services/group/actions/getGroups.js deleted file mode 100644 index 08b728388..000000000 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.js +++ /dev/null @@ -1,57 +0,0 @@ -module.exports = { - api: async function api(ctx) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - return await ctx.call('webacl.group.getGroups', {}); - }, - action: { - visibility: 'public', - params: { - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - let groups; - - if (webId !== 'system') { - const agentSelector = webId === 'anon' ? 'acl:agentClass foaf:Agent.' : `acl:agent <${webId}>.`; - - groups = await ctx.call('triplestore.query', { - query: ` - PREFIX vcard: - PREFIX acl: - PREFIX foaf: - SELECT ?g - WHERE - { GRAPH <${this.settings.graphName}> - { ?g a vcard:Group. - ?auth a acl:Authorization; - acl:mode acl:Read; - acl:accessTo ?g; - ${agentSelector} - } - } - `, - webId: 'system' - }); - - /// TODO: implement to find the groups the user has Read access to, via his membership of other groups (agentGroup) - // and also the groups with acl:AuthenticatedAgent - } else { - groups = await ctx.call('triplestore.query', { - query: ` - PREFIX vcard: - SELECT ?g - WHERE { - GRAPH <${this.settings.graphName}> - { ?g a vcard:Group } - } - `, - webId: 'system' - }); - } - - return groups.map(m => m.g.value); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts new file mode 100644 index 000000000..24808231c --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -0,0 +1,59 @@ +import { defineAction } from 'moleculer'; + +export const api = async function api(this: any, ctx: any) { + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + return await ctx.call('webacl.group.getGroups', {}); +}; + +export const action = defineAction({ + visibility: 'public', + params: { + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + let groups; + + if (webId !== 'system') { + const agentSelector = webId === 'anon' ? 'acl:agentClass foaf:Agent.' : `acl:agent <${webId}>.`; + + groups = await ctx.call('triplestore.query', { + query: ` + PREFIX vcard: + PREFIX acl: + PREFIX foaf: + SELECT ?g + WHERE + { GRAPH <${this.settings.graphName}> + { ?g a vcard:Group. + ?auth a acl:Authorization; + acl:mode acl:Read; + acl:accessTo ?g; + ${agentSelector} + } + } + `, + webId: 'system' + }); + + /// TODO: implement to find the groups the user has Read access to, via his membership of other groups (agentGroup) + // and also the groups with acl:AuthenticatedAgent + } else { + groups = await ctx.call('triplestore.query', { + query: ` + PREFIX vcard: + SELECT ?g + WHERE { + GRAPH <${this.settings.graphName}> + { ?g a vcard:Group } + } + `, + webId: 'system' + }); + } + + return groups.map((m: any) => m.g.value); + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.js b/src/middleware/packages/webacl/services/group/actions/getMembers.js deleted file mode 100644 index ddf71293b..000000000 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.js +++ /dev/null @@ -1,56 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); - -module.exports = { - api: async function api(ctx) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - return await ctx.call('webacl.group.getMembers', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id - }); - }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - // TODO: check that the group exists ? - - if (webId !== 'system') { - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - read: true - }, - webId - }); - if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - const members = await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX vcard: - SELECT ?m - WHERE { - GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember ?m - } - } - `, - webId: 'system' - }); - - return members.map(m => m.m.value); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts new file mode 100644 index 000000000..65a03b6a7 --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -0,0 +1,61 @@ +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const api = async function api(this: any, ctx: any) { + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + return await ctx.call('webacl.group.getMembers', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id + }); +}; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupSlug, groupUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + + // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + + // TODO: check that the group exists ? + + if (webId !== 'system') { + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + read: true + }, + webId + }); + if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); + } + + const members = await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX vcard: + SELECT ?m + WHERE { + GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember ?m + } + } + `, + webId: 'system' + }); + + return members.map((m: any) => m.m.value); + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.js b/src/middleware/packages/webacl/services/group/actions/getUri.js deleted file mode 100644 index fe3ccb80e..000000000 --- a/src/middleware/packages/webacl/services/group/actions/getUri.js +++ /dev/null @@ -1,14 +0,0 @@ -const urlJoin = require('url-join'); - -module.exports = { - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: false, trim: true } - }, - async handler(ctx) { - const { groupSlug } = ctx.params; - return urlJoin(this.settings.baseUrl, '_groups', groupSlug); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.ts b/src/middleware/packages/webacl/services/group/actions/getUri.ts new file mode 100644 index 000000000..e54b45729 --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/getUri.ts @@ -0,0 +1,13 @@ +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: false, trim: true } + }, + async handler(ctx) { + const { groupSlug } = ctx.params; + return urlJoin(this.settings.baseUrl, '_groups', groupSlug); + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.js b/src/middleware/packages/webacl/services/group/actions/isMember.js deleted file mode 100644 index 62ef6c277..000000000 --- a/src/middleware/packages/webacl/services/group/actions/isMember.js +++ /dev/null @@ -1,51 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); - -module.exports = { - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - webId: { type: 'string', optional: true }, - memberId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri, memberId } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - // TODO: check that the group exists ? - - if (webId !== 'system') { - // verifier que nous avons bien le droit Read sur le group. - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - read: true - }, - webId - }); - if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - if (!memberId) memberId = webId; - if (memberId === 'anon' || memberId === 'system') return false; // anonymous is never member. - - return await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX vcard: - ASK - WHERE { GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember <${memberId}> . - } } - `, - webId: 'system' - }); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts new file mode 100644 index 000000000..b3324521a --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -0,0 +1,55 @@ +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + webId: { type: 'string', optional: true }, + memberId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupSlug, groupUri, memberId } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + + // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + + // TODO: check that the group exists ? + + if (webId !== 'system') { + // verifier que nous avons bien le droit Read sur le group. + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + read: true + }, + webId + }); + if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); + } + + if (!memberId) memberId = webId; + if (memberId === 'anon' || memberId === 'system') return false; // anonymous is never member. + + return await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX vcard: + ASK + WHERE { GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember <${memberId}> . + } } + `, + webId: 'system' + }); + } +}); diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.js b/src/middleware/packages/webacl/services/group/actions/removeMember.js deleted file mode 100644 index e50b37379..000000000 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.js +++ /dev/null @@ -1,65 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); - -module.exports = { - api: async function api(ctx) { - if (!ctx.params.deleteUserUri) - throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - - await ctx.call('webacl.group.removeMember', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, - memberUri: ctx.params.deleteUserUri - }); - - ctx.meta.$statusCode = 204; - }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - memberUri: { type: 'string', optional: false, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri, memberUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - if (!memberUri) throw new MoleculerError('needs a memberUri', 400, 'BAD_REQUEST'); - - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - // TODO: check that the member exists and is in the group ? - - if (webId !== 'system') { - // verifier que nous avons bien le droit Write sur le group. - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - write: true - }, - webId - }); - if (!groupRights.write) - throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX vcard: - DELETE DATA { - GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember <${memberUri}> - } - } - `, - webId: 'system' - }); - - ctx.emit('webacl.group.member-removed', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); - } - } -}; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts new file mode 100644 index 000000000..862d69c67 --- /dev/null +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -0,0 +1,69 @@ +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const api = async function api(this: any, ctx: any) { + if (!ctx.params.deleteUserUri) + throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + + await ctx.call('webacl.group.removeMember', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, + memberUri: ctx.params.deleteUserUri + }); + + ctx.meta.$statusCode = 204; +}; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + memberUri: { type: 'string', optional: false, trim: true }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupSlug, groupUri, memberUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + if (!memberUri) throw new MoleculerError('needs a memberUri', 400, 'BAD_REQUEST'); + + // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + + // TODO: check that the member exists and is in the group ? + + if (webId !== 'system') { + // verifier que nous avons bien le droit Write sur le group. + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + write: true + }, + webId + }); + if (!groupRights.write) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); + } + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX vcard: + DELETE DATA { + GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember <${memberUri}> + } + } + `, + webId: 'system' + }); + + ctx.emit('webacl.group.member-removed', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); + } +}); diff --git a/src/middleware/packages/webacl/services/group/index.js b/src/middleware/packages/webacl/services/group/index.ts similarity index 69% rename from src/middleware/packages/webacl/services/group/index.js rename to src/middleware/packages/webacl/services/group/index.ts index 9e2558ce2..070906e66 100644 --- a/src/middleware/packages/webacl/services/group/index.js +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -1,16 +1,17 @@ -const urlJoin = require('url-join'); -const createAction = require('./actions/create'); -const deleteAction = require('./actions/delete'); -const existAction = require('./actions/exist'); -const addMemberAction = require('./actions/addMember'); -const getMembersAction = require('./actions/getMembers'); -const getUriAction = require('./actions/getUri'); -const isMemberAction = require('./actions/isMember'); -const removeMemberAction = require('./actions/removeMember'); -const getGroupsAction = require('./actions/getGroups'); +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction } from 'moleculer'; +import * as createAction from './actions/create.ts'; +import * as deleteAction from './actions/delete.ts'; +import * as existAction from './actions/exist.ts'; +import * as addMemberAction from './actions/addMember.ts'; +import * as getMembersAction from './actions/getMembers.ts'; +import * as getUriAction from './actions/getUri.ts'; +import * as isMemberAction from './actions/isMember.ts'; +import * as removeMemberAction from './actions/removeMember.ts'; +import * as getGroupsAction from './actions/getGroups.ts'; -module.exports = { - name: 'webacl.group', +const WebaclGroupSchema = { + name: 'webacl.group' as const, settings: { baseUrl: null, graphName: null, @@ -19,10 +20,12 @@ module.exports = { }, dependencies: ['triplestore', 'webacl.resource', 'ldp.container'], actions: { + // @ts-expect-error TS(2322): Type 'ActionSchema<{ groupSlug: { type: "string"; ... Remove this comment to see the full error message getUri: getUriAction.action, isMember: isMemberAction.action, exist: existAction.action, // Actions accessible through the API + // @ts-expect-error TS(2322): Type 'ActionSchema<{ groupSlug: { type: "string"; ... Remove this comment to see the full error message addMember: addMemberAction.action, api_addMember: addMemberAction.api, create: createAction.action, @@ -33,6 +36,7 @@ module.exports = { api_getGroups: getGroupsAction.api, getMembers: getMembersAction.action, api_getMembers: getMembersAction.api, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ groupSlug: { type: "string"; ... Remove this comment to see the full error message removeMember: removeMemberAction.action, api_removeMember: removeMemberAction.api }, @@ -50,8 +54,10 @@ module.exports = { await Promise.all( members - .filter(memberUri => !superAdmins.includes(memberUri)) - .map(memberUri => this.actions.removeMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' })) + .filter((memberUri: any) => !superAdmins.includes(memberUri)) + .map((memberUri: any) => + this.actions.removeMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' }) + ) ); } @@ -113,6 +119,7 @@ module.exports = { hooks: { before: { '*'(ctx) { + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message if (this.settings.podProvider && !ctx.meta.dataset) { if (ctx.params.groupUri) { const groupPath = new URL(ctx.params.groupUri).pathname; @@ -130,4 +137,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default WebaclGroupSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclGroupSchema.name]: typeof WebaclGroupSchema; + } + } +} diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.js b/src/middleware/packages/webacl/services/resource/actions/addRights.js deleted file mode 100644 index 37c3a9e87..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.js +++ /dev/null @@ -1,167 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const urlJoin = require('url-join'); -const { - getAclUriFromResourceUri, - convertBodyToTriples, - filterTriplesForResource, - processRights, - FULL_FOAF_AGENT, - FULL_AGENTCLASS_URI -} = require('../../../utils'); - -module.exports = { - api: async function api(ctx) { - const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; - - if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) - throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - - const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); - if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); - - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; - - await ctx.call('webacl.resource.addRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - addedRights - }); - - ctx.meta.$statusCode = 204; - }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - webId: { type: 'string', optional: true }, - // addedRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } - // you will most likely prefer to use additionalRights instead. - addedRights: { type: 'array', optional: true, min: 1 }, - // newRights is used to add rights to a non existing resource. - newRights: { type: 'object', optional: true }, - // additionalRights is used to add rights to an existing resource. - additionalRights: { type: 'object', optional: true } - }, - async handler(ctx) { - let { webId, addedRights, resourceUri, newRights, additionalRights } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; - - let difference; - let currentAuths; - let isContainer; - - if (!newRights && (addedRights || additionalRights)) { - if (!addedRights && !additionalRights) - throw new MoleculerError( - 'please use addedRights or additionalRights, none were provided', - 403, - 'BAD_REQUEST' - ); - - isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - - await ctx.call('permissions.check', { - uri: resourceUri, - type: isContainer ? 'container' : 'resource', - mode: 'acl:Control', - webId - }); - - const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); - - if (!addedRights) { - // we process additionalRights only if addedRights was not set. - addedRights = processRights(additionalRights, `${aclUri}#`); - if (isContainer && additionalRights.default) - addedRights = addedRights.concat(processRights(additionalRights.default, `${aclUri}#Default`)); - if (addedRights.length === 0) new MoleculerError('No additional permissions to add!', 400, 'BAD_REQUEST'); - } else { - // filter out all the addedRights that are not for the resource - addedRights = addedRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); - if (addedRights.length === 0) - throw new MoleculerError('The rights cannot be added because they are incorrect', 400, 'BAD_REQUEST'); - } - - const currentPerms = await this.getExistingPerms( - ctx, - resourceUri, - this.settings.baseUrl, - this.settings.graphName, - isContainer - ); - - // find the difference between addedRights and currentPerms. add only what is not existent yet. - difference = addedRights.filter(x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p)); - if (difference.length === 0) return; - - // compile a list of Authorization already present. if some of them don't exist, we need to create them here below - currentAuths = this.compileAuthorizationNodesMap(currentPerms); - } else if (newRights) { - // TODO: check that the resource doesn't exist. otherwise, raise an error - if (webId !== 'system') - throw new MoleculerError( - 'Access denied! Only system can add permissions for a newly created resource', - 403, - 'ACCESS_DENIED' - ); - - // we set new rights for a non existing resource - const aclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, resourceUri)}#`; - difference = processRights(newRights, aclUri); - // we do add default container permissions if any is set in newRights. but we cannot know for sure - // that the resource that will be created will be a container. we don't want to add default permissions on a resource ! - // please be careful, as programmers, not to call newRights with 'default' perms for a resource. - // it should only be used for containers - if (newRights.default) difference = difference.concat(processRights(newRights.default, `${aclUri}Default`)); - currentAuths = {}; - } - - let addRequest = ''; - for (const add of difference) { - if (!currentAuths[add.auth]) { - addRequest += this.generateNewAuthNode(add.auth); - currentAuths[add.auth] = true; - } - addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; - } - - if (addRequest.length > 0) { - await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }`, - webId: 'system' - }); - } - - if (newRights) { - const returnValues = { uri: resourceUri, created: true, isContainer }; - ctx.emit('webacl.resource.created', returnValues, { meta: { webId: null, dataset: null } }); - return returnValues; - } - const defaultRightsUpdated = isContainer && difference.some(triple => triple.auth.includes('#Default')); - const addPublicRead = difference.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - const addDefaultPublicRead = - isContainer && - difference.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - - const returnValues = { - uri: resourceUri, - dataset: ctx.meta.dataset, - webId, - created: false, - isContainer, - defaultRightsUpdated, - addPublicRead, - addDefaultPublicRead - }; - ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); - return returnValues; - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts new file mode 100644 index 000000000..c7ee3d643 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -0,0 +1,175 @@ +import { MIME_TYPES } from '@semapps/mime-types'; +import urlJoin from 'url-join'; + +import { defineAction } from 'moleculer'; +import { + getAclUriFromResourceUri, + convertBodyToTriples, + filterTriplesForResource, + processRights, + FULL_FOAF_AGENT, + FULL_AGENTCLASS_URI +} from '../../../utils.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const api = async function api(this: any, ctx: any) { + const contentType = ctx.meta.headers['content-type']; + let { slugParts } = ctx.params; + + if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) + throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); + + const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + // @ts-expect-error TS(18046): 'addedRights' is of type 'unknown'. + if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); + + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; + + await ctx.call('webacl.resource.addRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + addedRights + }); + + ctx.meta.$statusCode = 204; +}; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + webId: { type: 'string', optional: true }, + // addedRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } + // you will most likely prefer to use additionalRights instead. + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message + addedRights: { type: 'array', optional: true, min: 1 }, + // newRights is used to add rights to a non existing resource. + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message + newRights: { type: 'object', optional: true }, + // additionalRights is used to add rights to an existing resource. + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message + additionalRights: { type: 'object', optional: true } + }, + async handler(ctx) { + let { webId, addedRights, resourceUri, newRights, additionalRights } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + webId = webId || ctx.meta.webId || 'anon'; + + let difference; + let currentAuths; + let isContainer: any; + + if (!newRights && (addedRights || additionalRights)) { + if (!addedRights && !additionalRights) + throw new MoleculerError('please use addedRights or additionalRights, none were provided', 403, 'BAD_REQUEST'); + + isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); + + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); + + const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); + + if (!addedRights) { + // we process additionalRights only if addedRights was not set. + addedRights = processRights(additionalRights, `${aclUri}#`); + if (isContainer && additionalRights.default) + addedRights = addedRights.concat(processRights(additionalRights.default, `${aclUri}#Default`)); + if (addedRights.length === 0) new MoleculerError('No additional permissions to add!', 400, 'BAD_REQUEST'); + } else { + // filter out all the addedRights that are not for the resource + addedRights = addedRights.filter((a: any) => filterTriplesForResource(a, aclUri, isContainer)); + if (addedRights.length === 0) + throw new MoleculerError('The rights cannot be added because they are incorrect', 400, 'BAD_REQUEST'); + } + + const currentPerms = await this.getExistingPerms( + ctx, + resourceUri, + this.settings.baseUrl, + this.settings.graphName, + isContainer + ); + + // find the difference between addedRights and currentPerms. add only what is not existent yet. + difference = addedRights.filter( + (x: any) => !currentPerms.some((y: any) => x.auth === y.auth && x.o === y.o && x.p === y.p) + ); + if (difference.length === 0) return; + + // compile a list of Authorization already present. if some of them don't exist, we need to create them here below + currentAuths = this.compileAuthorizationNodesMap(currentPerms); + } else if (newRights) { + // TODO: check that the resource doesn't exist. otherwise, raise an error + if (webId !== 'system') + throw new MoleculerError( + 'Access denied! Only system can add permissions for a newly created resource', + 403, + 'ACCESS_DENIED' + ); + + // we set new rights for a non existing resource + const aclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, resourceUri)}#`; + difference = processRights(newRights, aclUri); + // we do add default container permissions if any is set in newRights. but we cannot know for sure + // that the resource that will be created will be a container. we don't want to add default permissions on a resource ! + // please be careful, as programmers, not to call newRights with 'default' perms for a resource. + // it should only be used for containers + if (newRights.default) difference = difference.concat(processRights(newRights.default, `${aclUri}Default`)); + currentAuths = {}; + } + + let addRequest = ''; + for (const add of difference) { + if (!currentAuths[add.auth]) { + addRequest += this.generateNewAuthNode(add.auth); + currentAuths[add.auth] = true; + } + addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; + } + + if (addRequest.length > 0) { + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }`, + webId: 'system' + }); + } + + if (newRights) { + const returnValues = { uri: resourceUri, created: true, isContainer }; + ctx.emit('webacl.resource.created', returnValues, { meta: { webId: null, dataset: null } }); + return returnValues; + } + const defaultRightsUpdated = isContainer && difference.some((triple: any) => triple.auth.includes('#Default')); + const addPublicRead = difference.some( + (triple: any) => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const addDefaultPublicRead = + isContainer && + difference.some( + (triple: any) => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + + const returnValues = { + uri: resourceUri, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + dataset: ctx.meta.dataset, + webId, + created: false, + isContainer, + defaultRightsUpdated, + addPublicRead, + addDefaultPublicRead + }; + ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); + return returnValues; + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.js b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.js deleted file mode 100644 index cf33f66c9..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.js +++ /dev/null @@ -1,37 +0,0 @@ -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - webId: { type: 'string' }, - timeout: { type: 'number', default: 10000 } - }, - handler(ctx) { - const { resourceUri, webId, timeout } = ctx.params; - return new Promise(resolve => { - let i = 0; - let interval; - const checkRights = () => { - ctx - .call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, - webId - }) - .then(rights => { - if (rights.read === true) { - if (interval) clearInterval(interval); - resolve(true); - } else if (i * 1000 >= timeout) { - if (interval) clearInterval(interval); - resolve(false); - } - i++; - }); - }; - checkRights(); // Try immediately, then launch interval - interval = setInterval(checkRights, 1000); - }); - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts new file mode 100644 index 000000000..3c9362755 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -0,0 +1,38 @@ +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + webId: { type: 'string' }, + timeout: { type: 'number', default: 10000 } + }, + handler(ctx) { + const { resourceUri, webId, timeout } = ctx.params; + return new Promise(resolve => { + let i = 0; + let interval: any; + const checkRights = () => { + ctx + .call('webacl.resource.hasRights', { + resourceUri, + rights: { read: true }, + webId + }) + .then(rights => { + if (rights.read === true) { + if (interval) clearInterval(interval); + resolve(true); + // @ts-expect-error TS(18048): 'timeout' is possibly 'undefined'. + } else if (i * 1000 >= timeout) { + if (interval) clearInterval(interval); + resolve(false); + } + i++; + }); + }; + checkRights(); // Try immediately, then launch interval + interval = setInterval(checkRights, 1000); + }); + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.js b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.js deleted file mode 100644 index cc052a8c5..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string', optional: false } - }, - async handler(ctx) { - const { resourceUri } = ctx.params; - - const isContainer = await ctx.call('ldp.container.exist', { containerUri: resourceUri }); - - await ctx.call('triplestore.update', { - query: ` - PREFIX acl: - WITH <${this.settings.graphName}> - DELETE { ?auth ?p2 ?o } - WHERE { ?auth ?p <${resourceUri}>. - FILTER (?p IN (acl:accessTo, acl:default ) ) - ?auth ?p2 ?o } - `, - webId: 'system' - }); - - ctx.emit( - 'webacl.resource.deleted', - { uri: resourceUri, dataset: ctx.meta.dataset, isContainer }, - { meta: { webId: null, dataset: null } } - ); - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts new file mode 100644 index 000000000..b70360726 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -0,0 +1,32 @@ +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string', optional: false } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + + const isContainer = await ctx.call('ldp.container.exist', { containerUri: resourceUri }); + + await ctx.call('triplestore.update', { + query: ` + PREFIX acl: + WITH <${this.settings.graphName}> + DELETE { ?auth ?p2 ?o } + WHERE { ?auth ?p <${resourceUri}>. + FILTER (?p IN (acl:accessTo, acl:default ) ) + ?auth ?p2 ?o } + `, + webId: 'system' + }); + + ctx.emit( + 'webacl.resource.deleted', + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + { uri: resourceUri, dataset: ctx.meta.dataset, isContainer }, + { meta: { webId: null, dataset: null } } + ); + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.js b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.js deleted file mode 100644 index f517e6957..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - action: { - visibility: 'public', - params: { - webId: { type: 'string', optional: false } - }, - async handler(ctx) { - const { webId } = ctx.params; - - await ctx.call('triplestore.update', { - query: ` - PREFIX acl: - WITH <${this.settings.graphName}> - DELETE { ?auth acl:agent <${webId}> } - WHERE { ?auth acl:agent <${webId}> } - `, - webId: 'system' - }); - - ctx.emit( - 'webacl.resource.user-deleted', - { webId, dataset: ctx.meta.dataset }, - { meta: { webId: null, dataset: null } } - ); - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts new file mode 100644 index 000000000..d8ae2f71f --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -0,0 +1,28 @@ +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + webId: { type: 'string', optional: false } + }, + async handler(ctx) { + const { webId } = ctx.params; + + await ctx.call('triplestore.update', { + query: ` + PREFIX acl: + WITH <${this.settings.graphName}> + DELETE { ?auth acl:agent <${webId}> } + WHERE { ?auth acl:agent <${webId}> } + `, + webId: 'system' + }); + + ctx.emit( + 'webacl.resource.user-deleted', + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + { webId, dataset: ctx.meta.dataset }, + { meta: { webId: null, dataset: null } } + ); + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.js b/src/middleware/packages/webacl/services/resource/actions/getLink.js deleted file mode 100644 index 1e7955f09..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.js +++ /dev/null @@ -1,17 +0,0 @@ -const { getAclUriFromResourceUri } = require('../../../utils'); - -module.exports = { - action: { - visibility: 'public', - params: { - uri: { type: 'string', optional: false } - }, - handler(ctx) { - const { uri } = ctx.params; - return { - uri: getAclUriFromResourceUri(this.settings.baseUrl, uri), - rel: 'acl' - }; - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts new file mode 100644 index 000000000..adb2f4aab --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -0,0 +1,16 @@ +import { defineAction } from 'moleculer'; +import { getAclUriFromResourceUri } from '../../../utils.ts'; + +export const action = defineAction({ + visibility: 'public', + params: { + uri: { type: 'string', optional: false } + }, + handler(ctx) { + const { uri } = ctx.params; + return { + uri: getAclUriFromResourceUri(this.settings.baseUrl, uri), + rel: 'acl' + }; + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.js b/src/middleware/packages/webacl/services/resource/actions/getRights.ts similarity index 59% rename from src/middleware/packages/webacl/services/resource/actions/getRights.js rename to src/middleware/packages/webacl/services/resource/actions/getRights.ts index 067edfd2f..86e7ed7dd 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.js +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -1,18 +1,21 @@ -const { JsonLdSerializer } = require('jsonld-streaming-serializer'); -const { DataFactory, Writer } = require('n3'); +import { JsonLdSerializer } from 'jsonld-streaming-serializer'; +import { DataFactory, Writer } from 'n3'; +import urlJoin from 'url-join'; +import { MIME_TYPES } from '@semapps/mime-types'; -const { quad } = DataFactory; -const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { MoleculerError } = require('moleculer').Errors; - -const { +import { defineAction } from 'moleculer'; +import { getAuthorizationNode, findParentContainers, filterAgentAcl, getAclUriFromResourceUri, getUserAgentSearchParam -} = require('../../../utils'); +} from '../../../utils.ts'; + +const { quad } = DataFactory; +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; const prefixes = { acl: 'http://www.w3.org/ns/auth/acl#', @@ -41,22 +44,22 @@ const webAclContext = { } }; -function streamToString(stream) { +function streamToString(stream: any) { let res = ''; return new Promise((resolve, reject) => { - stream.on('data', chunk => (res += chunk)); - stream.on('error', err => reject(err)); + stream.on('data', (chunk: any) => (res += chunk)); + stream.on('error', (err: any) => reject(err)); stream.on('end', () => resolve(res)); }); } -async function formatOutput(ctx, output, resourceAclUri, jsonLD) { +async function formatOutput(ctx: any, output: any, resourceAclUri: any, jsonLD: any) { const turtle = await new Promise((resolve, reject) => { const writer = new Writer({ prefixes: { ...prefixes, '': `${resourceAclUri}#` }, format: 'Turtle' }); - output.forEach(f => writer.addQuad(f.auth, f.p, f.o)); + output.forEach((f: any) => writer.addQuad(f.auth, f.p, f.o)); writer.end((error, res) => { resolve(res); }); @@ -69,9 +72,10 @@ async function formatOutput(ctx, output, resourceAclUri, jsonLD) { baseIRI: resourceAclUri }); - output.forEach(f => mySerializer.write(quad(f.auth, f.p, f.o))); + output.forEach((f: any) => mySerializer.write(quad(f.auth, f.p, f.o))); mySerializer.end(); + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message const jsonLd = JSON.parse(await streamToString(mySerializer)); const compactJsonLd = await ctx.call('jsonld.parser.frame', { @@ -90,20 +94,21 @@ async function formatOutput(ctx, output, resourceAclUri, jsonLD) { return compactJsonLd; } -async function filterAcls(hasControl, uaSearchParam, acls) { +async function filterAcls(hasControl: any, uaSearchParam: any, acls: any) { if (hasControl) return acls; - const filtered = acls.filter(acl => filterAgentAcl(acl, uaSearchParam, false)); + const filtered = acls.filter((acl: any) => filterAgentAcl(acl, uaSearchParam, false)); if (filtered.length) { - const header = acls.filter(acl => filterAgentAcl(acl, uaSearchParam, true)); + const header = acls.filter((acl: any) => filterAgentAcl(acl, uaSearchParam, true)); return header.concat(filtered); } return []; } -async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isContainer) { +async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: any, graphName: any, isContainer: any) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. const uaSearchParam = getUserAgentSearchParam(user); const document = []; @@ -120,9 +125,13 @@ async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isCont // Get the ACL for the resource + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName); document.push(...(await filterAcls(hasControl, uaSearchParam, reads))); @@ -153,6 +162,7 @@ async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isCont const controls = await getAuthorizationNode(ctx, containerUri, aclUri, 'Control', graphName, true); // we keep all the authorization nodes we found + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message containersMap[containerUri] = { reads, writes, @@ -165,9 +175,13 @@ async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isCont } for (const value of Object.values(containersMap)) { + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.reads))); + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.writes))); + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.appends))); + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.controls))); } @@ -176,43 +190,44 @@ async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isCont return await formatOutput(ctx, document, resourceAclUri, ctx.meta.$responseType === MIME_TYPES.JSON); } -module.exports = { - api: async function api(ctx) { - const { accept } = ctx.meta.headers; - let { slugParts } = ctx.params; +export const api = async function api(this: any, ctx: any) { + const { accept } = ctx.meta.headers; + let { slugParts } = ctx.params; - if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) - throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); + if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) + throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - return await ctx.call('webacl.resource.getRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - accept - }); + return await ctx.call('webacl.resource.getRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + accept + }); +}; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + accept: { type: 'string', default: MIME_TYPES.JSON }, + webId: { type: 'string', optional: true }, + skipResourceCheck: { type: 'boolean', default: false } }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - accept: { type: 'string', default: MIME_TYPES.JSON }, - webId: { type: 'string', optional: true }, - skipResourceCheck: { type: 'boolean', default: false } - }, - cache: { - keys: ['resourceUri', 'accept', 'webId', '#webId'] - }, - async handler(ctx) { - let { resourceUri, webId, accept, skipResourceCheck } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; + cache: { + keys: ['resourceUri', 'accept', 'webId', '#webId'] + }, + async handler(ctx) { + let { resourceUri, webId, accept, skipResourceCheck } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + webId = webId || ctx.meta.webId || 'anon'; - accept = accept || MIME_TYPES.TURTLE; - ctx.meta.$responseType = accept; + accept = accept || MIME_TYPES.TURTLE; + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message + ctx.meta.$responseType = accept; - const isContainer = !skipResourceCheck && (await this.checkResourceOrContainerExists(ctx, resourceUri)); + const isContainer = !skipResourceCheck && (await this.checkResourceOrContainerExists(ctx, resourceUri)); - return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); - } + return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js deleted file mode 100644 index f47bdf1b5..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js +++ /dev/null @@ -1,32 +0,0 @@ -const { arrayOf } = require('@semapps/ldp'); - -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' } - }, - async handler(ctx) { - const { resourceUri } = ctx.params; - - const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); - const readAuthorization = - authorizations['@graph'] && authorizations['@graph'].find(auth => auth['@id'] === '#Read'); - - let usersWithReadRights = []; - - if (readAuthorization) { - usersWithReadRights = arrayOf(readAuthorization['acl:agent']); - const groupsWithReadRights = arrayOf(readAuthorization['acl:agentGroup']); - - for (const groupUri of groupsWithReadRights) { - const members = await ctx.call('webacl.group.getMembers', { groupUri, webId: 'system' }); - if (members) usersWithReadRights.push(...members); - } - } - - // Deduplicate (users might be in multiple groups). - return [...new Set(usersWithReadRights)]; - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts new file mode 100644 index 000000000..afc4d25ec --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -0,0 +1,31 @@ +import { arrayOf } from '@semapps/ldp'; +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + + const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); + const readAuthorization = + authorizations['@graph'] && authorizations['@graph'].find((auth: any) => auth['@id'] === '#Read'); + + let usersWithReadRights = []; + + if (readAuthorization) { + usersWithReadRights = arrayOf(readAuthorization['acl:agent']); + const groupsWithReadRights = arrayOf(readAuthorization['acl:agentGroup']); + + for (const groupUri of groupsWithReadRights) { + const members = await ctx.call('webacl.group.getMembers', { groupUri, webId: 'system' }); + if (members) usersWithReadRights.push(...members); + } + } + + // Deduplicate (users might be in multiple groups). + return [...new Set(usersWithReadRights)]; + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.js b/src/middleware/packages/webacl/services/resource/actions/hasRights.js deleted file mode 100644 index 7faf704a8..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.js +++ /dev/null @@ -1,129 +0,0 @@ -const urlJoin = require('url-join'); -const { - getAuthorizationNode, - checkAgentPresent, - getUserGroups, - findParentContainers, - getUserAgentSearchParam, - getAclUriFromResourceUri -} = require('../../../utils'); - -const perms = { - read: 'Read', - write: 'Write', - append: 'Append', - control: 'Control' -}; - -async function checkRights( - askedRights, - resultRights, - ctx, - resourceUri, - resourceAclUri, - uaSearchParam, - graphName, - isContainerDefault -) { - for (const [p1, p2] of Object.entries(perms)) { - if (askedRights[p1] && !resultRights[p1]) { - const permTuples = await getAuthorizationNode( - ctx, - resourceUri, - resourceAclUri, - p2, - graphName, - isContainerDefault - ); - const hasPerm = checkAgentPresent(permTuples, uaSearchParam); - if (hasPerm) resultRights[p1] = hasPerm; - } - } -} - -async function hasPermissions(ctx, resourceUri, askedRights, baseUrl, user, graphName) { - const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); - const resultRights = {}; - let groups; - if (user !== 'anon') { - // retrieve the groups of the user - groups = await getUserGroups(ctx, user, graphName); - } - const uaSearchParam = getUserAgentSearchParam(user, groups); - - await checkRights(askedRights, resultRights, ctx, resourceUri, resourceAclUri, uaSearchParam, graphName); - - if (Object.keys(askedRights).length !== Object.keys(resultRights).length) { - // we haven't found all the rights yet, we search in parent containers - const parentContainers = await findParentContainers(ctx, resourceUri); - - while (parentContainers.length) { - const container = parentContainers.shift(); - const containerUri = container.container.value; - const aclUri = getAclUriFromResourceUri(baseUrl, containerUri); - await checkRights(askedRights, resultRights, ctx, containerUri, aclUri, uaSearchParam, graphName, true); - - // if we are done finding all the asked rights, we return here, saving some processing. - if (Object.keys(askedRights).length === Object.keys(resultRights).length) return resultRights; - - const moreParentContainers = await findParentContainers(ctx, containerUri); - parentContainers.push(...moreParentContainers); - } - } - - // we put some false values if needed - for (const p1 of Object.keys(perms)) { - if (askedRights[p1] && !resultRights[p1]) resultRights[p1] = false; - } - - return resultRights; -} - -module.exports = { - api: async function api(ctx) { - let { slugParts } = ctx.params; - - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; - - return await ctx.call('webacl.resource.hasRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - rights: ctx.params.rights, - webId: ctx.meta.webId - }); - }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - rights: { - type: 'object', - optional: true, - strict: true, - props: { - read: { type: 'boolean', optional: true }, - write: { type: 'boolean', optional: true }, - append: { type: 'boolean', optional: true }, - control: { type: 'boolean', optional: true } - } - }, - webId: { type: 'string', optional: true } - }, - cache: { - enabled(ctx) { - // Do not cache remote resources as we have no mecanism to clear this cache - return ctx.params.resourceUri.startsWith(this.settings.baseUrl); - }, - keys: ['resourceUri', 'rights', 'webId'] - }, - async handler(ctx) { - let { resourceUri, webId, rights } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; - rights = rights || {}; - if (Object.keys(rights).length === 0) rights = { read: true, write: true, append: true, control: true }; - - await this.checkResourceOrContainerExists(ctx, resourceUri); - return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts new file mode 100644 index 000000000..c40959315 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -0,0 +1,135 @@ +import urlJoin from 'url-join'; + +import { defineAction } from 'moleculer'; +import { + getAuthorizationNode, + checkAgentPresent, + getUserGroups, + findParentContainers, + getUserAgentSearchParam, + getAclUriFromResourceUri +} from '../../../utils.ts'; + +const perms = { + read: 'Read', + write: 'Write', + append: 'Append', + control: 'Control' +}; + +async function checkRights( + askedRights: any, + resultRights: any, + ctx: any, + resourceUri: any, + resourceAclUri: any, + uaSearchParam: any, + graphName: any, + isContainerDefault: any +) { + for (const [p1, p2] of Object.entries(perms)) { + if (askedRights[p1] && !resultRights[p1]) { + const permTuples = await getAuthorizationNode( + ctx, + resourceUri, + resourceAclUri, + p2, + graphName, + isContainerDefault + ); + const hasPerm = checkAgentPresent(permTuples, uaSearchParam); + if (hasPerm) resultRights[p1] = hasPerm; + } + } +} + +async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, baseUrl: any, user: any, graphName: any) { + const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); + const resultRights = {}; + let groups; + if (user !== 'anon') { + // retrieve the groups of the user + groups = await getUserGroups(ctx, user, graphName); + } + const uaSearchParam = getUserAgentSearchParam(user, groups); + + // @ts-expect-error TS(2554): Expected 8 arguments, but got 7. + await checkRights(askedRights, resultRights, ctx, resourceUri, resourceAclUri, uaSearchParam, graphName); + + if (Object.keys(askedRights).length !== Object.keys(resultRights).length) { + // we haven't found all the rights yet, we search in parent containers + const parentContainers = await findParentContainers(ctx, resourceUri); + + while (parentContainers.length) { + const container = parentContainers.shift(); + const containerUri = container.container.value; + const aclUri = getAclUriFromResourceUri(baseUrl, containerUri); + await checkRights(askedRights, resultRights, ctx, containerUri, aclUri, uaSearchParam, graphName, true); + + // if we are done finding all the asked rights, we return here, saving some processing. + if (Object.keys(askedRights).length === Object.keys(resultRights).length) return resultRights; + + const moreParentContainers = await findParentContainers(ctx, containerUri); + parentContainers.push(...moreParentContainers); + } + } + + // we put some false values if needed + for (const p1 of Object.keys(perms)) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + if (askedRights[p1] && !resultRights[p1]) resultRights[p1] = false; + } + + return resultRights; +} + +export const api = async function api(this: any, ctx: any) { + let { slugParts } = ctx.params; + + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; + + return await ctx.call('webacl.resource.hasRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + rights: ctx.params.rights, + webId: ctx.meta.webId + }); +}; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + rights: { + type: 'object', + optional: true, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message + strict: true, + props: { + read: { type: 'boolean', optional: true }, + write: { type: 'boolean', optional: true }, + append: { type: 'boolean', optional: true }, + control: { type: 'boolean', optional: true } + } + }, + webId: { type: 'string', optional: true } + }, + cache: { + enabled(ctx) { + // Do not cache remote resources as we have no mecanism to clear this cache + // @ts-expect-error TS(18046): 'ctx.params.resourceUri' is of type 'unknown'. + return ctx.params.resourceUri.startsWith(this.settings.baseUrl); + }, + keys: ['resourceUri', 'rights', 'webId'] + }, + async handler(ctx) { + let { resourceUri, webId, rights } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + webId = webId || ctx.meta.webId || 'anon'; + rights = rights || {}; + if (Object.keys(rights).length === 0) rights = { read: true, write: true, append: true, control: true }; + + await this.checkResourceOrContainerExists(ctx, resourceUri); + return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.js b/src/middleware/packages/webacl/services/resource/actions/isPublic.js deleted file mode 100644 index 282259883..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/isPublic.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' } - }, - async handler(ctx) { - const { resourceUri } = ctx.params; - const { read } = await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, - webId: 'anon' - }); - return read; - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts new file mode 100644 index 000000000..ef94bdcf9 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts @@ -0,0 +1,17 @@ +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + const { read } = await ctx.call('webacl.resource.hasRights', { + resourceUri, + rights: { read: true }, + webId: 'anon' + }); + return read; + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.js b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.js deleted file mode 100644 index abcd6688a..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.js +++ /dev/null @@ -1,61 +0,0 @@ -const urlJoin = require('url-join'); - -module.exports = { - action: { - visibility: 'public', - async handler(ctx) { - const { webId } = ctx.params; - - const containers = await ctx.call('ldp.registry.list'); - - for (const { permissions, podsContainer, path } of Object.values(containers)) { - if (permissions && !podsContainer) { - const baseUrl = this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId }) - : this.settings.baseUrl; - - const containerUri = urlJoin(baseUrl, path); - - const containerRights = - typeof permissions === 'function' - ? permissions(this.settings.podProvider ? webId : 'system', ctx) - : permissions; - - this.logger.info(`Refreshing rights for container ${containerUri}...`); - - const publicPermissions = await ctx.call('webacl.resource.hasRights', { - resourceUri: containerUri, - rights: { read: true }, - webId: 'anon' - }); - - await ctx.call('webacl.resource.deleteAllRights', { - resourceUri: containerUri - }); - - await ctx.call('webacl.resource.addRights', { - resourceUri: containerUri, - additionalRights: containerRights, - webId: 'system' - }); - - const removePublicRead = publicPermissions.read && (!containerRights.anon || !containerRights.anon.read); - const removeDefaultPublicRead = - !containerRights.default || !containerRights.default.anon || !containerRights.default.anon.read; - - ctx.emit( - 'webacl.resource.updated', - { - uri: containerUri, - isContainer: true, - removePublicRead, - removeDefaultPublicRead, - dataset: ctx.meta.dataset - }, - { meta: { webId: null, dataset: null } } - ); - } - } - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts new file mode 100644 index 000000000..0f49c7c64 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -0,0 +1,62 @@ +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + async handler(ctx) { + const { webId } = ctx.params; + + const containers = await ctx.call('ldp.registry.list'); + + // @ts-expect-error TS(2339): Property 'permissions' does not exist on type 'unk... Remove this comment to see the full error message + for (const { permissions, podsContainer, path } of Object.values(containers)) { + if (permissions && !podsContainer) { + const baseUrl = this.settings.podProvider + ? await ctx.call('solid-storage.getUrl', { webId }) + : this.settings.baseUrl; + + const containerUri = urlJoin(baseUrl, path); + + const containerRights = + typeof permissions === 'function' + ? permissions(this.settings.podProvider ? webId : 'system', ctx) + : permissions; + + this.logger.info(`Refreshing rights for container ${containerUri}...`); + + const publicPermissions = await ctx.call('webacl.resource.hasRights', { + resourceUri: containerUri, + rights: { read: true }, + webId: 'anon' + }); + + await ctx.call('webacl.resource.deleteAllRights', { + resourceUri: containerUri + }); + + await ctx.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: containerRights, + webId: 'system' + }); + + const removePublicRead = publicPermissions.read && (!containerRights.anon || !containerRights.anon.read); + const removeDefaultPublicRead = + !containerRights.default || !containerRights.default.anon || !containerRights.default.anon.read; + + ctx.emit( + 'webacl.resource.updated', + { + uri: containerUri, + isContainer: true, + removePublicRead, + removeDefaultPublicRead, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + dataset: ctx.meta.dataset + }, + { meta: { webId: null, dataset: null } } + ); + } + } + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.js b/src/middleware/packages/webacl/services/resource/actions/removeRights.js deleted file mode 100644 index 70d244440..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.js +++ /dev/null @@ -1,70 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } = require('../../../utils'); - -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string', optional: false }, - webId: { type: 'string', optional: true }, - /** In nested json format (e.g. `{anon: {read: true}}`) */ - rights: { type: 'object', optional: false } - }, - async handler(ctx) { - let { resourceUri, rights } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); - - const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - - await ctx.call('permissions.check', { - uri: resourceUri, - type: isContainer ? 'container' : 'resource', - mode: 'acl:Control', - webId - }); - - let processedRights = processRights(rights, `${aclUri}#`); - if (isContainer && rights.default) - processedRights = processedRights.concat(processRights(rights.default, `${aclUri}#Default`)); - - await ctx.call('triplestore.update', { - query: ` - PREFIX acl: - DELETE DATA { - GRAPH <${this.settings.graphName}> { - ${processedRights.map(right => `<${right.auth}> <${right.p}> <${right.o}> .`).join('\n')} - } - } - `, - webId: 'system' - }); - - const defaultRightsUpdated = isContainer && processedRights.some(triple => triple.auth.includes('#Default')); - const removePublicRead = processedRights.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - const removeDefaultPublicRead = - isContainer && - processedRights.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - - ctx.emit( - 'webacl.resource.updated', - { - uri: resourceUri, - webId, - dataset: ctx.meta.dataset, - isContainer, - defaultRightsUpdated, - removePublicRead, - removeDefaultPublicRead - }, - { meta: { webId: null, dataset: null } } - ); - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts new file mode 100644 index 000000000..e01f569b6 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -0,0 +1,76 @@ +import { defineAction } from 'moleculer'; +import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const action = defineAction({ + visibility: 'public', + params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message + resourceUri: { type: 'string', optional: false }, + webId: { type: 'string', optional: true }, + /** In nested json format (e.g. `{anon: {read: true}}`) */ + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: false; }' is not... Remove this comment to see the full error message + rights: { type: 'object', optional: false } + }, + async handler(ctx) { + let { resourceUri, rights } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); + + const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); + + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); + + let processedRights = processRights(rights, `${aclUri}#`); + if (isContainer && rights.default) + processedRights = processedRights.concat(processRights(rights.default, `${aclUri}#Default`)); + + await ctx.call('triplestore.update', { + query: ` + PREFIX acl: + DELETE DATA { + GRAPH <${this.settings.graphName}> { + ${processedRights.map(right => `<${right.auth}> <${right.p}> <${right.o}> .`).join('\n')} + } + } + `, + webId: 'system' + }); + + const defaultRightsUpdated = isContainer && processedRights.some(triple => triple.auth.includes('#Default')); + const removePublicRead = processedRights.some( + triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const removeDefaultPublicRead = + isContainer && + processedRights.some( + triple => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + + ctx.emit( + 'webacl.resource.updated', + { + uri: resourceUri, + webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + dataset: ctx.meta.dataset, + isContainer, + defaultRightsUpdated, + removePublicRead, + removeDefaultPublicRead + }, + { meta: { webId: null, dataset: null } } + ); + } +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.js b/src/middleware/packages/webacl/services/resource/actions/setRights.js deleted file mode 100644 index ca8304229..000000000 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.js +++ /dev/null @@ -1,152 +0,0 @@ -const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const urlJoin = require('url-join'); -const { - getAclUriFromResourceUri, - convertBodyToTriples, - filterTriplesForResource, - FULL_AGENTCLASS_URI, - FULL_FOAF_AGENT -} = require('../../../utils'); - -module.exports = { - api: async function api(ctx) { - const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; - - if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) - throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - - const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); - if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); - - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; - - await ctx.call('webacl.resource.setRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - newRights - }); - - ctx.meta.$statusCode = 204; - }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - webId: { type: 'string', optional: true }, - // newRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } - newRights: { type: 'array', optional: false, min: 1 } - // minimum is one right : We cannot leave a resource without rights. - }, - async handler(ctx) { - let { webId, newRights, resourceUri } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; - - const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - - await ctx.call('permissions.check', { - uri: resourceUri, - type: isContainer ? 'container' : 'resource', - mode: 'acl:Control', - webId - }); - - // filter out all the newRights that are not for the resource - const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); - newRights = newRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); - - if (newRights.length === 0) - throw new MoleculerError('The rights cannot be changed because they are incorrect', 400, 'BAD_REQUEST'); - - const currentPerms = await this.getExistingPerms( - ctx, - resourceUri, - this.settings.baseUrl, - this.settings.graphName, - isContainer - ); - - // find the difference between newRights and currentPerms. add only what is not existent yet. and remove those that are not needed anymore - const differenceAdd = newRights.filter( - x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) - ); - const differenceDelete = currentPerms.filter( - x => !newRights.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) - ); - - if (differenceAdd.length === 0 && differenceDelete.length === 0) return; - - // compile a list of Authorization already present. because if some of them don't exist, we need to create them - const currentAuths = this.compileAuthorizationNodesMap(currentPerms); - - let addRequest = ''; - for (const add of differenceAdd) { - if (!currentAuths[add.auth]) { - addRequest += this.generateNewAuthNode(add.auth); - currentAuths[add.auth] = 1; - } else { - currentAuths[add.auth] += 1; - } - addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; - } - - let deleteRequest = ''; - for (const del of differenceDelete) { - deleteRequest += `<${del.auth}> <${del.p}> <${del.o}>.\n`; - currentAuths[del.auth] -= 1; - } - - for (const [auth, count] of Object.entries(currentAuths)) { - if (count < 1) { - deleteRequest += this.generateNewAuthNode(auth); - } - } - - // we do the 2 calls in one, so it is in the same transaction, and will rollback in case of failure. - await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }; DELETE DATA { GRAPH <${this.settings.graphName}> { ${deleteRequest} } }`, - webId: 'system' - }); - - const defaultRightsUpdated = - isContainer && - (differenceAdd.some(triple => triple.auth.includes('#Default')) || - differenceDelete.some(triple => triple.auth.includes('#Default'))); - - const addPublicRead = differenceAdd.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - const removePublicRead = differenceDelete.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - const addDefaultPublicRead = - isContainer && - differenceAdd.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - const removeDefaultPublicRead = - isContainer && - differenceDelete.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - - const returnValues = { - uri: resourceUri, - webId, - dataset: ctx.meta.dataset, - created: false, - isContainer, - defaultRightsUpdated, - addPublicRead, - removePublicRead, - addDefaultPublicRead, - removeDefaultPublicRead - }; - ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); - return returnValues; - } - } -}; diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts new file mode 100644 index 000000000..9502f37d5 --- /dev/null +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -0,0 +1,161 @@ +import { MIME_TYPES } from '@semapps/mime-types'; +import urlJoin from 'url-join'; + +import { defineAction } from 'moleculer'; +import { + getAclUriFromResourceUri, + convertBodyToTriples, + filterTriplesForResource, + FULL_AGENTCLASS_URI, + FULL_FOAF_AGENT +} from '../../../utils.ts'; + +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; + +export const api = async function api(this: any, ctx: any) { + const contentType = ctx.meta.headers['content-type']; + let { slugParts } = ctx.params; + + if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) + throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); + + const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + // @ts-expect-error TS(18046): 'newRights' is of type 'unknown'. + if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); + + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; + + await ctx.call('webacl.resource.setRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + newRights + }); + + ctx.meta.$statusCode = 204; +}; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + webId: { type: 'string', optional: true }, + // newRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: false; min: numbe... Remove this comment to see the full error message + newRights: { type: 'array', optional: false, min: 1 } + // minimum is one right : We cannot leave a resource without rights. + }, + async handler(ctx) { + let { webId, newRights, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + webId = webId || ctx.meta.webId || 'anon'; + + const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); + + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); + + // filter out all the newRights that are not for the resource + const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); + newRights = newRights.filter((a: any) => filterTriplesForResource(a, aclUri, isContainer)); + + if (newRights.length === 0) + throw new MoleculerError('The rights cannot be changed because they are incorrect', 400, 'BAD_REQUEST'); + + const currentPerms = await this.getExistingPerms( + ctx, + resourceUri, + this.settings.baseUrl, + this.settings.graphName, + isContainer + ); + + // find the difference between newRights and currentPerms. add only what is not existent yet. and remove those that are not needed anymore + const differenceAdd = newRights.filter( + (x: any) => !currentPerms.some((y: any) => x.auth === y.auth && x.o === y.o && x.p === y.p) + ); + const differenceDelete = currentPerms.filter( + (x: any) => !newRights.some((y: any) => x.auth === y.auth && x.o === y.o && x.p === y.p) + ); + + if (differenceAdd.length === 0 && differenceDelete.length === 0) return; + + // compile a list of Authorization already present. because if some of them don't exist, we need to create them + const currentAuths = this.compileAuthorizationNodesMap(currentPerms); + + let addRequest = ''; + for (const add of differenceAdd) { + if (!currentAuths[add.auth]) { + addRequest += this.generateNewAuthNode(add.auth); + currentAuths[add.auth] = 1; + } else { + currentAuths[add.auth] += 1; + } + addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; + } + + let deleteRequest = ''; + for (const del of differenceDelete) { + deleteRequest += `<${del.auth}> <${del.p}> <${del.o}>.\n`; + currentAuths[del.auth] -= 1; + } + + for (const [auth, count] of Object.entries(currentAuths)) { + // @ts-expect-error TS(18046): 'count' is of type 'unknown'. + if (count < 1) { + deleteRequest += this.generateNewAuthNode(auth); + } + } + + // we do the 2 calls in one, so it is in the same transaction, and will rollback in case of failure. + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }; DELETE DATA { GRAPH <${this.settings.graphName}> { ${deleteRequest} } }`, + webId: 'system' + }); + + const defaultRightsUpdated = + isContainer && + (differenceAdd.some((triple: any) => triple.auth.includes('#Default')) || + differenceDelete.some((triple: any) => triple.auth.includes('#Default'))); + + const addPublicRead = differenceAdd.some( + (triple: any) => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const removePublicRead = differenceDelete.some( + (triple: any) => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const addDefaultPublicRead = + isContainer && + differenceAdd.some( + (triple: any) => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const removeDefaultPublicRead = + isContainer && + differenceDelete.some( + (triple: any) => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + + const returnValues = { + uri: resourceUri, + webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + dataset: ctx.meta.dataset, + created: false, + isContainer, + defaultRightsUpdated, + addPublicRead, + removePublicRead, + addDefaultPublicRead, + removeDefaultPublicRead + }; + ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); + return returnValues; + } +}); diff --git a/src/middleware/packages/webacl/services/resource/index.js b/src/middleware/packages/webacl/services/resource/index.ts similarity index 65% rename from src/middleware/packages/webacl/services/resource/index.js rename to src/middleware/packages/webacl/services/resource/index.ts index 84b373712..2a9d3346d 100644 --- a/src/middleware/packages/webacl/services/resource/index.js +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -1,18 +1,19 @@ -const urlJoin = require('url-join'); -const { MoleculerError } = require('moleculer').Errors; -const addRights = require('./actions/addRights'); -const awaitReadRight = require('./actions/awaitReadRight'); -const deleteAllRights = require('./actions/deleteAllRights'); -const deleteAllUserRights = require('./actions/deleteAllUserRights'); -const getLink = require('./actions/getLink'); -const getRights = require('./actions/getRights'); -const getUsersWithReadRights = require('./actions/getUsersWithReadRights'); -const hasRights = require('./actions/hasRights'); -const isPublic = require('./actions/isPublic'); -const refreshContainersRights = require('./actions/refreshContainersRights'); -const removeRights = require('./actions/removeRights'); -const setRights = require('./actions/setRights'); -const { +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction, Errors } from 'moleculer'; +import * as addRights from './actions/addRights.ts'; +import * as awaitReadRight from './actions/awaitReadRight.ts'; +import * as deleteAllRights from './actions/deleteAllRights.ts'; +import * as deleteAllUserRights from './actions/deleteAllUserRights.ts'; +import * as getLink from './actions/getLink.ts'; +import * as getRights from './actions/getRights.ts'; +import * as getUsersWithReadRights from './actions/getUsersWithReadRights.ts'; +import * as hasRights from './actions/hasRights.ts'; +import * as isPublic from './actions/isPublic.ts'; +import * as refreshContainersRights from './actions/refreshContainersRights.ts'; +import * as removeRights from './actions/removeRights.ts'; +import * as setRights from './actions/setRights.ts'; + +import { getAuthorizationNode, getAclUriFromResourceUri, aclGroupExists, @@ -23,9 +24,11 @@ const { FULL_TYPE_URI, ACL_NS, getDatasetFromUri -} = require('../../utils'); +} from '../../utils.ts'; + +const { MoleculerError } = Errors; -const filterAclsOnlyAgent = acl => agentPredicates.includes(acl.p.value); +const filterAclsOnlyAgent = (acl: any) => agentPredicates.includes(acl.p.value); /** * Server for handling webacl resource and container rights. @@ -37,8 +40,8 @@ const filterAclsOnlyAgent = acl => agentPredicates.includes(acl.p.value); * - The nested json format as used in "additionalRights" (https://semapps.org/docs/middleware/webacl/resource#addrights) * - organized by user, group, anon, anyUser. See the documentation for the details. */ -module.exports = { - name: 'webacl.resource', +const WebaclResourceSchema = { + name: 'webacl.resource' as const, settings: { baseUrl: null, graphName: null, @@ -51,13 +54,20 @@ module.exports = { }, actions: { addRights: addRights.action, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message awaitReadRight: awaitReadRight.action, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message deleteAllRights: deleteAllRights.action, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ webId: { type: "string"; opti... Remove this comment to see the full error message deleteAllUserRights: deleteAllUserRights.action, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; option... Remove this comment to see the full error message getLink: getLink.action, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message getRights: getRights.action, hasRights: hasRights.action, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message isPublic: isPublic.action, + // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message getUsersWithReadRights: getUsersWithReadRights.action, refreshContainersRights: refreshContainersRights.action, removeRights: removeRights.action, @@ -71,6 +81,7 @@ module.exports = { hooks: { before: { '*'(ctx) { + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message if (this.settings.podProvider && !ctx.meta.dataset && ctx.params.resourceUri) { ctx.meta.dataset = getDatasetFromUri(ctx.params.resourceUri); } @@ -106,9 +117,13 @@ module.exports = { const document = []; + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName))); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName))); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName))); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName))); if (isContainer) { @@ -127,6 +142,7 @@ module.exports = { compileAuthorizationNodesMap(nodes) { const result = {}; for (const node of nodes) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message result[node.auth] = result[node.auth] ? result[node.auth] + 1 : 1; } return result; @@ -142,4 +158,14 @@ module.exports = { return cmd; } } -}; +} satisfies ServiceSchema; + +export default WebaclResourceSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclResourceSchema.name]: typeof WebaclResourceSchema; + } + } +} diff --git a/src/middleware/packages/webacl/tsconfig.json b/src/middleware/packages/webacl/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/webacl/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/webacl/utils.js b/src/middleware/packages/webacl/utils.ts similarity index 79% rename from src/middleware/packages/webacl/utils.js rename to src/middleware/packages/webacl/utils.ts index aee5b4efd..e99e9d3a3 100644 --- a/src/middleware/packages/webacl/utils.js +++ b/src/middleware/packages/webacl/utils.ts @@ -1,26 +1,31 @@ -const { arrayOf } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { Parser } = require('n3'); -const streamifyString = require('streamify-string'); -const rdfParser = require('rdf-parse').default; +import { arrayOf } from '@semapps/ldp'; +import { MIME_TYPES } from '@semapps/mime-types'; +import urlJoin from 'url-join'; +import { Parser } from 'n3'; +import streamifyString from 'streamify-string'; +import rdfparseModule from 'rdf-parse'; -const getSlugFromUri = str => str.match(new RegExp(`.*/(.*)`))[1]; +import { Errors } from 'moleculer'; -const hasType = (resource, type) => { +const { MoleculerError } = Errors; + +// @ts-expect-error TS(2339): Property 'default' does not exist on type 'RdfPars... Remove this comment to see the full error message +const rdfParser = rdfparseModule.default; +const getSlugFromUri = (str: any) => str.match(new RegExp(`.*/(.*)`))[1]; + +const hasType = (resource: any, type: any) => { const resourceType = resource.type || resource['@type']; return Array.isArray(resourceType) ? resourceType.includes(type) : resourceType === type; }; // Transforms "http://localhost:3000/dataset/data" to "dataset" -const getDatasetFromUri = uri => { +const getDatasetFromUri = (uri: any) => { const path = new URL(uri).pathname; const parts = path.split('/'); if (parts.length > 1) return parts[1]; }; -const findParentContainers = async (ctx, resourceUri) => { +const findParentContainers = async (ctx: any, resourceUri: any) => { return await ctx.call('triplestore.query', { query: ` PREFIX ldp: @@ -31,11 +36,11 @@ const findParentContainers = async (ctx, resourceUri) => { }); }; -const USER_GROUPS_QUERY = (member, ACLGraphName) => { +const USER_GROUPS_QUERY = (member: any, ACLGraphName: any) => { return `SELECT ?group WHERE { - { ?group vcard:hasMember <${member}> . } - UNION { GRAPH <${ACLGraphName}> { ?group vcard:hasMember <${member}> . } } + { ?group vcard:hasMember <${member}> . } + UNION { GRAPH <${ACLGraphName}> { ?group vcard:hasMember <${member}> . } } UNION { ?group ?anyLink <${member}> . @@ -51,7 +56,7 @@ const PREFIXES = 'PREFIX ldp: \n' + 'PREFIX rdfs: \n'; -const getUserGroups = async (ctx, user, graphName) => { +const getUserGroups = async (ctx: any, user: any, graphName: any) => { const query = PREFIXES + USER_GROUPS_QUERY(user, graphName); const groups = await ctx.call('triplestore.query', { @@ -59,10 +64,15 @@ const getUserGroups = async (ctx, user, graphName) => { webId: 'system' }); - return groups.map(g => g.group.value); + return groups.map((g: any) => g.group.value); }; -const AUTHORIZATION_NODE_QUERY = (mode, accesToOrDefault, resource, graphName) => `SELECT ?auth ?p ?o +const AUTHORIZATION_NODE_QUERY = ( + mode: any, + accesToOrDefault: any, + resource: any, + graphName: any +) => `SELECT ?auth ?p ?o WHERE { GRAPH <${graphName}> { ?auth acl:${accesToOrDefault} <${resource}>; @@ -71,7 +81,14 @@ WHERE { GRAPH <${graphName}> { ?p ?o. } }`; -const getAuthorizationNode = async (ctx, resourceUri, resourceAclUri, mode, graphName, searchForDefault) => { +const getAuthorizationNode = async ( + ctx: any, + resourceUri: any, + resourceAclUri: any, + mode: any, + graphName: any, + searchForDefault: any +) => { const query = `PREFIX rdf: \nPREFIX acl: \n${AUTHORIZATION_NODE_QUERY( mode, searchForDefault ? 'default' : 'accessTo', @@ -84,7 +101,7 @@ const getAuthorizationNode = async (ctx, resourceUri, resourceAclUri, mode, grap webId: 'system' }); - return auths.map(a => { + return auths.map((a: any) => { a.auth.value = `${resourceAclUri}#${searchForDefault ? 'Default' : ''}${mode}`; return a; }); @@ -101,7 +118,7 @@ const FULL_AGENT_GROUP = 'http://www.w3.org/ns/auth/acl#agentGroup'; const FULL_FOAF_AGENT = 'http://xmlns.com/foaf/0.1/Agent'; const FULL_ACL_ANYAGENT = 'http://www.w3.org/ns/auth/acl#AuthenticatedAgent'; -const filterAgentAcl = (acl, agentSearchParam, forOutput) => { +const filterAgentAcl = (acl: any, agentSearchParam: any, forOutput: any) => { if (forOutput) { return ( acl.p.value === FULL_TYPE_URI || @@ -129,7 +146,7 @@ const filterAgentAcl = (acl, agentSearchParam, forOutput) => { return false; }; -function getUserAgentSearchParam(user, groups) { +function getUserAgentSearchParam(user: any, groups: any) { if (user === 'anon') { return { foafAgent: true @@ -148,8 +165,9 @@ function getUserAgentSearchParam(user, groups) { }; } -const checkAgentPresent = (acls, agentSearchParam) => { +const checkAgentPresent = (acls: any, agentSearchParam: any) => { for (const acl of acls) { + // @ts-expect-error TS(2554): Expected 3 arguments, but got 2. const res = filterAgentAcl(acl, agentSearchParam); if (res) return true; } @@ -158,7 +176,7 @@ const checkAgentPresent = (acls, agentSearchParam) => { const agentPredicates = [FULL_AGENTCLASS_URI, FULL_AGENT_URI, FULL_AGENT_GROUP]; -async function aclGroupExists(groupUri, ctx, graphName) { +async function aclGroupExists(groupUri: any, ctx: any, graphName: any) { return await ctx.call('triplestore.query', { query: ` PREFIX vcard: @@ -171,13 +189,13 @@ async function aclGroupExists(groupUri, ctx, graphName) { }); } -function getAclUriFromResourceUri(baseUrl, resourceUri) { +function getAclUriFromResourceUri(baseUrl: any, resourceUri: any) { return resourceUri.startsWith(baseUrl) ? urlJoin(baseUrl, resourceUri.replace(baseUrl, baseUrl.endsWith('/') ? '_acl/' : '_acl')) : resourceUri; } -function filterAndConvertTriple(quad, property) { +function filterAndConvertTriple(quad: any, property: any) { if (agentPredicates.includes(quad.predicate[property])) { return { auth: quad.subject[property], @@ -189,10 +207,9 @@ function filterAndConvertTriple(quad, property) { } const AuthorizationSuffixes = ['Read', 'Write', 'Append', 'Control']; - const AuthorizationDefaultSuffixes = ['DefaultRead', 'DefaultWrite', 'DefaultAppend', 'DefaultControl']; -function filterTriplesForResource(triple, resourceAclUri, allowDefault) { +function filterTriplesForResource(triple: any, resourceAclUri: any, allowDefault: any) { const split = triple.auth.split('#'); if (split[0] !== resourceAclUri) return false; if (AuthorizationSuffixes.includes(split[1])) return true; @@ -200,11 +217,11 @@ function filterTriplesForResource(triple, resourceAclUri, allowDefault) { return false; } -async function convertBodyToTriples(body, contentType) { +async function convertBodyToTriples(body: any, contentType: any) { if (contentType === MIME_TYPES.TURTLE) { return new Promise((resolve, reject) => { const parser = new Parser({ format: 'turtle' }); - const res = []; + const res: any = []; parser.parse(body, (error, quad, prefixes) => { if (error) reject(error); else if (quad) { @@ -217,16 +234,16 @@ async function convertBodyToTriples(body, contentType) { // TODO use jsonld.toQuads actions ? return new Promise((resolve, reject) => { const textStream = streamifyString(body); - const res = []; + const res: any = []; rdfParser .parse(textStream, { contentType: 'application/ld+json' }) - .on('data', quad => { + .on('data', (quad: any) => { const q = filterAndConvertTriple(quad, 'value'); if (q) res.push(q); }) - .on('error', error => reject(error)) + .on('error', (error: any) => reject(error)) .on('end', () => { resolve(res); }); @@ -236,7 +253,7 @@ async function convertBodyToTriples(body, contentType) { // TODO: if one day you code a delete Profile action (probably in webid service) // then you msut call the below method after deleting the user (and pass false to isGroup) -async function removeAgentGroupOrAgentFromAuthorizations(uri, isGroup, graphName, ctx) { +async function removeAgentGroupOrAgentFromAuthorizations(uri: any, isGroup: any, graphName: any, ctx: any) { // removing the acl:agentGroup relation to some Authorizations await ctx.call('triplestore.update', { query: `PREFIX acl: @@ -258,7 +275,7 @@ async function removeAgentGroupOrAgentFromAuthorizations(uri, isGroup, graphName }); } -const processRights = (rights, aclUri) => { +const processRights = (rights: any, aclUri: any) => { const list = []; if (rights.anon) { if (rights.anon.read) list.push({ auth: `${aclUri}Read`, p: FULL_AGENTCLASS_URI, o: FULL_FOAF_AGENT }); @@ -291,7 +308,7 @@ const processRights = (rights, aclUri) => { return list; }; -module.exports = { +export { getSlugFromUri, hasType, getDatasetFromUri, diff --git a/src/middleware/packages/webfinger/index.js b/src/middleware/packages/webfinger/index.js deleted file mode 100644 index 2e4557b03..000000000 --- a/src/middleware/packages/webfinger/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - WebfingerService: require('./service') -}; diff --git a/src/middleware/packages/webfinger/index.ts b/src/middleware/packages/webfinger/index.ts new file mode 100644 index 000000000..c751dbb3d --- /dev/null +++ b/src/middleware/packages/webfinger/index.ts @@ -0,0 +1,3 @@ +import WebfingerService from './service.ts'; + +export { WebfingerService }; diff --git a/src/middleware/packages/webfinger/package.json b/src/middleware/packages/webfinger/package.json index 0dda12ce0..1b9a447b9 100644 --- a/src/middleware/packages/webfinger/package.json +++ b/src/middleware/packages/webfinger/package.json @@ -9,9 +9,15 @@ "node-fetch": "^2.6.6" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/webfinger/service.js b/src/middleware/packages/webfinger/service.js deleted file mode 100644 index 84a2756ac..000000000 --- a/src/middleware/packages/webfinger/service.js +++ /dev/null @@ -1,75 +0,0 @@ -const fetch = require('node-fetch'); - -const WebfingerService = { - name: 'webfinger', - settings: { - baseUrl: null, - domainName: null // If not set, will be extracted from baseUrl - }, - dependencies: ['api', 'auth.account'], - async started() { - if (!this.settings.domainName) { - if (!this.settings.baseUrl) throw new Error('If no domainName is defined, the baseUrl must be set'); - this.settings.domainName = new URL(this.settings.baseUrl).host; - } - - await this.broker.call('api.addRoute', { - route: { - path: '/.well-known', // .well-known routes must use the root path - name: 'webfinger-endpoint', - bodyParsers: { json: true }, - aliases: { - 'GET /webfinger': 'webfinger.get' - } - } - }); - }, - actions: { - async get(ctx) { - const { resource } = ctx.params; - - const usernameMatchRegex = new RegExp(`^acct:([\\w-_.]*)@${this.settings.domainName}$`); - const matches = resource?.match(usernameMatchRegex); - - if (matches) { - const username = matches[1]; - const accounts = await ctx.call('auth.account.find', { query: { username } }); - if (accounts.length > 0) { - return { - subject: resource, - aliases: [accounts[0].webId], - links: [ - { - rel: 'self', - type: 'application/activity+json', - href: accounts[0].webId - } - ] - }; - } - } - - ctx.meta.$statusCode = 404; - }, - // TODO add cache if response.ok - async getRemoteUri(ctx) { - const { account } = ctx.params; - const splitAccount = account.split('@'); - const domainName = splitAccount.pop(); - const userName = splitAccount.pop(); - const webfingerUrl = `http://${domainName}/.well-known/webfinger?resource=acct:${userName}@${domainName}`; - - const response = await fetch(webfingerUrl); - - if (response.ok) { - const json = await response.json(); - const link = json.links.find(l => l.type === 'application/activity+json'); - if (link) { - return link.href; - } - } - } - } -}; - -module.exports = WebfingerService; diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts new file mode 100644 index 000000000..54a3df0cc --- /dev/null +++ b/src/middleware/packages/webfinger/service.ts @@ -0,0 +1,90 @@ +import fetch from 'node-fetch'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const WebfingerService = { + name: 'webfinger' as const, + settings: { + baseUrl: null, + domainName: null // If not set, will be extracted from baseUrl + }, + dependencies: ['api', 'auth.account'], + async started() { + if (!this.settings.domainName) { + if (!this.settings.baseUrl) throw new Error('If no domainName is defined, the baseUrl must be set'); + this.settings.domainName = new URL(this.settings.baseUrl).host; + } + + await this.broker.call('api.addRoute', { + route: { + path: '/.well-known', // .well-known routes must use the root path + name: 'webfinger-endpoint', + bodyParsers: { json: true }, + aliases: { + 'GET /webfinger': 'webfinger.get' + } + } + }); + }, + actions: { + get: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; + + const usernameMatchRegex = new RegExp(`^acct:([\\w-_.]*)@${this.settings.domainName}$`); + const matches = resource?.match(usernameMatchRegex); + + if (matches) { + const username = matches[1]; + const accounts = await ctx.call('auth.account.find', { query: { username } }); + if (accounts.length > 0) { + return { + subject: resource, + aliases: [accounts[0].webId], + links: [ + { + rel: 'self', + type: 'application/activity+json', + href: accounts[0].webId + } + ] + }; + } + } + + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message + ctx.meta.$statusCode = 404; + } + }), + + getRemoteUri: defineAction({ + // TODO add cache if response.ok + async handler(ctx) { + const { account } = ctx.params; + const splitAccount = account.split('@'); + const domainName = splitAccount.pop(); + const userName = splitAccount.pop(); + const webfingerUrl = `http://${domainName}/.well-known/webfinger?resource=acct:${userName}@${domainName}`; + + const response = await fetch(webfingerUrl); + + if (response.ok) { + const json = await response.json(); + const link = json.links.find((l: any) => l.type === 'application/activity+json'); + if (link) { + return link.href; + } + } + } + }) + } +} satisfies ServiceSchema; + +export default WebfingerService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebfingerService.name]: typeof WebfingerService; + } + } +} diff --git a/src/middleware/packages/webfinger/tsconfig.json b/src/middleware/packages/webfinger/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/webfinger/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/webhooks/index.js b/src/middleware/packages/webhooks/index.js deleted file mode 100644 index 902e047ff..000000000 --- a/src/middleware/packages/webhooks/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - WebhooksService: require('./service') -}; diff --git a/src/middleware/packages/webhooks/index.ts b/src/middleware/packages/webhooks/index.ts new file mode 100644 index 000000000..25b9778d8 --- /dev/null +++ b/src/middleware/packages/webhooks/index.ts @@ -0,0 +1,3 @@ +import WebhooksService from './service.ts'; + +export { WebhooksService }; diff --git a/src/middleware/packages/webhooks/package.json b/src/middleware/packages/webhooks/package.json index 94873fce8..9dcc7dd22 100644 --- a/src/middleware/packages/webhooks/package.json +++ b/src/middleware/packages/webhooks/package.json @@ -7,15 +7,20 @@ "dependencies": { "@semapps/ldp": "1.0.10", "@semapps/triplestore": "1.0.10", - "moleculer": "^0.14.18", "moleculer-db": "^0.8.15", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/webhooks/service.js b/src/middleware/packages/webhooks/service.js deleted file mode 100644 index 8c2a19f78..000000000 --- a/src/middleware/packages/webhooks/service.js +++ /dev/null @@ -1,107 +0,0 @@ -const path = require('path'); -const DbService = require('moleculer-db'); -const { MoleculerError, ServiceSchemaError } = require('moleculer').Errors; -const { TripleStoreAdapter } = require('@semapps/triplestore'); - -const WebhooksService = { - name: 'webhooks', - mixins: [DbService], - adapter: new TripleStoreAdapter(), - settings: { - containerUri: null, - allowedActions: [], - context: { '@vocab': 'http://semapps.org/ns/core#' } - }, - dependencies: ['api', 'ldp'], - async started() { - this.settings.allowedActions.forEach(actionName => { - if (!this.actions[actionName]) { - throw new ServiceSchemaError(`Missing action "${actionName}" in service settings!`); - } - }); - const basePath = await this.broker.call('ldp.getBasePath'); - for (const route of await this.actions.getApiRoutes(basePath)) { - await this.broker.call('api.addRoute', { route }); - } - }, - actions: { - async process(ctx) { - const { hash, ...data } = ctx.params; - let webhook; - - try { - webhook = await this.actions.get({ id: hash }, { parentCtx: ctx }); - } catch (e) { - throw new MoleculerError('Webhook not found', 404, 'NOT_FOUND'); - } - - if (this.createJob) { - this.createJob('webhooks', webhook.action, { data, user: webhook.user }); - } else { - // If no queue service is defined, run webhook immediately - return await this.actions[webhook.action]({ data, user: webhook.user }, { parentCtx: ctx }); - } - }, - async generate(ctx) { - const userUri = ctx.meta.webId || ctx.params.userUri; - const { action } = ctx.params; - - if (!userUri || userUri === 'anon' || !action || !this.settings.allowedActions.includes(action)) { - throw new MoleculerError('Bad request', 400, 'BAD_REQUEST'); - } - - const webhook = await this.actions.create( - { - '@type': 'Webhook', - action, - user: userUri - }, - { parentCtx: ctx } - ); - - return webhook['@id']; - }, - getApiRoutes(basePath) { - return [ - // Unsecured routes - { - path: path.join(basePath, '/webhooks'), - name: 'webhooks-process', - bodyParsers: { json: true }, - authorization: false, - authentication: true, - aliases: { - 'POST /:hash': 'webhooks.process' - } - }, - // Secured routes - { - path: path.join(basePath, '/webhooks'), - name: 'webhooks-generate', - bodyParsers: { json: true }, - authorization: true, - authentication: false, - aliases: { - 'POST /': 'webhooks.generate' - } - } - ]; - } - }, - queues: { - webhooks: { - name: '*', - async process(job) { - const result = await this.actions[job.name](job.data); - - job.progress(100); - - return { - result - }; - } - } - } -}; - -module.exports = WebhooksService; diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts new file mode 100644 index 000000000..e0f627b74 --- /dev/null +++ b/src/middleware/packages/webhooks/service.ts @@ -0,0 +1,134 @@ +import path from 'path'; +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; + +import { Errors } from 'moleculer'; + +const { MoleculerError, ServiceSchemaError } = Errors; + +const WebhooksService = { + name: 'webhooks' as const, + mixins: [DbService], + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. + adapter: new TripleStoreAdapter(), + settings: { + containerUri: null, + allowedActions: [], + context: { '@vocab': 'http://semapps.org/ns/core#' } + }, + dependencies: ['api', 'ldp'], + async started() { + this.settings.allowedActions.forEach((actionName: any) => { + if (!this.actions[actionName]) { + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + throw new ServiceSchemaError(`Missing action "${actionName}" in service settings!`); + } + }); + const basePath = await this.broker.call('ldp.getBasePath'); + for (const route of await this.actions.getApiRoutes(basePath)) { + await this.broker.call('api.addRoute', { route }); + } + }, + actions: { + process: defineAction({ + async handler(ctx) { + const { hash, ...data } = ctx.params; + let webhook; + + try { + webhook = await this.actions.get({ id: hash }, { parentCtx: ctx }); + } catch (e) { + throw new MoleculerError('Webhook not found', 404, 'NOT_FOUND'); + } + + if (this.createJob) { + this.createJob('webhooks', webhook.action, { data, user: webhook.user }); + } else { + // If no queue service is defined, run webhook immediately + return await this.actions[webhook.action]({ data, user: webhook.user }, { parentCtx: ctx }); + } + } + }), + + generate: defineAction({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const userUri = ctx.meta.webId || ctx.params.userUri; + const { action } = ctx.params; + + if (!userUri || userUri === 'anon' || !action || !this.settings.allowedActions.includes(action)) { + throw new MoleculerError('Bad request', 400, 'BAD_REQUEST'); + } + + const webhook = await this.actions.create( + { + '@type': 'Webhook', + action, + user: userUri + }, + { parentCtx: ctx } + ); + + return webhook['@id']; + } + }), + + getApiRoutes: defineAction({ + handler(basePath) { + return [ + // Unsecured routes + { + // @ts-expect-error TS(2345): Argument of type 'Context=14" + "node": ">=22.10.0" + }, + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" } } diff --git a/src/middleware/packages/webid/service.js b/src/middleware/packages/webid/service.js deleted file mode 100644 index 9423ae393..000000000 --- a/src/middleware/packages/webid/service.js +++ /dev/null @@ -1,110 +0,0 @@ -const urlJoin = require('url-join'); -const { foaf, schema } = require('@semapps/ontologies'); -const { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } = require('@semapps/ldp'); - -/** @type {import('moleculer').ServiceSchema} */ -const WebIdService = { - name: 'webid', - mixins: [ControlledContainerMixin, DereferenceMixin], - settings: { - baseUrl: null, - podProvider: false, - // ControlledContainerMixin - path: '/foaf/person', - acceptedTypes: ['http://xmlns.com/foaf/0.1/Person'], - podsContainer: false, - // DereferenceMixin - dereferencePlan: [ - { - property: 'publicKey' - }, - { property: 'assertionMethod' } - ] - }, - dependencies: ['ldp.resource', 'ontologies'], - async created() { - if (!this.settings.baseUrl) throw new Error('The baseUrl setting is required for webId service.'); - }, - async started() { - await this.broker.call('ontologies.register', foaf); - await this.broker.call('ontologies.register', schema); - }, - actions: { - get(ctx) { - // Always get WebID as system and on the correct dataset, since they are public - return ctx.call( - 'ldp.resource.get', - { - ...ctx.params, - webId: 'system' - }, - { - meta: { - dataset: this.settings.podProvider ? getDatasetFromUri(ctx.params.resourceUri) : undefined - } - } - ); - }, - /** - * This should only be called after the user has been authenticated - */ - async createWebId(ctx) { - let { email, nick, name, familyName, homepage, ...rest } = ctx.params; - - if (!nick && email) { - nick = email.split('@')[0].toLowerCase(); - } - - let webId; - - const resource = { - '@type': 'foaf:Person', - 'foaf:nick': nick, - 'foaf:email': email, - 'foaf:name': name, - 'foaf:familyName': familyName, - 'foaf:homepage': homepage, - ...rest - }; - - if (this.settings.podProvider) { - // In Pod provider config, there is no LDP container for the webId, so we must create it directly - webId = urlJoin(this.settings.baseUrl, nick); - await this.actions.create( - { - resource: { - '@id': webId, - ...resource - }, - webId: 'system' - }, - { parentCtx: ctx } - ); - } else { - if (!this.settings.path) throw new Error('The path setting is required'); - webId = await this.actions.post( - { - resource, - slug: nick, - webId: 'system' - }, - { parentCtx: ctx } - ); - } - - const webIdData = await this.actions.get( - { - resourceUri: webId, - webId: 'system' - }, - { parentCtx: ctx } - ); - - ctx.emit('webid.created', webIdData, { meta: { webId: null, dataset: null } }); - - return webId; - } - } -}; - -module.exports = WebIdService; diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts new file mode 100644 index 000000000..39e727936 --- /dev/null +++ b/src/middleware/packages/webid/service.ts @@ -0,0 +1,124 @@ +import urlJoin from 'url-join'; +import { foaf, schema } from '@semapps/ontologies'; +import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; + +/** @type {import('moleculer').ServiceSchema} */ +const WebIdService = { + name: 'webid' as const, + mixins: [ControlledContainerMixin, DereferenceMixin], + settings: { + baseUrl: null, + podProvider: false, + // ControlledContainerMixin + path: '/foaf/person', + acceptedTypes: ['http://xmlns.com/foaf/0.1/Person'], + podsContainer: false, + // DereferenceMixin + dereferencePlan: [ + { + property: 'publicKey' + }, + { property: 'assertionMethod' } + ] + }, + dependencies: ['ldp.resource', 'ontologies'], + async created() { + if (!this.settings.baseUrl) throw new Error('The baseUrl setting is required for webId service.'); + }, + async started() { + await this.broker.call('ontologies.register', foaf); + await this.broker.call('ontologies.register', schema); + }, + actions: { + get: defineAction({ + handler(ctx) { + // Always get WebID as system and on the correct dataset, since they are public + return ctx.call( + 'ldp.resource.get', + { + ...ctx.params, + webId: 'system' + }, + { + meta: { + dataset: this.settings.podProvider ? getDatasetFromUri(ctx.params.resourceUri) : undefined + } + } + ); + } + }), + + createWebId: defineAction({ + /** + * This should only be called after the user has been authenticated + */ + async handler(ctx) { + let { email, nick, name, familyName, homepage, ...rest } = ctx.params; + + if (!nick && email) { + nick = email.split('@')[0].toLowerCase(); + } + + let webId; + + const resource = { + '@type': 'foaf:Person', + 'foaf:nick': nick, + 'foaf:email': email, + 'foaf:name': name, + 'foaf:familyName': familyName, + 'foaf:homepage': homepage, + ...rest + }; + + if (this.settings.podProvider) { + // In Pod provider config, there is no LDP container for the webId, so we must create it directly + webId = urlJoin(this.settings.baseUrl, nick); + await this.actions.create( + { + resource: { + '@id': webId, + ...resource + }, + webId: 'system' + }, + { parentCtx: ctx } + ); + } else { + if (!this.settings.path) throw new Error('The path setting is required'); + webId = await this.actions.post( + { + resource, + slug: nick, + webId: 'system' + }, + { parentCtx: ctx } + ); + } + + const webIdData = await this.actions.get( + { + resourceUri: webId, + webId: 'system' + }, + { parentCtx: ctx } + ); + + ctx.emit('webid.created', webIdData, { meta: { webId: null, dataset: null } }); + + return webId; + } + }) + } +} satisfies ServiceSchema; + +export default WebIdService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebIdService.name]: typeof WebIdService; + } + } +} diff --git a/src/middleware/packages/webid/tsconfig.json b/src/middleware/packages/webid/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/webid/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/tests/.nvmrc b/src/middleware/tests/.nvmrc new file mode 100644 index 000000000..fbdadee5c --- /dev/null +++ b/src/middleware/tests/.nvmrc @@ -0,0 +1 @@ +^24.0.0 diff --git a/src/middleware/tests/activitypub/collection-api.test.js b/src/middleware/tests/activitypub/collection-api.test.ts similarity index 88% rename from src/middleware/tests/activitypub/collection-api.test.js rename to src/middleware/tests/activitypub/collection-api.test.ts index 4c893da74..7ea499791 100644 --- a/src/middleware/tests/activitypub/collection-api.test.js +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -1,30 +1,32 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const { fetchServer } = require('../utils'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; +import * as CONFIG from '../config.ts'; jest.setTimeout(50000); - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('Collections API', () => { - const items = []; + const items: any = []; + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const collectionsContainersUri = urlJoin(CONFIG.HOME_URL, 'as/collection'); - let collectionUri; - let localContext; + let collectionUri: any; + let localContext: any; test('Create ressources', async () => { for (let i = 0; i < 10; i++) { items.push( await broker.call('ldp.container.post', { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message containerUri: urlJoin(CONFIG.HOME_URL, 'as/object'), resource: { '@context': 'https://www.w3.org/ns/activitystreams', @@ -131,7 +133,7 @@ describe('Collections API', () => { }), body: ` PREFIX as: - INSERT DATA { <${paginatedCollectionUri}> as:items ${items.map(item => `<${item}>`).join(', ')} . }; + INSERT DATA { <${paginatedCollectionUri}> as:items ${items.map((item: any) => `<${item}>`).join(', ')} . }; ` }); @@ -169,6 +171,7 @@ describe('Collections API', () => { type: 'CollectionPage', partOf: paginatedCollectionUri, prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[7])}`, + // @ts-expect-error TS(2304): Cannot find name 'expect'. items: expect.arrayContaining([items[8], items[9]]) } }); diff --git a/src/middleware/tests/activitypub/collection.test.js b/src/middleware/tests/activitypub/collection.test.ts similarity index 94% rename from src/middleware/tests/activitypub/collection.test.js rename to src/middleware/tests/activitypub/collection.test.ts index fd55c6895..285771637 100644 --- a/src/middleware/tests/activitypub/collection.test.js +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -1,10 +1,9 @@ -const urlJoin = require('url-join'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); +import urlJoin from 'url-join'; +import initialize from './initialize.ts'; +import * as CONFIG from '../config.ts'; jest.setTimeout(50000); - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -15,16 +14,17 @@ afterAll(async () => { }); describe('Collections', () => { - const items = []; - let collectionUri; - let orderedCollectionUri; - let cursorBasedCollectionUri; + const items: any = []; + let collectionUri: any; + let orderedCollectionUri: any; + let cursorBasedCollectionUri: any; beforeAll(async () => { // Create test items for (let i = 0; i < 10; i++) { items.push( await broker.call('ldp.container.post', { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message containerUri: urlJoin(CONFIG.HOME_URL, 'as/object'), resource: { '@context': 'https://www.w3.org/ns/activitystreams', @@ -157,6 +157,7 @@ describe('Collections', () => { summary: 'My non-ordered collection' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toBeUndefinedOrEmptyArray(); }); @@ -265,7 +266,7 @@ describe('Collections', () => { }); describe('Pagination', () => { - let paginatedCollectionUri; + let paginatedCollectionUri: any; beforeAll(async () => { // Create collection for pagination tests @@ -352,6 +353,7 @@ describe('Collections', () => { }); expect(collection.first).toBeUndefined(); expect(collection.last).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toBeUndefinedOrEmptyArray(); }); @@ -416,7 +418,7 @@ describe('Collections', () => { } // Check for duplicates - page.items.forEach(item => { + page.items.forEach((item: any) => { expect(seenItems.has(item)).toBeFalsy(); seenItems.add(item); }); @@ -458,6 +460,7 @@ describe('Collections', () => { describe('Error Handling', () => { test('Should return 404 when collection does not exist', async () => { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const nonExistentUri = urlJoin(CONFIG.HOME_URL, 'as/collection/non-existent'); await expect( broker.call('activitypub.collection.get', { @@ -467,6 +470,7 @@ describe('Collections', () => { }); test('Should return 404 when cursor not found in collection', async () => { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const invalidCursorUri = urlJoin(CONFIG.HOME_URL, 'as/object/non-existent'); await expect( broker.call('activitypub.collection.get', { diff --git a/src/middleware/tests/activitypub/follow.test.js b/src/middleware/tests/activitypub/follow.test.ts similarity index 85% rename from src/middleware/tests/activitypub/follow.test.js rename to src/middleware/tests/activitypub/follow.test.ts index 7b3c63562..d121a7311 100644 --- a/src/middleware/tests/activitypub/follow.test.js +++ b/src/middleware/tests/activitypub/follow.test.ts @@ -1,17 +1,16 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); +import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(50_000); - const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, posting to followers', mode => { - let broker; - const actors = []; - let alice; - let bob; - let followActivity; +describe.each(['single-server', 'multi-server'])('In mode %s, posting to followers', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let followActivity: any; beforeAll(async () => { if (mode === 'single-server') { @@ -28,7 +27,8 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -56,12 +56,14 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe to: alice.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { await expect( alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) ).resolves.toBeTruthy(); }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { const inboxMenu = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox, @@ -131,6 +133,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe to: [alice.id, `${bob.id}/followers`] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { await expect( alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) diff --git a/src/middleware/tests/activitypub/inbox.test.js b/src/middleware/tests/activitypub/inbox.test.ts similarity index 95% rename from src/middleware/tests/activitypub/inbox.test.js rename to src/middleware/tests/activitypub/inbox.test.ts index ec72bbeb9..3e0454242 100644 --- a/src/middleware/tests/activitypub/inbox.test.js +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -1,23 +1,23 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); +import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(50_000); - -let broker; -let broker2; +let broker: any; +let broker2: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); broker2 = broker; }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('Permissions are correctly set on inbox', () => { - let simon; - let sebastien; + let simon: any; + let sebastien: any; test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { diff --git a/src/middleware/tests/activitypub/initialize.js b/src/middleware/tests/activitypub/initialize.ts similarity index 63% rename from src/middleware/tests/activitypub/initialize.js rename to src/middleware/tests/activitypub/initialize.ts index 140abe2b6..1fce48daa 100644 --- a/src/middleware/tests/activitypub/initialize.js +++ b/src/middleware/tests/activitypub/initialize.ts @@ -1,14 +1,18 @@ -const fse = require('fs-extra'); -const path = require('path'); -const urlJoin = require('url-join'); -const { ServiceBroker } = require('moleculer'); -const { AuthLocalService } = require('@semapps/auth'); -const { CoreService } = require('@semapps/core'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } = require('@semapps/activitypub'); -const CONFIG = require('../config'); -const { clearDataset, clearQueue } = require('../utils'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message +import fse from 'fs-extra'; +import path from 'path'; +import urlJoin from 'url-join'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { AuthLocalService } from '@semapps/auth'; +import { CoreService } from '@semapps/core'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } from '@semapps/activitypub'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { clearDataset, clearQueue } from '../utils.ts'; +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const containers = [ { path: '/as/object', @@ -16,7 +20,7 @@ const containers = [ } ]; -const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0) => { +const initialize = async (port: any, mainDataset: any, accountsDataset: any, queueServiceDb = 0) => { const baseUrl = `http://localhost:${port}/`; const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; @@ -26,6 +30,7 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0 const broker = new ServiceBroker({ nodeID: `server${port}`, + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl })], logger: { type: 'Console', @@ -38,6 +43,7 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0 // Remove all actors keys await fse.emptyDir(path.resolve(__dirname, './actors')); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -66,6 +72,7 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0 } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { @@ -119,4 +126,4 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0 return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/activitypub/like.test.js b/src/middleware/tests/activitypub/like.test.ts similarity index 86% rename from src/middleware/tests/activitypub/like.test.js rename to src/middleware/tests/activitypub/like.test.ts index db599aa3a..2876e56d3 100644 --- a/src/middleware/tests/activitypub/like.test.js +++ b/src/middleware/tests/activitypub/like.test.ts @@ -1,17 +1,16 @@ -const waitForExpect = require('wait-for-expect'); -const { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const initialize = require('./initialize'); +import waitForExpect from 'wait-for-expect'; +import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', mode => { - let broker; - const actors = []; - let alice; - let bob; - let aliceMessageUri; +describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let aliceMessageUri: any; beforeAll(async () => { if (mode === 'single-server') { @@ -28,7 +27,8 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -117,6 +117,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m // Ensure the note has been removed from Bob's /liked collection await waitForExpect(async () => { const liked = await bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(liked.items).toHaveLength(0); }); }); diff --git a/src/middleware/tests/activitypub/message.test.js b/src/middleware/tests/activitypub/message.test.ts similarity index 86% rename from src/middleware/tests/activitypub/message.test.js rename to src/middleware/tests/activitypub/message.test.ts index 8f5af3e50..e3b37a20a 100644 --- a/src/middleware/tests/activitypub/message.test.js +++ b/src/middleware/tests/activitypub/message.test.ts @@ -1,18 +1,17 @@ -const waitForExpect = require('wait-for-expect'); -const { OBJECT_TYPES, ACTIVITY_TYPES } = require('@semapps/activitypub'); -const initialize = require('./initialize'); +import waitForExpect from 'wait-for-expect'; +import { OBJECT_TYPES, ACTIVITY_TYPES } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(70000); - const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages', mode => { - let broker; - const actors = []; - let alice; - let bob; - let aliceMessageUri; - let bobMessageUri; +describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let aliceMessageUri: any; + let bobMessageUri: any; beforeAll(async () => { if (mode === 'single-server') { @@ -29,7 +28,8 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -118,12 +118,14 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' await expect(alice.call('ldp.resource.get', { resourceUri: bobMessageUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Note', + // @ts-expect-error TS(2304): Cannot find name 'expect'. deleted: expect.anything() }); }); await waitForExpect(async () => { const replies = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(replies.items).toBeUndefinedOrEmptyArray(); }); }); diff --git a/src/middleware/tests/activitypub/object.test.js b/src/middleware/tests/activitypub/object.test.ts similarity index 91% rename from src/middleware/tests/activitypub/object.test.js rename to src/middleware/tests/activitypub/object.test.ts index 748046669..873074918 100644 --- a/src/middleware/tests/activitypub/object.test.js +++ b/src/middleware/tests/activitypub/object.test.ts @@ -1,22 +1,22 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); +import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; +import * as CONFIG from '../config.ts'; jest.setTimeout(50000); - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('Create/Update/Delete objects', () => { - let sebastien; - let objectUri; + let sebastien: any; + let objectUri: any; test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { @@ -118,6 +118,7 @@ describe('Create/Update/Delete objects', () => { await expect(broker.call('ldp.resource.get', { resourceUri: objectUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Article', + // @ts-expect-error TS(2304): Cannot find name 'expect'. deleted: expect.anything() }); }); diff --git a/src/middleware/tests/activitypub/outbox.test.js b/src/middleware/tests/activitypub/outbox.test.ts similarity index 97% rename from src/middleware/tests/activitypub/outbox.test.js rename to src/middleware/tests/activitypub/outbox.test.ts index f63d38dfa..8b3b8b8b8 100644 --- a/src/middleware/tests/activitypub/outbox.test.js +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -1,23 +1,23 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); +import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(50_000); - -let broker; -let broker2; +let broker: any; +let broker2: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); broker2 = broker; }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('Permissions are correctly set on outbox', () => { - let simon; - let sebastien; + let simon: any; + let sebastien: any; test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { @@ -50,7 +50,7 @@ describe('Permissions are correctly set on outbox', () => { }); }); - let objectPrivateFirst; + let objectPrivateFirst: any; test('Post private message to self', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -284,6 +284,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outboxFetchedByAnon.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.UPDATE, diff --git a/src/middleware/tests/activitypub/shares.test.js b/src/middleware/tests/activitypub/shares.test.ts similarity index 85% rename from src/middleware/tests/activitypub/shares.test.js rename to src/middleware/tests/activitypub/shares.test.ts index ad680a4a0..5c35e3c58 100644 --- a/src/middleware/tests/activitypub/shares.test.js +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -1,18 +1,17 @@ -const waitForExpect = require('wait-for-expect'); -const { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const initialize = require('./initialize'); +import waitForExpect from 'wait-for-expect'; +import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', mode => { - let broker; - const actors = []; - let alice; - let bob; - let aliceMessageUri; - let publicShareActivity; +describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let aliceMessageUri: any; + let publicShareActivity: any; beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -28,7 +27,8 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -103,6 +103,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure the public announce activity has been removed from the /shares collection await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.not.toMatchObject({ diff --git a/src/middleware/tests/babel.config.js b/src/middleware/tests/babel.config.js new file mode 100644 index 000000000..968efbe25 --- /dev/null +++ b/src/middleware/tests/babel.config.js @@ -0,0 +1,4 @@ +export default { + presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'], + plugins: ['@babel/transform-runtime', 'babel-plugin-transform-import-meta'] +}; diff --git a/src/middleware/tests/config.js b/src/middleware/tests/config.js deleted file mode 100644 index cd330e4d4..000000000 --- a/src/middleware/tests/config.js +++ /dev/null @@ -1,14 +0,0 @@ -// Read all .env* files in the root folder and add them to process.env -// See https://github.com/kerimdzhanov/dotenv-flow for more details -require('dotenv-flow').config(); - -module.exports = { - HOME_URL: process.env.SEMAPPS_HOME_URL, - SPARQL_ENDPOINT: process.env.SEMAPPS_SPARQL_ENDPOINT, - MAIN_DATASET: process.env.SEMAPPS_MAIN_DATASET, - SETTINGS_DATASET: process.env.SEMAPPS_SETTINGS_DATASET, - JENA_USER: process.env.SEMAPPS_JENA_USER, - JENA_PASSWORD: process.env.SEMAPPS_JENA_PASSWORD, - ACTIVATE_CACHE: process.env.SEMAPPS_ACTIVATE_CACHE === 'true', - FUSEKI_BASE: process.env.FUSEKI_BASE -}; diff --git a/src/middleware/tests/config.ts b/src/middleware/tests/config.ts new file mode 100644 index 000000000..559ac970d --- /dev/null +++ b/src/middleware/tests/config.ts @@ -0,0 +1,14 @@ +// Read all .env* files in the root folder and add them to process.env +// See https://github.com/kerimdzhanov/dotenv-flow for more details +import { config } from 'dotenv-flow'; + +config(); + +export const HOME_URL = process.env.SEMAPPS_HOME_URL; +export const SPARQL_ENDPOINT = process.env.SEMAPPS_SPARQL_ENDPOINT; +export const MAIN_DATASET = process.env.SEMAPPS_MAIN_DATASET; +export const SETTINGS_DATASET = process.env.SEMAPPS_SETTINGS_DATASET; +export const JENA_USER = process.env.SEMAPPS_JENA_USER; +export const JENA_PASSWORD = process.env.SEMAPPS_JENA_PASSWORD; +export const ACTIVATE_CACHE = process.env.SEMAPPS_ACTIVATE_CACHE === 'true'; +export const FUSEKI_BASE = process.env.FUSEKI_BASE; diff --git a/src/middleware/tests/crypto/initialize.js b/src/middleware/tests/crypto/initialize.ts similarity index 57% rename from src/middleware/tests/crypto/initialize.js rename to src/middleware/tests/crypto/initialize.ts index 1d393260a..a2e5e28e3 100644 --- a/src/middleware/tests/crypto/initialize.js +++ b/src/middleware/tests/crypto/initialize.ts @@ -1,21 +1,27 @@ -const fse = require('fs-extra'); -const fs = require('fs'); -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const { AuthLocalService } = require('@semapps/auth'); -const { CoreService } = require('@semapps/core'); -const { VerifiableCredentialsService } = require('@semapps/crypto'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message +import fse from 'fs-extra'; +import fs from 'fs'; +import path from 'path'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { AuthLocalService } from '@semapps/auth'; +import { CoreService } from '@semapps/core'; +import { VerifiableCredentialsService } from '@semapps/crypto'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { clearDataset } from '../utils.ts'; -const initialize = async (port, withOldKeyStore = false) => { +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const initialize = async (port: any, withOldKeyStore = false) => { await clearDataset(CONFIG.MAIN_DATASET); await clearDataset(CONFIG.SETTINGS_DATASET); const baseUrl = `http://localhost:${port}/`; const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl })], logger: { type: 'Console', @@ -32,6 +38,7 @@ const initialize = async (port, withOldKeyStore = false) => { fs.writeFileSync(path.resolve(__dirname, '../actors', 'placeholder.key'), ''); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -58,6 +65,7 @@ const initialize = async (port, withOldKeyStore = false) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { @@ -67,6 +75,7 @@ const initialize = async (port, withOldKeyStore = false) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc"; d... Remove this comment to see the full error message broker.createService({ mixins: [VerifiableCredentialsService], settings: { @@ -97,4 +106,4 @@ const initialize = async (port, withOldKeyStore = false) => { return { broker, baseUrl }; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/crypto/keys.test.js b/src/middleware/tests/crypto/keys.test.ts similarity index 88% rename from src/middleware/tests/crypto/keys.test.js rename to src/middleware/tests/crypto/keys.test.ts index 0c9516eee..1278c2e12 100644 --- a/src/middleware/tests/crypto/keys.test.js +++ b/src/middleware/tests/crypto/keys.test.ts @@ -1,16 +1,17 @@ -const { KEY_TYPES } = require('@semapps/crypto'); -const { arrayOf, waitForResource } = require('@semapps/ldp'); -const { wait } = require('../utils'); -const initialize = require('./initialize'); +import { KEY_TYPES } from '@semapps/crypto'; +import { arrayOf, waitForResource } from '@semapps/ldp'; +import { wait } from '../utils.ts'; +import initialize from './initialize.ts'; jest.setTimeout(100_000); /** @type {import('moleculer').ServiceBroker} */ -let broker; -let user; -let user2; +let broker: any; -const setUp = async withOldKeyStore => { +let user: any; +let user2: any; + +const setUp = async (withOldKeyStore: any) => { ({ broker } = await initialize(3000, withOldKeyStore)); user = await broker.call('auth.signup', { username: 'alice', @@ -36,6 +37,7 @@ afterAll(async () => { describe('keys', () => { describe('with new service', () => { beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. await setUp(); }); @@ -63,7 +65,7 @@ describe('keys', () => { const publicKeys = arrayOf(webIdDocument.publicKey); // There should only be one public key advertised in the webId by default. expect(publicKeys.length).toBe(1); - const matchingPublicKey = publicKeys.find(publicKey => publicKey.publicKeyPem === keyPair.publicKeyPem); + const matchingPublicKey = publicKeys.find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem); expect(matchingPublicKey).toBeDefined(); expect(matchingPublicKey.owner).toBe(user.webId); expect(matchingPublicKey.controller).toBe(user.webId); @@ -82,7 +84,7 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocument.publicKey).find(publicKey => publicKey.publicKeyPem === keyPair.publicKeyPem) + arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); // Attach key again. @@ -92,7 +94,7 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocumentNew.publicKey).find(publicKey => publicKey.publicKeyPem === keyPair.publicKeyPem) + arrayOf(webIdDocumentNew.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) ).toBeDefined(); }); @@ -112,7 +114,7 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocument.publicKey).find(publicKey => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) + arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) ).toBeUndefined(); // Expect key not to be present in `/public-keys` container. await expect( @@ -140,10 +142,14 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocumentNew.publicKey).some(publicKey => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) + arrayOf(webIdDocumentNew.publicKey).some( + (publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem + ) ).toBeFalsy(); expect( - arrayOf(webIdDocumentNew.publicKey).some(publicKey => publicKey.publicKeyPem === newKeyPair.publicKeyPem) + arrayOf(webIdDocumentNew.publicKey).some( + (publicKey: any) => publicKey.publicKeyPem === newKeyPair.publicKeyPem + ) ).toBeTruthy(); // Expect publicKey to be present in `/public-keys` container. @@ -192,7 +198,7 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocument.publicKey).find(pKey => pKey.publicKeyPem === keyPair.publicKeyPem) + arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); }); @@ -228,7 +234,7 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocument.publicKey).find(pKey => pKey.publicKeyPem === keyPair.publicKeyPem) + arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); }); @@ -238,7 +244,7 @@ describe('keys', () => { keyType: KEY_TYPES.RSA }); expect(webIdKeys).toHaveLength(1); - webIdKeys.forEach(key => { + webIdKeys.forEach((key: any) => { expect(key.publicKeyPem).toBeTruthy(); expect(key.privateKeyPem).toBeTruthy(); }); @@ -274,7 +280,7 @@ describe('keys', () => { expect(webIdDocument.assertionMethod).toBeDefined(); expect( arrayOf(webIdDocument.assertionMethod).find( - assertionMethod => assertionMethod.publicKeyMultibase === keyPair.publicKeyMultibase + (assertionMethod: any) => assertionMethod.publicKeyMultibase === keyPair.publicKeyMultibase ) ).toBeDefined(); }); @@ -292,7 +298,9 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocument.assertionMethod).find(key => key.publicKeyMultibase === keyPair.publicKeyMultibase) + arrayOf(webIdDocument.assertionMethod).find( + (key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase + ) ).toBeUndefined(); // Attach key again. @@ -302,7 +310,9 @@ describe('keys', () => { webId: user.webId }); expect( - arrayOf(webIdDocumentNew.assertionMethod).find(key => key.publicKeyMultibase === keyPair.publicKeyMultibase) + arrayOf(webIdDocumentNew.assertionMethod).find( + (key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase + ) ).toBeDefined(); }); @@ -323,7 +333,7 @@ describe('keys', () => { }); expect( arrayOf(webIdDocument.assertionMethod).find( - publicKey => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase + (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase ) ).toBeUndefined(); // Expect key not to be present in `/public-keys` container. @@ -353,12 +363,12 @@ describe('keys', () => { }); expect( arrayOf(webIdDocumentNew.assertionMethod).some( - publicKey => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase + (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase ) ).toBeFalsy(); expect( arrayOf(webIdDocumentNew.assertionMethod).some( - publicKey => publicKey.publicKeyMultibase === newKeyPair.publicKeyMultibase + (publicKey: any) => publicKey.publicKeyMultibase === newKeyPair.publicKeyMultibase ) ).toBeTruthy(); @@ -403,7 +413,7 @@ describe('keys', () => { }); // Expect the public key of the webId to be the key published in the public key container (referenced by rdfs:seeAlso). expect( - arrayOf(webIdDocument.assertionMethod).find(key => (key.id || key['@id']) === keyPair['rdfs:seeAlso']) + arrayOf(webIdDocument.assertionMethod).find((key: any) => (key.id || key['@id']) === keyPair['rdfs:seeAlso']) ).toBeTruthy(); expect(webIdDocument.assertionMethod.length).toBeGreaterThan(1); }); @@ -414,7 +424,7 @@ describe('keys', () => { keyType: KEY_TYPES.ED25519 }); expect(webIdKeys.length).toBeGreaterThan(0); - webIdKeys.forEach(key => { + webIdKeys.forEach((key: any) => { expect(key.publicKeyMultibase).toBeTruthy(); expect(key.secretKeyMultibase).toBeTruthy(); }); @@ -431,8 +441,8 @@ describe('keys', () => { // To store the key and validate if it remained the same after migration. // A bit hacky, sorry. - let publicKeyPemBeforeMigration; - let privateKeyPemBeforeMigration; + let publicKeyPemBeforeMigration: any; + let privateKeyPemBeforeMigration: any; describe('Before migration', () => { test('new keys service not usable before migration', async () => { @@ -521,6 +531,7 @@ describe('keys', () => { expect(publicKey.owner).toBe(user.webId); expect(publicKey.controller).toBe(user.webId); expect(publicKey.publicKeyPem).toBe(keyPair.publicKeyPem); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.privateKeyPem).toBeUndefined(); }); }); diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.js b/src/middleware/tests/crypto/verifiable-credentials.test.ts similarity index 96% rename from src/middleware/tests/crypto/verifiable-credentials.test.js rename to src/middleware/tests/crypto/verifiable-credentials.test.ts index 18ca8b5ef..be294b357 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.js +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -1,23 +1,24 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); -const path = require('node:path'); -const initialize = require('./initialize'); +import { MIME_TYPES } from '@semapps/mime-types'; +import path from 'node:path'; +import initialize from './initialize.ts'; jest.setTimeout(45_000); -const getChallengeFrom = async actor => { +const getChallengeFrom = async (actor: any) => { const { challenge } = await actor.fetch(path.join(vcApiEndpoint, 'challenges'), { method: 'POST' }); return challenge; }; /** @type {import('moleculer').ServiceBroker} */ -let broker; +let broker: any; + let baseUrl; -let vcApiEndpoint; -let alice; -let bob; -let craig; +let vcApiEndpoint: any; +let alice: any; +let bob: any; +let craig: any; -const setUpUser = async (broker, username) => { +const setUpUser = async (broker: any, username: any) => { const user = await broker.call('auth.signup', { username, email: `${username}@test.example`, @@ -29,7 +30,7 @@ const setUpUser = async (broker, username) => { webId: 'system' }); - user.fetch = async (uri, init) => { + user.fetch = async (uri: any, init: any) => { return await fetch(uri, { ...init, headers: { @@ -46,7 +47,8 @@ const setUpUser = async (broker, username) => { return user; }; -const setUp = async withOldKeyStore => { + +const setUp = async (withOldKeyStore: any) => { ({ broker, baseUrl } = await initialize(3000, withOldKeyStore)); vcApiEndpoint = path.join(baseUrl, 'vc/v0.3/'); alice = await setUpUser(broker, 'alice'); @@ -60,6 +62,7 @@ afterAll(async () => { describe('verifiable credentials', () => { beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. await setUp(); await broker.call('crypto.vc.issuer.credential-container.waitForContainerCreation'); }); @@ -496,6 +499,7 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeFalsy(); }); }); diff --git a/src/middleware/tests/interop/initialize.js b/src/middleware/tests/interop/initialize.ts similarity index 53% rename from src/middleware/tests/interop/initialize.js rename to src/middleware/tests/interop/initialize.ts index 8a16ec218..a59a63e92 100644 --- a/src/middleware/tests/interop/initialize.js +++ b/src/middleware/tests/interop/initialize.ts @@ -1,17 +1,22 @@ -const fse = require('fs-extra'); -const path = require('path'); -const urlJoin = require('url-join'); -const Redis = require('ioredis'); -const { ServiceBroker } = require('moleculer'); -const { FULL_ACTOR_TYPES, RelayService } = require('@semapps/activitypub'); -const { AuthLocalService } = require('@semapps/auth'); -const { CoreService } = require('@semapps/core'); -const { InferenceService } = require('@semapps/inference'); -const { pair } = require('@semapps/ontologies'); -const { MirrorService, ObjectsWatcherMiddleware } = require('@semapps/sync'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message +import fse from 'fs-extra'; +import path from 'path'; +import urlJoin from 'url-join'; +import Redis from 'ioredis'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { FULL_ACTOR_TYPES, RelayService } from '@semapps/activitypub'; +import { AuthLocalService } from '@semapps/auth'; +import { CoreService } from '@semapps/core'; +import { InferenceService } from '@semapps/inference'; +import { pair } from '@semapps/ontologies'; +import { MirrorService, ObjectsWatcherMiddleware } from '@semapps/sync'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { clearDataset } from '../utils.ts'; + +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const containers = [ { @@ -26,7 +31,13 @@ const containers = [ } ]; -const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, serverToMirror) => { +const initialize = async ( + port: any, + mainDataset: any, + accountsDataset: any, + queueServiceDb: any, + serverToMirror: any +) => { // Clear datasets await clearDataset(mainDataset); await clearDataset(accountsDataset); @@ -45,8 +56,11 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se const broker = new ServiceBroker({ nodeID: `server${port}`, middlewares: [ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message CacherMiddleware(CONFIG.ACTIVATE_CACHE), + // @ts-expect-error TS(2322): Type '{ name: string; started(): Promise; lo... Remove this comment to see the full error message WebAclMiddleware({ baseUrl }), + // @ts-expect-error TS(2322): Type '{ name: string; started(broker: any): Promis... Remove this comment to see the full error message ObjectsWatcherMiddleware({ baseUrl }) ], logger: { @@ -57,6 +71,7 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -85,9 +100,11 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.r... Remove this comment to see the full error message broker.createService({ mixins: [RelayService] }); if (serverToMirror) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "mirror"; sett... Remove this comment to see the full error message broker.createService({ mixins: [MirrorService], settings: { @@ -96,6 +113,7 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se }); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { @@ -105,6 +123,7 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "inference"; s... Remove this comment to see the full error message broker.createService({ mixins: [InferenceService], settings: { @@ -131,4 +150,4 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/interop/mirror-protected.test.js b/src/middleware/tests/interop/mirror-protected.test.ts similarity index 90% rename from src/middleware/tests/interop/mirror-protected.test.js rename to src/middleware/tests/interop/mirror-protected.test.ts index d63180e0c..5ae1a17a6 100644 --- a/src/middleware/tests/interop/mirror-protected.test.js +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -1,17 +1,16 @@ -const urlJoin = require('url-join'); -const waitForExpect = require('wait-for-expect'); -const { ACTIVITY_TYPES } = require('@semapps/activitypub'); -const initialize = require('./initialize'); +import urlJoin from 'url-join'; +import waitForExpect from 'wait-for-expect'; +import { ACTIVITY_TYPES } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - -let server1; -let server2; - +let server1: any; +let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); // Wait for Relay actor creation, or server2 won't be able to mirror server1 @@ -21,14 +20,15 @@ beforeAll(async () => { server2 = await initialize(3002, 'testData2', 'settings2', 2, 'http://localhost:3001'); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); describe('Resource on server1 is shared with user on server2', () => { - let resourceUri; - let user2; + let resourceUri: any; + let user2: any; test('Server2 follow server1', async () => { await waitForExpect(async () => { @@ -119,6 +119,7 @@ describe('Resource on server1 is shared with user on server2', () => { }); expect(inbox).not.toBeNull(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.DELETE, actor: relay1, diff --git a/src/middleware/tests/interop/mirror.test.js b/src/middleware/tests/interop/mirror.test.ts similarity index 91% rename from src/middleware/tests/interop/mirror.test.js rename to src/middleware/tests/interop/mirror.test.ts index 6473234d9..5ea41dd1a 100644 --- a/src/middleware/tests/interop/mirror.test.js +++ b/src/middleware/tests/interop/mirror.test.ts @@ -1,17 +1,16 @@ -const urlJoin = require('url-join'); -const waitForExpect = require('wait-for-expect'); -const { triple, namedNode } = require('@rdfjs/data-model'); -const initialize = require('./initialize'); +import urlJoin from 'url-join'; +import waitForExpect from 'wait-for-expect'; +import { triple, namedNode } from '@rdfjs/data-model'; +import initialize from './initialize.ts'; jest.setTimeout(100000); - -let server1; -let server2; - +let server1: any; +let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); // Wait for Relay actor creation, or server2 won't be able to mirror server1 @@ -21,13 +20,14 @@ beforeAll(async () => { server2 = await initialize(3002, 'testData2', 'settings2', 2, 'http://localhost:3001'); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); describe('Server2 mirror server1', () => { - let resourceUri; + let resourceUri: any; test('Server2 follow server1', async () => { await waitForExpect(async () => { @@ -132,6 +132,7 @@ describe('Server2 mirror server1', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).rejects.toThrow(); }); }); diff --git a/src/middleware/tests/interop/patch-remote.test.js b/src/middleware/tests/interop/patch-remote.test.ts similarity index 88% rename from src/middleware/tests/interop/patch-remote.test.js rename to src/middleware/tests/interop/patch-remote.test.ts index d415def4a..b7d3b1076 100644 --- a/src/middleware/tests/interop/patch-remote.test.js +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -1,23 +1,25 @@ -const waitForExpect = require('wait-for-expect'); -const { triple, namedNode } = require('@rdfjs/data-model'); -const initialize = require('./initialize'); +import waitForExpect from 'wait-for-expect'; +import { triple, namedNode } from '@rdfjs/data-model'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - -let server1; -let server2; +let server1: any; +let server2: any; beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server2 = await initialize(3002, 'testData2', 'settings2', 2); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); describe('Server2 imports a single resource from server1', () => { - let resourceUri; + let resourceUri: any; test('Resource is posted on server1', async () => { resourceUri = await server1.call('ldp.container.post', { @@ -98,6 +100,7 @@ describe('Server2 imports a single resource from server1', () => { await server2.call('ldp.remote.runCron'); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).rejects.toThrow(); }); }); diff --git a/src/middleware/tests/interop/remote-inference.test.js b/src/middleware/tests/interop/remote-inference.test.ts similarity index 84% rename from src/middleware/tests/interop/remote-inference.test.js rename to src/middleware/tests/interop/remote-inference.test.ts index 4b78f8efa..d2bb1b91d 100644 --- a/src/middleware/tests/interop/remote-inference.test.js +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -1,24 +1,27 @@ -const { triple, namedNode } = require('rdf-data-model'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'rdf-... Remove this comment to see the full error message +import { triple, namedNode } from 'rdf-data-model'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(100000); - -let server1; -let server2; +let server1: any; +let server2: any; beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server2 = await initialize(3002, 'testData2', 'settings2', 2); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); describe('An inference is added between server1 et server2', () => { - let resourceUri1; - let resourceUri2; + let resourceUri1: any; + let resourceUri2: any; test('An remote relationship is added on create', async () => { resourceUri1 = await server1.call('ldp.container.post', { @@ -101,6 +104,7 @@ describe('An inference is added between server1 et server2', () => { await server2.call('ldp.resource.delete', { resourceUri: resourceUri2 }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( 'pair:hasPart' ); diff --git a/src/middleware/tests/jest.config.js b/src/middleware/tests/jest.config.js index 4a8eeb3d7..084a8594f 100644 --- a/src/middleware/tests/jest.config.js +++ b/src/middleware/tests/jest.config.js @@ -1,11 +1,13 @@ -/** @type {import('jest').Config} */ +/** + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + const config = { - testEnvironment: 'node', - transform: { - '\\.[jt]sx?$': ['esbuild-jest', { sourcemap: true, rootMode: 'upward' }] - }, transformIgnorePatterns: [], - setupFilesAfterEnv: ['/jest.setup.js'] + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + setupFilesAfterEnv: ['./jest.setup.ts'] }; -module.exports = config; +export default config; diff --git a/src/middleware/tests/jest.setup.js b/src/middleware/tests/jest.setup.ts similarity index 70% rename from src/middleware/tests/jest.setup.js rename to src/middleware/tests/jest.setup.ts index 03e82cf16..caa216be7 100644 --- a/src/middleware/tests/jest.setup.js +++ b/src/middleware/tests/jest.setup.ts @@ -1,6 +1,7 @@ +// @ts-expect-error TS(2304): Cannot find name 'expect'. expect.extend({ - //An assertion to check if a value is undefined or an empty array - toBeUndefinedOrEmptyArray(received) { + // An assertion to check if a value is undefined or an empty array + toBeUndefinedOrEmptyArray(received: any) { const pass = received === undefined || (Array.isArray(received) && received.length === 0); if (pass) { return { diff --git a/src/middleware/tests/jsonld/initialize.js b/src/middleware/tests/jsonld/initialize.ts similarity index 50% rename from src/middleware/tests/jsonld/initialize.js rename to src/middleware/tests/jsonld/initialize.ts index 770c2644a..2eeac6c3b 100644 --- a/src/middleware/tests/jsonld/initialize.js +++ b/src/middleware/tests/jsonld/initialize.ts @@ -1,13 +1,17 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const ApiGatewayService = require('moleculer-web'); -const { JsonLdService } = require('@semapps/jsonld'); -const { OntologiesService } = require('@semapps/ontologies'); -const { TripleStoreService } = require('@semapps/triplestore'); -const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +import path from 'path'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; +import ApiGatewayService from 'moleculer-web'; +import { JsonLdService } from '@semapps/jsonld'; +import { OntologiesService } from '@semapps/ontologies'; +import { TripleStoreService } from '@semapps/triplestore'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { clearDataset } from '../utils.ts'; -module.exports = async (cacher, persistRegistry) => { +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default async (cacher: any, persistRegistry: any) => { await clearDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ @@ -20,6 +24,7 @@ module.exports = async (cacher, persistRegistry) => { cacher // If true, will use Moleculer MemoryCacher }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld"; sett... Remove this comment to see the full error message broker.createService({ mixins: [JsonLdService], settings: { @@ -39,6 +44,7 @@ module.exports = async (cacher, persistRegistry) => { }); broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { url: CONFIG.SPARQL_ENDPOINT, @@ -48,8 +54,10 @@ module.exports = async (cacher, persistRegistry) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: (Moleculer.ServiceSche... Remove this comment to see the full error message broker.createService({ mixins: [ApiGatewayService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ontologies"; ... Remove this comment to see the full error message broker.createService({ mixins: [OntologiesService], settings: { diff --git a/src/middleware/tests/jsonld/merge.test.js b/src/middleware/tests/jsonld/merge.test.ts similarity index 83% rename from src/middleware/tests/jsonld/merge.test.js rename to src/middleware/tests/jsonld/merge.test.ts index 2f1677905..1ab6515a8 100644 --- a/src/middleware/tests/jsonld/merge.test.js +++ b/src/middleware/tests/jsonld/merge.test.ts @@ -1,11 +1,13 @@ -const initialize = require('../ontologies/initialize'); +import initialize from '../ontologies/initialize.ts'; jest.setTimeout(10000); -let broker; +let broker: any; beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 2. broker = await initialize(false, false); }); + afterAll(async () => { if (broker) await broker.stop(); }); @@ -113,10 +115,14 @@ const testCases = { } }; -test.each(Object.keys(testCases))('Merging %s JSON-LD contexts', async key => { +// @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message +test.each(Object.keys(testCases))('Merging %s JSON-LD contexts', async (key: any) => { const newContext = await broker.call('jsonld.context.merge', { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message a: testCases[key].a, + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message b: testCases[key].b }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newContext).toEqual(testCases[key].expected); }); diff --git a/src/middleware/tests/ldp/api.test.js b/src/middleware/tests/ldp/api.test.ts similarity index 93% rename from src/middleware/tests/ldp/api.test.js rename to src/middleware/tests/ldp/api.test.ts index 19f6810d7..ec019db8e 100644 --- a/src/middleware/tests/ldp/api.test.js +++ b/src/middleware/tests/ldp/api.test.ts @@ -1,12 +1,12 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const waitForExpect = require('wait-for-expect'); -const { fetchServer } = require('../utils'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import waitForExpect from 'wait-for-expect'; +import { fetchServer } from '../utils.ts'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -17,10 +17,11 @@ afterAll(async () => { }); describe('LDP handling through API', () => { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let resourceUri; - let subContainerUri; - let subResourceUri; + let resourceUri: any; + let subContainerUri: any; + let subResourceUri: any; test('Create resource', async () => { const { headers } = await fetchServer(containerUri, { @@ -259,6 +260,7 @@ describe('LDP handling through API', () => { subContainerUri = headers.get('Location'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(subContainerUri).toBe(urlJoin(CONFIG.HOME_URL, 'resources', 'sub-resources')); await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ @@ -334,6 +336,7 @@ describe('LDP handling through API', () => { status: 204 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ status: 404 diff --git a/src/middleware/tests/ldp/binary.test.js b/src/middleware/tests/ldp/binary.test.ts similarity index 78% rename from src/middleware/tests/ldp/binary.test.js rename to src/middleware/tests/ldp/binary.test.ts index f3b6f5e0d..ec91bfb1e 100644 --- a/src/middleware/tests/ldp/binary.test.js +++ b/src/middleware/tests/ldp/binary.test.ts @@ -1,30 +1,35 @@ -const fetch = require('node-fetch'); -const fs = require('fs'); -const { join: pathJoin } = require('path'); -const urlJoin = require('url-join'); -const { getSlugFromUri } = require('@semapps/ldp'); -const { fetchServer } = require('../utils'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); +import fetch from 'node-fetch'; +import fs from 'fs'; +import path, { join as pathJoin } from 'path'; +import urlJoin from 'url-join'; +import { getSlugFromUri } from '@semapps/ldp'; +import { fileURLToPath } from 'url'; +import { fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; +import * as CONFIG from '../config.ts'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('Binary handling of LDP server', () => { - let fileUri; - let filePath; - let fileName; + let fileUri: any; + let filePath: any; + let fileName: any; test('Post image to container', async () => { const readStream = fs.createReadStream(pathJoin(__dirname, 'av-icon.png')); + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const { headers } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'files'), { method: 'POST', body: readStream, @@ -43,6 +48,7 @@ describe('Binary handling of LDP server', () => { }); test('Get container', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], @@ -98,6 +104,7 @@ describe('Binary handling of LDP server', () => { status: 404 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], diff --git a/src/middleware/tests/ldp/container-path.test.js b/src/middleware/tests/ldp/container-path.test.ts similarity index 83% rename from src/middleware/tests/ldp/container-path.test.js rename to src/middleware/tests/ldp/container-path.test.ts index afa0852a6..2b42a665f 100644 --- a/src/middleware/tests/ldp/container-path.test.js +++ b/src/middleware/tests/ldp/container-path.test.ts @@ -1,11 +1,12 @@ -const initialize = require('./initialize'); +import initialize from './initialize.ts'; jest.setTimeout(10000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); @@ -27,10 +28,12 @@ const errorCases = { }; describe('Get container path', () => { - test.each(Object.keys(successCases))('Success with resourceType %s', async resourceType => { + test.each(Object.keys(successCases))('Success with resourceType %s', async (resourceType: any) => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.getPath', { resourceType })).resolves.toBe(successCases[resourceType]); }); - test.each(Object.keys(errorCases))('Error With resourceType %s', async resourceType => { + test.each(Object.keys(errorCases))('Error With resourceType %s', async (resourceType: any) => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.getPath', { resourceType })).rejects.toThrow(errorCases[resourceType]); }); }); diff --git a/src/middleware/tests/ldp/container.test.js b/src/middleware/tests/ldp/container.test.ts similarity index 96% rename from src/middleware/tests/ldp/container.test.js rename to src/middleware/tests/ldp/container.test.ts index 65534ffca..6e93ccb08 100644 --- a/src/middleware/tests/ldp/container.test.js +++ b/src/middleware/tests/ldp/container.test.ts @@ -1,19 +1,20 @@ -const waitForExpect = require('wait-for-expect'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import waitForExpect from 'wait-for-expect'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('LDP container tests', () => { - let resourceUri; + let resourceUri: any; test('Ensure container created in LdpService settings exists', async () => { await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}resources` })).resolves.toBe( @@ -249,6 +250,7 @@ describe('LDP container tests', () => { }); // Container should now be empty + // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` }); diff --git a/src/middleware/tests/ldp/content-negotiation.test.js b/src/middleware/tests/ldp/content-negotiation.test.ts similarity index 93% rename from src/middleware/tests/ldp/content-negotiation.test.js rename to src/middleware/tests/ldp/content-negotiation.test.ts index 929ac1486..7d3a033da 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.js +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -1,12 +1,12 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { fetchServer } = require('../utils'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { fetchServer } from '../utils.ts'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -17,8 +17,11 @@ afterAll(async () => { }); describe('Content negotiation', () => { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let projectUri, project2Uri, project3Uri; + let projectUri: any; + let project2Uri: any; + let project3Uri: any; test('Post resource in JSON-LD', async () => { const { headers } = await fetchServer(containerUri, { diff --git a/src/middleware/tests/ldp/headers.test.js b/src/middleware/tests/ldp/headers.test.ts similarity index 52% rename from src/middleware/tests/ldp/headers.test.js rename to src/middleware/tests/ldp/headers.test.ts index c9826987f..521f709c4 100644 --- a/src/middleware/tests/ldp/headers.test.js +++ b/src/middleware/tests/ldp/headers.test.ts @@ -1,21 +1,23 @@ -const urlJoin = require('url-join'); -const { parse: parseLinkHeader } = require('http-link-header'); -const { fetchServer } = require('../utils'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); +import urlJoin from 'url-join'; +import { parse as parseLinkHeader } from 'http-link-header'; +import { fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; +import * as CONFIG from '../config.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('Headers handling of LDP server', () => { test('Get headers', async () => { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const { headers: postHeaders } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'places'), { method: 'POST', body: { @@ -25,16 +27,19 @@ describe('Headers handling of LDP server', () => { }); const resourceUri = postHeaders.get('Location'); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const resourcePath = new URL(resourceUri).pathname; const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const parsedLinks = parseLinkHeader(headers.get('link')); expect(parsedLinks.refs).toMatchObject([ { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message uri: urlJoin(CONFIG.HOME_URL, '_acl', resourcePath), rel: 'acl' } @@ -42,6 +47,7 @@ describe('Headers handling of LDP server', () => { }); test('Get container-specific headers', async () => { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const { headers: postHeaders } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'pair', 'event'), { method: 'POST', body: { @@ -51,15 +57,19 @@ describe('Headers handling of LDP server', () => { }); const resourceUri = postHeaders.get('Location'); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const resourcePath = new URL(resourceUri).pathname; const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const parsedLinks = parseLinkHeader(headers.get('link')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(parsedLinks.refs).toMatchObject([ + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message { uri: urlJoin(CONFIG.HOME_URL, '_acl', resourcePath), rel: 'acl' }, { uri: 'http://foo.bar', rel: 'http://foo.baz' } ]); diff --git a/src/middleware/tests/ldp/initialize.js b/src/middleware/tests/ldp/initialize.ts similarity index 58% rename from src/middleware/tests/ldp/initialize.js rename to src/middleware/tests/ldp/initialize.ts index 35d82d875..b35cc0dfa 100644 --- a/src/middleware/tests/ldp/initialize.js +++ b/src/middleware/tests/ldp/initialize.ts @@ -1,14 +1,17 @@ -const { ServiceBroker } = require('moleculer'); -const fs = require('fs'); -const { join: pathJoin } = require('path'); -const { CoreService } = require('@semapps/core'); -const { pair, petr } = require('@semapps/ontologies'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const { AuthLocalService } = require('@semapps/auth'); -const { ControlledContainerMixin } = require('@semapps/ldp'); -const path = require('path'); -const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +import { ServiceBroker, ServiceSchema, defineAction } from 'moleculer'; +import fs from 'fs'; +import path, { join as pathJoin } from 'path'; +import { CoreService } from '@semapps/core'; +import { pair, petr } from '@semapps/ontologies'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { AuthLocalService } from '@semapps/auth'; +import { ControlledContainerMixin } from '@semapps/ldp'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { clearDataset } from '../utils.ts'; + +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); // Give write permission on all containers to anonymous users const permissions = { @@ -54,6 +57,7 @@ const initialize = async () => { } const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], logger: { type: 'Console', @@ -63,6 +67,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -87,6 +92,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { @@ -97,21 +103,23 @@ const initialize = async () => { }); broker.createService({ - name: 'event', + name: 'event' as const, mixins: [ControlledContainerMixin], settings: { acceptedTypes: ['pair:Event'], permissions }, actions: { - getHeaderLinks() { - return [ - { - uri: 'http://foo.bar', - rel: 'http://foo.baz' - } - ]; - } + getHeaderLinks: defineAction({ + handler() { + return [ + { + uri: 'http://foo.bar', + rel: 'http://foo.baz' + } + ]; + } + }) } }); @@ -120,4 +128,4 @@ const initialize = async () => { return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/ldp/resource.test.js b/src/middleware/tests/ldp/resource.test.ts similarity index 93% rename from src/middleware/tests/ldp/resource.test.js rename to src/middleware/tests/ldp/resource.test.ts index 7316bc40a..869e594f8 100644 --- a/src/middleware/tests/ldp/resource.test.js +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,20 +1,22 @@ -const { quad, namedNode, blankNode, literal } = require('rdf-data-model'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +// @ts-expect-error TS(7016): Could not find a declaration file for module 'rdf-... Remove this comment to see the full error message +import { quad, namedNode, blankNode, literal } from 'rdf-data-model'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(50000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); describe('Resource CRUD operations', () => { - let project1; - let project2; + let project1: any; + let project2: any; test('Post resource in container', async () => { const resourceUri = await broker.call('ldp.container.post', { @@ -207,10 +209,12 @@ describe('Resource CRUD operations', () => { resourceUpdated.hasLocation = [ { label: 'Compiegne', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message description: 'the place to be' }, { label: 'Compiegne', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message description: 'or not' } ]; @@ -234,6 +238,7 @@ describe('Resource CRUD operations', () => { ] }); + // @ts-expect-error TS(2322): Type 'undefined' is not assignable to type '{ labe... Remove this comment to see the full error message resourceUpdated.hasLocation = undefined; await broker.call('ldp.resource.put', { resource: resourceUpdated }); @@ -242,6 +247,7 @@ describe('Resource CRUD operations', () => { expect(updatedProject['pair:hasLocation']).toBeUndefined(); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message resourceUpdated['petr:openingTimesDay'] = [ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' } ]; @@ -258,6 +264,7 @@ describe('Resource CRUD operations', () => { } }); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message resourceUpdated['petr:openingTimesDay'] = [ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' }, { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } @@ -308,6 +315,7 @@ describe('Resource CRUD operations', () => { } }); + // @ts-expect-error TS(2739): Type '{ label: string; hasPostalAddress: { address... Remove this comment to see the full error message resourceToPost.hasLocation = [ { label: 'Paris', @@ -347,6 +355,7 @@ describe('Resource CRUD operations', () => { ] }); + // @ts-expect-error TS(2739): Type '{ label: string; hasPostalAddress: { address... Remove this comment to see the full error message resourceToPost.hasLocation = [ { label: 'Paris', diff --git a/src/middleware/tests/ontologies/initialize.js b/src/middleware/tests/ontologies/initialize.ts similarity index 50% rename from src/middleware/tests/ontologies/initialize.js rename to src/middleware/tests/ontologies/initialize.ts index 801ec21c0..657e84017 100644 --- a/src/middleware/tests/ontologies/initialize.js +++ b/src/middleware/tests/ontologies/initialize.ts @@ -1,13 +1,17 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const ApiGatewayService = require('moleculer-web'); -const { JsonLdService } = require('@semapps/jsonld'); -const { OntologiesService } = require('@semapps/ontologies'); -const { TripleStoreService } = require('@semapps/triplestore'); -const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +import path from 'path'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; +import ApiGatewayService from 'moleculer-web'; +import { JsonLdService } from '@semapps/jsonld'; +import { OntologiesService } from '@semapps/ontologies'; +import { TripleStoreService } from '@semapps/triplestore'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { clearDataset } from '../utils.ts'; -module.exports = async cacher => { +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default async (cacher: any) => { await clearDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ @@ -20,6 +24,7 @@ module.exports = async cacher => { cacher // If true, will use Moleculer MemoryCacher }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld"; sett... Remove this comment to see the full error message broker.createService({ mixins: [JsonLdService], settings: { @@ -39,6 +44,7 @@ module.exports = async cacher => { }); broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { url: CONFIG.SPARQL_ENDPOINT, @@ -48,8 +54,10 @@ module.exports = async cacher => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: (Moleculer.ServiceSche... Remove this comment to see the full error message broker.createService({ mixins: [ApiGatewayService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ontologies"; ... Remove this comment to see the full error message broker.createService({ mixins: [OntologiesService], settings: { diff --git a/src/middleware/tests/ontologies/ontologies.test.js b/src/middleware/tests/ontologies/ontologies.test.ts similarity index 88% rename from src/middleware/tests/ontologies/ontologies.test.js rename to src/middleware/tests/ontologies/ontologies.test.ts index 7d590b504..9becfb6b8 100644 --- a/src/middleware/tests/ontologies/ontologies.test.js +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -1,18 +1,18 @@ -const fetch = require('node-fetch'); -const urlJoin = require('url-join'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); -const ont1 = require('./ontologies/ont1.json'); -const ont2 = require('./ontologies/ont2.json'); -const ont3 = require('./ontologies/ont3.json'); -const ont4 = require('./ontologies/ont4.json'); +import fetch from 'node-fetch'; +import urlJoin from 'url-join'; +import initialize from './initialize.ts'; +import * as CONFIG from '../config.ts'; +import ont1 from './ontologies/ont1.json' with { type: 'json' }; +import ont2 from './ontologies/ont2.json' with { type: 'json' }; +import ont3 from './ontologies/ont3.json' with { type: 'json' }; +import ont4 from './ontologies/ont4.json' with { type: 'json' }; jest.setTimeout(10000); - +// @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); -describe.each([false, true])('Register ontologies with cacher %s', cacher => { - let broker; +describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) => { + let broker: any; beforeAll(async () => { broker = await initialize(cacher); diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 7a22501cf..2615c4787 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -3,7 +3,9 @@ "private": true, "description": "SemApps integration tests", "scripts": { - "test": "jest --detectOpenHandles --verbose true --silent false" + "test": "yarn test:types && yarn test:jest", + "test:types": "./test-types.sh", + "test:jest": "jest --detectOpenHandles --verbose true --silent false" }, "author": "SemApps Team", "license": "Apache-2.0", @@ -24,11 +26,13 @@ "@semapps/webacl": "1.1.4", "@semapps/webid": "1.1.4", "dotenv-flow": "^3.1.0", + "expect-type": "^1.2.2", "fs-extra": "^9.0.1", "http-link-header": "^1.1.1", "ioredis": "^4.27.0", + "jest": "^30.0.5", "lru-cache": "10.1.0", - "moleculer": "^0.14.17", + "moleculer": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", "moleculer-web": "^0.10.7", "node-fetch": "^2.6.6", "rdf-data-model": "^1.0.0", @@ -37,11 +41,20 @@ "wait-for-expect": "^3.0.2" }, "devDependencies": { - "@types/jest": "^29.5.14", - "jest": "^29.7.0" + "@babel/core": "^7.28.0", + "@babel/plugin-transform-runtime": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@babel/preset-typescript": "^7.27.1", + "@jest/globals": "^30.0.5", + "@types/ioredis": "^4.27.0", + "@types/jest": "^30.0.0", + "babel-jest": "^30.0.5", + "babel-plugin-transform-import-meta": "^2.3.3", + "babel-preset-vite": "^1.1.3" }, - "version": "1.1.4", + "version": "1.1.3", "engines": { - "node": ">=22.12.0" - } + "node": ">=24.0.0" + }, + "type": "module" } diff --git a/src/middleware/tests/run-typecheck.sh b/src/middleware/tests/run-typecheck.sh new file mode 100644 index 000000000..68f99c39c --- /dev/null +++ b/src/middleware/tests/run-typecheck.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Script to typecheck frontend code. +# Called by pre-push hook. + +ROOT_DIR=$(git rev-parse --show-toplevel) + +echo "=== Running typecheck for frontend ===" + +cd "$ROOT_DIR"/src/frontend +yarn typecheck > /dev/null +if [ $? -ne 0 ]; then + echo "⛔ Typecheck failed! To see the errors, run \`yarn typecheck\` in the frontend directory." + echo " You can skip pre-push checks by setting \$SKIP_PREPUSH_CHECKS=true" + exit 1 +fi + +echo "=== Running typecheck for middleware ===" + +cd "$ROOT_DIR"/src/middleware +yarn typecheck > /dev/null +if [ $? -ne 0 ]; then + echo "⛔ Typecheck failed! To see the errors, run \`yarn typecheck\` in the middleware directory." + echo " You can skip pre-push checks by setting \$SKIP_PREPUSH_CHECKS=true" + exit 1 +fi + +echo "✅ Typecheck successful!" \ No newline at end of file diff --git a/src/middleware/tests/test-types.sh b/src/middleware/tests/test-types.sh new file mode 100755 index 000000000..aa48de746 --- /dev/null +++ b/src/middleware/tests/test-types.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Type checking test for tests in `types/*.test-d.ts`. +# This script runs tsc --noEmit and checks if there are any type errors +# in the `*.test-d.ts` files which should have none if types are correct. + +echo "Skipping type check, this is WIP and will change soon." +exit 0 + +echo "🔍 Running TypeScript type checking tests..." +echo + +# Run TypeScript compiler and capture output +tsc_output=$(tsc --noEmit 2>&1) + +# Check if moleculer.test-d.ts appears in the output +if echo "$tsc_output" | grep -q ".test-d.ts"; then + echo "❌ Type test failed. Found type errors in:" + echo + echo "$tsc_output" | grep ".test-d.ts" + echo + exit 1 +else + echo "✅ Type test PASSED" + echo + exit 0 +fi diff --git a/src/middleware/tests/tsconfig.json b/src/middleware/tests/tsconfig.json new file mode 100644 index 000000000..e0e057ee9 --- /dev/null +++ b/src/middleware/tests/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["jest"], + "isolatedModules": false + }, + "include": ["**/*.js", "**/*.ts"] +} diff --git a/src/middleware/tests/utils.js b/src/middleware/tests/utils.ts similarity index 61% rename from src/middleware/tests/utils.js rename to src/middleware/tests/utils.ts index 9cdf3d9b5..5c3bce1cb 100644 --- a/src/middleware/tests/utils.js +++ b/src/middleware/tests/utils.ts @@ -1,9 +1,9 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const Redis = require('ioredis'); -const CONFIG = require('./config'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import Redis from 'ioredis'; +import * as CONFIG from './config.ts'; -const listDatasets = async () => { +export const listDatasets = async () => { const response = await fetch(`${CONFIG.SPARQL_ENDPOINT}$/datasets`, { headers: { Authorization: `Basic ${Buffer.from(`${CONFIG.JENA_USER}:${CONFIG.JENA_PASSWORD}`).toString('base64')}` @@ -12,13 +12,14 @@ const listDatasets = async () => { if (response.ok) { const json = await response.json(); - return json.datasets.map(dataset => dataset['ds.name'].substring(1)); + return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); } else { return []; } }; -const clearDataset = dataset => +export const clearDataset = (dataset: any) => + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message fetch(urlJoin(CONFIG.SPARQL_ENDPOINT, dataset, 'update'), { method: 'POST', body: 'update=CLEAR+ALL', // DROP+ALL is not working with WebACL datasets ! @@ -28,32 +29,42 @@ const clearDataset = dataset => } }); -const fetchServer = (url, options = {}) => { +export const fetchServer = (url: any, options = {}) => { if (!url) throw new Error('No url provided to fetchServer'); + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers) options.headers = new fetch.Headers(); + // @ts-expect-error TS(2339): Property 'method' does not exist on type '{}'. switch (options.method) { case 'POST': case 'PATCH': case 'PUT': + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json'); + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Content-Type')) options.headers.set('Content-Type', 'application/ld+json'); break; case 'DELETE': break; case 'GET': default: + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json'); break; } + // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. if (options.body && options.headers.get('Content-Type').includes('json')) { + // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. options.body = JSON.stringify(options.body); } return fetch(url, { + // @ts-expect-error TS(2339): Property 'method' does not exist on type '{}'. method: options.method || 'GET', + // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. body: options.body, + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. headers: options.headers }) .then(response => @@ -75,22 +86,14 @@ const fetchServer = (url, options = {}) => { }); }; -const clearQueue = async queueServiceUrl => { +export const clearQueue = async (queueServiceUrl: any) => { // Clear queue const redisClient = new Redis(queueServiceUrl); const result = await redisClient.flushdb(); redisClient.disconnect(); }; -const wait = ms => +export const wait = (ms: any) => new Promise(resolve => { setTimeout(resolve, ms); }); - -module.exports = { - clearDataset, - listDatasets, - fetchServer, - clearQueue, - wait -}; diff --git a/src/middleware/tests/webId/webId.test.js b/src/middleware/tests/webId/webId.test.ts similarity index 74% rename from src/middleware/tests/webId/webId.test.js rename to src/middleware/tests/webId/webId.test.ts index 0b40e513c..ad9e83bea 100644 --- a/src/middleware/tests/webId/webId.test.js +++ b/src/middleware/tests/webId/webId.test.ts @@ -1,10 +1,14 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const { CoreService } = require('@semapps/core'); -const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); +import path from 'path'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { CoreService } from '@semapps/core'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { clearDataset } from '../utils.ts'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); jest.setTimeout(20000); + const broker = new ServiceBroker({ logger: { type: 'Console', @@ -18,6 +22,7 @@ const broker = new ServiceBroker({ beforeAll(async () => { await clearDataset(CONFIG.MAIN_DATASET); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { diff --git a/src/middleware/tests/webacl/groupCRUD.test.js b/src/middleware/tests/webacl/groupCRUD.test.ts similarity index 89% rename from src/middleware/tests/webacl/groupCRUD.test.js rename to src/middleware/tests/webacl/groupCRUD.test.ts index a0d82d23a..7979d6d4e 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.js +++ b/src/middleware/tests/webacl/groupCRUD.test.ts @@ -1,10 +1,9 @@ -const urlJoin = require('url-join'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import urlJoin from 'url-join'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -18,12 +17,14 @@ describe('middleware CRUD group with perms', () => { test('Ensure a call as anonymous to webacl.group.create succeeds', async () => { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup5' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup5')); }, 20000); test('Ensure a call as user to webacl.group.create succeeds', async () => { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup10')); }, 20000); diff --git a/src/middleware/tests/webacl/initialize.js b/src/middleware/tests/webacl/initialize.ts similarity index 61% rename from src/middleware/tests/webacl/initialize.js rename to src/middleware/tests/webacl/initialize.ts index b6c135500..1de40db49 100644 --- a/src/middleware/tests/webacl/initialize.js +++ b/src/middleware/tests/webacl/initialize.ts @@ -1,16 +1,21 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const { CoreService } = require('@semapps/core'); -const { as } = require('@semapps/ontologies'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const { AuthLocalService } = require('@semapps/auth'); -const { clearDataset } = require('../utils'); -const CONFIG = require('../config'); +import path from 'path'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { CoreService } from '@semapps/core'; +import { as } from '@semapps/ontologies'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { AuthLocalService } from '@semapps/auth'; +import { fileURLToPath } from 'url'; +import { clearDataset } from '../utils.ts'; +import * as CONFIG from '../config.ts'; + +// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const initialize = async () => { await clearDataset(CONFIG.MAIN_DATASET); const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], logger: { type: 'Console', @@ -20,6 +25,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -40,7 +46,7 @@ const initialize = async () => { { path: '/resources2', permissions: {}, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { switch (webId) { case 'anon': return {}; @@ -70,6 +76,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { @@ -84,4 +91,4 @@ const initialize = async () => { return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/webacl/resource.test.js b/src/middleware/tests/webacl/resource.test.ts similarity index 97% rename from src/middleware/tests/webacl/resource.test.js rename to src/middleware/tests/webacl/resource.test.ts index cbe788526..f1defe69c 100644 --- a/src/middleware/tests/webacl/resource.test.js +++ b/src/middleware/tests/webacl/resource.test.ts @@ -1,13 +1,11 @@ -const { namedNode, triple, literal } = require('@rdfjs/data-model'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import { namedNode, triple, literal } from '@rdfjs/data-model'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -19,7 +17,7 @@ afterAll(async () => { describe('Permissions check on a specific resource', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions - let resourceUri; + let resourceUri: any; test('Get/patch/put/delete resource without permission', async () => { // When posting as system, no permissions are given on the resource diff --git a/src/middleware/tests/webacl/resourceCRUD.test.js b/src/middleware/tests/webacl/resourceCRUD.test.ts similarity index 82% rename from src/middleware/tests/webacl/resourceCRUD.test.js rename to src/middleware/tests/webacl/resourceCRUD.test.ts index 2ad4a7de9..b80482fb3 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.js +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -1,14 +1,12 @@ -const urlJoin = require('url-join'); -const { getSlugFromUri } = require('@semapps/ldp'); -const { fetchServer } = require('../utils'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import urlJoin from 'url-join'; +import { getSlugFromUri } from '@semapps/ldp'; +import { fetchServer } from '../utils.ts'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - const ALICE_WEBID = 'http://localhost:3000/alice'; - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -39,7 +37,7 @@ describe('middleware CRUD resource with perms', () => { ).rejects.toThrow(); }, 20000); - let resourceUri; + let resourceUri: any; test('A call to ldp.container.post creates some default permissions', async () => { resourceUri = await broker.call( @@ -84,6 +82,7 @@ describe('middleware CRUD resource with perms', () => { }); expect(result.headers.get('Link')).toMatch( + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` ); @@ -92,6 +91,7 @@ describe('middleware CRUD resource with perms', () => { }); expect(result.headers.get('Link')).toMatch( + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` ); }, 20000); @@ -111,6 +111,7 @@ describe('middleware CRUD resource with perms', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result.length).toBe(0); }, 20000); }); diff --git a/src/middleware/tests/webacl/sparql-injection.test.js b/src/middleware/tests/webacl/sparql-injection.test.ts similarity index 84% rename from src/middleware/tests/webacl/sparql-injection.test.js rename to src/middleware/tests/webacl/sparql-injection.test.ts index 936e363be..91a5d9b9e 100644 --- a/src/middleware/tests/webacl/sparql-injection.test.js +++ b/src/middleware/tests/webacl/sparql-injection.test.ts @@ -1,10 +1,9 @@ -const urlJoin = require('url-join'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import urlJoin from 'url-join'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -18,6 +17,7 @@ describe('pentest for the ACL groups API', () => { test('Ensure an injection with > in addMember fails', async () => { try { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup1')); await broker.call('webacl.group.addMember', { @@ -35,10 +35,12 @@ describe('pentest for the ACL groups API', () => { } catch (e) { console.log('YOU HAVE BEEN HACKED'); console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.code).toEqual(null); } } catch (e) { console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.type).toEqual('SPARQL_INJECTION'); const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup1' }); @@ -52,6 +54,7 @@ describe('pentest for the ACL groups API', () => { test('Ensure an injection with \\x3C in addMember fails', async () => { try { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup1')); await broker.call('webacl.group.addMember', { @@ -69,10 +72,12 @@ describe('pentest for the ACL groups API', () => { } catch (e) { console.log('YOU HAVE BEEN HACKED'); console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.code).toEqual(null); } } catch (e) { console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.type).toEqual('SPARQL_INJECTION'); const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup1' }); diff --git a/src/middleware/tests/webacl/utils.test.js b/src/middleware/tests/webacl/utils.test.ts similarity index 98% rename from src/middleware/tests/webacl/utils.test.js rename to src/middleware/tests/webacl/utils.test.ts index 6e14444cb..5fdf4eb83 100644 --- a/src/middleware/tests/webacl/utils.test.js +++ b/src/middleware/tests/webacl/utils.test.ts @@ -1,12 +1,10 @@ -const CONFIG = require('../config'); -const initialize = require('./initialize'); +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; - -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -18,7 +16,7 @@ afterAll(async () => { describe('Test various actions of the webacl.resource service', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions - let resourceUri; + let resourceUri: any; test('Alice see her rights correctly', async () => { resourceUri = await broker.call('ldp.container.post', { diff --git a/src/middleware/tsconfig.json b/src/middleware/tsconfig.json index 867f567aa..4151f7087 100644 --- a/src/middleware/tsconfig.json +++ b/src/middleware/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "lib": ["ESNext"], - "allowJs": true, + "allowJs": false, "checkJs": false, "resolveJsonModule": true, "declaration": true, @@ -10,12 +10,17 @@ "skipLibCheck": true, "sourceMap": true, "strictNullChecks": true, + "strict": true, "module": "NodeNext", "moduleResolution": "NodeNext", "resolvePackageJsonExports": true, "esModuleInterop": true, - "resolvePackageJsonImports": true + "resolvePackageJsonImports": true, + "allowSyntheticDefaultImports": true, + "allowImportingTsExtensions": true, + "outDir": "dist/", + "rootDir": "./", + "typeRoots": ["node_modules/types", "types"] }, - "include": ["**/*.js", "**/*.ts"], - "exclude": [] + "exclude": ["**/dist"] } diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 8716b8621..81d5c2e8d 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -1,11985 +1,17087 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== - dependencies: - "@babel/helper-validator-identifier" "^7.27.1" - js-tokens "^4.0.0" - picocolors "^1.1.1" - -"@babel/compat-data@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7" - integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg== - -"@babel/compat-data@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9" - integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ== - -"@babel/core@^7.1.0", "@babel/core@^7.12.17": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" - integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/helper-compilation-targets" "^7.27.1" - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helpers" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.26.0", "@babel/generator@^7.26.5", "@babel/generator@^7.7.2": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" - integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== - dependencies: - "@babel/parser" "^7.26.5" - "@babel/types" "^7.26.5" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/generator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" - integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== - dependencies: - "@babel/parser" "^7.27.1" - "@babel/types" "^7.27.1" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-compilation-targets@^7.25.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" - integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== - dependencies: - "@babel/compat-data" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.27.1": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== - dependencies: - "@babel/compat-data" "^7.27.2" - "@babel/helper-validator-option" "^7.27.1" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-module-transforms@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f" - integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== - -"@babel/helper-plugin-utils@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-string-parser@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" - integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== - -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-validator-option@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" - integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== - -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== - dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" - -"@babel/helpers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4" - integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ== - dependencies: - "@babel/template" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.5", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" - integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== - dependencies: - "@babel/types" "^7.26.5" - -"@babel/parser@^7.27.1", "@babel/parser@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127" - integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== - dependencies: - "@babel/types" "^7.27.1" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.12.13": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" - integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== - dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/template@^7.25.9", "@babel/template@^7.3.3": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/template@^7.27.1": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.25.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.5.tgz#6d0be3e772ff786456c1a37538208286f6e79021" - integrity sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.5" - "@babel/parser" "^7.26.5" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.5" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" - integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/types" "^7.27.1" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.5", "@babel/types@^7.3.3", "@babel/types@^7.6.1", "@babel/types@^7.9.6": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" - integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@babel/types@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" - integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@comunica/actor-abstract-mediatyped@^1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.22.0.tgz#e61a4dad537096a84a9684bf7cd6ec1b8fda2368" - integrity sha512-+KQLPpx8GFqrhWFfuvrsA4Rjlfbo/QOIo2IvzSgmDwy6YVQZXaSQiNQv/BnrnedaFCf2ONV+w+PMLqXgzn8N9A== - -"@comunica/actor-http-native@~1.22.0": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@comunica/actor-http-native/-/actor-http-native-1.22.1.tgz#60671bc654d6e63c4775f9dd678fd3c67fbfc214" - integrity sha512-BdB+hvQ9CJF9tI42hNhcvTMagOty+jw21LIQDJWI628xMcXZ88BJaUX0Ulc7g2nrWH97ZRm5+KjLC4Zf+OGwZg== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@types/parse-link-header" "^1.0.0" - cross-fetch "^3.0.5" - follow-redirects "^1.5.1" - parse-link-header "^1.0.1" - -"@comunica/actor-rdf-parse-html-microdata@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.22.0.tgz#a4476bc1430e7e367f5b733eeb71eea3ca26e041" - integrity sha512-OdB3Z7ZCtVAcsVU2Vs0ytGbiz0eYkeBwVA3k0vGVhSN3ygng5Thj+t8jxG6QWHlLvaIXfJFh0x57qY5tXkr8uQ== - dependencies: - microdata-rdf-streaming-parser "^1.2.0" - -"@comunica/actor-rdf-parse-html-rdfa@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.22.0.tgz#d7ea6b5e0cb27321990b387348ecb2131ffcfefa" - integrity sha512-yVjYLpm9rbpPiqU1OE4Yioyk/YHtO6ywVMbdOPUNLeOwrtWou8vKX0Xh4UUR24Qrt8nuhE+p0kCJiZZtM1PmSQ== - dependencies: - rdfa-streaming-parser "^1.5.0" - -"@comunica/actor-rdf-parse-html-script@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.22.0.tgz#8bbaabd28c05b6fb6d400c8858ef8e1647fcade1" - integrity sha512-gQSY56wkS/uftRyjQf+/dQFRpA/jZ6z2o2RgGbQc2avgKTkhaiTtPxpfO1oarLskm1sPlQOFo24ZwqUSqjOwcA== - dependencies: - "@comunica/bus-rdf-parse-html" "^1.22.0" - "@rdfjs/types" "*" - relative-to-absolute-iri "^1.0.5" - -"@comunica/actor-rdf-parse-html@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.22.0.tgz#b217e491f77ee4853190c2ab0613c3cf46dbd71e" - integrity sha512-U9pznSpQ1POSH+ekOke3lYKO0fsUbNdv1g1nfuWz/MV3xMCF/d2f3CVBjXRSx9qwyb/2zUrOjBCJRrYkfZ6geQ== - dependencies: - "@comunica/bus-rdf-parse-html" "^1.22.0" - "@rdfjs/types" "*" - htmlparser2 "^7.0.0" - -"@comunica/actor-rdf-parse-jsonld@^1.22.0": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.22.1.tgz#7f071607fe42dd2c5668ce6d744c5fd976ef889d" - integrity sha512-MFFhJ6eGyO40Be80zsFKAbRjkPXr80PvCqvVKsEstdv3u9C6GFV3nqZpCwvsVCz22IPQhW+rzb8ZyasmgHnurA== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@rdfjs/types" "*" - jsonld-context-parser "^2.1.2" - jsonld-streaming-parser "^2.4.0" - stream-to-string "^1.2.0" - -"@comunica/actor-rdf-parse-n3@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.22.0.tgz#c027a84980e2891e5696cd16ac6c01b0c9d62496" - integrity sha512-qHrGfh5k/pZa4imy7m9gJ1kt9aW1uxXqLDKnLKvR2l0m09YiEx/YOYWr1Wtu1YtH/Yyc13OX4mo/OwaE5PfrHQ== - dependencies: - "@types/n3" "^1.4.4" - n3 "^1.6.3" - -"@comunica/actor-rdf-parse-rdfxml@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.22.0.tgz#ea7260db32d409d6568a2e3422fbe7eb0ff10512" - integrity sha512-k47WEAZ6qKEhf1eBZZeI5aVywlrUUKP3BKHw2zKJUjuWq5k+w/rp2WALCyt0Owtb37UlJbET3fTlUhXKvT+2aw== - dependencies: - rdfxml-streaming-parser "^1.5.0" - -"@comunica/actor-rdf-parse-xml-rdfa@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.22.0.tgz#6bf1248e057b7137060db16438da8ab13282ffbc" - integrity sha512-y315YcZTz7AizKf8Jl022IocAJIh3OHSlzNrRNH3zB7i/ch+WHj1VL9pjIf6y77PD4BR75EdeoQCPafpm5Gsbg== - dependencies: - rdfa-streaming-parser "^1.5.0" - -"@comunica/bus-http@~1.22.0": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@comunica/bus-http/-/bus-http-1.22.1.tgz#0ac597826a9aa4e5b230edc62250e6bc445fc46a" - integrity sha512-CZ0NDWZH0k0FOshuRQJzYr3Z+2ZM1vqr9ZepONuaoYDwyKaxl29xPs3hNfjSy6YawjEQP+elr/WDc3TxKIpu8g== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@types/readable-stream" "^2.3.11" - is-stream "^2.0.0" - readable-web-to-node-stream "^3.0.2" - web-streams-node "^0.4.0" - -"@comunica/bus-init@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/bus-init/-/bus-init-1.22.0.tgz#b75976f6e59ad66eb6e7f45dd5257f9486b852dc" - integrity sha512-NIfEJLI8EYFdTWJB0PV/lxPagStPl+gUj3LtOnovcF1ZhC5rgcJSC/tq1r04n0TziY2KVangnLDsF4752LjD6g== - -"@comunica/bus-rdf-parse-html@^1.22.0", "@comunica/bus-rdf-parse-html@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.22.0.tgz#6854946ca7bfecd1f962bf8535b8b112ced93420" - integrity sha512-zqdLdF5qvru1vnzN4t9eXpJhi6khKm1ZWhUovBB9pfYnnyGRCQCPlFpcgJPrD8JfKd6nTvhgdLB5QcAbBb1I0A== - dependencies: - "@rdfjs/types" "*" - -"@comunica/bus-rdf-parse@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.22.0.tgz#e94d93b3d941017f20bb3786fb0f7edbe047934e" - integrity sha512-ohZGlabX5K+dEmn+v4BzP+IZVyRc1ovWItHDLznnRqsHQr8W19WPG21lEFh5kk2MK4YnyQWmlUax1Yxrg7cbXg== - dependencies: - "@comunica/actor-abstract-mediatyped" "^1.22.0" - "@rdfjs/types" "*" - -"@comunica/context-entries@^1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/context-entries/-/context-entries-1.22.0.tgz#31e61298cf93289449ee67197789baa27b89c591" - integrity sha512-HOYr1HdhgavxABpw8saZa9pueLAeGVVd/6cZ3FWcYnH3CvfQu6Ima06Gd00QdIAiGjQm01qQcWCxp0xURiqLKg== - -"@comunica/core@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/core/-/core-1.22.0.tgz#b60bde5e202a48bfb577a237a4ae6d756166477a" - integrity sha512-tgozygRFTd6t6l0YyvfVUWNC+KXWiTlBclkxtzFioQsplKvUSvg1TPjopRk8hhAvMaNRGMNBK2ZafNaqNTkI4w== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@comunica/types" "^1.22.0" - immutable "^3.8.2" - -"@comunica/mediator-combine-union@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/mediator-combine-union/-/mediator-combine-union-1.22.0.tgz#665ca2f5d31bf4805259b93fede7ccbf8810e3a3" - integrity sha512-iUHmEGgWVmk02e80uB7w8xZ5vgTLpiqzrImvbokolJzWcVbobVCUkq8DUxzz3FJbNVRGipZUFrOqkRPAuAX6FA== - -"@comunica/mediator-number@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/mediator-number/-/mediator-number-1.22.0.tgz#81c4b5526663f0ab266662370d6232517d6cb253" - integrity sha512-KDPlJEvj0Lu+JygGXjnH8pf33k01lJ+wgzUlWK216jZJ1Px2lTlfc/COhSqi/e0y+k4ZSBcxx0gnjt2awMpbrQ== - -"@comunica/mediator-race@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/mediator-race/-/mediator-race-1.22.0.tgz#ffe852edb3e163817f4d12ebadd4464561cbdb40" - integrity sha512-hIMaHyf9M4jOS0199OURSVgWFmzkyF2K2keuAb+iHoCH3UUcUnWjPOL1TrdkxvaUnrxmsBWR9SXbnqgMnhIsiQ== - -"@comunica/types@^1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/types/-/types-1.22.0.tgz#ba984437d80d37c52636049325a1a16f6368a142" - integrity sha512-ZQ8p+ZvMAKmdq6Hz2QwqIQ2JScwRMotiWz0iSw2zYHsYQOhVmLg7HSMzMHpWNEA5UWzO/A5A+Co/ONXMhlnx3g== - dependencies: - "@rdfjs/types" "*" - asynciterator "^3.2.0" - immutable "^3.8.2" - sparqlalgebrajs "^3.0.1" - -"@digitalbazaar/credentials-context@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/credentials-context/-/credentials-context-3.1.0.tgz#d9a531d7dc188b598dadaf3465977e1ba4b421ca" - integrity sha512-VKflyFbcid6xH3FJMrd8U9DeCjbYXa2aO3l8yy7MzP6O/0v0EZTV56hMfJT5fN6TSVtQmShv2R3oPCFqFbc2Tg== - -"@digitalbazaar/data-integrity@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz#3fe9eee7bbe750da8977866c8f8ded16bf7d4ce2" - integrity sha512-ohIieLfgtPQU9BYfj0eKNiz55/ZDOk5YSE9FN/Hn0eXzI8WQzLkzRvC8pvBnzuzXDgCsjPdSqYvzok5PoClMBQ== - dependencies: - base58-universal "^2.0.0" - base64url-universal "^2.0.0" - jsonld-signatures "^11.3.0" - -"@digitalbazaar/ed25519-multikey@^1.0.0", "@digitalbazaar/ed25519-multikey@^1.1.0", "@digitalbazaar/ed25519-multikey@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-multikey/-/ed25519-multikey-1.3.0.tgz#68b9a90adc2728c735e27d4052849c127d913ce8" - integrity sha512-wNmgnLv3z5u1Ji/6wlpeunqTr62OF2oCbJflSo8+7sV96SQvZSFU+03+3LOMjCOa6Tg05/K679MwJ0q76QxpOQ== - dependencies: - "@noble/ed25519" "^1.6.0" - base58-universal "^2.0.0" - base64url-universal "^2.0.0" - -"@digitalbazaar/ed25519-signature-2020@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-signature-2020/-/ed25519-signature-2020-5.4.0.tgz#a5dc3d357299c5c94463688d5c157cfc21d8d9fc" - integrity sha512-dHjOv41wiKLoPaE1S9g4NCMKNnelYtBa5fCJKwrqo+cPlLuKcEhtD7w/uuc5non7bf/GX5sa5YfDI/sRUOS6iw== - dependencies: - "@digitalbazaar/ed25519-multikey" "^1.1.0" - "@digitalbazaar/ed25519-verification-key-2020" "^4.1.0" - base58-universal "^2.0.0" - ed25519-signature-2020-context "^1.1.0" - jsonld-signatures "^11.3.0" - -"@digitalbazaar/ed25519-verification-key-2020@^4.1.0", "@digitalbazaar/ed25519-verification-key-2020@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.2.0.tgz#4a394c7c137ead8edf415c83bbd3c40b73c95b49" - integrity sha512-urEVTYkt+uYD8GjdoS6gkm2sKBich1hqx42b6vvUOmNgF0agZ95JlUjiJXEx+VOwu7WSjJSnEBph2Qatkrk1CA== - dependencies: - "@noble/ed25519" "^1.6.0" - base58-universal "^2.0.0" - base64url-universal "^2.0.0" - crypto-ld "^7.0.0" - -"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/-/eddsa-rdfc-2022-cryptosuite-1.2.0.tgz#9c282d5f558ecce4d336e9947b06d45c58615cc9" - integrity sha512-a3PyICe1SI55SgHXgtPRYpzmZ2FMtloQDkVcbhUZ9dpoLcZg5TqsS4U7ap2ggCD4MUXz7uz6ErikJf76Iwyd0g== - dependencies: - "@digitalbazaar/ed25519-multikey" "^1.0.0" - jsonld "^8.1.0" - rdf-canonize "^4.0.1" - -"@digitalbazaar/http-client@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/http-client/-/http-client-3.4.1.tgz#5116fc44290d647cfe4b615d1f3fad9d6005e44d" - integrity sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g== - dependencies: - ky "^0.33.3" - ky-universal "^0.11.0" - undici "^5.21.2" - -"@digitalbazaar/security-context@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/security-context/-/security-context-1.0.1.tgz#badc4b8da03411a32d4e7321ce7c4b355776b410" - integrity sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA== - -"@digitalbazaar/vc@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/vc/-/vc-7.1.0.tgz#589e52ff0b756b720a181c10f0da33913a9f9a0c" - integrity sha512-KjoMnhuZ/+fC/ZThw+GEnR1oOCz67yIwkbK/wbBdZ8wiAH84awBFzJnLogObDS3cTQ+cIhQOfXv+XLRRgxC5Rw== - dependencies: - "@digitalbazaar/credentials-context" "^3.1.0" - ed25519-signature-2018-context "^1.1.0" - jsonld "^8.3.1" - jsonld-signatures "^11.2.1" - -"@emnapi/core@^1.1.0": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" - integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== - dependencies: - "@emnapi/wasi-threads" "1.0.1" - tslib "^2.4.0" - -"@emnapi/runtime@^1.1.0": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" - integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" - integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== - dependencies: - tslib "^2.4.0" - -"@es-joy/jsdoccomment@~0.46.0": - version "0.46.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz#47a2ee4bfc0081f252e058272dfab680aaed464d" - integrity sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ== - dependencies: - comment-parser "1.4.1" - esquery "^1.6.0" - jsdoc-type-pratt-parser "~4.0.0" - -"@esbuild/aix-ppc64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz#830d6476cbbca0c005136af07303646b419f1162" - integrity sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q== - -"@esbuild/android-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz#d11d4fc299224e729e2190cacadbcc00e7a9fd67" - integrity sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A== - -"@esbuild/android-arm@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.4.tgz#5660bd25080553dd2a28438f2a401a29959bd9b1" - integrity sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ== - -"@esbuild/android-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.4.tgz#18ddde705bf984e8cd9efec54e199ac18bc7bee1" - integrity sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ== - -"@esbuild/darwin-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz#b0b7fb55db8fc6f5de5a0207ae986eb9c4766e67" - integrity sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g== - -"@esbuild/darwin-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz#e6813fdeba0bba356cb350a4b80543fbe66bf26f" - integrity sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A== - -"@esbuild/freebsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz#dc11a73d3ccdc308567b908b43c6698e850759be" - integrity sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ== - -"@esbuild/freebsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz#91da08db8bd1bff5f31924c57a81dab26e93a143" - integrity sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ== - -"@esbuild/linux-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz#efc15e45c945a082708f9a9f73bfa8d4db49728a" - integrity sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ== - -"@esbuild/linux-arm@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz#9b93c3e54ac49a2ede6f906e705d5d906f6db9e8" - integrity sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ== - -"@esbuild/linux-ia32@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz#be8ef2c3e1d99fca2d25c416b297d00360623596" - integrity sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ== - -"@esbuild/linux-loong64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz#b0840a2707c3fc02eec288d3f9defa3827cd7a87" - integrity sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA== - -"@esbuild/linux-mips64el@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz#2a198e5a458c9f0e75881a4e63d26ba0cf9df39f" - integrity sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg== - -"@esbuild/linux-ppc64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz#64f4ae0b923d7dd72fb860b9b22edb42007cf8f5" - integrity sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag== - -"@esbuild/linux-riscv64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz#fb2844b11fdddd39e29d291c7cf80f99b0d5158d" - integrity sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA== - -"@esbuild/linux-s390x@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz#1466876e0aa3560c7673e63fdebc8278707bc750" - integrity sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g== - -"@esbuild/linux-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz#c10fde899455db7cba5f11b3bccfa0e41bf4d0cd" - integrity sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA== - -"@esbuild/netbsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz#02e483fbcbe3f18f0b02612a941b77be76c111a4" - integrity sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ== - -"@esbuild/netbsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz#ec401fb0b1ed0ac01d978564c5fc8634ed1dc2ed" - integrity sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw== - -"@esbuild/openbsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz#f272c2f41cfea1d91b93d487a51b5c5ca7a8c8c4" - integrity sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A== - -"@esbuild/openbsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz#2e25950bc10fa9db1e5c868e3d50c44f7c150fd7" - integrity sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw== - -"@esbuild/sunos-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz#cd596fa65a67b3b7adc5ecd52d9f5733832e1abd" - integrity sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q== - -"@esbuild/win32-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz#b4dbcb57b21eeaf8331e424c3999b89d8951dc88" - integrity sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ== - -"@esbuild/win32-ia32@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz#410842e5d66d4ece1757634e297a87635eb82f7a" - integrity sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg== - -"@esbuild/win32-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz#0b17ec8a70b2385827d52314c1253160a0b9bacc" - integrity sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== - -"@fastify/busboy@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.2.1.tgz#9c6db24a55f8b803b5222753b24fe3aea2ba9ca3" - integrity sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q== - dependencies: - text-decoding "^1.0.0" - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== - dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@lerna/create@8.1.9": - version "8.1.9" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.1.9.tgz#6ab7b8514a9a200a4bacb7fa6cf6f01d82d3a154" - integrity sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ== - dependencies: - "@npmcli/arborist" "7.5.4" - "@npmcli/package-json" "5.2.0" - "@npmcli/run-script" "8.1.0" - "@nx/devkit" ">=17.1.2 < 21" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - aproba "2.0.0" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.3" - color-support "1.1.3" - columnify "1.6.0" - console-control-strings "^1.1.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "9.0.0" - dedent "1.5.3" - execa "5.0.0" - fs-extra "^11.2.0" - get-stream "6.0.0" - git-url-parse "14.0.0" - glob-parent "6.0.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - ini "^1.3.8" - init-package-json "6.0.3" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - js-yaml "4.1.0" - libnpmpublish "9.0.9" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "11.0.2" - npm-packlist "8.0.2" - npm-registry-fetch "^17.1.0" - nx ">=17.1.2 < 21" - p-map "4.0.0" - p-map-series "2.1.0" - p-queue "6.6.2" - p-reduce "^2.1.0" - pacote "^18.0.6" - pify "5.0.0" - read-cmd-shim "4.0.0" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.4" - set-blocking "^2.0.0" - signal-exit "3.0.7" - slash "^3.0.0" - ssri "^10.0.6" - string-width "^4.2.3" - strip-ansi "^6.0.1" - strong-log-transformer "2.1.0" - tar "6.2.1" - temp-dir "1.0.0" - upath "2.0.1" - uuid "^10.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "5.0.1" - wide-align "1.1.5" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "17.7.2" - yargs-parser "21.1.1" - -"@mapbox/node-pre-gyp@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - -"@napi-rs/wasm-runtime@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz#d27788176f250d86e498081e3c5ff48a17606918" - integrity sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== - dependencies: - "@emnapi/core" "^1.1.0" - "@emnapi/runtime" "^1.1.0" - "@tybys/wasm-util" "^0.9.0" - -"@noble/ed25519@^1.6.0": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" - integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nolyfill/is-core-module@1.0.39": - version "1.0.39" - resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" - integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== - -"@npmcli/agent@^2.0.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" - integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/arborist@7.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" - integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.1" - "@npmcli/installed-package-contents" "^2.1.0" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^7.1.1" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.1.0" - "@npmcli/query" "^3.1.0" - "@npmcli/redact" "^2.0.0" - "@npmcli/run-script" "^8.1.0" - bin-links "^4.0.4" - cacache "^18.0.3" - common-ancestor-path "^1.0.1" - hosted-git-info "^7.0.2" - json-parse-even-better-errors "^3.0.2" - json-stringify-nice "^1.1.4" - lru-cache "^10.2.2" - minimatch "^9.0.4" - nopt "^7.2.1" - npm-install-checks "^6.2.0" - npm-package-arg "^11.0.2" - npm-pick-manifest "^9.0.1" - npm-registry-fetch "^17.0.1" - pacote "^18.0.6" - parse-conflict-json "^3.0.0" - proc-log "^4.2.0" - proggy "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^3.0.1" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - ssri "^10.0.6" - treeverse "^3.0.0" - walk-up-path "^3.0.1" - -"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" - integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^5.0.0": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" - integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== - dependencies: - "@npmcli/promise-spawn" "^7.0.0" - ini "^4.1.3" - lru-cache "^10.0.1" - npm-pick-manifest "^9.0.0" - proc-log "^4.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^4.0.0" - -"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" - integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/map-workspaces@^3.0.2": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" - integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - read-package-json-fast "^3.0.0" - -"@npmcli/metavuln-calculator@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf" - integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g== - dependencies: - cacache "^18.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^18.0.0" - proc-log "^4.1.0" - semver "^7.3.5" - -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/package-json@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" - integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^4.0.0" - semver "^7.5.3" - -"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" - integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^4.0.0" - semver "^7.5.3" - -"@npmcli/promise-spawn@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" - integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== - dependencies: - which "^4.0.0" - -"@npmcli/query@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" - integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== - dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/redact@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" - integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== - -"@npmcli/run-script@8.1.0", "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" - integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.0.0" - "@npmcli/promise-spawn" "^7.0.0" - node-gyp "^10.0.0" - proc-log "^4.0.0" - which "^4.0.0" - -"@nrwl/tao@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-17.2.5.tgz#48b941569f83a1669023aeecaaf64f0ea09b5aec" - integrity sha512-hA89BirzFb2MBm26ZPTTJ/RWRjmZ9R39J8321kVEldehStluA4E5zobNd7MJVp77fBK/CCTlIhFeUEP9qmxhZA== - dependencies: - nx v17.2.5 - tslib "^2.3.0" - -"@nx/devkit@>=17.1.2 < 21": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-20.3.2.tgz#b16e66771dd7dd24670eafa060c01f8af1191645" - integrity sha512-VhbxEsSTCZlOVgjuQC+6HQmb9Oz9VoHUeo4001Pw6BFBcSXZUi5q37C/lxbAgQPnMKLkFcLva3WKZ+fOLwhGIg== - dependencies: - ejs "^3.1.7" - enquirer "~2.3.6" - ignore "^5.0.4" - minimatch "9.0.3" - semver "^7.5.3" - tmp "~0.2.1" - tslib "^2.3.0" - yargs-parser "21.1.1" - -"@nx/nx-darwin-arm64@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.3.2.tgz#bc212fdee150b49cdfe72697c7e3234bcbc07caa" - integrity sha512-lQOXMIPmE9o36TuZ+SX6iq7PPWa3s1fjNRqCujlviExX69245NNCMxd754gXlLrsxC1onrx/zmJciKmmEWDIiw== - -"@nx/nx-darwin-arm64@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.5.tgz#411b861cb0a98540082b7639dbaaa9f48044a25a" - integrity sha512-AGF/XnMkXymS8xYMsbeyNKZWKflfU8TTqEJqlcADMHYcr8OD1Jyq1YYHp/vvPBWqEhUL4bx3GPspQn5YiiCrWw== - -"@nx/nx-darwin-x64@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-20.3.2.tgz#198d4d985e14954fe4d7b00075f9b2a95eed5161" - integrity sha512-RvvSz4QYVOYOfC8sUE63b6dy8iHk2AEI0r1FF5FCQuqE1DdTeTjPETY2sY35tRqF+mO/6oLGp2+m9ti/ysRoTg== - -"@nx/nx-darwin-x64@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.5.tgz#94900e137763b03abeb41f2279e214ea606ad9a8" - integrity sha512-YQQG+kijDNedE6bwEIeKWtVQOxJD+NHW69z6sb/S+ub8NO293YgNtYXgilet9RwOKBubeSyBqWr+yYbRhOuz+A== - -"@nx/nx-freebsd-x64@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.3.2.tgz#42b5a8c045d60d69e9540aeb74b62f8208e41b73" - integrity sha512-KBDTyGn1evlZ17pupwRUDh2wrCMuHhP2j8cOCdgF5cl7vRki8BOK9yyL6jD11d/d/6DgXzy1jmQEX4Xx+AGCug== - -"@nx/nx-freebsd-x64@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.5.tgz#731ffa2f70142a28ce33fd59ef564e24ba94ee5f" - integrity sha512-AzcYELtNDukSTtO6zTAuu9pUI2634/2ZFLdS15C9cqUrK0XNvBcbj6R1KNGjgaBDUJc9H49+fqU8VnLPpJjBKQ== - -"@nx/nx-linux-arm-gnueabihf@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.3.2.tgz#a56e2fca7f56efef9f04c91c93ae4065a4a1c46c" - integrity sha512-mW+OcOnJEMvs7zD3aSwEG3z5M9bI4CuUU5Q/ePmnNzWIucRHpoAMNt/Sd+yu6L4+QttvoUf967uwcMsX8l4nrw== - -"@nx/nx-linux-arm-gnueabihf@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.5.tgz#4d21f74981baeb7528ff2259a5a433e14af6d8f8" - integrity sha512-24Q5N4krcSV6rbFYGRRgbHTc2eSDoJSWesvAtxAW5Sgh6+wAuqFKVwLwY9ZOn1GQwlySB87YwzH2BMkOfEuorw== - -"@nx/nx-linux-arm64-gnu@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.3.2.tgz#1468b2b3425f8398f17b797703e153d7e66cca2c" - integrity sha512-hbXpZqUvGY5aeEWvh0SNsiYjP1ytSM30XOT6qN6faLO2CL/7j9D2UB69SKOqF3TJOvuNU6cweFgZCxyGfXBYIQ== - -"@nx/nx-linux-arm64-gnu@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.5.tgz#067d2e9adccbd1bff4dbad7ac1338c02ddb3bf9c" - integrity sha512-ty08Jnhk/eCVzxdm6o9EaGAZQ4t1WQCO9I/FjriEqtt4e5If6YKJPGjRzu/1OCvppv4d7j0SEN6FiyGkESpBPw== - -"@nx/nx-linux-arm64-musl@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.3.2.tgz#4c139a23f321d9115f9e2c3ef7f55bc0363c2d39" - integrity sha512-HXthtN7adXCNVWs2F4wIqq2f7BcKTjsEnqg2LWV5lm4hRYvMfEvPftb0tECsEhcSQQYcvIJnLfv3vtu9HZSfVA== - -"@nx/nx-linux-arm64-musl@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.5.tgz#7257b80b3e36070136d06d38f7a45d5732146c80" - integrity sha512-iW/hOgkpELTTu53UYNYAUvs5dAXDR94P50HZFvTQeTQH6xr8igMdOBFdApYFZIjD7IrKqNBSeAiyl4TyI6vFag== - -"@nx/nx-linux-x64-gnu@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz#5935d5b71029284be63a9106b8bd50df1804c9e3" - integrity sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg== - -"@nx/nx-linux-x64-gnu@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.5.tgz#21d0ed9ecb8fc3742ba5220a4f2a6f4e0d9780d4" - integrity sha512-BJi195AOHSHurMrPzT2mNGslIDn4LVxfKKdiRqVeOvQxT3cZij4fzPTUYxdOFnrWU5YPfW4A9p3ydFz8MDapOg== - -"@nx/nx-linux-x64-musl@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz#4d4ff695efaa1207de5b3354d8fe08341f4d004f" - integrity sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw== - -"@nx/nx-linux-x64-musl@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.5.tgz#ed68c1df2521259ef1e522f034af63eaa19771ea" - integrity sha512-r1TrCFvdAIvogNry3Oy0IrWT2Ed5nZHR0lcuW5ImF0HinMmH/o4Ey7Q4IRo5hB88gxq4AUTWt+WoQbImIvoGPg== - -"@nx/nx-win32-arm64-msvc@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.3.2.tgz#992ce1f483a96075cdfd4b2b9c8ccb6c5e6144b2" - integrity sha512-yLjacZND7C1XmsC0jfRLSgeLWZUw2Oz+u3nXNvj5JX6YHtYTVLFnRbTAcI+pG2Y6v0Otf2GKb3VT5d1mQb8JvA== - -"@nx/nx-win32-arm64-msvc@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.5.tgz#151c69871e59b061eace5ef9dedac2b684be4fa3" - integrity sha512-TyMH8mys+r4Vgq5LYE6zY70LsL2F7JC85O+jHeVPR0vDNGm5Nb/UHobT5Y/PLpLxIx0aIeRuu6VI3j3oh1JhNw== - -"@nx/nx-win32-x64-msvc@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.3.2.tgz#0508f0ea8ee0727f34dcadfecf6b7b4921484776" - integrity sha512-oDhcctfk0UB1V+Otp1161VKNMobzkFQxGyiEIjp0CjCBa2eRHC1r35L695F1Hj0bvLQPSni9XIe9evh2taeAkg== - -"@nx/nx-win32-x64-msvc@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.5.tgz#89d2ffa519f8ab4e17469b7d65e353d787feb52e" - integrity sha512-I/LWvNasB+iUEzIeejbuaeeezMCfMjpDBsiPdnS5nfHMVnTOrIbfzQOWLWUr+/7R0fYl1BXTp352iaD+M10Agw== - -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/core@^4.2.1": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^18.0.0": - version "18.1.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" - integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== - -"@octokit/plugin-enterprise-rest@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^6.1.2": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" - integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== - dependencies: - "@octokit/tsconfig" "^1.0.2" - "@octokit/types" "^9.2.3" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^7.1.2": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" - integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== - dependencies: - "@octokit/types" "^10.0.0" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@19.0.11": - version "19.0.11" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" - integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== - dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^6.1.2" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.1.2" - -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" - integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@panva/asn1.js@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" - integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@rdfjs/data-model@^1.3.4": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@rdfjs/data-model/-/data-model-1.3.4.tgz#2b1b3e52755ab1283bf66aa2d3ac97fd8a0332c2" - integrity sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ== - dependencies: - "@rdfjs/types" ">=1.0.1" - -"@rdfjs/types@*", "@rdfjs/types@>=1.0.0", "@rdfjs/types@>=1.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-2.0.1.tgz#f10b50ceffff00b961c4265e60ac9f74550251da" - integrity sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA== - dependencies: - "@types/node" "*" - -"@rdfjs/types@^1.0.0", "@rdfjs/types@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-1.1.2.tgz#9c2f9848c44c26d383bed2a808571de3b93b808d" - integrity sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg== - dependencies: - "@types/node" "*" - -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - -"@seald-io/binary-search-tree@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz#165a9a456eaa30d15885b25db83861bcce2c6a74" - integrity sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA== - -"@seald-io/nedb@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@seald-io/nedb/-/nedb-3.1.0.tgz#6105345a18596f6f9d69f46d7f572efdae32af8e" - integrity sha512-5G0hCQGJjOelOutvW1l4VD581XMhTPxpj1BUaCWTEM2MPXR9TzIr0MKMnEjnTA5nEKfujPyvVW7iF3etm1/gKQ== - dependencies: - "@seald-io/binary-search-tree" "^1.0.2" - localforage "^1.9.0" - util "^0.12.4" - -"@semapps/ldp@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/ldp/-/ldp-1.0.10.tgz#ac09d77b10782d18a7ca5c2781983620d2913f1e" - integrity sha512-3RHJ1/hGUdCH9oNFYVrvCpliqg6uEGmFjHXcnaJwE60oJjMgd5rylsG6zUrZK6ArGwSTiQK9mTQiqMlup/SDEw== - dependencies: - "@rdfjs/data-model" "^1.3.4" - "@semapps/middlewares" "1.0.10" - "@semapps/mime-types" "1.0.10" - "@semapps/ontologies" "1.0.10" - "@semapps/triplestore" "1.0.10" - dashify "^2.0.0" - http-link-header "^1.1.1" - mime-types "^2.1.35" - moleculer "^0.14.17" - moleculer-db "^0.8.16" - moleculer-schedule "^0.2.3" - moleculer-web "^0.10.0-beta1" - node-fetch "^2.6.6" - path-to-regexp "^6.2.0" - rdf-parse "^1.7.0" - sharp "^0.31.2" - sparqljs "^3.5.2" - speakingurl "^14.0.1" - streamify-string "^1.0.1" - url-join "^4.0.1" - uuid "^9.0.1" - -"@semapps/middlewares@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/middlewares/-/middlewares-1.0.10.tgz#100122e0b76c6a964199f3888dbd94ab00a113de" - integrity sha512-eyWJr5XLJ93Rw90fjw8WxAOHbrDMyAjjK5HG6zaxeYct7DsVBXB8mgIBmqkl+q/GZddY9j4kNGBjx4sm5JLhuA== - dependencies: - "@semapps/mime-types" "1.0.10" - busboy "^0.3.1" - memory-streams "^0.1.3" - moleculer "^0.14.18" - -"@semapps/mime-types@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/mime-types/-/mime-types-1.0.10.tgz#4724b72ffb91e832da94909efb739be3606e3977" - integrity sha512-QfAlYiuYhZktn+AsJvo4U2bgcuVsVm5JQDVSz5E2amVlfrkB0U9clUsSGkktBy0p6kUmkuD8m54uJx9fSnrARg== - dependencies: - moleculer "^0.14.18" - negotiator "^0.6.2" - -"@semapps/ontologies@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/ontologies/-/ontologies-1.0.10.tgz#77eeb691fc06e85a7a40d4630c5e755bfba5c34e" - integrity sha512-FBJ+ZT0cxpYrxbO/y4RO+aew4Ljfv8p+AQbCbPeJIDNd9lXiL4IgqEsBHobYuvvs6JiCjIttURzbYOxExZBk6Q== - dependencies: - "@semapps/triplestore" "1.0.10" - moleculer-db "^0.8.16" - node-fetch "^2.6.6" - -"@semapps/triplestore@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/triplestore/-/triplestore-1.0.10.tgz#c52a6bae54380eb353afee0c26147b95bd8c045e" - integrity sha512-mBO2nm8W35M4vNL4jiUWq8VFE1iVIzKVSQdLNq/vPPqFW09aSqz26xe5qiqAi4NzWnQ0Gdjjecnuasi3lW/uGw== - dependencies: - "@semapps/middlewares" "1.0.10" - "@semapps/mime-types" "1.0.10" - jsonld "^3.3.2" - moleculer "^0.14.29" - negotiator "^0.6.2" - node-fetch "^2.6.6" - sparqljs "^3.5.2" - sparqljson-parse "^1.5.1" - string-template "^1.0.0" - url-join "^4.0.1" - uuid "^9.0.1" - -"@sigstore/bundle@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" - integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - -"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" - integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== - -"@sigstore/protobuf-specs@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz#7dd46d68b76c322873a2ef7581ed955af6f4dcde" - integrity sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ== - -"@sigstore/sign@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" - integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - make-fetch-happen "^13.0.1" - proc-log "^4.2.0" - promise-retry "^2.0.1" - -"@sigstore/tuf@^2.3.4": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" - integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - tuf-js "^2.2.1" - -"@sigstore/verify@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" - integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.1.0" - "@sigstore/protobuf-specs" "^0.3.2" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@tufjs/canonical-json@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" - integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== - -"@tufjs/models@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" - integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.4" - -"@tybys/wasm-util@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" - integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== - dependencies: - tslib "^2.4.0" - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/http-link-header@^1.0.1": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.7.tgz#bb1a1671a8c6d93717e0057072e9253113fdc875" - integrity sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5.14": - version "29.5.14" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" - integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/jsonld@1.5.15": - version "1.5.15" - resolved "https://registry.yarnpkg.com/@types/jsonld/-/jsonld-1.5.15.tgz#55dde3077c23986e5f2a3b62356d667bfb03fc71" - integrity sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/luxon@~3.6.0": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.6.2.tgz#be6536931801f437eafcb9c0f6d6781f72308041" - integrity sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" - integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== - -"@types/n3@^1.4.4": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@types/n3/-/n3-1.21.1.tgz#5e9f93f50e7a77f8c40bffa3e66f67209633c235" - integrity sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw== - dependencies: - "@rdfjs/types" "^1.1.0" - "@types/node" "*" - -"@types/node@*": - version "22.10.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.7.tgz#14a1ca33fd0ebdd9d63593ed8d3fbc882a6d28d7" - integrity sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg== - dependencies: - undici-types "~6.20.0" - -"@types/node@^13.1.0": - version "13.13.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" - integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== - -"@types/node@^18.0.0": - version "18.19.71" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.71.tgz#96d4f0a0be735ead6c8998c62a4b2c0012a5d09a" - integrity sha512-evXpcgtZm8FY4jqBSN8+DmOTcVkkvTmAayeo4Wf3m1xAruyVGzGuDh/Fb/WWX2yLItUiho42ozyJjB0dw//Tkw== - dependencies: - undici-types "~5.26.4" - -"@types/normalize-package-data@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/parse-link-header@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.1.tgz#6eade790736a050b9242c7c6b2fceda9b3dc394a" - integrity sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg== - -"@types/readable-stream@^2.3.11": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/semver@^7.3.12": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/sparqljs@^3.1.2": - version "3.1.12" - resolved "https://registry.yarnpkg.com/@types/sparqljs/-/sparqljs-3.1.12.tgz#29a030615a3aed6eb05fbd618ecf58ab345506f8" - integrity sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ== - dependencies: - "@rdfjs/types" ">=1.0.0" - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/url-join@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.3.tgz#09ede6753b846a274301b9bd3a6ed117050daecd" - integrity sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^15.0.0": - version "15.0.19" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" - integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^7.1.1": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" - integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/type-utils" "7.18.0" - "@typescript-eslint/utils" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/parser@^7.5.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" - integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== - dependencies: - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/scope-manager@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" - integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== - dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - -"@typescript-eslint/type-utils@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" - integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== - dependencies: - "@typescript-eslint/typescript-estree" "7.18.0" - "@typescript-eslint/utils" "7.18.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/types@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" - integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" - integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== - dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/utils@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" - integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" - -"@typescript-eslint/utils@^5.10.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@typescript-eslint/visitor-keys@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" - integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== - dependencies: - "@typescript-eslint/types" "7.18.0" - eslint-visitor-keys "^3.4.3" - -"@ungap/structured-clone@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" - integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -"@yarnpkg/parsers@3.0.0-rc.46": - version "3.0.0-rc.46" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" - integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - -"@yarnpkg/parsers@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.2.tgz#48a1517a0f49124827f4c37c284a689c607b2f32" - integrity sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - -"@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - -"@zkochan/js-yaml@0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz#4b0cb785220d7c28ce0ec4d0804deb5d821eae89" - integrity sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== - dependencies: - argparse "^2.0.1" - -JSONStream@^1.3.3, JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.14.0, acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" - integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== - -aggregate-error@^3.0.0, aggregate-error@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@2.0.0, "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-docs-informative@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" - integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -args@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" - integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" - integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.flatmap@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" - integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.reduce@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" - integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-array-method-boxes-properly "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - is-string "^1.0.7" - -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1@^0.2.6, asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-never@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.4.0.tgz#b0d4988628c87f35eb94716cc54422a63927e175" - integrity sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA== - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -async@^3.1.0, async@^3.2.3: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -asynciterator@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-3.9.0.tgz#6e9a69623c4cec07e4cd85130416d52899f4e93f" - integrity sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" - integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== - -axios@^1.5.1, axios@^1.7.4: - version "1.7.9" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" - integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -babel-walk@3.0.0-canary-5: - version "3.0.0-canary-5" - resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" - integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== - dependencies: - "@babel/types" "^7.9.6" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.10" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" - integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== - dependencies: - safe-buffer "^5.0.1" - -base58-universal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base58-universal/-/base58-universal-2.0.0.tgz#243c8256591afa7d5210f87ad1655e05081f4be4" - integrity sha512-BgkgF8zVLOAygszG4W8NkLm7iXrw80VYAOcedrzANrIhS14+4W6zVqjyGTFUBM/FpqkHUt8aAYd4DbBBfn3zKg== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64url-universal@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-1.1.0.tgz#94da6356c1d43ead55b1d91c045c0a5b09ec8181" - integrity sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA== - dependencies: - base64url "^3.0.0" - -base64url-universal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-2.0.0.tgz#6023785c0e349a90de1cf396e8a4519750a4e67b" - integrity sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw== - dependencies: - base64url "^3.0.1" - -base64url@^3.0.0, base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bcrypt@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.1.tgz#0f732c6dcb4e12e5b70a25e326a72965879ba6e2" - integrity sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww== - dependencies: - "@mapbox/node-pre-gyp" "^1.0.11" - node-addon-api "^5.0.0" - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -bin-links@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" - integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird@^3.0.0, bluebird@^3.1.1, bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@^1.19.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.24.0: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== - dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" - node-releases "^2.0.19" - update-browserslist-db "^1.1.1" - -bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buildcheck@~0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" - integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== - -bull@^3.15.0: - version "3.29.3" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" - integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== - dependencies: - cron-parser "^2.13.0" - debuglog "^1.0.0" - get-port "^5.1.1" - ioredis "^4.27.0" - lodash "^4.17.21" - p-timeout "^3.2.0" - promise.prototype.finally "^3.1.2" - semver "^7.3.2" - util.promisify "^1.0.1" - uuid "^8.3.0" - -busboy@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" - integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== - dependencies: - dicer "0.3.0" - -byte-size@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" - integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== - -bytes@3.1.2, bytes@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^18.0.0, cacache@^18.0.3: - version "18.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" - integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" - integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.0, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" - integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== - dependencies: - call-bind-apply-helpers "^1.0.1" - get-intrinsic "^1.2.6" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001688: - version "1.0.30001695" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz#39dfedd8f94851132795fdf9b79d29659ad9c4d4" - integrity sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw== - -canonicalize@^1.0.1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" - integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -"cas@https://github.com/joshchan/node-cas": - version "0.0.5" - resolved "https://github.com/joshchan/node-cas#344a8bfba9d054e2e378adaf95b720c898ae48a2" - dependencies: - cheerio "0.19.0" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chalk@2.4.2, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-parser@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" - integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== - dependencies: - is-regex "^1.0.3" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cheerio@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925" - integrity sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ== - dependencies: - css-select "~1.0.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "~3.8.1" - lodash "^3.2.0" - -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -ci-info@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83" - integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A== - -cjs-module-lexer@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" - integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@3.1.0, cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -cmd-shim@6.0.3, cmd-shim@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" - integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@1.1.3, color-support@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -columnify@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.15.1, commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -comment-parser@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" - integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -component-emitter@^1.2.0, component-emitter@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" - integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -consolidate@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" - integrity sha512-PZFskfj64QnpKVK9cPdY36pyWEhZNM+srRVqtwMiVTlnViSoZcvX35PpBhhUcyLTHXYvz7pZRmxvsqwzJqg9kA== - dependencies: - bluebird "^3.1.1" - -constantinople@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" - integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== - dependencies: - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.1" - -content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -conventional-changelog-angular@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" - integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-core@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" - integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^6.0.0" - conventional-commits-parser "^4.0.0" - dateformat "^3.0.3" - get-pkg-repo "^4.2.1" - git-raw-commits "^3.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^5.0.0" - normalize-package-data "^3.0.3" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - -conventional-changelog-preset-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" - integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== - -conventional-changelog-writer@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" - integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== - dependencies: - conventional-commits-filter "^3.0.0" - dateformat "^3.0.3" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - meow "^8.1.2" - semver "^7.0.0" - split "^1.0.1" - -conventional-commits-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" - integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.1" - -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== - dependencies: - JSONStream "^1.3.5" - is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" - -conventional-recommended-bump@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" - integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^3.0.0" - conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" - git-raw-commits "^3.0.0" - git-semver-tags "^5.0.0" - meow "^8.1.2" - -convert-source-map@^1.4.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" - integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== - -cookie@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - -cookiejar@^2.1.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" - integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" - integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - -cpu-features@~0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" - integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== - dependencies: - buildcheck "~0.0.6" - nan "^2.19.0" - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -credentials-context@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/credentials-context/-/credentials-context-1.0.0.tgz#a63cb4b7e0a4ca4460d247b7c9370a58b10ebac9" - integrity sha512-rF3GPhTUGY58xlpuVRif/1i0BxVpynpmFdGNS81S2ezdKPSKoFke5ZOZWB8ZUvGi8bV8CuDM+ZcM/uf4z0PQVQ== - -cron-parser@^2.13.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" - integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== - dependencies: - is-nan "^1.3.0" - moment-timezone "^0.5.31" - -cron-parser@^4.2.0, cron-parser@^4.2.1, cron-parser@^4.3.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" - integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== - dependencies: - luxon "^3.2.1" - -cron@^1.8.2: - version "1.8.3" - resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.3.tgz#2a61d7b15848716885834ec56ac072f4b9744ebd" - integrity sha512-JYR/QZFklJCIPndBLfd/2nU1nSlCMrUdtQ2mGLXSVM/qqqEK7DOrFR0gsEiyeqs0PdWrs0ve1ggH4V7XksDwXg== - dependencies: - luxon "^1.23.x" - -cron@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cron/-/cron-4.3.0.tgz#c5a62872f74f72294cf1cadef34c72ad8d8f50b5" - integrity sha512-ciiYNLfSlF9MrDqnbMdRWFiA6oizSF7kA1osPP9lRzNu0Uu+AWog1UKy7SkckiDY2irrNjeO6qLyKnXC8oxmrw== - dependencies: - "@types/luxon" "~3.6.0" - luxon "~3.6.0" - -cross-fetch@^3.0.5, cross-fetch@^3.0.6: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" - integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== - dependencies: - node-fetch "^2.7.0" - -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0: - version "6.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" - integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-ld@^3.7.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-3.9.0.tgz#4f42849a143b5d65f28b018d80bc0fee6cd37ba8" - integrity sha512-PFE7V6A2QNnUp6iiPVEZI4p8wsztkEWLbY1BAXVnclm/aw4KGwpJ+1Ds4vQUCJ5BsWxj15fwE5rHQ8AWaWB2nw== - dependencies: - base64url-universal "^1.0.1" - bs58 "^4.0.1" - node-forge "~0.10.0" - semver "^6.2.0" - optionalDependencies: - sodium-native "^3.2.0" - -crypto-ld@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-7.0.0.tgz#ad593cce31da84e60bd14fd2b25221f97e8a3b74" - integrity sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw== - -css-select@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0" - integrity sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw== - dependencies: - boolbase "~1.0.0" - css-what "1.0" - domutils "1.4" - nth-check "~1.0.0" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA== - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c" - integrity sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw== - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -dashify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dashify/-/dashify-2.0.0.tgz#fff270ca2868ca427fee571de35691d6e437a648" - integrity sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -datauri@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/datauri/-/datauri-2.0.0.tgz#ff0ee23729935a6bcc81f301621bed3e692bf3c7" - integrity sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g== - dependencies: - image-size "^0.7.3" - mimer "^1.0.0" - -dateformat@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.7: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debuglog@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -dedent@1.5.3, dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" - integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^1.1.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" - integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== - -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dicer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" - integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== - dependencies: - streamsearch "0.1.2" - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -doctypes@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" - integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - integrity sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ== - dependencies: - domelementtype "1" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@1.4: - version "1.4.3" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f" - integrity sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w== - dependencies: - domelementtype "1" - -domutils@1.5, domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" - integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@~10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" - integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== - -dotenv-expand@~11.0.6: - version "11.0.7" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" - integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== - dependencies: - dotenv "^16.4.5" - -dotenv-flow@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/dotenv-flow/-/dotenv-flow-3.3.0.tgz#e22341c035d5672b923bf76feb35999f728ee456" - integrity sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A== - dependencies: - dotenv "^8.6.0" - -dotenv@^16.4.5, dotenv@~16.4.5: - version "16.4.7" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" - integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== - -dotenv@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -dotenv@~16.3.1: - version "16.3.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" - integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== - -dunder-proto@^1.0.0, dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ed25519-signature-2018-context@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz#68002ea7497c32e8170667cfd67468dedf7d220e" - integrity sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA== - -ed25519-signature-2020-context@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz#b2f724f07db154ddf0fd6605410d88736e56fd07" - integrity sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.7: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.5.73: - version "1.5.84" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz#8e334ca206bb293a20b16418bf454783365b0a95" - integrity sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g== - -email-templates@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-2.7.1.tgz#d7e5641fec0944c9b68a6d272d28e5685b3b223c" - integrity sha512-WJ0csXaBK3gV90dwBco5d3liu/XSH1jPEn3qfLDES/AsxOoMv4IRqp/MsQduKBexJZ81577OUbrdgnzvK2Kk9Q== - dependencies: - bluebird "^3.0.0" - consolidate "^0.14.2" - debug "^2.2.0" - glob "^6.0.0" - juice "^4.1.0" - lodash "^4.0.1" - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz#91eb1db193896b9801251eeff1c6980278b1e404" - integrity sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" - integrity sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ== - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" - integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.0, env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@7.13.0: - version "7.13.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" - integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.3, es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: - version "1.23.9" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" - integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.3" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.2.7" - get-proto "^1.0.0" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-regex "^1.2.1" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.0" - math-intrinsics "^1.1.0" - object-inspect "^1.13.3" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.3" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.18" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.0.0, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.5.3: - version "1.6.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" - integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== - -es-object-atoms@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" - integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== - dependencies: - is-callable "^1.2.7" - is-date-object "^1.0.5" - is-symbol "^1.0.4" - -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -esbuild-jest@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/esbuild-jest/-/esbuild-jest-0.5.0.tgz#7a9964bfdecafca3b675a8aeb08193bcdba8b9d7" - integrity sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ== - dependencies: - "@babel/core" "^7.12.17" - "@babel/plugin-transform-modules-commonjs" "^7.12.13" - babel-jest "^26.6.3" - -esbuild@^0.25.4: - version "0.25.4" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.4.tgz#bb9a16334d4ef2c33c7301a924b8b863351a0854" - integrity sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q== - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.4" - "@esbuild/android-arm" "0.25.4" - "@esbuild/android-arm64" "0.25.4" - "@esbuild/android-x64" "0.25.4" - "@esbuild/darwin-arm64" "0.25.4" - "@esbuild/darwin-x64" "0.25.4" - "@esbuild/freebsd-arm64" "0.25.4" - "@esbuild/freebsd-x64" "0.25.4" - "@esbuild/linux-arm" "0.25.4" - "@esbuild/linux-arm64" "0.25.4" - "@esbuild/linux-ia32" "0.25.4" - "@esbuild/linux-loong64" "0.25.4" - "@esbuild/linux-mips64el" "0.25.4" - "@esbuild/linux-ppc64" "0.25.4" - "@esbuild/linux-riscv64" "0.25.4" - "@esbuild/linux-s390x" "0.25.4" - "@esbuild/linux-x64" "0.25.4" - "@esbuild/netbsd-arm64" "0.25.4" - "@esbuild/netbsd-x64" "0.25.4" - "@esbuild/openbsd-arm64" "0.25.4" - "@esbuild/openbsd-x64" "0.25.4" - "@esbuild/sunos-x64" "0.25.4" - "@esbuild/win32-arm64" "0.25.4" - "@esbuild/win32-ia32" "0.25.4" - "@esbuild/win32-x64" "0.25.4" - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-airbnb@^19.0.4: - version "19.0.4" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" - integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== - dependencies: - eslint-config-airbnb-base "^15.0.0" - object.assign "^4.1.2" - object.entries "^1.1.5" - -eslint-config-prettier@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.6.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz#e69925936a771a9cb2de418ccebc4cdf6c0818aa" - integrity sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow== - dependencies: - "@nolyfill/is-core-module" "1.0.39" - debug "^4.3.7" - enhanced-resolve "^5.15.0" - fast-glob "^3.3.2" - get-tsconfig "^4.7.5" - is-bun-module "^1.0.2" - is-glob "^4.0.3" - stable-hash "^0.0.4" - -eslint-module-utils@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== - dependencies: - debug "^3.2.7" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-import@^2.29.1: - version "2.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== - dependencies: - "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" - hasown "^2.0.2" - is-core-module "^2.15.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - object.groupby "^1.0.3" - object.values "^1.2.0" - semver "^6.3.1" - string.prototype.trimend "^1.0.8" - tsconfig-paths "^3.15.0" - -eslint-plugin-jest@^27.9.0: - version "27.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" - integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-jsdoc@^48.2.1: - version "48.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz#7c8dae6ce0d814aff54b87fdb808f02635691ade" - integrity sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA== - dependencies: - "@es-joy/jsdoccomment" "~0.46.0" - are-docs-informative "^0.0.2" - comment-parser "1.4.1" - debug "^4.3.5" - escape-string-regexp "^4.0.0" - espree "^10.1.0" - esquery "^1.6.0" - parse-imports "^2.1.1" - semver "^7.6.3" - spdx-expression-parse "^4.0.0" - synckit "^0.9.1" - -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-prettier@^5.1.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz#c4af01691a6fa9905207f0fbba0d7bea0902cce5" - integrity sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.9.1" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== - -eslint@^8.2.0: - version "8.57.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^10.1.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" - integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== - dependencies: - acorn "^8.14.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2, esquery@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@^1.8.1, etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter2@^6.4.9: - version "6.4.9" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" - integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -expo-server-sdk@^3.4.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/expo-server-sdk/-/expo-server-sdk-3.13.0.tgz#c64e3949ec756d9ae69ccc108c65c3da511ed37a" - integrity sha512-EeGs8PlXmnP2uDpjVhnclQmlua3A0swEj3BzqoRiHfU4WPsN5v3eHhqjjwl+Lf2rleKW2L9lhWp6sCL1vPMnAg== - dependencies: - node-fetch "^2.6.0" - promise-limit "^2.7.0" - promise-retry "^2.0.1" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -express-session@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.18.1.tgz#88d0bbd41878882840f24ec6227493fcb167e8d5" - integrity sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA== - dependencies: - cookie "0.7.2" - cookie-signature "1.0.7" - debug "2.6.9" - depd "~2.0.0" - on-headers "~1.0.2" - parseurl "~1.3.3" - safe-buffer "5.2.1" - uid-safe "~2.1.5" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9, fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-validator@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/fastest-validator/-/fastest-validator-1.19.0.tgz#96f792ce774a81a76efba32974e669c47a2b15eb" - integrity sha512-wUfJBrXmccVz4kARAiWTkuqsC6EFeqbNxwfysCDk+maExBPP8KxyBwaWtayrWjKIaBIbaz+rqI2kel6ecayxcg== - -fastq@^1.6.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" - integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -figures@3.2.0, figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== - -follow-redirects@^1.15.6, follow-redirects@^1.5.1: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^2.3.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" - integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - safe-buffer "^5.2.1" - -form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -formidable@^1.2.0: - version "1.2.6" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" - integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2, fresh@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -front-matter@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-4.0.2.tgz#b14e54dc745cfd7293484f3210d15ea4edd7f4d5" - integrity sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== - dependencies: - js-yaml "^3.13.1" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.0, fs-extra@^11.2.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" - integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.1.2, fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" - integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - functions-have-names "^1.2.3" - hasown "^2.0.2" - is-callable "^1.2.7" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" - integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - function-bind "^1.1.2" - get-proto "^1.0.0" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-pkg-repo@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-port@5.1.1, get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-proto@^1.0.0, get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -get-stream@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - -get-tsconfig@^4.7.5: - version "4.9.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.9.0.tgz#704ae2ce2a94935921675dd19c05508b713a405d" - integrity sha512-52n24W52sIueosRe0XZ8Ex5Yle+WbhfCKnV/gWXpbVR8FXNTfqdKEKUSypKso66VRHTvvcQxL44UTZbJRlCTnw== - dependencies: - resolve-pkg-maps "^1.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" - integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== - dependencies: - dargs "^7.0.0" - meow "^8.1.2" - split2 "^3.2.2" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" - integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== - dependencies: - meow "^8.1.2" - semver "^7.0.0" - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-14.0.0.tgz#18ce834726d5fbca0c25a4555101aa277017418f" - integrity sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ== - dependencies: - git-up "^7.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== - dependencies: - ini "^1.3.2" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@6.0.2, glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^10.2.2, glob@^10.3.10: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@11.1.0, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -google-libphonenumber@^3.2.26: - version "3.2.40" - resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.40.tgz#ed57d0db67a8745e8e6db7983dda7f94717fb4c9" - integrity sha512-bzGxX/vfggcV80LVcibki+JvR91x6zHpBpovDXSfmZUGn6uLzhbYXsWll2a80EG6qTmvf8lt7KZZ/pkMml8ckw== - -gopd@^1.0.1, gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -got@^11.8.0: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-bigints@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" - integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-unicode@2.0.1, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -he@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" - integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== - dependencies: - lru-cache "^10.0.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-to-text@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-2.1.3.tgz#e50dbe4e4079912dbedcde05d278388edb8eea91" - integrity sha512-mafVvNjY6lrVrdT73ssJT4fWCtiLR8QVZDPurHbO/yT0KK7mVCpEGi+0g6jzwj4G41o4++9A48cZOSQBwvWd8Q== - dependencies: - he "^1.0.0" - htmlparser "^1.7.7" - optimist "^0.6.1" - underscore "^1.8.3" - underscore.string "^3.2.3" - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -htmlparser2@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - -htmlparser2@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -htmlparser2@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" - integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.2" - domutils "^2.8.0" - entities "^3.0.1" - -htmlparser2@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -htmlparser2@~3.8.1: - version "3.8.3" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" - integrity sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q== - dependencies: - domelementtype "1" - domhandler "2.3" - domutils "1.5" - entities "1.0" - readable-stream "1.1" - -htmlparser@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/htmlparser/-/htmlparser-1.7.7.tgz#19e7b3997ff6fbac99ae5a7d2766489efe7e2d0e" - integrity sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ== - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-link-header@^1.0.2, http-link-header@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.1.3.tgz#b367b7a0ad1cf14027953f31aa1df40bb433da2a" - integrity sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ== - -http-proxy-agent@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -http-signature-header@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/http-signature-header/-/http-signature-header-1.3.1.tgz#0a2327651e444ab687d05ae437ef9f3f55983cf3" - integrity sha512-UpKpxfRlCWRK41j+MfRHHvjDWMLX67gY7pUNGQbXi13fsTZcvUHrgbhbiJtHDvGGxe5nQVYlTW7fKypMSmgXKQ== - dependencies: - assert-plus "^1.0.0" - -http-signature@^1.3.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" - integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.18.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.1: - version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" - integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== - dependencies: - agent-base "^7.1.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^6.0.4: - version "6.0.5" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" - integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== - dependencies: - minimatch "^9.0.0" - -ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -image-size@^0.7.3: - version "0.7.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" - integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -immutable@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.8, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ini@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" - integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== - -init-package-json@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.3.tgz#2552fba75b6eed2495dc97f44183e2e5a5bcf8b0" - integrity sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w== - dependencies: - "@npmcli/package-json" "^5.0.0" - npm-package-arg "^11.0.0" - promzard "^1.0.0" - read "^3.0.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^5.0.0" - -inquirer@^8.2.4: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - -internal-slot@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - -ioredis@^4.27.0: - version "4.28.5" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" - integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== - dependencies: - cluster-key-slot "^1.1.0" - debug "^4.3.1" - denque "^1.1.0" - lodash.defaults "^4.2.0" - lodash.flatten "^4.4.0" - lodash.isarguments "^3.1.0" - p-map "^2.1.0" - redis-commands "1.7.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -ipaddr.js@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== - -is-accessor-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" - integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== - dependencies: - hasown "^2.0.0" - -is-arguments@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-async-function@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.0.tgz#1d1080612c493608e93168fc4458c245074c06a6" - integrity sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ== - dependencies: - call-bound "^1.0.3" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-boolean-object@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" - integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-bun-module@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" - integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== - dependencies: - semver "^7.6.3" - -is-callable@^1.1.3, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0, is-core-module@^2.5.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-data-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" - integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== - dependencies: - hasown "^2.0.0" - -is-data-view@^1.0.1, is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - -is-date-object@^1.0.5, is-date-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-descriptor@^0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" - integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" - integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-expression@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" - integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== - dependencies: - acorn "^7.1.1" - object-assign "^4.1.1" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" - integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== - dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-nan@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.0.3, is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.7, is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-symbol@^1.0.4, is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2, is-weakref@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" - integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== - dependencies: - call-bound "^1.0.2" - -is-weakset@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" - integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - dependencies: - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@^0.1.2, isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" - integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -jose@^2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.7.tgz#3aabbaec70bff313c108b9406498a163737b16ba" - integrity sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg== - dependencies: - "@panva/asn1.js" "^1.0.0" - -jose@^5.2.0: - version "5.9.6" - resolved "https://registry.yarnpkg.com/jose/-/jose-5.9.6.tgz#77f1f901d88ebdc405e57cce08d2a91f47521883" - integrity sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ== - -js-stringify@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" - integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.10.0, js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsdoc-type-pratt-parser@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" - integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== - -jsesc@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" - integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonld-context-parser@^2.0.0, jsonld-context-parser@^2.1.2, jsonld-context-parser@^2.1.3, jsonld-context-parser@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz#fae15a56c5ceabd1c4520ab1a9cc12c9a0a8b67d" - integrity sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA== - dependencies: - "@types/http-link-header" "^1.0.1" - "@types/node" "^18.0.0" - cross-fetch "^3.0.6" - http-link-header "^1.0.2" - relative-to-absolute-iri "^1.0.5" - -jsonld-signatures@^11.2.1, jsonld-signatures@^11.3.0, jsonld-signatures@^11.3.2: - version "11.5.0" - resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz#020ad488bd1977c5169de3d2a4cc28a76dec2663" - integrity sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw== - dependencies: - "@digitalbazaar/security-context" "^1.0.0" - jsonld "^8.0.0" - rdf-canonize "^4.0.1" - serialize-error "^8.1.0" - -jsonld-signatures@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-5.2.0.tgz#2f6210c3aad0a50f925991ce3e91c78856c0752d" - integrity sha512-/dGgMElXc3oBS+/OUwMc3DTK4riHKLE9Lk7NF1Upz2ZlBTNfnOw5uLRkFQOJFBDqDEm5hK6hIfkoC/rCWFh9tQ== - dependencies: - base64url "^3.0.1" - crypto-ld "^3.7.0" - jsonld "^2.0.2" - node-forge "^0.10.0" - security-context "^4.0.0" - serialize-error "^5.0.0" - -jsonld-streaming-parser@^2.4.0, jsonld-streaming-parser@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz#d8faa1df6dc3b760fb9455602edc5f001d756ef0" - integrity sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A== - dependencies: - "@rdfjs/types" "*" - "@types/http-link-header" "^1.0.1" - canonicalize "^1.0.1" - http-link-header "^1.0.2" - jsonld-context-parser "^2.1.3" - jsonparse "^1.3.1" - rdf-data-factory "^1.1.0" - -jsonld-streaming-serializer@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.3.0.tgz#e42ec6ffefc5b80cc1bd17e8eee7943242f17a4d" - integrity sha512-QGflpxpwmr659ExvAQ5TFAY9BmJQiL/yF/MDRrP5oVWHcBBLhbPjUqDv//y2OvJxUY3UQYMXulTwzmYb1ttv2Q== - dependencies: - "@rdfjs/types" "*" - jsonld-context-parser "^2.0.0" - -jsonld@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-2.0.2.tgz#f5d0631de828ce6dee3a14f08cbdc6a53174cd15" - integrity sha512-/TQzRe75/3h2khu57IUojha5oat+M82bm8RYw0jLhlmmPrW/kTWAZ9nGzKPfZWnPYnVVJJMQVc/pU8HCmpv9xg== - dependencies: - canonicalize "^1.0.1" - lru-cache "^5.1.1" - rdf-canonize "^1.0.2" - request "^2.88.0" - semver "^6.3.0" - xmldom "0.1.19" - -jsonld@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-3.3.2.tgz#f8688b349385ff5c755e83c7f60a9cf834078fc0" - integrity sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw== - dependencies: - canonicalize "^1.0.1" - lru-cache "^5.1.1" - object.fromentries "^2.0.2" - rdf-canonize "^2.0.1" - request "^2.88.0" - semver "^6.3.0" - xmldom "0.1.19" - -jsonld@^8.0.0, jsonld@^8.1.0, jsonld@^8.3.1: - version "8.3.3" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-8.3.3.tgz#08cc927833c8684e42319d4697cc8199c0908ffc" - integrity sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg== - dependencies: - "@digitalbazaar/http-client" "^3.4.1" - canonicalize "^1.0.1" - lru-cache "^6.0.0" - rdf-canonize "^3.4.0" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsonwebtoken@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jstransformer@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" - integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== - dependencies: - is-promise "^2.0.0" - promise "^7.0.1" - -juice@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/juice/-/juice-4.3.2.tgz#0a199e5f66f4f7f5cae4c079ebba81b0c2f4d1e0" - integrity sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g== - dependencies: - cheerio "^0.22.0" - commander "^2.15.1" - cross-spawn "^5.1.0" - deep-extend "^0.5.1" - mensch "^0.3.3" - slick "^1.12.2" - web-resource-inliner "^4.2.1" - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -kleur@^4.1.4, kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -ky-universal@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.11.0.tgz#f5edf857865aaaea416a1968222148ad7d9e4017" - integrity sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw== - dependencies: - abort-controller "^3.0.0" - node-fetch "^3.2.10" - -ky@^0.33.3: - version "0.33.3" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.33.3.tgz#bf1ad322a3f2c3428c13cfa4b3af95e6c4a2f543" - integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== - -lerna@^8.0.1: - version "8.1.9" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.1.9.tgz#1233c3cfacca3b85b23c292235e246d79de3de32" - integrity sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ== - dependencies: - "@lerna/create" "8.1.9" - "@npmcli/arborist" "7.5.4" - "@npmcli/package-json" "5.2.0" - "@npmcli/run-script" "8.1.0" - "@nx/devkit" ">=17.1.2 < 21" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - aproba "2.0.0" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.3" - color-support "1.1.3" - columnify "1.6.0" - console-control-strings "^1.1.0" - conventional-changelog-angular "7.0.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "9.0.0" - dedent "1.5.3" - envinfo "7.13.0" - execa "5.0.0" - fs-extra "^11.2.0" - get-port "5.1.1" - get-stream "6.0.0" - git-url-parse "14.0.0" - glob-parent "6.0.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - import-local "3.1.0" - ini "^1.3.8" - init-package-json "6.0.3" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - jest-diff ">=29.4.3 < 30" - js-yaml "4.1.0" - libnpmaccess "8.0.6" - libnpmpublish "9.0.9" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "11.0.2" - npm-packlist "8.0.2" - npm-registry-fetch "^17.1.0" - nx ">=17.1.2 < 21" - p-map "4.0.0" - p-map-series "2.1.0" - p-pipe "3.1.0" - p-queue "6.6.2" - p-reduce "2.1.0" - p-waterfall "2.1.1" - pacote "^18.0.6" - pify "5.0.0" - read-cmd-shim "4.0.0" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.8" - set-blocking "^2.0.0" - signal-exit "3.0.7" - slash "3.0.0" - ssri "^10.0.6" - string-width "^4.2.3" - strip-ansi "^6.0.1" - strong-log-transformer "2.1.0" - tar "6.2.1" - temp-dir "1.0.0" - typescript ">=3 < 6" - upath "2.0.1" - uuid "^10.0.0" - validate-npm-package-license "3.0.4" - validate-npm-package-name "5.0.1" - wide-align "1.1.5" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "17.7.2" - yargs-parser "21.1.1" - -leven@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libnpmaccess@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.6.tgz#73be4c236258babc0a0bca6d3b6a93a6adf937cf" - integrity sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw== - dependencies: - npm-package-arg "^11.0.2" - npm-registry-fetch "^17.0.1" - -libnpmpublish@9.0.9: - version "9.0.9" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.9.tgz#e737378c09f09738377d2a276734be35cffb85e2" - integrity sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg== - dependencies: - ci-info "^4.0.0" - normalize-package-data "^6.0.1" - npm-package-arg "^11.0.2" - npm-registry-fetch "^17.0.1" - proc-log "^4.2.0" - semver "^7.3.7" - sigstore "^2.2.0" - ssri "^10.0.6" - -lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== - dependencies: - immediate "~3.0.5" - -lines-and-columns@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lines-and-columns@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" - integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== - -load-json-file@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -localforage@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" - integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== - dependencies: - lie "3.1.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== - -lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== - -lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== - -lodash.merge@^4.4.0, lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== - -lodash.unescape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg== - -lodash@^3.2.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ== - -lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.0.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -long-timeout@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" - integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - -lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -luxon@^1.23.x: - version "1.28.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.1.tgz#528cdf3624a54506d710290a2341aa8e6e6c61b0" - integrity sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw== - -luxon@^3.2.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.5.0.tgz#6b6f65c5cd1d61d1fd19dbf07ee87a50bf4b8e20" - integrity sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ== - -luxon@~3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.6.1.tgz#d283ffc4c0076cb0db7885ec6da1c49ba97e47b0" - integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ== - -make-dir@4.0.0, make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" - integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== - dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" - http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - proc-log "^4.2.0" - promise-retry "^2.0.1" - ssri "^10.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memory-streams@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/memory-streams/-/memory-streams-0.1.3.tgz#d9b0017b4b87f1d92f55f2745c9caacb1dc93ceb" - integrity sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA== - dependencies: - readable-stream "~1.0.2" - -mensch@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd" - integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g== - -meow@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@^1.1.1, methods@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -microdata-rdf-streaming-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.2.0.tgz#130967af0be59ce8ddf5fef4588a0ffa44a17d69" - integrity sha512-cMLNLEcS0mPaiA9iwq6BnsQK9sx2uBwjpRZIEvMRBNJpbvV58f8AFtPeYzNFh3OPyX9B49NYJ77bB0jNAUCurw== - dependencies: - "@rdfjs/types" "*" - htmlparser2 "^6.0.0" - rdf-data-factory "^1.1.0" - relative-to-absolute-iri "^1.0.2" - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimer@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/mimer/-/mimer-1.1.1.tgz#f880cef5009e58d4755a98bfd7b3f6de1ce168f4" - integrity sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw== - -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - -minipass-fetch@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" - integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -modify-values@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -moleculer-bull@^0.2.5: - version "0.2.8" - resolved "https://registry.yarnpkg.com/moleculer-bull/-/moleculer-bull-0.2.8.tgz#304bd9f0ac8143c1202e5d0a5d328ec11434c05c" - integrity sha512-ayVIqVmc6HVD6SL0RLsmMYqDnnPqwrcEWAPpY31kbUIfU3CBH2grGaqA5adyZBNCo4gQz09+4O9m+Hqxls06Ag== - dependencies: - bull "^3.15.0" - lodash "^4.17.15" - -moleculer-db@^0.8.15, moleculer-db@^0.8.16: - version "0.8.26" - resolved "https://registry.yarnpkg.com/moleculer-db/-/moleculer-db-0.8.26.tgz#508821ead1454aef386ca6fef7e5da5c0ac6abf5" - integrity sha512-pbUYNqVrev3Y4yUskGSkRMkCwN1vrNKq6bWLFWeKeOanP+X/ZjAPFrY4AMVdqwBCIn2Z8q0w+pHe4C70KuI/uA== - dependencies: - "@seald-io/nedb" "^3.0.0" - bluebird "^3.7.2" - flat "^5.0.2" - lodash "^4.17.21" - -moleculer-mail@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/moleculer-mail/-/moleculer-mail-1.2.6.tgz#e92029b54747eaba620a7636227bf58e8e8a2146" - integrity sha512-i1r1lraG6JTHOeHgUxrP5nQEfvxhldZkYjlcNTgu6blvdv0aWe2GqK6/p+D/dPum4jY6QEKaNB6twI8N+nTAmA== - dependencies: - bluebird "^3.7.2" - email-templates "^2.7.1" - lodash "^4.17.21" - nodemailer "^4.6.7" - nodemailer-html-to-text "^2.1.0" - -moleculer-schedule@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/moleculer-schedule/-/moleculer-schedule-0.2.3.tgz#2aec032431fb5fafcd03c04c25f651bad4b02fe9" - integrity sha512-cFHpnHe56y6grSQov9KR1Y8OGmIFImOPelsR2poMdCulgRC49kThKDxBx11ZwASCNx/UtadmaLJ+sX8xRnuGFQ== - dependencies: - lodash "^4.17.21" - node-schedule "^2.0.0" - -moleculer-web@^0.10.0-beta1, moleculer-web@^0.10.7: - version "0.10.7" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" - integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== - dependencies: - "@fastify/busboy" "^1.0.0" - body-parser "^1.19.0" - es6-error "^4.1.1" - etag "^1.8.1" - fresh "^0.5.2" - isstream "^0.1.2" - kleur "^4.1.4" - lodash "^4.17.21" - path-to-regexp "^3.1.0" - qs "^6.11.0" - serve-static "^1.14.1" - -moleculer@^0.14.17, moleculer@^0.14.18, moleculer@^0.14.19, moleculer@^0.14.29, moleculer@^0.14.31: - version "0.14.35" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.35.tgz#529fe5fad8b85645d54a99a010a924b136ce6a3f" - integrity sha512-KB4qs0zNTjE9z7Bl27FFLPaWkAsUFJajF2njozJeor1phFCAYP5S1JsWOSrnUBTtsH7SX4gTw8tGRdcgh1eyVQ== - dependencies: - args "^5.0.3" - eventemitter2 "^6.4.9" - fastest-validator "^1.19.0" - glob "^7.2.0" - ipaddr.js "^2.2.0" - kleur "^4.1.5" - lodash "^4.17.21" - lru-cache "^6.0.0" - node-fetch "^2.6.7" - recursive-watch "^1.1.4" - -moment-timezone@^0.5.31: - version "0.5.46" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.46.tgz#a21aa6392b3c6b3ed916cd5e95858a28d893704a" - integrity sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw== - dependencies: - moment "^2.29.4" - -moment@2.30.1, moment@^2.29.4: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - -mri@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.3, ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -n3@^1.26.0: - version "1.26.0" - resolved "https://registry.yarnpkg.com/n3/-/n3-1.26.0.tgz#3d69de04bee680b9ebec9dbc1033dc1e6934d351" - integrity sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w== - dependencies: - buffer "^6.0.3" - readable-stream "^4.0.0" - -n3@^1.6.3, n3@^1.8.0: - version "1.23.1" - resolved "https://registry.yarnpkg.com/n3/-/n3-1.23.1.tgz#42a5aded4802db7a3c5d22feec19bdd919190268" - integrity sha512-3f0IYJo+6+lXypothmlwPzm3wJNffsxUwnfONeFv2QqWq7RjTvyCMtkRXDUXW6XrZoOzaQX8xTTSYNlGjXcGtw== - dependencies: - buffer "^6.0.3" - queue-microtask "^1.1.2" - readable-stream "^4.0.0" - -nan@^2.19.0, nan@^2.20.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3" - integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw== - -nanoid@^3.3.8: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.4" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-abi@^3.3.0: - version "3.73.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.73.0.tgz#4459ea77e71969edba8588387eecb05e2c2cff3b" - integrity sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg== - dependencies: - semver "^7.3.5" - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - -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.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.0, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^3.2.10: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-forge@^0.10.0, node-forge@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-gyp-build@^4.3.0: - version "4.8.4" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" - integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== - -node-gyp@^10.0.0: - version "10.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a" - integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^10.3.10" - graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^4.1.0" - semver "^7.3.5" - tar "^6.2.1" - which "^4.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-machine-id@1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" - integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== - -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== - -node-schedule@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3" - integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ== - dependencies: - cron-parser "^4.2.0" - long-timeout "0.1.1" - sorted-array-functions "^1.3.0" - -nodemailer-html-to-text@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz#996decccc9aff6371ec36e3633b18ed75e0fc8f2" - integrity sha512-oaNLWoMyeC5Y8DbtYSwBRHTJVdkojKfiP6J4hh8+10Oih0QoAUqEsnM0WbFA13yhbzjyp1yXBNiDl0QV7BpoRA== - dependencies: - html-to-text "^2.1.0" - -nodemailer@^4.6.7: - version "4.7.0" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.7.0.tgz#4420e06abfffd77d0618f184ea49047db84f4ad8" - integrity sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -nopt@^7.0.0, nopt@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" - integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== - dependencies: - abbrev "^2.0.0" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" - integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== - dependencies: - hosted-git-info "^7.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" - integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.2.tgz#1ef8006c4a9e9204ddde403035f7ff7d718251ca" - integrity sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: - version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" - integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-packlist@8.0.2, npm-packlist@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" - integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== - dependencies: - ignore-walk "^6.0.4" - -npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" - integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^11.0.0" - semver "^7.3.5" - -npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1" - integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA== - dependencies: - "@npmcli/redact" "^2.0.0" - jsonparse "^1.3.1" - make-fetch-happen "^13.0.0" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minizlib "^2.1.2" - npm-package-arg "^11.0.0" - proc-log "^4.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -nth-check@~1.0.0, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nx@17.2.5, nx@v17.2.5: - version "17.2.5" - resolved "https://registry.yarnpkg.com/nx/-/nx-17.2.5.tgz#fc34bda5fec6b5b0eb65d17c85cb7128e9b028f8" - integrity sha512-bMjl6V+h2Pb7k/iieebQskFqiB5Z7VQgdFJNI6ScMfoMhClWVuF+/fdhxrlN4IaiWHHnZ/KDr7h4kc7puFLr9w== - dependencies: - "@nrwl/tao" v17.2.5 - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "3.0.0-rc.46" - "@zkochan/js-yaml" "0.0.6" - axios "^1.5.1" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^8.0.1" - dotenv "~16.3.1" - dotenv-expand "~10.0.0" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^11.1.0" - glob "7.1.4" - ignore "^5.0.4" - jest-diff "^29.4.1" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - lines-and-columns "~2.0.3" - minimatch "3.0.5" - node-machine-id "1.1.12" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.5.3" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nx/nx-darwin-arm64" v17.2.5 - "@nx/nx-darwin-x64" v17.2.5 - "@nx/nx-freebsd-x64" v17.2.5 - "@nx/nx-linux-arm-gnueabihf" v17.2.5 - "@nx/nx-linux-arm64-gnu" v17.2.5 - "@nx/nx-linux-arm64-musl" v17.2.5 - "@nx/nx-linux-x64-gnu" v17.2.5 - "@nx/nx-linux-x64-musl" v17.2.5 - "@nx/nx-win32-arm64-msvc" v17.2.5 - "@nx/nx-win32-x64-msvc" v17.2.5 - -"nx@>=17.1.2 < 21": - version "20.3.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-20.3.2.tgz#32db1c3d339db9f456610f84732eff012ae12749" - integrity sha512-VWUHX0uCn8ACFbpBTpgucDzwe4q/a/UU3AYOhzKCvTzb3kQiyvoxLjORSze93ZNEqgor0PMkCQgcoMBUjxJfzQ== - dependencies: - "@napi-rs/wasm-runtime" "0.2.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "3.0.2" - "@zkochan/js-yaml" "0.0.7" - axios "^1.7.4" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^8.0.1" - dotenv "~16.4.5" - dotenv-expand "~11.0.6" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - front-matter "^4.0.2" - ignore "^5.0.4" - jest-diff "^29.4.1" - jsonc-parser "3.2.0" - lines-and-columns "2.0.3" - minimatch "9.0.3" - node-machine-id "1.1.12" - npm-run-path "^4.0.1" - open "^8.4.0" - ora "5.3.0" - resolve.exports "2.0.3" - semver "^7.5.3" - string-width "^4.2.3" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - yaml "^2.6.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nx/nx-darwin-arm64" "20.3.2" - "@nx/nx-darwin-x64" "20.3.2" - "@nx/nx-freebsd-x64" "20.3.2" - "@nx/nx-linux-arm-gnueabihf" "20.3.2" - "@nx/nx-linux-arm64-gnu" "20.3.2" - "@nx/nx-linux-arm64-musl" "20.3.2" - "@nx/nx-linux-x64-gnu" "20.3.2" - "@nx/nx-linux-x64-musl" "20.3.2" - "@nx/nx-win32-arm64-msvc" "20.3.2" - "@nx/nx-win32-x64-msvc" "20.3.2" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" - integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== - -object-inspect@^1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.2, object.assign@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -object.fromentries@^2.0.2, object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.getownpropertydescriptors@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" - integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== - dependencies: - array.prototype.reduce "^1.0.6" - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - gopd "^1.0.1" - safe-array-concat "^1.1.2" - -object.groupby@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" - integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -oidc-token-hash@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6" - integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -openid-client@^4.7.4: - version "4.9.1" - resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-4.9.1.tgz#4f00a9d1566c0fa08f0dd5986cf0e6b1e5d14186" - integrity sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w== - dependencies: - aggregate-error "^3.1.0" - got "^11.8.0" - jose "^2.0.5" - lru-cache "^6.0.0" - make-error "^1.3.6" - object-hash "^2.0.1" - oidc-token-hash "^5.0.1" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g== - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -ora@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" - integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== - dependencies: - bl "^4.0.3" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - log-symbols "^4.0.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -own-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" - integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== - dependencies: - get-intrinsic "^1.2.6" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@4.0.0, p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-pipe@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== - -p-queue@6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -p-waterfall@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== - dependencies: - p-reduce "^2.0.0" - -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -pacote@^18.0.0, pacote@^18.0.6: - version "18.0.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" - integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A== - dependencies: - "@npmcli/git" "^5.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/package-json" "^5.1.0" - "@npmcli/promise-spawn" "^7.0.0" - "@npmcli/run-script" "^8.0.0" - cacache "^18.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^11.0.0" - npm-packlist "^8.0.0" - npm-pick-manifest "^9.0.0" - npm-registry-fetch "^17.0.0" - proc-log "^4.0.0" - promise-retry "^2.0.1" - sigstore "^2.2.0" - ssri "^10.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-conflict-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - -parse-imports@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/parse-imports/-/parse-imports-2.2.1.tgz#0a6e8b5316beb5c9905f50eb2bbb8c64a4805642" - integrity sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ== - dependencies: - es-module-lexer "^1.5.3" - slashes "^3.0.12" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-link-header@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" - integrity sha512-Z0gpfHmwCIKDr5rRzjypL+p93aHVWO7e+0rFcUl9E3sC67njjs+xHFenuboSXZGlvYtmQqRzRaE3iFpTUnLmFQ== - dependencies: - xtend "~4.0.1" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-srcset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" - integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -passport-cas2@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/passport-cas2/-/passport-cas2-0.0.12.tgz#aca3364a02d158a01ca7fadd71c6c26fd8ee9370" - integrity sha512-ck/6x2lb6eYhlC/9lmw7ZTgqzSiJmYB0px7H2B00kpRZlBQuds9yPzFMi7kBWtgFpTDf0o+rwQMUYga8yO/jIg== - dependencies: - cas "https://github.com/joshchan/node-cas" - passport-strategy "^1.0.0" - -passport-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" - integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== - dependencies: - passport-strategy "1.x.x" - -passport-strategy@1.x.x, passport-strategy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" - integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== - -passport@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" - integrity sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg== - dependencies: - passport-strategy "1.x.x" - pause "0.0.1" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1, path-scurry@^1.6.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" - integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== - -path-to-regexp@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0, picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" - integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss-selector-parser@^6.0.10: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss@^8.3.11: - version "8.5.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" - integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== - dependencies: - nanoid "^3.3.8" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.1.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" - integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" - integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -proggy@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" - integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" - integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-limit@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26" - integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw== - -promise-polyfill@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-1.1.6.tgz#cd04eff46f5c95c3a7d045591d79b5e3e01f12d7" - integrity sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promise.prototype.finally@^3.1.2: - version "3.1.8" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz#b97bc1bbca74dc21b6e978c85a70752a7a0b7c3a" - integrity sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - set-function-name "^2.0.1" - -promise@^7.0.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.2.tgz#2226e7c6508b1da3471008ae17066a7c3251e660" - integrity sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ== - dependencies: - read "^3.0.1" - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -psl@^1.1.28: - version "1.15.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" - integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== - dependencies: - punycode "^2.3.1" - -pug-attrs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" - integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== - dependencies: - constantinople "^4.0.1" - js-stringify "^1.0.2" - pug-runtime "^3.0.0" - -pug-code-gen@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.3.tgz#58133178cb423fe1716aece1c1da392a75251520" - integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw== - dependencies: - constantinople "^4.0.1" - doctypes "^1.1.0" - js-stringify "^1.0.2" - pug-attrs "^3.0.0" - pug-error "^2.1.0" - pug-runtime "^3.0.1" - void-elements "^3.1.0" - with "^7.0.0" - -pug-error@^2.0.0, pug-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.1.0.tgz#17ea37b587b6443d4b8f148374ec27b54b406e55" - integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg== - -pug-filters@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" - integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== - dependencies: - constantinople "^4.0.1" - jstransformer "1.0.0" - pug-error "^2.0.0" - pug-walk "^2.0.0" - resolve "^1.15.1" - -pug-lexer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" - integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== - dependencies: - character-parser "^2.2.0" - is-expression "^4.0.0" - pug-error "^2.0.0" - -pug-linker@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" - integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== - dependencies: - pug-error "^2.0.0" - pug-walk "^2.0.0" - -pug-load@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" - integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== - dependencies: - object-assign "^4.1.1" - pug-walk "^2.0.0" - -pug-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" - integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== - dependencies: - pug-error "^2.0.0" - token-stream "1.0.0" - -pug-runtime@^3.0.0, pug-runtime@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" - integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== - -pug-strip-comments@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" - integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== - dependencies: - pug-error "^2.0.0" - -pug-walk@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" - integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== - -pug@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.3.tgz#e18324a314cd022883b1e0372b8af3a1a99f7597" - integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g== - dependencies: - pug-code-gen "^3.0.3" - pug-filters "^4.0.0" - pug-lexer "^5.0.1" - pug-linker "^4.0.0" - pug-load "^3.0.0" - pug-parser "^6.0.0" - pug-runtime "^3.0.1" - pug-strip-comments "^2.0.0" - -pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -qs@^6.11.0, qs@^6.5.1: - version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" - integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== - dependencies: - side-channel "^1.1.0" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -queue-microtask@^1.1.2, queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -rdf-canonize@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-1.2.0.tgz#9872b2cc6ed92a9969e834f9f042addaf0d4f7f9" - integrity sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw== - dependencies: - node-forge "^0.10.0" - semver "^6.3.0" - -rdf-canonize@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-2.0.1.tgz#12c9b8b41570cd669d9b152c9e679063478ba194" - integrity sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA== - dependencies: - semver "^6.3.0" - setimmediate "^1.0.5" - -rdf-canonize@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-3.4.0.tgz#87f88342b173cc371d812a07de350f0c1aa9f058" - integrity sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA== - dependencies: - setimmediate "^1.0.5" - -rdf-canonize@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-4.0.1.tgz#2b5a37f147d35b484b40ff2140245fc5985a9595" - integrity sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA== - dependencies: - setimmediate "^1.0.5" - -rdf-data-factory@^1.1.0, rdf-data-factory@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz#11b39e0c80e51bca83828b2ddaa686f733be966f" - integrity sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ== - dependencies: - "@rdfjs/types" "^1.0.0" - -rdf-data-model@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rdf-data-model/-/rdf-data-model-1.0.0.tgz#e768e1c2cd904c186471b20d1a4fce77c7712a4b" - integrity sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g== - -rdf-isomorphic@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz#cd6d433cd85bf79d903d5f0fdeea42a40eb27265" - integrity sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ== - dependencies: - "@rdfjs/types" "*" - hash.js "^1.1.7" - rdf-string "^1.6.0" - rdf-terms "^1.7.0" - -rdf-parse@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/rdf-parse/-/rdf-parse-1.9.1.tgz#6ec1d70a20d7e65b2c5a5acaee811f50b03940ac" - integrity sha512-W6ouYE+ufmCNFmXD1iGs5gUZH75jZekh/I5qF8a4Sl37BUc9mY0Jz5A0CV1tiKKhx+I+HYfxyX9VjOljD8rzgQ== - dependencies: - "@comunica/actor-http-native" "~1.22.0" - "@comunica/actor-rdf-parse-html" "~1.22.0" - "@comunica/actor-rdf-parse-html-microdata" "~1.22.0" - "@comunica/actor-rdf-parse-html-rdfa" "~1.22.0" - "@comunica/actor-rdf-parse-html-script" "~1.22.0" - "@comunica/actor-rdf-parse-jsonld" "^1.22.0" - "@comunica/actor-rdf-parse-n3" "~1.22.0" - "@comunica/actor-rdf-parse-rdfxml" "~1.22.0" - "@comunica/actor-rdf-parse-xml-rdfa" "~1.22.0" - "@comunica/bus-http" "~1.22.0" - "@comunica/bus-init" "~1.22.0" - "@comunica/bus-rdf-parse" "~1.22.0" - "@comunica/bus-rdf-parse-html" "~1.22.0" - "@comunica/core" "~1.22.0" - "@comunica/mediator-combine-union" "~1.22.0" - "@comunica/mediator-number" "~1.22.0" - "@comunica/mediator-race" "~1.22.0" - "@rdfjs/types" "*" - stream-to-string "^1.2.0" - -rdf-string@^1.6.0: - version "1.6.3" - resolved "https://registry.yarnpkg.com/rdf-string/-/rdf-string-1.6.3.tgz#5c3173fad13e6328698277fb8ff151e3423282ab" - integrity sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g== - dependencies: - "@rdfjs/types" "*" - rdf-data-factory "^1.1.0" - -rdf-terms@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/rdf-terms/-/rdf-terms-1.11.0.tgz#0c2e3a2b43f1042959c9263af27dab08dc4b084d" - integrity sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ== - dependencies: - "@rdfjs/types" "*" - rdf-data-factory "^1.1.0" - rdf-string "^1.6.0" - -rdfa-streaming-parser@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz#34072e760aa07e6cddf210923888f9834354fb92" - integrity sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ== - dependencies: - "@rdfjs/types" "*" - htmlparser2 "^6.0.0" - rdf-data-factory "^1.1.0" - relative-to-absolute-iri "^1.0.2" - -rdfxml-streaming-parser@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz#485af3a01abc2dc49149b8758da9a12351d34348" - integrity sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ== - dependencies: - "@rdfjs/types" "*" - rdf-data-factory "^1.1.0" - relative-to-absolute-iri "^1.0.0" - sax "^1.2.4" - -react-is@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -read-cmd-shim@4.0.0, read-cmd-shim@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" - integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== - dependencies: - mute-stream "^1.0.0" - -readable-stream-node-to-web@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz#8b7614faa1465ebfa0da9b9ca6303fa27073b7cf" - integrity sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ== - -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - integrity sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.3.5, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" - integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-stream@~1.0.2: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-web-to-node-stream@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -recursive-watch@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/recursive-watch/-/recursive-watch-1.1.4.tgz#7a340f860dd715836a592f008cceba5a1dd0b734" - integrity sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ== - dependencies: - ttl "^1.3.0" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -redis-commands@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" - integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.5.3: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - -regexpp@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -relative-to-absolute-iri@^1.0.0, relative-to-absolute-iri@^1.0.2, relative-to-absolute-iri@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz#f2fd6ee60c78d9ffc4926bd20bdf84479b91d765" - integrity sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q== - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@5.0.0, resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve.exports@2.0.3, resolve.exports@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" - integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== - -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.22.4: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== - dependencies: - glob "^9.2.0" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -rsync@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/rsync/-/rsync-0.6.1.tgz#3681a0098bd8750448f8bf9da1fee09f7763742b" - integrity sha512-39HcwWuM67CQ9tHloazShXWUOWa2m3SGqX6XQhQMSj0VCQMkSI9PodoxM7/+hKf2p4v2umbhfoarYqd1gwII/w== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" - integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - has-symbols "^1.1.0" - isarray "^2.0.5" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize-html@^2.6.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.14.0.tgz#bd2a7b97ee1d86a7f0e0babf3a4468f639c3a429" - integrity sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g== - dependencies: - deepmerge "^4.2.2" - escape-string-regexp "^4.0.0" - htmlparser2 "^8.0.0" - is-plain-object "^5.0.0" - parse-srcset "^1.0.2" - postcss "^8.3.11" - -sax@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" - integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== - -security-context@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/security-context/-/security-context-4.0.0.tgz#e73f5d22bee9c7699a02eaaced359d001dc948e9" - integrity sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-error@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" - integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA== - dependencies: - type-fest "^0.8.0" - -serialize-error@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" - integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== - dependencies: - type-fest "^0.20.2" - -serve-static@^1.14.1: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1, set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -sharp@^0.31.2: - version "0.31.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" - integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" - prebuild-install "^7.1.1" - semver "^7.3.8" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.0.6, side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sigstore@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" - integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - "@sigstore/sign" "^2.3.2" - "@sigstore/tuf" "^2.3.4" - "@sigstore/verify" "^1.2.1" - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@3.0.0, slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slashes@^3.0.12: - version "3.0.12" - resolved "https://registry.yarnpkg.com/slashes/-/slashes-3.0.12.tgz#3d664c877ad542dc1509eaf2c50f38d483a6435a" - integrity sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA== - -slick@^1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" - integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^8.0.3: - version "8.0.5" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" - integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== - dependencies: - agent-base "^7.1.2" - debug "^4.3.4" - socks "^2.8.3" - -socks@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sodium-native@^3.2.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-3.4.1.tgz#44616c07ccecea15195f553af88b3e574b659741" - integrity sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ== - dependencies: - node-gyp-build "^4.3.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -sorted-array-functions@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" - integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== - -source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sparqlalgebrajs@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparqlalgebrajs/-/sparqlalgebrajs-3.0.3.tgz#a0b2b2ea2bacf97a74b4e3f3fc90be72b96d94a1" - integrity sha512-XFNhsO55bprayrM35h/jY0kzzuGc3oZ1On3kc+s7Un0BFQBXa046aLcMZFp4MYSvn7GtMe9eZ08ONFnBH5kEsQ== - dependencies: - "@rdfjs/types" "*" - "@types/sparqljs" "^3.1.2" - fast-deep-equal "^3.1.3" - minimist "^1.2.5" - rdf-data-factory "^1.1.0" - rdf-isomorphic "^1.3.0" - rdf-string "^1.6.0" - sparqljs "^3.4.2" - -sparqljs@^3.4.2, sparqljs@^3.5.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/sparqljs/-/sparqljs-3.7.3.tgz#075821d51ef4954284e36569503fe5558cfb71b0" - integrity sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg== - dependencies: - rdf-data-factory "^1.1.2" - -sparqljson-parse@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz#8844cae3b030864e459e37e6229bf394fc2dee14" - integrity sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw== - dependencies: - "@rdfjs/types" "*" - "@types/node" "^13.1.0" - JSONStream "^1.3.3" - rdf-data-factory "^1.1.0" - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.21" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" - integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== - -speakingurl@^14.0.1: - version "14.0.1" - resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" - integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@^1.1.1, sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -ssh2-sftp-client@^7.2.1: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-7.2.3.tgz#b6533cb1202bb547dc3cfb53afb61ae60bde976a" - integrity sha512-Bmq4Uewu3e0XOwu5bnPbiS5KRQYv+dff5H6+85V4GZrPrt0Fkt1nUH+uXanyAkoNxUpzjnAPEEoLdOaBO9c3xw== - dependencies: - concat-stream "^2.0.0" - promise-retry "^2.0.1" - ssh2 "^1.8.0" - -ssh2@^1.8.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.16.0.tgz#79221d40cbf4d03d07fe881149de0a9de928c9f0" - integrity sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg== - dependencies: - asn1 "^0.2.6" - bcrypt-pbkdf "^1.0.2" - optionalDependencies: - cpu-features "~0.0.10" - nan "^2.20.0" - -sshpk@^1.18.0, sshpk@^1.7.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^10.0.0, ssri@^10.0.6: - version "10.0.6" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" - integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== - dependencies: - minipass "^7.0.3" - -stable-hash@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.4.tgz#55ae7dadc13e4b3faed13601587cec41859b42f7" - integrity sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stream-to-string@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.1.tgz#15cb325d88b33cc62accb032c7093f85eb785db2" - integrity sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA== - dependencies: - promise-polyfill "^1.1.6" - -streamify-string@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/streamify-string/-/streamify-string-1.0.1.tgz#9e220de33e1c475dd30e0206f5b1815cc6c9525b" - integrity sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw== - -streamsearch@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-template@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96" - integrity sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg== - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trim@^1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" - integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-object-atoms "^1.0.0" - has-property-descriptors "^1.0.2" - -string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" - integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -superagent@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" - integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== - dependencies: - component-emitter "^1.2.0" - cookiejar "^2.1.0" - debug "^3.1.0" - extend "^3.0.0" - form-data "^2.3.1" - formidable "^1.2.0" - methods "^1.1.1" - mime "^1.4.1" - qs "^6.5.1" - readable-stream "^2.3.5" - -supertest@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-4.0.2.tgz#c2234dbdd6dc79b6f15b99c8d6577b90e4ce3f36" - integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== - dependencies: - methods "^1.1.2" - superagent "^3.8.3" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -synckit@^0.9.1: - version "0.9.2" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" - integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.2.tgz#425f154f3404cb16cb8ff6e671d45ab2ed9596c5" - integrity sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4, tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@6.2.1, tar@^6.1.11, tar@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-decoding@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" - integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@~0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -token-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" - integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -ts-api-utils@^1.3.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" - integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -ttl@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/ttl/-/ttl-1.3.1.tgz#d8fa510bedb6a956d85b60ec56a57339ae0d5b2c" - integrity sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA== - -tuf-js@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" - integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== - dependencies: - "@tufjs/models" "2.0.1" - debug "^4.3.4" - make-fetch-happen "^13.0.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.0, type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - -typed-array-byte-offset@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" - integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.9" - -typed-array-length@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" - integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - reflect.getprototypeof "^1.0.6" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -"typescript@>=3 < 6", typescript@^5.3.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" - integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== - -uglify-js@^3.1.4: - version "3.19.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" - integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== - -uid-safe@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" - integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== - dependencies: - random-bytes "~1.0.0" - -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - -underscore.string@^3.2.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" - integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== - dependencies: - sprintf-js "^1.1.1" - util-deprecate "^1.0.2" - -underscore@^1.8.3: - version "1.13.7" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" - integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -undici@^5.21.2: - version "5.28.5" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" - integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== - dependencies: - "@fastify/busboy" "^2.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" - integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" - integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-join@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util.promisify@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.3.tgz#3d77cf56628b4aad743e5acde8e5c44cea7dbf1c" - integrity sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - for-each "^0.3.3" - get-intrinsic "^1.2.6" - has-proto "^1.2.0" - has-symbols "^1.1.0" - object.getownpropertydescriptors "^2.1.8" - safe-array-concat "^1.1.3" - -util@^0.12.4: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-to-istanbul@^9.0.1: - version "9.3.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" - integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -valid-data-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-2.0.0.tgz#2220fa9f8d4e761ebd3f3bb02770f1212b810537" - integrity sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA== - -validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@5.0.1, validate-npm-package-name@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" - integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== - -vc-js@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/vc-js/-/vc-js-0.6.4.tgz#49f408c590260d28c25a3ca4e30ece0de61c3ae1" - integrity sha512-ogwYys94k8mFyFZEn1Ru3nIA5Z/9C4iCU4grNWUYOYVWldcsn6UDp6erYFbaSkilzv7RK3cQu5N8prkxfHpZwA== - dependencies: - commander "^2.20.3" - credentials-context "^1.0.0" - debug "^4.1.1" - fs-extra "^8.1.0" - get-stdin "^7.0.0" - jsonld "^2.0.2" - jsonld-signatures "^5.0.0" - supports-color "^7.1.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -void-elements@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -wait-for-expect@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" - integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== - -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - -walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -wcwidth@^1.0.0, wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -web-resource-inliner@^4.2.1: - version "4.3.4" - resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz#07e1b4bcbcbee1021251b018e902bac5713f1be0" - integrity sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA== - dependencies: - async "^3.1.0" - chalk "^2.4.2" - datauri "^2.0.0" - htmlparser2 "^4.0.0" - lodash.unescape "^4.0.1" - request "^2.88.0" - safer-buffer "^2.1.2" - valid-data-url "^2.0.0" - xtend "^4.0.2" - -web-streams-node@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/web-streams-node/-/web-streams-node-0.4.0.tgz#641e42d7a7c4df95785a774e2484ba93d36fd672" - integrity sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w== - dependencies: - is-stream "^1.1.0" - readable-stream-node-to-web "^1.0.1" - web-streams-ponyfill "^1.4.1" - -web-streams-polyfill@^3.0.3: - 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== - -web-streams-ponyfill@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz#0ae863cc5f7493903679f16b08cbf14d432b62f4" - integrity sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.16, which-typed-array@^1.1.18, which-typed-array@^1.1.2: - version "1.1.18" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" - integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.3" - for-each "^0.3.3" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -wide-align@1.1.5, wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -with@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" - integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== - dependencies: - "@babel/parser" "^7.9.6" - "@babel/types" "^7.9.6" - assert-never "^1.2.1" - babel-walk "3.0.0-canary-5" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@5.0.1, write-file-atomic@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-pkg@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" - -xmldom@0.1.19: - version "0.1.19" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" - integrity sha512-pDyxjQSFQgNHkU+yjvoF+GXVGJU7e9EnOg/KcGMDihBIKjTsOeDYaECwC/O9bsUWKY+Sd9izfE43JXC46EOHKA== - -xtend@^4.0.2, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== - -yargs-parser@21.1.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@17.7.2, yargs@^17.3.1, yargs@^17.6.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.27.1" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/compat-data@npm:7.26.5" + checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/compat-data@npm:7.27.2" + checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/compat-data@npm:7.28.0" + checksum: 10c0/c4e527302bcd61052423f757355a71c3bc62362bac13f7f130de16e439716f66091ff5bdecda418e8fa0271d4c725f860f0ee23ab7bf6e769f7a8bb16dfcb531 + languageName: node + linkType: hard + +"@babel/core@npm:^7.23.9": + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.26.0" + "@babel/generator": "npm:^7.26.0" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.0" + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e + languageName: node + linkType: hard + +"@babel/core@npm:^7.27.4, @babel/core@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/core@npm:7.28.0" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.0" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-module-transforms": "npm:^7.27.3" + "@babel/helpers": "npm:^7.27.6" + "@babel/parser": "npm:^7.28.0" + "@babel/template": "npm:^7.27.2" + "@babel/traverse": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/423302e7c721e73b1c096217880272e02020dfb697a55ccca60ad01bba90037015f84d0c20c6ce297cf33a19bb704bc5c2b3d3095f5284dfa592bd1de0b9e8c3 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/generator@npm:7.26.5" + dependencies: + "@babel/parser": "npm:^7.26.5" + "@babel/types": "npm:^7.26.5" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/generator@npm:7.27.1" + dependencies: + "@babel/parser": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/generator@npm:7.28.0" + dependencies: + "@babel/parser": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10c0/1b3d122268ea3df50fde707ad864d9a55c72621357d5cebb972db3dd76859c45810c56e16ad23123f18f80cc2692f5a015d2858361300f0f224a05dc43d36a92 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" + dependencies: + "@babel/types": "npm:^7.27.3" + checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/helper-compilation-targets@npm:7.26.5" + dependencies: + "@babel/compat-data": "npm:^7.26.5" + "@babel/helper-validator-option": "npm:^7.25.9" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/helper-compilation-targets@npm:7.27.2" + dependencies: + "@babel/compat-data": "npm:^7.27.2" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4ee199671d6b9bdd4988aa2eea4bdced9a73abfc831d81b00c7634f49a8fc271b3ceda01c067af58018eb720c6151322015d463abea7072a368ee13f35adbb4c + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + regexpu-core: "npm:^6.2.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/591fe8bd3bb39679cc49588889b83bd628d8c4b99c55bafa81e80b1e605a348b64da955e3fd891c4ba3f36fd015367ba2eadea22af6a7de1610fbb5bcc2d3df0 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.5": + version: 0.6.5 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + debug: "npm:^4.4.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.22.10" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e + languageName: node + linkType: hard + +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-transforms@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-module-transforms@npm:7.27.3" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.3" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/fccb4f512a13b4c069af51e1b56b20f54024bcf1591e31e978a30f3502567f34f90a80da6a19a6148c249216292a8074a0121f9e52602510ef0f32dbce95ca01 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-plugin-utils@npm:7.27.1" + checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-wrap-function": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-replace-supers@npm:7.27.1" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-wrap-function@npm:7.27.1" + dependencies: + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/c472f75c0951bc657ab0a117538c7c116566ae7579ed47ac3f572c42dc78bd6f1e18f52ebe80d38300c991c3fcaa06979e2f8864ee919369dabd59072288de30 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" + dependencies: + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" + checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.27.6": + version: 7.28.2 + resolution: "@babel/helpers@npm:7.28.2" + dependencies: + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.2" + checksum: 10c0/f3e7b21517e2699c4ca193663ecfb1bf1b2ae2762d8ba4a9f1786feaca0d6984537fc60bf2206e92c43640a6dada6b438f523cc1ad78610d0151aeb061b37f63 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6": + version: 7.26.5 + resolution: "@babel/parser@npm:7.26.5" + dependencies: + "@babel/types": "npm:^7.26.5" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e + languageName: node + linkType: hard + +"@babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/parser@npm:7.27.2" + dependencies: + "@babel/types": "npm:^7.27.1" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/parser@npm:7.28.0" + dependencies: + "@babel/types": "npm:^7.28.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7dfffa978ae1cd179641a7c4b4ad688c6828c2c58ec96b118c2fb10bc3715223de6b88bff1ebff67056bb5fccc568ae773e3b83c592a1b843423319f80c99ebd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/b94e6c3fc019e988b1499490829c327a1067b4ddea8ad402f6d0554793c9124148c2125338c723661b6dff040951abc1f092afbf3f2d234319cd580b68e52445 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/06a954ee672f7a7c44d52b6e55598da43a7064e80df219765c51c37a0692641277e90411028f7cae4f4d1dedeed084f0c453576fa421c35a81f1603c5e3e0146 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/739d577e649d7d7b9845dc309e132964327ab3eaea43ad04d04a7dcb977c63f9aa9a423d1ca39baf10939128d02f52e6fda39c834fb9f1753785b1497e72c4dc + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e76b1f6f9c3bbf72e17d7639406d47f09481806de4db99a8de375a0bb40957ea309b20aa705f0c25ab1d7c845e3f365af67eafa368034521151a0e352a03ef2f + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/787d85e72a92917e735aa54e23062fa777031f8a07046e67f5026eff3d91e64eb535575dd1df917b0011bee014ae51287478af14c1d4ba60bc81e326bc044cfc + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cc0662633c0fe6df95819fef223506ddf26c369c8d64ab21a728d9007ec866bf9436a253909819216c24a82186b6ccbc1ec94d7aaf3f82df227c7c02fa6a704b + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/396997dd81fc1cf242b921e337d25089d6b9dc3596e81322ff11a6359326dc44f2f8b82dcc279c2e514cafaf8964dc7ed39e9fab4b8af1308b57387d111f6a20 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-classes@npm:7.28.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3b213b43104fe99dd7e79401a86d09e545836e057a70ffe77e8196a87bf67ae167e502ae90afdf0d1a2be683be5652514aaeda743bd984e583523dd8ecfef887 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e09a12f8c8ae0e6a6144c102956947b4ec05f6c844169121d0ec4529c2d30ad1dc59fee67736193b87a402f44552c888a519a680a31853bdb4d34788c28af3b0 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cc7ccafa952b3ff7888544d5688cfafaba78c69ce1e2f04f3233f4f78c9de5e46e9695f5ea42c085b0c0cfa39b10f366d362a2be245b6d35b66d3eb1d427ccb2 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f9caddfad9a551b4dabe0dcb7c040f458fbaaa7bbb44200c20198b32c8259be8e050e58d2c853fdac901a4cfe490b86aa857036d8d461b192dd010d0e242dedb + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/121502a252b3206913e1e990a47fea34397b4cbf7804d4cd872d45961bc45b603423f60ca87f3a3023a62528f5feb475ac1c9ec76096899ec182fcb135eba375 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 + languageName: node + linkType: hard + +"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3baa706af3112adf2ae0c7ec0dc61b63dd02695eb5582f3c3a2b2d05399c6aa7756f55e7bbbd5412e613a6ba1dd6b6736904074b4d7ebd6b45a1e3f9145e4094 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/953d21e01fed76da8e08fb5094cade7bf8927c1bb79301916bec2db0593b41dbcfbca1024ad5db886b72208a93ada8f57a219525aad048cf15814eeb65cf760d + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2379714aca025516452a7c1afa1ca42a22b9b51a5050a653cc6198a51665ab82bdecf36106d32d731512706a1e373c5637f5ff635737319aa42f3827da2326d6 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b0abc7c0d09d562bf555c646dce63a30288e5db46fd2ce809a61d064415da6efc3b2b3c59b8e4fe98accd072c89a2f7c3765b400e4bf488651735d314d9feeb + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4def972dcd23375a266ea1189115a4ff61744b2c9366fc1de648b3fab2c650faf1a94092de93a33ff18858d2e6c4dddeeee5384cb42ba0129baeab01a5cdf1e2 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f16fca62d144d9cbf558e7b5f83e13bb6d0f21fdeff3024b0cecd42ffdec0b4151461da42bd0963512783ece31aafa5ffe03446b4869220ddd095b24d414e2b5 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a435fc03aaa65c6ef8e99b2d61af0994eb5cdd4a28562d78c3b0b0228ca7e501aa255e1dff091a6996d7d3ea808eb5a65fd50ecd28dfb10687a8a1095dcadc7a + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b72cbebbfe46fcf319504edc1cf59f3f41c992dd6840db766367f6a1d232cd2c52143c5eaf57e0316710bee251cae94be97c6d646b5022fcd9274ccb131b470c + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.0" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.0" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/360dc6fd5285ee5e1d3be8a1fb0decd120b2a1726800317b4ab48b7c91616247030239b7fa06ceaa1a8a586fde1e143c24d45f8d41956876099d97d664f8ef1e + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/807a4330f1fac08e2682d57bc82e714868fc651c8876f9a8b3a3fd8f53c129e87371f8243e712ac7dae11e090b737a2219a02fe1b6459a29e664fa073c3277bb + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b18ff5124e503f0a25d6b195be7351a028b3992d6f2a91fb4037e2a2c386400d66bc1df8f6df0a94c708524f318729e81a95c41906e5a7919a06a43e573a525 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.27.7": + version: 7.27.7 + resolution: "@babel/plugin-transform-parameters@npm:7.27.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/232bedfe9d28df215fb03cc7623bdde468b1246bdd6dc24465ff4bf9cc5f5a256ae33daea1fafa6cc59705e4d29da9024bb79baccaa5cd92811ac5db9b9244f2 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a8c4536273ca716dcc98e74ea25ca76431528554922f184392be3ddaf1761d4aa0e06f1311577755bd1613f7054fb51d29de2ada1130f743d329170a1aa1fe56 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.28.0": + version: 7.28.1 + resolution: "@babel/plugin-transform-regenerator@npm:7.28.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6c9e6eb80ce9c0bde0876c80979e078fbc85dc802272cba4ee72b5b1c858472e38167c418917e4f0d4384ce888706d95544a8d266880c0e199e167e078168b67 + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/31ae596ab56751cf43468a6c0a9d6bc3521d306d2bee9c6957cdb64bea53812ce24bd13a32f766150d62b737bca5b0650b2c62db379382fff0dccbf076055c33 + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-runtime@npm:7.28.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/71eba1e6aaafacb2ec0fd468394c7aeaff32265b21424bd9b2d963368a4a5260547e06976bb34e2553a7179463c3a3a4c2a4552256b5112c8b7dcadb7bd5bb07 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-spread@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b34fc58b33bd35b47d67416655c2cbc8578fbb3948b4592bc15eb6d8b4046986e25c06e3b9929460fa4ab08e9653582415e7ef8b87d265e1239251bdf5a4c162 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.27.1": + version: 7.28.0 + resolution: "@babel/plugin-transform-typescript@npm:7.28.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/049c2bd3407bbf5041d8c95805a4fadee6d176e034f6b94ce7967b92a846f1e00f323cf7dfbb2d06c93485f241fb8cf4c10520e30096a6059d251b94e80386e9 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a332bc3cb3eeea67c47502bc52d13a0f8abae5a7bfcb08b93a8300ddaff8d9e1238f912969494c1b494c1898c6f19687054440706700b6d12cb0b90d88beb4d0 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/236645f4d0a1fba7c18dc8ffe3975933af93e478f2665650c2d91cf528cfa1587cde5cfe277e0e501fc03b5bf57638369575d6539cef478632fb93bd7d7d7178 + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/preset-env@npm:7.28.0" + dependencies: + "@babel/compat-data": "npm:^7.28.0" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" + "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.28.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.27.1" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.28.0" + "@babel/plugin-transform-class-properties": "npm:^7.27.1" + "@babel/plugin-transform-class-static-block": "npm:^7.27.1" + "@babel/plugin-transform-classes": "npm:^7.28.0" + "@babel/plugin-transform-computed-properties": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.0" + "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.0" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.27.1" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.27.1" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.27.1" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-modules-systemjs": "npm:^7.27.1" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1" + "@babel/plugin-transform-numeric-separator": "npm:^7.27.1" + "@babel/plugin-transform-object-rest-spread": "npm:^7.28.0" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/plugin-transform-private-methods": "npm:^7.27.1" + "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.28.0" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.27.1" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f343103b8f0e8da5be4ae031aff8bf35da4764997af4af78ae9506f421b785dd45da1bc09f845b1fc308c8b7d134aead4a1f89e7fb6e213cd2f9fe1d2aa78bc9 + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@babel/types": "npm:^7.4.4" + esutils: "npm:^2.0.2" + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/preset-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cba6ca793d915f8aff9fe2f13b0dfbf5fd3f2e9a17f17478ec9878e9af0d206dcfe93154b9fd353727f16c1dca7c7a3ceb4943f8d28b216235f106bc0fbbcaa3 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.13.9": + version: 7.28.2 + resolution: "@babel/runtime@npm:7.28.2" + checksum: 10c0/c20afe253629d53a405a610b12a62ac74d341a2c1e0fb202bbef0c118f6b5c84f94bf16039f58fd0483dd256901259930a43976845bdeb180cab1f882c21b6e0 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.2" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/traverse@npm:7.26.5" + dependencies: + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.5" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.5" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/traverse@npm:7.27.1" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/traverse@npm:7.28.0" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.0" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.0" + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.0" + debug: "npm:^4.3.1" + checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5, @babel/types@npm:^7.6.1, @babel/types@npm:^7.9.6": + version: 7.26.5 + resolution: "@babel/types@npm:7.26.5" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 + languageName: node + linkType: hard + +"@babel/types@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 + languageName: node + linkType: hard + +"@babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2, @babel/types@npm:^7.4.4": + version: 7.28.2 + resolution: "@babel/types@npm:7.28.2" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/24b11c9368e7e2c291fe3c1bcd1ed66f6593a3975f479cbb9dd7b8c8d8eab8a962b0d2fca616c043396ce82500ac7d23d594fbbbd013828182c01596370a0b10 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 + languageName: node + linkType: hard + +"@comunica/actor-abstract-mediatyped@npm:^1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-abstract-mediatyped@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/7812dbca52fc7442579ccc95a1b2a0e7b41058dcfab56c55e18a142c666e7ba8f7b7ff62f64ed205c6f0a4128cbab63dd1a84faaf5d8a84545b3e635c447a2ac + languageName: node + linkType: hard + +"@comunica/actor-http-native@npm:~1.22.0": + version: 1.22.1 + resolution: "@comunica/actor-http-native@npm:1.22.1" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@types/parse-link-header": "npm:^1.0.0" + cross-fetch: "npm:^3.0.5" + follow-redirects: "npm:^1.5.1" + parse-link-header: "npm:^1.0.1" + peerDependencies: + "@comunica/bus-http": ^1.0.0 + "@comunica/core": ^1.0.0 + checksum: 10c0/65288a5ae2cbefdcc5b7315851a4a7488966357de3ecf35510aa8f379241675d8579a9d595b44bffbc93eec544071fb6107d2c51ce6555f224e5273273dab07f + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html-microdata@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html-microdata@npm:1.22.0" + dependencies: + microdata-rdf-streaming-parser: "npm:^1.2.0" + peerDependencies: + "@comunica/bus-rdf-parse-html": ^1.17.0 + "@comunica/core": ^1.17.0 + checksum: 10c0/ceeb80e597ffa78dec991cd0c6fdd0af54f4a0fe93708aa2c41cecef6f10a9374b2f7fbfb221cce60d6f4ea4792e9eec04eb774b60005073545937c46b56ee6e + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html-rdfa@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html-rdfa@npm:1.22.0" + dependencies: + rdfa-streaming-parser: "npm:^1.5.0" + peerDependencies: + "@comunica/bus-rdf-parse-html": ^1.0.0 + "@comunica/core": ^1.8.0 + checksum: 10c0/0a9969b1227f5a94712f58c9b45501174a49689e225d4b4805b7edbc9a8b035c1bc77a46b08e00b9b1f4354f5054e82b7d4197889cce44fce8b18390dfdc2742 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html-script@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html-script@npm:1.22.0" + dependencies: + "@comunica/bus-rdf-parse-html": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + relative-to-absolute-iri: "npm:^1.0.5" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.4.0 + "@comunica/core": ^1.4.0 + checksum: 10c0/7da4ddf8aaffd7f17d96c56b800a27c2cf7f87ad6b00daa620a89a800184ae7d32cdc871a3dcef202a8dd95fcfd316744ac72289681593be009dca74620b81c0 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html@npm:1.22.0" + dependencies: + "@comunica/bus-rdf-parse-html": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + htmlparser2: "npm:^7.0.0" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.8.0 + "@comunica/core": ^1.8.0 + checksum: 10c0/9a0e2932d6f4e4242438a581e0fd88a3149395c5a2b8bdc5e120c757a8a42423ad1e5e3c7fbfa110bab3bea06041a41bb207ca6a68dbfc6b7c9e4fe4d23191a1 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-jsonld@npm:^1.22.0": + version: 1.22.1 + resolution: "@comunica/actor-rdf-parse-jsonld@npm:1.22.1" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + jsonld-context-parser: "npm:^2.1.2" + jsonld-streaming-parser: "npm:^2.4.0" + stream-to-string: "npm:^1.2.0" + peerDependencies: + "@comunica/bus-http": ^1.0.0 + "@comunica/bus-rdf-parse": ^1.0.0 + "@comunica/core": ^1.0.0 + checksum: 10c0/959e5abe524083704705f1e13470cbaf00fdcdf6f8434b657e98155f390b13d651544899200c85456f5bb800a78367c3a9bef241a574707712091a430269eb31 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-n3@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-n3@npm:1.22.0" + dependencies: + "@types/n3": "npm:^1.4.4" + n3: "npm:^1.6.3" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.0.0 + "@comunica/core": ^1.0.0 + checksum: 10c0/5651a13e6b07ac4f45f73fd525077f1fd5c43af64944b4882ec7bd4f31eae12c87a763f3a39fbccb8018a39144f60e11fac2db2a725e73ca1f2595f936d05f37 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-rdfxml@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-rdfxml@npm:1.22.0" + dependencies: + rdfxml-streaming-parser: "npm:^1.5.0" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.1.0 + "@comunica/core": ^1.1.0 + checksum: 10c0/c4cf0c85794995fe94438108ea54fe5ff74928d8bb179aa3b52bc1bdcb3dcade02d9ef16dfbdf27e22cf4760ba1786f6989b34c2eed3fbd1c80815ca0cf5aa13 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-xml-rdfa@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-xml-rdfa@npm:1.22.0" + dependencies: + rdfa-streaming-parser: "npm:^1.5.0" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.8.0 + "@comunica/core": ^1.8.0 + checksum: 10c0/d517f28fc6b63b0d88a31b0a7a2053f9f0d74c4d3040669b139c3e64a193b364ec59bb7a291eda08ca10b74e51d9b7045724f5772ee99731278ac06093243da5 + languageName: node + linkType: hard + +"@comunica/bus-http@npm:~1.22.0": + version: 1.22.1 + resolution: "@comunica/bus-http@npm:1.22.1" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@types/readable-stream": "npm:^2.3.11" + is-stream: "npm:^2.0.0" + readable-web-to-node-stream: "npm:^3.0.2" + web-streams-node: "npm:^0.4.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/5578a14ab438e11a4da413119a24d4da1b3f681be44ab7c05711bfbff563d9601de793e081c524747ae6a66fad413a82d3d52814915ba8c92fb96055f5f37f41 + languageName: node + linkType: hard + +"@comunica/bus-init@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/bus-init@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/76ed0ad2c12125788a98611276ed30ebd1e7f2ae52541e8f64ebde71fcb513bf6d6eed38322da3fc955197f104d20571aa1a0c54444907c8bbbd5c58058ba101 + languageName: node + linkType: hard + +"@comunica/bus-rdf-parse-html@npm:^1.22.0, @comunica/bus-rdf-parse-html@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/bus-rdf-parse-html@npm:1.22.0" + dependencies: + "@rdfjs/types": "npm:*" + peerDependencies: + "@comunica/core": ^1.8.0 + checksum: 10c0/fb68896db681674831130d521e0e41d85bb2e3fea2be96f2f44f9304cb9e1271b1c51221d16c3d8bb015b55e2c108611562657e3c89fc8bd6e5c087f04290bfa + languageName: node + linkType: hard + +"@comunica/bus-rdf-parse@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/bus-rdf-parse@npm:1.22.0" + dependencies: + "@comunica/actor-abstract-mediatyped": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/f4e3eb35b7757a93a44f1050de542f6e8fc39fcf74b22c89100eaec4556653b270163422f918a9e09833f57244e82553b7a03a80bbdab64c82b97b3aebf7dd02 + languageName: node + linkType: hard + +"@comunica/context-entries@npm:^1.22.0": + version: 1.22.0 + resolution: "@comunica/context-entries@npm:1.22.0" + checksum: 10c0/edd1cb3e7861f043e63040f98e9959ace55a1c9b90ed5ab9ab0bc40eea182ec81b75e7c1650e1e1a64dc97634f33f6c6b57878f0003bd0217f696040ec8b9234 + languageName: node + linkType: hard + +"@comunica/core@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/core@npm:1.22.0" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@comunica/types": "npm:^1.22.0" + immutable: "npm:^3.8.2" + checksum: 10c0/73b4d0228b87ee8807d7219c7cae045389cf8b967b2cbfe024f244bb9cffb73b38c516673cf80764fa02ab3c1d32f803a0de05b88d9b38c0eff8a701f97a1c03 + languageName: node + linkType: hard + +"@comunica/mediator-combine-union@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/mediator-combine-union@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/72cee255c14709a3039149b64f281a480c32d2deade1c704587c3714d827ecc5e1ecbb1762211d2d554cf4759d4ba1a4fddd243c1e8bfda4493883b7bd07dca0 + languageName: node + linkType: hard + +"@comunica/mediator-number@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/mediator-number@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/f7fb1863ae17b4316da03af93333e9a288d4a4067a9f09e838e9a59aeee70f385e1c21dd3f144d352991d865dbcd7d809ddddfa26b7e6dedf65dbc56124bf4ae + languageName: node + linkType: hard + +"@comunica/mediator-race@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/mediator-race@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/6506d8fe2631a55be151c2ca4d2efdeab2fa0a376d650bbdab1b78aa5773507df5ab874eac0931990d1965879cc0566fa056663e1461f71fec67eb7d93d810ca + languageName: node + linkType: hard + +"@comunica/types@npm:^1.22.0": + version: 1.22.0 + resolution: "@comunica/types@npm:1.22.0" + dependencies: + "@rdfjs/types": "npm:*" + asynciterator: "npm:^3.2.0" + immutable: "npm:^3.8.2" + sparqlalgebrajs: "npm:^3.0.1" + checksum: 10c0/55810c126392810f973467ae0b411e942b4d3202cd67500994321621dd550f4a9a470bba24a095d100edc8ad207e8936627ab6a6a4fbb33cc1c1098d10e1db88 + languageName: node + linkType: hard + +"@digitalbazaar/credentials-context@npm:^3.1.0": + version: 3.1.0 + resolution: "@digitalbazaar/credentials-context@npm:3.1.0" + checksum: 10c0/0fa22d00542450b3e0567511779dafcd943bcba75a2be83fa80b95c1f255f1b2f701ea64a0ab3959c8503a9f1682f724de0ffe8f5eea18b065d5074d61e52cb7 + languageName: node + linkType: hard + +"@digitalbazaar/data-integrity@npm:^2.5.0": + version: 2.5.0 + resolution: "@digitalbazaar/data-integrity@npm:2.5.0" + dependencies: + base58-universal: "npm:^2.0.0" + base64url-universal: "npm:^2.0.0" + jsonld-signatures: "npm:^11.3.0" + checksum: 10c0/0080cbbd5425ef83e0ca3855fb8bc18f6d382a5f2aebba9a1dc7003dc6e066d2fd1ad95737f6ea36c3c8c2f696330316991aabb46d518420220487b8444086f5 + languageName: node + linkType: hard + +"@digitalbazaar/ed25519-multikey@npm:^1.0.0, @digitalbazaar/ed25519-multikey@npm:^1.1.0, @digitalbazaar/ed25519-multikey@npm:^1.3.0": + version: 1.3.0 + resolution: "@digitalbazaar/ed25519-multikey@npm:1.3.0" + dependencies: + "@noble/ed25519": "npm:^1.6.0" + base58-universal: "npm:^2.0.0" + base64url-universal: "npm:^2.0.0" + checksum: 10c0/07cf6ea5591a269fca5b9709481e249b20cf83145ab56c25c8b75f668739163af95eae6742b50b8575522075e0933242343564d14d661f5bcae70fade13726b5 + languageName: node + linkType: hard + +"@digitalbazaar/ed25519-signature-2020@npm:^5.4.0": + version: 5.4.0 + resolution: "@digitalbazaar/ed25519-signature-2020@npm:5.4.0" + dependencies: + "@digitalbazaar/ed25519-multikey": "npm:^1.1.0" + "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.1.0" + base58-universal: "npm:^2.0.0" + ed25519-signature-2020-context: "npm:^1.1.0" + jsonld-signatures: "npm:^11.3.0" + checksum: 10c0/7fcdd54c18d85dbbf937464ff8f330876de336d2607c944981fa8e69bcc2df59a5181441d364c27e269d1a6d2028217ed3f662028634c57ab55e739c3af42c16 + languageName: node + linkType: hard + +"@digitalbazaar/ed25519-verification-key-2020@npm:^4.1.0, @digitalbazaar/ed25519-verification-key-2020@npm:^4.2.0": + version: 4.2.0 + resolution: "@digitalbazaar/ed25519-verification-key-2020@npm:4.2.0" + dependencies: + "@noble/ed25519": "npm:^1.6.0" + base58-universal: "npm:^2.0.0" + base64url-universal: "npm:^2.0.0" + crypto-ld: "npm:^7.0.0" + checksum: 10c0/386b4be965e10b0253c5fd620c4e386c2f57587937c9215ed0127c3f42016d32e99844cc5eabbddc41642ade31760539e67e97d69cfdb0df6b3beb58737b9a01 + languageName: node + linkType: hard + +"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:^1.2.0": + version: 1.2.0 + resolution: "@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:1.2.0" + dependencies: + "@digitalbazaar/ed25519-multikey": "npm:^1.0.0" + jsonld: "npm:^8.1.0" + rdf-canonize: "npm:^4.0.1" + checksum: 10c0/2473ddb96cf50ab6e478f203ff3eaa7b530a9a96bb45c5f8cfada1fe4fb29dc04cd92cff86c6b9286848b86531deccbd3cdfca7fc0821a09880e94af8b3d8bed + languageName: node + linkType: hard + +"@digitalbazaar/http-client@npm:^3.4.1": + version: 3.4.1 + resolution: "@digitalbazaar/http-client@npm:3.4.1" + dependencies: + ky: "npm:^0.33.3" + ky-universal: "npm:^0.11.0" + undici: "npm:^5.21.2" + checksum: 10c0/218240da52e7303a63e822448fb6dc2eb3a42d0418f51fd9240b267703ffad2e45c17df01d5d8f6886ea8d0cdcf65ee929ae5377703c0e9d2db4f68313f8246c + languageName: node + linkType: hard + +"@digitalbazaar/security-context@npm:^1.0.0": + version: 1.0.1 + resolution: "@digitalbazaar/security-context@npm:1.0.1" + checksum: 10c0/6d1444002958454be5dd70cc6ba4d0df952f90162756d6320d88501ff44fc7d48dcb2aa3452b77e8941a9da4e4c7d050d3510827db93637ff469b92391c63324 + languageName: node + linkType: hard + +"@digitalbazaar/vc@npm:^7.1.0": + version: 7.1.0 + resolution: "@digitalbazaar/vc@npm:7.1.0" + dependencies: + "@digitalbazaar/credentials-context": "npm:^3.1.0" + ed25519-signature-2018-context: "npm:^1.1.0" + jsonld: "npm:^8.3.1" + jsonld-signatures: "npm:^11.2.1" + checksum: 10c0/4914cd7bfc2556512b7b1b78b7032180fcd8a966d365ecd62f0534da2347fa43b9023f2460f15fd9c8029088af8ecc81481603fe9cf953e40393a956338356bb + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.1.0": + version: 1.3.1 + resolution: "@emnapi/core@npm:1.3.1" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.1" + tslib: "npm:^2.4.0" + checksum: 10c0/d3be1044ad704e2c486641bc18908523490f28c7d38bd12d9c1d4ce37d39dae6c4aecd2f2eaf44c6e3bd90eaf04e0591acc440b1b038cdf43cce078a355a0ea0 + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.4.3": + version: 1.4.5 + resolution: "@emnapi/core@npm:1.4.5" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.4" + tslib: "npm:^2.4.0" + checksum: 10c0/da4a57f65f325d720d0e0d1a9c6618b90c4c43a5027834a110476984e1d47c95ebaed4d316b5dddb9c0ed9a493ffeb97d1934f9677035f336d8a36c1f3b2818f + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.1.0": + version: 1.3.1 + resolution: "@emnapi/runtime@npm:1.3.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.4.3": + version: 1.4.5 + resolution: "@emnapi/runtime@npm:1.4.5" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/37a0278be5ac81e918efe36f1449875cbafba947039c53c65a1f8fc238001b866446fc66041513b286baaff5d6f9bec667f5164b3ca481373a8d9cb65bfc984b + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.1": + version: 1.0.1 + resolution: "@emnapi/wasi-threads@npm:1.0.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/1e0c8036b8d53e9b07cc9acf021705ef6c86ab6b13e1acda7fffaf541a2d3565072afb92597419173ced9ea14f6bf32fce149106e669b5902b825e8b499e5c6c + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.4": + version: 1.0.4 + resolution: "@emnapi/wasi-threads@npm:1.0.4" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/2c91a53e62f875800baf035c4d42c9c0d18e5afd9a31ca2aac8b435aeaeaeaac386b5b3d0d0e70aa7a5a9852bbe05106b1f680cd82cce03145c703b423d41313 + languageName: node + linkType: hard + +"@es-joy/jsdoccomment@npm:~0.46.0": + version: 0.46.0 + resolution: "@es-joy/jsdoccomment@npm:0.46.0" + dependencies: + comment-parser: "npm:1.4.1" + esquery: "npm:^1.6.0" + jsdoc-type-pratt-parser: "npm:~4.0.0" + checksum: 10c0/a7a67936ebf6d9aaf74af018c3ac744769af3552b05ad9b88fca96b2ffdca16e724b0ff497f53634ec4cca81e98d8c471b6b6bde0fa5b725af4222ad9a0707f0 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^1.0.0": + version: 1.2.1 + resolution: "@fastify/busboy@npm:1.2.1" + dependencies: + text-decoding: "npm:^1.0.0" + checksum: 10c0/fe13effa7a7a2aa270ef62586cd8d04339036b10ffa1d3d6a883e502fcc1bdc6d8de1bd7ac9d46ef7718bed3b1202cac058e281f5053dee262af7538243cb780 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c + languageName: node + linkType: hard + +"@hutson/parse-repository-url@npm:^3.0.0": + version: 3.0.2 + resolution: "@hutson/parse-repository-url@npm:3.0.2" + checksum: 10c0/d9197757ecad2df18d29d3e1d1fe0716d458fd88b849c71cbec9e78239f911074c97e8d764dfd8ed890431c1137e52dd7a337207fd65be20ce0784f7860ae4d1 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 10c0/d67226ff7ac544a495c77df38187e69e0e3a0783724777f86caadafb306e2155dc3b5787d5927916ddd7fb4a53561ac8f705448ac3235d18ea60da5854829fdf + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: "npm:^5.3.1" + find-up: "npm:^4.1.0" + get-package-type: "npm:^0.1.0" + js-yaml: "npm:^3.13.1" + resolve-from: "npm:^5.0.0" + checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + languageName: node + linkType: hard + +"@jest/console@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/console@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + jest-message-util: "npm:30.0.5" + jest-util: "npm:30.0.5" + slash: "npm:^3.0.0" + checksum: 10c0/1400e9ee281dd070f543f8f8696b9aca4ba1f81d5cbfb3cae030664012ff5961c76ac2c8ccee172e416e15f88af3b10840548adbee4de0ec63100d44416b17ef + languageName: node + linkType: hard + +"@jest/core@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/core@npm:30.0.5" + dependencies: + "@jest/console": "npm:30.0.5" + "@jest/pattern": "npm:30.0.1" + "@jest/reporters": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + exit-x: "npm:^0.2.2" + graceful-fs: "npm:^4.2.11" + jest-changed-files: "npm:30.0.5" + jest-config: "npm:30.0.5" + jest-haste-map: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.0.5" + jest-resolve-dependencies: "npm:30.0.5" + jest-runner: "npm:30.0.5" + jest-runtime: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + jest-watcher: "npm:30.0.5" + micromatch: "npm:^4.0.8" + pretty-format: "npm:30.0.5" + slash: "npm:^3.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/d3437dca1fccbb44c6c8a327b93e510e10999745b7c7dae94ad88d4fa4ce6d3c823e49d17caf79560b69a7db91fc10c7443a8014f8178622a0b11514b5106aa6 + languageName: node + linkType: hard + +"@jest/diff-sequences@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/diff-sequences@npm:30.0.1" + checksum: 10c0/3a840404e6021725ef7f86b11f7b2d13dd02846481264db0e447ee33b7ee992134e402cdc8b8b0ac969d37c6c0183044e382dedee72001cdf50cfb3c8088de74 + languageName: node + linkType: hard + +"@jest/environment@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/environment@npm:30.0.5" + dependencies: + "@jest/fake-timers": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + jest-mock: "npm:30.0.5" + checksum: 10c0/e403b6f98fa3e39dd6462fa192e3bd55e9ac9c2322ca4471b9342495913a90ecaa5fc53238d4ad8a0dca7d53aa4b9de122721234e36f3a0445031c25757a3178 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/expect-utils@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + checksum: 10c0/d0ee162a1d1816724580bea53e7b422b891af073bdae439e78d04d5db09e6557e334f4c3d2892b9de750a59e79605f55d3ca8dbec9fb2ba33d8b803ed98463ad + languageName: node + linkType: hard + +"@jest/expect@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/expect@npm:30.0.5" + dependencies: + expect: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + checksum: 10c0/6ff40adf2f2cfa53f7a23bc2b85ae99d3264420e81202d45d1dc198009f4441ee575d910e79e589f69c2dd47e0ef9a3b66018f44760da02d98f474361f7c4d1c + languageName: node + linkType: hard + +"@jest/fake-timers@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/fake-timers@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@sinonjs/fake-timers": "npm:^13.0.0" + "@types/node": "npm:*" + jest-message-util: "npm:30.0.5" + jest-mock: "npm:30.0.5" + jest-util: "npm:30.0.5" + checksum: 10c0/4c403e624d758780016c2012b23112ff421efd601def289b201c4a5e03c46f995c7c3509d7b0b56dbe17cd5cbc66920734bd976ebe12125d6fd864d71888a50d + languageName: node + linkType: hard + +"@jest/get-type@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/get-type@npm:30.0.1" + checksum: 10c0/92437ae42d0df57e8acc2d067288151439db4752cde4f5e680c73c8a6e34568bbd8c1c81a2f2f9a637a619c2aac8bc87553fb80e31475b59e2ed789a71e5e540 + languageName: node + linkType: hard + +"@jest/globals@npm:30.0.5, @jest/globals@npm:^30.0.5": + version: 30.0.5 + resolution: "@jest/globals@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/expect": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + jest-mock: "npm:30.0.5" + checksum: 10c0/abe8e4b11f30c2885e42afa9e01d4364db8c6de4c3221f411b00a9081d3cc67226f84775efbbd17735dedb391222253f945ee260714d78b2a7304b7afa61b6d8 + languageName: node + linkType: hard + +"@jest/pattern@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/pattern@npm:30.0.1" + dependencies: + "@types/node": "npm:*" + jest-regex-util: "npm:30.0.1" + checksum: 10c0/32c5a7bfb6c591f004dac0ed36d645002ed168971e4c89bd915d1577031672870032594767557b855c5bc330aa1e39a2f54bf150d2ee88a7a0886e9cb65318bc + languageName: node + linkType: hard + +"@jest/reporters@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/reporters@npm:30.0.5" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + collect-v8-coverage: "npm:^1.0.2" + exit-x: "npm:^0.2.2" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^5.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-worker: "npm:30.0.5" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.2" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/9f8a214ff69427b644e26981fa92af49b77819d512ac17d0b4190d1dc110b0bebeb7791faa7548b8097f010b094c3b5e3244e18f3837a3fe8385ff60c7114539 + languageName: node + linkType: hard + +"@jest/schemas@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/schemas@npm:30.0.5" + dependencies: + "@sinclair/typebox": "npm:^0.34.0" + checksum: 10c0/449dcd7ec5c6505e9ac3169d1143937e67044ae3e66a729ce4baf31812dfd30535f2b3b2934393c97cfdf5984ff581120e6b38f62b8560c8b5b7cc07f4175f65 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jest/snapshot-utils@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/snapshot-utils@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + natural-compare: "npm:^1.4.0" + checksum: 10c0/db270c2d6e216d132c5e0b05d8ff5bbe4fbd4e65b2de4cf94eacb44152e8f17fbbba8bdd2cb83b5fc2b1094db6424c7e1507b7eaade518dbc815cfacbdf6598b + languageName: node + linkType: hard + +"@jest/source-map@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/source-map@npm:30.0.1" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + callsites: "npm:^3.1.0" + graceful-fs: "npm:^4.2.11" + checksum: 10c0/e7bda2786fc9f483d9dd7566c58c4bd948830997be862dfe80a3ae5550ff3f84753abb52e705d02ebe9db9f34ba7ebec4c2db11882048cdeef7a66f6332b3897 + languageName: node + linkType: hard + +"@jest/test-result@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/test-result@npm:30.0.5" + dependencies: + "@jest/console": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + collect-v8-coverage: "npm:^1.0.2" + checksum: 10c0/2a43134ee28616a178b5a6379c837f2fb054a5e4a6ab411b9d15b85224e5d459d88902cdbf83edf5821c2c77fe13e67d078eff64c6871f3b08ebff0548a9a2e4 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/test-sequencer@npm:30.0.5" + dependencies: + "@jest/test-result": "npm:30.0.5" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + slash: "npm:^3.0.0" + checksum: 10c0/3caaea0558474764cd616f38acdc22ff4ce6ef806d931134ed366429fdea7110352b89d702e9cc1d71fa142d79e86f2f4e6eb0441a76a1896682e124ed8f42b4 + languageName: node + linkType: hard + +"@jest/transform@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/transform@npm:30.0.5" + dependencies: + "@babel/core": "npm:^7.27.4" + "@jest/types": "npm:30.0.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + babel-plugin-istanbul: "npm:^7.0.0" + chalk: "npm:^4.1.2" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-util: "npm:30.0.5" + micromatch: "npm:^4.0.8" + pirates: "npm:^4.0.7" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^5.0.1" + checksum: 10c0/771f57b1bede66049de80dcbf984c74b7d3c072e905f2516ff3f86dc01abd2f79d821b9a6ae21f27cb26d484cd539c13b1a51f71c15e1aed0c62314203c5a186 + languageName: node + linkType: hard + +"@jest/types@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/types@npm:30.0.5" + dependencies: + "@jest/pattern": "npm:30.0.1" + "@jest/schemas": "npm:30.0.5" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + "@types/istanbul-reports": "npm:^3.0.4" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.33" + chalk: "npm:^4.1.2" + checksum: 10c0/fd097a390e36edacbd2c92a8378ec0cd67abec5e234bab7a80aec6eb8625568052b0c32acf472388d04c4cf384b8fa2871d0d12a56b4b06eaea93f2c6df0ec6c + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.12": + version: 0.3.12 + resolution: "@jridgewell/gen-mapping@npm:0.3.12" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/32f771ae2467e4d440be609581f7338d786d3d621bac3469e943b9d6d116c23c4becb36f84898a92bbf2f3c0511365c54a945a3b86a83141547a2a360a5ec0c7 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.4 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" + checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.29 + resolution: "@jridgewell/trace-mapping@npm:0.3.29" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/fb547ba31658c4d74eb17e7389f4908bf7c44cef47acb4c5baa57289daf68e6fe53c639f41f751b3923aca67010501264f70e7b49978ad1f040294b22c37b333 + languageName: node + linkType: hard + +"@lerna/create@npm:8.1.9": + version: 8.1.9 + resolution: "@lerna/create@npm:8.1.9" + dependencies: + "@npmcli/arborist": "npm:7.5.4" + "@npmcli/package-json": "npm:5.2.0" + "@npmcli/run-script": "npm:8.1.0" + "@nx/devkit": "npm:>=17.1.2 < 21" + "@octokit/plugin-enterprise-rest": "npm:6.0.1" + "@octokit/rest": "npm:19.0.11" + aproba: "npm:2.0.0" + byte-size: "npm:8.1.1" + chalk: "npm:4.1.0" + clone-deep: "npm:4.0.1" + cmd-shim: "npm:6.0.3" + color-support: "npm:1.1.3" + columnify: "npm:1.6.0" + console-control-strings: "npm:^1.1.0" + conventional-changelog-core: "npm:5.0.1" + conventional-recommended-bump: "npm:7.0.1" + cosmiconfig: "npm:9.0.0" + dedent: "npm:1.5.3" + execa: "npm:5.0.0" + fs-extra: "npm:^11.2.0" + get-stream: "npm:6.0.0" + git-url-parse: "npm:14.0.0" + glob-parent: "npm:6.0.2" + globby: "npm:11.1.0" + graceful-fs: "npm:4.2.11" + has-unicode: "npm:2.0.1" + ini: "npm:^1.3.8" + init-package-json: "npm:6.0.3" + inquirer: "npm:^8.2.4" + is-ci: "npm:3.0.1" + is-stream: "npm:2.0.0" + js-yaml: "npm:4.1.0" + libnpmpublish: "npm:9.0.9" + load-json-file: "npm:6.2.0" + lodash: "npm:^4.17.21" + make-dir: "npm:4.0.0" + minimatch: "npm:3.0.5" + multimatch: "npm:5.0.0" + node-fetch: "npm:2.6.7" + npm-package-arg: "npm:11.0.2" + npm-packlist: "npm:8.0.2" + npm-registry-fetch: "npm:^17.1.0" + nx: "npm:>=17.1.2 < 21" + p-map: "npm:4.0.0" + p-map-series: "npm:2.1.0" + p-queue: "npm:6.6.2" + p-reduce: "npm:^2.1.0" + pacote: "npm:^18.0.6" + pify: "npm:5.0.0" + read-cmd-shim: "npm:4.0.0" + resolve-from: "npm:5.0.0" + rimraf: "npm:^4.4.1" + semver: "npm:^7.3.4" + set-blocking: "npm:^2.0.0" + signal-exit: "npm:3.0.7" + slash: "npm:^3.0.0" + ssri: "npm:^10.0.6" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + strong-log-transformer: "npm:2.1.0" + tar: "npm:6.2.1" + temp-dir: "npm:1.0.0" + upath: "npm:2.0.1" + uuid: "npm:^10.0.0" + validate-npm-package-license: "npm:^3.0.4" + validate-npm-package-name: "npm:5.0.1" + wide-align: "npm:1.1.5" + write-file-atomic: "npm:5.0.1" + write-pkg: "npm:4.0.0" + yargs: "npm:17.7.2" + yargs-parser: "npm:21.1.1" + checksum: 10c0/f050e79c0bd982c6fdf9b7347275a94cc80f7a6599094f1cf114c10d5373c21afac9bd1a5c0b2ca400e6aaf18da883c384dfd6e5c84a186a2c09c912bf9b2238 + languageName: node + linkType: hard + +"@mapbox/node-pre-gyp@npm:^1.0.11": + version: 1.0.11 + resolution: "@mapbox/node-pre-gyp@npm:1.0.11" + dependencies: + detect-libc: "npm:^2.0.0" + https-proxy-agent: "npm:^5.0.0" + make-dir: "npm:^3.1.0" + node-fetch: "npm:^2.6.7" + nopt: "npm:^5.0.0" + npmlog: "npm:^5.0.1" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.11" + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:0.2.4": + version: 0.2.4 + resolution: "@napi-rs/wasm-runtime@npm:0.2.4" + dependencies: + "@emnapi/core": "npm:^1.1.0" + "@emnapi/runtime": "npm:^1.1.0" + "@tybys/wasm-util": "npm:^0.9.0" + checksum: 10c0/1040de49b2ef509db207e2517465dbf7fb3474f20e8ec32897672a962ff4f59872385666dac61dc9dbeae3cae5dad265d8dc3865da756adeb07d1634c67b03a1 + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.12 + resolution: "@napi-rs/wasm-runtime@npm:0.2.12" + dependencies: + "@emnapi/core": "npm:^1.4.3" + "@emnapi/runtime": "npm:^1.4.3" + "@tybys/wasm-util": "npm:^0.10.0" + checksum: 10c0/6d07922c0613aab30c6a497f4df297ca7c54e5b480e00035e0209b872d5c6aab7162fc49477267556109c2c7ed1eb9c65a174e27e9b87568106a87b0a6e3ca7d + languageName: node + linkType: hard + +"@noble/ed25519@npm:^1.6.0": + version: 1.7.3 + resolution: "@noble/ed25519@npm:1.7.3" + checksum: 10c0/dc162c3be5ae5a3cc0e6aff8209c8d175f24bba22f2b473aa849e102471193c83664b06f0ba2b5e01e9aa1a67a44daf313f478adb9f38768408a8bcad6145a48 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@nolyfill/is-core-module@npm:1.0.39": + version: 1.0.39 + resolution: "@nolyfill/is-core-module@npm:1.0.39" + checksum: 10c0/34ab85fdc2e0250879518841f74a30c276bca4f6c3e13526d2d1fe515e1adf6d46c25fcd5989d22ea056d76f7c39210945180b4859fc83b050e2da411aa86289 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/arborist@npm:7.5.4": + version: 7.5.4 + resolution: "@npmcli/arborist@npm:7.5.4" + dependencies: + "@isaacs/string-locale-compare": "npm:^1.1.0" + "@npmcli/fs": "npm:^3.1.1" + "@npmcli/installed-package-contents": "npm:^2.1.0" + "@npmcli/map-workspaces": "npm:^3.0.2" + "@npmcli/metavuln-calculator": "npm:^7.1.1" + "@npmcli/name-from-folder": "npm:^2.0.0" + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/query": "npm:^3.1.0" + "@npmcli/redact": "npm:^2.0.0" + "@npmcli/run-script": "npm:^8.1.0" + bin-links: "npm:^4.0.4" + cacache: "npm:^18.0.3" + common-ancestor-path: "npm:^1.0.1" + hosted-git-info: "npm:^7.0.2" + json-parse-even-better-errors: "npm:^3.0.2" + json-stringify-nice: "npm:^1.1.4" + lru-cache: "npm:^10.2.2" + minimatch: "npm:^9.0.4" + nopt: "npm:^7.2.1" + npm-install-checks: "npm:^6.2.0" + npm-package-arg: "npm:^11.0.2" + npm-pick-manifest: "npm:^9.0.1" + npm-registry-fetch: "npm:^17.0.1" + pacote: "npm:^18.0.6" + parse-conflict-json: "npm:^3.0.0" + proc-log: "npm:^4.2.0" + proggy: "npm:^2.0.0" + promise-all-reject-late: "npm:^1.0.0" + promise-call-limit: "npm:^3.0.1" + read-package-json-fast: "npm:^3.0.2" + semver: "npm:^7.3.7" + ssri: "npm:^10.0.6" + treeverse: "npm:^3.0.0" + walk-up-path: "npm:^3.0.1" + bin: + arborist: bin/index.js + checksum: 10c0/22417b804872e68b6486187bb769eabef7245c5d3fa055d5473f84a7088580543235f34af3047a0e9b357e70fccd768e8ef5c6c8664ed6909f659d07607ad955 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@npmcli/git@npm:^5.0.0": + version: 5.0.8 + resolution: "@npmcli/git@npm:5.0.8" + dependencies: + "@npmcli/promise-spawn": "npm:^7.0.0" + ini: "npm:^4.1.3" + lru-cache: "npm:^10.0.1" + npm-pick-manifest: "npm:^9.0.0" + proc-log: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^4.0.0" + checksum: 10c0/892441c968404950809c7b515a93b78167ea1db2252f259f390feae22a2c5477f3e1629e105e19a084c05afc56e585bf3f13c2f13b54a06bfd6786f0c8429532 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": + version: 2.1.0 + resolution: "@npmcli/installed-package-contents@npm:2.1.0" + dependencies: + npm-bundled: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + bin: + installed-package-contents: bin/index.js + checksum: 10c0/f5ecba0d45fc762f3e0d5def29fbfabd5d55e8147b01ae0a101769245c2e0038bc82a167836513a98aaed0a15c3d81fcdb232056bb8a962972a432533e518fce + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.6 + resolution: "@npmcli/map-workspaces@npm:3.0.6" + dependencies: + "@npmcli/name-from-folder": "npm:^2.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + checksum: 10c0/6bfcf8ca05ab9ddc2bd19c0fd91e9982f03cc6e67b0c03f04ba4d2f29b7d83f96e759c0f8f1f4b6dbe3182272483643a0d1269788352edd0c883d6fbfa2f3f14 + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^7.1.1": + version: 7.1.1 + resolution: "@npmcli/metavuln-calculator@npm:7.1.1" + dependencies: + cacache: "npm:^18.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + pacote: "npm:^18.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + checksum: 10c0/27402cab124bb1fca56af7549f730c38c0ab40de60cbef6264a4193c26c2d28cefb2adac29ed27f368031795704f9f8fe0c547c4c8cb0c0fa94d72330d56ac80 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: 10c0/1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/node-gyp@npm:3.0.0" + checksum: 10c0/5d0ac17dacf2dd6e45312af2c1ae2749bb0730fcc82da101c37d3a4fd963a5e1c5d39781e5e1e5e5828df4ab1ad4e3fdbab1d69b7cd0abebad9983efb87df985 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:5.2.0": + version: 5.2.0 + resolution: "@npmcli/package-json@npm:5.2.0" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/bdce8c7eed0dee1d272bf8ba500c4bce6d8ed2b4dd2ce43075d3ba02ffd3bb70c46dbcf8b3a35e19d9492d039b720dc3a4b30d1a2ddc30b7918e1d5232faa1f7 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": + version: 5.2.1 + resolution: "@npmcli/package-json@npm:5.2.1" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/b852e31e3121a0afe5fa20bbf4faa701a59dbc9d9dd7141f7fd57b8e919ce22c1285dcdfea490851fe410fa0f7bc9c397cafba0d268aaa53420a12d7c561dde1 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^7.0.0": + version: 7.0.2 + resolution: "@npmcli/promise-spawn@npm:7.0.2" + dependencies: + which: "npm:^4.0.0" + checksum: 10c0/8f2af5bc2c1b1ccfb9bcd91da8873ab4723616d8bd5af877c0daa40b1e2cbfa4afb79e052611284179cae918c945a1b99ae1c565d78a355bec1a461011e89f71 + languageName: node + linkType: hard + +"@npmcli/query@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/query@npm:3.1.0" + dependencies: + postcss-selector-parser: "npm:^6.0.10" + checksum: 10c0/9a099677dd188a2d9eb7a49e32c69d315b09faea59e851b7c2013b5bda915a38434efa7295565c40a1098916c06ebfa1840f68d831180e36842f48c24f4c5186 + languageName: node + linkType: hard + +"@npmcli/redact@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/redact@npm:2.0.1" + checksum: 10c0/5f346f7ef224b44c90009939f93c446a865a3d9e5a7ebe0246cdb0ebd03219de3962ee6c6e9197298d8c6127ea33535e8c44814276e4941394dc1cdf1f30f6bc + languageName: node + linkType: hard + +"@npmcli/run-script@npm:8.1.0, @npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": + version: 8.1.0 + resolution: "@npmcli/run-script@npm:8.1.0" + dependencies: + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.0.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + node-gyp: "npm:^10.0.0" + proc-log: "npm:^4.0.0" + which: "npm:^4.0.0" + checksum: 10c0/f9f40ecff0406a9ce1b77c9f714fc7c71b561289361efc6e2e0e48ca2d630aa98d277cbbf269750f9467a40eaaac79e78766d67c458046aa9507c8c354650fee + languageName: node + linkType: hard + +"@nrwl/tao@npm:v17.2.5": + version: 17.2.5 + resolution: "@nrwl/tao@npm:17.2.5" + dependencies: + nx: "npm:v17.2.5" + tslib: "npm:^2.3.0" + bin: + tao: index.js + checksum: 10c0/d98361141704d83487f2401116cafa7348acb30a1637336ddc471fdc42313503280767777c9752e91df0e56d3b7491251894172817e0e5ee514fe44d3ab2bf09 + languageName: node + linkType: hard + +"@nx/devkit@npm:>=17.1.2 < 21": + version: 20.3.2 + resolution: "@nx/devkit@npm:20.3.2" + dependencies: + ejs: "npm:^3.1.7" + enquirer: "npm:~2.3.6" + ignore: "npm:^5.0.4" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.3" + tmp: "npm:~0.2.1" + tslib: "npm:^2.3.0" + yargs-parser: "npm:21.1.1" + peerDependencies: + nx: ">= 19 <= 21" + checksum: 10c0/0c59aaea2c6b45712c28186b95792ae2530f928025aa7cea7d0175f9e0532ad3feeaa85b84d23e35378182c689819baa47daeb76ee4d26d823c926421830afd4 + languageName: node + linkType: hard + +"@nx/nx-darwin-arm64@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-darwin-arm64@npm:20.3.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-darwin-arm64@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-darwin-arm64@npm:17.2.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-darwin-x64@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-darwin-x64@npm:20.3.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-darwin-x64@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-darwin-x64@npm:17.2.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-freebsd-x64@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-freebsd-x64@npm:20.3.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-freebsd-x64@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-freebsd-x64@npm:17.2.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-linux-arm-gnueabihf@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.3.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nx/nx-linux-arm-gnueabihf@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:17.2.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-gnu@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-arm64-gnu@npm:20.3.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-gnu@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-arm64-gnu@npm:17.2.5" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-musl@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-arm64-musl@npm:20.3.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-musl@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-arm64-musl@npm:17.2.5" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-x64-gnu@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-x64-gnu@npm:20.3.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-x64-gnu@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-x64-gnu@npm:17.2.5" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-x64-musl@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-x64-musl@npm:20.3.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-x64-musl@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-x64-musl@npm:17.2.5" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-win32-arm64-msvc@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-win32-arm64-msvc@npm:20.3.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-win32-arm64-msvc@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-win32-arm64-msvc@npm:17.2.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-win32-x64-msvc@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-win32-x64-msvc@npm:20.3.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-win32-x64-msvc@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-win32-x64-msvc@npm:17.2.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^3.0.0": + version: 3.0.4 + resolution: "@octokit/auth-token@npm:3.0.4" + checksum: 10c0/abdf5e2da36344de9727c70ba782d58004f5ae1da0f65fa9bc9216af596ef23c0e4675f386df2f6886806612558091d603564051b693b0ad1986aa6160b7a231 + languageName: node + linkType: hard + +"@octokit/core@npm:^4.2.1": + version: 4.2.4 + resolution: "@octokit/core@npm:4.2.4" + dependencies: + "@octokit/auth-token": "npm:^3.0.0" + "@octokit/graphql": "npm:^5.0.0" + "@octokit/request": "npm:^6.0.0" + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + before-after-hook: "npm:^2.2.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/e54081a56884e628d1804837fddcd48c10d516117bb891551c8dc9d8e3dad449aeb9b4677ca71e8f0e76268c2b7656c953099506679aaa4666765228474a3ce6 + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^7.0.0": + version: 7.0.6 + resolution: "@octokit/endpoint@npm:7.0.6" + dependencies: + "@octokit/types": "npm:^9.0.0" + is-plain-object: "npm:^5.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/fd147a55010b54af7567bf90791359f7096a1c9916a2b7c72f8afd0c53141338b3d78da3a4ab3e3bdfeb26218a1b73735432d8987ccc04996b1019219299f115 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^5.0.0": + version: 5.0.6 + resolution: "@octokit/graphql@npm:5.0.6" + dependencies: + "@octokit/request": "npm:^6.0.0" + "@octokit/types": "npm:^9.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/de1d839d97fe6d96179925f6714bf96e7af6f77929892596bb4211adab14add3291fc5872b269a3d0e91a4dcf248d16096c82606c4a43538cf241b815c2e2a36 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^18.0.0": + version: 18.1.1 + resolution: "@octokit/openapi-types@npm:18.1.1" + checksum: 10c0/856d3bb9f8c666e837dd5e8b8c216ee4342b9ed63ff8da922ca4ce5883ed1dfbec73390eb13d69fbcb4703a4c8b8b6a586df3b0e675ff93bf3d46b5b4fe0968e + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-rest@npm:6.0.1": + version: 6.0.1 + resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" + checksum: 10c0/26bd0a30582954efcd29b41e16698db79e9d20e3f88c4069b43b183223cee69862621f18b6a7a1c9257b1cd07c24477e403b75c74688660ecf31d467b9d8fd9e + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^6.1.2": + version: 6.1.2 + resolution: "@octokit/plugin-paginate-rest@npm:6.1.2" + dependencies: + "@octokit/tsconfig": "npm:^1.0.2" + "@octokit/types": "npm:^9.2.3" + peerDependencies: + "@octokit/core": ">=4" + checksum: 10c0/def241c4f00b864822ab6414eaadd8679a6d332004c7e77467cfc1e6d5bdcc453c76bd185710ee942e4df201f9dd2170d960f46af5b14ef6f261a0068f656364 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^1.0.4": + version: 1.0.4 + resolution: "@octokit/plugin-request-log@npm:1.0.4" + peerDependencies: + "@octokit/core": ">=3" + checksum: 10c0/7238585445555db553912e0cdef82801c89c6e5cbc62c23ae086761c23cc4a403d6c3fddd20348bbd42fb7508e2c2fce370eb18fdbe3fbae2c0d2c8be974f4cc + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^7.1.2": + version: 7.2.3 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" + dependencies: + "@octokit/types": "npm:^10.0.0" + peerDependencies: + "@octokit/core": ">=3" + checksum: 10c0/8bffbc5852695dd08d65cc64b6ab7d2871ed9df1e791608f48b488a3908b5b655e3686b5dd72fc37c824e82bdd4dfc9d24e2e50205bbc324667def1d705bc9da + languageName: node + linkType: hard + +"@octokit/request-error@npm:^3.0.0": + version: 3.0.3 + resolution: "@octokit/request-error@npm:3.0.3" + dependencies: + "@octokit/types": "npm:^9.0.0" + deprecation: "npm:^2.0.0" + once: "npm:^1.4.0" + checksum: 10c0/1e252ac193c8af23b709909911aa327ed5372cbafcba09e4aff41e0f640a7c152579ab0a60311a92e37b4e7936392d59ee4c2feae5cdc387ee8587a33d8afa60 + languageName: node + linkType: hard + +"@octokit/request@npm:^6.0.0": + version: 6.2.8 + resolution: "@octokit/request@npm:6.2.8" + dependencies: + "@octokit/endpoint": "npm:^7.0.0" + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + is-plain-object: "npm:^5.0.0" + node-fetch: "npm:^2.6.7" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/6b6079ed45bac44c4579b40990bfd1905b03d4bc4e5255f3d5a10cf5182171578ebe19abeab32ebb11a806f1131947f2a06b7a077bd7e77ade7b15fe2882174b + languageName: node + linkType: hard + +"@octokit/rest@npm:19.0.11": + version: 19.0.11 + resolution: "@octokit/rest@npm:19.0.11" + dependencies: + "@octokit/core": "npm:^4.2.1" + "@octokit/plugin-paginate-rest": "npm:^6.1.2" + "@octokit/plugin-request-log": "npm:^1.0.4" + "@octokit/plugin-rest-endpoint-methods": "npm:^7.1.2" + checksum: 10c0/a14ae31fc5e70e76d2492aae63d3453cbb71f44e7492400f885ab5ac6b2612bcb244bafa29e45a59461f3e5d99807ff9c88d48af8317ffa4f8ad3f8f11fdd035 + languageName: node + linkType: hard + +"@octokit/tsconfig@npm:^1.0.2": + version: 1.0.2 + resolution: "@octokit/tsconfig@npm:1.0.2" + checksum: 10c0/84db70b495beeed69259dd4def14cdfb600edeb65ef32811558c99413ee2b414ed10bff9c4dcc7a43451d0fd36b4925ada9ef7d4272b5eae38cb005cc2f459ac + languageName: node + linkType: hard + +"@octokit/types@npm:^10.0.0": + version: 10.0.0 + resolution: "@octokit/types@npm:10.0.0" + dependencies: + "@octokit/openapi-types": "npm:^18.0.0" + checksum: 10c0/9bbbec1e452c271752e5ba735c161a558933f2e35f3004bb0b6e8d6ba574af48b68bab2f293112a8e68c595435a2fbcc76f3e7333f45ba1888bb5193777a943e + languageName: node + linkType: hard + +"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": + version: 9.3.2 + resolution: "@octokit/types@npm:9.3.2" + dependencies: + "@octokit/openapi-types": "npm:^18.0.0" + checksum: 10c0/2925479aa378a4491762b4fcf381bdc7daca39b4e0b2dd7062bce5d74a32ed7d79d20d3c65ceaca6d105cf4b1f7417fea634219bf90f79a57d03e2dac629ec45 + languageName: node + linkType: hard + +"@panva/asn1.js@npm:^1.0.0": + version: 1.0.0 + resolution: "@panva/asn1.js@npm:1.0.0" + checksum: 10c0/5d6e7ec460b65b017043e2702e25f323936baad2aa248dbd9bf54c9508e351d236bffac96fa033c6e36cb0482a9dd73c3605948a36a59bd6bec49353ba8d7b62 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.2.9": + version: 0.2.9 + resolution: "@pkgr/core@npm:0.2.9" + checksum: 10c0/ac8e4e8138b1a7a4ac6282873aef7389c352f1f8b577b4850778f5182e4a39a5241facbe48361fec817f56d02b51691b383010843fb08b34a8e8ea3614688fd5 + languageName: node + linkType: hard + +"@rdfjs/data-model@npm:^1.3.4": + version: 1.3.4 + resolution: "@rdfjs/data-model@npm:1.3.4" + dependencies: + "@rdfjs/types": "npm:>=1.0.1" + bin: + rdfjs-data-model-test: bin/test.js + checksum: 10c0/2f9f04b0f74cbcfd90b521eb51d7ab708164df16cc582ea4322dc364f66ad39ca9f1fc52d0db0b1c93e3043e86a5568ab2ecf66d7633051714e853e02e793ce8 + languageName: node + linkType: hard + +"@rdfjs/types@npm:*, @rdfjs/types@npm:>=1.0.0, @rdfjs/types@npm:>=1.0.1": + version: 2.0.1 + resolution: "@rdfjs/types@npm:2.0.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/81012b02e28737e15dfc27068664bbab7b989cc2ff82e0a6a341df492d9d97210b5e462d85bfb7882aa0ef5bf84e2c5e95647fb779b67b7b1910b1837d79c500 + languageName: node + linkType: hard + +"@rdfjs/types@npm:^1.0.0, @rdfjs/types@npm:^1.1.0": + version: 1.1.2 + resolution: "@rdfjs/types@npm:1.1.2" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/128242157d44453d1f5eac9d93cecfddb44acc4e6675751b2cccbc6c33b44492573785eb748e1841fd4a29921ba8e0412ba038824103d97c38a19f72033d9a5c + languageName: node + linkType: hard + +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b + languageName: node + linkType: hard + +"@seald-io/binary-search-tree@npm:^1.0.2": + version: 1.0.3 + resolution: "@seald-io/binary-search-tree@npm:1.0.3" + checksum: 10c0/cf86bfca881c84cf22fa11a96dffd358f58424bd779c9afb7e36934be2e8ad923da54252972a12a2d42a9473557829a573950b0f78213b901ceb9dcc862397e1 + languageName: node + linkType: hard + +"@seald-io/nedb@npm:^3.0.0": + version: 3.1.0 + resolution: "@seald-io/nedb@npm:3.1.0" + dependencies: + "@seald-io/binary-search-tree": "npm:^1.0.2" + localforage: "npm:^1.9.0" + util: "npm:^0.12.4" + checksum: 10c0/2bced9094700b188ce9cbf29502e60cb37b4165b53a9a636d08d985cac976da5d056fd0e990d8b90c4a2b0b58c3c15243a2cbd49aef80ac87f5e31bacb0d1bb0 + languageName: node + linkType: hard + +"@semapps/activitypub@npm:1.1.4, @semapps/activitypub@workspace:packages/activitypub": + version: 0.0.0-use.local + resolution: "@semapps/activitypub@workspace:packages/activitypub" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/crypto": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + handlebars: "npm:^4.7.7" + moleculer-bull: "npm:^0.2.5" + moleculer-db: "npm:^0.8.16" + moleculer-web: "npm:^0.10.0-beta1" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/auth@npm:1.1.4, @semapps/auth@workspace:packages/auth": + version: 0.0.0-use.local + resolution: "@semapps/auth@workspace:packages/auth" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + bcrypt: "npm:^5.0.1" + express-session: "npm:^1.17.0" + jsonwebtoken: "npm:^9.0.2" + moleculer-db: "npm:^0.8.16" + moleculer-mail: "npm:^1.2.5" + moleculer-web: "npm:^0.10.0-beta1" + openid-client: "npm:^4.7.4" + passport: "npm:^0.4.1" + passport-cas2: "npm:0.0.12" + passport-local: "npm:^1.0.0" + pug: "npm:^3.0.2" + speakingurl: "npm:^14.0.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/backup@workspace:packages/backup": + version: 0.0.0-use.local + resolution: "@semapps/backup@workspace:packages/backup" + dependencies: + cron: "npm:^1.8.2" + fs-extra: "npm:^10.0.0" + rsync: "npm:^0.6.1" + ssh2-sftp-client: "npm:^7.2.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/core@npm:1.1.4, @semapps/core@workspace:packages/core": + version: 0.0.0-use.local + resolution: "@semapps/core@workspace:packages/core" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/crypto": "npm:1.1.4" + "@semapps/jsonld": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/sparql-endpoint": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@semapps/void": "npm:1.1.4" + "@semapps/webacl": "npm:1.1.4" + "@semapps/webfinger": "npm:1.1.4" + "@semapps/webid": "npm:1.1.4" + moleculer-web: "npm:^0.10.0-beta1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/crypto@npm:1.1.4, @semapps/crypto@workspace:packages/crypto": + version: 0.0.0-use.local + resolution: "@semapps/crypto@workspace:packages/crypto" + dependencies: + "@digitalbazaar/data-integrity": "npm:^2.5.0" + "@digitalbazaar/ed25519-multikey": "npm:^1.3.0" + "@digitalbazaar/ed25519-signature-2020": "npm:^5.4.0" + "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.2.0" + "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "npm:^1.2.0" + "@digitalbazaar/vc": "npm:^7.1.0" + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + crypto-ld: "npm:^7.0.0" + http-signature: "npm:^1.3.4" + http-signature-header: "npm:^1.3.1" + jose: "npm:^5.2.0" + jsonld-signatures: "npm:^11.3.2" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + vc-js: "npm:^0.6.4" + peerDependencies: + moleculer: ^0.14.35 + moleculer-web: ^0.10.0-beta1 + languageName: unknown + linkType: soft + +"@semapps/importer@workspace:packages/importer": + version: 0.0.0-use.local + resolution: "@semapps/importer@workspace:packages/importer" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + cron-parser: "npm:^4.2.1" + google-libphonenumber: "npm:^3.2.26" + node-fetch: "npm:^2.6.6" + sanitize-html: "npm:^2.6.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/inference@npm:1.1.4, @semapps/inference@workspace:packages/inference": + version: 0.0.0-use.local + resolution: "@semapps/inference@workspace:packages/inference" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + n3: "npm:^1.6.3" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/jsonld@npm:1.1.4, @semapps/jsonld@workspace:packages/jsonld": + version: 0.0.0-use.local + resolution: "@semapps/jsonld@workspace:packages/jsonld" + dependencies: + "@types/jsonld": "npm:1.5.15" + jsonld: "npm:^3.3.2" + jsonld-context-parser: "npm:^2.4.0" + jsonld-streaming-parser: "npm:^2.4.2" + jsonld-streaming-serializer: "npm:^1.2.0" + lru-cache: "npm:^6.0.0" + n3: "npm:^1.26.0" + rdf-parse: "npm:^1.7.0" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/ldp@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/ldp@npm:1.0.10" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/middlewares": "npm:1.0.10" + "@semapps/mime-types": "npm:1.0.10" + "@semapps/ontologies": "npm:1.0.10" + "@semapps/triplestore": "npm:1.0.10" + dashify: "npm:^2.0.0" + http-link-header: "npm:^1.1.1" + mime-types: "npm:^2.1.35" + moleculer: "npm:^0.14.17" + moleculer-db: "npm:^0.8.16" + moleculer-schedule: "npm:^0.2.3" + moleculer-web: "npm:^0.10.0-beta1" + node-fetch: "npm:^2.6.6" + path-to-regexp: "npm:^6.2.0" + rdf-parse: "npm:^1.7.0" + sharp: "npm:^0.31.2" + sparqljs: "npm:^3.5.2" + speakingurl: "npm:^14.0.1" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + checksum: 10c0/dc8e8a673b4c04e46976f1440bbe7f6e024974fda979f1bdaf8731a1803260381bceba2f8e4fd9ee7b6191cc92738ebb4441a75768edeee3d75d08bba16c21fb + languageName: node + linkType: hard + +"@semapps/ldp@npm:1.1.4, @semapps/ldp@workspace:packages/ldp": + version: 0.0.0-use.local + resolution: "@semapps/ldp@workspace:packages/ldp" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + bytes: "npm:^3.1.2" + cron: "npm:^4.1.4" + dashify: "npm:^2.0.0" + http-link-header: "npm:^1.1.1" + mime-types: "npm:^2.1.35" + moleculer-db: "npm:^0.8.16" + moleculer-schedule: "npm:^0.2.3" + moleculer-web: "npm:^0.10.0-beta1" + node-fetch: "npm:^2.6.6" + path-to-regexp: "npm:^6.2.0" + rdf-parse: "npm:^1.7.0" + sharp: "npm:^0.31.2" + sparqljs: "npm:^3.5.2" + speakingurl: "npm:^14.0.1" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/middlewares@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/middlewares@npm:1.0.10" + dependencies: + "@semapps/mime-types": "npm:1.0.10" + busboy: "npm:^0.3.1" + memory-streams: "npm:^0.1.3" + moleculer: "npm:^0.14.18" + checksum: 10c0/f0d72246d0342b79babe76e7eddd041787c5dbc7d5ddb12dcbc3c7e902d84b4b28989f983e79f8dba668cfe673aeea6be4c7f9cf7c527b47ed908098eb7b23bf + languageName: node + linkType: hard + +"@semapps/middlewares@npm:1.1.4, @semapps/middlewares@workspace:packages/middlewares": + version: 0.0.0-use.local + resolution: "@semapps/middlewares@workspace:packages/middlewares" + dependencies: + "@semapps/mime-types": "npm:1.1.4" + busboy: "npm:^0.3.1" + memory-streams: "npm:^0.1.3" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/migration@workspace:packages/migration": + version: 0.0.0-use.local + resolution: "@semapps/migration@workspace:packages/migration" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/webacl": "npm:1.1.4" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/mime-types@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/mime-types@npm:1.0.10" + dependencies: + moleculer: "npm:^0.14.18" + negotiator: "npm:^0.6.2" + checksum: 10c0/aefb957dc606d2bc31994f9a0370d43ddeb73d3135f3aadcd2ed629b84aa361b1706cb01ed4c5f7c35aa82831d2834df2632adf811ffdb5693ab44eb55891030 + languageName: node + linkType: hard + +"@semapps/mime-types@npm:1.1.4, @semapps/mime-types@workspace:packages/mime-types": + version: 0.0.0-use.local + resolution: "@semapps/mime-types@workspace:packages/mime-types" + dependencies: + negotiator: "npm:^0.6.2" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/nodeinfo@workspace:packages/nodeinfo": + version: 0.0.0-use.local + resolution: "@semapps/nodeinfo@workspace:packages/nodeinfo" + dependencies: + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/notifications@workspace:packages/notifications": + version: 0.0.0-use.local + resolution: "@semapps/notifications@workspace:packages/notifications" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + cron-parser: "npm:^4.3.0" + expo-server-sdk: "npm:^3.4.0" + moleculer-db: "npm:^0.8.15" + moleculer-mail: "npm:^1.2.5" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/ontologies@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/ontologies@npm:1.0.10" + dependencies: + "@semapps/triplestore": "npm:1.0.10" + moleculer-db: "npm:^0.8.16" + node-fetch: "npm:^2.6.6" + checksum: 10c0/aa6eb56b330f46fdbcd2591925a79723ecfd718e4ae10a22f5e590017d416da9c85b51d83b40e37cbace55a1257c3204965271709d83c871a379bbd98d140c7b + languageName: node + linkType: hard + +"@semapps/ontologies@npm:1.1.4, @semapps/ontologies@workspace:packages/ontologies": + version: 0.0.0-use.local + resolution: "@semapps/ontologies@workspace:packages/ontologies" + dependencies: + "@semapps/triplestore": "npm:1.1.4" + moleculer-db: "npm:^0.8.16" + node-fetch: "npm:^2.6.6" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/solid@workspace:packages/solid": + version: 0.0.0-use.local + resolution: "@semapps/solid@workspace:packages/solid" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@semapps/webid": "npm:1.1.4" + http-link-header: "npm:^1.1.1" + moleculer-bull: "npm:^0.2.5" + moleculer-db: "npm:^0.8.16" + moleculer-web: "npm:^0.10.0-beta1" + moment: "npm:2.30.1" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/sparql-endpoint@npm:1.1.4, @semapps/sparql-endpoint@workspace:packages/sparql-endpoint": + version: 0.0.0-use.local + resolution: "@semapps/sparql-endpoint@workspace:packages/sparql-endpoint" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + moleculer-web: "npm:^0.10.0-beta1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/sync@npm:1.1.4, @semapps/sync@workspace:packages/sync": + version: 0.0.0-use.local + resolution: "@semapps/sync@workspace:packages/sync" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/triplestore@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/triplestore@npm:1.0.10" + dependencies: + "@semapps/middlewares": "npm:1.0.10" + "@semapps/mime-types": "npm:1.0.10" + jsonld: "npm:^3.3.2" + moleculer: "npm:^0.14.29" + negotiator: "npm:^0.6.2" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + sparqljson-parse: "npm:^1.5.1" + string-template: "npm:^1.0.0" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + checksum: 10c0/c205ea8c85d5a6d9914c3c9f5cafe0f9bc4c3cc3e424b63db2173942fad6c7a5e5082126600ea9a2e7a246d21f5d4b905f82302ec2f042734ea400cd5f00c9f1 + languageName: node + linkType: hard + +"@semapps/triplestore@npm:1.1.4, @semapps/triplestore@workspace:packages/triplestore": + version: 0.0.0-use.local + resolution: "@semapps/triplestore@workspace:packages/triplestore" + dependencies: + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + jsonld: "npm:^3.3.2" + negotiator: "npm:^0.6.2" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + sparqljson-parse: "npm:^1.5.1" + string-template: "npm:^1.0.0" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/void@npm:1.1.4, @semapps/void@workspace:packages/void": + version: 0.0.0-use.local + resolution: "@semapps/void@workspace:packages/void" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + jsonld-streaming-serializer: "npm:^1.2.0" + n3: "npm:^1.8.0" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webacl@npm:1.1.4, @semapps/webacl@workspace:packages/webacl": + version: 0.0.0-use.local + resolution: "@semapps/webacl@workspace:packages/webacl" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@types/url-join": "npm:^4.0.1" + jsonld-streaming-serializer: "npm:^1.2.0" + n3: "npm:^1.8.0" + rdf-parse: "npm:^1.7.0" + speakingurl: "npm:^14.0.1" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webfinger@npm:1.1.4, @semapps/webfinger@workspace:packages/webfinger": + version: 0.0.0-use.local + resolution: "@semapps/webfinger@workspace:packages/webfinger" + dependencies: + "@semapps/mime-types": "npm:1.1.4" + node-fetch: "npm:^2.6.6" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webhooks@workspace:packages/webhooks": + version: 0.0.0-use.local + resolution: "@semapps/webhooks@workspace:packages/webhooks" + dependencies: + "@semapps/ldp": "npm:1.0.10" + "@semapps/triplestore": "npm:1.0.10" + moleculer-db: "npm:^0.8.15" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webid@npm:1.1.4, @semapps/webid@workspace:packages/webid": + version: 0.0.0-use.local + resolution: "@semapps/webid@workspace:packages/webid" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@sigstore/bundle@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/bundle@npm:2.3.2" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/872a95928236bd9950a2ecc66af1c60a82f6b482a62a20d0f817392d568a60739a2432cad70449ac01e44e9eaf85822d6d9ebc6ade6cb3e79a7d62226622eb5d + languageName: node + linkType: hard + +"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": + version: 1.1.0 + resolution: "@sigstore/core@npm:1.1.0" + checksum: 10c0/3b3420c1bd17de0371e1ac7c8f07a2cbcd24d6b49ace5bbf2b63f559ee08c4a80622a4d1c0ae42f2c9872166e9cb111f33f78bff763d47e5ef1efc62b8e457ea + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.3.2": + version: 0.3.3 + resolution: "@sigstore/protobuf-specs@npm:0.3.3" + checksum: 10c0/e0a68795fa19e437fca2c3993e5a57e989642d65434beda54b29017c1629176cc8abeb81bb1e0923259cdfb19fe1fee6f1b8680a8f8240dc14c7a7de2bbae7af + languageName: node + linkType: hard + +"@sigstore/sign@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/sign@npm:2.3.2" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + make-fetch-happen: "npm:^13.0.1" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + checksum: 10c0/a1e7908f3e4898f04db4d713fa10ddb3ae4f851592c9b554f1269073211e1417528b5088ecee60f27039fde5a5426ae573481d77cfd7e4395d2a0ddfcf5f365f + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^2.3.4": + version: 2.3.4 + resolution: "@sigstore/tuf@npm:2.3.4" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + tuf-js: "npm:^2.2.1" + checksum: 10c0/97839882d787196517933df5505fae4634975807cc7adcd1783c7840c2a9729efb83ada47556ec326d544b9cb0d1851af990dc46eebb5fe7ea17bf7ce1fc0b8c + languageName: node + linkType: hard + +"@sigstore/verify@npm:^1.2.1": + version: 1.2.1 + resolution: "@sigstore/verify@npm:1.2.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.1.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/af06580a8d5357c31259da1ac7323137054e0ac41e933278d95a4bc409a4463620125cb4c00b502f6bc32fdd68c2293019391b0d31ed921ee3852a9e84358628 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.34.0": + version: 0.34.38 + resolution: "@sinclair/typebox@npm:0.34.38" + checksum: 10c0/c1b9a1547c64de01ff5c89351baf289d2d5f19cfef3ae30fe4748a103eb58d0842618318543cd3de964cb0370d5a859e24aba231ade9b43ee2ef4d0bb4db7084 + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^4.0.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.1": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: "npm:4.0.8" + checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^13.0.0": + version: 13.0.5 + resolution: "@sinonjs/fake-timers@npm:13.0.5" + dependencies: + "@sinonjs/commons": "npm:^3.0.1" + checksum: 10c0/a707476efd523d2138ef6bba916c83c4a377a8372ef04fad87499458af9f01afc58f4f245c5fd062793d6d70587309330c6f96947b5bd5697961c18004dc3e26 + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^4.0.5": + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" + dependencies: + defer-to-connect: "npm:^2.0.0" + checksum: 10c0/73946918c025339db68b09abd91fa3001e87fc749c619d2e9c2003a663039d4c3cb89836c98a96598b3d47dec2481284ba85355392644911f5ecd2336536697f + languageName: node + linkType: hard + +"@tufjs/canonical-json@npm:2.0.0": + version: 2.0.0 + resolution: "@tufjs/canonical-json@npm:2.0.0" + checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 + languageName: node + linkType: hard + +"@tufjs/models@npm:2.0.1": + version: 2.0.1 + resolution: "@tufjs/models@npm:2.0.1" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^9.0.4" + checksum: 10c0/ad9e82fd921954501fd90ed34ae062254637595577ad13fdc1e076405c0ea5ee7d8aebad09e63032972fd92b07f1786c15b24a195a171fc8ac470ca8e2ffbcc4 + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.10.0": + version: 0.10.0 + resolution: "@tybys/wasm-util@npm:0.10.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/044feba55c1e2af703aa4946139969badb183ce1a659a75ed60bc195a90e73a3f3fc53bcd643497c9954597763ddb051fec62f80962b2ca6fc716ba897dc696e + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.9.0": + version: 0.9.0 + resolution: "@tybys/wasm-util@npm:0.9.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.20.5": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 + languageName: node + linkType: hard + +"@types/cacheable-request@npm:^6.0.1": + version: 6.0.3 + resolution: "@types/cacheable-request@npm:6.0.3" + dependencies: + "@types/http-cache-semantics": "npm:*" + "@types/keyv": "npm:^3.1.4" + "@types/node": "npm:*" + "@types/responselike": "npm:^1.0.0" + checksum: 10c0/10816a88e4e5b144d43c1d15a81003f86d649776c7f410c9b5e6579d0ad9d4ca71c541962fb403077388b446e41af7ae38d313e46692144985f006ac5e11fa03 + languageName: node + linkType: hard + +"@types/dotenv-flow@npm:^3.3.3": + version: 3.3.3 + resolution: "@types/dotenv-flow@npm:3.3.3" + checksum: 10c0/a67ecdec769e0e5bf376219ee80a2ffab423d9120dd121b538860d666bf46af07ff336860a7db2b1d41fcdd2dd006fc0ec6fa98f82cd01e566c37b00038b91ec + languageName: node + linkType: hard + +"@types/http-cache-semantics@npm:*": + version: 4.0.4 + resolution: "@types/http-cache-semantics@npm:4.0.4" + checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 + languageName: node + linkType: hard + +"@types/http-link-header@npm:^1.0.1": + version: 1.0.7 + resolution: "@types/http-link-header@npm:1.0.7" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/ffde4514a286ee62fab86bd5164958f5c9ad9d8012eaeb4f5536efa6157e6cf9f93121d5a39bf160c3712554d945300a223a9f8b1f3fb08cc70b73f539767338 + languageName: node + linkType: hard + +"@types/ioredis@npm:^4.27.0": + version: 4.28.10 + resolution: "@types/ioredis@npm:4.28.10" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/ff680fef6750721c465ee9d6060d3229e49e5b217d68503c4972c4b869b8f84b91cbd9b7d5195a40fb0bff6ab9a4f5e24a2cc17a368ddb0bfe2dfd4eb5fc1872 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee + languageName: node + linkType: hard + +"@types/jest@npm:^30.0.0": + version: 30.0.0 + resolution: "@types/jest@npm:30.0.0" + dependencies: + expect: "npm:^30.0.0" + pretty-format: "npm:^30.0.0" + checksum: 10c0/20c6ce574154bc16f8dd6a97afacca4b8c4921a819496a3970382031c509ebe87a1b37b152a1b8475089b82d8ca951a9e95beb4b9bf78fbf579b1536f0b65969 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac + languageName: node + linkType: hard + +"@types/jsonld@npm:1.5.15": + version: 1.5.15 + resolution: "@types/jsonld@npm:1.5.15" + checksum: 10c0/d01fbf07c10f4fc53a5b85f28a5691cf7cea4f5f041e0266c5e8d9e4ca94cd410ef427129b2bd930065f675104cbf0a36a7792ba42d3c9b0ec7305c9f01d34c4 + languageName: node + linkType: hard + +"@types/keyv@npm:^3.1.4": + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/ff8f54fc49621210291f815fe5b15d809fd7d032941b3180743440bd507ecdf08b9e844625fa346af568c84bf34114eb378dcdc3e921a08ba1e2a08d7e3c809c + languageName: node + linkType: hard + +"@types/luxon@npm:~3.6.0": + version: 3.6.2 + resolution: "@types/luxon@npm:3.6.2" + checksum: 10c0/7572ee52b3d3e9dd10464b90561a728b90f34b9a257751cc3ce23762693dd1d14fa98b7f103e2efe2c6f49033331f91de5681ffd65cca88618cefe555be326db + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.3": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: 10c0/a1a19ba342d6f39b569510f621ae4bbe972dc9378d15e9a5e47904c440ee60744f5b09225bc73be1c6490e3a9c938eee69eb53debf55ce1f15761201aa965f97 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 10c0/3f791258d8e99a1d7d0ca2bda1ca6ea5a94e5e7b8fc6cde84dd79b0552da6fb68ade750f0e17718f6587783c24254bbca0357648dd59dc3812c150305cabdc46 + languageName: node + linkType: hard + +"@types/n3@npm:^1.4.4": + version: 1.21.1 + resolution: "@types/n3@npm:1.21.1" + dependencies: + "@rdfjs/types": "npm:^1.1.0" + "@types/node": "npm:*" + checksum: 10c0/be0236650cc702207590e5ad37d9ae62a3c74ae74914afed2d929c5eaae7dc4a251f6f44c5f36be317f2e404f02e63ed360ebf041651d5dac3e63867193bf66e + languageName: node + linkType: hard + +"@types/node-fetch@npm:^2.6.13": + version: 2.6.13 + resolution: "@types/node-fetch@npm:2.6.13" + dependencies: + "@types/node": "npm:*" + form-data: "npm:^4.0.4" + checksum: 10c0/6313c89f62c50bd0513a6839cdff0a06727ac5495ccbb2eeda51bb2bbbc4f3c0a76c0393a491b7610af703d3d2deb6cf60e37e59c81ceeca803ffde745dbf309 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 22.10.7 + resolution: "@types/node@npm:22.10.7" + dependencies: + undici-types: "npm:~6.20.0" + checksum: 10c0/c941b4689dfc4044b64a5f601306cbcb0c7210be853ba378a5dd44137898c45accedd796ee002ad9407024cac7ecaf5049304951cb1d80ce3d7cebbbae56f20e + languageName: node + linkType: hard + +"@types/node@npm:^13.1.0": + version: 13.13.52 + resolution: "@types/node@npm:13.13.52" + checksum: 10c0/9224aaea219fe7f8b903039bb146d4c38b391d0166a8226a1efa2d43a35b5b7dddfe021c32941bb454a1543da94921c112687934da88e2a019f4bd44f9d517b5 + languageName: node + linkType: hard + +"@types/node@npm:^18.0.0": + version: 18.19.71 + resolution: "@types/node@npm:18.19.71" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/9f9b4a1c4e2db2994ef36f165322b3bb807466e3f92751ed52a40af0212917bc6ecd12dc6775eb829176b71b26570bea9c6a0a2d9e3ae6b496721c71934244db + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 + languageName: node + linkType: hard + +"@types/parse-link-header@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/parse-link-header@npm:1.0.1" + checksum: 10c0/88b38f5a51083e512a9b23ba13a37543867508927544dbfd08b20ba81cafdc678a320db83c360fbff79689af0147dcbd8ad27a429a0d0f4c28145f47c708a637 + languageName: node + linkType: hard + +"@types/readable-stream@npm:^2.3.11": + version: 2.3.15 + resolution: "@types/readable-stream@npm:2.3.15" + dependencies: + "@types/node": "npm:*" + safe-buffer: "npm:~5.1.1" + checksum: 10c0/789e0948a8fd2f2cbf880a0f8c95601ac2fd8782a5a8fe653f68fad7fc3a74f44e8559484e331c1ff5d5b00fa467bec97557bb683aa833a3b29a69506f7aee59 + languageName: node + linkType: hard + +"@types/responselike@npm:^1.0.0": + version: 1.0.3 + resolution: "@types/responselike@npm:1.0.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/a58ba341cb9e7d74f71810a88862da7b2a6fa42e2a1fc0ce40498f6ea1d44382f0640117057da779f74c47039f7166bf48fad02dc876f94e005c7afa50f5e129 + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa + languageName: node + linkType: hard + +"@types/sparqljs@npm:^3.1.2": + version: 3.1.12 + resolution: "@types/sparqljs@npm:3.1.12" + dependencies: + "@rdfjs/types": "npm:>=1.0.0" + checksum: 10c0/832bb888a99d852f194c6fc1a2160992a769b3c4291424b7e22d50b29377692168d2cbd180cc4ed5a30d0cf1effffcfc0fc9155ea6628851c231e3ed1d28b4e2 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.3": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c + languageName: node + linkType: hard + +"@types/streamify-string@npm:^1.0.4": + version: 1.0.4 + resolution: "@types/streamify-string@npm:1.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/5686610fb3d7b242ff6dd01ca6b9925296b4425c3a94f605bd71eeb5c746991e15131b42a81637f937c3de4f5894f42bb65d18a2f61a6b4ded50d055a9b206e2 + languageName: node + linkType: hard + +"@types/url-join@npm:^4.0.1": + version: 4.0.3 + resolution: "@types/url-join@npm:4.0.3" + checksum: 10c0/7f0f86693070355ce731ec3861d47c03eaae09ab0ea1a72dde6b38a2a17089941acc59bac9ea2472376b6f96e189478da0a7ed29e2d282d1543382e92408d6ca + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.33": + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^7.1.1": + version: 7.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/type-utils": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^7.5.0": + version: 7.18.0 + resolution: "@typescript-eslint/parser@npm:7.18.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/type-utils@npm:7.18.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + semver: "npm:^7.3.7" + tsutils: "npm:^3.21.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + peerDependencies: + eslint: ^8.56.0 + checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^5.10.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@types/json-schema": "npm:^7.0.9" + "@types/semver": "npm:^7.3.12" + "@typescript-eslint/scope-manager": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/typescript-estree": "npm:5.62.0" + eslint-scope: "npm:^5.1.1" + semver: "npm:^7.3.7" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + eslint-visitor-keys: "npm:^3.3.0" + checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.1 + resolution: "@ungap/structured-clone@npm:1.2.1" + checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.3.0": + version: 1.3.0 + resolution: "@ungap/structured-clone@npm:1.3.0" + checksum: 10c0/0fc3097c2540ada1fc340ee56d58d96b5b536a2a0dab6e3ec17d4bfc8c4c86db345f61a375a8185f9da96f01c69678f836a2b57eeaa9e4b8eeafd26428e57b0a + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" + dependencies: + "@napi-rs/wasm-runtime": "npm:^0.2.11" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:3.0.0-rc.46": + version: 3.0.0-rc.46 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.46" + dependencies: + js-yaml: "npm:^3.10.0" + tslib: "npm:^2.4.0" + checksum: 10c0/c7f421c6885142f351459031c093fb2e79abcce6f4a89765a10e600bb7ab122949c54bcea2b23de9572a2b34ba29f822b17831c1c43ba50373ceb8cb5b336667 + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:3.0.2": + version: 3.0.2 + resolution: "@yarnpkg/parsers@npm:3.0.2" + dependencies: + js-yaml: "npm:^3.10.0" + tslib: "npm:^2.4.0" + checksum: 10c0/a0c340e13129643162423d7e666061c0b39b143bfad3fc5a74c7d92a30fd740f6665d41cd4e61832c20375889d793eea1d1d103cacb39ed68f7acd168add8c53 + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.6": + version: 0.0.6 + resolution: "@zkochan/js-yaml@npm:0.0.6" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/5ce27ae75fb1db9657d4065bf6b380b4c0f756feb1bdf42bfde40551a74bcc0ec918f748cbdbd5d95b7107d00bc2f731ee731b5cfe93acb6f7da5639b16aa1f8 + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.7": + version: 0.0.7 + resolution: "@zkochan/js-yaml@npm:0.0.7" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/c8b3525717912811f9422ed50e94c5751ed6f771eb1b7e5cde097f14835654931e2bdaecb1e5fc37b51cf8d822410a307f16dd1581d46149398c30215f3f9bac + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.3, JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: "npm:^1.2.0" + through: "npm:>=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 + languageName: node + linkType: hard + +"abbrev@npm:1": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^7.1.1": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" + bin: + acorn: bin/acorn + checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 + languageName: node + linkType: hard + +"acorn@npm:^8.14.0, acorn@npm:^8.9.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + languageName: node + linkType: hard + +"add-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "add-stream@npm:1.0.0" + checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0, aggregate-error@npm:^3.1.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ajv@npm:^6.12.3, ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:^3.1.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"aproba@npm:2.0.0, aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 + languageName: node + linkType: hard + +"are-docs-informative@npm:^0.0.2": + version: 0.0.2 + resolution: "are-docs-informative@npm:0.0.2" + checksum: 10c0/f0326981bd699c372d268b526b170a28f2e1aec2cf99d7de0686083528427ecdf6ae41fef5d9988e224a5616298af747ad8a76e7306b0a7c97cc085a99636d60 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^2.0.0": + version: 2.0.0 + resolution: "are-we-there-yet@npm:2.0.0" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"args@npm:^5.0.3": + version: 5.0.3 + resolution: "args@npm:5.0.3" + dependencies: + camelcase: "npm:5.0.0" + chalk: "npm:2.4.2" + leven: "npm:2.1.0" + mri: "npm:1.1.4" + checksum: 10c0/213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + is-array-buffer: "npm:^3.0.5" + checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d + languageName: node + linkType: hard + +"array-differ@npm:^3.0.0": + version: 3.0.0 + resolution: "array-differ@npm:3.0.0" + checksum: 10c0/c0d924cc2b7e3f5a0e6ae932e8941c5fddc0412bcecf8d5152641910e60f5e1c1e87da2b32083dec2f92f9a8f78e916ea68c22a0579794ba49886951ae783123 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: 10c0/75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c + languageName: node + linkType: hard + +"array-includes@npm:^3.1.8": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + is-string: "npm:^1.0.7" + checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.2": + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 + languageName: node + linkType: hard + +"array.prototype.reduce@npm:^1.0.6": + version: 1.0.7 + resolution: "array.prototype.reduce@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-array-method-boxes-properly: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + is-string: "npm:^1.0.7" + checksum: 10c0/97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 10c0/c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab + languageName: node + linkType: hard + +"arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 10c0/3fb30b5e7c37abea1907a60b28a554d2f0fc088757ca9bf5b684786e583fdf14360721eb12575c1ce6f995282eab936712d3c4389122682eafab0e0b57f78dbb + languageName: node + linkType: hard + +"asap@npm:~2.0.3": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d + languageName: node + linkType: hard + +"asn1@npm:^0.2.6, asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: "npm:~2.1.0" + checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 + languageName: node + linkType: hard + +"assert-never@npm:^1.2.1": + version: 1.4.0 + resolution: "assert-never@npm:1.4.0" + checksum: 10c0/494db08b89fb43d6231c9b4c48da22824f1912d88992bf0268e43b3dad0f64bd56d380addbb997d2dea7d859421d5e2904e8bd01243794f2bb5bfbc8d32d1fc6 + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 + languageName: node + linkType: hard + +"async@npm:^3.1.0, async@npm:^3.2.3": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 + languageName: node + linkType: hard + +"asynciterator@npm:^3.2.0": + version: 3.9.0 + resolution: "asynciterator@npm:3.9.0" + checksum: 10c0/62e4c76ca2f2bbc8f3eae6a685c9b5c8ed82afd969f24cfb9aff1347b50d5e92a7dae61d2a3c24e834f193b303082d855cf688720059d6236cc06650a4fe2c22 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 + languageName: node + linkType: hard + +"axios@npm:^1.5.1, axios@npm:^1.7.4": + version: 1.7.9 + resolution: "axios@npm:1.7.9" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/b7a41e24b59fee5f0f26c1fc844b45b17442832eb3a0fb42dd4f1430eb4abc571fe168e67913e8a1d91c993232bd1d1ab03e20e4d1fee8c6147649b576fc1b0b + languageName: node + linkType: hard + +"babel-jest@npm:30.0.5, babel-jest@npm:^30.0.5": + version: 30.0.5 + resolution: "babel-jest@npm:30.0.5" + dependencies: + "@jest/transform": "npm:30.0.5" + "@types/babel__core": "npm:^7.20.5" + babel-plugin-istanbul: "npm:^7.0.0" + babel-preset-jest: "npm:30.0.1" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + slash: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.11.0 + checksum: 10c0/48fcdbf97519216f8897c4d83c0d2a64dffd90e4876b386e4ea4530021aaedbd7253de65a71d554cb57fdeb7bd8509bed43a6c016eb150e49e1fbe1236248f0f + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^7.0.0": + version: 7.0.0 + resolution: "babel-plugin-istanbul@npm:7.0.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@istanbuljs/load-nyc-config": "npm:^1.0.0" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-instrument: "npm:^6.0.2" + test-exclude: "npm:^6.0.0" + checksum: 10c0/79c37bd59ea9bcb16218e874993621e24048776fac7ee72eabe78f0909200851bdb93b32f6eba5b463206f15a1ee7ad40a725af8447952321ae1fdf14e740fe9 + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:30.0.1": + version: 30.0.1 + resolution: "babel-plugin-jest-hoist@npm:30.0.1" + dependencies: + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.27.3" + "@types/babel__core": "npm:^7.20.5" + checksum: 10c0/49087f45c8ac359d68c622f4bd471300376b0ca2b6bd6ecaa1bd254ea87eda8fa3ce6144848e3bbabad337d276474a47e2ac3f6272f82e1f2337924ff49a02bd + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.14": + version: 0.4.14 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" + dependencies: + "@babel/compat-data": "npm:^7.27.7" + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.13.0": + version: 0.13.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.5": + version: 0.6.5 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d + languageName: node + linkType: hard + +"babel-plugin-transform-import-meta@npm:^2.3.3": + version: 2.3.3 + resolution: "babel-plugin-transform-import-meta@npm:2.3.3" + dependencies: + "@babel/template": "npm:^7.25.9" + tslib: "npm:^2.8.1" + peerDependencies: + "@babel/core": ^7.10.0 + checksum: 10c0/184275ef4f1c14a79e46fa2084e5743fbcfbaa52a9372f713e0e97e45aab4ac5be214c7eb4893fb9ea0088d32913772651776c660bee38bd2c8d52ef92750c07 + languageName: node + linkType: hard + +"babel-plugin-transform-vite-meta-env@npm:1.0.3": + version: 1.0.3 + resolution: "babel-plugin-transform-vite-meta-env@npm:1.0.3" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + checksum: 10c0/fd602e8e9b64b06c93106b295a75f41a89a527d825ac3984baafab428108d3b1a12b6280e0bf19a58bda25e65e839a67f71bf1d916424fc81201dc14de241b64 + languageName: node + linkType: hard + +"babel-plugin-transform-vite-meta-glob@npm:1.1.2": + version: 1.1.2 + resolution: "babel-plugin-transform-vite-meta-glob@npm:1.1.2" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + glob: "npm:^10.3.10" + checksum: 10c0/1c3262dcba1548a3f478c77d9175b9e09c79ce257f0a9d2993d5a3bf74d5857f14825079c5430bc627f6dfca7a91fedcbe042580deab71062ec75f73ad54d7b2 + languageName: node + linkType: hard + +"babel-plugin-transform-vite-meta-hot@npm:1.0.0": + version: 1.0.0 + resolution: "babel-plugin-transform-vite-meta-hot@npm:1.0.0" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + checksum: 10c0/718176522cfbdb6f1dfcd40431c99f89bfafa74bd52c3a96c03e63e06b1797eb599e397e54c0eeebdb2fcdcfe60a63ae66b08775e2c1c52297708e3caedebac6 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.1.0": + version: 1.2.0 + resolution: "babel-preset-current-node-syntax@npm:1.2.0" + dependencies: + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-bigint": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0 || ^8.0.0-0 + checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 + languageName: node + linkType: hard + +"babel-preset-jest@npm:30.0.1": + version: 30.0.1 + resolution: "babel-preset-jest@npm:30.0.1" + dependencies: + babel-plugin-jest-hoist: "npm:30.0.1" + babel-preset-current-node-syntax: "npm:^1.1.0" + peerDependencies: + "@babel/core": ^7.11.0 + checksum: 10c0/33da0094965929b1742b02e55272b544f189cd487d55bbba60e68d96d62d48f466264fe51f65950454829d4f2271541f2433e1c1c5e6a7ff5b9e91f1303471b7 + languageName: node + linkType: hard + +"babel-preset-vite@npm:^1.1.3": + version: 1.1.3 + resolution: "babel-preset-vite@npm:1.1.3" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + babel-plugin-transform-vite-meta-env: "npm:1.0.3" + babel-plugin-transform-vite-meta-glob: "npm:1.1.2" + babel-plugin-transform-vite-meta-hot: "npm:1.0.0" + checksum: 10c0/380bc48988b5fe94b372eb72ba695410f644d9e4375e6dfc15f313e6d4b9bce2284ec0373e9f481f44a884e4a3820ab63b05dcd532cf78a1772e873431cfc8d6 + languageName: node + linkType: hard + +"babel-walk@npm:3.0.0-canary-5": + version: 3.0.0-canary-5 + resolution: "babel-walk@npm:3.0.0-canary-5" + dependencies: + "@babel/types": "npm:^7.9.6" + checksum: 10c0/17b689874d15c37714cedf6797dd9321dcb998d8e0dda9a8fe8c8bbbf128bbdeb8935cf56e8630d6b67eae76d2a0bc1e470751e082c3b0e30b80d58beafb5e64 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base-x@npm:^3.0.2": + version: 3.0.10 + resolution: "base-x@npm:3.0.10" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/a13a34b71439ee5381667efa630b3bf640cf17f632c5ba01990483367592e72f247d7fb4f8c6d0e3ff8c0fb7224b3ac682ff5be09b87063a45b3968f0457e563 + languageName: node + linkType: hard + +"base58-universal@npm:^2.0.0": + version: 2.0.0 + resolution: "base58-universal@npm:2.0.0" + checksum: 10c0/f21fd50904e1f2d083832e39269058ffbd95592ad27fc2acc53ad3d9d7eacfa82c4e655181e0fd8a817619f4c925a42baca877276dd73e755d30f52def748ab6 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"base64url-universal@npm:^1.0.1": + version: 1.1.0 + resolution: "base64url-universal@npm:1.1.0" + dependencies: + base64url: "npm:^3.0.0" + checksum: 10c0/d1408b3062c7a73cca75c6cc47eaefc47089ca20e019f5b6c3ab4641d7a87caec3e8e1fb17165b63380bef924f62f59dc7f257586490d5718c8c352f1dfc98e2 + languageName: node + linkType: hard + +"base64url-universal@npm:^2.0.0": + version: 2.0.0 + resolution: "base64url-universal@npm:2.0.0" + dependencies: + base64url: "npm:^3.0.1" + checksum: 10c0/6143326c1b5011d987d410a7451fcacad33af9282f9e7d06a21e1d4d7ed9d884e6c09a8f0d178f6c9ef3b11f8cda10ece4c84768e43dc9cb4dc47d1b5056de40 + languageName: node + linkType: hard + +"base64url@npm:^3.0.0, base64url@npm:^3.0.1": + version: 3.0.1 + resolution: "base64url@npm:3.0.1" + checksum: 10c0/5ca9d6064e9440a2a45749558dddd2549ca439a305793d4f14a900b7256b5f4438ef1b7a494e1addc66ced5d20f5c010716d353ed267e4b769e6c78074991241 + languageName: node + linkType: hard + +"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: "npm:^0.14.3" + checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 + languageName: node + linkType: hard + +"bcrypt@npm:^5.0.1": + version: 5.1.1 + resolution: "bcrypt@npm:5.1.1" + dependencies: + "@mapbox/node-pre-gyp": "npm:^1.0.11" + node-addon-api: "npm:^5.0.0" + checksum: 10c0/743231158c866bddc46f25eb8e9617fe38bc1a6f5f3052aba35e361d349b7f8fb80e96b45c48a4c23c45c29967ccd11c81cf31166454fc0ab019801c336cab40 + languageName: node + linkType: hard + +"before-after-hook@npm:^2.2.0": + version: 2.2.3 + resolution: "before-after-hook@npm:2.2.3" + checksum: 10c0/0488c4ae12df758ca9d49b3bb27b47fd559677965c52cae7b335784724fb8bf96c42b6e5ba7d7afcbc31facb0e294c3ef717cc41c5bc2f7bd9e76f8b90acd31c + languageName: node + linkType: hard + +"bin-links@npm:^4.0.4": + version: 4.0.4 + resolution: "bin-links@npm:4.0.4" + dependencies: + cmd-shim: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + read-cmd-shim: "npm:^4.0.0" + write-file-atomic: "npm:^5.0.0" + checksum: 10c0/feb664e786429289d189c19c193b28d855c2898bc53b8391306cbad2273b59ccecb91fd31a433020019552c3bad3a1e0eeecca1c12e739a12ce2ca94f7553a17 + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"bluebird@npm:^3.0.0, bluebird@npm:^3.1.1, bluebird@npm:^3.7.2": + version: 3.7.2 + resolution: "bluebird@npm:3.7.2" + checksum: 10c0/680de03adc54ff925eaa6c7bb9a47a0690e8b5de60f4792604aae8ed618c65e6b63a7893b57ca924beaf53eee69c5af4f8314148c08124c550fe1df1add897d2 + languageName: node + linkType: hard + +"body-parser@npm:^1.19.0": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.5" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.13.0" + raw-body: "npm:2.5.2" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 + languageName: node + linkType: hard + +"boolbase@npm:~1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.0": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" + dependencies: + caniuse-lite: "npm:^1.0.30001688" + electron-to-chromium: "npm:^1.5.73" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.1" + bin: + browserslist: cli.js + checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 + languageName: node + linkType: hard + +"browserslist@npm:^4.25.1": + version: 4.25.1 + resolution: "browserslist@npm:4.25.1" + dependencies: + caniuse-lite: "npm:^1.0.30001726" + electron-to-chromium: "npm:^1.5.173" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.3" + bin: + browserslist: cli.js + checksum: 10c0/acba5f0bdbd5e72dafae1e6ec79235b7bad305ed104e082ed07c34c38c7cb8ea1bc0f6be1496958c40482e40166084458fc3aee15111f15faa79212ad9081b2a + languageName: node + linkType: hard + +"bs58@npm:^4.0.1": + version: 4.0.1 + resolution: "bs58@npm:4.0.1" + dependencies: + base-x: "npm:^3.0.2" + checksum: 10c0/613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: "npm:^0.4.0" + checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 + languageName: node + linkType: hard + +"buffer-equal-constant-time@npm:1.0.1": + version: 1.0.1 + resolution: "buffer-equal-constant-time@npm:1.0.1" + checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + +"buildcheck@npm:~0.0.6": + version: 0.0.6 + resolution: "buildcheck@npm:0.0.6" + checksum: 10c0/8cbdb89f41bc484b8325f4828db4135b206a0dffb641eb6cdb2b7022483c45dd0e5aac6d820c9a67bdd2caab3a02c76d7ceec7bd9ec494b5a2270d2806b01a76 + languageName: node + linkType: hard + +"bull@npm:^3.15.0": + version: 3.29.3 + resolution: "bull@npm:3.29.3" + dependencies: + cron-parser: "npm:^2.13.0" + debuglog: "npm:^1.0.0" + get-port: "npm:^5.1.1" + ioredis: "npm:^4.27.0" + lodash: "npm:^4.17.21" + p-timeout: "npm:^3.2.0" + promise.prototype.finally: "npm:^3.1.2" + semver: "npm:^7.3.2" + util.promisify: "npm:^1.0.1" + uuid: "npm:^8.3.0" + checksum: 10c0/6860a17a2abc45bfa887c8fed0f666da2291d382dea3b5be581b82ba992e6edc487d55b5cf2e668f29e7123930958d2bdefae5a2bb003414767d4f209ebc2b4f + languageName: node + linkType: hard + +"busboy@npm:^0.3.1": + version: 0.3.1 + resolution: "busboy@npm:0.3.1" + dependencies: + dicer: "npm:0.3.0" + checksum: 10c0/15b3382816f657302956ba68e48342891b4f36ae1164f1ad47d96302dd2cda634672513d03c7e5dde0dc90e2889becf3fa32f9b3b391d0f8ab4a5a675b5b5581 + languageName: node + linkType: hard + +"byte-size@npm:8.1.1": + version: 8.1.1 + resolution: "byte-size@npm:8.1.1" + checksum: 10c0/83170a16820fde48ebaef93bf6b2e86c5f72041f76e44eba1f3c738cceb699aeadf11088198944d5d7c6f970b465ab1e3dddc2e60bfb49a74374f3447a8db5b9 + languageName: node + linkType: hard + +"bytes@npm:3.1.2, bytes@npm:^3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + +"cacache@npm:^18.0.0, cacache@npm:^18.0.3": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"cacheable-lookup@npm:^5.0.3": + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 10c0/a6547fb4954b318aa831cbdd2f7b376824bc784fb1fa67610e4147099e3074726072d9af89f12efb69121415a0e1f2918a8ddd4aafcbcf4e91fbeef4a59cd42c + languageName: node + linkType: hard + +"cacheable-request@npm:^7.0.2": + version: 7.0.4 + resolution: "cacheable-request@npm:7.0.4" + dependencies: + clone-response: "npm:^1.0.2" + get-stream: "npm:^5.1.0" + http-cache-semantics: "npm:^4.0.0" + keyv: "npm:^4.0.0" + lowercase-keys: "npm:^2.0.0" + normalize-url: "npm:^6.0.1" + responselike: "npm:^2.0.0" + checksum: 10c0/0834a7d17ae71a177bc34eab06de112a43f9b5ad05ebe929bec983d890a7d9f2bc5f1aa8bb67ea2b65e07a3bc74bea35fa62dd36dbac52876afe36fdcf83da41 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": + version: 1.0.3 + resolution: "call-bound@npm:1.0.3" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf + languageName: node + linkType: hard + +"callsites@npm:^3.0.0, callsites@npm:^3.1.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: "npm:^5.3.1" + map-obj: "npm:^4.0.0" + quick-lru: "npm:^4.0.1" + checksum: 10c0/bf1a28348c0f285c6c6f68fb98a9d088d3c0269fed0cdff3ea680d5a42df8a067b4de374e7a33e619eb9d5266a448fe66c2dd1f8e0c9209ebc348632882a3526 + languageName: node + linkType: hard + +"camelcase@npm:5.0.0": + version: 5.0.0 + resolution: "camelcase@npm:5.0.0" + checksum: 10c0/515f1ce911d65949708d9e179f1a40af71eb7de668230a0c85961a35590f7da39af79cfb48d834883dbcc7995bdb7dd6bae8027b101e37a10d95337ec8732800 + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"camelcase@npm:^6.3.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001695 + resolution: "caniuse-lite@npm:1.0.30001695" + checksum: 10c0/acf90a767051fdd8083711b3ff9f07a28149c55e394115d8f874f149aa4f130e6bc50cea1dd94fe03035b9ebbe13b64f446518a6d2e19f72650962bdff44b2c5 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001726": + version: 1.0.30001731 + resolution: "caniuse-lite@npm:1.0.30001731" + checksum: 10c0/d8cddf817d5bec8e7c2106affdbf1bfc3923463ca16697c992b2efeb043e6a5d9dcb70cda913bc6acf9112fd66f9e80279316c08e7800359116925066a63fdfa + languageName: node + linkType: hard + +"canonicalize@npm:^1.0.1": + version: 1.0.8 + resolution: "canonicalize@npm:1.0.8" + checksum: 10c0/6fafcfa73855a49c86eed26d2f23734713a542a3107a23a6ab16fb22b6cee6bb2d92ad32b2244d52594bd69bc08bec820413911cd566dcc5399048012ce26a83 + languageName: node + linkType: hard + +"cas@git+https://github.com/joshchan/node-cas.git": + version: 0.0.5 + resolution: "cas@https://github.com/joshchan/node-cas.git#commit=344a8bfba9d054e2e378adaf95b720c898ae48a2" + dependencies: + cheerio: "npm:0.19.0" + checksum: 10c0/03467fd69a10bd1b03cbca35f25b2249855b99857e908aeb54727cb8d8f17658fa909f7b1296a77eaf7537dc24a0fa16f5da438a8f161260f189d0db1e60f5c6 + languageName: node + linkType: hard + +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 + languageName: node + linkType: hard + +"chalk@npm:2.4.2, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:4.1.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/3787bd65ecd98ab3a1acc3b4f71d006268a675875e49ee6ea75fb54ba73d268b97544368358c18c42445e408e076ae8ad5cec8fbad36942a2c7ac654883dc61e + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e + languageName: node + linkType: hard + +"character-parser@npm:^2.2.0": + version: 2.2.0 + resolution: "character-parser@npm:2.2.0" + dependencies: + is-regex: "npm:^1.0.3" + checksum: 10c0/5a8d3eff2c912a6878c84e2ebf9d42524e858aa7e1a1c7e8bb79ab54da109ad008fe9057a9d2b3230541d7ff858eda98983a2ae15db57ba01af2e989d29e932e + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"cheerio@npm:0.19.0": + version: 0.19.0 + resolution: "cheerio@npm:0.19.0" + dependencies: + css-select: "npm:~1.0.0" + dom-serializer: "npm:~0.1.0" + entities: "npm:~1.1.1" + htmlparser2: "npm:~3.8.1" + lodash: "npm:^3.2.0" + checksum: 10c0/af96cc6a6b595334ed7c1a47b1a999dfad20645a563acdc8bf5338b3774cf050c99b6f4c9040ef0f4c03b7c915e3d3735bedcbb95968d9aecf9cf2e44dcf4896 + languageName: node + linkType: hard + +"cheerio@npm:^0.22.0": + version: 0.22.0 + resolution: "cheerio@npm:0.22.0" + dependencies: + css-select: "npm:~1.2.0" + dom-serializer: "npm:~0.1.0" + entities: "npm:~1.1.1" + htmlparser2: "npm:^3.9.1" + lodash.assignin: "npm:^4.0.9" + lodash.bind: "npm:^4.1.4" + lodash.defaults: "npm:^4.0.1" + lodash.filter: "npm:^4.4.0" + lodash.flatten: "npm:^4.2.0" + lodash.foreach: "npm:^4.3.0" + lodash.map: "npm:^4.4.0" + lodash.merge: "npm:^4.4.0" + lodash.pick: "npm:^4.2.1" + lodash.reduce: "npm:^4.4.0" + lodash.reject: "npm:^4.4.0" + lodash.some: "npm:^4.4.0" + checksum: 10c0/b067fadb3d0ada1f614ce27b2795c206df2c612ab066393f833c798ba29c73a610a3202567d2223658743026f5385cda61f6b52370b22f28a924e52883933340 + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"ci-info@npm:^4.0.0": + version: 4.1.0 + resolution: "ci-info@npm:4.1.0" + checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 + languageName: node + linkType: hard + +"ci-info@npm:^4.2.0": + version: 4.3.0 + resolution: "ci-info@npm:4.3.0" + checksum: 10c0/60d3dfe95d75c01454ec1cfd5108617dd598a28a2a3e148bd7e1523c1c208b5f5a3007cafcbe293e6fd0a5a310cc32217c5dc54743eeabc0a2bec80072fc055c + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^2.1.0": + version: 2.1.0 + resolution: "cjs-module-lexer@npm:2.1.0" + checksum: 10c0/91cf28686dc3948e4a06dfa03a2fccb14b7a97471ffe7ae0124f62060ddf2de28e8e997f60007babe6e122b1b06a47c01a1b72cc015f185824d9cac3ccfa5533 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 + languageName: node + linkType: hard + +"cli-spinners@npm:2.6.1": + version: 2.6.1 + resolution: "cli-spinners@npm:2.6.1" + checksum: 10c0/6abcdfef59aa68e6b51376d87d257f9120a0a7120a39dd21633702d24797decb6dc747dff2217c88732710db892b5053c5c672d221b6c4d13bbcb5372e203596 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 10c0/125a62810e59a2564268c80fdff56c23159a7690c003e34aeb2e68497dccff26911998ff49c33916fcfdf71e824322cc3953e3f7b48b27267c7a062c81348a9a + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone-deep@npm:4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"clone-response@npm:^1.0.2": + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" + dependencies: + mimic-response: "npm:^1.0.0" + checksum: 10c0/06a2b611824efb128810708baee3bd169ec9a1bf5976a5258cd7eb3f7db25f00166c6eee5961f075c7e38e194f373d4fdf86b8166ad5b9c7e82bbd2e333a6087 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b + languageName: node + linkType: hard + +"cluster-key-slot@npm:^1.1.0": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: 10c0/d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 + languageName: node + linkType: hard + +"cmd-shim@npm:6.0.3, cmd-shim@npm:^6.0.0": + version: 6.0.3 + resolution: "cmd-shim@npm:6.0.3" + checksum: 10c0/dc09fe0bf39e86250529456d9a87dd6d5208d053e449101a600e96dc956c100e0bc312cdb413a91266201f3bd8057d4abf63875cafb99039553a1937d8f3da36 + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.2": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"color-string@npm:^1.9.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: "npm:^1.0.0" + simple-swizzle: "npm:^0.2.2" + checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 + languageName: node + linkType: hard + +"color-support@npm:1.1.3, color-support@npm:^1.1.2": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 + languageName: node + linkType: hard + +"color@npm:^4.2.3": + version: 4.2.3 + resolution: "color@npm:4.2.3" + dependencies: + color-convert: "npm:^2.0.1" + color-string: "npm:^1.9.0" + checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 + languageName: node + linkType: hard + +"columnify@npm:1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: "npm:^6.0.1" + wcwidth: "npm:^1.0.0" + checksum: 10c0/25b90b59129331bbb8b0c838f8df69924349b83e8eab9549f431062a20a39094b8d744bb83265be38fd5d03140ce4bfbd85837c293f618925e83157ae9535f1d + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:^2.15.1, commander@npm:^2.20.3": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"comment-parser@npm:1.4.1": + version: 1.4.1 + resolution: "comment-parser@npm:1.4.1" + checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 10c0/390c08d2a67a7a106d39499c002d827d2874966d938012453fd7ca34cd306881e2b9d604f657fa7a8e6e4896d67f39ebc09bf1bfd8da8ff318e0fb7a8752c534 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: "npm:^1.0.0" + dot-prop: "npm:^5.1.0" + checksum: 10c0/78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 + languageName: node + linkType: hard + +"component-emitter@npm:^1.2.0": + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: 10c0/e4900b1b790b5e76b8d71b328da41482118c0f3523a516a41be598dc2785a07fd721098d9bf6e22d89b19f4fa4e1025160dc00317ea111633a3e4f75c2b86032 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.0.2" + typedarray: "npm:^0.0.6" + checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.10": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e + languageName: node + linkType: hard + +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 + languageName: node + linkType: hard + +"consolidate@npm:^0.14.2": + version: 0.14.5 + resolution: "consolidate@npm:0.14.5" + dependencies: + bluebird: "npm:^3.1.1" + checksum: 10c0/9affd54c3013932e0c475c9a3fd431f8b2dd81d2ef9c8267c9c99941e5f763cfb3e7719625783615c9e231f1bb3b7646b4362a60fc8b625a3b9ebe6f51ac4888 + languageName: node + linkType: hard + +"constantinople@npm:^4.0.1": + version: 4.0.1 + resolution: "constantinople@npm:4.0.1" + dependencies: + "@babel/parser": "npm:^7.6.0" + "@babel/types": "npm:^7.6.1" + checksum: 10c0/15129adef19b1af2c3ade8bd38f97c34781bf461472a30ab414384b28d072be83070c8d2175787c045ef7c222c415101ae609936e7903427796a0c0eca8449fd + languageName: node + linkType: hard + +"content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:7.0.0": + version: 7.0.0 + resolution: "conventional-changelog-angular@npm:7.0.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e + languageName: node + linkType: hard + +"conventional-changelog-core@npm:5.0.1": + version: 5.0.1 + resolution: "conventional-changelog-core@npm:5.0.1" + dependencies: + add-stream: "npm:^1.0.0" + conventional-changelog-writer: "npm:^6.0.0" + conventional-commits-parser: "npm:^4.0.0" + dateformat: "npm:^3.0.3" + get-pkg-repo: "npm:^4.2.1" + git-raw-commits: "npm:^3.0.0" + git-remote-origin-url: "npm:^2.0.0" + git-semver-tags: "npm:^5.0.0" + normalize-package-data: "npm:^3.0.3" + read-pkg: "npm:^3.0.0" + read-pkg-up: "npm:^3.0.0" + checksum: 10c0/c026da415ea58346c167e58f8dd717592e92afc897aa604189a6d69f48b6943e7a656b2c83433810feea32dda117b0914a7f5860ed338a21f6ee9b0f56788b37 + languageName: node + linkType: hard + +"conventional-changelog-preset-loader@npm:^3.0.0": + version: 3.0.0 + resolution: "conventional-changelog-preset-loader@npm:3.0.0" + checksum: 10c0/5de23c4aa8b8526c3542fd5abe9758d56eed79821f32cc16d1fdf480cecc44855edbe4680113f229509dcaf4b97cc41e786ac8e3b0822b44fd9d0b98542ed0e0 + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^6.0.0": + version: 6.0.1 + resolution: "conventional-changelog-writer@npm:6.0.1" + dependencies: + conventional-commits-filter: "npm:^3.0.0" + dateformat: "npm:^3.0.3" + handlebars: "npm:^4.7.7" + json-stringify-safe: "npm:^5.0.1" + meow: "npm:^8.1.2" + semver: "npm:^7.0.0" + split: "npm:^1.0.1" + bin: + conventional-changelog-writer: cli.js + checksum: 10c0/50790b0d92e06c5ab1c02cc4eb2ecd74575244d31cfacea1885d7c8afeae1bc7bbc169140fe062f2438b9952400762240b796e59521c0246278859296b323338 + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^3.0.0": + version: 3.0.0 + resolution: "conventional-commits-filter@npm:3.0.0" + dependencies: + lodash.ismatch: "npm:^4.4.0" + modify-values: "npm:^1.0.1" + checksum: 10c0/9d43cf9029bf39b70b394c551846a57b6f0473028ba5628c38bd447672655cc27bb80ba502d9a7e41335f63ad62b754cb26579f3d4bae7398dfc092acbb32578 + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "conventional-commits-parser@npm:4.0.0" + dependencies: + JSONStream: "npm:^1.3.5" + is-text-path: "npm:^1.0.1" + meow: "npm:^8.1.2" + split2: "npm:^3.2.2" + bin: + conventional-commits-parser: cli.js + checksum: 10c0/12e390cc80ad8a825c5775a329b95e11cf47a6df7b8a3875d375e28b8cb27c4f32955842ea73e4e357cff9757a6be99fdffe4fda87a23e9d8e73f983425537a0 + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:7.0.1": + version: 7.0.1 + resolution: "conventional-recommended-bump@npm:7.0.1" + dependencies: + concat-stream: "npm:^2.0.0" + conventional-changelog-preset-loader: "npm:^3.0.0" + conventional-commits-filter: "npm:^3.0.0" + conventional-commits-parser: "npm:^4.0.0" + git-raw-commits: "npm:^3.0.0" + git-semver-tags: "npm:^5.0.0" + meow: "npm:^8.1.2" + bin: + conventional-recommended-bump: cli.js + checksum: 10c0/ff751a256ddfbec62efd5a32de059b01659e945073793c6766143a8242864fd8099804a90bbf1e6a61928ade3d12292d6f66f721a113630de392d54eb7f0b0c3 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.7": + version: 1.0.7 + resolution: "cookie-signature@npm:1.0.7" + checksum: 10c0/e7731ad2995ae2efeed6435ec1e22cdd21afef29d300c27281438b1eab2bae04ef0d1a203928c0afec2cee72aa36540b8747406ebe308ad23c8e8cc3c26c9c51 + languageName: node + linkType: hard + +"cookie@npm:0.7.2": + version: 0.7.2 + resolution: "cookie@npm:0.7.2" + checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 + languageName: node + linkType: hard + +"cookiejar@npm:^2.1.0": + version: 2.1.4 + resolution: "cookiejar@npm:2.1.4" + checksum: 10c0/2dae55611c6e1678f34d93984cbd4bda58f4fe3e5247cc4993f4a305cd19c913bbaf325086ed952e892108115073a747596453d3dc1c34947f47f731818b8ad1 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.43.0": + version: 3.44.0 + resolution: "core-js-compat@npm:3.44.0" + dependencies: + browserslist: "npm:^4.25.1" + checksum: 10c0/5de4b042b8bb232b8390be3079030de5c7354610f136ed3eb91310a44455a78df02cfcf49b2fd05d5a5aa2695460620abf1b400784715f7482ed4770d40a68b2 + languageName: node + linkType: hard + +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cosmiconfig@npm:9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + languageName: node + linkType: hard + +"cpu-features@npm:~0.0.10": + version: 0.0.10 + resolution: "cpu-features@npm:0.0.10" + dependencies: + buildcheck: "npm:~0.0.6" + nan: "npm:^2.19.0" + node-gyp: "npm:latest" + checksum: 10c0/0c4a12904657b22477ffbcfd2b4b2bdd45b174f283616b18d9e1ade495083f9f6098493feb09f4ae2d0b36b240f9ecd32cfb4afe210cf0d0f8f0cc257bd58e54 + languageName: node + linkType: hard + +"credentials-context@npm:^1.0.0": + version: 1.0.0 + resolution: "credentials-context@npm:1.0.0" + checksum: 10c0/ceefd9cba384fed7e2cfe85d8e9fee15da27ef8989ddcecb7cc8a678fa83d691e834100cf0280deb52349f09f5da1fb3b3ba144404faeabea44b0130651ac74d + languageName: node + linkType: hard + +"cron-parser@npm:^2.13.0": + version: 2.18.0 + resolution: "cron-parser@npm:2.18.0" + dependencies: + is-nan: "npm:^1.3.0" + moment-timezone: "npm:^0.5.31" + checksum: 10c0/1361cf0af8a749a355c7dd45ec85d94f8b1b768e6ce19955fea38d72b22874c0c63add070a1fe543a4ee4fa5229b6ae43760934df0d4aed6499581108657df25 + languageName: node + linkType: hard + +"cron-parser@npm:^4.2.0, cron-parser@npm:^4.2.1, cron-parser@npm:^4.3.0": + version: 4.9.0 + resolution: "cron-parser@npm:4.9.0" + dependencies: + luxon: "npm:^3.2.1" + checksum: 10c0/348622bdcd1a15695b61fc33af8a60133e5913a85cf99f6344367579e7002896514ba3b0a9d6bb569b02667d6b06836722bf2295fcd101b3de378f71d37bed0b + languageName: node + linkType: hard + +"cron@npm:^1.8.2": + version: 1.8.3 + resolution: "cron@npm:1.8.3" + dependencies: + luxon: "npm:^1.23.x" + checksum: 10c0/f3cd0960c34bebe8ac70404120ad1822bceb4cca216b0951a997e5a673c8b140d73b567633248485811cfced99926cdf4ff624e067cf26ec72d5cfce06f0468c + languageName: node + linkType: hard + +"cron@npm:^4.1.4": + version: 4.3.0 + resolution: "cron@npm:4.3.0" + dependencies: + "@types/luxon": "npm:~3.6.0" + luxon: "npm:~3.6.0" + checksum: 10c0/859805a56ce6af19177a0abff3688e917d2124c0fa086234333d20fd4ca6efe333af2ab4ba6ba06c3aa68c6b2eec30e375c795e97e735c70fcac126057332f10 + languageName: node + linkType: hard + +"cross-fetch@npm:^3.0.5, cross-fetch@npm:^3.0.6": + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" + dependencies: + node-fetch: "npm:^2.7.0" + checksum: 10c0/d8596adf0269130098a676f6739a0922f3cc7b71cc89729925411ebe851a87026171c82ea89154c4811c9867c01c44793205a52e618ce2684650218c7fbeeb9f + languageName: node + linkType: hard + +"cross-spawn@npm:^5.1.0": + version: 5.1.0 + resolution: "cross-spawn@npm:5.1.0" + dependencies: + lru-cache: "npm:^4.0.1" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10c0/1918621fddb9f8c61e02118b2dbf81f611ccd1544ceaca0d026525341832b8511ce2504c60f935dbc06b35e5ef156fe8c1e72708c27dd486f034e9c0e1e07201 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"crypto-ld@npm:^3.7.0": + version: 3.9.0 + resolution: "crypto-ld@npm:3.9.0" + dependencies: + base64url-universal: "npm:^1.0.1" + bs58: "npm:^4.0.1" + node-forge: "npm:~0.10.0" + semver: "npm:^6.2.0" + sodium-native: "npm:^3.2.0" + dependenciesMeta: + sodium-native: + optional: true + checksum: 10c0/78fd545e802db3b0ade0bacf177dde7c52dd24d801faca79a7b5b7d6226d114db7fc1307397ff119798709376d28c3271e08e457723720c141ab4f50e47473e1 + languageName: node + linkType: hard + +"crypto-ld@npm:^7.0.0": + version: 7.0.0 + resolution: "crypto-ld@npm:7.0.0" + checksum: 10c0/67fac3bf5c52d71e02ae436a305f223376746cb43d2aa6550764d2885e15e8802267c8fd6a451c4255b90b58eeab1c036b6ee6e88f21425620a3d5ecc8b36d92 + languageName: node + linkType: hard + +"css-select@npm:~1.0.0": + version: 1.0.0 + resolution: "css-select@npm:1.0.0" + dependencies: + boolbase: "npm:~1.0.0" + css-what: "npm:1.0" + domutils: "npm:1.4" + nth-check: "npm:~1.0.0" + checksum: 10c0/2311812bb619d39263f620a7f5f3900c08cc25a5a0817b76e6f677dbe5b062a434cdac7f5de0bfc025cd249de53c509ddc87c77c62c99466b2a891f7df935338 + languageName: node + linkType: hard + +"css-select@npm:~1.2.0": + version: 1.2.0 + resolution: "css-select@npm:1.2.0" + dependencies: + boolbase: "npm:~1.0.0" + css-what: "npm:2.1" + domutils: "npm:1.5.1" + nth-check: "npm:~1.0.1" + checksum: 10c0/16e91cd4a8606e76eb2d93ded43e2d20fe315effa7e1dedf16e81fab5c6bbd18b394f78cb59c04e2dddc7d4c68e31a0617b7f4f196dff48398cf3ac83e78475c + languageName: node + linkType: hard + +"css-what@npm:1.0": + version: 1.0.0 + resolution: "css-what@npm:1.0.0" + checksum: 10c0/dbcba5c7251e11643fd531d6cfd625007ac147485c1004d8a9e6c2d768ab43ab1f2f57da5f73df235990cd30d2d80fdb64d54f4c943baec460a2b2beaf646808 + languageName: node + linkType: hard + +"css-what@npm:2.1": + version: 2.1.3 + resolution: "css-what@npm:2.1.3" + checksum: 10c0/4f1a25855be8bdfebdd431ccb084f6481951408dbf076eebf7a1c045ae45dd5651b32fe55deaa16a59e98eb25d5bb066dcf6bdff7aa3cc2ed5bdbe5fe1aa7fd7 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + +"dargs@npm:^7.0.0": + version: 7.0.0 + resolution: "dargs@npm:7.0.0" + checksum: 10c0/ec7f6a8315a8fa2f8b12d39207615bdf62b4d01f631b96fbe536c8ad5469ab9ed710d55811e564d0d5c1d548fc8cb6cc70bf0939f2415790159f5a75e0f96c92 + languageName: node + linkType: hard + +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a + languageName: node + linkType: hard + +"dashify@npm:^2.0.0": + version: 2.0.0 + resolution: "dashify@npm:2.0.0" + checksum: 10c0/b9ab76cbd9739b6dba4359083cc9a670e6a0876f90ab3409b9984cf386b82a28a89009afe15d13ce62f97bc84ce49be2fe85f3a6791481a8d31e962cd0f0e710 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 + languageName: node + linkType: hard + +"datauri@npm:^2.0.0": + version: 2.0.0 + resolution: "datauri@npm:2.0.0" + dependencies: + image-size: "npm:^0.7.3" + mimer: "npm:^1.0.0" + checksum: 10c0/3f70d6e51585657d12dc4e2342623998fc227b2464d87b25d440e2c6e996a1f67647d59025d3978ba1a38a24719d7eb3cd1656d3287ef93d9fe87b80aefded79 + languageName: node + linkType: hard + +"dateformat@npm:^3.0.3": + version: 3.0.3 + resolution: "dateformat@npm:3.0.3" + checksum: 10c0/2effb8bef52ff912f87a05e4adbeacff46353e91313ad1ea9ed31412db26849f5a0fcc7e3ce36dbfb84fc6c881a986d5694f84838ad0da7000d5150693e78678 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: "npm:2.0.0" + checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + languageName: node + linkType: hard + +"debug@npm:^3.1.0, debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"debug@npm:^4.4.1": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + languageName: node + linkType: hard + +"debuglog@npm:^1.0.0": + version: 1.0.1 + resolution: "debuglog@npm:1.0.1" + checksum: 10c0/d98ac9abe6a528fcbb4d843b1caf5a9116998c76e1263d8ff4db2c086aa96fa7ea4c752a81050fa2e4304129ef330e6e4dc9dd4d47141afd7db80bf699f08219 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: "npm:^1.1.0" + map-obj: "npm:^1.0.0" + checksum: 10c0/4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"dedent@npm:1.5.3": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 + languageName: node + linkType: hard + +"dedent@npm:^1.6.0": + version: 1.6.0 + resolution: "dedent@npm:1.6.0" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/671b8f5e390dd2a560862c4511dd6d2638e71911486f78cb32116551f8f2aa6fcaf50579ffffb2f866d46b5b80fd72470659ca5760ede8f967619ef7df79e8a5 + languageName: node + linkType: hard + +"deep-extend@npm:^0.5.1": + version: 0.5.1 + resolution: "deep-extend@npm:0.5.1" + checksum: 10c0/a0b86d1ff2d62b7fe531a568bf5fef3f9fe477ada35e3d97310ab989cb588acde607283ef587a4552eaf05c3491045536ddf5741021523574d93de472c61d24f + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a + languageName: node + linkType: hard + +"defer-to-connect@npm:^2.0.0": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 + languageName: node + linkType: hard + +"denque@npm:^1.1.0": + version: 1.5.1 + resolution: "denque@npm:1.5.1" + checksum: 10c0/9e6fc1a63e1c9ded38325290302fef40e5ad28471ad8c66d68eaea623ef847bd25fc75a7c3f47396206dc967922615999066470a364e1786f2758d61337872b7 + languageName: node + linkType: hard + +"depd@npm:2.0.0, depd@npm:~2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"deprecation@npm:^2.0.0": + version: 2.3.1 + resolution: "deprecation@npm:2.3.1" + checksum: 10c0/23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + +"detect-indent@npm:^5.0.0": + version: 5.0.0 + resolution: "detect-indent@npm:5.0.0" + checksum: 10c0/58d985dd5b4d5e5aad6fe7d8ecc74538fa92c807c894794b8505569e45651bf01a38755b65d9d3d17e512239a26d3131837cbef43cf4226968d5abf175bbcc9d + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 + languageName: node + linkType: hard + +"detect-newline@npm:^3.1.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d + languageName: node + linkType: hard + +"dicer@npm:0.3.0": + version: 0.3.0 + resolution: "dicer@npm:0.3.0" + dependencies: + streamsearch: "npm:0.1.2" + checksum: 10c0/4486f0448233145216cfadd5f6bbb4c26c3a28824da5344322b06051632e99d6af2b44f893fa8b30f1749ad175b4e565d301c760d0437226d9e41ccdb6546f35 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + +"doctypes@npm:^1.1.0": + version: 1.1.0 + resolution: "doctypes@npm:1.1.0" + checksum: 10c0/b3f9d597ad8b9ac6aeba9d64df61f0098174f7570e3d34f7ee245ebc736c7bee122d9738a18e22010b98983fd9a340d63043d3841f02d8a7742a2d96d2c72610 + languageName: node + linkType: hard + +"dom-serializer@npm:0": + version: 0.2.2 + resolution: "dom-serializer@npm:0.2.2" + dependencies: + domelementtype: "npm:^2.0.1" + entities: "npm:^2.0.0" + checksum: 10c0/5cb595fb77e1a23eca56742f47631e6f4af66ce1982c7ed28b3d0ef21f1f50304c067adc29d3eaf824c572be022cee88627d0ac9b929408f24e923f3c7bed37b + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.0" + entities: "npm:^2.0.0" + checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.2" + entities: "npm:^4.2.0" + checksum: 10c0/d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 + languageName: node + linkType: hard + +"dom-serializer@npm:~0.1.0": + version: 0.1.1 + resolution: "dom-serializer@npm:0.1.1" + dependencies: + domelementtype: "npm:^1.3.0" + entities: "npm:^1.1.1" + checksum: 10c0/bb710d0a49dbe7b1019e8bf314102495e8894b9da188d00187c0ac52939ded630bc5f9eacc97bfa462d535cd321c734c0b02fefd5e4d93162ab886dccc6666f3 + languageName: node + linkType: hard + +"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": + version: 1.3.1 + resolution: "domelementtype@npm:1.3.1" + checksum: 10c0/6d4f5761060a21eaf3c96545501e9d188745c7e1c31b8d141bf15d8748feeadba868f4ea32877751b8678b286fb1afbe6ae905ca3fb8f0214d8322e482cdbec0 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 + languageName: node + linkType: hard + +"domhandler@npm:2.3": + version: 2.3.0 + resolution: "domhandler@npm:2.3.0" + dependencies: + domelementtype: "npm:1" + checksum: 10c0/f434a1c08392821751b85081fd8ff11b17d7fd6e5da59335af87ee038b816be24d35a12f45d85034e3e137158beb031d5a3df21fcd05a7dd4490e2f01a6d0e82 + languageName: node + linkType: hard + +"domhandler@npm:^2.3.0": + version: 2.4.2 + resolution: "domhandler@npm:2.4.2" + dependencies: + domelementtype: "npm:1" + checksum: 10c0/6670cab73e97e3c6771dcf22b537db3f6a0be0ad6b370f03bb5f1b585d3b563d326787fdabe1190b7ca9d81c804e9b3f8a1431159c27c44f6c05f94afa92be2d + languageName: node + linkType: hard + +"domhandler@npm:^3.0.0": + version: 3.3.0 + resolution: "domhandler@npm:3.3.0" + dependencies: + domelementtype: "npm:^2.0.1" + checksum: 10c0/376e6462a6144121f6ae50c9c1b8e0b22d2e0c68f9fb2ef6e57a5f4f9395854b1258cb638c58b171ee291359a5f41a4a57f403954db976484a59ffcee4c1e405 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: "npm:^2.2.0" + checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: "npm:^2.3.0" + checksum: 10c0/bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a + languageName: node + linkType: hard + +"domutils@npm:1.4": + version: 1.4.3 + resolution: "domutils@npm:1.4.3" + dependencies: + domelementtype: "npm:1" + checksum: 10c0/ce345ccc3a964aa6f5415a4fd9b3a11db743e8ac5c4383d7ad3dd53fe7a8f23ee03dca580209d8005f49261ddab976082bcd5652e913bcb6044b8c959fb5401b + languageName: node + linkType: hard + +"domutils@npm:1.5, domutils@npm:1.5.1": + version: 1.5.1 + resolution: "domutils@npm:1.5.1" + dependencies: + dom-serializer: "npm:0" + domelementtype: "npm:1" + checksum: 10c0/8707a18c974be54d33fd846d174d523ddf4955b2fcc1ec713cbe6ff490f60da22106b153fea6269332477eb81dc1a25a83f5b2afaf78b6dc9e2161fd7b80f7ba + languageName: node + linkType: hard + +"domutils@npm:^1.5.1": + version: 1.7.0 + resolution: "domutils@npm:1.7.0" + dependencies: + dom-serializer: "npm:0" + domelementtype: "npm:1" + checksum: 10c0/437fcd2d6d6be03f488152e73c6f953e289c58496baa22be9626b2b46f9cfd40486ae77d144487ff6b102929a3231cdb9a8bf8ef485fb7b7c30c985daedc77eb + languageName: node + linkType: hard + +"domutils@npm:^2.0.0, domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: "npm:^1.0.1" + domelementtype: "npm:^2.2.0" + domhandler: "npm:^4.2.0" + checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.2.2 + resolution: "domutils@npm:3.2.2" + dependencies: + dom-serializer: "npm:^2.0.0" + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + checksum: 10c0/47938f473b987ea71cd59e59626eb8666d3aa8feba5266e45527f3b636c7883cca7e582d901531961f742c519d7514636b7973353b648762b2e3bedbf235fada + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 10c0/93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 + languageName: node + linkType: hard + +"dotenv-expand@npm:~10.0.0": + version: 10.0.0 + resolution: "dotenv-expand@npm:10.0.0" + checksum: 10c0/298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e + languageName: node + linkType: hard + +"dotenv-expand@npm:~11.0.6": + version: 11.0.7 + resolution: "dotenv-expand@npm:11.0.7" + dependencies: + dotenv: "npm:^16.4.5" + checksum: 10c0/d80b8a7be085edf351270b96ac0e794bc3ddd7f36157912939577cb4d33ba6492ebee349d59798b71b90e36f498d24a2a564fb4aa00073b2ef4c2a3a49c467b1 + languageName: node + linkType: hard + +"dotenv-flow@npm:^3.1.0": + version: 3.3.0 + resolution: "dotenv-flow@npm:3.3.0" + dependencies: + dotenv: "npm:^8.6.0" + checksum: 10c0/64f367f66532bdd2abad84360ff37668d8718e9362b442ba293ed518b573449c6e8d15e3e50001f7bac4f2c932287a5c8c5e98435b252f230f67bcc30cd27b87 + languageName: node + linkType: hard + +"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": + version: 16.4.7 + resolution: "dotenv@npm:16.4.7" + checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462 + languageName: node + linkType: hard + +"dotenv@npm:^8.6.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 10c0/6750431dea8efbd54b9f2d9681b04e1ccc7989486461dcf058bb708d9e3d63b04115fcdf8840e38ad1e24a4a2e1e7c1560626c5e3ac7bc09371b127c49e2d45f + languageName: node + linkType: hard + +"dotenv@npm:~16.3.1": + version: 16.3.2 + resolution: "dotenv@npm:16.3.2" + checksum: 10c0/a87d62cef0810b670cb477db1a24a42a093b6b428c9e65c185ce1d6368ad7175234b13547718ba08da18df43faae4f814180cc0366e11be1ded2277abc4dd22e + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.1.0" + checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 + languageName: node + linkType: hard + +"ecdsa-sig-formatter@npm:1.0.11": + version: 1.0.11 + resolution: "ecdsa-sig-formatter@npm:1.0.11" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c + languageName: node + linkType: hard + +"ed25519-signature-2018-context@npm:^1.1.0": + version: 1.1.0 + resolution: "ed25519-signature-2018-context@npm:1.1.0" + checksum: 10c0/c0fb62dd448de59f9cb45ac55f026b793b8da9c0dbe83014d0ddf73d50ea78e37e6bf88b9445f2301a6ead3a42031ef5839f625e3186169d07897e19a056de7c + languageName: node + linkType: hard + +"ed25519-signature-2020-context@npm:^1.1.0": + version: 1.1.0 + resolution: "ed25519-signature-2020-context@npm:1.1.0" + checksum: 10c0/7e5fba0ad8c1979412c45439654c0e1ac05372305760ad7c53e6b8d9a8106ed2f109e57ef19a7f0b23ea0efd69fee9c045d38280d18be11ef3dd68a433e55c46 + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"ejs@npm:^3.1.7": + version: 3.1.10 + resolution: "ejs@npm:3.1.10" + dependencies: + jake: "npm:^10.8.5" + bin: + ejs: bin/cli.js + checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.173": + version: 1.5.194 + resolution: "electron-to-chromium@npm:1.5.194" + checksum: 10c0/7d72617857055d54552380b34be411933966fa1156dc8653e321d14e82e2af84114bac607e9e2926f885d560b2697a324981e4204d3da4e0f9604d4a468eeba1 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.73": + version: 1.5.84 + resolution: "electron-to-chromium@npm:1.5.84" + checksum: 10c0/8362d556360eba420ea3475a7878c8fa8507a42c4ebfbf44108f6acc4edbe30a1cde79e95613bdc9ae6e7d73bf1776347cf7f615c1a220f63e34a0fa029568e0 + languageName: node + linkType: hard + +"email-templates@npm:^2.7.1": + version: 2.7.1 + resolution: "email-templates@npm:2.7.1" + dependencies: + bluebird: "npm:^3.0.0" + consolidate: "npm:^0.14.2" + debug: "npm:^2.2.0" + glob: "npm:^6.0.0" + juice: "npm:^4.1.0" + lodash: "npm:^4.0.1" + checksum: 10c0/dad652679e8da4ae47a86fa8d7bcd708fab4aa866b4a397605b7f55a437d2cf8b3b05d9dc4a04d39d2773364d09fe17e092b1e9b3673eb8c1f9d97735b4607d0 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.15.0": + version: 5.18.0 + resolution: "enhanced-resolve@npm:5.18.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/5fcc264a6040754ab5b349628cac2bb5f89cee475cbe340804e657a5b9565f70e6aafb338d5895554eb0ced9f66c50f38a255274a0591dcb64ee17c549c459ce + languageName: node + linkType: hard + +"enquirer@npm:~2.3.6": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: "npm:^4.1.1" + checksum: 10c0/8e070e052c2c64326a2803db9084d21c8aaa8c688327f133bf65c4a712586beb126fd98c8a01cfb0433e82a4bd3b6262705c55a63e0f7fb91d06b9cedbde9a11 + languageName: node + linkType: hard + +"entities@npm:1.0": + version: 1.0.0 + resolution: "entities@npm:1.0.0" + checksum: 10c0/fd382add860bab507c942a054ef98445028bf988d16f53cbae24c70533c280d4ea116a5bc6308f6ca66901818faf4f495316f9873c6337af7cffaaf3859da407 + languageName: node + linkType: hard + +"entities@npm:^1.1.1, entities@npm:~1.1.1": + version: 1.1.2 + resolution: "entities@npm:1.1.2" + checksum: 10c0/5b12fa8c4fb942f88af6f8791bbe7be0a59ebd91c8933cee091d94455efd1eeb200418c7b1bc8dd0f74cdd4db8cf4538eb043db14cfd1919130c25d8c6095215 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 + languageName: node + linkType: hard + +"entities@npm:^3.0.1": + version: 3.0.1 + resolution: "entities@npm:3.0.1" + checksum: 10c0/2d93f48fd86de0b0ed8ee34456aa47b4e74a916a5e663cfcc7048302e2c7e932002926daf5a00ad6d5691e3c90673a15d413704d86d7e1b9532f9bc00d975590 + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"envinfo@npm:7.13.0": + version: 7.13.0 + resolution: "envinfo@npm:7.13.0" + bin: + envinfo: dist/cli.js + checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9": + version: 1.23.9 + resolution: "es-abstract@npm:1.23.9" + dependencies: + array-buffer-byte-length: "npm:^1.0.2" + arraybuffer.prototype.slice: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + data-view-buffer: "npm:^1.0.2" + data-view-byte-length: "npm:^1.0.2" + data-view-byte-offset: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.1.0" + es-to-primitive: "npm:^1.3.0" + function.prototype.name: "npm:^1.1.8" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.0" + get-symbol-description: "npm:^1.1.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.1.0" + is-array-buffer: "npm:^3.0.5" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.2" + is-regex: "npm:^1.2.1" + is-shared-array-buffer: "npm:^1.0.4" + is-string: "npm:^1.1.1" + is-typed-array: "npm:^1.1.15" + is-weakref: "npm:^1.1.0" + math-intrinsics: "npm:^1.1.0" + object-inspect: "npm:^1.13.3" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.7" + own-keys: "npm:^1.0.1" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.3" + safe-push-apply: "npm:^1.0.0" + safe-regex-test: "npm:^1.1.0" + set-proto: "npm:^1.0.0" + string.prototype.trim: "npm:^1.2.10" + string.prototype.trimend: "npm:^1.0.9" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.3" + typed-array-byte-length: "npm:^1.0.3" + typed-array-byte-offset: "npm:^1.0.4" + typed-array-length: "npm:^1.0.7" + unbox-primitive: "npm:^1.1.0" + which-typed-array: "npm:^1.1.18" + checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b + languageName: node + linkType: hard + +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 10c0/4b7617d3fbd460d6f051f684ceca6cf7e88e6724671d9480388d3ecdd72119ddaa46ca31f2c69c5426a82e4b3091c1e81867c71dcdc453565cd90005ff2c382d + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.0.0, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.5.3": + version: 1.6.0 + resolution: "es-module-lexer@npm:1.6.0" + checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" + dependencies: + is-callable: "npm:^1.2.7" + is-date-object: "npm:^1.0.5" + is-symbol: "npm:^1.0.4" + checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b + languageName: node + linkType: hard + +"es6-error@npm:^4.1.1": + version: 4.1.1 + resolution: "es6-error@npm:4.1.1" + checksum: 10c0/357663fb1e845c047d548c3d30f86e005db71e122678f4184ced0693f634688c3f3ef2d7de7d4af732f734de01f528b05954e270f06aa7d133679fb9fe6600ef + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-config-airbnb-base@npm:^15.0.0": + version: 15.0.0 + resolution: "eslint-config-airbnb-base@npm:15.0.0" + dependencies: + confusing-browser-globals: "npm:^1.0.10" + object.assign: "npm:^4.1.2" + object.entries: "npm:^1.1.5" + semver: "npm:^6.3.0" + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f + languageName: node + linkType: hard + +"eslint-config-airbnb@npm:^19.0.4": + version: 19.0.4 + resolution: "eslint-config-airbnb@npm:19.0.4" + dependencies: + eslint-config-airbnb-base: "npm:^15.0.0" + object.assign: "npm:^4.1.2" + object.entries: "npm:^1.1.5" + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + checksum: 10c0/867feeda45c4b480b1b8eff8fabc1bb107e837da8b48e5039e0c175ae6ad34af383b1924fc163bbfcef24a324e6651b1515e5bd12cbcbb19535a8838e2544a02 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^9.1.0": + version: 9.1.0 + resolution: "eslint-config-prettier@npm:9.1.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: "npm:^3.2.7" + is-core-module: "npm:^2.13.0" + resolve: "npm:^1.22.4" + checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 + languageName: node + linkType: hard + +"eslint-import-resolver-typescript@npm:^3.6.1": + version: 3.7.0 + resolution: "eslint-import-resolver-typescript@npm:3.7.0" + dependencies: + "@nolyfill/is-core-module": "npm:1.0.39" + debug: "npm:^4.3.7" + enhanced-resolve: "npm:^5.15.0" + fast-glob: "npm:^3.3.2" + get-tsconfig: "npm:^4.7.5" + is-bun-module: "npm:^1.0.2" + is-glob: "npm:^4.0.3" + stable-hash: "npm:^0.0.4" + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + eslint-plugin-import-x: "*" + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + checksum: 10c0/b1dec542a31486b3b5730f71f08a8ee2ac4915dbc4aa1493fd15bc8fcadcb029772ab39a425824c235045b3a7e629290a339d4a7e7f3dd32b24e715106352d40 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.12.0": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 + languageName: node + linkType: hard + +"eslint-plugin-es@npm:^3.0.0": + version: 3.0.1 + resolution: "eslint-plugin-es@npm:3.0.1" + dependencies: + eslint-utils: "npm:^2.0.0" + regexpp: "npm:^3.0.0" + peerDependencies: + eslint: ">=4.19.1" + checksum: 10c0/12ae730aa9603e680af048e1653aac15e529411b68b8d0da6e290700b17c695485af7c3f5360f531f80970786cab7288c2c1d4a58c35ec1bb89649897c016c4a + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.29.1": + version: 2.31.0 + resolution: "eslint-plugin-import@npm:2.31.0" + dependencies: + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.8" + array.prototype.findlastindex: "npm:^1.2.5" + array.prototype.flat: "npm:^1.3.2" + array.prototype.flatmap: "npm:^1.3.2" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.12.0" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.15.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.0" + semver: "npm:^6.3.1" + string.prototype.trimend: "npm:^1.0.8" + tsconfig-paths: "npm:^3.15.0" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^27.9.0": + version: 27.9.0 + resolution: "eslint-plugin-jest@npm:27.9.0" + dependencies: + "@typescript-eslint/utils": "npm:^5.10.0" + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: "*" + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 10c0/b8b09f7d8ba3d84a8779a6e95702a6e4dce45ab034e4edf5ddb631e77cd38dcdf791dfd9228e0a0d1d80d1eb2d278deb62ad2ec39f10fb8fd43cec07304e0c38 + languageName: node + linkType: hard + +"eslint-plugin-jsdoc@npm:^48.2.1": + version: 48.11.0 + resolution: "eslint-plugin-jsdoc@npm:48.11.0" + dependencies: + "@es-joy/jsdoccomment": "npm:~0.46.0" + are-docs-informative: "npm:^0.0.2" + comment-parser: "npm:1.4.1" + debug: "npm:^4.3.5" + escape-string-regexp: "npm:^4.0.0" + espree: "npm:^10.1.0" + esquery: "npm:^1.6.0" + parse-imports: "npm:^2.1.1" + semver: "npm:^7.6.3" + spdx-expression-parse: "npm:^4.0.0" + synckit: "npm:^0.9.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 10c0/f78bac109e62f838c14f90ebd572a06a865f2896a16201c9324cb92be25b5ba8deb54ee1d8ea36232ee53a41c177d5d5ac80662c0fe2479d1e1e1e7633385659 + languageName: node + linkType: hard + +"eslint-plugin-node@npm:^11.1.0": + version: 11.1.0 + resolution: "eslint-plugin-node@npm:11.1.0" + dependencies: + eslint-plugin-es: "npm:^3.0.0" + eslint-utils: "npm:^2.0.0" + ignore: "npm:^5.1.1" + minimatch: "npm:^3.0.4" + resolve: "npm:^1.10.1" + semver: "npm:^6.1.0" + peerDependencies: + eslint: ">=5.16.0" + checksum: 10c0/c7716adac4020cb852fd2410dcd8bdb13a227004de77f96d7f9806d0cf2274f24e0920a7ca73bcd72d90003696c1f17fdd9fe3ca218e64ee03dc2b840e4416fa + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.1.3": + version: 5.2.3 + resolution: "eslint-plugin-prettier@npm:5.2.3" + dependencies: + prettier-linter-helpers: "npm:^1.0.0" + synckit: "npm:^0.9.1" + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: "*" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 10c0/60d9c03491ec6080ac1d71d0bee1361539ff6beb9b91ac98cfa7176c9ed52b7dbe7119ebee5b441b479d447d17d802a4a492ee06095ef2f22c460e3dd6459302 + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-utils@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: "npm:^1.1.0" + checksum: 10c0/69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.1.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 + languageName: node + linkType: hard + +"eslint@npm:^8.2.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + languageName: node + linkType: hard + +"espree@npm:^10.1.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" + dependencies: + acorn: "npm:^8.14.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2, esquery@npm:^1.6.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"etag@npm:^1.8.1, etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + +"eventemitter2@npm:^6.4.9": + version: 6.4.9 + resolution: "eventemitter2@npm:6.4.9" + checksum: 10c0/b2adf7d9f1544aa2d95ee271b0621acaf1e309d85ebcef1244fb0ebc7ab0afa6ffd5e371535d0981bc46195ad67fd6ff57a8d1db030584dee69aa5e371a27ea7 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"execa@npm:5.0.0": + version: 5.0.0 + resolution: "execa@npm:5.0.0" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/e110add7ca0de63aea415385ebad7236c8de281d5d9a916dbd69f59009dac3d5d631e6252c2ea5d0258220b0d22acf25649b2caf05fa162eaa1401339fc69ba4 + languageName: node + linkType: hard + +"execa@npm:^5.1.1": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + +"exit-x@npm:^0.2.2": + version: 0.2.2 + resolution: "exit-x@npm:0.2.2" + checksum: 10c0/212a7a095ca5540e9581f1ef2d1d6a40df7a6027c8cc96e78ce1d16b86d1a88326d4a0eff8dff2b5ec1e68bb0c1edd5d0dfdde87df1869bf7514d4bc6a5cbd72 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"expect-type@npm:^1.2.2": + version: 1.2.2 + resolution: "expect-type@npm:1.2.2" + checksum: 10c0/6019019566063bbc7a690d9281d920b1a91284a4a093c2d55d71ffade5ac890cf37a51e1da4602546c4b56569d2ad2fc175a2ccee77d1ae06cb3af91ef84f44b + languageName: node + linkType: hard + +"expect@npm:30.0.5, expect@npm:^30.0.0": + version: 30.0.5 + resolution: "expect@npm:30.0.5" + dependencies: + "@jest/expect-utils": "npm:30.0.5" + "@jest/get-type": "npm:30.0.1" + jest-matcher-utils: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-mock: "npm:30.0.5" + jest-util: "npm:30.0.5" + checksum: 10c0/e08e4ced2856a0898b3a4e8d09aab7f8e2212cde701e41a560c3ab7e9053517947ff1a762fc425dbe0c48ed54e131aa7190de67a402f98b4e5ada23eb21c0a9f + languageName: node + linkType: hard + +"expo-server-sdk@npm:^3.4.0": + version: 3.13.0 + resolution: "expo-server-sdk@npm:3.13.0" + dependencies: + node-fetch: "npm:^2.6.0" + promise-limit: "npm:^2.7.0" + promise-retry: "npm:^2.0.1" + checksum: 10c0/08fbebd2d6a38ff9af37c9dc0a3d9a33c16dff6908078716cd887fbf8d08d50167d9fa4ec7713e452935c6ede8f29233d533b166e91118eb0db56280282645f4 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"express-session@npm:^1.17.0": + version: 1.18.1 + resolution: "express-session@npm:1.18.1" + dependencies: + cookie: "npm:0.7.2" + cookie-signature: "npm:1.0.7" + debug: "npm:2.6.9" + depd: "npm:~2.0.0" + on-headers: "npm:~1.0.2" + parseurl: "npm:~1.3.3" + safe-buffer: "npm:5.2.1" + uid-safe: "npm:~2.1.5" + checksum: 10c0/7999f128df1528430044c97bb1aac95093afaee86c5fa54b2890c4aad9898d79745301f8c90c2df057d6dfe7af7f8ee220340bf5eb53dca5eff37e52cc2fbec7 + languageName: node + linkType: hard + +"extend@npm:^3.0.0, extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fastest-validator@npm:^1.19.0": + version: 1.19.0 + resolution: "fastest-validator@npm:1.19.0" + checksum: 10c0/86dc0620a3cb593378f90017e45c4843a9f40442a1df84ce76cdf68f205dbf45a194aee1ed68d25391ec15ad4b23febf3e4fda9d2f6218e9655cc649beaf0d15 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.18.0 + resolution: "fastq@npm:1.18.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.2": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: "npm:2.1.1" + checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 + languageName: node + linkType: hard + +"fdir@npm:^6.4.4": + version: 6.4.6 + resolution: "fdir@npm:6.4.6" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 + languageName: node + linkType: hard + +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + +"figures@npm:3.2.0, figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + +"filelist@npm:^1.0.4": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: "npm:^5.0.1" + checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^2.0.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: "npm:^2.0.0" + checksum: 10c0/c080875c9fe28eb1962f35cbe83c683796a0321899f1eed31a37577800055539815de13d53495049697d3ba313013344f843bb9401dd337a1b832be5edfc6840 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.6, follow-redirects@npm:^1.5.1": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c + languageName: node + linkType: hard + +"form-data@npm:^2.3.1": + version: 2.5.2 + resolution: "form-data@npm:2.5.2" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.6" + mime-types: "npm:^2.1.12" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/af7cb13fc8423ff95fd59c62d101c84b5458a73e1e426b0bc459afbf5b93b1e447dc6c225ac31c6df59f36b209904a3f1a10b4eb9e7a17e0fe394019749142cc + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 + languageName: node + linkType: hard + +"form-data@npm:^4.0.4": + version: 4.0.4 + resolution: "form-data@npm:4.0.4" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 + languageName: node + linkType: hard + +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.6" + mime-types: "npm:^2.1.12" + checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + +"formidable@npm:^1.2.0": + version: 1.2.6 + resolution: "formidable@npm:1.2.6" + checksum: 10c0/9ebc45f434785051d4ecab28be3356c7a172a112119f5dd7aafc393ab7f6a6f3baa2446e5215ce21bf094c4c24dfb4bf483117d07961862e04ad11a25b9b577b + languageName: node + linkType: hard + +"fresh@npm:0.5.2, fresh@npm:^0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + +"front-matter@npm:^4.0.2": + version: 4.0.2 + resolution: "front-matter@npm:4.0.2" + dependencies: + js-yaml: "npm:^3.13.1" + checksum: 10c0/7a0df5ca37428dd563c057bc17a8940481fe53876609bcdc443a02ce463c70f1842c7cb4628b80916de46a253732794b36fb6a31105db0f185698a93acee4011 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-extra@npm:^10.0.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.1": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + functions-have-names: "npm:^1.2.3" + hasown: "npm:^2.0.2" + is-callable: "npm:^1.2.7" + checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + +"gauge@npm:^3.0.0": + version: 3.0.2 + resolution: "gauge@npm:3.0.2" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.2" + console-control-strings: "npm:^1.0.0" + has-unicode: "npm:^2.0.1" + object-assign: "npm:^4.1.1" + signal-exit: "npm:^3.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.2" + checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7": + version: 1.2.7 + resolution: "get-intrinsic@npm:1.2.7" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.0" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be + languageName: node + linkType: hard + +"get-pkg-repo@npm:^4.2.1": + version: 4.2.1 + resolution: "get-pkg-repo@npm:4.2.1" + dependencies: + "@hutson/parse-repository-url": "npm:^3.0.0" + hosted-git-info: "npm:^4.0.0" + through2: "npm:^2.0.0" + yargs: "npm:^16.2.0" + bin: + get-pkg-repo: src/cli.js + checksum: 10c0/1338d2e048a594da4a34e7dd69d909376d72784f5ba50963a242b4b35db77533786f618b3f6a9effdee2af20af4917a3b7cf12533b4575d7f9c163886be1fb62 + languageName: node + linkType: hard + +"get-port@npm:5.1.1, get-port@npm:^5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 10c0/2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c + languageName: node + linkType: hard + +"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"get-stdin@npm:^7.0.0": + version: 7.0.0 + resolution: "get-stdin@npm:7.0.0" + checksum: 10c0/84d7850d17727f14d582670c4222b167317da43b296b88717abca989b6192eb80f66ca62833d63e749b3c984f3f9113cb6794dc9ecccb29969b8162565162033 + languageName: node + linkType: hard + +"get-stream@npm:6.0.0": + version: 6.0.0 + resolution: "get-stream@npm:6.0.0" + checksum: 10c0/7cd835cb9180041e7be2cc3de236e5db9f2144515921aeb60ae78d3a46f9944439d654c2aae5b0191e41eb6e2500f0237494a2e6c0790367183f788d1c9f6dd6 + languageName: node + linkType: hard + +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.5": + version: 4.9.0 + resolution: "get-tsconfig@npm:4.9.0" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/b1b83a2f65aa589cd99036c21de928bea7424be6575a2736cb4de5fb5760c874d64ac69809f4691c1262a4e3c72c646fd2cb758e406acbff7f37ee86301943ee + languageName: node + linkType: hard + +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f + languageName: node + linkType: hard + +"git-raw-commits@npm:^3.0.0": + version: 3.0.0 + resolution: "git-raw-commits@npm:3.0.0" + dependencies: + dargs: "npm:^7.0.0" + meow: "npm:^8.1.2" + split2: "npm:^3.2.2" + bin: + git-raw-commits: cli.js + checksum: 10c0/2a5db2e4b5b1ef7b6ecbdc175e559920a5400cbdb8d36f130aaef3588bfd74d8650b354a51ff89e0929eadbb265a00078a6291ff26248a525f0b2f079b001bf6 + languageName: node + linkType: hard + +"git-remote-origin-url@npm:^2.0.0": + version: 2.0.0 + resolution: "git-remote-origin-url@npm:2.0.0" + dependencies: + gitconfiglocal: "npm:^1.0.0" + pify: "npm:^2.3.0" + checksum: 10c0/3a846ce98ed36b2d0b801e8ec1ab299a236cfc6fa264bfdf9f42301abfdfd8715c946507fd83a10b9db449eb609ac6f8a2a341daf52e3af0000367487f486355 + languageName: node + linkType: hard + +"git-semver-tags@npm:^5.0.0": + version: 5.0.1 + resolution: "git-semver-tags@npm:5.0.1" + dependencies: + meow: "npm:^8.1.2" + semver: "npm:^7.0.0" + bin: + git-semver-tags: cli.js + checksum: 10c0/7cacba2f4ac19c0ccb8e6bb7301409376e5a2cc178692667afff453e6fe81f79b5f3f5040343e2be127a2f34977528d354de2aa32430917e90b64884debd3102 + languageName: node + linkType: hard + +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" + dependencies: + is-ssh: "npm:^1.4.0" + parse-url: "npm:^8.1.0" + checksum: 10c0/a3fa02e1a63c7c824b5ebbf23f4a9a6b34dd80031114c5dd8adb7ef53493642e39d3d80dfef4025a452128400c35c2c138d20a0f6ae5d7d7ef70d9ba13083d34 + languageName: node + linkType: hard + +"git-url-parse@npm:14.0.0": + version: 14.0.0 + resolution: "git-url-parse@npm:14.0.0" + dependencies: + git-up: "npm:^7.0.0" + checksum: 10c0/d360cf23c6278e302b74603f3dc490c3fe22e533d58b7f35e0295fad9af209ce5046a55950ccbf2f0d18de7931faefb4353e3f3fd3dda87fce77b409d48e0ba9 + languageName: node + linkType: hard + +"gitconfiglocal@npm:^1.0.0": + version: 1.0.0 + resolution: "gitconfiglocal@npm:1.0.0" + dependencies: + ini: "npm:^1.3.2" + checksum: 10c0/cfcb16344834113199f209f2758ced778dc30e075ddb49b5dde659b4dd2deadee824db0a1b77e1303cb594d9e8b2240da18c67705f657aa76affb444aa349005 + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:7.1.4": + version: 7.1.4 + resolution: "glob@npm:7.1.4" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.0.4" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/7f6fcbf600eb2298cce34c65f6d8bbe6933ddd4f88aa5b38a9c6feec82b615bb33b63b120725303e89c4b50284413c21d2ff883414717a5c7d0c9f7cd7a0e5fe + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^6.0.0": + version: 6.0.4 + resolution: "glob@npm:6.0.4" + dependencies: + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:2 || 3" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/520146ebce0f4594b8357338f86281b38ee14214debce398a2902176a28f18e0f98911ea48516d85022de64fbbaa57f074aa13715d1daa5d70e21b82cea22183 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"glob@npm:^9.2.0": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: "npm:^1.0.0" + minimatch: "npm:^8.0.2" + minipass: "npm:^4.2.4" + path-scurry: "npm:^1.6.1" + checksum: 10c0/2f6c2b9ee019ee21dc258ae97a88719614591e4c979cb4580b1b9df6f0f778a3cb38b4bdaf18dfa584637ea10f89a3c5f2533a5e449cf8741514ad18b0951f2e + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"globby@npm:11.1.0, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"google-libphonenumber@npm:^3.2.26": + version: 3.2.40 + resolution: "google-libphonenumber@npm:3.2.40" + checksum: 10c0/997857e0dfdd39b169171cfee72ba268e9b0f9c655317701e21f61b2725d48384df3b2dea6977b49fb47efbde319fd71a1f2ec46589e91ab832ada9f54793cff + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"got@npm:^11.8.0": + version: 11.8.6 + resolution: "got@npm:11.8.6" + dependencies: + "@sindresorhus/is": "npm:^4.0.0" + "@szmarczak/http-timer": "npm:^4.0.5" + "@types/cacheable-request": "npm:^6.0.1" + "@types/responselike": "npm:^1.0.0" + cacheable-lookup: "npm:^5.0.3" + cacheable-request: "npm:^7.0.2" + decompress-response: "npm:^6.0.0" + http2-wrapper: "npm:^1.0.0-beta.5.2" + lowercase-keys: "npm:^2.0.0" + p-cancelable: "npm:^2.0.0" + responselike: "npm:^2.0.0" + checksum: 10c0/754dd44877e5cf6183f1e989ff01c648d9a4719e357457bd4c78943911168881f1cfb7b2cb15d885e2105b3ad313adb8f017a67265dd7ade771afdb261ee8cb1 + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.2" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d + languageName: node + linkType: hard + +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: "npm:^6.12.3" + har-schema: "npm:^2.0.0" + checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 10c0/febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: "npm:^1.0.0" + checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c + languageName: node + linkType: hard + +"hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"he@npm:^1.0.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: "npm:^6.0.0" + checksum: 10c0/150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 + languageName: node + linkType: hard + +"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + +"html-to-text@npm:^2.1.0": + version: 2.1.3 + resolution: "html-to-text@npm:2.1.3" + dependencies: + he: "npm:^1.0.0" + htmlparser: "npm:^1.7.7" + optimist: "npm:^0.6.1" + underscore: "npm:^1.8.3" + underscore.string: "npm:^3.2.3" + bin: + html-to-text: ./bin/cli.js + checksum: 10c0/bd37935b7370b8fb294efb96af1517f8554285349fa376d6e8b77ed3db6a1300dd30c0513d99a1640b9ba9758bf18c8d2b68f60abdfc4481872748dffe4b06fa + languageName: node + linkType: hard + +"htmlparser2@npm:^3.9.1": + version: 3.10.1 + resolution: "htmlparser2@npm:3.10.1" + dependencies: + domelementtype: "npm:^1.3.1" + domhandler: "npm:^2.3.0" + domutils: "npm:^1.5.1" + entities: "npm:^1.1.1" + inherits: "npm:^2.0.1" + readable-stream: "npm:^3.1.1" + checksum: 10c0/b1424536ff062088501efa06a2afd478545d3134a5ad2e28bbe02dc2d092784982286b90f1c87fa3d86692958dbfb8936352dfd71d1cb2ff7cb61208c00fcdb1 + languageName: node + linkType: hard + +"htmlparser2@npm:^4.0.0": + version: 4.1.0 + resolution: "htmlparser2@npm:4.1.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^3.0.0" + domutils: "npm:^2.0.0" + entities: "npm:^2.0.0" + checksum: 10c0/a2d8d12ba45534a657d1965b71d4d581e521d14b7fc966ef031722cdd3895a23ce769fed63024e796538b3fc370e894b3a2f5b5071e54120905a6111cd3f88b0 + languageName: node + linkType: hard + +"htmlparser2@npm:^6.0.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.0.0" + domutils: "npm:^2.5.2" + entities: "npm:^2.0.0" + checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 + languageName: node + linkType: hard + +"htmlparser2@npm:^7.0.0": + version: 7.2.0 + resolution: "htmlparser2@npm:7.2.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.2" + domutils: "npm:^2.8.0" + entities: "npm:^3.0.1" + checksum: 10c0/7e1fa7f3b2635f2a1c5272765e25aab33b241d84a43e9d27f28a0b7166b51a8025dec40a6a29af38d6a698a2f1d2983cb43e5c61d4e07ec5aa9df672a7460e16 + languageName: node + linkType: hard + +"htmlparser2@npm:^8.0.0": + version: 8.0.2 + resolution: "htmlparser2@npm:8.0.2" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.0.1" + entities: "npm:^4.4.0" + checksum: 10c0/609cca85886d0bf2c9a5db8c6926a89f3764596877492e2caa7a25a789af4065bc6ee2cdc81807fe6b1d03a87bf8a373b5a754528a4cc05146b713c20575aab4 + languageName: node + linkType: hard + +"htmlparser2@npm:~3.8.1": + version: 3.8.3 + resolution: "htmlparser2@npm:3.8.3" + dependencies: + domelementtype: "npm:1" + domhandler: "npm:2.3" + domutils: "npm:1.5" + entities: "npm:1.0" + readable-stream: "npm:1.1" + checksum: 10c0/253a673976c1e2c2b8429e45830a5a89c3f23bb6dd34f5958aefbb104a8caf1268515b535277714deb034d894aa0bd315e901cbf2ec906e8ed0d1e49b2d73b3e + languageName: node + linkType: hard + +"htmlparser@npm:^1.7.7": + version: 1.7.7 + resolution: "htmlparser@npm:1.7.7" + checksum: 10c0/b4ef1d2031f1370f274f646f824da10c8d946e671001d92878a4db77332abe84541667728063bb374a2742659b9549fd7d2e7ecdf71605ff016ef18b328becf5 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + +"http-link-header@npm:^1.0.2, http-link-header@npm:^1.1.1": + version: 1.1.3 + resolution: "http-link-header@npm:1.1.3" + checksum: 10c0/56698a9d3aee4d5319d1cdfe62ef5d7179f179ec1e6432d23c9e6a0c896be642ba47a4985a45419cff91008032aef920aca9df94ff9e763e646c83bf54b7243d + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"http-signature-header@npm:^1.3.1": + version: 1.3.1 + resolution: "http-signature-header@npm:1.3.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/c44fb0129322c3a7825f589c82fa37d546a0cdc9d06052545208d8c0edda240aa4888e07d667d5c221e94bd583d016250829c8a510114da0d3643185ec8236b5 + languageName: node + linkType: hard + +"http-signature@npm:^1.3.4": + version: 1.4.0 + resolution: "http-signature@npm:1.4.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^2.0.2" + sshpk: "npm:^1.18.0" + checksum: 10c0/b9806f5a9ed82a146589837d175c43b596b1cc8c9431665e83d47c152aa8a4629dd1b1e050f8f56e7f17f62cf97b58e888775093310441ddee5f105f28646b2b + languageName: node + linkType: hard + +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^1.2.2" + sshpk: "npm:^1.7.0" + checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 + languageName: node + linkType: hard + +"http2-wrapper@npm:^1.0.0-beta.5.2": + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.0.0" + checksum: 10c0/6a9b72a033e9812e1476b9d776ce2f387bc94bc46c88aea0d5dab6bd47d0a539b8178830e77054dd26d1142c866d515a28a4dc7c3ff4232c88ff2ebe4f5d12d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-walk@npm:^6.0.4": + version: 6.0.5 + resolution: "ignore-walk@npm:6.0.5" + dependencies: + minimatch: "npm:^9.0.0" + checksum: 10c0/8bd6d37c82400016c7b6538b03422dde8c9d7d3e99051c8357dd205d499d42828522fb4fbce219c9c21b4b069079445bacdc42bbd3e2e073b52856c2646d8a39 + languageName: node + linkType: hard + +"ignore@npm:^5.0.4, ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.3.1": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"image-size@npm:^0.7.3": + version: 0.7.5 + resolution: "image-size@npm:0.7.5" + bin: + image-size: bin/image-size.js + checksum: 10c0/74e978c525e7d777df145bc66cfc4a4a7aa56de8e5daead3a69b0872082dbe385deb4a3b80799810df9e34b2031467412ae28810f2f65ec2e5fe08b895aa3491 + languageName: node + linkType: hard + +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: 10c0/f8ba7ede69bee9260241ad078d2d535848745ff5f6995c7c7cb41cfdc9ccc213f66e10fa5afb881f90298b24a3f7344b637b592beb4f54e582770cdce3f1f039 + languageName: node + linkType: hard + +"immutable@npm:^3.8.2": + version: 3.8.2 + resolution: "immutable@npm:3.8.2" + checksum: 10c0/fb6a2999ad3bda9e51741721e42547076dd492635ee4df9241224055fe953ec843583a700088cc4915f23dc326e5084f4e17f1bbd7388c3e872ef5a242e0ac5e + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"import-local@npm:3.1.0": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + languageName: node + linkType: hard + +"import-local@npm:^3.2.0": + version: 3.2.0 + resolution: "import-local@npm:3.2.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:^1.3.2, ini@npm:^1.3.8, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 + languageName: node + linkType: hard + +"init-package-json@npm:6.0.3": + version: 6.0.3 + resolution: "init-package-json@npm:6.0.3" + dependencies: + "@npmcli/package-json": "npm:^5.0.0" + npm-package-arg: "npm:^11.0.0" + promzard: "npm:^1.0.0" + read: "npm:^3.0.1" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/a80f024ee041a2cf4d3062ba936abf015cbc32bda625cabe994d1fa4bd942bb9af37a481afd6880d340d3e94d90bf97bed1a0a877cc8c7c9b48e723c2524ae74 + languageName: node + linkType: hard + +"inquirer@npm:^8.2.4": + version: 8.2.6 + resolution: "inquirer@npm:8.2.6" + dependencies: + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.1.1" + cli-cursor: "npm:^3.1.0" + cli-width: "npm:^3.0.0" + external-editor: "npm:^3.0.3" + figures: "npm:^3.0.0" + lodash: "npm:^4.17.21" + mute-stream: "npm:0.0.8" + ora: "npm:^5.4.1" + run-async: "npm:^2.4.0" + rxjs: "npm:^7.5.5" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + through: "npm:^2.3.6" + wrap-ansi: "npm:^6.0.1" + checksum: 10c0/eb5724de1778265323f3a68c80acfa899378cb43c24cdcb58661386500e5696b6b0b6c700e046b7aa767fe7b4823c6f04e6ddc268173e3f84116112529016296 + languageName: node + linkType: hard + +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 + languageName: node + linkType: hard + +"ioredis@npm:^4.27.0": + version: 4.28.5 + resolution: "ioredis@npm:4.28.5" + dependencies: + cluster-key-slot: "npm:^1.1.0" + debug: "npm:^4.3.1" + denque: "npm:^1.1.0" + lodash.defaults: "npm:^4.2.0" + lodash.flatten: "npm:^4.4.0" + lodash.isarguments: "npm:^3.1.0" + p-map: "npm:^2.1.0" + redis-commands: "npm:1.7.0" + redis-errors: "npm:^1.2.0" + redis-parser: "npm:^3.0.0" + standard-as-callback: "npm:^2.1.0" + checksum: 10c0/6fd12957d2906f83d8aa662ba78d084df16dc7c1a0e6e18c512302ac94339dcd5936d2e7cd6f89e9e7b511e3cf96617ca2fdea63aa4679bfdf48aa2be441ad76 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.2.0": + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.1.0 + resolution: "is-async-function@npm:2.1.0" + dependencies: + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/5209b858c6d18d88a9fb56dea202a050d53d4b722448cc439fdca859b36e23edf27ee8c18958ba49330f1a71b8846576273f4581e1c0bb9d403738129d852fdb + languageName: node + linkType: hard + +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" + dependencies: + has-bigints: "npm:^1.0.2" + checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.2.1": + version: 1.2.1 + resolution: "is-boolean-object@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 + languageName: node + linkType: hard + +"is-bun-module@npm:^1.0.2": + version: 1.3.0 + resolution: "is-bun-module@npm:1.3.0" + dependencies: + semver: "npm:^7.6.3" + checksum: 10c0/2966744188fcd28e0123c52158c7073973f88babfa9ab04e2846ec5862d6b0f8f398df6413429d930f7c5ee6111ce2cbfb3eb8652d9ec42d4a37dc5089a866fb + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-ci@npm:3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: "npm:^3.2.0" + bin: + is-ci: bin.js + checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0, is-core-module@npm:^2.5.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc + languageName: node + linkType: hard + +"is-expression@npm:^4.0.0": + version: 4.0.0 + resolution: "is-expression@npm:4.0.0" + dependencies: + acorn: "npm:^7.1.1" + object-assign: "npm:^4.1.1" + checksum: 10c0/541831d39d3e7bfc8cecd966d6b0f3c0e6d9055342f17b634fb23e74f51ce90f1bfc3cf231c722fe003a61e8d4f0b9e07244fdaba57f4fc70a163c74006fd5a0 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": + version: 1.1.0 + resolution: "is-generator-function@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.0" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 10c0/dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc + languageName: node + linkType: hard + +"is-nan@npm:^1.3.0": + version: 1.3.2 + resolution: "is-nan@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.0" + define-properties: "npm:^1.1.3" + checksum: 10c0/8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 + languageName: node + linkType: hard + +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 10c0/daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-promise@npm:^2.0.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 + languageName: node + linkType: hard + +"is-regex@npm:^1.0.3, is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 + languageName: node + linkType: hard + +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": + version: 1.4.0 + resolution: "is-ssh@npm:1.4.0" + dependencies: + protocols: "npm:^2.0.1" + checksum: 10c0/3eb30d1bcb4507cd25562e7ac61a1c0aa31772134c67cec9c3afe6f4d57ec17e8c2892600a608e8e583f32f53f36465b8968c0305f2855cfbff95acfd049e113 + languageName: node + linkType: hard + +"is-stream@npm:2.0.0": + version: 2.0.0 + resolution: "is-stream@npm:2.0.0" + checksum: 10c0/687f6bbd2b995573d33e6b40b2cbc8b9186a751aa3151c23e6fd2c4ca352e323a6dc010b09103f89c9ca0bf5c8c38f3fa8b74d5d9acd1c44f1499874d7e844f9 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-string@npm:^1.0.7, is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: "npm:^1.0.0" + checksum: 10c0/61c8650c29548febb6bf69e9541fc11abbbb087a0568df7bc471ba264e95fb254def4e610631cbab4ddb0a1a07949d06416f4ebeaf37875023fb184cdb87ee84 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: "npm:^1.1.16" + checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 + languageName: node + linkType: hard + +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": + version: 1.1.0 + resolution: "is-weakref@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" + dependencies: + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"isstream@npm:^0.1.2, isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2": + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" + dependencies: + "@babel/core": "npm:^7.23.9" + "@babel/parser": "npm:^7.23.9" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^5.0.0": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.23" + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.9.2 + resolution: "jake@npm:10.9.2" + dependencies: + async: "npm:^3.2.3" + chalk: "npm:^4.0.2" + filelist: "npm:^1.0.4" + minimatch: "npm:^3.1.2" + bin: + jake: bin/cli.js + checksum: 10c0/c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31 + languageName: node + linkType: hard + +"jest-changed-files@npm:30.0.5": + version: 30.0.5 + resolution: "jest-changed-files@npm:30.0.5" + dependencies: + execa: "npm:^5.1.1" + jest-util: "npm:30.0.5" + p-limit: "npm:^3.1.0" + checksum: 10c0/41ce090f324e8450443327f19f772a9c3f225b4b1374ba9704358f0c8b8cd91fd134fa41df7db4d278428ab974c432abc3eca9484e67c8f18528974378fddef6 + languageName: node + linkType: hard + +"jest-circus@npm:30.0.5": + version: 30.0.5 + resolution: "jest-circus@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/expect": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + co: "npm:^4.6.0" + dedent: "npm:^1.6.0" + is-generator-fn: "npm:^2.1.0" + jest-each: "npm:30.0.5" + jest-matcher-utils: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-runtime: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + jest-util: "npm:30.0.5" + p-limit: "npm:^3.1.0" + pretty-format: "npm:30.0.5" + pure-rand: "npm:^7.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + checksum: 10c0/028204897eee7bef2d04eea0216b48f94e3da77ff1d12b0e3a5e265e8e73bcd31192cec70282aa1ece91150c00fcb5662c2c68e86b3892cffbfbe7058fa7f4e5 + languageName: node + linkType: hard + +"jest-cli@npm:30.0.5": + version: 30.0.5 + resolution: "jest-cli@npm:30.0.5" + dependencies: + "@jest/core": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + chalk: "npm:^4.1.2" + exit-x: "npm:^0.2.2" + import-local: "npm:^3.2.0" + jest-config: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + yargs: "npm:^17.7.2" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: ./bin/jest.js + checksum: 10c0/bfcd7212db7825d06afaf01c19bd7168190e22220d300b6db31b3885943a31361e98c4a1bde466146368ad503ae6257a9630bc35b4a43ff0631d7a3f95b63e45 + languageName: node + linkType: hard + +"jest-config@npm:30.0.5": + version: 30.0.5 + resolution: "jest-config@npm:30.0.5" + dependencies: + "@babel/core": "npm:^7.27.4" + "@jest/get-type": "npm:30.0.1" + "@jest/pattern": "npm:30.0.1" + "@jest/test-sequencer": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + babel-jest: "npm:30.0.5" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + deepmerge: "npm:^4.3.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + jest-circus: "npm:30.0.5" + jest-docblock: "npm:30.0.1" + jest-environment-node: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.0.5" + jest-runner: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + micromatch: "npm:^4.0.8" + parse-json: "npm:^5.2.0" + pretty-format: "npm:30.0.5" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + esbuild-register: ">=3.4.0" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + esbuild-register: + optional: true + ts-node: + optional: true + checksum: 10c0/da68048801e6f6622bf6e9a361dcfb3859017bbd58fabcf53bade41157bdf31cc35a1bd3dab1e3cca86e69da23e2c27c7aa5e308efc04564a454e23de6f22062 + languageName: node + linkType: hard + +"jest-diff@npm:30.0.5": + version: 30.0.5 + resolution: "jest-diff@npm:30.0.5" + dependencies: + "@jest/diff-sequences": "npm:30.0.1" + "@jest/get-type": "npm:30.0.1" + chalk: "npm:^4.1.2" + pretty-format: "npm:30.0.5" + checksum: 10c0/b218ced37b7676f578ea866762f04caa74901bdcf3f593872aa9a4991a586302651a1d16bb0386772adacc7580a452ec621359af75d733c0b50ea947fe1881d3 + languageName: node + linkType: hard + +"jest-diff@npm:>=29.4.3 < 30, jest-diff@npm:^29.4.1": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 + languageName: node + linkType: hard + +"jest-docblock@npm:30.0.1": + version: 30.0.1 + resolution: "jest-docblock@npm:30.0.1" + dependencies: + detect-newline: "npm:^3.1.0" + checksum: 10c0/f9bad2651db8afa029867ea7a40f422c9d73c67657360297371846a314a40c8786424be00483261df9137499f52c2af28cd458fbd15a7bf7fac8775b4bcd6ee1 + languageName: node + linkType: hard + +"jest-each@npm:30.0.5": + version: 30.0.5 + resolution: "jest-each@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + "@jest/types": "npm:30.0.5" + chalk: "npm:^4.1.2" + jest-util: "npm:30.0.5" + pretty-format: "npm:30.0.5" + checksum: 10c0/fe7509bfd8b0c8553bbdaffda5d3b674a4da870c5ce9fe69c1ca8111d9e0f21a8f265799eba0f927581d16f4810e5eb5bebfd7e51f5f137cbef08cc44d8fd9cd + languageName: node + linkType: hard + +"jest-environment-node@npm:30.0.5": + version: 30.0.5 + resolution: "jest-environment-node@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/fake-timers": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + jest-mock: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + checksum: 10c0/1b608597f0755814e7c24b9ed2a45abc2340cfd8f8d3691caf929f332facd9c62ac5092e7f01056708a0ca41ae0458b6d442fd1ae9f6d21b7b416b252e1ae210 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b + languageName: node + linkType: hard + +"jest-haste-map@npm:30.0.5": + version: 30.0.5 + resolution: "jest-haste-map@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + anymatch: "npm:^3.1.3" + fb-watchman: "npm:^2.0.2" + fsevents: "npm:^2.3.3" + graceful-fs: "npm:^4.2.11" + jest-regex-util: "npm:30.0.1" + jest-util: "npm:30.0.5" + jest-worker: "npm:30.0.5" + micromatch: "npm:^4.0.8" + walker: "npm:^1.0.8" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/eab5d85d820f149bcf4bf4e0c49316f48973c85d39b4c3a2e08f57504f069afe9b0f1665e556330a98c6fc6bd5a6932767b466c1c96124fa0161aef017ab17b3 + languageName: node + linkType: hard + +"jest-leak-detector@npm:30.0.5": + version: 30.0.5 + resolution: "jest-leak-detector@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + pretty-format: "npm:30.0.5" + checksum: 10c0/04207ab6f44dec22d3d656b5f3b4f334440f4c01ccd21c55474f26706530244d34b8dc9922c9449e00e8649e5da1b8de4aca58c9895c9de19951d5ecdc0ff113 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:30.0.5": + version: 30.0.5 + resolution: "jest-matcher-utils@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + chalk: "npm:^4.1.2" + jest-diff: "npm:30.0.5" + pretty-format: "npm:30.0.5" + checksum: 10c0/231d891b29bfc218f2f5739c10873b6671426e31ad1c5538eed1531e62608fd3f60d32f41821332a6cf41f1614fd37361434c754fdd49c849b35ef2e5156c02e + languageName: node + linkType: hard + +"jest-message-util@npm:30.0.5": + version: 30.0.5 + resolution: "jest-message-util@npm:30.0.5" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@jest/types": "npm:30.0.5" + "@types/stack-utils": "npm:^2.0.3" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + micromatch: "npm:^4.0.8" + pretty-format: "npm:30.0.5" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + checksum: 10c0/38b710c127db6c79c36d690377d9f9f1e3c2e4b2d2e60f3b82a5b4da70efb1f4783c6cf0cf1f6be6e3b7fb2d2aed889583d2430f65afc09e7e6d68aa5fa981dc + languageName: node + linkType: hard + +"jest-mock@npm:30.0.5": + version: 30.0.5 + resolution: "jest-mock@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + jest-util: "npm:30.0.5" + checksum: 10c0/207fd79297f514a8e26ede9b4b5035e70212b8850a2f460b51d3cc58e8e7c9585bd2dbc5df2475a3321c4cd114b90e0b24190f00d6eeb88c8f088a8ed00416d5 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.3": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac + languageName: node + linkType: hard + +"jest-regex-util@npm:30.0.1": + version: 30.0.1 + resolution: "jest-regex-util@npm:30.0.1" + checksum: 10c0/f30c70524ebde2d1012afe5ffa5691d5d00f7d5ba9e43d588f6460ac6fe96f9e620f2f9b36a02d0d3e7e77bc8efb8b3450ae3b80ac53c8be5099e01bf54f6728 + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:30.0.5": + version: 30.0.5 + resolution: "jest-resolve-dependencies@npm:30.0.5" + dependencies: + jest-regex-util: "npm:30.0.1" + jest-snapshot: "npm:30.0.5" + checksum: 10c0/7c72ef30d2e2e5c9564c53f55679184a4fe460f4d5c48eb5edc476000f17ee392341ae0c21b3ce9e531a1bff00924ebcda4fcd5b1406071c6a7b2b109fd3cf33 + languageName: node + linkType: hard + +"jest-resolve@npm:30.0.5": + version: 30.0.5 + resolution: "jest-resolve@npm:30.0.5" + dependencies: + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + jest-pnp-resolver: "npm:^1.2.3" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + slash: "npm:^3.0.0" + unrs-resolver: "npm:^1.7.11" + checksum: 10c0/6edea75db950131513cd642743d4c5dd36c209c94652e469eebc86fdf85eb579a7614c30262668fcd429e1c841f1d17a26831259db69c17dffd0718c37f69196 + languageName: node + linkType: hard + +"jest-runner@npm:30.0.5": + version: 30.0.5 + resolution: "jest-runner@npm:30.0.5" + dependencies: + "@jest/console": "npm:30.0.5" + "@jest/environment": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + emittery: "npm:^0.13.1" + exit-x: "npm:^0.2.2" + graceful-fs: "npm:^4.2.11" + jest-docblock: "npm:30.0.1" + jest-environment-node: "npm:30.0.5" + jest-haste-map: "npm:30.0.5" + jest-leak-detector: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-resolve: "npm:30.0.5" + jest-runtime: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-watcher: "npm:30.0.5" + jest-worker: "npm:30.0.5" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 10c0/5da84e4f393cc4b0c2b86a7058c154e524bc91947867f892d252300d06c595058690a61ffdbfa74381498f4ebb9cc7d8d967a62f53cb5f5383ec59fb5ed21d91 + languageName: node + linkType: hard + +"jest-runtime@npm:30.0.5": + version: 30.0.5 + resolution: "jest-runtime@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/fake-timers": "npm:30.0.5" + "@jest/globals": "npm:30.0.5" + "@jest/source-map": "npm:30.0.1" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + cjs-module-lexer: "npm:^2.1.0" + collect-v8-coverage: "npm:^1.0.2" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-mock: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + jest-util: "npm:30.0.5" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: 10c0/c1afa36da0582172e9a73d69fcc23fd433efc8a7d0328ba5fee45858dc85cb01410b47ba53540bb3758277eb84bb5a42e872bc58d2e5a3cad533f4b33e3abe61 + languageName: node + linkType: hard + +"jest-snapshot@npm:30.0.5": + version: 30.0.5 + resolution: "jest-snapshot@npm:30.0.5" + dependencies: + "@babel/core": "npm:^7.27.4" + "@babel/generator": "npm:^7.27.5" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + "@babel/types": "npm:^7.27.3" + "@jest/expect-utils": "npm:30.0.5" + "@jest/get-type": "npm:30.0.1" + "@jest/snapshot-utils": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + babel-preset-current-node-syntax: "npm:^1.1.0" + chalk: "npm:^4.1.2" + expect: "npm:30.0.5" + graceful-fs: "npm:^4.2.11" + jest-diff: "npm:30.0.5" + jest-matcher-utils: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-util: "npm:30.0.5" + pretty-format: "npm:30.0.5" + semver: "npm:^7.7.2" + synckit: "npm:^0.11.8" + checksum: 10c0/2bda246367373003abfbd66de261bfd355618926c28261d7ffcdfac0c4c7a7f575c9f598745b0b59eb2cfa8907889dcc07db3ad65d940061275d490c1eb3e1fe + languageName: node + linkType: hard + +"jest-util@npm:30.0.5": + version: 30.0.5 + resolution: "jest-util@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + graceful-fs: "npm:^4.2.11" + picomatch: "npm:^4.0.2" + checksum: 10c0/d3808b5f7720044d0464664c795e2b795ed82edf3b5871db74b8b603c3a0a38107668730348d26f92920ca3b8245a99cbbc2c93e77d0abb1f5e27524079a4ba8 + languageName: node + linkType: hard + +"jest-validate@npm:30.0.5": + version: 30.0.5 + resolution: "jest-validate@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + "@jest/types": "npm:30.0.5" + camelcase: "npm:^6.3.0" + chalk: "npm:^4.1.2" + leven: "npm:^3.1.0" + pretty-format: "npm:30.0.5" + checksum: 10c0/739a5df57befd763ba40693c9c1d7e93234af44ca21226a42272fbf87dea076a23848072b46871ce02cc0f2614f8ad41542e98965b405320276102b4de35b063 + languageName: node + linkType: hard + +"jest-watcher@npm:30.0.5": + version: 30.0.5 + resolution: "jest-watcher@npm:30.0.5" + dependencies: + "@jest/test-result": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + emittery: "npm:^0.13.1" + jest-util: "npm:30.0.5" + string-length: "npm:^4.0.2" + checksum: 10c0/5c26617c53e6314e2143806cbc8c1cdca7100cc8de3241c7debf7b5feb0df17bdc9a92ee4a4efa953a261d8806ffd7f6c89e72d567236e62492dd554eaa91f97 + languageName: node + linkType: hard + +"jest-worker@npm:30.0.5": + version: 30.0.5 + resolution: "jest-worker@npm:30.0.5" + dependencies: + "@types/node": "npm:*" + "@ungap/structured-clone": "npm:^1.3.0" + jest-util: "npm:30.0.5" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.1.1" + checksum: 10c0/50a724b39b8691168a456544f32ef8e937c827cd6d326fa0bc27df786c80af1e1f16d9f2d9cc800af4baac85a0f9e9ed78fbd4a06f13eb32e72ec66d11b85f38 + languageName: node + linkType: hard + +"jest@npm:^30.0.5": + version: 30.0.5 + resolution: "jest@npm:30.0.5" + dependencies: + "@jest/core": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + import-local: "npm:^3.2.0" + jest-cli: "npm:30.0.5" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: ./bin/jest.js + checksum: 10c0/eff3980ebe0257f1d5a0e94b0df27fc689563539138cc9220dadcb57543e30601cea6b79cbd68a5a5bcdc69501a8a670493495cf4b1d2076796697f8a7937d4c + languageName: node + linkType: hard + +"jose@npm:^2.0.5": + version: 2.0.7 + resolution: "jose@npm:2.0.7" + dependencies: + "@panva/asn1.js": "npm:^1.0.0" + checksum: 10c0/228406f4635debd05922fa565a85c42c086426c1af03c4db2ce247d84f240d3f5985efa9540e6c90c89bab56476b1d1a0be2199740d1f497a37b075bbe2307e8 + languageName: node + linkType: hard + +"jose@npm:^5.2.0": + version: 5.9.6 + resolution: "jose@npm:5.9.6" + checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d + languageName: node + linkType: hard + +"js-stringify@npm:^1.0.2": + version: 1.0.2 + resolution: "js-stringify@npm:1.0.2" + checksum: 10c0/a450c04fde3a7e1c27f1c3c4300433f8d79322f9e3c2e76266843cef8c0b5a69b5f11b5f173212b2f15f2df09e068ef7ddf46ef775e2486f3006a6f4e912578d + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 + languageName: node + linkType: hard + +"jsdoc-type-pratt-parser@npm:~4.0.0": + version: 4.0.0 + resolution: "jsdoc-type-pratt-parser@npm:4.0.0" + checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": + version: 3.0.2 + resolution: "json-parse-even-better-errors@npm:3.0.2" + checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 10c0/13673b67ba9e7fde75a103cade0b0d2dd0d21cd3b918de8d8f6cd59d48ad8c78b0e85f6f4a5842073ddfc91ebdde5ef7c81c7f51945b96a33eaddc5d41324b87 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f + languageName: node + linkType: hard + +"json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonc-parser@npm:3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 10c0/5a12d4d04dad381852476872a29dcee03a57439574e4181d91dca71904fcdcc5e8e4706c0a68a2c61ad9810e1e1c5806b5100d52d3e727b78f5cdc595401045b + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"jsonld-context-parser@npm:^2.0.0, jsonld-context-parser@npm:^2.1.2, jsonld-context-parser@npm:^2.1.3, jsonld-context-parser@npm:^2.4.0": + version: 2.4.0 + resolution: "jsonld-context-parser@npm:2.4.0" + dependencies: + "@types/http-link-header": "npm:^1.0.1" + "@types/node": "npm:^18.0.0" + cross-fetch: "npm:^3.0.6" + http-link-header: "npm:^1.0.2" + relative-to-absolute-iri: "npm:^1.0.5" + bin: + jsonld-context-parse: bin/jsonld-context-parse.js + checksum: 10c0/7d27257ac4a18698cf2750798d59f9fb956e13999c91536ceb0d5f2480b2b6b26c7966fe1f60a7d507d381a3bf460d209a3e3a23e2854c4821d010cf36718b21 + languageName: node + linkType: hard + +"jsonld-signatures@npm:^11.2.1, jsonld-signatures@npm:^11.3.0, jsonld-signatures@npm:^11.3.2": + version: 11.5.0 + resolution: "jsonld-signatures@npm:11.5.0" + dependencies: + "@digitalbazaar/security-context": "npm:^1.0.0" + jsonld: "npm:^8.0.0" + rdf-canonize: "npm:^4.0.1" + serialize-error: "npm:^8.1.0" + checksum: 10c0/a624ef4706c91064ba19dd3f1bb2a43f40cabd68f38e1c3e57fb0cea830b5ff4763364a00197313ccf704f571295803220d5c20d40df371562d84de98c5df9a0 + languageName: node + linkType: hard + +"jsonld-signatures@npm:^5.0.0": + version: 5.2.0 + resolution: "jsonld-signatures@npm:5.2.0" + dependencies: + base64url: "npm:^3.0.1" + crypto-ld: "npm:^3.7.0" + jsonld: "npm:^2.0.2" + node-forge: "npm:^0.10.0" + security-context: "npm:^4.0.0" + serialize-error: "npm:^5.0.0" + checksum: 10c0/c9966118b9ad0af8be9bed8b42cfa8fe67d57c7ef29b7dbf7b889902c5bc1f1c19527d724316666dca49a6a1e72b3b37e09be6ab77d3b74f8dd4c39b2ef8f61c + languageName: node + linkType: hard + +"jsonld-streaming-parser@npm:^2.4.0, jsonld-streaming-parser@npm:^2.4.2": + version: 2.4.3 + resolution: "jsonld-streaming-parser@npm:2.4.3" + dependencies: + "@rdfjs/types": "npm:*" + "@types/http-link-header": "npm:^1.0.1" + canonicalize: "npm:^1.0.1" + http-link-header: "npm:^1.0.2" + jsonld-context-parser: "npm:^2.1.3" + jsonparse: "npm:^1.3.1" + rdf-data-factory: "npm:^1.1.0" + checksum: 10c0/f678e3b6f80471b95400b4d89b7a456e1ff798ace41a5312597e9c2d20a61b17aada2dc20364c3192806eba6abd651cd5c377fae0b9417f45187179ff6af862c + languageName: node + linkType: hard + +"jsonld-streaming-serializer@npm:^1.2.0": + version: 1.3.0 + resolution: "jsonld-streaming-serializer@npm:1.3.0" + dependencies: + "@rdfjs/types": "npm:*" + jsonld-context-parser: "npm:^2.0.0" + checksum: 10c0/c0e692a3c579a49e18af60f5d70cffef4a7e1637090c129150742feb0719e88bdfa6d73a5f0a095dd5cba72b6057fca22c0f50644e5dc5cd62d1ddc7ed3051ae + languageName: node + linkType: hard + +"jsonld@npm:^2.0.2": + version: 2.0.2 + resolution: "jsonld@npm:2.0.2" + dependencies: + canonicalize: "npm:^1.0.1" + lru-cache: "npm:^5.1.1" + rdf-canonize: "npm:^1.0.2" + request: "npm:^2.88.0" + semver: "npm:^6.3.0" + xmldom: "npm:0.1.19" + checksum: 10c0/d5648d74aab4316b13acfb1dfe087443a0f8b7022b94732867d01a3fbd50f1ce0bec073412da883dfa760641a22e778304e27f098de7f23ea27c8503e188edf2 + languageName: node + linkType: hard + +"jsonld@npm:^3.3.2": + version: 3.3.2 + resolution: "jsonld@npm:3.3.2" + dependencies: + canonicalize: "npm:^1.0.1" + lru-cache: "npm:^5.1.1" + object.fromentries: "npm:^2.0.2" + rdf-canonize: "npm:^2.0.1" + request: "npm:^2.88.0" + semver: "npm:^6.3.0" + xmldom: "npm:0.1.19" + checksum: 10c0/f89f4e5170a49505d552525abe37c4257a72171ca41f4c6ec38f12c021d6e6e41a473c38edee0f4bbda2af6e58d900c998bf875a4194f1e2b27e90cb8e95ef7c + languageName: node + linkType: hard + +"jsonld@npm:^8.0.0, jsonld@npm:^8.1.0, jsonld@npm:^8.3.1": + version: 8.3.3 + resolution: "jsonld@npm:8.3.3" + dependencies: + "@digitalbazaar/http-client": "npm:^3.4.1" + canonicalize: "npm:^1.0.1" + lru-cache: "npm:^6.0.0" + rdf-canonize: "npm:^3.4.0" + checksum: 10c0/ca8c18f65a50c61deec2951533bf05b709fd8e937e2f0cb549683d7e9934df7649b6e2f6f99f0dafe7bf8dd6ae95a257306cdb37fb705ef5ee0a7439d85581c2 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 + languageName: node + linkType: hard + +"jsonwebtoken@npm:^9.0.2": + version: 9.0.2 + resolution: "jsonwebtoken@npm:9.0.2" + dependencies: + jws: "npm:^3.2.2" + lodash.includes: "npm:^4.3.0" + lodash.isboolean: "npm:^3.0.3" + lodash.isinteger: "npm:^4.0.4" + lodash.isnumber: "npm:^3.0.3" + lodash.isplainobject: "npm:^4.0.6" + lodash.isstring: "npm:^4.0.1" + lodash.once: "npm:^4.0.0" + ms: "npm:^2.1.1" + semver: "npm:^7.5.4" + checksum: 10c0/d287a29814895e866db2e5a0209ce730cbc158441a0e5a70d5e940eb0d28ab7498c6bf45029cc8b479639bca94056e9a7f254e2cdb92a2f5750c7f358657a131 + languageName: node + linkType: hard + +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af + languageName: node + linkType: hard + +"jsprim@npm:^2.0.2": + version: 2.0.2 + resolution: "jsprim@npm:2.0.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10c0/677be2d41df536c92c6d0114a492ef197084018cfbb1a3e10b1fa1aad889564b2e3a7baa6af7949cc2d73678f42368b0be165a26bd4e4de6883a30dd6a24e98d + languageName: node + linkType: hard + +"jstransformer@npm:1.0.0": + version: 1.0.0 + resolution: "jstransformer@npm:1.0.0" + dependencies: + is-promise: "npm:^2.0.0" + promise: "npm:^7.0.1" + checksum: 10c0/11f9b4f368a55878dd7973154cd83b0adca27f974d21217728652530775b2bec281e92109de66f0c9e37c76af796d5b76b33f3e38363214a83d102d523a7285b + languageName: node + linkType: hard + +"juice@npm:^4.1.0": + version: 4.3.2 + resolution: "juice@npm:4.3.2" + dependencies: + cheerio: "npm:^0.22.0" + commander: "npm:^2.15.1" + cross-spawn: "npm:^5.1.0" + deep-extend: "npm:^0.5.1" + mensch: "npm:^0.3.3" + slick: "npm:^1.12.2" + web-resource-inliner: "npm:^4.2.1" + bin: + juice: bin/juice + checksum: 10c0/5ab6cb687740fd52260daf3d8c4c01fbec02c4da805574ae2f9d2947a472d950137aae4a48092a56f9acf007de486af7cced60d9d9ec2cbfc4fbc6c19c081363 + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: 10c0/d7b85371f2a5a17a108467fda35dddd95264ab438ccec7837b67af5913c57ded7246039d1df2b5bc1ade034ccf815b56d69786c5f1e07383168a066007c796c0 + languageName: node + linkType: hard + +"just-diff@npm:^6.0.0": + version: 6.0.2 + resolution: "just-diff@npm:6.0.2" + checksum: 10c0/1931ca1f0cea4cc480172165c189a84889033ad7a60bee302268ba8ca9f222b43773fd5f272a23ee618d43d85d3048411f06b635571a198159e9a85bb2495f5c + languageName: node + linkType: hard + +"jwa@npm:^1.4.1": + version: 1.4.1 + resolution: "jwa@npm:1.4.1" + dependencies: + buffer-equal-constant-time: "npm:1.0.1" + ecdsa-sig-formatter: "npm:1.0.11" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 + languageName: node + linkType: hard + +"jws@npm:^3.2.2": + version: 3.2.2 + resolution: "jws@npm:3.2.2" + dependencies: + jwa: "npm:^1.4.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff + languageName: node + linkType: hard + +"keyv@npm:^4.0.0, keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"kleur@npm:^4.1.4, kleur@npm:^4.1.5": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a + languageName: node + linkType: hard + +"ky-universal@npm:^0.11.0": + version: 0.11.0 + resolution: "ky-universal@npm:0.11.0" + dependencies: + abort-controller: "npm:^3.0.0" + node-fetch: "npm:^3.2.10" + peerDependencies: + ky: ">=0.31.4" + web-streams-polyfill: ">=3.2.1" + peerDependenciesMeta: + web-streams-polyfill: + optional: true + checksum: 10c0/d71a1cae6d79c93808eda3b021eea91df064ac972f0391b45aa0913cdc48bdcad9c33452d68de021bd32c1b5abe15090229ae4a45fa28f7babb8e77e39ae1596 + languageName: node + linkType: hard + +"ky@npm:^0.33.3": + version: 0.33.3 + resolution: "ky@npm:0.33.3" + checksum: 10c0/5ba8de4c97c2abe5fb1b7d1b20252f95a7b249254af03cdfac670b9615de6b2b4af747bf363a1b918d2650c4cc83259578105f8eadd284f4e1c4261081e29640 + languageName: node + linkType: hard + +"lerna@npm:^8.0.1": + version: 8.1.9 + resolution: "lerna@npm:8.1.9" + dependencies: + "@lerna/create": "npm:8.1.9" + "@npmcli/arborist": "npm:7.5.4" + "@npmcli/package-json": "npm:5.2.0" + "@npmcli/run-script": "npm:8.1.0" + "@nx/devkit": "npm:>=17.1.2 < 21" + "@octokit/plugin-enterprise-rest": "npm:6.0.1" + "@octokit/rest": "npm:19.0.11" + aproba: "npm:2.0.0" + byte-size: "npm:8.1.1" + chalk: "npm:4.1.0" + clone-deep: "npm:4.0.1" + cmd-shim: "npm:6.0.3" + color-support: "npm:1.1.3" + columnify: "npm:1.6.0" + console-control-strings: "npm:^1.1.0" + conventional-changelog-angular: "npm:7.0.0" + conventional-changelog-core: "npm:5.0.1" + conventional-recommended-bump: "npm:7.0.1" + cosmiconfig: "npm:9.0.0" + dedent: "npm:1.5.3" + envinfo: "npm:7.13.0" + execa: "npm:5.0.0" + fs-extra: "npm:^11.2.0" + get-port: "npm:5.1.1" + get-stream: "npm:6.0.0" + git-url-parse: "npm:14.0.0" + glob-parent: "npm:6.0.2" + globby: "npm:11.1.0" + graceful-fs: "npm:4.2.11" + has-unicode: "npm:2.0.1" + import-local: "npm:3.1.0" + ini: "npm:^1.3.8" + init-package-json: "npm:6.0.3" + inquirer: "npm:^8.2.4" + is-ci: "npm:3.0.1" + is-stream: "npm:2.0.0" + jest-diff: "npm:>=29.4.3 < 30" + js-yaml: "npm:4.1.0" + libnpmaccess: "npm:8.0.6" + libnpmpublish: "npm:9.0.9" + load-json-file: "npm:6.2.0" + lodash: "npm:^4.17.21" + make-dir: "npm:4.0.0" + minimatch: "npm:3.0.5" + multimatch: "npm:5.0.0" + node-fetch: "npm:2.6.7" + npm-package-arg: "npm:11.0.2" + npm-packlist: "npm:8.0.2" + npm-registry-fetch: "npm:^17.1.0" + nx: "npm:>=17.1.2 < 21" + p-map: "npm:4.0.0" + p-map-series: "npm:2.1.0" + p-pipe: "npm:3.1.0" + p-queue: "npm:6.6.2" + p-reduce: "npm:2.1.0" + p-waterfall: "npm:2.1.1" + pacote: "npm:^18.0.6" + pify: "npm:5.0.0" + read-cmd-shim: "npm:4.0.0" + resolve-from: "npm:5.0.0" + rimraf: "npm:^4.4.1" + semver: "npm:^7.3.8" + set-blocking: "npm:^2.0.0" + signal-exit: "npm:3.0.7" + slash: "npm:3.0.0" + ssri: "npm:^10.0.6" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + strong-log-transformer: "npm:2.1.0" + tar: "npm:6.2.1" + temp-dir: "npm:1.0.0" + typescript: "npm:>=3 < 6" + upath: "npm:2.0.1" + uuid: "npm:^10.0.0" + validate-npm-package-license: "npm:3.0.4" + validate-npm-package-name: "npm:5.0.1" + wide-align: "npm:1.1.5" + write-file-atomic: "npm:5.0.1" + write-pkg: "npm:4.0.0" + yargs: "npm:17.7.2" + yargs-parser: "npm:21.1.1" + bin: + lerna: dist/cli.js + checksum: 10c0/e3362d66324f5ee9606dbdb332a6b09eeb2df6378177e36a1bbcf532927d921beb4d25dbcc717c4adf3a7dcd67e0bcee67bedf81fdbe7e78bbecce310358d762 + languageName: node + linkType: hard + +"leven@npm:2.1.0": + version: 2.1.0 + resolution: "leven@npm:2.1.0" + checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"libnpmaccess@npm:8.0.6": + version: 8.0.6 + resolution: "libnpmaccess@npm:8.0.6" + dependencies: + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + checksum: 10c0/0b63c7cb44e024b0225dae8ebfe5166a0be8a9420c1b5fb6a4f1c795e9eabbed0fff5984ab57167c5634145de018008cbeeb27fe6f808f611ba5ba1b849ec3d6 + languageName: node + linkType: hard + +"libnpmpublish@npm:9.0.9": + version: 9.0.9 + resolution: "libnpmpublish@npm:9.0.9" + dependencies: + ci-info: "npm:^4.0.0" + normalize-package-data: "npm:^6.0.1" + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + proc-log: "npm:^4.2.0" + semver: "npm:^7.3.7" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.6" + checksum: 10c0/5e4bae455d33fb7402b8b8fcc505d89a1d60ff4b7dc47dd9ba318426c00400e1892fd0435d8db6baab808f64d7f226cbf8d53792244ffad1df7fc2f94f3237fc + languageName: node + linkType: hard + +"lie@npm:3.1.1": + version: 3.1.1 + resolution: "lie@npm:3.1.1" + dependencies: + immediate: "npm:~3.0.5" + checksum: 10c0/d62685786590351b8e407814acdd89efe1cb136f05cb9236c5a97b2efdca1f631d2997310ad2d565c753db7596799870140e4777c9c9b8c44a0f6bf42d1804a1 + languageName: node + linkType: hard + +"lines-and-columns@npm:2.0.3": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 10c0/09525c10010a925b7efe858f1dd3184eeac34f0a9bc34993075ec490efad71e948147746b18e9540279cc87cd44085b038f986903db3de65ffe96d38a7b91c4c + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"lines-and-columns@npm:~2.0.3": + version: 2.0.4 + resolution: "lines-and-columns@npm:2.0.4" + checksum: 10c0/4db28bf065cd7ad897c0700f22d3d0d7c5ed6777e138861c601c496d545340df3fc19e18bd04ff8d95a246a245eb55685b82ca2f8c2ca53a008e9c5316250379 + languageName: node + linkType: hard + +"load-json-file@npm:6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.15" + parse-json: "npm:^5.0.0" + strip-bom: "npm:^4.0.0" + type-fest: "npm:^0.6.0" + checksum: 10c0/fcb46ef75bab917f37170ba76781a1690bf67144bb53931cb0ed8e4aa20ca439e9c354fcf3594aed531f47dbeb4a49800acab7fdffd553c402ac40c987706d7b + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 + languageName: node + linkType: hard + +"localforage@npm:^1.9.0": + version: 1.10.0 + resolution: "localforage@npm:1.10.0" + dependencies: + lie: "npm:3.1.1" + checksum: 10c0/00f19f1f97002e6721587ed5017f502d58faf80dae567d5065d4d1ee0caf0762f40d2e2dba7f0ef7d3f14ee6203242daae9ecad97359bfc10ecff36df11d85a3 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: "npm:^2.0.0" + path-exists: "npm:^3.0.0" + checksum: 10c0/24efa0e589be6aa3c469b502f795126b26ab97afa378846cb508174211515633b770aa0ba610cab113caedab8d2a4902b061a08aaed5297c12ab6f5be4df0133 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.assignin@npm:^4.0.9": + version: 4.2.0 + resolution: "lodash.assignin@npm:4.2.0" + checksum: 10c0/40ac405acf5d6daf27fd40b50c99f823641a9ceba6bd282b18cb9989149204af584b5671f336587c2a263e367c3a2d1105cbf7bdc5ea33cbd0f829b02b16578a + languageName: node + linkType: hard + +"lodash.bind@npm:^4.1.4": + version: 4.2.1 + resolution: "lodash.bind@npm:4.2.1" + checksum: 10c0/e47ae564101c43940fab7f102dd9fb056ae6cc534a3b7bfbaecdf7216dac904ad762150e66a80d1bd5430da7eed4df90ba93996bb24030fad096b698d2ae15af + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + +"lodash.defaults@npm:^4.0.1, lodash.defaults@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.defaults@npm:4.2.0" + checksum: 10c0/d5b77aeb702caa69b17be1358faece33a84497bcca814897383c58b28a2f8dfc381b1d9edbec239f8b425126a3bbe4916223da2a576bb0411c2cefd67df80707 + languageName: node + linkType: hard + +"lodash.filter@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.filter@npm:4.6.0" + checksum: 10c0/bb65002f3ee02b94400b9d8728a46d3ac9fc3eb7df387b3c642f36eff82d716714283ca674889a29edae3c28ea8a4048e6c7bb90598670ab9c97b5d125bffda2 + languageName: node + linkType: hard + +"lodash.flatten@npm:^4.2.0, lodash.flatten@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.flatten@npm:4.4.0" + checksum: 10c0/97e8f0d6b61fe4723c02ad0c6e67e51784c4a2c48f56ef283483e556ad01594cf9cec9c773e177bbbdbdb5d19e99b09d2487cb6b6e5dc405c2693e93b125bd3a + languageName: node + linkType: hard + +"lodash.foreach@npm:^4.3.0": + version: 4.5.0 + resolution: "lodash.foreach@npm:4.5.0" + checksum: 10c0/bd9cc83e87e805b21058ce6cf718dd22db137c7ca08eddbd608549db59989911c571b7195707f615cb37f27bb4f9a9fa9980778940d768c24095f5a04b244c84 + languageName: node + linkType: hard + +"lodash.includes@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.includes@npm:4.3.0" + checksum: 10c0/7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b + languageName: node + linkType: hard + +"lodash.isarguments@npm:^3.1.0": + version: 3.1.0 + resolution: "lodash.isarguments@npm:3.1.0" + checksum: 10c0/5e8f95ba10975900a3920fb039a3f89a5a79359a1b5565e4e5b4310ed6ebe64011e31d402e34f577eca983a1fc01ff86c926e3cbe602e1ddfc858fdd353e62d8 + languageName: node + linkType: hard + +"lodash.isboolean@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isboolean@npm:3.0.3" + checksum: 10c0/0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7 + languageName: node + linkType: hard + +"lodash.isinteger@npm:^4.0.4": + version: 4.0.4 + resolution: "lodash.isinteger@npm:4.0.4" + checksum: 10c0/4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7 + languageName: node + linkType: hard + +"lodash.ismatch@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.ismatch@npm:4.4.0" + checksum: 10c0/8f96a5dc4b8d3fc5a033dcb259d0c3148a1044fa4d02b4a0e8dce0fa1f2ef3ec4ac131e20b5cb2c985a4e9bcb1c37c0aa5af2cef70094959389617347b8fc645 + languageName: node + linkType: hard + +"lodash.isnumber@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isnumber@npm:3.0.3" + checksum: 10c0/2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 10c0/afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 + languageName: node + linkType: hard + +"lodash.map@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.map@npm:4.6.0" + checksum: 10c0/919fe767fa58d3f8369ddd84346636eda71c88a8ef6bde1ca0d87dd37e71614da2ed8bcfc3018ca5b7741ebaf7c01c2d7078b510dca8ab6a0d0ecafd3dc1abcb + languageName: node + linkType: hard + +"lodash.merge@npm:^4.4.0, lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"lodash.once@npm:^4.0.0": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 + languageName: node + linkType: hard + +"lodash.pick@npm:^4.2.1": + version: 4.4.0 + resolution: "lodash.pick@npm:4.4.0" + checksum: 10c0/a04c460b95d1aaa44e9513d1dacf72ea74d838da843e45831de9de64c303f13cdde1859702a6f4dcef417816898ffd47c6ae0614c957ac70245bed2809b8d2e2 + languageName: node + linkType: hard + +"lodash.reduce@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.reduce@npm:4.6.0" + checksum: 10c0/5d2dab823523a1a7f81eb5f4c1edcc03aab55504b1299a2385737389644ba6d2ad219169dfc5c16632a67a345d925ef6a5e8816b4e18a36f94ed66f8e7740b36 + languageName: node + linkType: hard + +"lodash.reject@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.reject@npm:4.6.0" + checksum: 10c0/653b5beb1641aeac8bd734775ef6517706897c49197dbe548788558c243434a89dd94b971866b04a0a1df411534db85e96ab7daeb8accf53650119a78de7355f + languageName: node + linkType: hard + +"lodash.some@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.some@npm:4.6.0" + checksum: 10c0/9d3cdb1c8a2ed3d19b02ce146d4962a7859016f752b40fc143d78d3e70985259d6bea71c2c31b8e78f492830f49d755f1be2cdbf85461c54a523089e0c8c0e75 + languageName: node + linkType: hard + +"lodash.unescape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.unescape@npm:4.0.1" + checksum: 10c0/b050d4e71a1459a397e615833ea296dd679e851ae13f7b2c91d6c2a5cd9a07e9a5be070a1cac3e27ee1c0dd0433d13bc8d3eda426c205cb5c2704a7c077f062a + languageName: node + linkType: hard + +"lodash@npm:^3.2.0": + version: 3.10.1 + resolution: "lodash@npm:3.10.1" + checksum: 10c0/f5f6d3d87503c3f1db27d49b30a00bb38dc1bd9de716c5febe8970259cc7b447149a0e320452ccaf5996a7a4abd63d94df341bb91bd8d336584ad518d8eab144 + languageName: node + linkType: hard + +"lodash@npm:^4.0.1, lodash@npm:^4.17.15, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 + languageName: node + linkType: hard + +"long-timeout@npm:0.1.1": + version: 0.1.1 + resolution: "long-timeout@npm:0.1.1" + checksum: 10c0/a62240cc8f449d7a00081e817ae543fb1ded4d9fc05492e9fa8d6868cb33b2c9d5d71176a6f8be4473df7ba4b208460b3073b0e05069c3ec286122f3e4b5747f + languageName: node + linkType: hard + +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 10c0/f82a2b3568910509da4b7906362efa40f5b54ea14c2584778ddb313226f9cbf21020a5db35f9b9a0e95847a9b781d548601f31793d736b22a2b8ae8eb9ab1082 + languageName: node + linkType: hard + +"lru-cache@npm:10.1.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 10c0/778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^4.0.1": + version: 4.1.5 + resolution: "lru-cache@npm:4.1.5" + dependencies: + pseudomap: "npm:^1.0.2" + yallist: "npm:^2.1.2" + checksum: 10c0/1ca5306814e5add9ec63556d6fd9b24a4ecdeaef8e9cea52cbf30301e6b88c8d8ddc7cab45b59b56eb763e6c45af911585dc89925a074ab65e1502e3fe8103cf + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"luxon@npm:^1.23.x": + version: 1.28.1 + resolution: "luxon@npm:1.28.1" + checksum: 10c0/5c561ce4364bb2301ca5811c74d11a9e087f82164109c7997dc8f0959e64d51259d8e630914dca2edc6702525ce5ab066a4b85caa19d04be71f10e79ffe2bc84 + languageName: node + linkType: hard + +"luxon@npm:^3.2.1": + version: 3.5.0 + resolution: "luxon@npm:3.5.0" + checksum: 10c0/335789bba95077db831ef99894edadeb23023b3eb2137a1b56acd0d290082b691cf793143d69e30bc069ec95f0b49f36419f48e951c68014f19ffe12045e3494 + languageName: node + linkType: hard + +"luxon@npm:~3.6.0": + version: 3.6.1 + resolution: "luxon@npm:3.6.1" + checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5 + languageName: node + linkType: hard + +"make-dir@npm:4.0.0, make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: "npm:^4.0.1" + semver: "npm:^5.6.0" + checksum: 10c0/ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 + languageName: node + linkType: hard + +"make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-error@npm:^1.3.6": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: "npm:1.0.5" + checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 10c0/ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: 10c0/1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 + languageName: node + linkType: hard + +"memory-streams@npm:^0.1.3": + version: 0.1.3 + resolution: "memory-streams@npm:0.1.3" + dependencies: + readable-stream: "npm:~1.0.2" + checksum: 10c0/05d1ceff6b420e580ea7b1d8454e42118b06696cbe70c2d5ffc5e0b7df72a4a2152fa4e18216da10d8d5abbd2b2b409b354a8bb6489b30ae854c0dd998c84406 + languageName: node + linkType: hard + +"mensch@npm:^0.3.3": + version: 0.3.4 + resolution: "mensch@npm:0.3.4" + checksum: 10c0/177f9c1cb1acd93da98a971288a5da99f819ac06de19ca450040b18ddf8728c7ae0ce22309fadbbfd4ceb773bc5c03bf1cb93ceb91441da9e76e010d314da2ea + languageName: node + linkType: hard + +"meow@npm:^8.1.2": + version: 8.1.2 + resolution: "meow@npm:8.1.2" + dependencies: + "@types/minimist": "npm:^1.2.0" + camelcase-keys: "npm:^6.2.2" + decamelize-keys: "npm:^1.1.0" + hard-rejection: "npm:^2.1.0" + minimist-options: "npm:4.1.0" + normalize-package-data: "npm:^3.0.0" + read-pkg-up: "npm:^7.0.1" + redent: "npm:^3.0.0" + trim-newlines: "npm:^3.0.0" + type-fest: "npm:^0.18.0" + yargs-parser: "npm:^20.2.3" + checksum: 10c0/9a8d90e616f783650728a90f4ea1e5f763c1c5260369e6596b52430f877f4af8ecbaa8c9d952c93bbefd6d5bda4caed6a96a20ba7d27b511d2971909b01922a2 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"methods@npm:^1.1.1, methods@npm:^1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 + languageName: node + linkType: hard + +"microdata-rdf-streaming-parser@npm:^1.2.0": + version: 1.2.0 + resolution: "microdata-rdf-streaming-parser@npm:1.2.0" + dependencies: + "@rdfjs/types": "npm:*" + htmlparser2: "npm:^6.0.0" + rdf-data-factory: "npm:^1.1.0" + relative-to-absolute-iri: "npm:^1.0.2" + checksum: 10c0/fc54e45b78d9186061b6bcb915e1e2ae5796ee92e8aaeee9e548012f37487c618361e7e96f95cd8958a2bfab22dde51ddec290366b1c6b6069b94a9aa0a01f73 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime@npm:1.6.0, mime@npm:^1.4.1": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mimer@npm:^1.0.0": + version: 1.1.1 + resolution: "mimer@npm:1.1.1" + bin: + mimer: bin/mimer + checksum: 10c0/e832bd0d45fc2ce76b0de70f9fb8ca5c59f74b987a19d9d417a43175a67646a80846e825956cc8fdb05eae7651496b9c344fb09f5c5f52f9e4786b8291ae528c + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"mimic-response@npm:^1.0.0": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 10c0/c5381a5eae997f1c3b5e90ca7f209ed58c3615caeee850e85329c598f0c000ae7bec40196580eef1781c60c709f47258131dab237cad8786f8f56750594f27fa + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:3.0.5": + version: 3.0.5 + resolution: "minimatch@npm:3.0.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/f398652d0d260137c289c270a4ac98ebe0a27cd316fa0fac72b096e96cbdc89f71d80d47ac7065c716ba3b0b730783b19180bd85a35f9247535d2adfe96bba76 + languageName: node + linkType: hard + +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/a0a394c356dd5b4cb7f821720841a82fa6f07c9c562c5b716909d1b6ec5e56a7e4c4b5029da26dd256b7d2b3a3f38cbf9ddd8680e887b9b5282b09c05501c1ca + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: "npm:^1.0.1" + is-plain-obj: "npm:^1.1.0" + kind-of: "npm:^6.0.3" + checksum: 10c0/7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minimist@npm:~0.0.1": + version: 0.0.10 + resolution: "minimist@npm:0.0.10" + checksum: 10c0/c505a020144b6e49f2b1c7d1e378f3692b7102e989b4a49338fc171eb4229ddddb430e779ff803dcb11854050e3fe3c2298962a7d73c20df7c2044c92b2ba1da + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 10c0/4ea76b030d97079f4429d6e8a8affd90baf1b6a1898977c8ccce4701c5a2ba2792e033abc6709373f25c2c4d4d95440d9d5e9464b46b7b76ca44d2ce26d939ce + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"modify-values@npm:^1.0.1": + version: 1.0.1 + resolution: "modify-values@npm:1.0.1" + checksum: 10c0/6acb1b82aaf7a02f9f7b554b20cbfc159f223a79c66b0a257511c5933d50b85e12ea1220b0a90a2af6f80bc29ff784f929a52a51881867a93ae6a12ce87a729a + languageName: node + linkType: hard + +"moleculer-bull@npm:^0.2.5": + version: 0.2.8 + resolution: "moleculer-bull@npm:0.2.8" + dependencies: + bull: "npm:^3.15.0" + lodash: "npm:^4.17.15" + peerDependencies: + moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 + checksum: 10c0/744170d331eb3ddefb34d86e3e5fba02942ed9223a3a2b7c4e7ee893eb49d89c479374dfc77a6d8803a805469856cd00fcb03f63ee718e97ab318d1329eedcef + languageName: node + linkType: hard + +"moleculer-db@npm:^0.8.15, moleculer-db@npm:^0.8.16": + version: 0.8.26 + resolution: "moleculer-db@npm:0.8.26" + dependencies: + "@seald-io/nedb": "npm:^3.0.0" + bluebird: "npm:^3.7.2" + flat: "npm:^5.0.2" + lodash: "npm:^4.17.21" + peerDependencies: + moleculer: ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 + checksum: 10c0/e4797651ecc59e1aa7855ab536fc0be3e6090c6b2f37c94dda37cb397fb8ef750f2325d565b85b55d926db789b05a011a13e0b885cbe9ce81b658fca99e78ef4 + languageName: node + linkType: hard + +"moleculer-mail@npm:^1.2.5": + version: 1.2.6 + resolution: "moleculer-mail@npm:1.2.6" + dependencies: + bluebird: "npm:^3.7.2" + email-templates: "npm:^2.7.1" + lodash: "npm:^4.17.21" + nodemailer: "npm:^4.6.7" + nodemailer-html-to-text: "npm:^2.1.0" + peerDependencies: + moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 + checksum: 10c0/3a8d8af4a7471e2e618470731b989f1c5c33fb4c944c72d7410a63582bcc48bb035c85f31cd62ab552b191043cac049ca972f2088c1c2f42e91f0db0ba8ea79b + languageName: node + linkType: hard + +"moleculer-schedule@npm:^0.2.3": + version: 0.2.3 + resolution: "moleculer-schedule@npm:0.2.3" + dependencies: + lodash: "npm:^4.17.21" + node-schedule: "npm:^2.0.0" + peerDependencies: + moleculer: ^0.14.13 + checksum: 10c0/63e3ae5c5cf4631a09358742c14941ad2ffa7051c552f52bbe0128e8dacd7bf3ce9688a434d94f39d63141d80b15828942e81c2cf0f9c4c4652791ecc469f4fb + languageName: node + linkType: hard + +"moleculer-web@npm:^0.10.0-beta1, moleculer-web@npm:^0.10.7": + version: 0.10.7 + resolution: "moleculer-web@npm:0.10.7" + dependencies: + "@fastify/busboy": "npm:^1.0.0" + body-parser: "npm:^1.19.0" + es6-error: "npm:^4.1.1" + etag: "npm:^1.8.1" + fresh: "npm:^0.5.2" + isstream: "npm:^0.1.2" + kleur: "npm:^4.1.4" + lodash: "npm:^4.17.21" + path-to-regexp: "npm:^3.1.0" + qs: "npm:^6.11.0" + serve-static: "npm:^1.14.1" + peerDependencies: + moleculer: ^0.13.0 || ^0.14.0 + checksum: 10c0/af4964522fcdac7d88d61f7e810fbd7fe4500b6d6c7882c0cf8f7a4b28ac4402a32136a7b0635d1d3ceac5a4abd9648056048c5516d9a7be234541c13076024b + languageName: node + linkType: hard + +"moleculer@npm:0.14.35": + version: 0.14.35 + resolution: "moleculer@npm:0.14.35" + dependencies: + args: "npm:^5.0.3" + eventemitter2: "npm:^6.4.9" + fastest-validator: "npm:^1.19.0" + glob: "npm:^7.2.0" + ipaddr.js: "npm:^2.2.0" + kleur: "npm:^4.1.5" + lodash: "npm:^4.17.21" + lru-cache: "npm:^6.0.0" + node-fetch: "npm:^2.6.7" + recursive-watch: "npm:^1.1.4" + peerDependencies: + amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 + avsc: ^5.0.0 + bunyan: ^1.0.0 + cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 + dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 + debug: ^4.0.0 + etcd3: ^1.0.0 + ioredis: ^4.0.0 || ^5.0.0 + jaeger-client: ^3.0.0 + kafka-node: ^5.0.0 + log4js: ^6.0.0 + mqtt: ^4.0.0 || ^5.0.0 + msgpack5: ^5.0.0 || ^6.0.0 + nats: ^1.0.0 || ^2.0.0 + node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 + notepack.io: ^2.0.0 || ^3.0.0 + pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + protobufjs: ^6.0.0 || ^7.0.0 + redlock: ^4.0.0 + rhea-promise: ^1.0.0 || ^2.0.0 + thrift: ^0.12.0 || ^0.16.0 + winston: ^3.0.0 + peerDependenciesMeta: + amqplib: + optional: true + avsc: + optional: true + bunyan: + optional: true + cbor-x: + optional: true + dd-trace: + optional: true + debug: + optional: true + etcd3: + optional: true + ioredis: + optional: true + jaeger-client: + optional: true + kafka-node: + optional: true + log4js: + optional: true + mqtt: + optional: true + msgpack5: + optional: true + nats: + optional: true + node-nats-streaming: + optional: true + notepack.io: + optional: true + pino: + optional: true + protobufjs: + optional: true + redlock: + optional: true + rhea-promise: + optional: true + thrift: + optional: true + winston: + optional: true + bin: + moleculer-runner: bin/moleculer-runner.js + moleculer-runner-esm: bin/moleculer-runner.mjs + checksum: 10c0/471cfd38994bf3e08abc39342413bb79ad5aab518b0fbc1329b74f3c6fb9ecff0826323e7030dfbd7ae20c5f94d3743bdaebbfe6eeb4a9faa8b02d0b7e990b29 + languageName: node + linkType: hard + +"moleculer@patch:moleculer@npm%3A0.14.35#~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch::version=0.14.35&hash=b9970b": + version: 0.14.35 + resolution: "moleculer@patch:moleculer@npm%3A0.14.35#~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch::version=0.14.35&hash=b9970b" + dependencies: + args: "npm:^5.0.3" + eventemitter2: "npm:^6.4.9" + fastest-validator: "npm:^1.19.0" + glob: "npm:^7.2.0" + ipaddr.js: "npm:^2.2.0" + kleur: "npm:^4.1.5" + lodash: "npm:^4.17.21" + lru-cache: "npm:^6.0.0" + node-fetch: "npm:^2.6.7" + recursive-watch: "npm:^1.1.4" + peerDependencies: + amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 + avsc: ^5.0.0 + bunyan: ^1.0.0 + cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 + dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 + debug: ^4.0.0 + etcd3: ^1.0.0 + ioredis: ^4.0.0 || ^5.0.0 + jaeger-client: ^3.0.0 + kafka-node: ^5.0.0 + log4js: ^6.0.0 + mqtt: ^4.0.0 || ^5.0.0 + msgpack5: ^5.0.0 || ^6.0.0 + nats: ^1.0.0 || ^2.0.0 + node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 + notepack.io: ^2.0.0 || ^3.0.0 + pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + protobufjs: ^6.0.0 || ^7.0.0 + redlock: ^4.0.0 + rhea-promise: ^1.0.0 || ^2.0.0 + thrift: ^0.12.0 || ^0.16.0 + winston: ^3.0.0 + peerDependenciesMeta: + amqplib: + optional: true + avsc: + optional: true + bunyan: + optional: true + cbor-x: + optional: true + dd-trace: + optional: true + debug: + optional: true + etcd3: + optional: true + ioredis: + optional: true + jaeger-client: + optional: true + kafka-node: + optional: true + log4js: + optional: true + mqtt: + optional: true + msgpack5: + optional: true + nats: + optional: true + node-nats-streaming: + optional: true + notepack.io: + optional: true + pino: + optional: true + protobufjs: + optional: true + redlock: + optional: true + rhea-promise: + optional: true + thrift: + optional: true + winston: + optional: true + bin: + moleculer-runner: bin/moleculer-runner.js + moleculer-runner-esm: bin/moleculer-runner.mjs + checksum: 10c0/595cab387e422fbdac8cedff29f44422f923309cca68e36c31acd489143f051105a8239d5e9e3117e8fe823e8b03a80ab0e70e9331e62836735f3b1c24c9b0b1 + languageName: node + linkType: hard + +"moleculer@patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch": + version: 0.14.35 + resolution: "moleculer@patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch::version=0.14.35&hash=11399c" + dependencies: + args: "npm:^5.0.3" + eventemitter2: "npm:^6.4.9" + fastest-validator: "npm:^1.19.0" + glob: "npm:^7.2.0" + ipaddr.js: "npm:^2.2.0" + kleur: "npm:^4.1.5" + lodash: "npm:^4.17.21" + lru-cache: "npm:^6.0.0" + node-fetch: "npm:^2.6.7" + recursive-watch: "npm:^1.1.4" + peerDependencies: + amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 + avsc: ^5.0.0 + bunyan: ^1.0.0 + cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 + dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 + debug: ^4.0.0 + etcd3: ^1.0.0 + ioredis: ^4.0.0 || ^5.0.0 + jaeger-client: ^3.0.0 + kafka-node: ^5.0.0 + log4js: ^6.0.0 + mqtt: ^4.0.0 || ^5.0.0 + msgpack5: ^5.0.0 || ^6.0.0 + nats: ^1.0.0 || ^2.0.0 + node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 + notepack.io: ^2.0.0 || ^3.0.0 + pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + protobufjs: ^6.0.0 || ^7.0.0 + redlock: ^4.0.0 + rhea-promise: ^1.0.0 || ^2.0.0 + thrift: ^0.12.0 || ^0.16.0 + winston: ^3.0.0 + peerDependenciesMeta: + amqplib: + optional: true + avsc: + optional: true + bunyan: + optional: true + cbor-x: + optional: true + dd-trace: + optional: true + debug: + optional: true + etcd3: + optional: true + ioredis: + optional: true + jaeger-client: + optional: true + kafka-node: + optional: true + log4js: + optional: true + mqtt: + optional: true + msgpack5: + optional: true + nats: + optional: true + node-nats-streaming: + optional: true + notepack.io: + optional: true + pino: + optional: true + protobufjs: + optional: true + redlock: + optional: true + rhea-promise: + optional: true + thrift: + optional: true + winston: + optional: true + bin: + moleculer-runner: bin/moleculer-runner.js + moleculer-runner-esm: bin/moleculer-runner.mjs + checksum: 10c0/8d454a19168bb6e0a86c362d8b462742070e315572c7e50cbbd3e33b4ddf5423b74d90d489ca7ae057a6ed244bed450f7dc52368fa8245a51a0b06630dfccaa8 + languageName: node + linkType: hard + +"moment-timezone@npm:^0.5.31": + version: 0.5.46 + resolution: "moment-timezone@npm:0.5.46" + dependencies: + moment: "npm:^2.29.4" + checksum: 10c0/003fd278d1aa3e63afff340a318735db80157b7a343e3f807cac10e026def214f0e71b52d582b89a11ee0a19f5d9f0da2752b7959d855429f2b715d4859d3722 + languageName: node + linkType: hard + +"moment@npm:2.30.1, moment@npm:^2.29.4": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a + languageName: node + linkType: hard + +"mri@npm:1.1.4": + version: 1.1.4 + resolution: "mri@npm:1.1.4" + checksum: 10c0/eb577c2ef60385aa287afdac777e536996f4fd3144250c201097e7ec121568139d482c92cb9a512f90e428d6dc3e9ba8e9de89bc204424cb96f187a4bdc465c1 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"multimatch@npm:5.0.0": + version: 5.0.0 + resolution: "multimatch@npm:5.0.0" + dependencies: + "@types/minimatch": "npm:^3.0.3" + array-differ: "npm:^3.0.0" + array-union: "npm:^2.1.0" + arrify: "npm:^2.0.1" + minimatch: "npm:^3.0.4" + checksum: 10c0/252ffae6d19491c169c22fc30cf8a99f6031f94a3495f187d3430b06200e9f05a7efae90ab9d834f090834e0d9c979ab55e7ad21f61a37995d807b4b0ccdcbd1 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: 10c0/18d06d92e5d6d45e2b63c0e1b8f25376af71748ac36f53c059baa8b76ffac31c5ab225480494e7d35d30215ecdb18fed26ec23cafcd2f7733f2f14406bcd19e2 + languageName: node + linkType: hard + +"mute-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c + languageName: node + linkType: hard + +"n3@npm:^1.26.0": + version: 1.26.0 + resolution: "n3@npm:1.26.0" + dependencies: + buffer: "npm:^6.0.3" + readable-stream: "npm:^4.0.0" + checksum: 10c0/e8a399f9295ccbd4008113bebdbdb15e5ef824e2d396a94d70cc7c1a94261a72869622bd1d78b3e94ea48056d5cd1b42e3b6d8acd1e0261f387e94ac6403013d + languageName: node + linkType: hard + +"n3@npm:^1.6.3, n3@npm:^1.8.0": + version: 1.23.1 + resolution: "n3@npm:1.23.1" + dependencies: + buffer: "npm:^6.0.3" + queue-microtask: "npm:^1.1.2" + readable-stream: "npm:^4.0.0" + checksum: 10c0/9f7f179b3f358f37c284dc65907f4f12b079657d5eaea0ed4e0f1dc248e54caf68e3c62439c6a1d3d1b3eec06edb18e20aa7d12da494b49ff112f5dd72b0d414 + languageName: node + linkType: hard + +"nan@npm:^2.19.0, nan@npm:^2.20.0": + version: 2.22.0 + resolution: "nan@npm:2.22.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/d5d31aefdb218deba308d44867c5f432b4d3aabeb57c70a2b236d62652e9fee7044e5d5afd380d9fef022fe7ebb2f2d6c85ca3cbcac5031aaca3592c844526bb + languageName: node + linkType: hard + +"nanoid@npm:^3.3.8": + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"napi-postinstall@npm:^0.3.0": + version: 0.3.2 + resolution: "napi-postinstall@npm:0.3.2" + bin: + napi-postinstall: lib/cli.js + checksum: 10c0/77c67eb9871d24afe7bad30e6115c441d099d6a0e42dc1c49c4a722ff682425e08dc6dd2b03eca10db9b547e724c38fb51325c35039e7ac10dcb714bb88d7326 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.73.0 + resolution: "node-abi@npm:3.73.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/4cd237f2507f80048310f381198a07387b11cbaab7dfac61ccc40cdc83f2296c647df02b5ddfead9f40b845c696f0ce75fdaa01973d3f3f0686151e4f96d2c8c + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/fcae80f5ac52fbf5012f5e19df2bd3915e67d3b3ad51cb5942943df2238d32ba15890fecabd0e166876a9f98a581ab50f3f10eb942b09405c49ef8da36b826c7 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-fetch@npm:^3.2.10": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 + languageName: node + linkType: hard + +"node-forge@npm:^0.10.0, node-forge@npm:~0.10.0": + version: 0.10.0 + resolution: "node-forge@npm:0.10.0" + checksum: 10c0/9cbf9ac8fc3889a5a46b0248f7238ee4014770bf31d22e04c0c7f04ed91c8be4584c5f534cdf6037e99f236c636c925cba960501ed2b850e077512e152760663 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + +"node-gyp@npm:^10.0.0": + version: 10.3.1 + resolution: "node-gyp@npm:10.3.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/87c3b50e1f6f5256b5d2879a8c064eefa53ed444bad2a20870be43bc189db7cbffe22c30af056046c6d904181d73881b1726fd391d2f6f79f89b991019f195ea + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.3.0 + resolution: "node-gyp@npm:11.3.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/5f4ad5a729386f7b50096efd4934b06c071dbfbc7d7d541a66d6959a7dccd62f53ff3dc95fffb60bf99d8da1270e23769f82246fcaa6c5645a70c967ae9a3398 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a + languageName: node + linkType: hard + +"node-machine-id@npm:1.1.12": + version: 1.1.12 + resolution: "node-machine-id@npm:1.1.12" + checksum: 10c0/ab2fea5f75a6f1ce3c76c5e0ae3903b631230e0a99b003d176568fff8ddbdf7b2943be96cd8d220c497ca0f6149411831f8a450601929f326781cb1b59bab7f8 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa + languageName: node + linkType: hard + +"node-schedule@npm:^2.0.0": + version: 2.1.1 + resolution: "node-schedule@npm:2.1.1" + dependencies: + cron-parser: "npm:^4.2.0" + long-timeout: "npm:0.1.1" + sorted-array-functions: "npm:^1.3.0" + checksum: 10c0/6ec51b34b9e676740ac25298e4ced5ee46053379f0d3aad533e51d7e083bc24ced045df1772a95bf9d9cfdb81299340bbf551549a7c5eb6e4d2dc6468c85c70e + languageName: node + linkType: hard + +"nodemailer-html-to-text@npm:^2.1.0": + version: 2.1.0 + resolution: "nodemailer-html-to-text@npm:2.1.0" + dependencies: + html-to-text: "npm:^2.1.0" + checksum: 10c0/068d6aa086a46f7d137775b87dfa1177916f352a1c0c3d1b7959e8591fc98fabcaa5e1bec32ff71c536a01fd51914dfc93f2112a0ee27a3dbaf6ab31d2ebe88c + languageName: node + linkType: hard + +"nodemailer@npm:^4.6.7": + version: 4.7.0 + resolution: "nodemailer@npm:4.7.0" + checksum: 10c0/62a330b88f0982c1474adb92b909ad33620ff194c24977e43118b71ed7f9ff17b54a34f8e5db805001925f01f6c0b5356d3765b7bd9f5cc5a07dfc78ea57263a + languageName: node + linkType: hard + +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: "npm:1" + bin: + nopt: bin/nopt.js + checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0, nopt@npm:^7.2.1": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: "npm:^4.0.1" + is-core-module: "npm:^2.5.0" + semver: "npm:^7.3.4" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be + languageName: node + linkType: hard + +"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": + version: 6.0.2 + resolution: "normalize-package-data@npm:6.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10c0/7e32174e7f5575ede6d3d449593247183880122b4967d4ae6edb28cea5769ca025defda54fc91ec0e3c972fdb5ab11f9284606ba278826171b264cb16a9311ef + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 10c0/95d948f9bdd2cfde91aa786d1816ae40f8262946e13700bf6628105994fe0ff361662c20af3961161c38a119dc977adeb41fc0b41b1745eb77edaaf9cb22db23 + languageName: node + linkType: hard + +"npm-bundled@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-bundled@npm:3.0.1" + dependencies: + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10c0/7975590a50b7ce80dd9f3eddc87f7e990c758f2f2c4d9313dd67a9aca38f1a5ac0abe20d514b850902c441e89d2346adfc3c6f1e9cbab3ea28ebb653c4442440 + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 + languageName: node + linkType: hard + +"npm-package-arg@npm:11.0.2": + version: 11.0.2 + resolution: "npm-package-arg@npm:11.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/d730572e128980db45c97c184a454cb565283bf849484bf92e3b4e8ec2d08a21bd4b2cba9467466853add3e8c7d81e5de476904ac241f3ae63e6905dfc8196d4 + languageName: node + linkType: hard + +"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a + languageName: node + linkType: hard + +"npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": + version: 8.0.2 + resolution: "npm-packlist@npm:8.0.2" + dependencies: + ignore-walk: "npm:^6.0.4" + checksum: 10c0/ac3140980b1475c2e9acd3d0ca1acd0f8660c357aed357f1a4ebff2270975e0280a3b1c4938e2f16bd68217853ceb5725cf8779ec3752dfcc546582751ceedff + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": + version: 9.1.0 + resolution: "npm-pick-manifest@npm:9.1.0" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^11.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/8765f4199755b381323da2bff2202b4b15b59f59dba0d1be3f2f793b591321cd19e1b5a686ef48d9753a6bd4868550da632541a45dfb61809d55664222d73e44 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": + version: 17.1.0 + resolution: "npm-registry-fetch@npm:17.1.0" + dependencies: + "@npmcli/redact": "npm:^2.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^13.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minizlib: "npm:^2.1.2" + npm-package-arg: "npm:^11.0.0" + proc-log: "npm:^4.0.0" + checksum: 10c0/3f66214e106609fd2e92704e62ac929cba1424d4013fec50f783afbb81168b0dc14457d35c1716a77e30fc482c3576bdc4e4bc5c84a714cac59cf98f96a17f47 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + +"npmlog@npm:^5.0.1": + version: 5.0.1 + resolution: "npmlog@npm:5.0.1" + dependencies: + are-we-there-yet: "npm:^2.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^3.0.0" + set-blocking: "npm:^2.0.0" + checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa + languageName: node + linkType: hard + +"nth-check@npm:~1.0.0, nth-check@npm:~1.0.1": + version: 1.0.2 + resolution: "nth-check@npm:1.0.2" + dependencies: + boolbase: "npm:~1.0.0" + checksum: 10c0/1a67ce53a99e276eea672f892d712b29f3e6802bbbef7285ffab72ecea4f972e8244defac1ebded0daffabf459def31355bb9c64e5657ac2ab032c13f185d0fd + languageName: node + linkType: hard + +"nx@npm:17.2.5, nx@npm:v17.2.5": + version: 17.2.5 + resolution: "nx@npm:17.2.5" + dependencies: + "@nrwl/tao": "npm:v17.2.5" + "@nx/nx-darwin-arm64": "npm:v17.2.5" + "@nx/nx-darwin-x64": "npm:v17.2.5" + "@nx/nx-freebsd-x64": "npm:v17.2.5" + "@nx/nx-linux-arm-gnueabihf": "npm:v17.2.5" + "@nx/nx-linux-arm64-gnu": "npm:v17.2.5" + "@nx/nx-linux-arm64-musl": "npm:v17.2.5" + "@nx/nx-linux-x64-gnu": "npm:v17.2.5" + "@nx/nx-linux-x64-musl": "npm:v17.2.5" + "@nx/nx-win32-arm64-msvc": "npm:v17.2.5" + "@nx/nx-win32-x64-msvc": "npm:v17.2.5" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:3.0.0-rc.46" + "@zkochan/js-yaml": "npm:0.0.6" + axios: "npm:^1.5.1" + chalk: "npm:^4.1.0" + cli-cursor: "npm:3.1.0" + cli-spinners: "npm:2.6.1" + cliui: "npm:^8.0.1" + dotenv: "npm:~16.3.1" + dotenv-expand: "npm:~10.0.0" + enquirer: "npm:~2.3.6" + figures: "npm:3.2.0" + flat: "npm:^5.0.2" + fs-extra: "npm:^11.1.0" + glob: "npm:7.1.4" + ignore: "npm:^5.0.4" + jest-diff: "npm:^29.4.1" + js-yaml: "npm:4.1.0" + jsonc-parser: "npm:3.2.0" + lines-and-columns: "npm:~2.0.3" + minimatch: "npm:3.0.5" + node-machine-id: "npm:1.1.12" + npm-run-path: "npm:^4.0.1" + open: "npm:^8.4.0" + semver: "npm:7.5.3" + string-width: "npm:^4.2.3" + strong-log-transformer: "npm:^2.1.0" + tar-stream: "npm:~2.2.0" + tmp: "npm:~0.2.1" + tsconfig-paths: "npm:^4.1.2" + tslib: "npm:^2.3.0" + yargs: "npm:^17.6.2" + yargs-parser: "npm:21.1.1" + peerDependencies: + "@swc-node/register": ^1.6.7 + "@swc/core": ^1.3.85 + dependenciesMeta: + "@nx/nx-darwin-arm64": + optional: true + "@nx/nx-darwin-x64": + optional: true + "@nx/nx-freebsd-x64": + optional: true + "@nx/nx-linux-arm-gnueabihf": + optional: true + "@nx/nx-linux-arm64-gnu": + optional: true + "@nx/nx-linux-arm64-musl": + optional: true + "@nx/nx-linux-x64-gnu": + optional: true + "@nx/nx-linux-x64-musl": + optional: true + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + nx-cloud: bin/nx-cloud.js + checksum: 10c0/5438bd50e19a6fab01f4f08847045f4d9f67d446eed279027ca7de11a2f20ca9ad0a7e2ec195d8422d2c1f9e401eb3bb7bfd01e97c7c4cd933ed763949f6dbd4 + languageName: node + linkType: hard + +"nx@npm:>=17.1.2 < 21": + version: 20.3.2 + resolution: "nx@npm:20.3.2" + dependencies: + "@napi-rs/wasm-runtime": "npm:0.2.4" + "@nx/nx-darwin-arm64": "npm:20.3.2" + "@nx/nx-darwin-x64": "npm:20.3.2" + "@nx/nx-freebsd-x64": "npm:20.3.2" + "@nx/nx-linux-arm-gnueabihf": "npm:20.3.2" + "@nx/nx-linux-arm64-gnu": "npm:20.3.2" + "@nx/nx-linux-arm64-musl": "npm:20.3.2" + "@nx/nx-linux-x64-gnu": "npm:20.3.2" + "@nx/nx-linux-x64-musl": "npm:20.3.2" + "@nx/nx-win32-arm64-msvc": "npm:20.3.2" + "@nx/nx-win32-x64-msvc": "npm:20.3.2" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:3.0.2" + "@zkochan/js-yaml": "npm:0.0.7" + axios: "npm:^1.7.4" + chalk: "npm:^4.1.0" + cli-cursor: "npm:3.1.0" + cli-spinners: "npm:2.6.1" + cliui: "npm:^8.0.1" + dotenv: "npm:~16.4.5" + dotenv-expand: "npm:~11.0.6" + enquirer: "npm:~2.3.6" + figures: "npm:3.2.0" + flat: "npm:^5.0.2" + front-matter: "npm:^4.0.2" + ignore: "npm:^5.0.4" + jest-diff: "npm:^29.4.1" + jsonc-parser: "npm:3.2.0" + lines-and-columns: "npm:2.0.3" + minimatch: "npm:9.0.3" + node-machine-id: "npm:1.1.12" + npm-run-path: "npm:^4.0.1" + open: "npm:^8.4.0" + ora: "npm:5.3.0" + resolve.exports: "npm:2.0.3" + semver: "npm:^7.5.3" + string-width: "npm:^4.2.3" + tar-stream: "npm:~2.2.0" + tmp: "npm:~0.2.1" + tsconfig-paths: "npm:^4.1.2" + tslib: "npm:^2.3.0" + yaml: "npm:^2.6.0" + yargs: "npm:^17.6.2" + yargs-parser: "npm:21.1.1" + peerDependencies: + "@swc-node/register": ^1.8.0 + "@swc/core": ^1.3.85 + dependenciesMeta: + "@nx/nx-darwin-arm64": + optional: true + "@nx/nx-darwin-x64": + optional: true + "@nx/nx-freebsd-x64": + optional: true + "@nx/nx-linux-arm-gnueabihf": + optional: true + "@nx/nx-linux-arm64-gnu": + optional: true + "@nx/nx-linux-arm64-musl": + optional: true + "@nx/nx-linux-x64-gnu": + optional: true + "@nx/nx-linux-x64-musl": + optional: true + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + nx-cloud: bin/nx-cloud.js + checksum: 10c0/e84b748f45cdce3f57a17b99627a8d2d7ff9c41a4eaa9b88775576b03e3dcd9d0f707f28303b05483fe9478dce58f2d7ecf9a29e8a12902a8247e73a4ae48755 + languageName: node + linkType: hard + +"oauth-sign@npm:~0.9.0": + version: 0.9.0 + resolution: "oauth-sign@npm:0.9.0" + checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-hash@npm:^2.0.1": + version: 2.2.0 + resolution: "object-hash@npm:2.2.0" + checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2, object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc + languageName: node + linkType: hard + +"object.entries@npm:^1.1.5": + version: 1.1.8 + resolution: "object.entries@npm:1.1.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.2, object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b + languageName: node + linkType: hard + +"object.getownpropertydescriptors@npm:^2.1.8": + version: 2.1.8 + resolution: "object.getownpropertydescriptors@npm:2.1.8" + dependencies: + array.prototype.reduce: "npm:^1.0.6" + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + gopd: "npm:^1.0.1" + safe-array-concat: "npm:^1.1.2" + checksum: 10c0/553e9562fd86637c9c169df23a56f1d810d8c9b580a6d4be11552c009f32469310c9347f3d10325abf0cd9cfe4afc521a1e903fbd24148ae7ec860e1e7c75cf3 + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.3": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c + languageName: node + linkType: hard + +"object.values@npm:^1.2.0": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 + languageName: node + linkType: hard + +"oidc-token-hash@npm:^5.0.1": + version: 5.0.3 + resolution: "oidc-token-hash@npm:5.0.3" + checksum: 10c0/d0dc0551406f09577874155cc83cf69c39e4b826293d50bb6c37936698aeca17d4bcee356ab910c859e53e83f2728a2acbd041020165191353b29de51fbca615 + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"open@npm:^8.4.0": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 + languageName: node + linkType: hard + +"openid-client@npm:^4.7.4": + version: 4.9.1 + resolution: "openid-client@npm:4.9.1" + dependencies: + aggregate-error: "npm:^3.1.0" + got: "npm:^11.8.0" + jose: "npm:^2.0.5" + lru-cache: "npm:^6.0.0" + make-error: "npm:^1.3.6" + object-hash: "npm:^2.0.1" + oidc-token-hash: "npm:^5.0.1" + checksum: 10c0/88af2e7c17e62eaddd3f27e96567ef9c08dbd3266a6ff9c4e058128191d2d4ec07c49eaa523d9159953835fc90c59470270f6050872afb70c5c9576c387833e7 + languageName: node + linkType: hard + +"optimist@npm:^0.6.1": + version: 0.6.1 + resolution: "optimist@npm:0.6.1" + dependencies: + minimist: "npm:~0.0.1" + wordwrap: "npm:~0.0.2" + checksum: 10c0/8cb417328121e732dbfb4d94d53bb39b1406446b55323ed4ce787decc52394927e051ba879eb3ffa3171fe22a35ce13b460114b60effcead77443ee87c2f9b0f + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"ora@npm:5.3.0": + version: 5.3.0 + resolution: "ora@npm:5.3.0" + dependencies: + bl: "npm:^4.0.3" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + log-symbols: "npm:^4.0.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/30d5f3218eb75b0a2028c5fb9aa88e83e38a2f1745ab56839abb06c3ba31bae35f768f4e72c4f9e04e2a66be6a898e9312e8cf85c9333e1e3613eabb8c7cdf57 + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: "npm:^4.1.0" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + is-unicode-supported: "npm:^0.1.0" + log-symbols: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"own-keys@npm:^1.0.1": + version: 1.0.1 + resolution: "own-keys@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.2.6" + object-keys: "npm:^1.1.1" + safe-push-apply: "npm:^1.0.0" + checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a + languageName: node + linkType: hard + +"p-cancelable@npm:^2.0.0": + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 10c0/8c6dc1f8dd4154fd8b96a10e55a3a832684c4365fb9108056d89e79fbf21a2465027c04a59d0d797b5ffe10b54a61a32043af287d5c4860f1e996cbdbc847f01 + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: "npm:^1.0.0" + checksum: 10c0/5c1b1d53d180b2c7501efb04b7c817448e10efe1ba46f4783f8951994d5027e4cd88f36ad79af50546682594c4ebd11702ac4b9364c47f8074890e2acad0edee + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: "npm:^1.1.0" + checksum: 10c0/82da4be88fb02fd29175e66021610c881938d3cc97c813c71c1a605fac05617d57fd5d3b337494a6106c0edb2a37c860241430851411f1b265108cead34aee67 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-map-series@npm:2.1.0": + version: 2.1.0 + resolution: "p-map-series@npm:2.1.0" + checksum: 10c0/302ca686a61c498b227fc45d4e2b2e5bfd20a03f4156a976d94c4ff7decf9cd5a815fa6846b43b37d587ffa8d4671ff2bd596fa83fe8b9113b5102da94940e2a + languageName: node + linkType: hard + +"p-map@npm:4.0.0, p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^2.1.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"p-pipe@npm:3.1.0": + version: 3.1.0 + resolution: "p-pipe@npm:3.1.0" + checksum: 10c0/9b3076828ea7e9469c0f92c78fa44096726208d547efdb2d6148cbe135d1a70bd449de5be13e234dd669d9515343bd68527b316bf9d5639cee639e2fdde20aaf + languageName: node + linkType: hard + +"p-queue@npm:6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: "npm:^4.0.4" + p-timeout: "npm:^3.2.0" + checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e + languageName: node + linkType: hard + +"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": + version: 2.1.0 + resolution: "p-reduce@npm:2.1.0" + checksum: 10c0/27b8ff0fb044995507a06cd6357dffba0f2b98862864745972562a21885d7906ce5c794036d2aaa63ef6303158e41e19aed9f19651dfdafb38548ecec7d0de15 + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: "npm:^1.0.0" + checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 10c0/757ba31de5819502b80c447826fac8be5f16d3cb4fbf9bc8bc4971dba0682e84ac33e4b24176ca7058c69e29f64f34d8d9e9b08e873b7b7bb0aa89d620fa224a + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"p-waterfall@npm:2.1.1": + version: 2.1.1 + resolution: "p-waterfall@npm:2.1.1" + dependencies: + p-reduce: "npm:^2.0.0" + checksum: 10c0/ccae582b75a3597018a375f8eac32b93e8bfb9fc22a8e5037787ef4ebf5958d7465c2d3cbe26443971fbbfda2bcb7b645f694b91f928fc9a71fa5031e6e33f85 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pacote@npm:^18.0.0, pacote@npm:^18.0.6": + version: 18.0.6 + resolution: "pacote@npm:18.0.6" + dependencies: + "@npmcli/git": "npm:^5.0.0" + "@npmcli/installed-package-contents": "npm:^2.0.1" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + "@npmcli/run-script": "npm:^8.0.0" + cacache: "npm:^18.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^11.0.0" + npm-packlist: "npm:^8.0.0" + npm-pick-manifest: "npm:^9.0.0" + npm-registry-fetch: "npm:^17.0.0" + proc-log: "npm:^4.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + bin: + pacote: bin/index.js + checksum: 10c0/d80907375dd52a521255e0debca1ba9089ad8fd7acdf16c5a5db2ea2a5bb23045e2bcf08d1648b1ebc40fcc889657db86ff6187ff5f8d2fc312cd6ad1ec4c6ac + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-conflict-json@npm:^3.0.0": + version: 3.0.1 + resolution: "parse-conflict-json@npm:3.0.1" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + just-diff: "npm:^6.0.0" + just-diff-apply: "npm:^5.2.0" + checksum: 10c0/610b37181229ce3e945125c3a9548ec24d1de2d697a7ea3ef0f2660cccc6613715c2ba4bdbaf37c565133d6b61758703618a2c63d1ee29f97fd33c70a8aae323 + languageName: node + linkType: hard + +"parse-imports@npm:^2.1.1": + version: 2.2.1 + resolution: "parse-imports@npm:2.2.1" + dependencies: + es-module-lexer: "npm:^1.5.3" + slashes: "npm:^3.0.12" + checksum: 10c0/bc541ce4ef2ff77d53247de39a956e0ee7a1a4b9b175c3e0f898222fe7994595f011491154db4ed408cbaf5049ede9d0b6624125565be208e973a54420cbe069 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"parse-link-header@npm:^1.0.1": + version: 1.0.1 + resolution: "parse-link-header@npm:1.0.1" + dependencies: + xtend: "npm:~4.0.1" + checksum: 10c0/7d0c1f94b4d400ac8605e6d18aced0139e15a08f3dc886567894953727db82bb387febb9a7a6837a4809ca75abd32364bb54d447c050db4a017754ff8949c1fa + languageName: node + linkType: hard + +"parse-path@npm:^7.0.0": + version: 7.0.0 + resolution: "parse-path@npm:7.0.0" + dependencies: + protocols: "npm:^2.0.0" + checksum: 10c0/e7646f6b998b083bbd40102643d803557ce4ae18ae1704e6cc7ae2525ea7c5400f4a3635aca3244cfe65ce4dd0ff77db1142dde4d080e8a80c364c4b3e8fe8d2 + languageName: node + linkType: hard + +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 10c0/2f268e3d110d4c53d06ed2a8e8ee61a7da0cee13bf150819a6da066a8ca9b8d15b5600d6e6cae8be940e2edc50ee7c1e1052934d6ec858324065ecef848f0497 + languageName: node + linkType: hard + +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" + dependencies: + parse-path: "npm:^7.0.0" + checksum: 10c0/68b95afdf4bbf72e57c7ab66f8757c935fff888f7e2b0f1e06098b4faa19e06b6b743bddaed5bc8df4f0c2de6fc475355d787373b2fdd40092be9e4e4b996648 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"passport-cas2@npm:0.0.12": + version: 0.0.12 + resolution: "passport-cas2@npm:0.0.12" + dependencies: + cas: "git+https://github.com/joshchan/node-cas.git" + passport-strategy: "npm:^1.0.0" + checksum: 10c0/86050abe8da35304efae98402f4b6be1be9793d43d78e30e83d7431e8ab5e389aa12c348d426144f53413ce6d19240227e7a7f22e7253c768d1f6cabf34b3409 + languageName: node + linkType: hard + +"passport-local@npm:^1.0.0": + version: 1.0.0 + resolution: "passport-local@npm:1.0.0" + dependencies: + passport-strategy: "npm:1.x.x" + checksum: 10c0/59becb988014921a5d6056470d9373c41db452fcf113323064f39d53baa6f184e72151bf269ca6770511f7f0260e13632dacc7b6afdbf60ebf63e90327e186d4 + languageName: node + linkType: hard + +"passport-strategy@npm:1.x.x, passport-strategy@npm:^1.0.0": + version: 1.0.0 + resolution: "passport-strategy@npm:1.0.0" + checksum: 10c0/cf4cd32e1bf2538a239651581292fbb91ccc83973cde47089f00d2014c24bed63d3e65af21da8ddef649a8896e089eb9c3ac9ca639f36c797654ae9ee4ed65e1 + languageName: node + linkType: hard + +"passport@npm:^0.4.1": + version: 0.4.1 + resolution: "passport@npm:0.4.1" + dependencies: + passport-strategy: "npm:1.x.x" + pause: "npm:0.0.1" + checksum: 10c0/aa1a8eb2e991368734ae1e33d354c94a02c5fcd27c4ef25c3c303b4f3df1e05512ac0159e608cedbfc8c544c166735a153124cfa3bd8d48fb01f5ded500f0c5f + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-to-regexp@npm:^3.1.0": + version: 3.3.0 + resolution: "path-to-regexp@npm:3.3.0" + checksum: 10c0/ffa0ebe7088d38d435a8d08b0fe6e8c93ceb2a81a65d4dd1d9a538f52e09d5e3474ed5f553cb3b180d894b0caa10698a68737ab599fd1e56b4663d1a64c9f77b + languageName: node + linkType: hard + +"path-to-regexp@npm:^6.2.0": + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: 10c0/73b67f4638b41cde56254e6354e46ae3a2ebc08279583f6af3d96fe4664fc75788f74ed0d18ca44fa4a98491b69434f9eee73b97bb5314bd1b5adb700f5c18d6 + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"pause@npm:0.0.1": + version: 0.0.1 + resolution: "pause@npm:0.0.1" + checksum: 10c0/f362655dfa7f44b946302c5a033148852ed5d05f744bd848b1c7eae6a543f743e79c7751ee896ba519fd802affdf239a358bb2ea5ca1b1c1e4e916279f83ab75 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 + languageName: node + linkType: hard + +"pify@npm:5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 10c0/9f6f3cd1f159652692f514383efe401a06473af35a699962230ad1c4c9796df5999961461fc1a3b81eed8e3e74adb8bd032474fb3f93eb6bdbd9f33328da1ed2 + languageName: node + linkType: hard + +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf + languageName: node + linkType: hard + +"pirates@npm:^4.0.7": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.10": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss@npm:^8.3.11": + version: 8.5.1 + resolution: "postcss@npm:8.5.1" + dependencies: + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.2 + resolution: "prebuild-install@npm:7.1.2" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: "npm:^1.1.2" + checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab + languageName: node + linkType: hard + +"prettier@npm:^3.1.1": + version: 3.4.2 + resolution: "prettier@npm:3.4.2" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 + languageName: node + linkType: hard + +"pretty-format@npm:30.0.5, pretty-format@npm:^30.0.0": + version: 30.0.5 + resolution: "pretty-format@npm:30.0.5" + dependencies: + "@jest/schemas": "npm:30.0.5" + ansi-styles: "npm:^5.2.0" + react-is: "npm:^18.3.1" + checksum: 10c0/9f6cf1af5c3169093866c80adbfdad32f69c692b62f24ba3ca8cdec8519336123323f896396f9fa40346a41b197c5f6be15aec4d8620819f12496afaaca93f81 + languageName: node + linkType: hard + +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + +"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + +"proggy@npm:^2.0.0": + version: 2.0.0 + resolution: "proggy@npm:2.0.0" + checksum: 10c0/1bfc14fa95769e6dd7e91f9d3cae8feb61e6d833ed7210d87ee5413bfa068f4ee7468483da96b2f138c40a7e91a2307f5d5d2eb6de9761c21e266a34602e6a5f + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: 10c0/f1af0c7b0067e84d64751148ee5bb6c3e84f4a4d1316d6fe56261e1d2637cf71b49894bcbd2c6daf7d45afb1bc99efc3749be277c3e0518b70d0c5a29d037011 + languageName: node + linkType: hard + +"promise-call-limit@npm:^3.0.1": + version: 3.0.2 + resolution: "promise-call-limit@npm:3.0.2" + checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc + languageName: node + linkType: hard + +"promise-limit@npm:^2.7.0": + version: 2.7.0 + resolution: "promise-limit@npm:2.7.0" + checksum: 10c0/ce220a7e11c8d0541940a3d99cc424bd16a18451b295a263f6dbaa998585d2d1afa71fcb7bb29078a61e214d2f13d96e9b082e96e8e357fbe5c5936ef2459cba + languageName: node + linkType: hard + +"promise-polyfill@npm:^1.1.6": + version: 1.1.6 + resolution: "promise-polyfill@npm:1.1.6" + checksum: 10c0/055859bba9da0b26994c6521473794cd3bd523f7cf61c5554c4a279ff86a3c11be21d222995d469efffa9b26b96577535286ded5566e4dc4d7c26338dfdf52c7 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"promise.prototype.finally@npm:^3.1.2": + version: 3.1.8 + resolution: "promise.prototype.finally@npm:3.1.8" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.0.0" + set-function-name: "npm:^2.0.1" + checksum: 10c0/5d56eaa3531c3fc03fdd5eef3b3270b3098ff158a4c82261331c9dca3f4f2b5e1c86a2a6a34e752ea978b8736cc7c130dda78ce53f8933d456c24a3c5749482e + languageName: node + linkType: hard + +"promise@npm:^7.0.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: "npm:~2.0.3" + checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f + languageName: node + linkType: hard + +"promzard@npm:^1.0.0": + version: 1.0.2 + resolution: "promzard@npm:1.0.2" + dependencies: + read: "npm:^3.0.1" + checksum: 10c0/d53c4ecb8b606b7e4bdeab14ac22c5f81a57463d29de1b8fe43bbc661106d9e4a79d07044bd3f69bde82c7ebacba7307db90a9699bc20482ce637bdea5fb8e4b + languageName: node + linkType: hard + +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.1 + resolution: "protocols@npm:2.0.1" + checksum: 10c0/016cc58a596e401004a028a2f7005e3444bf89ee8f606409c411719374d1e8bba0464fc142a065cce0d19f41669b2f7ffe25a8bde4f16ce3b6eb01fabc51f2e7 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"pseudomap@npm:^1.0.2": + version: 1.0.2 + resolution: "pseudomap@npm:1.0.2" + checksum: 10c0/5a91ce114c64ed3a6a553aa7d2943868811377388bb31447f9d8028271bae9b05b340fe0b6961a64e45b9c72946aeb0a4ab635e8f7cb3715ffd0ff2beeb6a679 + languageName: node + linkType: hard + +"psl@npm:^1.1.28": + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a + languageName: node + linkType: hard + +"pug-attrs@npm:^3.0.0": + version: 3.0.0 + resolution: "pug-attrs@npm:3.0.0" + dependencies: + constantinople: "npm:^4.0.1" + js-stringify: "npm:^1.0.2" + pug-runtime: "npm:^3.0.0" + checksum: 10c0/28178e91c05e8eb9130861c78dccc61eae3e1610931346065bd32ad0b08b023a8dcf2470c3b2409ba45a5098d6d7ed15687717e91cf77770c6381a18626e5194 + languageName: node + linkType: hard + +"pug-code-gen@npm:^3.0.3": + version: 3.0.3 + resolution: "pug-code-gen@npm:3.0.3" + dependencies: + constantinople: "npm:^4.0.1" + doctypes: "npm:^1.1.0" + js-stringify: "npm:^1.0.2" + pug-attrs: "npm:^3.0.0" + pug-error: "npm:^2.1.0" + pug-runtime: "npm:^3.0.1" + void-elements: "npm:^3.1.0" + with: "npm:^7.0.0" + checksum: 10c0/517a93930dbc80bc7fa5f60ff324229a07cc5ab70ed9d344ce105e2fe24de68db5121c8457a9ba99cdc8d48dd18779dd34956ebfcab009b3c1c6843a3cade109 + languageName: node + linkType: hard + +"pug-error@npm:^2.0.0, pug-error@npm:^2.1.0": + version: 2.1.0 + resolution: "pug-error@npm:2.1.0" + checksum: 10c0/bbce339b17fab9890de84975c0cd8723a847bf65f35653d3ebcf77018e8ad91529d56e978ab80f4c64c9f4f07ef9e56e7a9fda3be44249c344a93ba11fccff79 + languageName: node + linkType: hard + +"pug-filters@npm:^4.0.0": + version: 4.0.0 + resolution: "pug-filters@npm:4.0.0" + dependencies: + constantinople: "npm:^4.0.1" + jstransformer: "npm:1.0.0" + pug-error: "npm:^2.0.0" + pug-walk: "npm:^2.0.0" + resolve: "npm:^1.15.1" + checksum: 10c0/7ddd62f5eb97f5242858bd56d93ffed387fef3742210a53770c980020cf91a34384b84b7fc8f0de185b43dfa77de2c4d0f63f575a4c5b3887fdef4e64b8d559d + languageName: node + linkType: hard + +"pug-lexer@npm:^5.0.1": + version: 5.0.1 + resolution: "pug-lexer@npm:5.0.1" + dependencies: + character-parser: "npm:^2.2.0" + is-expression: "npm:^4.0.0" + pug-error: "npm:^2.0.0" + checksum: 10c0/24195a5681953ab91c6a3ccd80a643f760dddb65e2f266bf8ccba145018ba0271536efe1572de2c2224163eb00873c2f1df0ad7ea7aa8bcbf79a66b586ca8435 + languageName: node + linkType: hard + +"pug-linker@npm:^4.0.0": + version: 4.0.0 + resolution: "pug-linker@npm:4.0.0" + dependencies: + pug-error: "npm:^2.0.0" + pug-walk: "npm:^2.0.0" + checksum: 10c0/db754ff34cdd4ba9d9e2d9535cce2a74178f2172e848a5fa6381907cb5bfaa0d39d4cc3eb29893d35fc1c417e83ae3cfd434640ba7d3b635c63199104fae976c + languageName: node + linkType: hard + +"pug-load@npm:^3.0.0": + version: 3.0.0 + resolution: "pug-load@npm:3.0.0" + dependencies: + object-assign: "npm:^4.1.1" + pug-walk: "npm:^2.0.0" + checksum: 10c0/2a7659dfaf9872dd25d851f85e4c27fa447d907b1db3540030cd844614159ff181e067d8f2bedf90eb6b5b1ff03747253859ecbbb822e40f4834b15591d4e108 + languageName: node + linkType: hard + +"pug-parser@npm:^6.0.0": + version: 6.0.0 + resolution: "pug-parser@npm:6.0.0" + dependencies: + pug-error: "npm:^2.0.0" + token-stream: "npm:1.0.0" + checksum: 10c0/faa6cec43afdeb2705eb8c68dfdb2e65836238df8043ae55295ffb72450b8c7a990ea1be60adbde19f58988b9e1d18a84ea42453e2c4f104d0031f78fda737b2 + languageName: node + linkType: hard + +"pug-runtime@npm:^3.0.0, pug-runtime@npm:^3.0.1": + version: 3.0.1 + resolution: "pug-runtime@npm:3.0.1" + checksum: 10c0/0db8166d2e17695a6941d1de81dcb21c8a52921299b1e03bf6a0a3d2b0036b51cf98101b3937b731c745e8d3e0268cb0b728c02f61a80a25fcfaa15c594fb1be + languageName: node + linkType: hard + +"pug-strip-comments@npm:^2.0.0": + version: 2.0.0 + resolution: "pug-strip-comments@npm:2.0.0" + dependencies: + pug-error: "npm:^2.0.0" + checksum: 10c0/ca498adedaeba51dd836b20129bbd161e2d5a397a2baaa553b1e74e888caa2258dcd7326396fc6f8fed8c7b7f906cfebc4c386ccbee8888a27b2ca0d4d86d206 + languageName: node + linkType: hard + +"pug-walk@npm:^2.0.0": + version: 2.0.0 + resolution: "pug-walk@npm:2.0.0" + checksum: 10c0/005d63177bcf057f5a618b182f6d4600afb039200b07a381a0d89288a2b3126e763a0a6c40b758eab0731c8e63cad1bbcb46d96803b9ae9cfc879f6ef5a0f8f4 + languageName: node + linkType: hard + +"pug@npm:^3.0.2": + version: 3.0.3 + resolution: "pug@npm:3.0.3" + dependencies: + pug-code-gen: "npm:^3.0.3" + pug-filters: "npm:^4.0.0" + pug-lexer: "npm:^5.0.1" + pug-linker: "npm:^4.0.0" + pug-load: "npm:^3.0.0" + pug-parser: "npm:^6.0.0" + pug-runtime: "npm:^3.0.1" + pug-strip-comments: "npm:^2.0.0" + checksum: 10c0/bda53d3a6deea1d348cd5ab17427c77f3d74165510ad16f4fd182cc63618ad09388ecda317d17122ee890c8a68f9a54b96221fce7f44a332e463fdbb10a9d1e2 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"pure-rand@npm:^7.0.0": + version: 7.0.1 + resolution: "pure-rand@npm:7.0.1" + checksum: 10c0/9cade41030f5ec95f5d55a11a71404cd6f46b69becaad892097cd7f58e2c6248cd0a933349ca7d21336ab629f1da42ffe899699b671bc4651600eaf6e57f837e + languageName: node + linkType: hard + +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" + dependencies: + side-channel: "npm:^1.0.6" + checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 + languageName: node + linkType: hard + +"qs@npm:^6.11.0, qs@npm:^6.5.1": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c + languageName: node + linkType: hard + +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.1.2, queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: 10c0/f9b1596fa7595a35c2f9d913ac312fede13d37dc8a747a51557ab36e11ce113bbe88ef4c0154968845559a7709cb6a7e7cbe75f7972182451cd45e7f057a334d + languageName: node + linkType: hard + +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da + languageName: node + linkType: hard + +"random-bytes@npm:~1.0.0": + version: 1.0.0 + resolution: "random-bytes@npm:1.0.0" + checksum: 10c0/71e7a600e0976e9ebc269793a0577d47b965fa678fcc9e9623e427f909d1b3669db5b3a178dbf61229f0724ea23dba64db389f0be0ba675c6a6b837c02f29b8f + languageName: node + linkType: hard + +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"rdf-canonize@npm:^1.0.2": + version: 1.2.0 + resolution: "rdf-canonize@npm:1.2.0" + dependencies: + node-forge: "npm:^0.10.0" + semver: "npm:^6.3.0" + checksum: 10c0/d0955b79caa43c60a74c544163486bdb1b7462e8c4373e9bfae36afc93fb849271fb4fe2c228613d24b9c9f22195b5ed17f1cc6787538853e3dec1d0df1d3d10 + languageName: node + linkType: hard + +"rdf-canonize@npm:^2.0.1": + version: 2.0.1 + resolution: "rdf-canonize@npm:2.0.1" + dependencies: + semver: "npm:^6.3.0" + setimmediate: "npm:^1.0.5" + checksum: 10c0/2a3e158c8a2354aa5682d341c420d815b421325979c06d02e00f45dd7f3b4ef751dd0d072b227a16ebd1e5dbb1f82226a58d5b9cc6cfd246fc53fc04f7b613d0 + languageName: node + linkType: hard + +"rdf-canonize@npm:^3.4.0": + version: 3.4.0 + resolution: "rdf-canonize@npm:3.4.0" + dependencies: + setimmediate: "npm:^1.0.5" + checksum: 10c0/c78ccd8ff99abf749005f6c596d5ceb16edd7a9508e430cd636b89fba8f75e5698f2dd8294aeca389463b1f983326f8d50c9d4ad0a9195cf945f02731a720dea + languageName: node + linkType: hard + +"rdf-canonize@npm:^4.0.1": + version: 4.0.1 + resolution: "rdf-canonize@npm:4.0.1" + dependencies: + setimmediate: "npm:^1.0.5" + checksum: 10c0/8f6040847c5731817cc5ad95ca16caa588fba76c94ee3b24f282c9a3054f36226560bcb33bed8a173903960af1b9937e21db6e0dc2e90caa749682fff8228250 + languageName: node + linkType: hard + +"rdf-data-factory@npm:^1.1.0, rdf-data-factory@npm:^1.1.2": + version: 1.1.3 + resolution: "rdf-data-factory@npm:1.1.3" + dependencies: + "@rdfjs/types": "npm:^1.0.0" + checksum: 10c0/b5f5db1417afd72e690c60b0eb19388b0ed519e8d732419ccee4d3a5c15fa8cfd1b16380c9692dec26245a9bbf5ce2cb07360645d60e995337c34796da0c990a + languageName: node + linkType: hard + +"rdf-data-model@npm:^1.0.0": + version: 1.0.0 + resolution: "rdf-data-model@npm:1.0.0" + bin: + rdf-data-model-test: ./bin/test.js + checksum: 10c0/36a1a4961a186f832bc89d4831c3adafb7dbb9305e144ea7cc2a2df27c8a7df6d546f2481931f95eb081299a32d2223f7c4163d3cd18492773b443f1c938bdbc + languageName: node + linkType: hard + +"rdf-isomorphic@npm:^1.3.0": + version: 1.3.1 + resolution: "rdf-isomorphic@npm:1.3.1" + dependencies: + "@rdfjs/types": "npm:*" + hash.js: "npm:^1.1.7" + rdf-string: "npm:^1.6.0" + rdf-terms: "npm:^1.7.0" + checksum: 10c0/6da5545654045b643d12510e946677a6d724282dfeb58f215c26fa46cae1c525bfad4820bda7765f49902ee0cc75cffbcf646ca1e984ec35d71c8008ad3e6e83 + languageName: node + linkType: hard + +"rdf-parse@npm:^1.7.0": + version: 1.9.1 + resolution: "rdf-parse@npm:1.9.1" + dependencies: + "@comunica/actor-http-native": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html-microdata": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html-rdfa": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html-script": "npm:~1.22.0" + "@comunica/actor-rdf-parse-jsonld": "npm:^1.22.0" + "@comunica/actor-rdf-parse-n3": "npm:~1.22.0" + "@comunica/actor-rdf-parse-rdfxml": "npm:~1.22.0" + "@comunica/actor-rdf-parse-xml-rdfa": "npm:~1.22.0" + "@comunica/bus-http": "npm:~1.22.0" + "@comunica/bus-init": "npm:~1.22.0" + "@comunica/bus-rdf-parse": "npm:~1.22.0" + "@comunica/bus-rdf-parse-html": "npm:~1.22.0" + "@comunica/core": "npm:~1.22.0" + "@comunica/mediator-combine-union": "npm:~1.22.0" + "@comunica/mediator-number": "npm:~1.22.0" + "@comunica/mediator-race": "npm:~1.22.0" + "@rdfjs/types": "npm:*" + stream-to-string: "npm:^1.2.0" + checksum: 10c0/b9d99f2ce16abc870e90425f626ce25ff861d389ebd1a8644313367c562551fb695c2088ea9ea72402d178238b89f67235d79d68a8e0819b2c1cad79fd9e3bea + languageName: node + linkType: hard + +"rdf-string@npm:^1.6.0": + version: 1.6.3 + resolution: "rdf-string@npm:1.6.3" + dependencies: + "@rdfjs/types": "npm:*" + rdf-data-factory: "npm:^1.1.0" + checksum: 10c0/d7fca91d659f1631708670efefe4d8243b55f18a74adb384b385f7562d3c1a7c7f0a64da09c094e08aced8dc9cfd870eadbec4fe97030d78a90ec69187f6a53c + languageName: node + linkType: hard + +"rdf-terms@npm:^1.7.0": + version: 1.11.0 + resolution: "rdf-terms@npm:1.11.0" + dependencies: + "@rdfjs/types": "npm:*" + rdf-data-factory: "npm:^1.1.0" + rdf-string: "npm:^1.6.0" + checksum: 10c0/9603eef8b05c8254f1d12a75db894de85eb291fd1cff167d5dd4a3854ff7677ad6baea9ebbb164bc0ad0cbe37ab4317e96de61e98297937ea9237956ac951fab + languageName: node + linkType: hard + +"rdfa-streaming-parser@npm:^1.5.0": + version: 1.5.0 + resolution: "rdfa-streaming-parser@npm:1.5.0" + dependencies: + "@rdfjs/types": "npm:*" + htmlparser2: "npm:^6.0.0" + rdf-data-factory: "npm:^1.1.0" + relative-to-absolute-iri: "npm:^1.0.2" + checksum: 10c0/d2482dce371d90ca3c19b97b57b9c17ad07be5990bc6c11ec9b4a57f761ff5433567555ed87fa66144412a9239053d0b7cee85c370e4f02098b0338c2da971ba + languageName: node + linkType: hard + +"rdfxml-streaming-parser@npm:^1.5.0": + version: 1.5.0 + resolution: "rdfxml-streaming-parser@npm:1.5.0" + dependencies: + "@rdfjs/types": "npm:*" + rdf-data-factory: "npm:^1.1.0" + relative-to-absolute-iri: "npm:^1.0.0" + sax: "npm:^1.2.4" + checksum: 10c0/37a75a10608051f433d3c267b91f495f310ad1a65d7897b6c823311702c8ab2a11b2b54b64869fc2564f2792e426714c1cca478eb0105ce658caafdd78353d66 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0, react-is@npm:^18.3.1": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + +"read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": + version: 4.0.0 + resolution: "read-cmd-shim@npm:4.0.0" + checksum: 10c0/e62db17ec9708f1e7c6a31f0a46d43df2069d85cf0df3b9d1d99e5ed36e29b1e8b2f8a427fd8bbb9bc40829788df1471794f9b01057e4b95ed062806e4df5ba9 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10c0/37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 + languageName: node + linkType: hard + +"read-pkg-up@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg-up@npm:3.0.0" + dependencies: + find-up: "npm:^2.0.0" + read-pkg: "npm:^3.0.0" + checksum: 10c0/2cd0a180260b0d235990e6e9c8c2330a03882d36bc2eba8930e437ef23ee52a68a894e7e1ccb1c33f03bcceb270a861ee5f7eac686f238857755e2cddfb48ffd + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: "npm:^4.1.0" + read-pkg: "npm:^5.2.0" + type-fest: "npm:^0.8.1" + checksum: 10c0/82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: "npm:^4.0.0" + normalize-package-data: "npm:^2.3.2" + path-type: "npm:^3.0.0" + checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": "npm:^2.4.0" + normalize-package-data: "npm:^2.5.0" + parse-json: "npm:^5.0.0" + type-fest: "npm:^0.6.0" + checksum: 10c0/b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb + languageName: node + linkType: hard + +"read@npm:^3.0.1": + version: 3.0.1 + resolution: "read@npm:3.0.1" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/af524994ff7cf94aa3ebd268feac509da44e58be7ed2a02775b5ee6a7d157b93b919e8c5ead91333f86a21fbb487dc442760bc86354c18b84d334b8cec33723a + languageName: node + linkType: hard + +"readable-stream-node-to-web@npm:^1.0.1": + version: 1.0.1 + resolution: "readable-stream-node-to-web@npm:1.0.1" + checksum: 10c0/9ad4bde9ac06b7dc0b202f77ba632ee012c4782a40139d7a78ecea9d5503867181ab9871e40576891f1adde35203b795e3b46ce30c5fbbab3421404d93561442 + languageName: node + linkType: hard + +"readable-stream@npm:1.1": + version: 1.1.13 + resolution: "readable-stream@npm:1.1.13" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.1" + isarray: "npm:0.0.1" + string_decoder: "npm:~0.10.x" + checksum: 10c0/fb8edd73a37e58fdb35d006370c6cde2912c993483479fe9be232ee0aa8f0b12058f0662602760c7a678887415198888c2f8d864b7ba6ab57683e1b3774d9e66 + languageName: node + linkType: hard + +"readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readable-stream@npm:^4.0.0": + version: 4.7.0 + resolution: "readable-stream@npm:4.7.0" + dependencies: + abort-controller: "npm:^3.0.0" + buffer: "npm:^6.0.3" + events: "npm:^3.3.0" + process: "npm:^0.11.10" + string_decoder: "npm:^1.3.0" + checksum: 10c0/fd86d068da21cfdb10f7a4479f2e47d9c0a9b0c862fc0c840a7e5360201580a55ac399c764b12a4f6fa291f8cee74d9c4b7562e0d53b3c4b2769f2c98155d957 + languageName: node + linkType: hard + +"readable-stream@npm:~1.0.2": + version: 1.0.34 + resolution: "readable-stream@npm:1.0.34" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.1" + isarray: "npm:0.0.1" + string_decoder: "npm:~0.10.x" + checksum: 10c0/02272551396ed8930ddee1a088bdf0379f0f7cc47ac49ed8804e998076cb7daec9fbd2b1fd9c0490ec72e56e8bb3651abeb8080492b8e0a9c3f2158330908ed6 + languageName: node + linkType: hard + +"readable-web-to-node-stream@npm:^3.0.2": + version: 3.0.2 + resolution: "readable-web-to-node-stream@npm:3.0.2" + dependencies: + readable-stream: "npm:^3.6.0" + checksum: 10c0/533d5cd1580232a2c753e52a245be13fc552e6f82c5053a8a8da7ea1063d73a34f936a86b3d4433cdb4a13dd683835cfc87f230936cb96d329a1e28b6040f42e + languageName: node + linkType: hard + +"recursive-watch@npm:^1.1.4": + version: 1.1.4 + resolution: "recursive-watch@npm:1.1.4" + dependencies: + ttl: "npm:^1.3.0" + bin: + recursive-watch: ./bin.js + checksum: 10c0/6bd6da1d85eb09a08bb9b4631fc5e2b79383d252d897c6fd3d0d5e3c334b0bb3ac6b4d1d64c169ef52814552410802fd7404ddabe55327e4d2a21a601925ef2f + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: "npm:^4.0.0" + strip-indent: "npm:^3.0.0" + checksum: 10c0/d64a6b5c0b50eb3ddce3ab770f866658a2b9998c678f797919ceb1b586bab9259b311407280bd80b804e2a7c7539b19238ae6a2a20c843f1a7fcff21d48c2eae + languageName: node + linkType: hard + +"redis-commands@npm:1.7.0": + version: 1.7.0 + resolution: "redis-commands@npm:1.7.0" + checksum: 10c0/c78b46d8d6e811f422961878538c57048a451ab56760d3f1657a7c8f29aaae42cc23890f75655556a59ec67611022e18cb443d2976e6c55036934bfe783aa60e + languageName: node + linkType: hard + +"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": + version: 1.2.0 + resolution: "redis-errors@npm:1.2.0" + checksum: 10c0/5b316736e9f532d91a35bff631335137a4f974927bb2fb42bf8c2f18879173a211787db8ac4c3fde8f75ed6233eb0888e55d52510b5620e30d69d7d719c8b8a7 + languageName: node + linkType: hard + +"redis-parser@npm:^3.0.0": + version: 3.0.0 + resolution: "redis-parser@npm:3.0.0" + dependencies: + redis-errors: "npm:^1.0.0" + checksum: 10c0/ee16ac4c7b2a60b1f42a2cdaee22b005bd4453eb2d0588b8a4939718997ae269da717434da5d570fe0b05030466eeb3f902a58cf2e8e1ca058bf6c9c596f632f + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.1" + which-builtin-type: "npm:^1.2.1" + checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 + languageName: node + linkType: hard + +"regexpp@npm:^3.0.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: 10c0/d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710 + languageName: node + linkType: hard + +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.2.0" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.12.0" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.1.0" + checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: "npm:~3.0.2" + bin: + regjsparser: bin/parser + checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b + languageName: node + linkType: hard + +"relative-to-absolute-iri@npm:^1.0.0, relative-to-absolute-iri@npm:^1.0.2, relative-to-absolute-iri@npm:^1.0.5": + version: 1.0.7 + resolution: "relative-to-absolute-iri@npm:1.0.7" + checksum: 10c0/8301941bb1c33818fd312d6729c91cbed47ee960963a35048e7331d88e5ded6eaaae608c33d3840ddcb959310dbf5041dfa5165540faba99334c5c53de721013 + languageName: node + linkType: hard + +"request@npm:^2.88.0": + version: 2.88.2 + resolution: "request@npm:2.88.2" + dependencies: + aws-sign2: "npm:~0.7.0" + aws4: "npm:^1.8.0" + caseless: "npm:~0.12.0" + combined-stream: "npm:~1.0.6" + extend: "npm:~3.0.2" + forever-agent: "npm:~0.6.1" + form-data: "npm:~2.3.2" + har-validator: "npm:~5.1.3" + http-signature: "npm:~1.2.0" + is-typedarray: "npm:~1.0.0" + isstream: "npm:~0.1.2" + json-stringify-safe: "npm:~5.0.1" + mime-types: "npm:~2.1.19" + oauth-sign: "npm:~0.9.0" + performance-now: "npm:^2.1.0" + qs: "npm:~6.5.2" + safe-buffer: "npm:^5.1.2" + tough-cookie: "npm:~2.5.0" + tunnel-agent: "npm:^0.6.0" + uuid: "npm:^3.3.2" + checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"resolve-alpn@npm:^1.0.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve.exports@npm:2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.15.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.15.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 + languageName: node + linkType: hard + +"responselike@npm:^2.0.0": + version: 2.0.1 + resolution: "responselike@npm:2.0.1" + dependencies: + lowercase-keys: "npm:^2.0.0" + checksum: 10c0/360b6deb5f101a9f8a4174f7837c523c3ec78b7ca8a7c1d45a1062b303659308a23757e318b1e91ed8684ad1205721142dd664d94771cd63499353fd4ee732b5 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rimraf@npm:^4.4.1": + version: 4.4.1 + resolution: "rimraf@npm:4.4.1" + dependencies: + glob: "npm:^9.2.0" + bin: + rimraf: dist/cjs/src/bin.js + checksum: 10c0/8c5e142d26d8b222be9dc9a1a41ba48e95d8f374e813e66a8533e87c6180174fcb3f573b9b592eca12740ebf8b78526d136acd971d4a790763d6f2232c34fa24 + languageName: node + linkType: hard + +"rsync@npm:^0.6.1": + version: 0.6.1 + resolution: "rsync@npm:0.6.1" + checksum: 10c0/90f6717177ae681d357806153aa27e0598c605ffe01a6c24671f96994146a594c9eebf7251b772e94ca1d1a673628dce4836e6771f0c20e0f41a57c18ccd2da7 + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.2, safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" + isarray: "npm:^2.0.5" + checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safe-push-apply@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-push-apply@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + isarray: "npm:^2.0.5" + checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:^2.1.2, safer-buffer@npm:~2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"sanitize-html@npm:^2.6.1": + version: 2.14.0 + resolution: "sanitize-html@npm:2.14.0" + dependencies: + deepmerge: "npm:^4.2.2" + escape-string-regexp: "npm:^4.0.0" + htmlparser2: "npm:^8.0.0" + is-plain-object: "npm:^5.0.0" + parse-srcset: "npm:^1.0.2" + postcss: "npm:^8.3.11" + checksum: 10c0/7e001ab18d09ce5c4d0dbb6837c7a36f132874267e5b724cdef79b21188b55e652a591d79d297f9473aaf80cf96bb1894c3fa1046ccba977ed9aa365d6eb3a5c + languageName: node + linkType: hard + +"sax@npm:^1.2.4": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c + languageName: node + linkType: hard + +"security-context@npm:^4.0.0": + version: 4.0.0 + resolution: "security-context@npm:4.0.0" + checksum: 10c0/234e466945bdaf8dedf9538ebb88b6041485076de3ce74af4fa9ad90ecb38df59ffd050aac888c513484de3a45a7e09c603692e72c0dcbce24f024e2ed03ac3c + languageName: node + linkType: hard + +"semapps-middleware@workspace:.": + version: 0.0.0-use.local + resolution: "semapps-middleware@workspace:." + dependencies: + "@types/dotenv-flow": "npm:^3.3.3" + "@types/ioredis": "npm:^4.27.0" + "@types/node-fetch": "npm:^2.6.13" + "@types/streamify-string": "npm:^1.0.4" + "@typescript-eslint/eslint-plugin": "npm:^7.1.1" + "@typescript-eslint/parser": "npm:^7.5.0" + eslint: "npm:^8.2.0" + eslint-config-airbnb: "npm:^19.0.4" + eslint-config-prettier: "npm:^9.1.0" + eslint-import-resolver-typescript: "npm:^3.6.1" + eslint-plugin-import: "npm:^2.29.1" + eslint-plugin-jest: "npm:^27.9.0" + eslint-plugin-jsdoc: "npm:^48.2.1" + eslint-plugin-node: "npm:^11.1.0" + eslint-plugin-prettier: "npm:^5.1.3" + lerna: "npm:^8.0.1" + moleculer: "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + nx: "npm:17.2.5" + prettier: "npm:^3.1.1" + typescript: "npm:^5.9.2" + languageName: unknown + linkType: soft + +"semapps-tests@workspace:tests": + version: 0.0.0-use.local + resolution: "semapps-tests@workspace:tests" + dependencies: + "@babel/core": "npm:^7.28.0" + "@babel/plugin-transform-runtime": "npm:^7.28.0" + "@babel/preset-env": "npm:^7.28.0" + "@babel/preset-typescript": "npm:^7.27.1" + "@jest/globals": "npm:^30.0.5" + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/activitypub": "npm:1.1.4" + "@semapps/auth": "npm:1.1.4" + "@semapps/core": "npm:1.1.4" + "@semapps/crypto": "npm:1.1.4" + "@semapps/inference": "npm:1.1.4" + "@semapps/jsonld": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/sync": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@semapps/webacl": "npm:1.1.4" + "@semapps/webid": "npm:1.1.4" + "@types/ioredis": "npm:^4.27.0" + "@types/jest": "npm:^30.0.0" + babel-jest: "npm:^30.0.5" + babel-plugin-transform-import-meta: "npm:^2.3.3" + babel-preset-vite: "npm:^1.1.3" + dotenv-flow: "npm:^3.1.0" + expect-type: "npm:^1.2.2" + fs-extra: "npm:^9.0.1" + http-link-header: "npm:^1.1.1" + ioredis: "npm:^4.27.0" + jest: "npm:^30.0.5" + lru-cache: "npm:10.1.0" + moleculer: "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + moleculer-web: "npm:^0.10.7" + node-fetch: "npm:^2.6.6" + rdf-data-model: "npm:^1.0.0" + supertest: "npm:^4.0.2" + url-join: "npm:^4.0.1" + wait-for-expect: "npm:^3.0.2" + languageName: unknown + linkType: soft + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:7.5.3": + version: 7.5.3 + resolution: "semver@npm:7.5.3" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/4cf3bab7e8cf8c2ae521fc4bcc50a4d6912a836360796b23b9f1c26f45d27a73f870e47664df4770bde0dd60dc4d4781a05fd49fe91d72376ea5519b9e791459 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"semver@npm:^7.7.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 + languageName: node + linkType: hard + +"serialize-error@npm:^5.0.0": + version: 5.0.0 + resolution: "serialize-error@npm:5.0.0" + dependencies: + type-fest: "npm:^0.8.0" + checksum: 10c0/6934419798421a14536178d7ab70b9676dc747813817ec9841c96aeb87759f436a71feb241593c6f6aa9a697c0429285aef892d459e7d8cd5156b1d35f1606a1 + languageName: node + linkType: hard + +"serialize-error@npm:^8.1.0": + version: 8.1.0 + resolution: "serialize-error@npm:8.1.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/8cfd89f43ca93e283c5f1d16178a536bdfac9bc6029f4a9df988610cc399bc4f2478d1f10ce40b9dff66b863a5158a19b438fbec929045c96d92174f6bca1e88 + languageName: node + linkType: hard + +"serve-static@npm:^1.14.1": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.19.0" + checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" + dependencies: + dunder-proto: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"sharp@npm:^0.31.2": + version: 0.31.3 + resolution: "sharp@npm:0.31.3" + dependencies: + color: "npm:^4.2.3" + detect-libc: "npm:^2.0.1" + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + semver: "npm:^7.3.8" + simple-get: "npm:^4.0.1" + tar-fs: "npm:^2.1.1" + tunnel-agent: "npm:^0.6.0" + checksum: 10c0/22cab24b7145546f25cd5e2a27841880405335ddeeb4e05be6e32d4221baac4fd89d0fb31c397a0cea31b6f1b6b139d4eb49d036cdba1f33175ffa0b1a4eccfc + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: "npm:^1.0.0" + checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"sigstore@npm:^2.2.0": + version: 2.3.1 + resolution: "sigstore@npm:2.3.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + "@sigstore/sign": "npm:^2.3.2" + "@sigstore/tuf": "npm:^2.3.4" + "@sigstore/verify": "npm:^1.2.1" + checksum: 10c0/8906b1074130d430d707e46f15c66eb6996891dc0d068705f1884fb1251a4a367f437267d44102cdebcee34f1768b3f30131a2ec8fb7aac74ba250903a459aa7 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: "npm:^0.3.1" + checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 + languageName: node + linkType: hard + +"slash@npm:3.0.0, slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slashes@npm:^3.0.12": + version: 3.0.12 + resolution: "slashes@npm:3.0.12" + checksum: 10c0/71ca2a1fcd1ab6814b0fdb8cf9c33a3d54321deec2aa8d173510f0086880201446021a9b9e6a18561f7c472b69a2145977c6a8fb9c53a8ff7be31778f203d175 + languageName: node + linkType: hard + +"slick@npm:^1.12.2": + version: 1.12.2 + resolution: "slick@npm:1.12.2" + checksum: 10c0/fea97c36b2bdcd1b80caea150cd8135dc9d3ffe659bbe04fa6f4b4dff373f5d5aef09a8ef384b331c3fdd9567faf447b75b850ab35d2c69ff8a8a92def3d49e1 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"sodium-native@npm:^3.2.0": + version: 3.4.1 + resolution: "sodium-native@npm:3.4.1" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10c0/b67de94d80a234d348e3bbcd27f39243f974dfdb5e2538b146433c5f2a42ce4697ce3bf5dff8a2803dab16486167e8cc755af426ff2934cb5ca393cb5b116c77 + languageName: node + linkType: hard + +"sort-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "sort-keys@npm:2.0.0" + dependencies: + is-plain-obj: "npm:^1.0.0" + checksum: 10c0/c11a6313995cb67ccf35fed4b1f6734176cc1d1e350ee311c061a2340ada4f7e23b046db064d518b63adba98c0f763739920c59fb4659a0b8482ec7a1f255081 + languageName: node + linkType: hard + +"sorted-array-functions@npm:^1.3.0": + version: 1.3.0 + resolution: "sorted-array-functions@npm:1.3.0" + checksum: 10c0/d94e3401a2bc1689dc913f56939621c892a3ff1288e984e85689a6c6e46b0ec16f65edc8b47d46b0f09d06857f67ca245553b462da597619102b9fad270476d9 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"sparqlalgebrajs@npm:^3.0.1": + version: 3.0.3 + resolution: "sparqlalgebrajs@npm:3.0.3" + dependencies: + "@rdfjs/types": "npm:*" + "@types/sparqljs": "npm:^3.1.2" + fast-deep-equal: "npm:^3.1.3" + minimist: "npm:^1.2.5" + rdf-data-factory: "npm:^1.1.0" + rdf-isomorphic: "npm:^1.3.0" + rdf-string: "npm:^1.6.0" + sparqljs: "npm:^3.4.2" + bin: + sparqlalgebrajs: bin/sparqlalgebrajs.js + checksum: 10c0/4074b864f72857303cbabe2771e790e28429cd732d89d61e541fa3629a333c239b5878e286b88001eb539fd2237e5d57273bff6dae2206da74a7c647f8cfef1d + languageName: node + linkType: hard + +"sparqljs@npm:^3.4.2, sparqljs@npm:^3.5.2": + version: 3.7.3 + resolution: "sparqljs@npm:3.7.3" + dependencies: + rdf-data-factory: "npm:^1.1.2" + bin: + sparqljs: bin/sparql-to-json + checksum: 10c0/733323136c490e6454ced4cdd02023054a8893c3bf9e739ccd39f526a96ef5edcf42352c4f0cf2c90847292a239dfe4c68bd35f044699e2f585601a0c56c1c70 + languageName: node + linkType: hard + +"sparqljson-parse@npm:^1.5.1": + version: 1.7.0 + resolution: "sparqljson-parse@npm:1.7.0" + dependencies: + "@rdfjs/types": "npm:*" + "@types/node": "npm:^13.1.0" + JSONStream: "npm:^1.3.3" + rdf-data-factory: "npm:^1.1.0" + checksum: 10c0/010c94b9bc37e545c3fe2f90c53ac033a652d76bd8075e21bf9fd9d6c78c92081d67c20b3384208e937c2695ff9d849fca8344597fe95653960fe5390f605ecc + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^4.0.0": + version: 4.0.0 + resolution: "spdx-expression-parse@npm:4.0.0" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.21 + resolution: "spdx-license-ids@npm:3.0.21" + checksum: 10c0/ecb24c698d8496aa9efe23e0b1f751f8a7a89faedcdfcbfabae772b546c2db46ccde8f3bc447a238eb86bbcd4f73fea88720ef3b8394f7896381bec3d7736411 + languageName: node + linkType: hard + +"speakingurl@npm:^14.0.1": + version: 14.0.1 + resolution: "speakingurl@npm:14.0.1" + checksum: 10c0/1de1d1b938a7c4d9e79593ff7a26d312ec04a7c3234ca40b7f9b8106daf74ea9d2110a077f5db97ecf3762b83069e3ccbf9694431b51d4fcfd863f0b3333c342 + languageName: node + linkType: hard + +"split2@npm:^3.2.2": + version: 3.2.2 + resolution: "split2@npm:3.2.2" + dependencies: + readable-stream: "npm:^3.0.0" + checksum: 10c0/2dad5603c52b353939befa3e2f108f6e3aff42b204ad0f5f16dd12fd7c2beab48d117184ce6f7c8854f9ee5ffec6faae70d243711dd7d143a9f635b4a285de4e + languageName: node + linkType: hard + +"split@npm:^1.0.1": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: "npm:2" + checksum: 10c0/7f489e7ed5ff8a2e43295f30a5197ffcb2d6202c9cf99357f9690d645b19c812bccf0be3ff336fea5054cda17ac96b91d67147d95dbfc31fbb5804c61962af85 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.1, sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssh2-sftp-client@npm:^7.2.1": + version: 7.2.3 + resolution: "ssh2-sftp-client@npm:7.2.3" + dependencies: + concat-stream: "npm:^2.0.0" + promise-retry: "npm:^2.0.1" + ssh2: "npm:^1.8.0" + checksum: 10c0/780da50d87789af1f943490b1ad11797cf60f20761345c14ba920b90fec845a7fc8e11093ea26ddb4619ea3727fa75d71ca21dca72e6d4f3b7324c985b31801e + languageName: node + linkType: hard + +"ssh2@npm:^1.8.0": + version: 1.16.0 + resolution: "ssh2@npm:1.16.0" + dependencies: + asn1: "npm:^0.2.6" + bcrypt-pbkdf: "npm:^1.0.2" + cpu-features: "npm:~0.0.10" + nan: "npm:^2.20.0" + dependenciesMeta: + cpu-features: + optional: true + nan: + optional: true + checksum: 10c0/d336a85d87501c64ba230b6c1a2901a9b0e376fe7f7a1640a7f8dbdafe674b2e1a5dc6236ffd1329969dc0cf03cd57759b28743075e61229a984065ee1d56bed + languageName: node + linkType: hard + +"sshpk@npm:^1.18.0, sshpk@npm:^1.7.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: "npm:~0.2.3" + assert-plus: "npm:^1.0.0" + bcrypt-pbkdf: "npm:^1.0.0" + dashdash: "npm:^1.12.0" + ecc-jsbn: "npm:~0.1.1" + getpass: "npm:^0.1.1" + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.0.2" + tweetnacl: "npm:~0.14.0" + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0, ssri@npm:^10.0.6": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"stable-hash@npm:^0.0.4": + version: 0.0.4 + resolution: "stable-hash@npm:0.0.4" + checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.6": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"standard-as-callback@npm:^2.1.0": + version: 2.1.0 + resolution: "standard-as-callback@npm:2.1.0" + checksum: 10c0/012677236e3d3fdc5689d29e64ea8a599331c4babe86956bf92fc5e127d53f85411c5536ee0079c52c43beb0026b5ce7aa1d834dd35dd026e82a15d1bcaead1f + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + +"stream-to-string@npm:^1.2.0": + version: 1.2.1 + resolution: "stream-to-string@npm:1.2.1" + dependencies: + promise-polyfill: "npm:^1.1.6" + checksum: 10c0/08b764a17ad7615f5daa188120448dc4d06b097a3c515e337378e1653bc815ad25d388a44e0e2b98b7637841913c42a6734c1f60d142b2e7827f4b41d62d112a + languageName: node + linkType: hard + +"streamify-string@npm:^1.0.1": + version: 1.0.1 + resolution: "streamify-string@npm:1.0.1" + checksum: 10c0/d6b72771ab8a8a15e822a636e3bbe9debe34aa59901cc90a6b8e27cd6f02d52f0335704ed32c4cd69b2dab0a192f503877d53718a51282fe4901f7e9092c8b5b + languageName: node + linkType: hard + +"streamsearch@npm:0.1.2": + version: 0.1.2 + resolution: "streamsearch@npm:0.1.2" + checksum: 10c0/408a3db5b5643c1d6eb65c9d8ccc011b4857bfca41946d808b7f165b5b85f47755b2ff56ec1c4bbbeb5a496afcde9adfea12f9f67bd09ff3f04ae3f1f58d37c6 + languageName: node + linkType: hard + +"string-length@npm:^4.0.2": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: "npm:^1.0.2" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c + languageName: node + linkType: hard + +"string-template@npm:^1.0.0": + version: 1.0.0 + resolution: "string-template@npm:1.0.0" + checksum: 10c0/7c07ab5b4274a50b1f077a47769044b9a8f0a5a4a47811cf3f9ba5acc9d2ff1231d593a93983ea554c3211fb09949e805912f9ce9d7688990eeb41d5008b95d2 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-object-atoms: "npm:^1.0.0" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"string_decoder@npm:~0.10.x": + version: 0.10.31 + resolution: "string_decoder@npm:0.10.31" + checksum: 10c0/1c628d78f974aa7539c496029f48e7019acc32487fc695464f9d6bdfec98edd7d933a06b3216bc2016918f6e75074c611d84430a53cb0e43071597d6c1ac5e25 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: "npm:^1.0.0" + checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": + version: 2.1.0 + resolution: "strong-log-transformer@npm:2.1.0" + dependencies: + duplexer: "npm:^0.1.1" + minimist: "npm:^1.2.0" + through: "npm:^2.3.4" + bin: + sl-log-transformer: bin/sl-log-transformer.js + checksum: 10c0/3c3b8aa8f34d661910563ff996412e2f527fc814e699a376854b554d4a4294ab7e285b4e2c08a080a7b19c5600a9b93a98798d3ac600fe3de545ca6605c07829 + languageName: node + linkType: hard + +"superagent@npm:^3.8.3": + version: 3.8.3 + resolution: "superagent@npm:3.8.3" + dependencies: + component-emitter: "npm:^1.2.0" + cookiejar: "npm:^2.1.0" + debug: "npm:^3.1.0" + extend: "npm:^3.0.0" + form-data: "npm:^2.3.1" + formidable: "npm:^1.2.0" + methods: "npm:^1.1.1" + mime: "npm:^1.4.1" + qs: "npm:^6.5.1" + readable-stream: "npm:^2.3.5" + checksum: 10c0/e467c39aee7aa57dc2e45b5c7c76d70a7ad4fff8d3d2b57a2da0edfaca0e598562fc9f8f74a1383661744f68b3dfd2cca388a3000b41d6c2d8e0e5d031d152fe + languageName: node + linkType: hard + +"supertest@npm:^4.0.2": + version: 4.0.2 + resolution: "supertest@npm:4.0.2" + dependencies: + methods: "npm:^1.1.2" + superagent: "npm:^3.8.3" + checksum: 10c0/436ab991ae9242e695374d0006bf2dd16fbbab287966d0176c92eaf8f9a124a839a0ff6db22f46d1de0faeec3752ff8ebfbe051681c050032acab9f4af192399 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"synckit@npm:^0.11.8": + version: 0.11.11 + resolution: "synckit@npm:0.11.11" + dependencies: + "@pkgr/core": "npm:^0.2.9" + checksum: 10c0/f0761495953d12d94a86edf6326b3a565496c72f9b94c02549b6961fb4d999f4ca316ce6b3eb8ed2e4bfc5056a8de65cda0bd03a233333a35221cd2fdc0e196b + languageName: node + linkType: hard + +"synckit@npm:^0.9.1": + version: 0.9.2 + resolution: "synckit@npm:0.9.2" + dependencies: + "@pkgr/core": "npm:^0.1.0" + tslib: "npm:^2.6.2" + checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59 + languageName: node + linkType: hard + +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": + version: 2.1.2 + resolution: "tar-fs@npm:2.1.2" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10c0/9c704bd4a53be7565caf34ed001d1428532457fe3546d8fc1233f0f0882c3d2403f8602e8046e0b0adeb31fe95336572a69fb28851a391523126b697537670fc + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4, tar-stream@npm:~2.2.0": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"temp-dir@npm:1.0.0": + version: 1.0.0 + resolution: "temp-dir@npm:1.0.0" + checksum: 10c0/648669d5e154d1961217784c786acadccf0156519c19e0aceda7edc76f5bdfa32a40dd7f88ebea9238ed6e3dedf08b846161916c8947058c384761351be90a8e + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^7.1.4" + minimatch: "npm:^3.0.4" + checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 + languageName: node + linkType: hard + +"text-decoding@npm:^1.0.0": + version: 1.0.0 + resolution: "text-decoding@npm:1.0.0" + checksum: 10c0/290dbd6111f39a4020b3e2384de614f90051eff3cd11176329fda0a40ac0b0a07e6820b9aeb4b0b7c2cc7869b62cd3b25944c71e9e16b628bcf57299ab84e311 + languageName: node + linkType: hard + +"text-extensions@npm:^1.0.0": + version: 1.9.0 + resolution: "text-extensions@npm:1.9.0" + checksum: 10c0/9ad5a9f723a871e2d884e132d7e93f281c60b5759c95f3f6b04704856548715d93a36c10dbaf5f12b91bf405f0cf3893bf169d4d143c0f5509563b992d385443 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: "npm:~2.3.6" + xtend: "npm:~4.0.1" + checksum: 10c0/cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + +"tmp@npm:~0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"token-stream@npm:1.0.0": + version: 1.0.0 + resolution: "token-stream@npm:1.0.0" + checksum: 10c0/c1924a89686fc035d579cbe856da12306571d5fe7408eeeebe80df7c25c5cc644b8ae102d5cbc0f085d0e105f391d1a48dc0e568520434c5b444ea6c7de2b822 + languageName: node + linkType: hard + +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: "npm:^1.1.28" + punycode: "npm:^2.1.1" + checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"treeverse@npm:^3.0.0": + version: 3.0.0 + resolution: "treeverse@npm:3.0.0" + checksum: 10c0/286479b9c05a8fb0538ee7d67a5502cea7704f258057c784c9c1118a2f598788b2c0f7a8d89e74648af88af0225b31766acecd78e6060736f09b21dd3fa255db + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: 10c0/03cfefde6c59ff57138412b8c6be922ecc5aec30694d784f2a65ef8dcbd47faef580b7de0c949345abdc56ec4b4abf64dd1e5aea619b200316e471a3dd5bf1f6 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.3.0": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": "npm:^0.0.29" + json5: "npm:^1.0.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^4.1.2": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: "npm:^2.2.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/09a5877402d082bb1134930c10249edeebc0211f36150c35e1c542e5b91f1047b1ccf7da1e59babca1ef1f014c525510f4f870de7c9bda470c73bb4e2721b3ea + languageName: node + linkType: hard + +"tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: "npm:^1.8.1" + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 + languageName: node + linkType: hard + +"ttl@npm:^1.3.0": + version: 1.3.1 + resolution: "ttl@npm:1.3.1" + checksum: 10c0/097d898ceedc4fcdcd767c28c880096c78f5d69ecf6ddd95a0b465abc61f486c8f4f9dda2d527cb159a7d51f3bbdaeb703fff71b6f968a3d12396046ecd6d13c + languageName: node + linkType: hard + +"tuf-js@npm:^2.2.1": + version: 2.2.1 + resolution: "tuf-js@npm:2.2.1" + dependencies: + "@tufjs/models": "npm:2.0.1" + debug: "npm:^4.3.4" + make-fetch-happen: "npm:^13.0.1" + checksum: 10c0/7c17b097571f001730d7be0aeaec6bec46ed2f25bf73990b1133c383d511a1ce65f831e5d6d78770940a85b67664576ff0e4c98e5421bab6d33ff36e4be500c8 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: 10c0/303f5ecf40d03e1d5b635ce7660de3b33c18ed8ebc65d64920c02974d9e684c72483c23f9084587e9dd6466a2ece1da42ddc95b412a461794dd30baca95e2bac + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^0.4.1": + version: 0.4.1 + resolution: "type-fest@npm:0.4.1" + checksum: 10c0/2e65f43209492638244842f70d86e7325361c92dd1cc8e3bf5728c96b980305087fa5ba60652e9053d56c302ef4f1beb9652a91b72a50da0ea66c6b851f3b9cb + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: 10c0/0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: "npm:0.3.0" + mime-types: "npm:~2.1.24" + checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + reflect.getprototypeof: "npm:^1.0.9" + checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + reflect.getprototypeof: "npm:^1.0.6" + checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412 + languageName: node + linkType: hard + +"typescript@npm:>=3 < 6": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa + languageName: node + linkType: hard + +"typescript@npm:^5.9.2": + version: 5.9.2 + resolution: "typescript@npm:5.9.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": + version: 5.9.2 + resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" + bin: + uglifyjs: bin/uglifyjs + checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 + languageName: node + linkType: hard + +"uid-safe@npm:~2.1.5": + version: 2.1.5 + resolution: "uid-safe@npm:2.1.5" + dependencies: + random-bytes: "npm:~1.0.0" + checksum: 10c0/ec96862e859fd12175f3da7fda9d1359a2cf412fd521e10837cbdc6d554774079ce252f366981df9401283841c8924782f6dbee8f82a3a81f805ed8a8584595d + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + which-boxed-primitive: "npm:^1.1.1" + checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 + languageName: node + linkType: hard + +"underscore.string@npm:^3.2.3": + version: 3.3.6 + resolution: "underscore.string@npm:3.3.6" + dependencies: + sprintf-js: "npm:^1.1.1" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/172319c7ef5436587e6f0fb5afe0b2e6b50f723a4070c7fb3454c5dfa5398ed3b7042c049eac2826bdd44d37cbd16b2b965d0ccc1597fde354b1d3a846fd4a39 + languageName: node + linkType: hard + +"underscore@npm:^1.8.3": + version: 1.13.7 + resolution: "underscore@npm:1.13.7" + checksum: 10c0/fad2b4aac48847674aaf3c30558f383399d4fdafad6dd02dd60e4e1b8103b52c5a9e5937e0cc05dacfd26d6a0132ed0410ab4258241240757e4a4424507471cd + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 + languageName: node + linkType: hard + +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf + languageName: node + linkType: hard + +"undici@npm:^5.21.2": + version: 5.28.5 + resolution: "undici@npm:5.28.5" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10c0/4dfaa13089fe4c0758f84ec0d34b257e58608e6be3aa540f493b9864b39e3fdcd0a1ace38e434fe79db55f833aa30bcfddd8d6cbe3e0982b0dcae8ec17b65e08 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"universal-user-agent@npm:^6.0.0": + version: 6.0.1 + resolution: "universal-user-agent@npm:6.0.1" + checksum: 10c0/5c9c46ffe19a975e11e6443640ed4c9e0ce48fcc7203325757a8414ac49940ebb0f4667f2b1fa561489d1eb22cb2d05a0f7c82ec20c5cba42e58e188fb19b187 + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unpipe@npm:1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + +"unrs-resolver@npm:^1.7.11": + version: 1.11.1 + resolution: "unrs-resolver@npm:1.11.1" + dependencies: + "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" + "@unrs/resolver-binding-android-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" + "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" + napi-postinstall: "npm:^0.3.0" + dependenciesMeta: + "@unrs/resolver-binding-android-arm-eabi": + optional: true + "@unrs/resolver-binding-android-arm64": + optional: true + "@unrs/resolver-binding-darwin-arm64": + optional: true + "@unrs/resolver-binding-darwin-x64": + optional: true + "@unrs/resolver-binding-freebsd-x64": + optional: true + "@unrs/resolver-binding-linux-arm-gnueabihf": + optional: true + "@unrs/resolver-binding-linux-arm-musleabihf": + optional: true + "@unrs/resolver-binding-linux-arm64-gnu": + optional: true + "@unrs/resolver-binding-linux-arm64-musl": + optional: true + "@unrs/resolver-binding-linux-ppc64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-musl": + optional: true + "@unrs/resolver-binding-linux-s390x-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-musl": + optional: true + "@unrs/resolver-binding-wasm32-wasi": + optional: true + "@unrs/resolver-binding-win32-arm64-msvc": + optional: true + "@unrs/resolver-binding-win32-ia32-msvc": + optional: true + "@unrs/resolver-binding-win32-x64-msvc": + optional: true + checksum: 10c0/c91b112c71a33d6b24e5c708dab43ab80911f2df8ee65b87cd7a18fb5af446708e98c4b415ca262026ad8df326debcc7ca6a801b2935504d87fd6f0b9d70dce1 + languageName: node + linkType: hard + +"upath@npm:2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.1": + version: 1.1.2 + resolution: "update-browserslist-db@npm:1.1.2" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"url-join@npm:^4.0.1": + version: 4.0.1 + resolution: "url-join@npm:4.0.1" + checksum: 10c0/ac65e2c7c562d7b49b68edddcf55385d3e922bc1dd5d90419ea40b53b6de1607d1e45ceb71efb9d60da02c681d13c6cb3a1aa8b13fc0c989dfc219df97ee992d + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"util.promisify@npm:^1.0.1": + version: 1.1.3 + resolution: "util.promisify@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + for-each: "npm:^0.3.3" + get-intrinsic: "npm:^1.2.6" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + object.getownpropertydescriptors: "npm:^2.1.8" + safe-array-concat: "npm:^1.1.3" + checksum: 10c0/b7a2f721222ffc26f8a12a1cdc44a81b16a614b81f2d6f71f50c8b214a20afe8324d5f0700f04759d6ea33446ba0730e4ef0b4e2c4f4ef5adca16dabd502fa2b + languageName: node + linkType: hard + +"util@npm:^0.12.4": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: "npm:^2.0.3" + is-arguments: "npm:^1.0.4" + is-generator-function: "npm:^1.0.7" + is-typed-array: "npm:^1.1.3" + which-typed-array: "npm:^1.1.2" + checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 + languageName: node + linkType: hard + +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe + languageName: node + linkType: hard + +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 + languageName: node + linkType: hard + +"uuid@npm:^8.3.0": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + +"uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.12" + "@types/istanbul-lib-coverage": "npm:^2.0.1" + convert-source-map: "npm:^2.0.0" + checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 + languageName: node + linkType: hard + +"valid-data-url@npm:^2.0.0": + version: 2.0.0 + resolution: "valid-data-url@npm:2.0.0" + checksum: 10c0/4e34ccf43139656770ce8474b2a49aa825ab793811ef37713041fa63e24197b02715908bbd40edacc247c592a1b0fa8d3f8279983655c6417eed5bf444eb1d7a + languageName: node + linkType: hard + +"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + +"validate-npm-package-name@npm:5.0.1, validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 + languageName: node + linkType: hard + +"vc-js@npm:^0.6.4": + version: 0.6.4 + resolution: "vc-js@npm:0.6.4" + dependencies: + commander: "npm:^2.20.3" + credentials-context: "npm:^1.0.0" + debug: "npm:^4.1.1" + fs-extra: "npm:^8.1.0" + get-stdin: "npm:^7.0.0" + jsonld: "npm:^2.0.2" + jsonld-signatures: "npm:^5.0.0" + supports-color: "npm:^7.1.0" + bin: + vc-js: bin/vc-js + checksum: 10c0/04b33fce6688c293ed078c09aa5a68f41a27cff0f298338290c1a3bd7db8a51e805f6220c89d3d15925d3621f2f00270f19891feed1d5bf32b8880d87484c3f4 + languageName: node + linkType: hard + +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: "npm:^1.0.0" + core-util-is: "npm:1.0.2" + extsprintf: "npm:^1.2.0" + checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d + languageName: node + linkType: hard + +"void-elements@npm:^3.1.0": + version: 3.1.0 + resolution: "void-elements@npm:3.1.0" + checksum: 10c0/0b8686f9f9aa44012e9bd5eabf287ae0cde409b9a2854c5a2335cb83920c957668ac5876e3f0d158dd424744ac411a7270e64128556b451ed3bec875ef18534d + languageName: node + linkType: hard + +"wait-for-expect@npm:^3.0.2": + version: 3.0.2 + resolution: "wait-for-expect@npm:3.0.2" + checksum: 10c0/9616b82381f6571a0f3ed235a62ecdaf529816c9eef04f665ee1b8b515c3b7e1dc90d781111b6284bb777f45c4742f6c058d549a44d9d6e367ffd4d34f5f3b9e + languageName: node + linkType: hard + +"walk-up-path@npm:^3.0.1": + version: 3.0.1 + resolution: "walk-up-path@npm:3.0.1" + checksum: 10c0/3184738e0cf33698dd58b0ee4418285b9c811e58698f52c1f025435a85c25cbc5a63fee599f1a79cb29ca7ef09a44ec9417b16bfd906b1a37c305f7aa20ee5bc + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: "npm:1.0.12" + checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 + languageName: node + linkType: hard + +"web-resource-inliner@npm:^4.2.1": + version: 4.3.4 + resolution: "web-resource-inliner@npm:4.3.4" + dependencies: + async: "npm:^3.1.0" + chalk: "npm:^2.4.2" + datauri: "npm:^2.0.0" + htmlparser2: "npm:^4.0.0" + lodash.unescape: "npm:^4.0.1" + request: "npm:^2.88.0" + safer-buffer: "npm:^2.1.2" + valid-data-url: "npm:^2.0.0" + xtend: "npm:^4.0.2" + checksum: 10c0/2e7b87449ceea0220398c0c509396302a71c9b429968187a61f4fc704de428f593ff5f671335ad6d3b4a3aa0752911ad0ee9c30789cffb687176352be238bb57 + languageName: node + linkType: hard + +"web-streams-node@npm:^0.4.0": + version: 0.4.0 + resolution: "web-streams-node@npm:0.4.0" + dependencies: + is-stream: "npm:^1.1.0" + readable-stream-node-to-web: "npm:^1.0.1" + web-streams-ponyfill: "npm:^1.4.1" + checksum: 10c0/356292e85f1b9afa39a0470f6abf1ab3866504371862bce4851a9ab99f8510fc06c1c0f8490536ca2ae02797f63dec4d186482468ab2cc547e4c1a8546b4b2e3 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"web-streams-ponyfill@npm:^1.4.1": + version: 1.4.2 + resolution: "web-streams-ponyfill@npm:1.4.2" + checksum: 10c0/bcaed7e8c6359511f2e07054d399675441f8baf05075ed171f7781020731c71a3455fbd4a70a4038a461aa82941d3186679d0c74bfeaa855537db973da390f6c + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" + dependencies: + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.1" + is-number-object: "npm:^1.1.1" + is-string: "npm:^1.1.1" + is-symbol: "npm:^1.1.1" + checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" + is-async-function: "npm:^2.0.0" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" + is-generator-function: "npm:^1.0.10" + is-regex: "npm:^1.2.1" + is-weakref: "npm:^1.0.2" + isarray: "npm:^2.0.5" + which-boxed-primitive: "npm:^1.1.0" + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.16" + checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.2": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: "npm:^2.0.3" + is-set: "npm:^2.0.3" + is-weakmap: "npm:^2.0.2" + is-weakset: "npm:^2.0.3" + checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.2": + version: 1.1.18 + resolution: "which-typed-array@npm:1.1.18" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"wide-align@npm:1.1.5, wide-align@npm:^1.1.2": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 + languageName: node + linkType: hard + +"with@npm:^7.0.0": + version: 7.0.2 + resolution: "with@npm:7.0.2" + dependencies: + "@babel/parser": "npm:^7.9.6" + "@babel/types": "npm:^7.9.6" + assert-never: "npm:^1.2.1" + babel-walk: "npm:3.0.0-canary-5" + checksum: 10c0/99289e49afc4b1776afae0ef85e84cfa775e8e07464d2b9853a31b0822347031d1cf77f287d25adc8c3f81e4fa68f4ee31526a9c95d4981ba08a1fe24dee111a + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 + languageName: node + linkType: hard + +"wordwrap@npm:~0.0.2": + version: 0.0.3 + resolution: "wordwrap@npm:0.0.3" + checksum: 10c0/b3b212f8b2167091f59bc60929ada2166eb157abb6c8c82e2a705fe5aa5876440c3966ab39eb6c7bcb2ff0ac0c8d9fba726a9c2057b83bd65cdc1858f9d816ce + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.0.1": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.4.2": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: "npm:^4.1.11" + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8cb4bba0c1ab814a9b127844da0db4fb8c5e06ddbe6317b8b319377c73b283673036c8b9360120062898508b9428d81611cf7fa97584504a00bc179b2a580b92 + languageName: node + linkType: hard + +"write-json-file@npm:^3.2.0": + version: 3.2.0 + resolution: "write-json-file@npm:3.2.0" + dependencies: + detect-indent: "npm:^5.0.0" + graceful-fs: "npm:^4.1.15" + make-dir: "npm:^2.1.0" + pify: "npm:^4.0.1" + sort-keys: "npm:^2.0.0" + write-file-atomic: "npm:^2.4.2" + checksum: 10c0/3eadcb6e832ac34dbba37d4eea8871d9fef0e0d77c486b13ed5f81d84a8fcecd9e1a04277e2691eb803c2bed39c2a315e98b96f492c271acee2836acc6276043 + languageName: node + linkType: hard + +"write-pkg@npm:4.0.0": + version: 4.0.0 + resolution: "write-pkg@npm:4.0.0" + dependencies: + sort-keys: "npm:^2.0.0" + type-fest: "npm:^0.4.1" + write-json-file: "npm:^3.2.0" + checksum: 10c0/8e20db5fa444dad04e3703c18d8e0f89679caa60accbee5da9ea3aa076430b3f32d99f50d8860d29044245775795455c62d12d16a7856d407e30df7b79f39505 + languageName: node + linkType: hard + +"xmldom@npm:0.1.19": + version: 0.1.19 + resolution: "xmldom@npm:0.1.19" + checksum: 10c0/e0634db88f7485285ce0381112b28c2136b6754109e6e0f49576a9e52c2dc6f22f9558cd37126a6f18d15c9da6cd55a546dd223f8e9643326358e3eb38d23da2 + languageName: node + linkType: hard + +"xtend@npm:^4.0.2, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^2.1.2": + version: 2.1.2 + resolution: "yallist@npm:2.1.2" + checksum: 10c0/0b9e25aa00adf19e01d2bcd4b208aee2b0db643d9927131797b7af5ff69480fc80f1c3db738cbf3946f0bddf39d8f2d0a5709c644fd42d4aa3a4e6e786c087b5 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^2.6.0": + version: 2.7.0 + resolution: "yaml@npm:2.7.0" + bin: + yaml: bin.mjs + checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 + languageName: node + linkType: hard + +"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + +"yargs@npm:17.7.2, yargs@npm:^17.6.2, yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: "npm:^7.0.2" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^20.2.2" + checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..40c39e401 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,15 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/node@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.0.tgz#cde712f88c5190006d6b069232582ecd1f94a760" + integrity sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw== + dependencies: + undici-types "~7.10.0" + +undici-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== From dc591fc6eeeb5efebca898dc34472e9aa0fbde21 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 7 Aug 2025 10:31:22 +0200 Subject: [PATCH 035/165] Migrate utils --- .../packages/ldp/mixins/orphan-files-deletion.js | 13 ++++++++++--- .../ldp/services/container/actions/delete.js | 6 +++++- .../ldp/services/container/actions/detach.js | 9 ++++----- .../ldp/services/container/actions/getAll.js | 4 +++- .../ldp/services/container/actions/getUris.js | 4 +++- .../ldp/services/container/actions/includes.js | 14 ++++++-------- .../ldp/services/container/actions/isEmpty.js | 8 +++++++- .../ldp/services/resource/actions/getContainers.js | 4 +++- .../ldp/services/resource/actions/getTypes.js | 4 +++- 9 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.js b/src/middleware/packages/ldp/mixins/orphan-files-deletion.js index 1ddde29dc..cf96940d1 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.js +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.js @@ -16,14 +16,21 @@ module.exports = { this.logger.info('OrphanFilesDeletion - Check...'); const containerUri = await this.actions.getContainerUri(); + + // Ignore ACL files const results = await ctx.call('triplestore.query', { query: ` SELECT ?file WHERE { - <${containerUri}> ?file . + GRAPH <${containerUri}> { + <${containerUri}> ?file . + } FILTER NOT EXISTS { - ?s ?p ?file . - FILTER(?s != <${containerUri}>) + GRAPH ?g { + ?s ?p ?file . + FILTER(?s != <${containerUri}>) + FILTER(?p != ) + } } } `, diff --git a/src/middleware/packages/ldp/services/container/actions/delete.js b/src/middleware/packages/ldp/services/container/actions/delete.js index 1884207da..588949fe1 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.js +++ b/src/middleware/packages/ldp/services/container/actions/delete.js @@ -16,12 +16,16 @@ module.exports = { query: sanitizeSparqlQuery` DELETE WHERE { - <${containerUri}> ?p1 ?o1 . + GRAPH <${containerUri}> { + <${containerUri}> ?p1 ?o1 . + } } `, webId }); + await ctx.call('triplestore.document.delete', { documentUri: containerUri }); + // Detach the container from parent containers after deletion, otherwise the permissions may fail const parentContainers = await ctx.call('ldp.resource.getContainers', { resourceUri: containerUri }); for (const parentContainerUri of parentContainers) { diff --git a/src/middleware/packages/ldp/services/container/actions/detach.js b/src/middleware/packages/ldp/services/container/actions/detach.js index 338575864..f473737b1 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.js +++ b/src/middleware/packages/ldp/services/container/actions/detach.js @@ -24,11 +24,10 @@ module.exports = { await ctx.call('triplestore.update', { query: ` DELETE - WHERE - { - ${isRemoteContainer ? `GRAPH <${this.settings.mirrorGraphName}> {` : ''} - <${containerUri}> <${resourceUri}> - ${isRemoteContainer ? '}' : ''} + WHERE { + GRAPH <${containerUri}> { + <${containerUri}> <${resourceUri}> + } } `, webId diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.js b/src/middleware/packages/ldp/services/container/actions/getAll.js index fa4af1a40..1eab4678a 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.js +++ b/src/middleware/packages/ldp/services/container/actions/getAll.js @@ -9,7 +9,9 @@ module.exports = { PREFIX ldp: SELECT ?containerUri WHERE { - ?containerUri a ldp:Container . + GRAPH ?g { + ?containerUri a ldp:Container . + } } `, dataset: ctx.params.dataset, diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.js b/src/middleware/packages/ldp/services/container/actions/getUris.js index db617b969..bb77c94fc 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.js +++ b/src/middleware/packages/ldp/services/container/actions/getUris.js @@ -11,7 +11,9 @@ module.exports = { PREFIX ldp: SELECT ?resourceUri WHERE { - <${containerUri}> ldp:contains ?resourceUri . + GRAPH <${containerUri}> { + <${containerUri}> ldp:contains ?resourceUri . + } } `, webId: 'system' diff --git a/src/middleware/packages/ldp/services/container/actions/includes.js b/src/middleware/packages/ldp/services/container/actions/includes.js index 8e6aabc30..fbb2486ee 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.js +++ b/src/middleware/packages/ldp/services/container/actions/includes.js @@ -11,20 +11,18 @@ module.exports = { async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const containerUri = ctx.params.containerUri.replace(/\/+$/, ''); - const childUri = ctx.params.resourceUri.replace(/\/+$/, ''); - - const isRemoteContainer = await ctx.call('ldp.remote.isRemote', { resourceUri: containerUri }); + const resourceUri = ctx.params.resourceUri.replace(/\/+$/, ''); return await ctx.call('triplestore.query', { query: ` PREFIX ldp: ASK WHERE { - ${isRemoteContainer ? `GRAPH <${this.settings.mirrorGraphName}> {` : ''} - ?container ldp:contains ?child . - FILTER(?container IN (<${containerUri}>, <${`${containerUri}/`}>)) . - FILTER(?child IN (<${childUri}>, <${`${childUri}/`}>)) . - ${isRemoteContainer ? '}' : ''} + GRAPH ?g { + ?containerUri ldp:contains ?resourceUri . + FILTER(?containerUri IN (<${containerUri}>, <${`${containerUri}/`}>)) . + FILTER(?resourceUri IN (<${resourceUri}>, <${`${resourceUri}/`}>)) . + } } `, webId diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.js b/src/middleware/packages/ldp/services/container/actions/isEmpty.js index f4da7cb66..2c21f9bea 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.js +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.js @@ -13,7 +13,13 @@ module.exports = { const { dataset } = ctx.meta; const res = await ctx.call('triplestore.query', { - query: `SELECT (COUNT (?o) as ?count) { <${containerUri}> ?o }`, + query: ` + SELECT (COUNT (?o) as ?count) { + GRAPH <${containerUri}> { + <${containerUri}> ?o + } + } + `, webId, dataset }); diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.js b/src/middleware/packages/ldp/services/resource/actions/getContainers.js index 20bb62d4e..af56f4eea 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.js +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.js @@ -23,7 +23,9 @@ module.exports = { PREFIX ldp: SELECT ?containerUri WHERE { - ?containerUri ldp:contains <${resourceUri}> . + GRAPH ?containerUri { + ?containerUri ldp:contains <${resourceUri}> . + } } `, dataset, diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.js b/src/middleware/packages/ldp/services/resource/actions/getTypes.js index cfb5c2a1c..1d4caa229 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.js +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.js @@ -13,7 +13,9 @@ module.exports = { query: ` SELECT ?type WHERE { - <${resourceUri}> a ?type . + GRAPH <${resourceUri}> { + <${resourceUri}> a ?type . + } } `, webId: 'system' From 930d11d7a9b66c6f795ebee00654d2c9cb5e274e Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 3 Jul 2025 18:46:57 +0200 Subject: [PATCH 036/165] resolve merge-conflicts with master branch --- src/middleware/.yarnrc | 5 + .../activitypub/mixins/await-activity.ts | 1 - .../packages/activitypub/mixins/bot.ts | 1 - .../subservices/collection/actions/get.ts | 8 +- .../activitypub/subservices/side-effects.ts | 1 - .../packages/activitypub/services/relay.ts | 1 - src/middleware/packages/core/service.ts | 4 +- src/middleware/packages/crypto/keys/keys.ts | 31 +- .../verifiable-credentials/vc-api-service.ts | 2 +- .../vc-authorizer-service.ts | 63 ++++ .../vc-holder-service.ts | 6 +- .../vc-issuer-service.ts | 6 +- .../packages/importer/mixins/importer.ts | 4 - .../packages/importer/mixins/wordpress.ts | 1 - src/middleware/packages/jsonld/package.json | 3 + .../packages/ldp/mixins/dereference.ts | 3 +- .../packages/ldp/mixins/disassembly.ts | 9 +- .../packages/ldp/routes/getCatchAllRoute.ts | 6 +- .../packages/ldp/routes/getPodsRoute.ts | 6 +- .../packages/ldp/services/api/actions/get.ts | 34 +- .../packages/ldp/services/api/actions/post.ts | 16 +- .../ldp/services/container/actions/attach.ts | 15 +- .../ldp/services/container/actions/create.ts | 3 +- .../ldp/services/container/actions/delete.ts | 2 + .../ldp/services/container/actions/get.ts | 14 +- .../ldp/services/container/actions/getAll.ts | 1 - .../ldp/services/container/actions/getUris.ts | 1 - .../ldp/services/container/actions/post.ts | 19 +- .../ldp/services/remote/actions/store.ts | 1 - .../resource/actions/awaitCreateComplete.ts | 4 +- .../ldp/services/resource/actions/create.ts | 18 +- .../ldp/services/resource/actions/delete.ts | 3 +- .../ldp/services/resource/actions/exist.ts | 18 +- .../resource/actions/getContainers.ts | 1 - .../ldp/services/resource/actions/getTypes.ts | 1 - .../ldp/services/resource/actions/patch.ts | 9 +- .../ldp/services/resource/actions/put.ts | 27 +- src/middleware/packages/middlewares/index.ts | 45 +-- .../packages/mime-types/constants.ts | 5 +- .../packages/solid/services/authorizer.ts | 33 ++ .../services/type-index/type-registrations.ts | 8 +- .../actions/countTriplesOfSubject.ts | 1 - .../packages/triplestore/actions/insert.ts | 9 +- .../triplestore/actions/tripleExist.ts | 1 - .../packages/triplestore/adapter.ts | 2 +- src/middleware/packages/void/service.ts | 3 +- .../packages/webacl/bots/authorizer-bot.ts | 138 ++++++++ .../packages/webacl/middlewares/webacl.ts | 87 +---- .../packages/webacl/routes/getRoutes.ts | 3 - .../webacl/services/authorizer/index.ts | 50 +++ .../services/resource/actions/getRights.ts | 30 +- .../webacl/services/resource/index.ts | 9 +- src/middleware/packages/webacl/utils.ts | 9 +- src/middleware/tests/.nvmrc | 1 + .../tests/activitypub/collection-api.test.ts | 3 +- .../tests/activitypub/collection.test.ts | 15 +- .../tests/activitypub/inbox.test.ts | 2 +- .../tests/activitypub/initialize.ts | 3 +- src/middleware/tests/activitypub/like.test.ts | 26 +- .../tests/activitypub/message.test.ts | 25 +- .../tests/activitypub/object.test.ts | 17 +- .../tests/activitypub/outbox.test.ts | 130 ++++---- .../tests/activitypub/shares.test.ts | 17 +- src/middleware/tests/crypto/initialize.ts | 3 +- src/middleware/tests/crypto/keys.test.ts | 56 +--- .../crypto/verifiable-credentials.test.ts | 3 +- src/middleware/tests/docker-compose.yaml | 2 +- src/middleware/tests/interop/initialize.ts | 3 +- .../tests/interop/mirror-protected.test.ts | 1 - src/middleware/tests/interop/mirror.test.ts | 4 +- .../tests/interop/patch-remote.test.ts | 4 +- .../tests/interop/remote-inference.test.ts | 26 +- src/middleware/tests/ldp/binary.test.ts | 7 +- src/middleware/tests/ldp/container.test.ts | 25 +- .../tests/ldp/content-negotiation.test.ts | 223 +++++++++++++ src/middleware/tests/ldp/initialize.ts | 3 +- src/middleware/tests/ldp/resource.test.ts | 235 +++----------- src/middleware/tests/webId/webId.test.ts | 3 +- src/middleware/tests/webacl/resource.test.ts | 303 ++++++++++++++++++ src/middleware/tests/webacl/utils.test.ts | 232 ++++++++++++++ website/docs/middleware/ldp/permissions.md | 50 +++ website/sidebars.js | 1 + 82 files changed, 1482 insertions(+), 722 deletions(-) create mode 100644 src/middleware/.yarnrc create mode 100644 src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts create mode 100644 src/middleware/packages/solid/services/authorizer.ts create mode 100644 src/middleware/packages/webacl/bots/authorizer-bot.ts create mode 100644 src/middleware/packages/webacl/services/authorizer/index.ts create mode 100644 src/middleware/tests/.nvmrc create mode 100644 src/middleware/tests/ldp/content-negotiation.test.ts create mode 100644 src/middleware/tests/webacl/resource.test.ts create mode 100644 src/middleware/tests/webacl/utils.test.ts create mode 100644 website/docs/middleware/ldp/permissions.md diff --git a/src/middleware/.yarnrc b/src/middleware/.yarnrc new file mode 100644 index 000000000..85b738b8d --- /dev/null +++ b/src/middleware/.yarnrc @@ -0,0 +1,5 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +yarn-path ".yarn/releases/yarn-1.22.22.cjs" diff --git a/src/middleware/packages/activitypub/mixins/await-activity.ts b/src/middleware/packages/activitypub/mixins/await-activity.ts index 0642263ed..d8efcfe4b 100644 --- a/src/middleware/packages/activitypub/mixins/await-activity.ts +++ b/src/middleware/packages/activitypub/mixins/await-activity.ts @@ -20,7 +20,6 @@ const AwaitActivityMixin = { try { const resource = await ctx.call('ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }); return resource; // First get the resource, then return it, otherwise the try/catch will not work diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index 8268fef56..6f86156f9 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -55,7 +55,6 @@ const BotMixin = { preferredUsername: actorSettings.username, name: actorSettings.name }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 807dca58f..50536dea9 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -30,9 +30,8 @@ async function getCollectionMetadata(ctx: any, collectionUri: any, webId: any, d OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } } `, - accept: MIME_TYPES.JSON, dataset, - webId + webId: 'system' }); if (results.length === 0) { @@ -51,7 +50,6 @@ async function verifyCursorExists(ctx: any, collectionUri: any, cursor: any, dat BIND (EXISTS{ <${collectionUri}> as:items <${cursor}> } AS ?itemExists) } `, - accept: MIME_TYPES.JSON, dataset, webId: 'system' }); @@ -95,7 +93,6 @@ async function fetchCollectionItemURIs(ctx: any, collectionUri: any, options: an : '' } `, - accept: MIME_TYPES.JSON, dataset, webId: 'system' }); @@ -179,7 +176,6 @@ async function selectAndDereferenceItems(ctx: any, allItemURIs: any, options: an try { let item = await ctx.call('ldp.resource.get', { resourceUri: itemUri, - accept: MIME_TYPES.JSON, webId: ctx.meta.impersonatedUser || webId }); delete item['@context']; // Don't keep the items individual context @@ -299,6 +295,8 @@ const Schema = defineAction({ const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const localContext = await ctx.call('jsonld.context.get'); + await ctx.call('permissions.check', { uri: collectionUri, type: 'resource', mode: 'acl:Read', webId }); + // Get dataset here since we can't call the method from internal functions const dataset = this.getCollectionDataset(collectionUri); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 35a1e749e..7b34da054 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -86,7 +86,6 @@ const ActivitypubSideEffectsSchema = { 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { meta: { dataset } } diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts index 54d61f896..d62724f1a 100644 --- a/src/middleware/packages/activitypub/services/relay.ts +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -58,7 +58,6 @@ const RelayService = { preferredUsername: actorSettings.username, name: actorSettings.name }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 3b0e5c184..2a0cc94f8 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -134,7 +134,7 @@ const CoreService = { if (this.settings.ldp !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: ({ name: "ldp"; settin... Remove this comment to see the full error message this.broker.createService({ - mixins: [DocumentTaggerMixin, LdpService], + mixins: this.settings.ldp.documentTagger !== false ? [DocumentTaggerMixin, LdpService] : [LdpService], settings: { baseUrl, containers: containers || (this.settings.mirror !== false ? [botsContainer] : []), @@ -189,7 +189,7 @@ const CoreService = { if (this.settings.triplestore !== false) { // If WebACL service is disabled, don't create a secure dataset // We define a constant here, because this.settings.webacl is not available inside the started method - const secure = this.settings.webacl !== false; + const secure = this.settings.triplestore?.secure !== false && this.settings.webacl !== false; this.broker.createService({ // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index aa430b631..bf0e2b569 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -91,10 +91,7 @@ const KeysService = { const webId = ctx.params.webId || ctx.meta.webId; // Get the key container, to search by type. - const container = await ctx.call('keys.container.list', { - webId, - accept: MIME_TYPES.JSON - }); + const container = await ctx.call('keys.container.list', { webId }); // Check if key type is present. const matchedKeys = container['ldp:contains'].filter( @@ -119,7 +116,7 @@ const KeysService = { }, async handler(ctx) { const { keyType, webId } = ctx.params; - const webIdDoc = await ctx.call('webid.get', { resourceUri: webId, accept: MIME_TYPES.JSON, webId: 'system' }); + const webIdDoc = await ctx.call('webid.get', { resourceUri: webId, webId: 'system' }); // RSA keys are stored in `publicKey` field, everything else in `assertionMethod` const publicKeys = @@ -142,7 +139,6 @@ const KeysService = { const publicKeyId = key.id || key['@id']; return await ctx.call('keys.container.get', { resourceUri: await this.actions.findPrivateKeyUri({ publicKeyUri: publicKeyId }, { parentCtx: ctx }), - accept: MIME_TYPES.JSON, webId }); }) @@ -175,7 +171,7 @@ const KeysService = { // Note: Key purposes are not regarded, as they are currently not used. const keyObject = ctx.params.keyObject || keyId - ? await ctx.call('keys.container.get', { resourceUri: keyId, webId, accept: MIME_TYPES.JSON }) + ? await ctx.call('keys.container.get', { resourceUri: keyId, webId }) : (await ctx.call('keys.getOrCreateWebIdKeys', { webId, keyType }))[0]; // We need the key object to have the public key's id, so it is resolvable. @@ -219,8 +215,7 @@ const KeysService = { }; const keyUri = await ctx.call('keys.container.post', { webId, - resource: keyObject, - contentType: MIME_TYPES.JSON + resource: keyObject }); keyObject.id = keyUri; @@ -346,9 +341,7 @@ const KeysService = { const keyId = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; if (!keyId) throw new Error('Either keyId or keyObject with id must be given.'); - const keyObject = - ctx.params.keyObject || - (await ctx.call('ldp.resource.get', { resourceUri: keyId, accept: MIME_TYPES.JSON, webId })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: keyId, webId })); const isRsaKey = arrayOf(keyObject.type || keyObject['@type']).includes(KEY_TYPES.RSA); @@ -359,7 +352,6 @@ const KeysService = { const webIdDocument = await ctx.call('webid.get', { resourceUri: webId, - accept: MIME_TYPES.JSON, webId: webId }); // Ensure the same public key is not attached already. @@ -428,9 +420,7 @@ const KeysService = { // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const privateKeyUri = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; - const keyObject = - ctx.params.keyObject || - (await ctx.call('ldp.resource.get', { resourceUri: privateKeyUri, accept: MIME_TYPES.JSON })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: privateKeyUri })); // First, get the public key part. const publicKeyObject = await this.actions.getPublicKeyObject({ keyObject }, { parentCtx: ctx }); @@ -438,7 +428,6 @@ const KeysService = { // Then, store it in the `/public-key` container. const publicKeyUri = await ctx.call('keys.public-container.post', { resource: publicKeyObject, - contentType: MIME_TYPES.JSON, webId: webId }); @@ -472,8 +461,7 @@ const KeysService = { const resourceUri = ctx.params.resourceUri || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; - const keyObject = - ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri, accept: MIME_TYPES.JSON, webId })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri, webId })); await ctx.call('keys.container.delete', { resourceUri, webId }); // Delete corresponding public key in the `public-key` container, if present. @@ -497,7 +485,7 @@ const KeysService = { }, async handler(ctx) { const { webId } = ctx.params; - const keys = await ctx.call('keys.container.list', { webId, accept: MIME_TYPES.JSON }); + const keys = await ctx.call('keys.container.list', { webId }); for (const key of keys['ldp:contains']) { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } @@ -568,8 +556,7 @@ const KeysService = { }, async handler(ctx) { const keyId = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; - const keyObject = - ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: keyId, accept: MIME_TYPES.JSON })); + const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: keyId })); const keyType = keyObject['@type'] || keyObject.type; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts index be83cc802..a959593f4 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import { ServiceSchema } from 'moleculer'; import { VC_API_PATH } from '../constants'; -const middlewares = [parseHeader, parseJson, negotiateAccept]; +const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; /** * diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts new file mode 100644 index 000000000..ad6838627 --- /dev/null +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts @@ -0,0 +1,63 @@ +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; + +// Check, if a capability grants access to the resource. +const hasValidCapability = async (ctx: any, resourceUri: any, mode: any) => { + const { capabilityPresentation } = ctx.meta.authorization; + const vcs = arrayOf(capabilityPresentation.verifiableCredential); + + // Check if every VC contains a valid `hasAuthorization` property. + const allHaveAuth = vcs.every(vc => { + const auth = vc.credentialSubject?.['apods:hasAuthorization']; + return ( + arrayOf(auth.type).includes('acl:Authorization') && + arrayOf(auth['acl:mode']).includes(mode) && + arrayOf(auth['acl:accessTo'].id ?? auth['acl:accessTo']).includes(resourceUri) + ); + }); + if (!allHaveAuth) return false; + + // Check if issuer of first VC actually has control over it. + const hasRights = await ctx.call('webacl.resource.hasRights', { + resourceUri, + webId: vcs[0].issuer, + rights: { control: true } + }); + if (!hasRights?.control) return false; + + return true; +}; + +const VcGuardSchema = { + name: 'vc.guard' as const, + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); + }, + actions: { + hasPermission: defineAction({ + async handler(ctx) { + const { uri, mode } = ctx.params; + + // @ts-expect-error TS(2339): Property 'authorization' does not exist on type '{... Remove this comment to see the full error message + if (ctx.meta.authorization?.capabilityPresentation) { + if (await hasValidCapability(ctx, uri, mode)) { + return true; + } + } + + return undefined; + } + }) + } +} satisfies ServiceSchema; + +export default VcGuardSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VcGuardSchema.name]: typeof VcGuardSchema; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index a2998899e..e47731d79 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -129,7 +129,7 @@ const VCHolderService = { if (!presentationParam.id && ctx.params.options.persist) await ctx.call( 'crypto.vc.holder.presentation-container.put', - { resource: signedPresentation, contentType: MIME_TYPES.JSON, webId: 'system' }, + { resource: signedPresentation, webId: 'system' }, { meta: { skipEmitEvent: true } } ); @@ -144,15 +144,13 @@ const VCHolderService = { // Post presentation to container (will add metadata). const resourceUri = await this.broker.call('crypto.vc.holder.presentation-container.post', { resource: presentation, - contentType: MIME_TYPES.JSON, webId }); // Get the presentation resource. const resource = await this.broker.call('crypto.vc.holder.presentation-container.get', { resourceUri, - webId: 'system', - accept: MIME_TYPES.JSON + webId: 'system' }); // Set resource rights. diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index d5492f4f0..354827d2e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -140,7 +140,7 @@ const VCCredentialService = { if (!receivedCredential.id) await ctx.call( 'crypto.vc.issuer.credential-container.put', - { resource: signedCredential, contentType: MIME_TYPES.JSON, webId: 'system' }, + { resource: signedCredential, webId: 'system' }, { meta: { skipEmitEvent: true } } ); @@ -153,7 +153,6 @@ const VCCredentialService = { async createCredentialResource(credential, noAnonRead, webId) { const resourceUri = await this.broker.call('crypto.vc.issuer.credential-container.post', { resource: credential, - contentType: MIME_TYPES.JSON, webId }); @@ -161,8 +160,7 @@ const VCCredentialService = { const resource = await this.broker.call('crypto.vc.issuer.credential-container.get', { resourceUri, jsonContext: credentialsContext, - webId: 'system', - accept: MIME_TYPES.JSON + webId: 'system' }); // Set resource rights. diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 4399fc80a..2e1db74d3 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -68,7 +68,6 @@ const Schema = { FILTER STRSTARTS(STR(?sourceUri), "${this.settings.source.apiUrl}") } `, - accept: MIME_TYPES.JSON, webId: 'system' }); @@ -205,7 +204,6 @@ const Schema = { if (destUri) { const oldData = await ctx.call('ldp.resource.get', { resourceUri: destUri, - accept: MIME_TYPES.JSON, webId: 'system' }); @@ -233,7 +231,6 @@ const Schema = { 'dc:modified': resource['dc:modified'] || this.getField('updated', data), 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { @@ -266,7 +263,6 @@ const Schema = { 'dc:modified': resource['dc:modified'] || this.getField('updated', data), 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (e) { diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index e53249888..2bbd13108 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -92,7 +92,6 @@ const Schema = { readableStream: response.body, mimetype: mediaData.mime_type }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } else { diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index ec2d8d052..b8a611e7b 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -8,7 +8,10 @@ "jsonld": "^3.3.2", "jsonld-context-parser": "^2.4.0", "jsonld-streaming-parser": "^2.4.2", + "jsonld-streaming-serializer": "^1.2.0", "lru-cache": "^6.0.0", + "n3": "^1.26.0", + "rdf-parse": "^1.7.0", "streamify-string": "^1.0.1", "url-join": "^4.0.1" }, diff --git a/src/middleware/packages/ldp/mixins/dereference.ts b/src/middleware/packages/ldp/mixins/dereference.ts index 7bb92618c..71c78342d 100644 --- a/src/middleware/packages/ldp/mixins/dereference.ts +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -55,8 +55,7 @@ const Schema = { // Get the resource. try { let result = await ctx.call('ldp.resource.get', { - resourceUri, - accept: MIME_TYPES.JSON + resourceUri }); // Delete the context from the result delete result['@context']; diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index 10f18f4e4..95aa0eb04 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -18,20 +18,16 @@ const Schema = { if (contentType === MIME_TYPES.JSON) { // @ts-expect-error await this.createDisassembly(ctx, resource); - } }, async put(ctx) { - const { resource, contentType } = ctx.params; - if (contentType === MIME_TYPES.JSON) { + const { resource } = ctx.params; const oldData = await ctx.call('ldp.resource.get', { resourceUri: resource.id || resource['@id'], - accept: MIME_TYPES.JSON, webId: 'system' }); // @ts-expect-error await this.updateDisassembly(ctx, resource, oldData); } - } }, after: { async delete(ctx, res) { @@ -58,7 +54,6 @@ const Schema = { '@context': newData['@context'], ...resourceWithoutId }, - contentType: MIME_TYPES.JSON, webId: 'system' }); uriAdded.push({ '@id': newResourceUri, '@type': '@id' }); @@ -96,7 +91,6 @@ const Schema = { '@context': newData['@context'], ...resource }, - contentType: MIME_TYPES.JSON, webId: 'system' }); uriAdded.push({ '@id': newResourceUri, '@type': '@id' }); @@ -126,7 +120,6 @@ const Schema = { '@context': newData['@context'], ...resource }, - contentType: MIME_TYPES.JSON, webId: 'system' }); } catch (error) { diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts index 95049886e..40c60ad6d 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts @@ -3,11 +3,10 @@ import path from 'path'; import { parseUrl, parseHeader, - parseSparql, + parseRawBody, negotiateContentType, negotiateAccept, parseJson, - parseTurtle, parseFile, saveDatasetMeta } from '@semapps/middlewares'; @@ -18,9 +17,8 @@ function getCatchAllRoute(basePath: any, podProvider: any) { parseHeader, negotiateContentType, negotiateAccept, - parseSparql, + parseRawBody, parseJson, - parseTurtle, parseFile, saveDatasetMeta ]; diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.ts b/src/middleware/packages/ldp/routes/getPodsRoute.ts index 36874298c..9a6f82666 100644 --- a/src/middleware/packages/ldp/routes/getPodsRoute.ts +++ b/src/middleware/packages/ldp/routes/getPodsRoute.ts @@ -3,11 +3,10 @@ import path from 'path'; import { parseUrl, parseHeader, - parseSparql, + parseRawBody, negotiateContentType, negotiateAccept, parseJson, - parseTurtle, parseFile, saveDatasetMeta } from '@semapps/middlewares'; @@ -31,9 +30,8 @@ function getPodsRoute(basePath: any) { parseHeader, negotiateContentType, negotiateAccept, - parseSparql, + parseRawBody, parseJson, - parseTurtle, parseFile, saveDatasetMeta, transformRouteParamsToSlugParts diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index ac0ff42b9..f0a4b2045 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -20,10 +20,7 @@ export default async function get(this: any, ctx: any) { * LDP CONTAINER */ - const { accept, controlledActions } = { - ...(await ctx.call('ldp.registry.getByUri', { containerUri: uri })), - ...ctx.meta.headers - }; + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri: uri }); // See https://www.w3.org/TR/ldp/#prefer-parameters const doNotIncludeResources = @@ -33,7 +30,6 @@ export default async function get(this: any, ctx: any) { controlledActions?.list || 'ldp.container.get', cleanUndefined({ containerUri: uri, - accept, jsonContext: parseJson(ctx.meta.headers?.jsonldcontext), doNotIncludeResources }) @@ -43,16 +39,12 @@ export default async function get(this: any, ctx: any) { if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; ctx.meta.$responseHeaders['Preference-Applied'] = 'return=representation'; } - - ctx.meta.$responseType = ctx.meta.$responseType || accept; } else { /* * LDP RESOURCE */ - const { accept, controlledActions, preferredView } = { - ...(await ctx.call('ldp.registry.getByUri', { resourceUri: uri })), - ...ctx.meta.headers - }; + + const { controlledActions, preferredView } = await ctx.call('ldp.registry.getByUri', { resourceUri: uri }); if (ctx.meta.originalHeaders?.accept?.includes('text/html') && this.settings.preferredViewForResource) { const webId = ctx.meta.webId || 'anon'; @@ -73,14 +65,11 @@ export default async function get(this: any, ctx: any) { // If the resource is a file and no semantic encoding was requested, return it if ( types.includes('http://semapps.org/ns/core#File') && - ![MIME_TYPES.JSON, MIME_TYPES.TURTLE].includes(ctx.meta.originalHeaders?.accept) + ![MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE].includes(ctx.meta.originalHeaders?.accept) ) { try { - // Get the file as JSON to get its metadata - res = await ctx.call(controlledActions.get || 'ldp.resource.get', { - resourceUri: uri, - accept: MIME_TYPES.JSON - }); + // Get the file as JSON-LD to get its metadata + res = await ctx.call(controlledActions.get || 'ldp.resource.get', { resourceUri: uri }); const file = fs.readFileSync(res['semapps:localPath']); ctx.meta.$responseType = res['semapps:mimeType']; @@ -99,22 +88,25 @@ export default async function get(this: any, ctx: any) { controlledActions.get || 'ldp.resource.get', cleanUndefined({ resourceUri: uri, - accept, jsonContext: parseJson(ctx.meta.headers?.jsonldcontext) }) ); - - ctx.meta.$responseType = ctx.meta.$responseType || accept; } } + if (ctx.meta.headers.accept && ctx.meta.headers.accept !== MIME_TYPES.JSON) { + res = await ctx.call('jsonld.parser.toRDF', { input: res, options: { format: ctx.meta.headers.accept } }); + } + if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; ctx.meta.$responseHeaders.Link = await ctx.call('ldp.link-header.get', { uri }); - // Hack to make our servers work with Mastodon servers, which except a special profile + // Hack to make our servers work with Mastodon servers, which expect a special profile if (ctx.meta.$responseType === 'application/ld+json') ctx.meta.$responseType = `application/ld+json; profile="https://www.w3.org/ns/activitystreams"`; + ctx.meta.$responseType = ctx.meta.$responseType || ctx.meta.headers.accept; + return res; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index 4a0d3cc71..4868d67c2 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -10,18 +10,28 @@ const { MoleculerError } = Errors; export default async function post(this: any, ctx: any) { try { - const { username, slugParts, ...resource } = ctx.params; + let { username, slugParts, ...resource } = ctx.params; const containerUri = this.getUriFromSlugParts(slugParts, username); let resourceUri; const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); if (ctx.meta.parser !== 'file') { + const contentType = ctx.meta.headers['content-type']; + + // If the resource is Turtle or N-Triples, first convert it to JSON-LD + if (contentType && contentType !== MIME_TYPES.JSON) { + resource = await ctx.call('jsonld.parser.fromRDF', { + input: ctx.meta.rawBody, + options: { format: contentType } + }); + delete resource['@id']; // Since no URI is provided, the @id will be ./ but that will not work with ldp.container.post + } + resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { containerUri, slug: ctx.meta.headers.slug, - resource, - contentType: ctx.meta.headers['content-type'] + resource }); } else { if (ctx.params.files.length > 1) { diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index aa03f36ad..1aab2fb01 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -18,11 +18,9 @@ const Schema = defineAction({ // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const isRemoteContainer = await ctx.call('ldp.remote.isRemote', { resourceUri: containerUri }); - const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId }); if (!resourceExists) { - const childContainerExists = await this.actions.exist({ containerUri: resourceUri, webId }, { parentCtx: ctx }); + const childContainerExists = await this.actions.exist({ containerUri: resourceUri }, { parentCtx: ctx }); if (!childContainerExists) { throw new MoleculerError(`Cannot attach non-existing resource or container: ${resourceUri}`, 404, 'NOT_FOUND'); } @@ -31,10 +29,13 @@ const Schema = defineAction({ const containerExists = await this.actions.exist({ containerUri, webId }, { parentCtx: ctx }); if (!containerExists) throw new Error(`Cannot attach to a non-existing container: ${containerUri}`); - await ctx.call('triplestore.insert', { - resource: `<${containerUri}> <${resourceUri}>`, - webId, - graphName: isRemoteContainer ? this.settings.mirrorGraphName : undefined + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + <${containerUri}> <${resourceUri}> + } + `, + webId: 'system' }); const returnValues = { diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 61e203b1b..31f8fea94 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -23,8 +23,7 @@ const Schema = defineAction({ 'http://purl.org/dc/terms/title': title, 'http://purl.org/dc/terms/description': description }, - contentType: MIME_TYPES.JSON, - webId + webId: 'system' }); ctx.emit('ldp.container.created', { containerUri, options, webId }); diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index 2cb946968..22d4c8e21 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -13,6 +13,8 @@ const Schema = defineAction({ // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Write', webId }); + await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` DELETE diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 1f555baea..316e321df 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -20,7 +20,7 @@ const Schema = defineAction({ jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { - keys: ['containerUri', 'accept', 'filters', 'doNotIncludeResources', 'jsonContext', 'webId', '#webId'] + keys: ['containerUri', 'filters', 'doNotIncludeResources', 'jsonContext', 'webId', '#webId'] }, async handler(ctx) { const { containerUri, filters, doNotIncludeResources, jsonContext } = ctx.params; @@ -28,13 +28,10 @@ const Schema = defineAction({ // @ts-expect-error webId = webId || ctx.meta.webId || 'anon'; - const { accept } = { - ...(await ctx.call('ldp.registry.getByUri', { containerUri })), - ...ctx.params - }; + await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Read', webId }); - if (accept !== MIME_TYPES.JSON) - throw new Error(`LDP containers can only be returned with JSON-LD format at the moment.`); + if (accept && accept !== MIME_TYPES.JSON) + throw new Error(`The ldp.container.get action now only support JSON-LD. Provided: ${accept}`); let containerResults = await ctx.call('triplestore.query', { query: ` @@ -88,8 +85,7 @@ const Schema = defineAction({ cleanUndefined({ resourceUri, webId, - jsonContext, - accept + jsonContext }) ); diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.ts b/src/middleware/packages/ldp/services/container/actions/getAll.ts index 88316e775..d67331bff 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.ts +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -15,7 +15,6 @@ const Schema = defineAction({ ?containerUri a ldp:Container . } `, - accept: MIME_TYPES.JSON, dataset: ctx.params.dataset, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index b06d0fce0..e835fbe40 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -17,7 +17,6 @@ const Schema = defineAction({ <${containerUri}> ldp:contains ?resourceUri . } `, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index ec398962e..1a72af441 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -27,7 +27,8 @@ const Schema = defineAction({ optional: true }, contentType: { - type: 'string' + type: 'string', + optional: true }, webId: { type: 'string', @@ -45,12 +46,17 @@ const Schema = defineAction({ let isContainer = false; let expandedResource; + if (contentType && contentType !== MIME_TYPES.JSON) + throw new Error(`The ldp.container.post action now only support JSON-LD. Provided: ${contentType}`); + + await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Append', webId }); + // Remove undefined values as this may cause problems resource = resource && cleanUndefined(resource); if (!file) { // Adds the default context, if it is missing - if (contentType === MIME_TYPES.JSON && !resource['@context']) { + if (!resource['@context']) { resource = { '@context': await ctx.call('jsonld.context.get'), ...resource @@ -91,8 +97,12 @@ const Schema = defineAction({ // We must add this first, so that the container's ACLs are taken into account // But this create race conditions, especially when testing, since uncreated resources are linked to containers // TODO Add temporary ACLs to the resource so that it can be created, then link it to the container ? - await ctx.call('triplestore.insert', { - resource: `<${containerUri}> <${resourceUri}>`, + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + <${containerUri}> <${resourceUri}> + } + `, webId }); @@ -115,7 +125,6 @@ const Schema = defineAction({ '@id': resourceUri, ...resource }, - contentType, webId }); } diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index e8152d9aa..516224ca2 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -90,7 +90,6 @@ const Schema = defineAction({ await ctx.call('triplestore.insert', { resource, graphName, - contentType: MIME_TYPES.JSON, webId: 'system', dataset }); diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index a12a4dbec..d0a464435 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -20,8 +20,7 @@ const Schema = defineAction({ rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, - forceSemantic: { type: 'boolean', optional: true }, - aclVerified: { type: 'boolean', optional: true } + forceSemantic: { type: 'boolean', optional: true } }, async handler(ctx) { const { resourceUri, predicates = [], delayMs = 1000, maxTries = 30, webId = 'system', ...rest } = ctx.params; @@ -31,7 +30,6 @@ const Schema = defineAction({ 'ldp.resource.get', { resourceUri: resourceUri, - accept: MIME_TYPES.JSON, webId, ...rest }, diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 189acf687..1f710799d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -15,7 +15,8 @@ const Schema = defineAction({ optional: true }, contentType: { - type: 'string' + type: 'string', + optional: true } }, async handler(ctx) { @@ -24,6 +25,9 @@ const Schema = defineAction({ const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourceUri = resource.id || resource['@id']; + if (contentType && contentType !== MIME_TYPES.JSON) + throw new Error(`The ldp.resource.create action now only support JSON-LD. Provided: ${contentType}`); + if (await ctx.call('ldp.remote.isRemote', { resourceUri })) throw new MoleculerError('Remote resources cannot be created', 403, 'FORBIDDEN'); @@ -32,23 +36,20 @@ const Schema = defineAction({ ...ctx.params }; - const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId }); + const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); if (resourceExist) { throw new MoleculerError(`A resource already exist with URI ${resourceUri}`, 400, 'BAD_REQUEST'); } // Adds the default context, if it is missing - if (contentType === MIME_TYPES.JSON && !resource['@context']) { + if (!resource['@context']) { resource = { '@context': await ctx.call('jsonld.context.get'), ...resource }; } - if (contentType !== MIME_TYPES.JSON && !resource.body) - throw new MoleculerError('The resource must contain a body member (a string)', 400, 'BAD_REQUEST'); - - let newTriples = await this.bodyToTriples(body || resource, contentType); + let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); // see PUT newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); // see PUT @@ -77,8 +78,7 @@ const Schema = defineAction({ (controlledActions && controlledActions.get) || 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, - webId + webId: 'system' // Avoid errors if the resource creator has no read rights }, { meta: { $cache: false } } ); diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index a368b719b..d3ef059b6 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -18,13 +18,14 @@ const Schema = defineAction({ return await ctx.call('ldp.remote.delete', { resourceUri, webId }); } + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); + // Save the current data, to be able to send it through the event // If the resource does not exist, it will throw a 404 error const oldData = await ctx.call( 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index c24ec67c6..961b7ae8f 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -15,14 +15,14 @@ const Schema = defineAction({ let exist = await ctx.call('triplestore.tripleExist', { triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - webId + webId: 'system' }); // If this is a remote URI and the resource is not found in default graph, also look in mirror graph if (!exist && (await ctx.call('ldp.remote.isRemote', { resourceUri }))) { exist = await ctx.call('triplestore.tripleExist', { triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - webId, + webId: 'system', graphName: this.settings.mirrorGraphName }); } @@ -33,6 +33,20 @@ const Schema = defineAction({ if (types.includes('https://www.w3.org/ns/activitystreams#Tombstone')) return false; } + // Ensure the logged user has the right to see the resource + // TODO Verify if we really need this kind of check + if ( + exist && + !(await ctx.call('permissions.has', { + uri: resourceUri, + type: 'resource', + mode: 'acl:Read', + webId + })) + ) { + return false; + } + return exist; } }); diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index a93fa7d77..20f882a33 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -30,7 +30,6 @@ const Schema = defineAction({ ?containerUri ldp:contains <${resourceUri}> . } `, - accept: MIME_TYPES.JSON, dataset, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 963bb5519..ae0842b8a 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -20,7 +20,6 @@ const Schema = defineAction({ <${resourceUri}> a ?type . } `, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index ca35152d4..37518525c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -59,6 +59,13 @@ const Schema = defineAction({ if (!triplesToAdd && !triplesToRemove) throw new MoleculerError('No triples to add or to remove', 400, 'BAD_REQUEST'); + if (triplesToRemove) { + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); + } else { + // If we only add new triples, we don't need the acl:Write permission + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Append', webId }); + } + // Build the SPARQL update const sparqlUpdate = { type: 'update', @@ -85,7 +92,7 @@ const Schema = defineAction({ await ctx.call('triplestore.update', { query: sparqlUpdate, - webId + webId: 'system' }); const returnValues = { diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 3ba5a9d8f..df597e389 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -17,21 +17,21 @@ const Schema = defineAction({ type: 'string', optional: true }, - body: { + contentType: { type: 'string', optional: true - }, - contentType: { - type: 'string' } }, async handler(ctx) { - let { resource, contentType, body } = ctx.params; + let { resource, contentType } = ctx.params; let { webId } = ctx.params; // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; let newData; + if (contentType && contentType !== MIME_TYPES.JSON) + throw new Error(`The ldp.resource.put action now only support JSON-LD. Provided: ${contentType}`); + // Remove undefined values as this may cause problems resource = resource && cleanUndefined(resource); @@ -51,7 +51,6 @@ const Schema = defineAction({ 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { @@ -62,15 +61,15 @@ const Schema = defineAction({ ); // Adds the default context, if it is missing - if (contentType === MIME_TYPES.JSON && !resource['@context']) { + if (!resource['@context']) { resource = { '@context': await ctx.call('jsonld.context.get'), ...resource }; } - let oldTriples = await this.bodyToTriples(oldData, MIME_TYPES.JSON); - let newTriples = await this.bodyToTriples(body || resource, contentType); + let oldTriples = await ctx.call('jsonld.parser.toQuads', { input: oldData }); + let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); // Filter out triples whose subject is not the resource itself // We don't want to update or delete resources with IDs @@ -95,6 +94,13 @@ const Schema = defineAction({ // If the exact same data have been posted, skip newData = oldData; } else { + if (triplesToRemove.length > 0) { + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); + } else { + // If we only add new triples, we don't need the acl:Write permission + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Append', webId }); + } + // Keep track of blank nodes to use in WHERE clause const newBlankNodes = this.getTriplesDifference(newTriples, oldTriples).filter( (triple: any) => triple.object.termType === 'Variable' @@ -114,7 +120,7 @@ const Schema = defineAction({ await ctx.call('triplestore.update', { query, - webId + webId: 'system' }); // Get the new data, with the same formatting as the old data @@ -123,7 +129,6 @@ const Schema = defineAction({ 'ldp.resource.get', { resourceUri, - accept: MIME_TYPES.JSON, webId }, { diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index 0267cecbf..6100fa9e9 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -24,6 +24,9 @@ const parseHeader = async (req: any, res: any, next: any) => { const negotiateContentType = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateContentType middleware`); + + req.$ctx.meta.contentTypeNegotiated = true; + if (req.$ctx.meta.headers['content-type'] !== undefined && req.method !== 'DELETE') { try { req.$ctx.meta.headers['content-type'] = negotiateTypeMime(req.$ctx.meta.headers['content-type']); @@ -31,9 +34,11 @@ const negotiateContentType = (req: any, res: any, next: any) => { } catch (e) { next(); } - } else if (req.$params.body) { - next( - new MoleculerError('Content-Type has to be specified for a non-empty body ', 400, 'CONTENT_TYPE_NOT_SPECIFIED') + } else if (req.$ctx.meta.rawBody) { + throw new MoleculerError( + 'Content-Type has to be specified for a non-empty body ', + 400, + 'CONTENT_TYPE_NOT_SPECIFIED' ); } else { next(); @@ -59,6 +64,7 @@ const throw500 = (msg: string) => { const negotiateAccept = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateAccept middleware`); + if (req.$ctx.meta.headers.accept === '*/*') { delete req.$ctx.meta.headers.accept; } @@ -114,18 +120,23 @@ const parseTurtle = async (req: any, res: any, next: any) => { req.$params.body = await getRawBody(req); } next(); + } }; const parseJson = async (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseJson middleware`); - let mimeType = null; + + if (!req.$ctx.meta.rawBodyParsed) + throw new Error(`The parseRawBody middleware must be added before the parseJson middleware`); + + if (req.$ctx.meta.headers['content-type'] === MIME_TYPES.JSON && req.$ctx.meta.rawBody) { try { - if (req.$ctx.meta.headers['content-type']) { - mimeType = negotiateTypeMime(req.$ctx.meta.headers['content-type']); - } + const json = JSON.parse(req.$ctx.meta.rawBody); + req.$params = { ...json, ...req.$params }; } catch (e) { - // Do nothing if mime type is not found + // If JSON parsing failed, ignore + } } try { @@ -141,19 +152,16 @@ const parseJson = async (req: any, res: any, next: any) => { req.$ctx.meta.parser = 'json'; } next(); - } catch (e) { - next(e); - } }; const parseFile = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseFile middleware`); - if (!req.$ctx.meta.parser && (req.method === 'POST' || req.method === 'PUT')) { - if ( - req.$ctx.meta.headers['content-type'] && - req.$ctx.meta.headers['content-type'].includes('multipart/form-data') - ) { + + const contentType = req.$ctx.meta.headers['content-type']; + + if (!handledMimeTypes.includes(contentType) && (req.method === 'POST' || req.method === 'PUT')) { + if (contentType.includes('multipart/form-data')) { const busboy = new Busboy({ headers: req.$ctx.meta.headers }); const files: any = []; busboy.on('file', (fieldname: any, file: any, filename: any, encoding: any, mimetype: any) => { @@ -182,7 +190,7 @@ const parseFile = (req: any, res: any, next: any) => { req.$params.files = [ { readableStream: req, - mimetype: req.$ctx.meta.headers['content-type'] + mimetype: contentType } ]; req.$ctx.meta.parser = 'file'; @@ -201,11 +209,10 @@ const saveDatasetMeta = (req: any, res: any, next: any) => { export { parseUrl, parseHeader, - parseSparql, + parseRawBody, negotiateContentType, negotiateAccept, parseJson, - parseTurtle, parseFile, saveDatasetMeta, throw400, diff --git a/src/middleware/packages/mime-types/constants.ts b/src/middleware/packages/mime-types/constants.ts index 70735beef..09d2c3090 100644 --- a/src/middleware/packages/mime-types/constants.ts +++ b/src/middleware/packages/mime-types/constants.ts @@ -2,12 +2,13 @@ const MIME_TYPES = { JSON: 'application/ld+json', TURTLE: 'text/turtle', TRIPLE: 'application/n-triples', + SPARQL_UPDATE: 'application/sparql-update', + // Not supported SPARQL_JSON: 'application/sparql-results+json', SPARQL_XML: 'application/sparql-results+xml', CSV: 'text/csv', TSV: 'text/tab-separated-values', - RDF: 'application/rdf+xml', - SPARQL_UPDATE: 'application/sparql-update' + RDF: 'application/rdf+xml' }; const TYPES_REPO = [ diff --git a/src/middleware/packages/solid/services/authorizer.ts b/src/middleware/packages/solid/services/authorizer.ts new file mode 100644 index 000000000..d3ce7b51b --- /dev/null +++ b/src/middleware/packages/solid/services/authorizer.ts @@ -0,0 +1,33 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + +const SolidAuthorizerSchema = { + name: 'solid-authorizer' as const, + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission`, priority: 1 }); + }, + actions: { + hasPermission: defineAction({ + async handler(ctx) { + const { uri, webId } = ctx.params; + + // The owner has access to all resources on their Pod + if (uri.startsWith(`${webId}/`)) { + return true; + } + + return undefined; + } + }) + } +} satisfies ServiceSchema; + +export default SolidAuthorizerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidAuthorizerSchema.name]: typeof SolidAuthorizerSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index 26e7ac7dd..b2be55578 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -71,7 +71,6 @@ const TypeRegistrationsSchema = { 'solid:forClass': expandedTypes, 'solid:instanceContainer': containerUri }, - contentType: MIME_TYPES.JSON, webId }, { parentCtx: ctx } @@ -139,11 +138,7 @@ const TypeRegistrationsSchema = { // If no default app is defined for this type, use this one if (!registration['apods:defaultApp']) registration['apods:defaultApp'] = appUri; - await ctx.call('type-registrations.put', { - resource: registration, - contentType: MIME_TYPES.JSON, - webId - }); + await ctx.call('type-registrations.put', { resource: registration, webId }); } }), @@ -176,7 +171,6 @@ const TypeRegistrationsSchema = { await ctx.call('type-registrations.put', { resource: registration, - contentType: MIME_TYPES.JSON, webId }); } diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index af7e6e7d1..331a7b15d 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -37,7 +37,6 @@ const Schema = defineAction({ <${ctx.params.uri}> ?p ?v } `, - accept: MIME_TYPES.JSON, webId, dataset }); diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 794c9d9d9..6592826f6 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -5,6 +5,7 @@ import { defineAction } from 'moleculer'; const Schema = defineAction({ visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'multi', // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message @@ -34,15 +35,13 @@ const Schema = defineAction({ // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; - const rdf = - contentType === MIME_TYPES.JSON - ? await ctx.call('jsonld.parser.toRDF', { + // Convert JSON-LD to N-Quads + const rdf = await ctx.call('jsonld.parser.toRDF', { input: resource, options: { format: 'application/n-quads' } - }) - : resource; + }); if (!dataset) throw new Error(`No dataset defined for triplestore insert: ${rdf}`); if (dataset !== '*' && !(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts index 49c8834d1..6d4ca94a6 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -45,7 +45,6 @@ const Schema = defineAction({ : { type: 'bgp', triples: [triple] } ] }, - accept: MIME_TYPES.JSON, webId, dataset }); diff --git a/src/middleware/packages/triplestore/adapter.ts b/src/middleware/packages/triplestore/adapter.ts index fab804db9..b244abb89 100644 --- a/src/middleware/packages/triplestore/adapter.ts +++ b/src/middleware/packages/triplestore/adapter.ts @@ -33,7 +33,7 @@ class TripleStoreAdapter { await this.broker.call('triplestore.dataset.create', { // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset, - secure: false + secure: false // TODO Remove when we switch to Fuseki 5 }); } diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 60f6cb2ba..e2bd27de4 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -397,7 +397,8 @@ const VoidSchema = { // @ts-expect-error TS(18046): 'c' is of type 'unknown'. if (c.excludeFromMirror) partition['http://semapps.org/ns/core#doNotMirror'] = true; const count = await ctx.call('triplestore.query', { - query: `SELECT (COUNT (?o) as ?count) { <${partition['http://rdfs.org/ns/void#uriSpace']}> ?o }` + query: `SELECT (COUNT (?o) as ?count) { <${partition['http://rdfs.org/ns/void#uriSpace']}> ?o }`, + webId: 'system' }); // @ts-expect-error TS(2551): Property 'http://rdfs.org/ns/void#entities' does n... Remove this comment to see the full error message partition['http://rdfs.org/ns/void#entities'] = Number(count[0].count.value); diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts new file mode 100644 index 000000000..2a8ce4276 --- /dev/null +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -0,0 +1,138 @@ +import { ServiceSchema, defineServiceEvent } from 'moleculer'; + +const AuthorizerBotSchema = { + name: 'authorizer-bot' as const, + settings: { + rules: [] + }, + dependencies: ['webacl.resource'], + methods: { + matchRule(rule, record) { + if (typeof rule.match === 'function') { + // If match is a function, pass it the record + return rule.match(record); + } + // If match is an object, go through all entries and check they match with the record + return Object.keys(rule.match).every(predicate => { + const value = rule.match[predicate]; + return Array.isArray(record[predicate]) ? record[predicate].includes(value) : record[predicate] === value; + }); + }, + getUsers(rule, record) { + let users; + if (typeof rule.users === 'function') { + // If users is a function, pass it the record + users = rule.users(record); + } else { + users = rule.users; + } + if (!users) return []; + return Array.isArray(users) ? users : [users]; + } + }, + events: { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData } = ctx.params; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + for (const rule of this.settings.rules) { + // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message + if (this.matchRule(rule, newData)) { + // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message + const users = this.getUsers(rule, newData); + for (const user of users) { + await ctx.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { + uri: user, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (users.length > 0) { + ctx.emit('authorizer.added', { + resourceUri, + users, + rule + }); + } + } + } + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message + const { resourceUri, newData, oldData } = ctx.params; + + // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message + for (const rule of this.settings.rules) { + // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message + if (this.matchRule(rule, newData)) { + // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message + const newUsers = this.getUsers(rule, newData); + // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message + const oldUsers = this.getUsers(rule, oldData); + + const usersToAdd = newUsers.filter((t1: any) => !oldUsers.some((t2: any) => t1 === t2)); + for (const userUri of usersToAdd) { + await ctx.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { + uri: userUri, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (usersToAdd.length > 0) { + ctx.emit('authorizer.added', { + resourceUri, + users: usersToAdd, + rule + }); + } + + const usersToRemove = oldUsers.filter((t1: any) => !newUsers.some((t2: any) => t1 === t2)); + for (const userUri of usersToRemove) { + await ctx.call('webacl.resource.removeRights', { + resourceUri, + rights: { + user: { + uri: userUri, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (usersToRemove.length > 0) { + ctx.emit('authorizer.removed', { + resourceUri, + users: usersToRemove, + rule + }); + } + } + } + } + }) + } +} satisfies ServiceSchema; + +export default AuthorizerBotSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthorizerBotSchema.name]: typeof AuthorizerBotSchema; + } + } +} diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 88619ff50..bef889bc2 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -75,35 +75,6 @@ const addRightsToNewUser = async (ctx: any, userUri: any) => { ); }; -/** - * Check, if a capability grants access to the resource. - */ -const hasValidCapability = async (ctx, resourceUri, mode) => { - const { capabilityPresentation } = ctx.meta.authorization; - const vcs = arrayOf(capabilityPresentation.verifiableCredential); - - // Check if every VC contains a valid `hasAuthorization` property. - const allHaveAuth = vcs.every(vc => { - const auth = vc.credentialSubject?.['apods:hasAuthorization']; - return ( - arrayOf(auth.type).includes('acl:Authorization') && - arrayOf(auth['acl:mode']).includes(mode) && - arrayOf(auth['acl:accessTo'].id ?? auth['acl:accessTo']).includes(resourceUri) - ); - }); - if (!allHaveAuth) return false; - - // Check if issuer of first VC actually has control over it. - const hasRights = await ctx.call('webacl.resource.hasRights', { - resourceUri, - webId: vcs[0].issuer, - rights: { control: true } - }); - if (!hasRights?.control) return false; - - return true; -}; - /** * Middleware that ensures that requests are conforming ACL records. * @type {import('moleculer').Middleware} @@ -113,61 +84,9 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se async started() { if (!baseUrl) throw new Error('The baseUrl config is missing for the WebACL middleware'); }, - localAction: (next, action) => { - if (action.name === 'ldp.resource.get') { - /* - * VERIFY AUTHORIZATIONS - * This allows us to quickly check the permissions for GET operations using the Redis cache - * This way, we don't need to add the webId in the Redis cache key and it is more efficient - */ - return async ctx => { - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const bypass = () => { - ctx.params.aclVerified = true; - return next(ctx); - }; - - if (webId === 'system') { - return bypass(); - } - - const resourceUri = ctx.params.resourceUri || ctx.params.resource.id || ctx.params.resource['@id']; - - if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { - // Bypass if mirrored resource as WebACL are not activated in mirror graph - if ((await ctx.call('ldp.remote.getGraph', { resourceUri })) === 'http://semapps.org/mirror') { - return bypass(); - } - return next(ctx); - } - - // If the logged user is fetching is own POD, bypass ACL check - // End with a trailing slash, otherwise "bob" will have access to the pod of "bobby" ! - if (podProvider && resourceUri.startsWith(`${webId}/`)) { - return bypass(); - } - - const result = await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, // Check only the read permissions to improve performances - webId - }); - - if (result.read) { - return bypass(); - } - - // Check, if there is a valid capability. - if (ctx.meta.authorization?.capabilityPresentation) { - if (await hasValidCapability(ctx, resourceUri, 'acl:Read')) { - return bypass(); - } - } - - throw403(); - }; - } else if (modifyActions.includes(action.name)) { - return async ctx => { + localAction: (next: any, action: any) => { + if (modifyActions.includes(action.name)) { + return async (ctx: any) => { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let actionReturnValue; diff --git a/src/middleware/packages/webacl/routes/getRoutes.ts b/src/middleware/packages/webacl/routes/getRoutes.ts index 57bc34190..3af04507e 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.ts +++ b/src/middleware/packages/webacl/routes/getRoutes.ts @@ -25,9 +25,6 @@ const getRoutes = (basePath: string, podProvider: any) => { type: ['text/turtle', 'application/ld+json'] } }, - onBeforeCall(ctx, route, req) { - ctx.meta.body = req.body; - }, aliases: { 'PATCH /:slugParts*': [parseHeader, 'webacl.resource.api_addRights'], 'PUT /:slugParts*': [parseHeader, 'webacl.resource.api_setRights'], diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts new file mode 100644 index 000000000..47d619917 --- /dev/null +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -0,0 +1,50 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + +// A acl:Write permission implicitly gives acl:Read and acl:Append permissions +const modeMapping = { + 'acl:Read': ['read', 'write'], + 'acl:Append': ['append', 'write'], + 'acl:Write': ['write'], + 'acl:Control': ['control'] +}; + +const WebaclAuthorizerSchema = { + name: 'webacl.authorizer' as const, + dependencies: 'permissions', + async started() { + await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); + }, + actions: { + hasPermission: defineAction({ + async handler(ctx) { + const { uri, type, mode, webId } = ctx.params; + + if (type === 'resource' || type === 'container') { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + const modesToCheck = modeMapping[mode]; + + const rights = await ctx.call('webacl.resource.hasRights', { + resourceUri: uri, + webId, + rights: Object.fromEntries(modesToCheck.map((m: any) => [m, true])) + }); + + // Return true if there is at least one true value + return Object.values(rights).some(r => r); + } + + return undefined; + } + }) + } +} satisfies ServiceSchema; + +export default WebaclAuthorizerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclAuthorizerSchema.name]: typeof WebaclAuthorizerSchema; + } + } +} diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 8f29072a9..106d9dc0a 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -6,8 +6,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { defineAction } from 'moleculer'; import { getAuthorizationNode, - checkAgentPresent, - getUserGroups, findParentContainers, filterAgentAcl, getAclUriFromResourceUri, @@ -167,6 +165,28 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an const document = []; + // Check if the user has a acl:Control permission + // If so, it will return all WAC permissions associated with the resource + // Otherwise only the permissions associated with the given user will be returned + + const hasControl = await ctx.call('permissions.has', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId: user + }); + + // Get the ACL for the resource + + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. + const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. + const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. + const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. + const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName); + document.push(...(await filterAcls(hasControl, uaSearchParam, reads))); document.push(...(await filterAcls(hasControl, uaSearchParam, writes))); document.push(...(await filterAcls(hasControl, uaSearchParam, appends))); @@ -190,6 +210,8 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an document.push(...(await filterAcls(hasControl, uaSearchParam, value.controls))); } + // Format output + return await formatOutput(ctx, document, resourceAclUri, ctx.meta.$responseType === MIME_TYPES.JSON); } @@ -205,7 +227,7 @@ export const api = async function api(this: any, ctx: any) { return await ctx.call('webacl.resource.getRights', { resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - accept: accept + accept }); }; @@ -213,7 +235,7 @@ export const action = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, - accept: { type: 'string', optional: true }, + accept: { type: 'string', default: MIME_TYPES.JSON }, webId: { type: 'string', optional: true }, skipResourceCheck: { type: 'boolean', default: false } }, diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index 44f51b35f..2a9d3346d 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -97,8 +97,7 @@ const WebaclResourceSchema = { if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '_groups'))) { const exists = await aclGroupExists(resourceUri, ctx, this.settings.graphName); - if (!exists) - throw new MoleculerError(`Cannot get permissions of non-existing ACL group ${resourceUri}`, 404, 'NOT_FOUND'); + if (!exists) throw new MoleculerError(`WAC group not found ${resourceUri}`, 404, 'NOT_FOUND'); return false; // it is never a container } // it can be a container or a resource @@ -107,11 +106,7 @@ const WebaclResourceSchema = { // it must be a resource then! const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); if (!resourceExist) { - throw new MoleculerError( - `Cannot get permissions of non-existing container or resource ${resourceUri} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})`, - 404, - 'NOT_FOUND' - ); + throw new MoleculerError(`Container or resource not found ${resourceUri}`, 404, 'NOT_FOUND'); } return false; } diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index 90bf83117..b97c7d3db 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -33,8 +33,11 @@ const findParentContainers = async (ctx: Context, resource: any) => { const query = `PREFIX ldp: \n${RESOURCE_CONTAINERS_QUERY(resource)}`; return await ctx.call('triplestore.query', { - query, - accept: MIME_TYPES.SPARQL_JSON, + query: ` + PREFIX ldp: + SELECT ?container + WHERE { ?container ldp:contains <${resourceUri}> . } + `, webId: 'system' }); }; @@ -64,7 +67,6 @@ const getUserGroups = async (ctx: any, user: any, graphName: any) => { const groups = await ctx.call('triplestore.query', { query, - accept: MIME_TYPES.JSON, webId: 'system' }); @@ -102,7 +104,6 @@ const getAuthorizationNode = async ( const auths = await ctx.call('triplestore.query', { query, - accept: MIME_TYPES.JSON, webId: 'system' }); diff --git a/src/middleware/tests/.nvmrc b/src/middleware/tests/.nvmrc new file mode 100644 index 000000000..fbdadee5c --- /dev/null +++ b/src/middleware/tests/.nvmrc @@ -0,0 +1 @@ +^24.0.0 diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index 7e9de8c3b..c5ac2370b 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -35,8 +35,7 @@ describe('Collections API', () => { name: `Note #${i}`, content: `Contenu de ma note #${i}`, published: `2021-01-0${i}T00:00:00.000Z` - }, - contentType: MIME_TYPES.JSON + } }) ); } diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index a8b1e5e8c..3936e8266 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -32,9 +32,8 @@ describe('Collections', () => { '@type': 'Note', name: `Note #${i}`, content: `Contenu de ma note #${i}`, - published: `2021-01-0${i}T00:00:00.000Z` - }, - contentType: MIME_TYPES.JSON + published: `2021-01-0${i + 1}T00:00:00.000Z` + } }) ); } @@ -45,7 +44,6 @@ describe('Collections', () => { type: 'Collection', summary: 'My non-ordered collection' }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -56,7 +54,6 @@ describe('Collections', () => { summary: 'My ordered collection', 'semapps:dereferenceItems': false }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -67,7 +64,6 @@ describe('Collections', () => { summary: 'Cursor test collection', 'semapps:itemsPerPage': 2 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -173,7 +169,6 @@ describe('Collections', () => { summary: 'My non-ordered collection with dereferenceItems: true', 'semapps:dereferenceItems': true }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -238,7 +233,6 @@ describe('Collections', () => { 'semapps:sortPredicate': 'as:published', 'semapps:sortOrder': 'semapps:AscOrder' }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -283,7 +277,6 @@ describe('Collections', () => { summary: 'My paginated collection', 'semapps:itemsPerPage': 4 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -348,7 +341,6 @@ describe('Collections', () => { summary: 'Empty collection', 'semapps:itemsPerPage': 4 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -373,7 +365,6 @@ describe('Collections', () => { summary: 'Exact size collection', 'semapps:itemsPerPage': 4 }, - contentType: MIME_TYPES.JSON, webId: 'system' }); @@ -476,7 +467,7 @@ describe('Collections', () => { broker.call('activitypub.collection.get', { resourceUri: nonExistentUri }) - ).rejects.toThrow('Not found'); + ).rejects.toThrow('not found'); }); test('Should return 404 when cursor not found in collection', async () => { diff --git a/src/middleware/tests/activitypub/inbox.test.ts b/src/middleware/tests/activitypub/inbox.test.ts index 5cba86921..3e0454242 100644 --- a/src/middleware/tests/activitypub/inbox.test.ts +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -57,7 +57,7 @@ describe('Permissions are correctly set on inbox', () => { resourceUri, webId: 'anon' }) - ).rejects.toThrow('Not found'); + ).rejects.toThrow('not found'); }); test('Post private message to friend', async () => { diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index b547b49ce..1fce48daa 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -53,7 +53,8 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset + mainDataset, + secure: false // TODO Remove when we move to Fuseki 5 }, containers, void: false, diff --git a/src/middleware/tests/activitypub/like.test.ts b/src/middleware/tests/activitypub/like.test.ts index f89f25d9c..5efc98471 100644 --- a/src/middleware/tests/activitypub/like.test.ts +++ b/src/middleware/tests/activitypub/like.test.ts @@ -72,8 +72,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( await waitForExpect(async () => { await expect( alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON + resourceUri: aliceMessageUri }) ).resolves.toMatchObject({ likes: `${aliceMessageUri}/likes` @@ -84,10 +83,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // @ts-expect-error await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/likes`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }) ).resolves.toMatchObject({ type: 'Collection', items: bob.id @@ -97,12 +93,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure the note has been added to Bob's /liked collection // @ts-expect-error await waitForExpect(async () => { - await expect( - bob.call('activitypub.collection.get', { - resourceUri: `${bob.id}/liked`, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` })).resolves.toMatchObject({ type: 'Collection', items: aliceMessageUri }); @@ -124,20 +115,15 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure Bob has been removed from the /likes collection // @ts-expect-error await waitForExpect(async () => { - const likes = await alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/likes`, - accept: MIME_TYPES.JSON - }); + const likes = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }); expect(likes.items).toHaveLength(0); }); // Ensure the note has been removed from Bob's /liked collection // @ts-expect-error await waitForExpect(async () => { - const liked = await bob.call('activitypub.collection.get', { - resourceUri: `${bob.id}/liked`, - accept: MIME_TYPES.JSON - }); + const liked = await bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(liked.items).toHaveLength(0); }); }); diff --git a/src/middleware/tests/activitypub/message.test.ts b/src/middleware/tests/activitypub/message.test.ts index 338094677..9061b5edc 100644 --- a/src/middleware/tests/activitypub/message.test.ts +++ b/src/middleware/tests/activitypub/message.test.ts @@ -61,10 +61,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' aliceMessageUri = createActivity.object.id; // Check the object has been created - const message = await alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON - }); + const message = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); expect(message).toMatchObject({ type: OBJECT_TYPES.NOTE, attributedTo: alice.id, @@ -90,12 +87,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' // @ts-expect-error await waitForExpect(async () => { - await expect( - alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ replies: `${aliceMessageUri}/replies` }); }); @@ -103,10 +95,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' // @ts-expect-error await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/replies`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }) ).resolves.toMatchObject({ type: 'Collection', items: { @@ -130,14 +119,10 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' // @ts-expect-error await waitForExpect(async () => { - await expect( - alice.call('ldp.resource.get', { - resourceUri: bobMessageUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: bobMessageUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Note', + // @ts-expect-error TS(2304): Cannot find name 'expect'. deleted: expect.anything() }); }); diff --git a/src/middleware/tests/activitypub/object.test.ts b/src/middleware/tests/activitypub/object.test.ts index 0a725cc68..e2238d3f4 100644 --- a/src/middleware/tests/activitypub/object.test.ts +++ b/src/middleware/tests/activitypub/object.test.ts @@ -66,10 +66,7 @@ describe('Create/Update/Delete objects', () => { objectUri = createActivity.object.id; // Check the object has been created in the container - const object = await broker.call('ldp.resource.get', { - resourceUri: objectUri, - accept: MIME_TYPES.JSON - }); + const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); expect(object).toHaveProperty('type', OBJECT_TYPES.ARTICLE); expect(object).toHaveProperty('id', objectUri); }); @@ -102,10 +99,7 @@ describe('Create/Update/Delete objects', () => { expect(updateActivity.object).not.toHaveProperty('name'); // Check the object has been updated - const object = await broker.call('ldp.resource.get', { - resourceUri: objectUri, - accept: MIME_TYPES.JSON - }); + const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); expect(object).toMatchObject({ id: objectUri, type: OBJECT_TYPES.ARTICLE, @@ -122,12 +116,7 @@ describe('Create/Update/Delete objects', () => { }); await waitForExpect(async () => { - await expect( - broker.call('ldp.resource.get', { - resourceUri: objectUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(broker.call('ldp.resource.get', { resourceUri: objectUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Article', // @ts-expect-error TS(2304): Cannot find name 'expect'. diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index 49f4b26dd..af76b7361 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -105,7 +105,6 @@ describe('Permissions are correctly set on outbox', () => { // await expect(() => // broker.call('ldp.resource.get', { // resourceUri: objectPrivateFirst.id, - // accept: MIME_TYPES.JSON, // webId: simon.id // }) // ).rejects.toThrow(); @@ -298,73 +297,72 @@ describe('Permissions are correctly set on outbox', () => { }); }); - test('Delete activity is sent and object made private after removing addressees', async () => { - // Activity is not visible after Update to no recipients. - const activityNowPrivate = await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, - type: ACTIVITY_TYPES.UPDATE, - to: [], - object: { - id: objectPrivateFirst.id, - '@context': 'https://www.w3.org/ns/activitystreams', - type: OBJECT_TYPES.NOTE, - name: 'Message is private again' - } - }); + // test('Delete activity is sent and object made private after removing addressees', async () => { + // // Activity is not visible after Update to no recipients. + // const activityNowPrivate = await broker.call('activitypub.outbox.post', { + // collectionUri: sebastien.outbox, + // type: ACTIVITY_TYPES.UPDATE, + // to: [], + // object: { + // id: objectPrivateFirst.id, + // '@context': 'https://www.w3.org/ns/activitystreams', + // type: OBJECT_TYPES.NOTE, + // name: 'Message is private again' + // } + // }); - waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id - }); - const outboxFetchedByFriend = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id - }); - expect(outboxFetchedByFriend.orderedItems[0]).not.toMatchObject({ - actor: sebastien.id, - type: ACTIVITY_TYPES.UPDATE, - object: { - type: OBJECT_TYPES.NOTE, - name: 'Message is private again' - } - }); + // waitForExpect(async () => { + // const outboxMenu = await broker.call('activitypub.collection.get', { + // resourceUri: sebastien.outbox, + // webId: sebastien.id + // }); + // const outboxFetchedByFriend = await broker.call('activitypub.collection.get', { + // resourceUri: sebastien.outbox, + // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), + // webId: simon.id + // }); + // expect(outboxFetchedByFriend.orderedItems[0]).not.toMatchObject({ + // actor: sebastien.id, + // type: ACTIVITY_TYPES.UPDATE, + // object: { + // type: OBJECT_TYPES.NOTE, + // name: 'Message is private again' + // } + // }); - const outboxFetchedBySelf = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: sebastien.id - }); - expect(outboxFetchedBySelf.orderedItems[0]).toMatchObject({ - actor: sebastien.id, - type: ACTIVITY_TYPES.UPDATE, - object: { - type: OBJECT_TYPES.NOTE, - name: 'Message is private again' - } - }); - const objectUri = outboxFetchedBySelf.orderedItems[0].object.id; + // const outboxFetchedBySelf = await broker.call('activitypub.collection.get', { + // resourceUri: sebastien.outbox, + // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), + // webId: sebastien.id + // }); + // expect(outboxFetchedBySelf.orderedItems[0]).toMatchObject({ + // actor: sebastien.id, + // type: ACTIVITY_TYPES.UPDATE, + // object: { + // type: OBJECT_TYPES.NOTE, + // name: 'Message is private again' + // } + // }); + // const objectUri = outboxFetchedBySelf.orderedItems[0].object.id; - // Expect friend receives a `Delete`, if the Update is made private. - const friendOutbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.outbox, - afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id - }); - expect(friendOutbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, - type: ACTIVITY_TYPES.DELETE, - object: objectUri - }); + // // Expect friend receives a `Delete`, if the Update is made private. + // const friendOutbox = await broker.call('activitypub.collection.get', { + // resourceUri: simon.outbox, + // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), + // webId: simon.id + // }); + // expect(friendOutbox.orderedItems[0]).toMatchObject({ + // actor: sebastien.id, + // type: ACTIVITY_TYPES.DELETE, + // object: objectUri + // }); - await expect(() => - broker.call('ldp.resource.get', { - resourceUri: objectUri, - accept: MIME_TYPES.JSON, - webId: simon.id - }) - ).rejects.toThrow(); - }); - }); + // await expect(() => + // broker.call('ldp.resource.get', { + // resourceUri: objectUri, + // webId: simon.id + // }) + // ).rejects.toThrow(); + // }); + // }); }); diff --git a/src/middleware/tests/activitypub/shares.test.ts b/src/middleware/tests/activitypub/shares.test.ts index 3b82a3e86..cf8a2a7ac 100644 --- a/src/middleware/tests/activitypub/shares.test.ts +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -77,12 +77,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure the /shares collection has been created await waitForExpect(async () => { - await expect( - alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ shares: `${aliceMessageUri}/shares` }); }); @@ -90,10 +85,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure only the public announce activity has been added to the /shares collection await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/shares`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.toMatchObject({ type: 'Collection', items: publicShareActivity.id @@ -114,10 +106,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', await waitForExpect(async () => { // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( - alice.call('activitypub.collection.get', { - resourceUri: `${aliceMessageUri}/shares`, - accept: MIME_TYPES.JSON - }) + alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.not.toMatchObject({ items: publicShareActivity.id }); diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index 19cf6c437..a2e5e28e3 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -48,7 +48,8 @@ const initialize = async (port: any, withOldKeyStore = false) => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + mainDataset: CONFIG.MAIN_DATASET, + secure: false // TODO Remove when we move to Fuseki 5 }, activitypub: false, webfinger: false, diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index b440dc7d9..7da883e32 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -59,14 +59,7 @@ describe('keys', () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); const webIdDocument = await waitForResource(500, 'publicKey', 5, () => - broker.call( - 'webid.get', - { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }, - { meta: { $cache: false } } - ) + broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }) ); expect(webIdDocument).toBeDefined(); @@ -89,7 +82,6 @@ describe('keys', () => { const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -100,7 +92,6 @@ describe('keys', () => { await broker.call('keys.attachPublicKeyToWebId', { webId: user.webId, keyId: keyPair['@id'] || keyPair.id }); const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -121,7 +112,6 @@ describe('keys', () => { // Expect webId not to have key. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -150,7 +140,6 @@ describe('keys', () => { // Expect webId to not have old key but new key. const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -167,7 +156,6 @@ describe('keys', () => { // Expect publicKey to be present in `/public-keys` container. const publicKey = await broker.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'], - accept: MIME_TYPES.JSON, webId: user.webId }); expect(publicKey).toBeTruthy(); @@ -186,10 +174,9 @@ describe('keys', () => { await expect( broker.call('keys.container.get', { resourceUri: keyPair['@id'] || keyPair.id, - webId: user2.webId, - accept: MIME_TYPES.JSON + webId: user2.webId }) - ).rejects.toMatchObject({ data: { status: 'Forbidden' } }); + ).rejects.toThrow('Forbidden'); }); test('second key present in keys and public-keys container only', async () => { @@ -202,7 +189,6 @@ describe('keys', () => { const publicKey = await broker.call('keys.container.get', { resourceUri: keyPair['rdfs:seeAlso'], - accept: MIME_TYPES.JSON, webId: user.webId }); expect(publicKey).toBeTruthy(); @@ -210,7 +196,6 @@ describe('keys', () => { // Should not be present in webId. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -228,7 +213,6 @@ describe('keys', () => { // Expect the new key to be findable in the webId and the old one to be removed. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced rdfs:seeAlso). @@ -248,7 +232,6 @@ describe('keys', () => { // Should not be present in webId. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -294,14 +277,7 @@ describe('keys', () => { test('public key present in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - const webIdDocument = await broker.call( - 'webid.get', - { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }, - { meta: { $cache: false } } - ); + const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }); expect(webIdDocument.assertionMethod).toBeDefined(); expect( arrayOf(webIdDocument.assertionMethod).find( @@ -320,7 +296,6 @@ describe('keys', () => { const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -333,7 +308,6 @@ describe('keys', () => { await broker.call('keys.attachPublicKeyToWebId', { webId: user.webId, keyId: keyPair['@id'] || keyPair.id }); const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -356,7 +330,6 @@ describe('keys', () => { // Expect webId not to have key. const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -387,7 +360,6 @@ describe('keys', () => { // Expect webId to not have old key but new key. const webIdDocumentNew = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); expect( @@ -404,7 +376,6 @@ describe('keys', () => { // Expect publicKey to be present in `/public-keys` container. const publicKey = await broker.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'], - accept: MIME_TYPES.JSON, webId: user.webId }); expect(publicKey).toBeTruthy(); @@ -423,10 +394,9 @@ describe('keys', () => { await expect( broker.call('keys.container.get', { resourceUri: keyPair.id || keyPair['@id'], - webId: user2.webId, - accept: MIME_TYPES.JSON + webId: user2.webId }) - ).rejects.toMatchObject({ data: { status: 'Forbidden' } }); + ).rejects.toThrow('Forbidden'); }); test('second addable to webId', async () => { @@ -440,7 +410,6 @@ describe('keys', () => { // Expect the new key to be findable in the webId const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId, - accept: MIME_TYPES.JSON, webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced by rdfs:seeAlso). @@ -503,10 +472,7 @@ describe('keys', () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); expect(publicKey).toBeDefined(); expect(privateKey).toBeDefined(); - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }); + const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); expect(webIdDocument).toBeDefined(); expect(webIdDocument.publicKey).toBeDefined(); expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); @@ -533,10 +499,7 @@ describe('keys', () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); expect(publicKey).toBeDefined(); expect(privateKey).toBeDefined(); - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - accept: MIME_TYPES.JSON - }); + const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); expect(webIdDocument).toBeDefined(); expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); expect(webIdDocument.privateKey).toBeUndefined(); @@ -560,8 +523,7 @@ describe('keys', () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - accept: MIME_TYPES.JSON + resourceUri: user.webId }); expect(webIdDocument).toBeDefined(); const { publicKey } = webIdDocument; diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index de4ed66e5..be294b357 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -27,8 +27,7 @@ const setUpUser = async (broker: any, username: any) => { }); user.webIdDoc = await broker.call('ldp.resource.get', { resourceUri: user.webId, - webId: 'system', - accept: MIME_TYPES.JSON + webId: 'system' }); user.fetch = async (uri: any, init: any) => { diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 283c13263..f9923b29a 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -1,6 +1,6 @@ services: fuseki_tests: - image: semapps/jena-fuseki-webacl + image: stain/jena-fuseki:5.1.0 container_name: fuseki_tests restart: always volumes: diff --git a/src/middleware/tests/interop/initialize.ts b/src/middleware/tests/interop/initialize.ts index 6c7a140ba..a59a63e92 100644 --- a/src/middleware/tests/interop/initialize.ts +++ b/src/middleware/tests/interop/initialize.ts @@ -81,7 +81,8 @@ const initialize = async ( url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset + mainDataset, + secure: false // TODO Remove when we move to Fuseki 5 }, containers, ontologies: [pair], diff --git a/src/middleware/tests/interop/mirror-protected.test.ts b/src/middleware/tests/interop/mirror-protected.test.ts index 54981e64a..97bbe0a81 100644 --- a/src/middleware/tests/interop/mirror-protected.test.ts +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -60,7 +60,6 @@ describe('Resource on server1 is shared with user on server2', () => { '@type': 'Resource', label: 'My protected resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/protected-resources', webId: 'system' }); diff --git a/src/middleware/tests/interop/mirror.test.ts b/src/middleware/tests/interop/mirror.test.ts index edd71b909..bfde243cf 100644 --- a/src/middleware/tests/interop/mirror.test.ts +++ b/src/middleware/tests/interop/mirror.test.ts @@ -58,7 +58,6 @@ describe('Server2 mirror server1', () => { '@type': 'Resource', label: 'My resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/resources' }); @@ -86,8 +85,7 @@ describe('Server2 mirror server1', () => { '@id': resourceUri, '@type': 'Resource', label: 'My resource updated' - }, - contentType: MIME_TYPES.JSON + } }); await waitForExpect(async () => { diff --git a/src/middleware/tests/interop/patch-remote.test.ts b/src/middleware/tests/interop/patch-remote.test.ts index 7da91ab3a..437901197 100644 --- a/src/middleware/tests/interop/patch-remote.test.ts +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -31,7 +31,6 @@ describe('Server2 imports a single resource from server1', () => { '@type': 'Resource', label: 'My resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/resources' }); @@ -79,8 +78,7 @@ describe('Server2 imports a single resource from server1', () => { '@id': resourceUri, '@type': 'Resource', label: 'My resource updated' - }, - contentType: MIME_TYPES.JSON + } }); // Force call of updateSingleMirroredResources diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index 415bdb1f6..8fe001f3e 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -33,7 +33,6 @@ describe('An inference is added between server1 et server2', () => { '@type': 'Resource', label: 'My parent resource' }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3001/resources' }); @@ -48,15 +47,12 @@ describe('An inference is added between server1 et server2', () => { '@id': resourceUri1 } }, - contentType: MIME_TYPES.JSON, containerUri: 'http://localhost:3002/resources' }); // @ts-expect-error await waitForExpect(async () => { - await expect( - server1.call('ldp.resource.get', { resourceUri: resourceUri1, accept: MIME_TYPES.JSON }) - ).resolves.toMatchObject({ + await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.toMatchObject({ id: resourceUri1, 'pair:hasPart': resourceUri2 }); @@ -77,9 +73,7 @@ describe('An inference is added between server1 et server2', () => { // @ts-expect-error await waitForExpect(async () => { - await expect( - server2.call('ldp.resource.get', { resourceUri: resourceUri2, accept: MIME_TYPES.JSON }) - ).resolves.toMatchObject({ + await expect(server2.call('ldp.resource.get', { resourceUri: resourceUri2 })).resolves.toMatchObject({ id: resourceUri2, 'pair:inspiredBy': resourceUri1 }); @@ -99,15 +93,14 @@ describe('An inference is added between server1 et server2', () => { partOf: { '@id': resourceUri1 } - }, - contentType: MIME_TYPES.JSON + } }); // @ts-expect-error await waitForExpect(async () => { - await expect( - server1.call('ldp.resource.get', { resourceUri: resourceUri1, accept: MIME_TYPES.JSON }) - ).resolves.not.toHaveProperty('pair:hasInspired'); + await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( + 'pair:hasInspired' + ); }); }); @@ -116,9 +109,10 @@ describe('An inference is added between server1 et server2', () => { // @ts-expect-error await waitForExpect(async () => { - await expect( - server1.call('ldp.resource.get', { resourceUri: resourceUri1, accept: MIME_TYPES.JSON }) - ).resolves.not.toHaveProperty('pair:hasPart'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. + await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( + 'pair:hasPart' + ); }); }); }); diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 816984511..d4cef3a8a 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -81,12 +81,7 @@ describe('Binary handling of LDP server', () => { }); test('Get image as resource (via Moleculer action)', async () => { - await expect( - broker.call('ldp.resource.get', { - resourceUri: fileUri, - accept: MIME_TYPES.JSON - }) - ).resolves.toMatchObject({ + await expect(broker.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ '@id': fileUri, '@type': 'semapps:File', 'semapps:fileName': fileName, diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 79efd5dc7..ce56ff4fa 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -34,8 +34,7 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}objects`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}objects` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}objects`, @@ -63,7 +62,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}`, - accept: MIME_TYPES.JSON, webId: 'system' }) ).resolves.toMatchObject({ @@ -78,7 +76,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}parent`, - accept: MIME_TYPES.JSON, webId: 'system' }) ).resolves.toMatchObject({ @@ -94,7 +91,6 @@ describe('LDP container tests', () => { test('Post a resource in a container', async () => { resourceUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, - contentType: MIME_TYPES.JSON, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -106,8 +102,7 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}resources` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, @@ -126,7 +121,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, - contentType: MIME_TYPES.JSON, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -151,7 +145,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON, jsonContext: { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' } @@ -175,7 +168,6 @@ describe('LDP container tests', () => { test('Get container with filters param', async () => { await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, - contentType: MIME_TYPES.JSON, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -188,8 +180,7 @@ describe('LDP container tests', () => { // Get without filters param await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}resources` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, @@ -208,7 +199,6 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON, filters: { 'pair:label': 'My project 2' } @@ -227,7 +217,6 @@ describe('LDP container tests', () => { test('Get container without resources', async () => { const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON, doNotIncludeResources: true }); @@ -243,8 +232,7 @@ describe('LDP container tests', () => { // Project 1 should have disappeared from the container await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON + containerUri: `${CONFIG.HOME_URL}resources` }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, @@ -265,10 +253,7 @@ describe('LDP container tests', () => { // Container should now be empty // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { - const container = await broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, - accept: MIME_TYPES.JSON - }); + const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` }); expect(container['ldp:contains']).toHaveLength(0); }); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts new file mode 100644 index 000000000..7d3a033da --- /dev/null +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -0,0 +1,223 @@ +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { fetchServer } from '../utils.ts'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; + +jest.setTimeout(20000); +let broker: any; + +beforeAll(async () => { + broker = await initialize(); +}); + +afterAll(async () => { + await broker.stop(); +}); + +describe('Content negotiation', () => { + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message + const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); + let projectUri: any; + let project2Uri: any; + let project3Uri: any; + + test('Post resource in JSON-LD', async () => { + const { headers } = await fetchServer(containerUri, { + method: 'POST', + body: { + '@context': { + '@vocab': 'http://virtual-assembly.org/ontologies/pair#' + }, + '@type': 'Project', + description: 'myProject', + label: 'myLabel' + } + }); + + projectUri = headers.get('Location'); + + expect(projectUri).not.toBeNull(); + }); + + test('Get resource in Turtle format', async () => { + const { body } = await fetchServer(projectUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TURTLE + }) + }); + + expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); + expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); + }); + + test('Get resource in N-Triples format', async () => { + const { body } = await fetchServer(projectUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TRIPLE + }) + }); + + expect(body).toMatch( + new RegExp( + `<${projectUri}>.* ` + ) + ); + expect(body).toMatch( + new RegExp(`<${projectUri}>.* "myProject"`) + ); + expect(body).toMatch(new RegExp(`<${projectUri}>.* "myLabel"`)); + }); + + test('Get container in Turtle format', async () => { + const { body } = await fetchServer(containerUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TURTLE + }) + }); + + expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:BasicContainer, ldp:Container`)); + expect(body).toMatch(new RegExp(`ldp:contains <${projectUri}>`)); + + expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); + expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); + }); + + test('Get container in N-Triples format', async () => { + const { body } = await fetchServer(containerUri, { + headers: new fetch.Headers({ + Accept: MIME_TYPES.TRIPLE + }) + }); + + expect(body).toMatch( + new RegExp( + `<${containerUri}> ` + ) + ); + expect(body).toMatch( + new RegExp( + `<${containerUri}> ` + ) + ); + expect(body).toMatch(new RegExp(`<${containerUri}> <${projectUri}>`)); + expect(body).toMatch( + new RegExp( + `<${projectUri}>.* ` + ) + ); + }); + + test('Post resource in Turtle format', async () => { + const { headers, status } = await fetchServer(containerUri, { + method: 'POST', + body: ` + @prefix pair: . + <> a pair:Project; + pair:label "myProject 2" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TURTLE + }) + }); + + expect(status).toBe(201); + + project2Uri = headers.get('Location'); + + const project2 = await broker.call('ldp.resource.get', { + resourceUri: project2Uri + }); + expect(project2).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project2Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 2' + }); + }); + + test('Post resource in N-Triples format', async () => { + const { headers, status } = await fetchServer(containerUri, { + method: 'POST', + body: ` + <> . + <> "myProject 3" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TRIPLE + }) + }); + + expect(status).toBe(201); + + project3Uri = headers.get('Location'); + + const project2 = await broker.call('ldp.resource.get', { + resourceUri: project3Uri + }); + expect(project2).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project3Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 3' + }); + }); + + test('Update resource in Turtle format', async () => { + const { status } = await fetchServer(project2Uri, { + method: 'PUT', + body: ` + @prefix pair: . + <${project2Uri}> a pair:Project; + pair:label "myProject 2 - updated" ; + pair:description "A description" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TURTLE + }) + }); + + expect(status).toBe(204); + + const project2 = await broker.call('ldp.resource.get', { + resourceUri: project2Uri + }); + expect(project2).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project2Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 2 - updated', + 'pair:description': 'A description' + }); + }); + + test('Update resource in N-Triples format', async () => { + const { status } = await fetchServer(project3Uri, { + method: 'PUT', + body: ` + <${project3Uri}> . + <${project3Uri}> "myProject 3 - updated" . + <${project3Uri}> "A description" . + `, + headers: new fetch.Headers({ + 'Content-Type': MIME_TYPES.TRIPLE + }) + }); + + expect(status).toBe(204); + + const project3 = await broker.call('ldp.resource.get', { + resourceUri: project3Uri + }); + expect(project3).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project3Uri, + '@type': 'pair:Project', + 'pair:label': 'myProject 3 - updated', + 'pair:description': 'A description' + }); + }); +}); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 87c2fae3b..b35cc0dfa 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -77,7 +77,8 @@ const initialize = async () => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + mainDataset: CONFIG.MAIN_DATASET, + secure: false // TODO Remove when we move to Fuseki 5 }, containers, ontologies: [pair, petr], diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index 6d4953b81..9c6220a4a 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -41,52 +41,27 @@ describe('Resource CRUD operations', () => { description: 'The place to be' } }, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources` }); - project1 = await broker.call('ldp.resource.get', { - resourceUri, - accept: MIME_TYPES.JSON - }); + project1 = await broker.call('ldp.resource.get', { resourceUri }); expect(project1['pair:description']).toBe('myProject'); }, 20000); - test('Get resource in JSON-LD format', async () => { - const newProject = await broker.call('ldp.resource.get', { - accept: MIME_TYPES.JSON, - resourceUri: project1['@id'] - }); - expect(newProject['pair:description']).toBe('myProject'); - }, 20000); - - test('Get resource in turtle format', async () => { - const newProject = await broker.call('ldp.resource.get', { - accept: MIME_TYPES.TURTLE, - resourceUri: project1['@id'] - }); - expect(newProject).toMatch(new RegExp(`<${project1['@id']}>`)); - expect(newProject).toMatch(new RegExp(`a.*pair:Project`)); - expect(newProject).toMatch(new RegExp(`pair:description.*"myProject"`)); - expect(newProject).toMatch(new RegExp(`pair:label.*"myTitle"`)); - }, 20000); - - test('Get resource in triple format', async () => { - const newProject = await broker.call('ldp.resource.get', { - accept: MIME_TYPES.TRIPLE, - resourceUri: project1['@id'] + test('Get resource', async () => { + const newProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + expect(newProject).toMatchObject({ + '@context': 'http://localhost:3000/.well-known/context.jsonld', + '@id': project1['@id'], + '@type': 'pair:Project', + 'pair:affiliates': expect.arrayContaining([ + 'http://localhost:3000/users/guillaume', + 'http://localhost:3000/users/sebastien' + ]), + 'pair:description': 'myProject', + 'pair:hasLocation': expect.objectContaining({ 'pair:description': 'The place to be', 'pair:label': 'Paris' }), + 'pair:label': 'myTitle' }); - expect(newProject).toMatch( - new RegExp( - `<${project1['@id']}>.*.*` - ) - ); - expect(newProject).toMatch( - new RegExp(`<${project1['@id']}>.*.*"myProject"`) - ); - expect(newProject).toMatch( - new RegExp(`<${project1['@id']}>.*.*"myTitle"`) - ); }, 20000); test('Put resource', async () => { @@ -103,15 +78,10 @@ describe('Resource CRUD operations', () => { hasLocation: { label: 'Nantes' } - }, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON + } }); - const updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + const updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -144,16 +114,9 @@ describe('Resource CRUD operations', () => { } ] }; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -176,16 +139,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -207,16 +163,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -246,16 +195,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -278,16 +220,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -307,16 +242,9 @@ describe('Resource CRUD operations', () => { // @ts-expect-error TS(2322): Type 'undefined' is not assignable to type '{ labe... Remove this comment to see the full error message resourceUpdated.hasLocation = undefined; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject['pair:hasLocation']).toBeUndefined(); @@ -325,16 +253,9 @@ describe('Resource CRUD operations', () => { { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -350,16 +271,9 @@ describe('Resource CRUD operations', () => { { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -388,14 +302,10 @@ describe('Resource CRUD operations', () => { const resourceUri = await broker.call('ldp.container.post', { resource: resourceToPost, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources2` }); - project2 = await broker.call('ldp.resource.get', { - resourceUri, - accept: MIME_TYPES.JSON - }); + project2 = await broker.call('ldp.resource.get', { resourceUri }); expect(project2).toMatchObject({ 'pair:hasLocation': { @@ -424,14 +334,10 @@ describe('Resource CRUD operations', () => { const resourceUri3 = await broker.call('ldp.container.post', { resource: resourceToPost, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources2` }); - const project3 = await broker.call('ldp.resource.get', { - resourceUri: resourceUri3, - accept: MIME_TYPES.JSON - }); + const project3 = await broker.call('ldp.resource.get', { resourceUri: resourceUri3 }); expect(project3).toMatchObject({ 'pair:hasLocation': [ @@ -468,14 +374,10 @@ describe('Resource CRUD operations', () => { const resourceUri4 = await broker.call('ldp.container.post', { resource: resourceToPost, - contentType: MIME_TYPES.JSON, containerUri: `${CONFIG.HOME_URL}resources2` }); - const project4 = await broker.call('ldp.resource.get', { - resourceUri: resourceUri4, - accept: MIME_TYPES.JSON - }); + const project4 = await broker.call('ldp.resource.get', { resourceUri: resourceUri4 }); expect(project4).toMatchObject({ 'pair:hasLocation': { @@ -510,16 +412,9 @@ describe('Resource CRUD operations', () => { ] }; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project2['@id'], - accept: MIME_TYPES.JSON - }); + let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -554,16 +449,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { - resource: resourceUpdated, - accept: MIME_TYPES.JSON, - contentType: MIME_TYPES.JSON - }); + await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { - resourceUri: project2['@id'], - accept: MIME_TYPES.JSON - }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -587,7 +475,6 @@ describe('Resource CRUD operations', () => { '@type': 'Theme', label: 'Permaculture' }, - contentType: MIME_TYPES.JSON, slug: 'Permaculture' }); @@ -603,8 +490,7 @@ describe('Resource CRUD operations', () => { hasTopic: { '@id': themeUri } - }, - contentType: MIME_TYPES.JSON + } }); // Remove the relation to the theme @@ -616,15 +502,11 @@ describe('Resource CRUD operations', () => { '@type': 'Project', '@id': project1['@id'], label: 'myTitle' - }, - contentType: MIME_TYPES.JSON + } }); // Ensure the theme has not been deleted - const theme = await broker.call('ldp.resource.get', { - resourceUri: themeUri, - accept: MIME_TYPES.JSON - }); + const theme = await broker.call('ldp.resource.get', { resourceUri: themeUri }); expect(theme).toMatchObject({ '@id': themeUri, @@ -643,7 +525,6 @@ describe('Resource CRUD operations', () => { '@type': 'Project', label: 'SemanticApps' }, - contentType: MIME_TYPES.JSON, slug: 'SemApps' }); @@ -663,14 +544,10 @@ describe('Resource CRUD operations', () => { namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('SemanticApps') ) - ], - contentType: MIME_TYPES.JSON + ] }); - const project = await broker.call('ldp.resource.get', { - resourceUri: projectUri, - accept: MIME_TYPES.JSON - }); + const project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ '@id': projectUri, @@ -689,7 +566,6 @@ describe('Resource CRUD operations', () => { '@type': 'Project', label: 'ActivityPods' }, - contentType: MIME_TYPES.JSON, slug: 'ActivityPods' }); @@ -707,14 +583,10 @@ describe('Resource CRUD operations', () => { namedNode('http://virtual-assembly.org/ontologies/pair#Place') ), quad(blankNode('b_0'), namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('Paris')) - ], - contentType: MIME_TYPES.JSON + ] }); - let project = await broker.call('ldp.resource.get', { - resourceUri: projectUri, - accept: MIME_TYPES.JSON - }); + let project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ '@id': projectUri, @@ -739,14 +611,10 @@ describe('Resource CRUD operations', () => { namedNode('http://virtual-assembly.org/ontologies/pair#Place') ), quad(blankNode('b_0'), namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('Compiègne')) - ], - contentType: MIME_TYPES.JSON + ] }); - project = await broker.call('ldp.resource.get', { - resourceUri: projectUri, - accept: MIME_TYPES.JSON - }); + project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ '@id': projectUri, @@ -769,11 +637,6 @@ describe('Resource CRUD operations', () => { resourceUri: project1['@id'] }); - await expect( - broker.call('ldp.resource.get', { - resourceUri: project1['@id'], - accept: MIME_TYPES.JSON - }) - ).rejects.toThrow(`Cannot get permissions of non-existing container or resource ${project1['@id']}`); + await expect(broker.call('ldp.resource.get', { resourceUri: project1['@id'] })).rejects.toThrow(`not found`); }, 20000); }); diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts index c7e66a606..ad9e83bea 100644 --- a/src/middleware/tests/webId/webId.test.ts +++ b/src/middleware/tests/webId/webId.test.ts @@ -32,7 +32,8 @@ beforeAll(async () => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + mainDataset: CONFIG.MAIN_DATASET, + secure: false // TODO Remove when we move to Fuseki 5 }, containers: ['/users'], activitypub: false, diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts new file mode 100644 index 000000000..f1defe69c --- /dev/null +++ b/src/middleware/tests/webacl/resource.test.ts @@ -0,0 +1,303 @@ +import { namedNode, triple, literal } from '@rdfjs/data-model'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; + +jest.setTimeout(20000); +const ALICE_WEBID = 'http://localhost:3000/alice'; +const BOB_WEBID = 'http://localhost:3000/bob'; +let broker: any; + +beforeAll(async () => { + broker = await initialize(); +}); + +afterAll(async () => { + await broker.stop(); +}); + +describe('Permissions check on a specific resource', () => { + const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions + let resourceUri: any; + + test('Get/patch/put/delete resource without permission', async () => { + // When posting as system, no permissions are given on the resource + resourceUri = await broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #1' + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.get', { + resourceUri, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToAdd: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1 - edited' + }, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + + await expect( + broker.call('ldp.resource.delete', { + resourceUri, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + }); + + test('Give Alice read permission on resource', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, read: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.get', { + resourceUri, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + await expect( + broker.call('ldp.container.get', { + containerUri, + webId: ALICE_WEBID + }) + ).rejects.toThrow('Forbidden'); + }); + + test('Give Alice read permission on container', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: { + user: { uri: ALICE_WEBID, read: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.container.get', { + containerUri, + webId: ALICE_WEBID + }) + ).resolves.toMatchObject({ + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'ldp:contains': expect.arrayContaining([ + expect.objectContaining({ + id: resourceUri + }) + ]) + }); + }); + + test('Give Bob default read permission on container', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: { + default: { + user: { uri: BOB_WEBID, read: true } + } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.get', { + resourceUri, + webId: BOB_WEBID + }) + ).resolves.toBeDefined(); + }); + + test('Post data without append permission on container', async () => { + await expect( + broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #2' + }, + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + }); + + test('Give Alice append permission on container', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: { + user: { uri: ALICE_WEBID, append: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #2' + }, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + }); + + test('Give Alice append permission on resource', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, append: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToAdd: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1', + content: 'Welcome everybody', + startTime: '2014-12-31T23:00:00-08:00' + }, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + // We cannot remove content with acl:Append permission + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToRemove: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + + // We cannot remove content with acl:Append permission + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1 - edited' + }, + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + }); + + test('Give Alice write permission on resource', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, write: true } + }, + webId: 'system' + }); + + await expect( + broker.call('ldp.resource.patch', { + resourceUri, + triplesToRemove: [ + triple( + namedNode(resourceUri), + namedNode('https://www.w3.org/ns/activitystreams#content'), + literal('Welcome everybody') + ) + ], + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + + await expect( + broker.call('ldp.resource.put', { + resource: { + id: resourceUri, + type: 'Event', + name: 'My event #1 - edited' + }, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + }); + + test('Give Alice control permission on resource', async () => { + await expect( + broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: BOB_WEBID, write: true } + }, + webId: ALICE_WEBID + }) + ).rejects.toThrow(); + + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: ALICE_WEBID, control: true } + }, + webId: 'system' + }); + + await expect( + broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: BOB_WEBID, write: true } + }, + webId: ALICE_WEBID + }) + ).resolves.toBeDefined(); + }); +}); diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts new file mode 100644 index 000000000..5fdf4eb83 --- /dev/null +++ b/src/middleware/tests/webacl/utils.test.ts @@ -0,0 +1,232 @@ +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; + +jest.setTimeout(20000); +const ALICE_WEBID = 'http://localhost:3000/alice'; +const BOB_WEBID = 'http://localhost:3000/bob'; +let broker: any; + +beforeAll(async () => { + broker = await initialize(); +}); + +afterAll(async () => { + await broker.stop(); +}); + +describe('Test various actions of the webacl.resource service', () => { + const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions + let resourceUri: any; + + test('Alice see her rights correctly', async () => { + resourceUri = await broker.call('ldp.container.post', { + containerUri, + resource: { + type: 'Event', + name: 'My event #1' + }, + webId: 'system' + }); + + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + anon: { read: true }, + user: { uri: ALICE_WEBID, read: true, write: true, control: true } + }, + webId: 'system' + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: ALICE_WEBID + }) + ).resolves.toMatchObject({ + read: true, + append: false, // Even if we have given acl:Write permission, acl:Append is not given + write: true, + control: true + }); + + const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: ALICE_WEBID }); + + expect(rights['@graph']).toHaveLength(3); + + expect(rights).toMatchObject({ + '@graph': expect.arrayContaining([ + expect.objectContaining({ + '@id': '#Read', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': ALICE_WEBID, + 'acl:agentClass': 'foaf:Agent', + 'acl:mode': 'acl:Read' + }), + expect.objectContaining({ + '@id': '#Write', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': ALICE_WEBID, + 'acl:mode': 'acl:Write' + }), + expect.objectContaining({ + '@id': '#Control', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': ALICE_WEBID, + 'acl:mode': 'acl:Control' + }) + ]) + }); + }); + + test('Anonymous user cannot see Alice rights', async () => { + const rights = await broker.call('webacl.resource.getRights', { resourceUri }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri + }) + ).resolves.toMatchObject({ + read: true, + append: false, + write: false, + control: false + }); + + expect(rights['@graph']).toHaveLength(1); + + expect(rights).toMatchObject({ + '@graph': expect.arrayContaining([ + expect.objectContaining({ + '@id': '#Read', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agentClass': 'foaf:Agent', + 'acl:mode': 'acl:Read' + }) + ]) + }); + }); + + test('Bob can see his rights but not Alice rights', async () => { + await broker.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { uri: BOB_WEBID, read: true, write: true } + }, + webId: 'system' + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: BOB_WEBID + }) + ).resolves.toMatchObject({ + read: true, + append: false, // Even if we have given acl:Write permission, acl:Append is not given + write: true, + control: false + }); + + const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); + + expect(rights['@graph']).toHaveLength(2); + + expect(rights).toMatchObject({ + '@graph': expect.arrayContaining([ + expect.objectContaining({ + '@id': '#Read', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': BOB_WEBID, + 'acl:agentClass': 'foaf:Agent', + 'acl:mode': 'acl:Read' + }), + expect.objectContaining({ + '@id': '#Write', + '@type': 'acl:Authorization', + 'acl:accessTo': resourceUri, + 'acl:agent': BOB_WEBID, + 'acl:mode': 'acl:Write' + }) + ]) + }); + }); + + test('Resource is public according to isPublic action', async () => { + await expect( + broker.call('webacl.resource.isPublic', { + resourceUri + }) + ).resolves.toBeTruthy(); + }); + + test('Alice and Bob is returned by getUsersWithReadRights action', async () => { + await expect( + broker.call('webacl.resource.getUsersWithReadRights', { + resourceUri + }) + ).resolves.toContain(ALICE_WEBID, BOB_WEBID); + }); + + test('Remove write permission for Bob', async () => { + await broker.call('webacl.resource.removeRights', { + resourceUri, + rights: { + user: { uri: BOB_WEBID, write: true } + }, + webId: ALICE_WEBID // Alice has acl:Control permission + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: BOB_WEBID + }) + ).resolves.toMatchObject({ + read: true, // Bob still has acl:Read permission + append: false, + write: false, + control: false + }); + }); + + test('Remove all permissions for Alice', async () => { + await broker.call('webacl.resource.deleteAllUserRights', { + webId: ALICE_WEBID + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: ALICE_WEBID + }) + ).resolves.toMatchObject({ + read: true, // There still is anonymous acl:Read right + append: false, + write: false, + control: false + }); + }); + + test('Remove all permissions for resource', async () => { + await broker.call('webacl.resource.deleteAllRights', { + resourceUri + }); + + await expect( + broker.call('webacl.resource.hasRights', { + resourceUri, + webId: 'anon' + }) + ).resolves.toMatchObject({ + read: false, + append: false, + write: false, + control: false + }); + }); +}); diff --git a/website/docs/middleware/ldp/permissions.md b/website/docs/middleware/ldp/permissions.md new file mode 100644 index 000000000..eeb0c8b2b --- /dev/null +++ b/website/docs/middleware/ldp/permissions.md @@ -0,0 +1,50 @@ +--- +title: PermissionsService +--- + +This service is automatically created by the [LdpService](index.md) with the key `permissions`. It is used by the LdpService, but also by other services, to check if a given user has the right to access a resource with a given mode. It does not do anything, but relies on authorizers that will do the check (for example against [WebACL permissions](../webacl/)). + +## Actions + +The following service actions are available: + +### `addAuthorizer` + +Add a new authorizer + +##### Parameters + +| Property | Type | Default | Description | +| ------------ | -------- | ------------ | ------------------------------------------------------------------ | +| `actionName` | `String` | **required** | Full name of the Moleculer action to be called | +| `priority` | `Number` | 10 | The priority in regard to other authorizers (1 = highest priority) | + +### `has` + +Calls every registered authorizers. When one of them returns true, return true. If none of them returns true, return false. + +##### Parameters + +| Property | Type | Default | Description | +| -------- | -------- | ------------ | -------------------------------------------------------------------------------- | +| `uri` | `String` | **required** | URI of the resource to check | +| `type` | `String` | "resource" | The type of provided resource. Can be "resource", "container" or "custom" | +| `mode` | `String` | "acl:Read" | The mode to check. Can be "acl:Read", "acl:Append", "acl:Write" or "acl:Control" | +| `webId` | `String` | **required** | The WebID of the user to check | + +##### Return value + +`true` if one of the authorizer returned `true`, `false` otherwise. + +### `check` + +Calls the `has` action. If it returns false, throws a 403 (Forbidden) error. + +##### Parameters + +| Property | Type | Default | Description | +| -------- | -------- | ------------ | -------------------------------------------------------------------------------- | +| `uri` | `String` | **required** | URI of the resource to check | +| `type` | `String` | "resource" | The type of provided resource. Can be "resource", "container" or "custom" | +| `mode` | `String` | "acl:Read" | The mode to check. Can be "acl:Read", "acl:Append", "acl:Write" or "acl:Control" | +| `webId` | `String` | **required** | The WebID of the user to check | diff --git a/website/sidebars.js b/website/sidebars.js index 83bbc6485..3482afb4c 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -57,6 +57,7 @@ module.exports = { 'middleware/ldp/container', 'middleware/ldp/link-header', 'middleware/ldp/registry', + 'middleware/ldp/permissions', 'middleware/ldp/controlled-container', 'middleware/ldp/single-resource-container', 'middleware/ldp/document-tagger', From 5fb8a59a5d5830c19cf536303e19729482352c26 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 8 Aug 2025 16:43:03 +0200 Subject: [PATCH 037/165] Add tripleadmin to containers --- src/middleware/tests/docker-compose.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index f9923b29a..36450ab7d 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -37,6 +37,20 @@ services: - '4567' environment: REDIS_HOST: 'redis' + + tripleadmin: + image: mguihal/tripleadmin + container_name: tripleadmin + depends_on: + - fuseki_tests + ports: + - '3033:3033' + extra_hosts: + - 'localhost:host-gateway' + environment: + - TRIPLEADMIN_HOST=http://localhost:3040/ + - TRIPLEADMIN_USERNAME=admin + networks: default: name: middleware_tests_network From f3115b40cab25190d82198cf24f5ec41bef28436 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 8 Aug 2025 16:55:06 +0200 Subject: [PATCH 038/165] Fix some activitypub tests --- .../services/activitypub/subservices/actor.js | 6 +- .../subservices/collection/actions/get.js | 48 +++++++---- .../subservices/collection/index.js | 39 ++++++--- .../subservices/collections-registry.js | 5 +- .../services/activitypub/subservices/inbox.js | 12 ++- .../activitypub/subservices/object.js | 5 ++ .../services/activitypub/subservices/reply.js | 14 +++- .../activitypub/services/migration.js | 8 +- .../ldp/services/container/actions/post.js | 80 ++++++++++++------- .../tests/activitypub/actors.test.js | 43 ++++++++++ .../tests/activitypub/collection-api.test.js | 22 +++-- .../tests/activitypub/collection.test.js | 26 +++--- 12 files changed, 217 insertions(+), 91 deletions(-) create mode 100644 src/middleware/tests/activitypub/actors.test.js diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js index d7474f190..6b902e54a 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js @@ -89,7 +89,8 @@ const ActorService = { updateType: 'insertdelete', insert: [ { - type: 'bgp', + type: 'graph', + name: namedNode(actorUri), triples: [ triple( namedNode(actorUri), @@ -106,7 +107,8 @@ const ActorService = { type: 'optional', patterns: [ { - type: 'bgp', + type: 'graph', + name: namedNode(actorUri), triples: [ triple( namedNode(actorUri), diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js index 76f69a625..57e3a6970 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js @@ -16,13 +16,15 @@ async function getCollectionMetadata(ctx, collectionUri, webId, dataset) { PREFIX semapps: SELECT ?ordered ?summary ?dereferenceItems ?itemsPerPage ?sortPredicate ?sortOrder WHERE { - <${collectionUri}> a . # This will return [] if the user has no read permission - BIND (EXISTS{<${collectionUri}> a } AS ?ordered) - OPTIONAL { <${collectionUri}> as:summary ?summary . } - OPTIONAL { <${collectionUri}> semapps:dereferenceItems ?dereferenceItems . } - OPTIONAL { <${collectionUri}> semapps:itemsPerPage ?itemsPerPage . } - OPTIONAL { <${collectionUri}> semapps:sortPredicate ?sortPredicate . } - OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } + GRAPH <${collectionUri}> { + <${collectionUri}> a . # This will return [] if the user has no read permission + BIND (EXISTS{<${collectionUri}> a } AS ?ordered) + OPTIONAL { <${collectionUri}> as:summary ?summary . } + OPTIONAL { <${collectionUri}> semapps:dereferenceItems ?dereferenceItems . } + OPTIONAL { <${collectionUri}> semapps:itemsPerPage ?itemsPerPage . } + OPTIONAL { <${collectionUri}> semapps:sortPredicate ?sortPredicate . } + OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } + } } `, dataset, @@ -42,7 +44,9 @@ async function verifyCursorExists(ctx, collectionUri, cursor, dataset) { PREFIX as: SELECT ?itemExists WHERE { - BIND (EXISTS{ <${collectionUri}> as:items <${cursor}> } AS ?itemExists) + GRAPH <${collectionUri}> { + BIND (EXISTS{ <${collectionUri}> as:items <${cursor}> } AS ?itemExists) + } } `, dataset, @@ -71,15 +75,26 @@ async function validateCursorParams(ctx, collectionUri, beforeEq, afterEq, datas * @returns {Promise} The collection item URIs */ async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { - const result = await ctx.call('triplestore.query', { - query: ` + const query = ` PREFIX as: SELECT DISTINCT ?itemUri WHERE { - <${collectionUri}> a as:Collection . - OPTIONAL { - <${collectionUri}> as:items ?itemUri . - ${options.ordered ? `OPTIONAL { ?itemUri <${options.sortPredicate}> ?order . }` : ''} + GRAPH <${collectionUri}> { + <${collectionUri}> a as:Collection . + OPTIONAL { + <${collectionUri}> as:items ?itemUri . + } + } + ${ + options.ordered + ? ` + OPTIONAL { + GRAPH ?g { + ?itemUri <${options.sortPredicate}> ?order . + } + } + ` + : '' } } ${ @@ -87,7 +102,10 @@ async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { ? `ORDER BY ${options.sortOrder === 'http://semapps.org/ns/core#DescOrder' ? 'DESC' : 'ASC'}( ?order )` : '' } - `, + `; + + const result = await ctx.call('triplestore.query', { + query, dataset, webId: 'system' }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js index abab77fd4..cae2e4ce0 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js @@ -125,7 +125,9 @@ const CollectionService = { PREFIX as: SELECT ( Count(?items) as ?count ) WHERE { - <${collectionUri}> as:items ?items . + GRAPH <${collectionUri}> { + <${collectionUri}> as:items ?items . + } } `, dataset: this.getCollectionDataset(collectionUri), @@ -147,8 +149,10 @@ const CollectionService = { PREFIX as: ASK WHERE { - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items <${itemUri}> . + GRAPH <${collectionUri}> { + <${collectionUri}> a as:Collection . + <${collectionUri}> as:items <${itemUri}> . + } } `, dataset: this.getCollectionDataset(collectionUri), @@ -178,6 +182,9 @@ const CollectionService = { query: sanitizeSparqlQuery` INSERT DATA { <${collectionUri}> <${itemUri}> + GRAPH <${collectionUri}> { + <${collectionUri}> <${itemUri}> + } } `, dataset: this.getCollectionDataset(collectionUri), @@ -205,8 +212,11 @@ const CollectionService = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` DELETE - WHERE - { <${collectionUri}> <${itemUri}> } + WHERE { + GRAPH <${collectionUri}> { + <${collectionUri}> <${itemUri}> + } + } `, dataset: this.getCollectionDataset(collectionUri), webId: 'system' @@ -223,17 +233,22 @@ const CollectionService = { * @param collectionUri The full URI of the collection */ async clear(ctx) { - const collectionUri = ctx.params.collectionUri.replace(/\/+$/, ''); + const { collectionUri } = ctx.params; await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` PREFIX as: DELETE { - ?s1 ?p1 ?o1 . + GRAPH ?g1 { + ?s1 ?p1 ?o1 . + } } WHERE { - FILTER(?container IN (<${collectionUri}>, <${`${collectionUri}/`}>)) . - ?container as:items ?s1 . - ?s1 ?p1 ?o1 . + GRAPH <${collectionUri}> { + <${collectionUri}> as:items ?s1 . + } + GRAPH ?g1 { + ?s1 ?p1 ?o1 . + } } `, dataset: this.getCollectionDataset(collectionUri), @@ -257,7 +272,9 @@ const CollectionService = { PREFIX ldp: SELECT ?actorUri WHERE { - ?actorUri ${prefix}:${collectionKey} <${collectionUri}> + GRAPH ?g { + ?actorUri ${prefix}:${collectionKey} <${collectionUri}> + } } `, dataset: this.getCollectionDataset(collectionUri), diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js index 433cf21ce..913ee52bd 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js @@ -142,7 +142,9 @@ const CollectionsRegistryService = { query: ` SELECT ?collectionUri WHERE { - ?objectUri <${attachPredicate}> ?collectionUri + GRAPH ?g { + ?objectUri <${attachPredicate}> ?collectionUri + } } `, webId: 'system', @@ -156,6 +158,7 @@ const CollectionsRegistryService = { query: ` PREFIX as: PREFIX semapps: + WITH <${collectionUri}> DELETE { <${collectionUri}> a ?type ; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js index d7329f067..2201e44d1 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js @@ -155,10 +155,14 @@ const InboxService = { PREFIX xsd: SELECT DISTINCT ?activityUri WHERE { - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items ?activityUri . - ?activityUri as:published ?published . - ${filters ? `FILTER (${filters.join(' && ')})` : ''} + GRAPH <${collectionUri}> { + <${collectionUri}> a as:Collection . + <${collectionUri}> as:items ?activityUri . + } + GRAPH ?g { + ?activityUri as:published ?published . + ${filters ? `FILTER (${filters.join(' && ')})` : ''} + } } ORDER BY ?published `, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js index bc114b26d..7bea90f4b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.js @@ -167,6 +167,10 @@ const ObjectService = { const { resourceUri, formerType } = ctx.params; const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); + // We need to recreate the document as it has been deleted + // TODO See how we can avoid this since it will not work with NextGraph + await ctx.call('triplestore.document.create', { documentUri: resourceUri }); + // Insert directly the Tombstone in the triple store to avoid resource creation side-effects await ctx.call('triplestore.insert', { resource: { @@ -178,6 +182,7 @@ const ObjectService = { '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' } }, + graphName: resourceUri, webId: 'system' }); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js index c498d9041..3e4055a9e 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js @@ -48,12 +48,18 @@ const ReplyService = { query: sanitizeSparqlQuery` PREFIX as: DELETE { - ?collection as:items <${objectUri}> . + GRAPH ?g1 { + ?collection as:items <${objectUri}> . + } } WHERE { - ?collection as:items <${objectUri}> . - ?collection a as:Collection . - ?object as:replies ?collection . + GRAPH ?g1 { + ?collection as:items <${objectUri}> . + ?collection a as:Collection . + } + GRAPH ?g2 { + ?object as:replies ?collection . + } } `, webId: 'system' diff --git a/src/middleware/packages/activitypub/services/migration.js b/src/middleware/packages/activitypub/services/migration.js index a1dda30a8..ed502b170 100644 --- a/src/middleware/packages/activitypub/services/migration.js +++ b/src/middleware/packages/activitypub/services/migration.js @@ -19,10 +19,14 @@ module.exports = { PREFIX as: PREFIX ldp: INSERT { - <${collectionsContainerUri}> ldp:contains ?collectionUri + GRAPH <${collectionsContainerUri}> { + <${collectionsContainerUri}> ldp:contains ?collectionUri + } } WHERE { - ?collectionUri a as:Collection + GRAPH ?g { + ?collectionUri a as:Collection + } } `, webId: 'system' diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.js index f935e4c3e..c2dbf6b7b 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.js +++ b/src/middleware/packages/ldp/services/container/actions/post.js @@ -1,5 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); +const { sanitizeSparqlQuery } = require('@semapps/triplestore'); const { cleanUndefined } = require('../../../utils'); module.exports = { @@ -88,37 +89,62 @@ module.exports = { forcedResourceUri || (await ctx.call('ldp.resource.generateId', { containerUri, slug, isContainer })); await ctx.call('triplestore.document.create', { documentUri: resourceUri }); - if (file) { - resource = await ctx.call('ldp.resource.upload', { resourceUri, file }); - } + // We must add this first, otherwise side effects will not find the container of the created resource + // But this create race conditions, especially when testing, since uncreated resources are linked to containers + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + GRAPH <${containerUri}> { + <${containerUri}> <${resourceUri}> + } + } + `, + webId + }); - if (isContainer) { - await ctx.call('ldp.container.create', { - containerUri: resourceUri, - title: expandedResource['http://purl.org/dc/terms/title']?.[0]['@value'], - description: expandedResource['http://purl.org/dc/terms/description']?.[0]['@value'], - webId - }); - } else { - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); - - // Change relative URIs to full URIs - const resourceWithBase = resource['@graph'] - ? await ctx.call('jsonld.parser.changeBase', { - input: resource, - base: resourceUri - }) - : { ...resource, '@id': resourceUri }; - - await ctx.call(controlledActions.create || 'ldp.resource.create', { - resource: resourceWithBase, - resourceUri, + try { + if (file) { + resource = await ctx.call('ldp.resource.upload', { resourceUri, file }); + } + + if (isContainer) { + await ctx.call('ldp.container.create', { + containerUri: resourceUri, + title: expandedResource['http://purl.org/dc/terms/title']?.[0]['@value'], + description: expandedResource['http://purl.org/dc/terms/description']?.[0]['@value'], + webId + }); + } else { + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); + + // Change relative URIs to full URIs + const resourceWithBase = resource['@graph'] + ? await ctx.call('jsonld.parser.changeBase', { + input: resource, + base: resourceUri + }) + : { ...resource, '@id': resourceUri }; + + await ctx.call(controlledActions.create || 'ldp.resource.create', { + resource: resourceWithBase, + resourceUri, + webId + }); + } + } catch (e) { + // If there was an error inserting the resource, detach it from the container + await ctx.call('triplestore.update', { + query: ` + DELETE WHERE { + GRAPH <${containerUri}> { + <${containerUri}> <${resourceUri}> + } + }`, webId }); - } - // Attach the resource to the parent container - await this.actions.attach({ containerUri, resourceUri, webId }, { meta: { skipEmitEvent: true }, parentCtx: ctx }); + throw e; + } if (!ctx.meta.skipEmitEvent) { ctx.emit( diff --git a/src/middleware/tests/activitypub/actors.test.js b/src/middleware/tests/activitypub/actors.test.js new file mode 100644 index 000000000..c3ad0e769 --- /dev/null +++ b/src/middleware/tests/activitypub/actors.test.js @@ -0,0 +1,43 @@ +const urlJoin = require('url-join'); +const initialize = require('./initialize'); + +jest.setTimeout(70000); + +const NUM_USERS = 1; + +describe('Actors are correctly created', () => { + let broker; + const actors = []; + let alice; + + beforeAll(async () => { + broker = await initialize(3000, 'testData', 'settings'); + + for (let i = 1; i <= NUM_USERS; i++) { + const { webId } = await broker.call('auth.signup', require(`./data/actor${i}.json`)); + actors[i] = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); + actors[i].call = (actionName, params, options = {}) => + broker.call(actionName, params, { ...options, meta: { ...options.meta, webId } }); + } + + alice = actors[1]; + }); + + afterAll(async () => { + await broker.stop(); + }); + + test('Actor has the required informations', async () => { + expect(alice.type).toContain('Person'); + expect(alice.preferredUsername).toBe('alice'); + expect(alice.outbox).toBe(urlJoin(alice.id, 'outbox')); + expect(alice.inbox).toBe(urlJoin(alice.id, 'inbox')); + expect(alice.followers).toBe(urlJoin(alice.id, 'followers')); + expect(alice.following).toBe(urlJoin(alice.id, 'following')); + expect(alice.publicKey).toMatchObject({ + type: expect.arrayContaining(['https://www.w3.org/ns/auth/rsa#RSAKey', 'sec:VerificationMethod']), + controller: alice.id, + owner: alice.id + }); + }); +}); diff --git a/src/middleware/tests/activitypub/collection-api.test.js b/src/middleware/tests/activitypub/collection-api.test.js index 4c893da74..5aed338d3 100644 --- a/src/middleware/tests/activitypub/collection-api.test.js +++ b/src/middleware/tests/activitypub/collection-api.test.js @@ -142,34 +142,32 @@ describe('Collections API', () => { summary: 'My paginated collection', 'semapps:dereferenceItems': false, 'semapps:itemsPerPage': 4, - first: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[0])}`, - last: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[items.length - 1])}` - // first: `${paginatedCollectionUri}?page=1`, - // last: `${paginatedCollectionUri}?page=3` + first: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, + last: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[0])}` } }); await expect( - fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[0])}`) + fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`) ).resolves.toMatchObject({ json: { - id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[0])}`, + id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, - next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[4])}`, - items: expect.arrayContaining([items[0], items[1], items[2], items[3]]) + next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[5])}`, + items: expect.arrayContaining([items[9], items[8], items[7], items[6]]) } }); await expect( - fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[8])}`) + fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[1])}`) ).resolves.toMatchObject({ json: { - id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[8])}`, + id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[1])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, - prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[7])}`, - items: expect.arrayContaining([items[8], items[9]]) + prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[2])}`, + items: expect.arrayContaining([items[1], items[0]]) } }); }); diff --git a/src/middleware/tests/activitypub/collection.test.js b/src/middleware/tests/activitypub/collection.test.js index fd55c6895..7bc06fa5c 100644 --- a/src/middleware/tests/activitypub/collection.test.js +++ b/src/middleware/tests/activitypub/collection.test.js @@ -294,25 +294,25 @@ describe('Collections', () => { expect(collection).toMatchObject({ id: paginatedCollectionUri, - first: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[0])}`, - last: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[items.length - 1])}` + first: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, + last: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[0])}` }); }); test('Should navigate forward with afterEq cursor', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, - afterEq: items[0] + afterEq: items[9] }); expect(collection).toMatchObject({ - id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[0])}`, + id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, - next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[4])}` + next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[5])}` }); expect(collection.items).toHaveLength(4); - expect(collection.items).toEqual([items[0], items[1], items[2], items[3]]); + expect(collection.items).toEqual([items[9], items[8], items[7], items[6]]); }); test('Should navigate backward with beforeEq cursor', async () => { @@ -325,10 +325,10 @@ describe('Collections', () => { id: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[5])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, - prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[1])}` + prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[9])}` }); expect(collection.items).toHaveLength(4); - expect(collection.items).toEqual([items[2], items[3], items[4], items[5]]); + expect(collection.items).toEqual([items[8], items[7], items[6], items[5]]); }); describe('Edge Cases', () => { @@ -375,7 +375,7 @@ describe('Collections', () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: exactCollectionUri, - afterEq: items[0] + afterEq: items[3] }); expect(collection).toMatchObject({ @@ -390,7 +390,7 @@ describe('Collections', () => { // Get last page of main paginated collection (should have 2 items) const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, - afterEq: items[8] + afterEq: items[1] }); expect(collection.items).toHaveLength(2); @@ -401,7 +401,7 @@ describe('Collections', () => { describe('Data Consistency', () => { test('Should maintain consistent page size across navigation', async () => { // Navigate through all pages and verify each has correct size (except last) - let cursor = items[0]; + let cursor = items[9]; let pageCount = 0; let seenItems = new Set(); @@ -435,13 +435,13 @@ describe('Collections', () => { // Forward navigation const firstPage = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, - afterEq: items[0] + afterEq: items[9] }); // Get the next page const nextPage = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, - afterEq: items[4] + afterEq: items[5] }); // Navigate back From 1b5971041d11204becfd2836acb8f60395f09b7f Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 12 Aug 2025 15:43:26 +0200 Subject: [PATCH 039/165] Fixes --- .../subservices/collection/actions/get.js | 2 +- .../subservices/collection/index.js | 1 - src/middleware/packages/crypto/keys/keys.js | 4 ++- .../packages/crypto/keys/migration.js | 14 ++++----- .../packages/importer/mixins/importer.js | 6 ++-- .../ldp/services/resource/actions/delete.js | 12 +------- .../triplestore/subservices/document.js | 30 +++++++++++++++++-- 7 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js index 57e3a6970..cf38400f0 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js @@ -187,7 +187,7 @@ async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, curso if (itemUri) { if (options.dereferenceItems) { try { - let item = await ctx.call('ldp.resource.get', { + let item = await ctx.call('activitypub.activity.get', { resourceUri: itemUri, webId: ctx.meta.impersonatedUser || webId }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js index cae2e4ce0..4888bb6ad 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js @@ -181,7 +181,6 @@ const CollectionService = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` INSERT DATA { - <${collectionUri}> <${itemUri}> GRAPH <${collectionUri}> { <${collectionUri}> <${itemUri}> } diff --git a/src/middleware/packages/crypto/keys/keys.js b/src/middleware/packages/crypto/keys/keys.js index bab0d9979..d8a4b8305 100644 --- a/src/middleware/packages/crypto/keys/keys.js +++ b/src/middleware/packages/crypto/keys/keys.js @@ -583,7 +583,9 @@ const KeysService = { query: ` SELECT ?privateKey WHERE { - ?privateKey <${publicKeyUri}> . + GRAPH ?g { + ?privateKey <${publicKeyUri}> . + } } `, webId: 'system' diff --git a/src/middleware/packages/crypto/keys/migration.js b/src/middleware/packages/crypto/keys/migration.js index 0fda90f08..8053548e1 100644 --- a/src/middleware/packages/crypto/keys/migration.js +++ b/src/middleware/packages/crypto/keys/migration.js @@ -135,13 +135,13 @@ module.exports = { await ctx.call('triplestore.update', { query: ` PREFIX sec: - DELETE { - <${webId}> sec:publicKey ?o . - ?o ?p1 ?o1 . - } - WHERE { - <${webId}> sec:publicKey ?o . - ?o ?p1 ?o1 . + DELETE WHERE { + GRAPH <${webId}> { + <${webId}> sec:publicKey ?o . + } + GRAPH ?g { + ?o ?p1 ?o1 . + } } `, webId: 'system' diff --git a/src/middleware/packages/importer/mixins/importer.js b/src/middleware/packages/importer/mixins/importer.js index 2bf17a682..39b44a792 100644 --- a/src/middleware/packages/importer/mixins/importer.js +++ b/src/middleware/packages/importer/mixins/importer.js @@ -62,8 +62,10 @@ module.exports = { PREFIX dc: SELECT ?id ?sourceUri WHERE { - ?id dc:source ?sourceUri. - FILTER STRSTARTS(STR(?sourceUri), "${this.settings.source.apiUrl}") + GRAPH ?id { + ?id dc:source ?sourceUri. + FILTER STRSTARTS(STR(?sourceUri), "${this.settings.source.apiUrl}") + } } `, webId: 'system' diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.js index 0ab99d245..5dff79982 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.js +++ b/src/middleware/packages/ldp/services/resource/actions/delete.js @@ -31,17 +31,7 @@ module.exports = { } ); - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - GRAPH <${resourceUri}> { - <${resourceUri}> ?p1 ?o1 . - } - } - `, - webId - }); + await ctx.call('triplestore.document.clear', { documentUri: resourceUri }); await ctx.call('triplestore.document.delete', { documentUri: resourceUri }); diff --git a/src/middleware/packages/triplestore/subservices/document.js b/src/middleware/packages/triplestore/subservices/document.js index ed1c24f50..126fe7558 100644 --- a/src/middleware/packages/triplestore/subservices/document.js +++ b/src/middleware/packages/triplestore/subservices/document.js @@ -7,6 +7,8 @@ const DocumentService = { async create(ctx) { // TODO Do not allow to pass the document URI on creation let { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; + if (!documentUri) uuidv4(); if (await this.actions.exist({ documentUri }, { parentCtx: ctx })) { @@ -15,26 +17,48 @@ const DocumentService = { await ctx.call('triplestore.update', { query: `INSERT DATA { GRAPH <${documentUri}> {} }`, - webId: 'system' + webId: 'system', + dataset }); return documentUri; }, async exist(ctx) { const { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; return await ctx.call('triplestore.query', { query: `ASK { GRAPH <${documentUri}> {} }`, - webId: 'system' + webId: 'system', + dataset + }); + }, + async clear(ctx) { + const { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; + + await ctx.call('triplestore.update', { + query: ` + DELETE + WHERE { + GRAPH <${documentUri}> { + ?s1 ?p1 ?o1 . + } + } + `, + webId: 'system', + dataset }); }, async delete(ctx) { const { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; // We need to manually drop the graph, otherwise Fuseki will consider it still exists await ctx.call('triplestore.update', { query: `DROP GRAPH <${documentUri}>`, - webId: 'system' + webId: 'system', + dataset }); } } From 137da98d5965678346c7c7c6a5bfa1b5446c0990 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 12 Aug 2025 15:44:12 +0200 Subject: [PATCH 040/165] Stop using current predicate --- .../activitypub/subservices/activity.js | 13 ++----- .../services/activitypub/subservices/inbox.js | 5 +-- .../activitypub/subservices/outbox.js | 5 +-- src/middleware/packages/activitypub/utils.js | 37 ------------------- 4 files changed, 8 insertions(+), 52 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js index 128654d97..9f039549f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js @@ -1,7 +1,7 @@ const { Errors: E } = require('moleculer-web'); const { ControlledContainerMixin } = require('@semapps/ldp'); const setRightsHandler = require('./activity-handlers/setRightsHandler'); -const { objectCurrentToId, objectIdToCurrent, arrayOf } = require('../../../utils'); +const { arrayOf } = require('../../../utils'); const { PUBLIC_URI, FULL_ACTIVITY_TYPES } = require('../../../constants'); const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); @@ -97,14 +97,9 @@ const ActivityService = { if (typeof ctx.params.resourceUri === 'object') { ctx.params.resourceUri = ctx.params.resourceUri.id || ctx.params.resourceUri['@id']; } - }, - create(ctx) { - ctx.params.resource = objectIdToCurrent(ctx.params.resource); - } - }, - after: { - get(ctx, res) { - return objectCurrentToId(res); + + // We always want the get method to return a single resource + ctx.params.noGraph = true; } } }, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js index 2201e44d1..3d6d9abb5 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js @@ -1,6 +1,6 @@ const { Errors: E } = require('moleculer-web'); const { MoleculerError } = require('moleculer').Errors; -const { objectIdToCurrent, collectionPermissionsWithAnonRead } = require('../../../utils'); +const { collectionPermissionsWithAnonRead } = require('../../../utils'); const { ACTOR_TYPES } = require('../../../constants'); const AwaitActivityMixin = require('../../../mixins/await-activity'); @@ -101,8 +101,7 @@ const InboxService = { if (activity.id && !activity.id.includes('#')) { // Save the remote activity in the local triple store await ctx.call('ldp.remote.store', { - resource: objectIdToCurrent(activity), - mirrorGraph: false, // Store in default graph as activity may not be public + resource: activity, keepInSync: false, // Activities are immutable webId: inboxOwner }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js index 2b77fbd70..248419e3a 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js @@ -2,7 +2,7 @@ const fetch = require('node-fetch'); const { Errors: E } = require('moleculer-web'); const { MIME_TYPES } = require('@semapps/mime-types'); const { getType, arrayOf } = require('@semapps/ldp'); -const { collectionPermissionsWithAnonRead, getSlugFromUri, objectIdToCurrent } = require('../../../utils'); +const { collectionPermissionsWithAnonRead, getSlugFromUri } = require('../../../utils'); const { ACTOR_TYPES } = require('../../../constants'); const AwaitActivityMixin = require('../../../mixins/await-activity'); @@ -225,8 +225,7 @@ const OutboxService = { if (this.settings.podProvider) { // Store the activity in the dataset of the recipient await this.broker.call('ldp.remote.store', { - resource: objectIdToCurrent(activity), - mirrorGraph: false, // Store in default graph as activity may not be public + resource: activity, keepInSync: false, // Activities are immutable webId: recipientUri, dataset diff --git a/src/middleware/packages/activitypub/utils.js b/src/middleware/packages/activitypub/utils.js index 3f1360c2e..e033c0cbb 100644 --- a/src/middleware/packages/activitypub/utils.js +++ b/src/middleware/packages/activitypub/utils.js @@ -1,38 +1,3 @@ -const { ACTIVITY_TYPES } = require('./constants'); - -const objectCurrentToId = activityJson => { - if (activityJson.object && typeof activityJson.object === 'object' && activityJson.object.current) { - const { current, ...object } = activityJson.object; - return { - ...activityJson, - object: { - id: current, - ...objectCurrentToId(object) - } - }; - } - return activityJson; -}; - -const objectIdToCurrent = activityJson => { - // If the activity has an object predicate, and this object is not an activity - if ( - activityJson.object && - typeof activityJson.object === 'object' && - !Object.values(ACTIVITY_TYPES).includes(activityJson.object.type) - ) { - const { id, '@id': arobaseId, ...object } = activityJson.object; - return { - ...activityJson, - object: { - current: id || arobaseId, - ...objectIdToCurrent(object) - } - }; - } - return activityJson; -}; - const collectionPermissionsWithAnonRead = webId => { const permissions = { anon: { @@ -113,8 +78,6 @@ const getValueFromDataType = result => { }; module.exports = { - objectCurrentToId, - objectIdToCurrent, collectionPermissionsWithAnonRead, getSlugFromUri, getContainerFromUri, From 3784c88ed1e7f18af58a1ed1d9d9652aec532eea Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 12 Aug 2025 15:45:33 +0200 Subject: [PATCH 041/165] New noGraph param --- .../packages/ldp/services/resource/actions/get.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.js index a6e832562..c7bcb26cf 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.js @@ -8,6 +8,7 @@ module.exports = { resourceUri: { type: 'string' }, webId: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, + noGraph: { type: 'boolean', default: false }, jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], @@ -23,7 +24,7 @@ module.exports = { keys: ['resourceUri', 'jsonContext'] }, async handler(ctx) { - const { resourceUri, accept, jsonContext } = ctx.params; + const { resourceUri, accept, noGraph, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (accept && accept !== MIME_TYPES.JSON) @@ -61,14 +62,14 @@ module.exports = { node => node['@id'].startsWith('_:b') || node['@id'] === resourceUri ); - if (graphWithBlankNodesOnly) frame['@id'] = resourceUri; + if (graphWithBlankNodesOnly || noGraph) frame['@id'] = resourceUri; // Frame the result using the correct context in order to have clean, consistent results return await ctx.call('jsonld.parser.frame', { input: result, frame, options: { - embed: graphWithBlankNodesOnly ? '@once' : '@never' + embed: graphWithBlankNodesOnly || noGraph ? '@once' : '@never' } }); } From 9664ba3cd69ccea51c0c5bf7fc280906ff3ffbf2 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 13 Aug 2025 18:02:35 +0200 Subject: [PATCH 042/165] Fix all ActivityPub tests --- src/frontend/package.json | 3 +- src/middleware/package.json | 3 +- src/middleware/packages/ldp/service.js | 9 +-- .../ldp/services/container/actions/patch.js | 1 - .../packages/ldp/services/container/index.js | 3 +- .../ldp/services/remote/actions/delete.js | 21 ++---- .../ldp/services/remote/actions/get.js | 17 +++-- .../ldp/services/remote/actions/getGraph.js | 29 -------- .../ldp/services/remote/actions/getNetwork.js | 11 +-- .../ldp/services/remote/actions/getStored.js | 70 ++++++++----------- .../ldp/services/remote/actions/store.js | 38 +++------- .../packages/ldp/services/remote/index.js | 10 +-- src/middleware/packages/ldp/utils.js | 25 ------- .../tests/activitypub/follow.test.js | 7 +- 14 files changed, 69 insertions(+), 178 deletions(-) delete mode 100644 src/middleware/packages/ldp/services/remote/actions/getGraph.js diff --git a/src/frontend/package.json b/src/frontend/package.json index c955742e7..d60672027 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -43,5 +43,6 @@ "templates/**" ], "version": "0.4.0-alpha.37", - "dependencies": {} + "dependencies": {}, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/middleware/package.json b/src/middleware/package.json index 461078694..9b7efd8ac 100644 --- a/src/middleware/package.json +++ b/src/middleware/package.json @@ -40,5 +40,6 @@ "engines": { "node": ">=22.12.0" }, - "version": "0.7.0" + "version": "0.7.0", + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/middleware/packages/ldp/service.js b/src/middleware/packages/ldp/service.js index 2d3414170..c847a8883 100644 --- a/src/middleware/packages/ldp/service.js +++ b/src/middleware/packages/ldp/service.js @@ -14,7 +14,6 @@ module.exports = { baseUrl: null, containers: [], podProvider: false, - mirrorGraphName: 'http://semapps.org/mirror', defaultContainerOptions: {}, preferredViewForResource: null, resourcesWithContainerPath: true, @@ -29,7 +28,6 @@ module.exports = { containers, podProvider, defaultContainerOptions, - mirrorGraphName, preferredViewForResource, resourcesWithContainerPath, binary @@ -39,8 +37,7 @@ module.exports = { mixins: [LdpContainerService], settings: { baseUrl, - podProvider, - mirrorGraphName + podProvider }, hooks: this.schema.hooksContainer || {} }); @@ -50,7 +47,6 @@ module.exports = { settings: { baseUrl, podProvider, - mirrorGraphName, preferredViewForResource, resourcesWithContainerPath, binary @@ -62,8 +58,7 @@ module.exports = { mixins: [LdpRemoteService], settings: { baseUrl, - podProvider, - mirrorGraphName + podProvider } }); diff --git a/src/middleware/packages/ldp/services/container/actions/patch.js b/src/middleware/packages/ldp/services/container/actions/patch.js index 73284b94d..b34b69b2e 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.js +++ b/src/middleware/packages/ldp/services/container/actions/patch.js @@ -72,7 +72,6 @@ module.exports = { await ctx.call('ldp.remote.store', { resourceUri, keepInSync: true, - mirrorGraph: true, webId }); diff --git a/src/middleware/packages/ldp/services/container/index.js b/src/middleware/packages/ldp/services/container/index.js index 7b974df26..12b782383 100644 --- a/src/middleware/packages/ldp/services/container/index.js +++ b/src/middleware/packages/ldp/services/container/index.js @@ -19,8 +19,7 @@ module.exports = { name: 'ldp.container', settings: { baseUrl: null, - podProvider: false, - mirrorGraphName: null + podProvider: false }, dependencies: ['triplestore', 'jsonld'], actions: { diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.js b/src/middleware/packages/ldp/services/remote/actions/delete.js index 7f1afdb6c..8adb13c10 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.js +++ b/src/middleware/packages/ldp/services/remote/actions/delete.js @@ -22,22 +22,13 @@ module.exports = { ctx.meta.dataset = account.username; } - const graphName = await this.actions.getGraph({ resourceUri }, { parentCtx: ctx }); - if (graphName === false) throw new Error(`No graph found with resource ${resourceUri} (webId: ${webId})`); + const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); + if (!exist) throw new Error(`No document found with resource ${resourceUri} (webId: ${webId})`); const oldData = await this.actions.getStored({ resourceUri, webId }, { parentCtx: ctx }); - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - ${graphName ? `GRAPH <${graphName}> {` : ''} - <${resourceUri}> ?p1 ?o1 . - ${graphName ? '}' : ''} - } - `, - webId: 'system' - }); + await ctx.call('triplestore.document.clear', { documentUri: resourceUri }); + await ctx.call('triplestore.document.delete', { documentUri: resourceUri }); // Detach from all containers with the mirrored resource const containers = await ctx.call('ldp.resource.getContainers', { resourceUri }); @@ -45,10 +36,6 @@ module.exports = { await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId: 'system' }); } - ctx.call('triplestore.deleteOrphanBlankNodes', { - graphName - }); - const returnValues = { resourceUri, oldData, diff --git a/src/middleware/packages/ldp/services/remote/actions/get.js b/src/middleware/packages/ldp/services/remote/actions/get.js index b0c6b0443..d08923689 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.js +++ b/src/middleware/packages/ldp/services/remote/actions/get.js @@ -1,12 +1,11 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); const { cleanUndefined } = require('../../../utils'); module.exports = { visibility: 'public', params: { resourceUri: { type: 'string' }, + noGraph: { type: 'boolean', default: false }, webId: { type: 'string', optional: true }, - accept: { type: 'string', default: MIME_TYPES.JSON }, jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], @@ -20,7 +19,7 @@ module.exports = { } }, async handler(ctx) { - const { resourceUri, accept, jsonContext, ...rest } = ctx.params; + const { resourceUri, jsonContext, ...rest } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // Without webId, we have no way to know which dataset to look in, so get from network @@ -38,10 +37,10 @@ module.exports = { switch (strategy) { case 'cacheFirst': return this.actions - .getStored(cleanUndefined({ resourceUri, webId, accept, jsonContext, ...rest }), { parentCtx: ctx }) + .getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }) .catch(e => { if (e.code === 404) { - return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, accept, jsonContext }), { + return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }); } else { @@ -51,10 +50,10 @@ module.exports = { case 'networkFirst': return this.actions - .getNetwork(cleanUndefined({ resourceUri, webId, accept, jsonContext }), { parentCtx: ctx }) + .getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }) .catch(e => { if (e.code === 404) { - return this.actions.getStored(cleanUndefined({ resourceUri, webId, accept, jsonContext, ...rest }), { + return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }); } else { @@ -63,12 +62,12 @@ module.exports = { }); case 'cacheOnly': - return this.actions.getStored(cleanUndefined({ resourceUri, webId, accept, jsonContext, ...rest }), { + return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }); case 'networkOnly': - return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, accept, jsonContext }), { parentCtx: ctx }); + return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }); case 'staleWhileRevalidate': // Not implemented yet diff --git a/src/middleware/packages/ldp/services/remote/actions/getGraph.js b/src/middleware/packages/ldp/services/remote/actions/getGraph.js deleted file mode 100644 index fcd1723d3..000000000 --- a/src/middleware/packages/ldp/services/remote/actions/getGraph.js +++ /dev/null @@ -1,29 +0,0 @@ -const { triple, namedNode, variable } = require('@rdfjs/data-model'); - -module.exports = { - visibility: 'public', - params: { - resourceUri: { type: 'string' } - }, - async handler(ctx) { - const { resourceUri } = ctx.params; - - let exist = await ctx.call('triplestore.tripleExist', { - triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - webId: 'system' - }); - - if (exist) { - return undefined; // Default graph - } - exist = await ctx.call('triplestore.tripleExist', { - triple: triple(namedNode(resourceUri), variable('p'), variable('s')), - graphName: this.settings.mirrorGraphName - }); - - if (exist) { - return this.settings.mirrorGraphName; - } - return false; - } -}; diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.js b/src/middleware/packages/ldp/services/remote/actions/getNetwork.js index 889248a8a..0917d02c5 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.js +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.js @@ -6,7 +6,6 @@ module.exports = { visibility: 'public', params: { resourceUri: { type: 'string' }, - accept: { type: 'string', default: MIME_TYPES.JSON }, jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], @@ -15,9 +14,9 @@ module.exports = { webId: { type: 'string', optional: true } }, async handler(ctx) { - const { resourceUri, accept, jsonContext } = ctx.params; + const { resourceUri, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const headers = new fetch.Headers({ accept }); + const headers = new fetch.Headers({ accept: MIME_TYPES.JSON }); if (jsonContext) headers.set('JsonLdContext', JSON.stringify(jsonContext)); if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { @@ -47,11 +46,7 @@ module.exports = { } else { const response = await fetch(resourceUri, { headers }); if (response.ok) { - if (accept === MIME_TYPES.JSON) { - return await response.json(); - } else { - return await response.text(); - } + return await response.json(); } else { throw new MoleculerError(response.statusText, response.status); } diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.js b/src/middleware/packages/ldp/services/remote/actions/getStored.js index d76e0c62d..21e6e1af5 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.js +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.js @@ -1,12 +1,10 @@ const { MIME_TYPES } = require('@semapps/mime-types'); const { MoleculerError } = require('moleculer').Errors; -const { buildBlankNodesQuery } = require('../../../utils'); module.exports = { visibility: 'public', params: { resourceUri: { type: 'string' }, - accept: { type: 'string', default: MIME_TYPES.JSON }, jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], @@ -15,53 +13,41 @@ module.exports = { webId: { type: 'string', optional: true } }, async handler(ctx) { - const { resourceUri, jsonContext } = ctx.params; + const { resourceUri, jsonContext, noGraph } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // No options will be returned by ldp.registry.getByUri unless the resource is in a local container (this is the case for activities) - // TODO Store the context of the original resource ? - const { accept } = { - ...(await ctx.call('ldp.registry.getByUri', { resourceUri })), - ...ctx.params - }; + const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); - const graphName = await this.actions.getGraph({ resourceUri, webId }, { parentCtx: ctx }); - - // If resource exists - if (graphName !== false) { - const blankNodesQuery = buildBlankNodesQuery(4); + if (!exist) + throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); - let result = await ctx.call('triplestore.query', { - query: ` - ${await ctx.call('ontologies.getRdfPrefixes')} - CONSTRUCT { - ${blankNodesQuery.construct} - } - WHERE { - ${graphName ? `GRAPH <${graphName}> {` : ''} - BIND(<${resourceUri}> AS ?s1) . - ${blankNodesQuery.where} - ${graphName ? '}' : ''} + const result = await ctx.call('triplestore.query', { + query: ` + ${await ctx.call('ontologies.getRdfPrefixes')} + CONSTRUCT { + ?s ?p ?o + } + WHERE { + GRAPH <${resourceUri}> { + ?s ?p ?o . } - `, - accept, - webId - }); + } + `, + webId + }); - // If we asked for JSON-LD, frame it in order to have clean, consistent results - if (accept === MIME_TYPES.JSON) { - result = await ctx.call('jsonld.parser.frame', { - input: result, - frame: { - '@context': jsonContext || (await ctx.call('jsonld.context.get')), - '@id': resourceUri - } - }); + // Frame the result using the correct context in order to have clean, consistent results + const result2 = await ctx.call('jsonld.parser.frame', { + input: result, + frame: { + '@context': jsonContext || (await ctx.call('jsonld.context.get')), + '@id': resourceUri + }, + options: { + embed: '@once' } + }); - return result; - } else { - throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); - } + return result2; } }; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.js b/src/middleware/packages/ldp/services/remote/actions/store.js index f2ef5b580..c15287da7 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.js +++ b/src/middleware/packages/ldp/services/remote/actions/store.js @@ -7,22 +7,16 @@ module.exports = { resourceUri: { type: 'string', optional: true }, resource: { type: 'object', optional: true }, keepInSync: { type: 'boolean', default: false }, - mirrorGraph: { type: 'boolean', default: false }, webId: { type: 'string', optional: true }, dataset: { type: 'string', optional: true } }, async handler(ctx) { - let { resourceUri, resource, keepInSync, mirrorGraph, webId, dataset } = ctx.params; - const graphName = mirrorGraph ? this.settings.mirrorGraphName : undefined; + let { resourceUri, resource, keepInSync, webId, dataset } = ctx.params; if (!resource && !resourceUri) { throw new Error('You must provide the resourceUri or resource param'); } - if (keepInSync && !mirrorGraph) { - throw new Error('To be kept in sync, a remote resource must stored in the mirror graph'); - } - if (!resource) { resource = await this.actions.getNetwork({ resourceUri, webId }, { parentCtx: ctx }); } @@ -58,32 +52,22 @@ module.exports = { dataset = account.username; } - // Delete the existing cached resource (if it exists) - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - ${graphName ? `GRAPH <${graphName}> {` : ''} - <${resourceUri}> ?p1 ?o1 . - ${graphName ? '}' : ''} - } - `, - webId: 'system', - dataset - }); + // Check if the remote resource is already stored + const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri, dataset }); - ctx.call('triplestore.deleteOrphanBlankNodes', { - dataset, - graphName - }); + if (!exist) { + await ctx.call('triplestore.document.create', { documentUri: resourceUri, dataset }); + } else { + await ctx.call('triplestore.document.clear', { documentUri: resourceUri, dataset }); + } if (keepInSync) { resource['http://semapps.org/ns/core#singleMirroredResource'] = new URL(resourceUri).origin; } await ctx.call('triplestore.insert', { - resource, - graphName, + resource: resource, + graphName: resourceUri, webId: 'system', dataset }); @@ -91,7 +75,7 @@ module.exports = { if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.remote.stored', - { resourceUri, resource, dataset, mirrorGraph, keepInSync, webId }, + { resourceUri, resource, dataset, keepInSync, webId }, { meta: { webId: null, dataset } } ); } diff --git a/src/middleware/packages/ldp/services/remote/index.js b/src/middleware/packages/ldp/services/remote/index.js index 1083c265f..69ba149bd 100644 --- a/src/middleware/packages/ldp/services/remote/index.js +++ b/src/middleware/packages/ldp/services/remote/index.js @@ -1,7 +1,6 @@ const Schedule = require('moleculer-schedule'); const deleteAction = require('./actions/delete'); const getAction = require('./actions/get'); -const getGraphAction = require('./actions/getGraph'); const getNetworkAction = require('./actions/getNetwork'); const getStoredAction = require('./actions/getStored'); const isRemoteAction = require('./actions/isRemote'); @@ -12,14 +11,12 @@ module.exports = { mixins: [Schedule], settings: { baseUrl: null, - podProvider: false, - mirrorGraphName: null + podProvider: false }, dependencies: ['triplestore', 'jsonld'], actions: { delete: deleteAction, get: getAction, - getGraph: getGraphAction, getNetwork: getNetworkAction, getStored: getStoredAction, isRemote: isRemoteAction, @@ -39,7 +36,7 @@ module.exports = { query: ` SELECT DISTINCT ?s WHERE { - GRAPH <${this.settings.mirrorGraphName}> { + GRAPH ?g { ?s ?o } } @@ -50,8 +47,7 @@ module.exports = { try { await this.actions.store({ resourceUri, - keepInSync: true, - mirrorGraph: true + keepInSync: true }); } catch (e) { if (e.code === 403 || e.code === 404 || e.code === 401) { diff --git a/src/middleware/packages/ldp/utils.js b/src/middleware/packages/ldp/utils.js index 46140f54b..ef7e126bc 100644 --- a/src/middleware/packages/ldp/utils.js +++ b/src/middleware/packages/ldp/utils.js @@ -16,30 +16,6 @@ const isMirror = (resourceUri, baseUrl) => { return !urlJoin(resourceUri, '/').startsWith(baseUrl); }; -const buildBlankNodesQuery = depth => { - const BASE_QUERY = '?s1 ?p1 ?o1 .'; - let construct = BASE_QUERY; - let where = ''; - if (depth > 0) { - let whereQueries = []; - whereQueries.push([BASE_QUERY]); - for (let i = 1; i <= depth; i++) { - construct += `\r\n?o${i} ?p${i + 1} ?o${i + 1} .`; - whereQueries.push([ - ...whereQueries[whereQueries.length - 1], - `FILTER((isBLANK(?o${i}))) .`, - `?o${i} ?p${i + 1} ?o${i + 1} .` - ]); - } - where = `{\r\n${whereQueries.map(q1 => q1.join('\r\n')).join('\r\n} UNION {\r\n')}\r\n}`; - } else if (depth === 0) { - where = BASE_QUERY; - } else { - throw new Error('The depth of buildBlankNodesQuery should be 0 or more'); - } - return { construct, where }; -}; - const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); /** If the value starts with `http` or `urn:` */ @@ -176,7 +152,6 @@ const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { }; module.exports = { - buildBlankNodesQuery, buildFiltersQuery, isURL, isURI, diff --git a/src/middleware/tests/activitypub/follow.test.js b/src/middleware/tests/activitypub/follow.test.js index 7b3c63562..d393d788a 100644 --- a/src/middleware/tests/activitypub/follow.test.js +++ b/src/middleware/tests/activitypub/follow.test.js @@ -78,7 +78,10 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.ACCEPT, actor: alice.id, - object: followActivity.id + object: { + id: followActivity.id, + type: ACTIVITY_TYPES.FOLLOW + } }); }); }); @@ -135,6 +138,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe await expect( alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) ).resolves.toBeFalsy(); - }); + }, 20_000); }); }); From 38ec7239ad667359d507ff4d68cc5717bbf76184 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Sep 2025 12:58:11 +0200 Subject: [PATCH 043/165] Fixes --- src/middleware/packages/ldp/mixins/special-endpoint.js | 1 + src/middleware/packages/triplestore/subservices/document.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.js b/src/middleware/packages/ldp/mixins/special-endpoint.js index 0bed40885..ca7ecce05 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.js +++ b/src/middleware/packages/ldp/mixins/special-endpoint.js @@ -57,6 +57,7 @@ module.exports = { id: this.endpointUrl, ...this.settings.endpoint.initialData }, + resourceUri: this.endpointUrl, webId: 'system' }, { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } diff --git a/src/middleware/packages/triplestore/subservices/document.js b/src/middleware/packages/triplestore/subservices/document.js index 126fe7558..4ebe7b11a 100644 --- a/src/middleware/packages/triplestore/subservices/document.js +++ b/src/middleware/packages/triplestore/subservices/document.js @@ -11,7 +11,7 @@ const DocumentService = { if (!documentUri) uuidv4(); - if (await this.actions.exist({ documentUri }, { parentCtx: ctx })) { + if (await this.actions.exist({ documentUri, dataset }, { parentCtx: ctx })) { throw new Error(`Cannot create document as it already exists`); } From ddeeb28cdff6892b9ee205e986bfd5e0fb397763 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Sep 2025 12:58:37 +0200 Subject: [PATCH 044/165] Migration of resources and containers to named graphs --- src/middleware/packages/migration/2-0-0.js | 200 +++++++++++++++++++++ src/middleware/packages/migration/index.js | 3 +- src/middleware/packages/migration/utils.js | 27 +++ 3 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 src/middleware/packages/migration/2-0-0.js create mode 100644 src/middleware/packages/migration/utils.js diff --git a/src/middleware/packages/migration/2-0-0.js b/src/middleware/packages/migration/2-0-0.js new file mode 100644 index 000000000..4afb4764e --- /dev/null +++ b/src/middleware/packages/migration/2-0-0.js @@ -0,0 +1,200 @@ +const { buildBlankNodesQuery } = require('./utils'); + +const blankNodesQuery = buildBlankNodesQuery(4); + +module.exports = { + name: 'migration-2-0-0', + settings: { + podProvider: false + }, + actions: { + async moveAllToNamedGraph(ctx) { + const { dataset } = ctx.params; + + ctx.meta.dataset = dataset || ctx.meta.dataset; + + // Find all containers in default graph + const result = await ctx.call('triplestore.query', { + query: ` + PREFIX ldp: + SELECT ?containerUri + WHERE { + ?containerUri a ldp:Container . + } + `, + webId: 'system' + }); + const containersUris = result.map(node => node.containerUri.value); + + for (const containerUri of containersUris) { + // Delete all containers and their resources + await this.actions.moveContainerToNamedGraph({ containerUri }, { parentCtx: ctx }); + } + + if (this.settings.podProvider) { + // Move WebID (not linked from a container) + const webIdResult = await ctx.call('triplestore.query', { + query: ` + PREFIX foaf: + SELECT ?webId + WHERE { + ?webId a foaf:Person . + } + `, + webId: 'system' + }); + const webId = webIdResult[0].webId.value; + + await this.actions.moveResourceToNamedGraph({ resourceUri: webId }, { parentCtx: ctx }); + } + + // Delete orphan blank nodes from default graph + await ctx.call('triplestore.update', { + query: ` + DELETE { + ?s ?p ?o . + } + WHERE { + ?s ?p ?o . + FILTER(isBLANK(?s)) + FILTER(NOT EXISTS {?parentS ?parentP ?s}) + } + `, + webId: 'system' + }); + + // Delete tombstones (they are not linked from containers) + await ctx.call('triplestore.update', { + query: ` + PREFIX as: + DELETE + WHERE { + ?s1 a as:Tombstone . + ?s1 ?p1 ?o1 . + } + `, + webId: 'system' + }); + }, + async moveContainerToNamedGraph(ctx) { + const { containerUri } = ctx.params; + + const containerExist = await ctx.call('triplestore.document.exist', { documentUri: containerUri }); + + if (containerExist) { + this.logger.warn(`Container ${containerUri} is already in a named graph, skipping...`); + } else { + this.logger.info(`Migrating container ${containerUri}...`); + + const container = await ctx.call('triplestore.query', { + query: ` + CONSTRUCT + WHERE { + <${containerUri}> ?p1 ?o1 . + } + `, + webId: 'system' + }); + + await ctx.call('triplestore.document.create', { documentUri: containerUri }); + await ctx.call('triplestore.insert', { + resource: container, + graphName: containerUri, + webId: 'system' + }); + } + + /** + * Find resources in container (excluding child container) + */ + + this.logger.info(`Migrating resources in container ${containerUri}...`); + + const result = await ctx.call('triplestore.query', { + query: ` + PREFIX ldp: + SELECT ?resourceUri + WHERE { + <${containerUri}> ldp:contains ?resourceUri . + FILTER(NOT EXISTS { ?resourceUri a ldp:Container }) + } + `, + webId: 'system' + }); + const resourcesUris = result.map(node => node.resourceUri.value); + + for (const resourceUri of resourcesUris) { + await this.actions.moveResourceToNamedGraph({ resourceUri }, { parentCtx: ctx }); + + // Unlink resource from container + await ctx.call('triplestore.update', { + query: ` + PREFIX ldp: + DELETE + WHERE { + <${containerUri}> ldp:contains <${resourceUri}> + } + `, + webId: 'system' + }); + } + + this.logger.info(`Deleting container ${containerUri} from default graph...`); + + // Delete container + await ctx.call('triplestore.update', { + query: ` + DELETE + WHERE { + <${containerUri}> ?p1 ?s1 . + } + `, + webId: 'system' + }); + }, + async moveResourceToNamedGraph(ctx) { + const { resourceUri } = ctx.params; + + const resourceExist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); + + if (resourceExist) { + this.logger.warn(`Resource ${resourceUri} is already in a named graph, skipping...`); + } else { + this.logger.info(`Migrating resource ${resourceUri}...`); + + const resource = await ctx.call('triplestore.query', { + query: ` + CONSTRUCT { + ${blankNodesQuery.construct} + } + WHERE { + BIND(<${resourceUri}> AS ?s1) . + ${blankNodesQuery.where} + } + `, + webId: 'system' + }); + + await ctx.call('triplestore.document.create', { documentUri: resourceUri }); + await ctx.call('triplestore.insert', { + resource, + graphName: resourceUri, + webId: 'system' + }); + } + + this.logger.info(`Deleting resource ${resourceUri} from default graph...`); + + // Delete resource (orphan blank nodes will be deleted at the end) + await ctx.call('triplestore.update', { + query: ` + DELETE + WHERE { + <${resourceUri}> ?p1 ?s1 . + } + `, + webId: 'system' + }); + } + } +}; diff --git a/src/middleware/packages/migration/index.js b/src/middleware/packages/migration/index.js index 64f1cfa83..dd3b64962 100644 --- a/src/middleware/packages/migration/index.js +++ b/src/middleware/packages/migration/index.js @@ -1,3 +1,4 @@ module.exports = { - MigrationService: require('./service') + MigrationService: require('./service'), + V2MigrationService: require('./2-0-0') }; diff --git a/src/middleware/packages/migration/utils.js b/src/middleware/packages/migration/utils.js new file mode 100644 index 000000000..139a75686 --- /dev/null +++ b/src/middleware/packages/migration/utils.js @@ -0,0 +1,27 @@ +const buildBlankNodesQuery = depth => { + const BASE_QUERY = '?s1 ?p1 ?o1 .'; + let construct = BASE_QUERY; + let where = ''; + if (depth > 0) { + let whereQueries = []; + whereQueries.push([BASE_QUERY]); + for (let i = 1; i <= depth; i++) { + construct += `\r\n?o${i} ?p${i + 1} ?o${i + 1} .`; + whereQueries.push([ + ...whereQueries[whereQueries.length - 1], + `FILTER((isBLANK(?o${i}))) .`, + `?o${i} ?p${i + 1} ?o${i + 1} .` + ]); + } + where = `{\r\n${whereQueries.map(q1 => q1.join('\r\n')).join('\r\n} UNION {\r\n')}\r\n}`; + } else if (depth === 0) { + where = BASE_QUERY; + } else { + throw new Error('The depth of buildBlankNodesQuery should be 0 or more'); + } + return { construct, where }; +}; + +module.exports = { + buildBlankNodesQuery +}; From c984b1d48af5e640f46611c2275f0d6d263e9fa0 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 4 Sep 2025 19:01:04 +0200 Subject: [PATCH 045/165] Move old migration service to @semapps/migration package --- src/middleware/packages/activitypub/index.js | 1 - src/middleware/packages/auth/index.js | 1 - .../{auth/services/migration.js => migration/0-4-0.js} | 2 +- .../{activitypub/services/migration.js => migration/0-7-0.js} | 2 +- src/middleware/packages/migration/index.js | 4 +++- 5 files changed, 5 insertions(+), 5 deletions(-) rename src/middleware/packages/{auth/services/migration.js => migration/0-4-0.js} (97%) rename src/middleware/packages/{activitypub/services/migration.js => migration/0-7-0.js} (97%) diff --git a/src/middleware/packages/activitypub/index.js b/src/middleware/packages/activitypub/index.js index 82a95cc2e..0080be9bd 100644 --- a/src/middleware/packages/activitypub/index.js +++ b/src/middleware/packages/activitypub/index.js @@ -2,7 +2,6 @@ const constants = require('./constants'); module.exports = { ActivityPubService: require('./services/activitypub'), - ActivityPubMigrationService: require('./services/migration'), ActivityMappingService: require('./services/activity-mapping'), RelayService: require('./services/relay'), // Mixins diff --git a/src/middleware/packages/auth/index.js b/src/middleware/packages/auth/index.js index 5be77ecfe..e8d7cfbf2 100644 --- a/src/middleware/packages/auth/index.js +++ b/src/middleware/packages/auth/index.js @@ -4,6 +4,5 @@ module.exports = { AuthOIDCService: require('./services/auth.oidc'), AuthAccountService: require('./services/account'), AuthJWTService: require('./services/jwt'), - AuthMigrationService: require('./services/migration'), AuthMailService: require('./services/mail') }; diff --git a/src/middleware/packages/auth/services/migration.js b/src/middleware/packages/migration/0-4-0.js similarity index 97% rename from src/middleware/packages/auth/services/migration.js rename to src/middleware/packages/migration/0-4-0.js index f42dc615d..9225fb8db 100644 --- a/src/middleware/packages/auth/services/migration.js +++ b/src/middleware/packages/migration/0-4-0.js @@ -1,7 +1,7 @@ const { getSlugFromUri } = require('@semapps/ldp'); module.exports = { - name: 'auth.migration', + name: 'migration-0-4-0', actions: { async migrateUsersToAccounts(ctx) { const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; diff --git a/src/middleware/packages/activitypub/services/migration.js b/src/middleware/packages/migration/0-7-0.js similarity index 97% rename from src/middleware/packages/activitypub/services/migration.js rename to src/middleware/packages/migration/0-7-0.js index ed502b170..1b50ea0b4 100644 --- a/src/middleware/packages/activitypub/services/migration.js +++ b/src/middleware/packages/migration/0-7-0.js @@ -1,5 +1,5 @@ module.exports = { - name: 'activitypub.migration', + name: 'migration-0-7-0', actions: { async updateCollectionsOptions(ctx) { await ctx.call('activitypub.follow.updateCollectionsOptions'); diff --git a/src/middleware/packages/migration/index.js b/src/middleware/packages/migration/index.js index dd3b64962..f8f972065 100644 --- a/src/middleware/packages/migration/index.js +++ b/src/middleware/packages/migration/index.js @@ -1,4 +1,6 @@ module.exports = { MigrationService: require('./service'), - V2MigrationService: require('./2-0-0') + V04MigrationService: require('./0-7-0'), + V07MigrationService: require('./0-7-0'), + V20MigrationService: require('./2-0-0') }; From ea67e8c7d433566ed36d1e96c82ac91c123cd435 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 5 Sep 2025 11:13:02 +0200 Subject: [PATCH 046/165] More migration --- src/middleware/packages/migration/2-0-0.js | 70 +++++++++++++++---- .../packages/migration/package.json | 3 +- src/middleware/packages/migration/utils.js | 17 ++++- 3 files changed, 75 insertions(+), 15 deletions(-) diff --git a/src/middleware/packages/migration/2-0-0.js b/src/middleware/packages/migration/2-0-0.js index 4afb4764e..5b5836c1e 100644 --- a/src/middleware/packages/migration/2-0-0.js +++ b/src/middleware/packages/migration/2-0-0.js @@ -1,12 +1,19 @@ -const { buildBlankNodesQuery } = require('./utils'); +const urlJoin = require('url-join'); +const { buildBlankNodesQuery, objectCurrentToId } = require('./utils'); const blankNodesQuery = buildBlankNodesQuery(4); module.exports = { name: 'migration-2-0-0', settings: { + baseUrl: undefined, podProvider: false }, + created() { + if (!this.settings.baseUrl) { + throw new Error('The baseUrl setting is mandatory'); + } + }, actions: { async moveAllToNamedGraph(ctx) { const { dataset } = ctx.params; @@ -33,18 +40,7 @@ module.exports = { if (this.settings.podProvider) { // Move WebID (not linked from a container) - const webIdResult = await ctx.call('triplestore.query', { - query: ` - PREFIX foaf: - SELECT ?webId - WHERE { - ?webId a foaf:Person . - } - `, - webId: 'system' - }); - const webId = webIdResult[0].webId.value; - + const webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); await this.actions.moveResourceToNamedGraph({ resourceUri: webId }, { parentCtx: ctx }); } @@ -195,6 +191,54 @@ module.exports = { `, webId: 'system' }); + }, + /** + * Replace the as:current predicate with the ID + * Must be called *after* the moveAllToNamedGraph action + */ + async migrateCurrentPredicate(ctx) { + const { dataset } = ctx.params; + + ctx.meta.dataset = dataset || ctx.meta.dataset; + if (this.settings.podProvider) ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); + + const result = await ctx.call('triplestore.query', { + query: ` + PREFIX as: + SELECT ?resourceUri + WHERE { + GRAPH ?resourceUri { + ?s1 as:current ?current . + } + } + `, + webId: 'system' + }); + const activitiesUris = result.map(node => node.resourceUri.value); + + this.logger.info(`Found ${activitiesUris.length} activities needing migration`); + + for (const activityUri of activitiesUris) { + this.logger.info(`Migrating activity ${activityUri}...`); + + const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri }); + + console.log('before', activity); + + const activityWithId = objectCurrentToId(activity); + + console.log('after', activityWithId); + + if (await ctx.call('ldp.remote.isRemote', { resourceUri: activityUri })) { + await ctx.call('ldp.remote.store', { + resource: activityWithId, + webId: ctx.meta.webId, + dataset: ctx.meta.dataset + }); + } else { + await ctx.call('activitypub.activity.put', { resource: activityWithId }); + } + } } } }; diff --git a/src/middleware/packages/migration/package.json b/src/middleware/packages/migration/package.json index d45956cdd..fbf46989f 100644 --- a/src/middleware/packages/migration/package.json +++ b/src/middleware/packages/migration/package.json @@ -6,7 +6,8 @@ "author": "Virtual Assembly", "dependencies": { "@semapps/ldp": "1.1.4", - "@semapps/webacl": "1.1.4" + "@semapps/webacl": "1.1.4", + "url-join": "^4.0.1" }, "publishConfig": { "access": "public" diff --git a/src/middleware/packages/migration/utils.js b/src/middleware/packages/migration/utils.js index 139a75686..edf7c4f14 100644 --- a/src/middleware/packages/migration/utils.js +++ b/src/middleware/packages/migration/utils.js @@ -22,6 +22,21 @@ const buildBlankNodesQuery = depth => { return { construct, where }; }; +const objectCurrentToId = activityJson => { + if (activityJson.object && typeof activityJson.object === 'object' && activityJson.object.current) { + const { current, ...object } = activityJson.object; + return { + ...activityJson, + object: { + id: current, + ...objectCurrentToId(object) + } + }; + } + return activityJson; +}; + module.exports = { - buildBlankNodesQuery + buildBlankNodesQuery, + objectCurrentToId }; From 222b281308a99e519f536b00d53ed2b31812d6e3 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 5 Sep 2025 11:52:20 +0200 Subject: [PATCH 047/165] Remove mirror graph, fix all tests --- .../services/activitypub/subservices/actor.js | 8 +- .../subservices/collection/actions/get.js | 2 +- .../activitypub/subservices/outbox.js | 11 +- src/middleware/packages/core/service.js | 2 +- .../packages/jsonld/services/parser/index.js | 61 +++++++++ .../ldp/services/container/actions/exist.js | 17 ++- .../ldp/services/container/actions/get.js | 7 +- .../ldp/services/container/actions/patch.js | 2 +- .../ldp/services/remote/actions/delete.js | 2 +- .../ldp/services/remote/actions/getStored.js | 15 +-- .../ldp/services/resource/actions/get.js | 22 +--- .../ldp/services/resource/actions/put.js | 5 - .../packages/ldp/services/resource/index.js | 1 - .../packages/ldp/services/resource/methods.js | 5 - src/middleware/packages/ldp/utils.js | 15 +-- src/middleware/packages/migration/2-0-0.js | 4 - .../packages/sync/services/aggregator.js | 4 +- .../packages/sync/services/mirror.js | 83 ++++++++---- .../packages/sync/services/synchronizer.js | 5 - src/middleware/packages/void/service.js | 122 +----------------- .../packages/webacl/middlewares/webacl.js | 11 +- src/middleware/packages/webacl/utils.js | 6 +- src/middleware/packages/webid/service.js | 1 + src/middleware/tests/interop/initialize.js | 13 +- src/middleware/tests/interop/mirror.test.js | 3 +- .../tests/interop/patch-remote.test.js | 3 +- src/middleware/tests/ldp/api.test.js | 12 +- src/middleware/tests/ldp/binary.test.js | 4 +- src/middleware/tests/ldp/container.test.js | 31 +++-- .../tests/ldp/content-negotiation.test.js | 24 ++-- src/middleware/tests/webacl/resource.test.js | 15 ++- 31 files changed, 225 insertions(+), 291 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js index 6b902e54a..41dc4be58 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js @@ -16,11 +16,15 @@ const ActorService = { actions: { async get(ctx) { const { actorUri, webId } = ctx.params; + // Check if the actor is remote // If dataset is not in the meta, assume that actor is remote - if (ctx.meta.dataset && !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { + if ( + !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri })) && + (!this.settings.podProvider || ctx.meta.dataset) + ) { try { // Don't return immediately the promise, or we won't be able to catch errors - const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, webId }); + const actor = await ctx.call('webid.get', { resourceUri: actorUri, webId }); return actor; } catch (e) { console.error(e); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js index cf38400f0..57e3a6970 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js @@ -187,7 +187,7 @@ async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, curso if (itemUri) { if (options.dereferenceItems) { try { - let item = await ctx.call('activitypub.activity.get', { + let item = await ctx.call('ldp.resource.get', { resourceUri: itemUri, webId: ctx.meta.impersonatedUser || webId }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js index 248419e3a..40a4b33a2 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js @@ -108,12 +108,11 @@ const OutboxService = { webId: 'system' // Post as system since there is no write permission to the activities container }); - // Refetch because persisting has side-effects. - // And reattach capability for further processing (if present). - activity = { - ...(await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' })), - capability - }; + // Refetch because persisting has side-effects + activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' }); + + // Reattach capability for further processing + if (capability) activity.capability = capability; } try { diff --git a/src/middleware/packages/core/service.js b/src/middleware/packages/core/service.js index 818f28858..5182be3ea 100644 --- a/src/middleware/packages/core/service.js +++ b/src/middleware/packages/core/service.js @@ -131,7 +131,7 @@ const CoreService = { mixins: this.settings.ldp.documentTagger !== false ? [DocumentTaggerMixin, LdpService] : [LdpService], settings: { baseUrl, - containers: containers || (this.settings.mirror !== false ? [botsContainer] : []), + containers: containers || [botsContainer], ...this.settings.ldp } }); diff --git a/src/middleware/packages/jsonld/services/parser/index.js b/src/middleware/packages/jsonld/services/parser/index.js index 01d6729d0..d52e29336 100644 --- a/src/middleware/packages/jsonld/services/parser/index.js +++ b/src/middleware/packages/jsonld/services/parser/index.js @@ -4,6 +4,7 @@ const { JsonLdParser } = require('jsonld-streaming-parser'); const { JsonLdSerializer } = require('jsonld-streaming-serializer'); const streamifyString = require('streamify-string'); const rdfParser = require('rdf-parse').default; +const { getId, isObject } = require('@semapps/ldp'); const { arrayOf, isURI } = require('../../utils/utils'); module.exports = { @@ -185,6 +186,50 @@ module.exports = { }, { parentCtx: ctx } ); + }, + // Frame an input according to a context and try to embed all nodes in a single node + // If this is not possible (cam happen with complex documents), return a @graph without embedding + async frameAndEmbed(ctx) { + const { input, jsonContext } = ctx.params; + + // Frame and embed the input + const result = await ctx.call('jsonld.parser.frame', { + input, + frame: { '@context': jsonContext || (await ctx.call('jsonld.context.get')) }, + options: { + embed: '@once', + omitGraph: false // Force to return a @graph property + } + }); + + // Traverse the entire JSON-LD structure to find all embedded objects URIs + let embeddedObjectsUris = new Set(); + this.collectEmbeddedObjectsUris(result['@graph'], embeddedObjectsUris); + + // Get the nodes in the @graph that were not embedded + const unembeddedNodes = result['@graph'].filter( + node => getId(node) && Object.keys(node).length > 1 && !embeddedObjectsUris.has(getId(node)) + ); + + if (unembeddedNodes.length === 1) { + // If all nodes can be embedded in a single node, reframe it with the @id + // (We cannot simply remove the embedded nodes, otherwise the blank nodes id will be visible) + return await ctx.call('jsonld.parser.frame', { + input, + frame: { '@context': jsonContext, '@id': getId(unembeddedNodes[0]) }, + options: { embed: '@once' } + }); + } else { + // If some nodes cannot be embedded, return the full graph without embedding + return await ctx.call('jsonld.parser.frame', { + input, + frame: { '@context': jsonContext }, + options: { + embed: '@never', + omitGraph: false // Force to return a @graph property + } + }); + } } }, methods: { @@ -206,6 +251,22 @@ module.exports = { .on('error', error => reject(error)) .on('end', () => resolve(res)); }); + }, + collectEmbeddedObjectsUris(value, embeddedObjectsUris, level = 0) { + if (Array.isArray(value)) { + value.forEach(item => { + this.collectEmbeddedObjectsUris(item, embeddedObjectsUris, level + 1); + }); + } else if (isObject(value)) { + const objectUri = getId(value); + + // We don't want to collect first-level objects as they are not embedded + if (objectUri && level > 1) embeddedObjectsUris.add(objectUri); + + for (const propValue of Object.values(value)) { + this.collectEmbeddedObjectsUris(propValue, embeddedObjectsUris, level + 1); + } + } } } }; diff --git a/src/middleware/packages/ldp/services/container/actions/exist.js b/src/middleware/packages/ldp/services/container/actions/exist.js index 8dc27c428..b979cfe50 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.js +++ b/src/middleware/packages/ldp/services/container/actions/exist.js @@ -7,9 +7,18 @@ module.exports = { // Matches container with or without trailing slash const containerUri = ctx.params.containerUri.replace(/\/+$/, ''); - return ( - (await ctx.call('triplestore.document.exist', { documentUri: containerUri })) || - (await ctx.call('triplestore.document.exist', { documentUri: `${containerUri}/` })) - ); + return await ctx.call('triplestore.query', { + query: ` + PREFIX ldp: + ASK + WHERE { + FILTER(?containerUri IN (<${containerUri}>, <${`${containerUri}/`}>)) . + GRAPH ?containerUri { + ?containerUri a ldp:Container . + } + } + `, + webId: 'system' + }); } }; diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.js index 70a0ee151..c15935320 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.js +++ b/src/middleware/packages/ldp/services/container/actions/get.js @@ -51,10 +51,11 @@ module.exports = { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} SELECT ?s1 - FROM <${containerUri}> WHERE { - <${containerUri}> ?s1 . - ${filtersQuery.where} + GRAPH <${containerUri}> { + <${containerUri}> ?s1 . + } + ${filtersQuery} } `, accept, diff --git a/src/middleware/packages/ldp/services/container/actions/patch.js b/src/middleware/packages/ldp/services/container/actions/patch.js index b34b69b2e..2603eeaf5 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.js +++ b/src/middleware/packages/ldp/services/container/actions/patch.js @@ -94,7 +94,7 @@ module.exports = { try { await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId }); - // If the mirrored resource is not attached to any container anymore, it must be deleted. + // If the imported resource is not attached to any container anymore, it must be deleted. const containers = await ctx.call('ldp.resource.getContainers', { resourceUri }); if (containers.length === 0 && isMirror(resourceUri, this.settings.baseUrl)) { await ctx.call('ldp.remote.delete', { resourceUri }); diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.js b/src/middleware/packages/ldp/services/remote/actions/delete.js index 8adb13c10..f1073fcf3 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.js +++ b/src/middleware/packages/ldp/services/remote/actions/delete.js @@ -30,7 +30,7 @@ module.exports = { await ctx.call('triplestore.document.clear', { documentUri: resourceUri }); await ctx.call('triplestore.document.delete', { documentUri: resourceUri }); - // Detach from all containers with the mirrored resource + // Detach from all containers const containers = await ctx.call('ldp.resource.getContainers', { resourceUri }); for (const containerUri of containers) { await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.js b/src/middleware/packages/ldp/services/remote/actions/getStored.js index 21e6e1af5..b9541515d 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.js +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.js @@ -13,7 +13,7 @@ module.exports = { webId: { type: 'string', optional: true } }, async handler(ctx) { - const { resourceUri, jsonContext, noGraph } = ctx.params; + const { resourceUri, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); @@ -36,18 +36,9 @@ module.exports = { webId }); - // Frame the result using the correct context in order to have clean, consistent results - const result2 = await ctx.call('jsonld.parser.frame', { + return await ctx.call('jsonld.parser.frameAndEmbed', { input: result, - frame: { - '@context': jsonContext || (await ctx.call('jsonld.context.get')), - '@id': resourceUri - }, - options: { - embed: '@once' - } + jsonContext: jsonContext || (await ctx.call('jsonld.context.get')) }); - - return result2; } }; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.js index c7bcb26cf..3e88ca2cb 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.js +++ b/src/middleware/packages/ldp/services/resource/actions/get.js @@ -1,6 +1,5 @@ const { MoleculerError } = require('moleculer').Errors; const { MIME_TYPES } = require('@semapps/mime-types'); -const { arrayOf } = require('../../../utils'); module.exports = { visibility: 'public', @@ -8,7 +7,6 @@ module.exports = { resourceUri: { type: 'string' }, webId: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, - noGraph: { type: 'boolean', default: false }, jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], @@ -24,7 +22,7 @@ module.exports = { keys: ['resourceUri', 'jsonContext'] }, async handler(ctx) { - const { resourceUri, accept, noGraph, jsonContext } = ctx.params; + const { resourceUri, accept, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (accept && accept !== MIME_TYPES.JSON) @@ -54,23 +52,9 @@ module.exports = { webId: 'system' }); - const frame = { '@context': jsonContext || (await ctx.call('jsonld.context.get')) }; - - // If the graph contains only blank nodes, we want them to be embedded in the resource - // Otherwise we want this action to return a @graph with all resources - const graphWithBlankNodesOnly = arrayOf(result['@graph']).every( - node => node['@id'].startsWith('_:b') || node['@id'] === resourceUri - ); - - if (graphWithBlankNodesOnly || noGraph) frame['@id'] = resourceUri; - - // Frame the result using the correct context in order to have clean, consistent results - return await ctx.call('jsonld.parser.frame', { + return await ctx.call('jsonld.parser.frameAndEmbed', { input: result, - frame, - options: { - embed: graphWithBlankNodesOnly || noGraph ? '@once' : '@never' - } + jsonContext: jsonContext || (await ctx.call('jsonld.context.get')) }); } }; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.js index 9cba90c4c..470cfdec4 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.js +++ b/src/middleware/packages/ldp/services/resource/actions/put.js @@ -64,11 +64,6 @@ module.exports = { let oldTriples = await ctx.call('jsonld.parser.toQuads', { input: oldData }); let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); - // Filter out triples whose subject is not the resource itself - // We don't want to update or delete resources with IDs - oldTriples = this.filterOtherNamedNodes(oldTriples, resourceUri); - newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); - // blank nodes are convert to variable for sparql query (?variable) oldTriples = this.convertBlankNodesToVars(oldTriples); newTriples = this.convertBlankNodesToVars(newTriples); diff --git a/src/middleware/packages/ldp/services/resource/index.js b/src/middleware/packages/ldp/services/resource/index.js index 48d936d94..4ed6f3039 100644 --- a/src/middleware/packages/ldp/services/resource/index.js +++ b/src/middleware/packages/ldp/services/resource/index.js @@ -17,7 +17,6 @@ module.exports = { settings: { baseUrl: null, podProvider: false, - mirrorGraphName: null, preferredViewForResource: null, binary: { maxSize: '50Mb' diff --git a/src/middleware/packages/ldp/services/resource/methods.js b/src/middleware/packages/ldp/services/resource/methods.js index 1e6afcf47..480db813a 100644 --- a/src/middleware/packages/ldp/services/resource/methods.js +++ b/src/middleware/packages/ldp/services/resource/methods.js @@ -25,11 +25,6 @@ module.exports = { .on('error', reject); }); }, - // Filter out triples whose subject is not the resource itself - // We don't want to update or delete resources with IDs - filterOtherNamedNodes(triples, resourceUri) { - return triples.filter(triple => !(triple.subject.termType === 'NamedNode' && triple.subject.value !== resourceUri)); - }, convertBlankNodesToVars(triples) { return triples.map(triple => { if (triple.subject.termType === 'BlankNode') { diff --git a/src/middleware/packages/ldp/utils.js b/src/middleware/packages/ldp/utils.js index ef7e126bc..c5f538441 100644 --- a/src/middleware/packages/ldp/utils.js +++ b/src/middleware/packages/ldp/utils.js @@ -23,24 +23,24 @@ const isURI = value => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); const buildFiltersQuery = filters => { - let where = ''; + let query = ''; if (filters) { Object.keys(filters).forEach((predicate, i) => { if (filters[predicate]) { - where += ` + query += ` FILTER EXISTS { - ?s1 ${isURI(predicate) ? `<${predicate}>` : predicate} ${ + GRAPH ?g1 { ?s1 ${isURI(predicate) ? `<${predicate}>` : predicate} ${ isURI(filters[predicate]) ? `<${filters[predicate]}>` : `"${filters[predicate]}"` - } } . + } } }. `; } else { - where += ` - FILTER NOT EXISTS { ?s1 ${isURI(predicate) ? `<${predicate}>` : predicate} ?unwanted${i} } . + query += ` + FILTER NOT EXISTS { GRAPH ?g1 { ?s1 ${isURI(predicate) ? `<${predicate}>` : predicate} ?unwanted${i} } } . `; } }); } - return { where }; + return query; }; const isObject = value => typeof value === 'object' && !Array.isArray(value) && value !== null; @@ -173,7 +173,6 @@ module.exports = { isMirror, createFragmentURL, regexPrefix, - regexProtocolAndHostAndPort, waitForResource, arrayOf }; diff --git a/src/middleware/packages/migration/2-0-0.js b/src/middleware/packages/migration/2-0-0.js index 5b5836c1e..cb4b4196b 100644 --- a/src/middleware/packages/migration/2-0-0.js +++ b/src/middleware/packages/migration/2-0-0.js @@ -223,12 +223,8 @@ module.exports = { const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri }); - console.log('before', activity); - const activityWithId = objectCurrentToId(activity); - console.log('after', activityWithId); - if (await ctx.call('ldp.remote.isRemote', { resourceUri: activityUri })) { await ctx.call('ldp.remote.store', { resource: activityWithId, diff --git a/src/middleware/packages/sync/services/aggregator.js b/src/middleware/packages/sync/services/aggregator.js index 38a654cd0..204a41dec 100644 --- a/src/middleware/packages/sync/services/aggregator.js +++ b/src/middleware/packages/sync/services/aggregator.js @@ -5,8 +5,7 @@ module.exports = { name: 'aggregator', mixins: [ActivitiesHandlerMixin], settings: { - acceptFollowOffers: true, - mirrorGraph: true + acceptFollowOffers: true }, dependencies: ['activitypub.relay'], created() { @@ -14,7 +13,6 @@ module.exports = { mixins: [SynchronizerService], settings: { podProvider: false, - mirrorGraph: this.settings.mirrorGraph, synchronizeContainers: false, attachToLocalContainers: true } diff --git a/src/middleware/packages/sync/services/mirror.js b/src/middleware/packages/sync/services/mirror.js index 6a6e8d80b..3ffce0181 100644 --- a/src/middleware/packages/sync/services/mirror.js +++ b/src/middleware/packages/sync/services/mirror.js @@ -1,16 +1,13 @@ const urlJoin = require('url-join'); const fetch = require('node-fetch'); const { MoleculerError } = require('moleculer').Errors; -const { createFragmentURL, arrayOf } = require('@semapps/ldp'); +const { createFragmentURL, arrayOf, getId } = require('@semapps/ldp'); const { ACTIVITY_TYPES } = require('@semapps/activitypub'); const SynchronizerService = require('./synchronizer'); -const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); - module.exports = { name: 'mirror', settings: { - graphName: 'http://semapps.org/mirror', servers: [] }, dependencies: [ @@ -27,7 +24,6 @@ module.exports = { mixins: [SynchronizerService], settings: { podProvider: false, - mirrorGraph: true, synchronizeContainers: true, attachToLocalContainers: false } @@ -104,30 +100,54 @@ module.exports = { if (partitions) { for (const p of arrayOf(partitions)) { - // we skip empty containers and doNotMirror containers + // Skip containers marked as "doNotMirror" if (p['semapps:doNotMirror']) continue; const rep = await fetch(p['void:uriSpace'], { method: 'GET', headers: { - Accept: 'text/turtle' + Accept: 'application/ld+json' } }); if (rep.ok) { - const container = await rep.text(); - - const prefixes = [...container.matchAll(regexPrefix)]; - - let sparqlQuery = ''; - for (const pref of prefixes) { - sparqlQuery += `PREFIX ${pref[1]}\n`; + const container = await rep.json(); + const containerUri = getId(container); + + this.logger.info(`Storing remote container ${containerUri}...`); + + // Don't use ldp.container.create to avoid side effects + await ctx.call('triplestore.update', { + query: ` + PREFIX ldp: + INSERT DATA { + GRAPH <${containerUri}> { + <${containerUri}> a ldp:Container, ldp:BasicContainer . + } + } + `, + webId: 'system' + }); + + for (const resource of arrayOf(container['ldp:contains'])) { + const resourceUri = getId(resource); + this.logger.info(`Storing remote resource ${resourceUri}...`); + + await ctx.call('ldp.remote.store', { resource }); + + // Don't use ldp.container.attach to avoid side effects + await ctx.call('triplestore.update', { + query: ` + PREFIX ldp: + INSERT DATA { + GRAPH <${containerUri}> { + <${containerUri}> ldp:contains <${resourceUri}> . + } + } + `, + webId: 'system' + }); } - sparqlQuery += `INSERT DATA { GRAPH <${this.settings.graphName}> { \n`; - sparqlQuery += container.replace(regexPrefix, ''); - sparqlQuery += '} }'; - - await ctx.call('triplestore.update', { query: sparqlQuery }); } } } @@ -135,21 +155,32 @@ module.exports = { // Unmark any single mirrored resources that belong to this server we just mirrored // because we don't need to periodically watch them anymore const singles = await this.broker.call('triplestore.query', { - query: `SELECT DISTINCT ?s WHERE { - GRAPH <${this.settings.graphName}> { - ?s <${serverUrl}> } }` + query: ` + SELECT DISTINCT ?s + WHERE { + GRAPH ?g { + ?s <${serverUrl}> + } + } + `, + webId: 'system' }); for (const single of singles) { try { const resourceUri = single.s.value; await this.broker.call('triplestore.update', { - webId: 'system', - query: `DELETE WHERE { GRAPH <${this.settings.graphName}> { - <${resourceUri}> ?q. } }` + query: ` + DELETE WHERE { + GRAPH ?g { + <${resourceUri}> ?q . + } + } + `, + webId: 'system' }); } catch (e) { - // fail silently + // Fail silently } } diff --git a/src/middleware/packages/sync/services/synchronizer.js b/src/middleware/packages/sync/services/synchronizer.js index cdc0b1d14..368c06ea0 100644 --- a/src/middleware/packages/sync/services/synchronizer.js +++ b/src/middleware/packages/sync/services/synchronizer.js @@ -6,7 +6,6 @@ const SynchronizerService = { mixins: [ActivitiesHandlerMixin], settings: { podProvider: false, - mirrorGraph: true, synchronizeContainers: true, attachToLocalContainers: false }, @@ -75,12 +74,10 @@ const SynchronizerService = { typeof resource === 'string' ? { resourceUri: resource, - mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } : { resource: { '@context': activity['@context'], ...resource }, - mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } ); @@ -142,12 +139,10 @@ const SynchronizerService = { typeof resource === 'string' ? { resourceUri: resource, - mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } : { resource: { '@context': activity['@context'], ...resource }, - mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } ); diff --git a/src/middleware/packages/void/service.js b/src/middleware/packages/void/service.js index 600a5c112..a1d7c4368 100644 --- a/src/middleware/packages/void/service.js +++ b/src/middleware/packages/void/service.js @@ -6,7 +6,7 @@ const { DataFactory, Writer } = require('n3'); const { quad, namedNode, literal, blankNode } = DataFactory; const { MoleculerError } = require('moleculer').Errors; -const { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } = require('@semapps/ldp'); +const { createFragmentURL, arrayOf } = require('@semapps/ldp'); const { parseHeader } = require('@semapps/middlewares'); const prefixes = { @@ -78,81 +78,10 @@ const addClassPartition = (serverUrl, partition, graph, scalar) => { graph.push({ s: namedNode(serverUrl), p: namedNode('http://rdfs.org/ns/void#classPartition'), o: blank }); }; -const addMirrorServer = async ( - baseUrl, - serverUrl, - graph, - hasSparql, - containers, - mirrorGraph, - ctx, - nextScalar, - originalVoid -) => { - const thisServer = createFragmentURL(baseUrl, serverUrl); - - graph.push({ - s: namedNode(thisServer), - p: namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), - o: namedNode('http://rdfs.org/ns/void#Dataset') - }); - // graph.push({ - // s: namedNode(thisServer), - // p: namedNode('http://purl.org/dc/terms/modified'), - // o: literal('2020-11-17', namedNode('http://www.w3.org/2001/XMLSchema#date')) - // }); - graph.push({ - s: namedNode(thisServer), - p: namedNode('http://rdfs.org/ns/void#feature'), - o: namedNode('http://www.w3.org/ns/formats/N-Triples') - }); - graph.push({ s: namedNode(thisServer), p: namedNode('http://rdfs.org/ns/void#uriSpace'), o: literal(serverUrl) }); - - if (hasSparql) - graph.push({ - s: namedNode(thisServer), - p: namedNode('http://rdfs.org/ns/void#sparqlEndpoint'), - o: namedNode(hasSparql) - }); - - const partitionsMap = {}; - if (originalVoid) { - const originalPartitions = originalVoid['void:classPartition']; - - if (originalPartitions) { - for (const p of arrayOf(originalPartitions)) { - // we skip empty containers and doNotMirror containers - if (p['void:entities'] === '0' || p['semapps:doNotMirror']) continue; - partitionsMap[p['void:uriSpace']] = p; - } - } - } - - for (const [i, p] of containers.entries()) { - const types = await ctx.call('triplestore.query', { - query: `SELECT DISTINCT ?t FROM <${mirrorGraph}> { <${p}> ?o. ?o ?t }` - }); - - const partition = { - 'http://rdfs.org/ns/void#uriSpace': p, - 'http://rdfs.org/ns/void#class': types.map(type => type.t.value) - }; - - const count = await ctx.call('triplestore.query', { - query: `SELECT (COUNT (?o) as ?count) FROM <${mirrorGraph}> { <${p}> ?o }` - }); - - partition['http://rdfs.org/ns/void#entities'] = Number(count[0].count.value); - - addClassPartition(thisServer, partition, graph, nextScalar + i); - } -}; - module.exports = { name: 'void', settings: { baseUrl: null, - mirrorGraphName: 'http://semapps.org/mirror', title: null, description: null, license: null @@ -211,8 +140,6 @@ module.exports = { const { origin } = new URL(this.settings.baseUrl); const url = urlJoin(origin, '.well-known/void'); - // first we compile the local data void information (local containers) - const thisServer = createFragmentURL(url, this.settings.baseUrl); const graph = []; @@ -286,53 +213,6 @@ module.exports = { for (const [i, p] of partitions.entries()) { addClassPartition(thisServer, p, graph, i); } - let scalar = partitions.length; - - // then we move on to the mirrored data (containers that have been mirrored from remote servers) - - const serversContainers = await ctx.call('triplestore.query', { - query: `SELECT DISTINCT ?s FROM <${this.settings.mirrorGraphName}> { ?s ?o }` - }); - - const serversMap = {}; - for (const s of serversContainers.map(sc => sc.s.value)) { - const res = s.match(regexProtocolAndHostAndPort); - if (res) { - const name = urlJoin(res[0], '/'); - let serverName = serversMap[name]; - if (!serverName) { - serversMap[name] = []; - serverName = serversMap[name]; - } - serverName.push(s); - } - } - - for (const serverUrl of Object.keys(serversMap)) { - let originalVoid; - const json = await ctx.call('void.getRemote', { serverUrl }); - if (json) { - const mapServers = {}; - for (const s of json['@graph']) { - mapServers[s['@id']] = s; - } - const server = mapServers[createFragmentURL('', serverUrl)]; - originalVoid = server; - } - - await addMirrorServer( - url, - serverUrl, - graph, - hasSparql, - serversMap[serverUrl], - this.settings.mirrorGraphName, - ctx, - scalar, - originalVoid - ); - scalar += serversMap[serverUrl].length; - } ctx.meta.$responseType = accept; diff --git a/src/middleware/packages/webacl/middlewares/webacl.js b/src/middleware/packages/webacl/middlewares/webacl.js index ccd0cf71b..757e4eb31 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.js +++ b/src/middleware/packages/webacl/middlewares/webacl.js @@ -94,13 +94,6 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se */ switch (action.name) { case 'ldp.resource.create': { - // Do not add ACLs if this is a mirrored resource as WebACL are not activated on the mirror graph - if ( - (await ctx.call('ldp.remote.isRemote', { resourceUri: ctx.params.resourceUri })) && - (await ctx.call('ldp.remote.getGraph', { resourceUri: ctx.params.resourceUri })) === - 'http://semapps.org/mirror' - ) - return next(ctx); // We must add the permissions before inserting the resource await addRightsToNewResource(ctx, ctx.params.resourceUri, webId); break; @@ -229,8 +222,8 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se case 'ldp.remote.store': { const resourceUri = ctx.params.resourceUri || ctx.params.resource.id || ctx.params.resource['@id']; - // When a remote resource is stored in the default graph, give read permission to the logged user - if (!ctx.params.mirrorGraph && webId && webId !== 'system' && webId !== 'anon') { + // When a remote resource is stored locally, give read permission to the logged user + if (webId && webId !== 'system' && webId !== 'anon') { const dataset = podProvider ? getSlugFromUri(webId) : undefined; await ctx.call( 'webacl.resource.addRights', diff --git a/src/middleware/packages/webacl/utils.js b/src/middleware/packages/webacl/utils.js index aee5b4efd..5b9ae1877 100644 --- a/src/middleware/packages/webacl/utils.js +++ b/src/middleware/packages/webacl/utils.js @@ -25,7 +25,11 @@ const findParentContainers = async (ctx, resourceUri) => { query: ` PREFIX ldp: SELECT ?container - WHERE { ?container ldp:contains <${resourceUri}> . } + WHERE { + GRAPH ?g { + ?container ldp:contains <${resourceUri}> . + } + } `, webId: 'system' }); diff --git a/src/middleware/packages/webid/service.js b/src/middleware/packages/webid/service.js index 9423ae393..6c2d85509 100644 --- a/src/middleware/packages/webid/service.js +++ b/src/middleware/packages/webid/service.js @@ -13,6 +13,7 @@ const WebIdService = { path: '/foaf/person', acceptedTypes: ['http://xmlns.com/foaf/0.1/Person'], podsContainer: false, + excludeFromMirror: true, // DereferenceMixin dereferencePlan: [ { diff --git a/src/middleware/tests/interop/initialize.js b/src/middleware/tests/interop/initialize.js index ff7ea7d8d..2692c9c6b 100644 --- a/src/middleware/tests/interop/initialize.js +++ b/src/middleware/tests/interop/initialize.js @@ -1,7 +1,6 @@ const fse = require('fs-extra'); const path = require('path'); const urlJoin = require('url-join'); -const Redis = require('ioredis'); const { ServiceBroker } = require('moleculer'); const { FULL_ACTOR_TYPES, RelayService } = require('@semapps/activitypub'); const { AuthLocalService } = require('@semapps/auth'); @@ -11,7 +10,7 @@ const { pair } = require('@semapps/ontologies'); const { MirrorService, ObjectsWatcherMiddleware } = require('@semapps/sync'); const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); const CONFIG = require('../config'); -const { dropDataset } = require('../utils'); +const { dropDataset, clearQueue } = require('../utils'); const containers = [ { @@ -27,15 +26,12 @@ const containers = [ ]; const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, serverToMirror) => { + const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; + // Clear datasets await dropDataset(mainDataset); await dropDataset(accountsDataset); - - // Clear queue - const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; - const redisClient = new Redis(queueServiceUrl); - const result = await redisClient.flushdb(); - redisClient.disconnect(); + await clearQueue(queueServiceUrl); // Remove all actors keys await fse.emptyDir(path.resolve(__dirname, './actors')); @@ -77,7 +73,6 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se api: { port }, - mirror: serverToMirror ? { servers: [serverToMirror] } : true, webid: { path: '/as/actor', acceptedTypes: [FULL_ACTOR_TYPES.PERSON, FULL_ACTOR_TYPES.APPLICATION] diff --git a/src/middleware/tests/interop/mirror.test.js b/src/middleware/tests/interop/mirror.test.js index 6473234d9..53be43c6e 100644 --- a/src/middleware/tests/interop/mirror.test.js +++ b/src/middleware/tests/interop/mirror.test.js @@ -105,7 +105,8 @@ describe('Server2 mirror server1', () => { namedNode('http://www.w3.org/ns/ldp#contains'), namedNode(resourceUri) ) - ] + ], + webId: 'system' }); await waitForExpect(async () => { diff --git a/src/middleware/tests/interop/patch-remote.test.js b/src/middleware/tests/interop/patch-remote.test.js index d415def4a..ed2a18b81 100644 --- a/src/middleware/tests/interop/patch-remote.test.js +++ b/src/middleware/tests/interop/patch-remote.test.js @@ -47,7 +47,8 @@ describe('Server2 imports a single resource from server1', () => { namedNode('http://www.w3.org/ns/ldp#contains'), namedNode(resourceUri) ) - ] + ], + webId: 'system' }); await waitForExpect(async () => { diff --git a/src/middleware/tests/ldp/api.test.js b/src/middleware/tests/ldp/api.test.js index 19f6810d7..5184c27fe 100644 --- a/src/middleware/tests/ldp/api.test.js +++ b/src/middleware/tests/ldp/api.test.js @@ -97,7 +97,7 @@ describe('LDP handling through API', () => { test('Get container', async () => { await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { '@id': resourceUri, @@ -117,7 +117,7 @@ describe('LDP handling through API', () => { }) ).resolves.toMatchObject({ json: { - type: ['ldp:Container', 'ldp:BasicContainer'], + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { id: resourceUri, @@ -234,7 +234,7 @@ describe('LDP handling through API', () => { await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [] } }); @@ -263,7 +263,7 @@ describe('LDP handling through API', () => { await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ json: { - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'dc:title': 'Sub-resources', 'dc:description': 'Used to test dynamic containers creation' } @@ -291,7 +291,7 @@ describe('LDP handling through API', () => { 'ldp:contains': [ { '@id': subContainerUri, - '@type': ['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource'] + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource']) } ] }); @@ -342,7 +342,7 @@ describe('LDP handling through API', () => { await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [] } }); diff --git a/src/middleware/tests/ldp/binary.test.js b/src/middleware/tests/ldp/binary.test.js index f3b6f5e0d..f789a54ba 100644 --- a/src/middleware/tests/ldp/binary.test.js +++ b/src/middleware/tests/ldp/binary.test.js @@ -45,7 +45,7 @@ describe('Binary handling of LDP server', () => { test('Get container', async () => { await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ json: { - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { '@id': fileUri, @@ -100,7 +100,7 @@ describe('Binary handling of LDP server', () => { await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ json: { - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [] } }); diff --git a/src/middleware/tests/ldp/container.test.js b/src/middleware/tests/ldp/container.test.js index 65534ffca..880ea30c4 100644 --- a/src/middleware/tests/ldp/container.test.js +++ b/src/middleware/tests/ldp/container.test.js @@ -36,7 +36,7 @@ describe('LDP container tests', () => { }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}objects`, - '@type': ['ldp:Container', 'ldp:BasicContainer'] + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']) }); }); @@ -66,7 +66,7 @@ describe('LDP container tests', () => { 'ldp:contains': expect.arrayContaining([ { '@id': `${CONFIG.HOME_URL}parent`, - '@type': ['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource'] + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource']) } ]) }); @@ -80,7 +80,7 @@ describe('LDP container tests', () => { 'ldp:contains': expect.arrayContaining([ { '@id': `${CONFIG.HOME_URL}parent/child`, - '@type': ['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource'] + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource']) } ]) }); @@ -104,7 +104,7 @@ describe('LDP container tests', () => { }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { '@id': resourceUri, @@ -152,7 +152,10 @@ describe('LDP container tests', () => { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, '@id': `${CONFIG.HOME_URL}resources`, - '@type': ['http://www.w3.org/ns/ldp#Container', 'http://www.w3.org/ns/ldp#BasicContainer'], + '@type': expect.arrayContaining([ + 'http://www.w3.org/ns/ldp#Container', + 'http://www.w3.org/ns/ldp#BasicContainer' + ]), 'http://www.w3.org/ns/ldp#contains': [ { '@id': resourceUri, @@ -182,15 +185,15 @@ describe('LDP container tests', () => { }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, - '@type': ['ldp:Container', 'ldp:BasicContainer'], - 'ldp:contains': [ - { + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'ldp:contains': expect.arrayContaining([ + expect.objectContaining({ 'pair:label': 'My project' - }, - { + }), + expect.objectContaining({ 'pair:label': 'My project 2' - } - ] + }) + ]) }); // Get with filters param @@ -203,7 +206,7 @@ describe('LDP container tests', () => { }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { 'pair:label': 'My project 2' @@ -234,7 +237,7 @@ describe('LDP container tests', () => { }) ).resolves.toMatchObject({ '@id': `${CONFIG.HOME_URL}resources`, - '@type': ['ldp:Container', 'ldp:BasicContainer'], + '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { 'pair:label': 'My project 2' diff --git a/src/middleware/tests/ldp/content-negotiation.test.js b/src/middleware/tests/ldp/content-negotiation.test.js index 8121ec899..eef5f56c4 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.js +++ b/src/middleware/tests/ldp/content-negotiation.test.js @@ -75,7 +75,7 @@ describe('Content negotiation', () => { }) }); - expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:BasicContainer, ldp:Container`)); + expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:Container, ldp:BasicContainer`)); expect(body).toMatch(new RegExp(`ldp:contains <${projectUri}>`)); expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); @@ -243,21 +243,17 @@ describe('Content negotiation', () => { resourceUri: project4Uri }); + // In JSON-LD, blank nodes are automatically embedded expect(project4).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', - '@graph': expect.arrayContaining([ - { - '@id': project4Uri, - '@type': 'pair:Project', - 'pair:hasPart': `${project4Uri}#task1`, - 'pair:label': 'myProject 4' - }, - { - '@id': `${project4Uri}#task1`, - '@type': 'pair:Task', - 'pair:label': 'myTask 1' - } - ]) + '@id': project4Uri, + '@type': 'pair:Project', + 'pair:hasPart': { + '@id': `${project4Uri}#task1`, + '@type': 'pair:Task', + 'pair:label': 'myTask 1' + }, + 'pair:label': 'myProject 4' }); }); diff --git a/src/middleware/tests/webacl/resource.test.js b/src/middleware/tests/webacl/resource.test.js index cbe788526..4d6b6693a 100644 --- a/src/middleware/tests/webacl/resource.test.js +++ b/src/middleware/tests/webacl/resource.test.js @@ -1,6 +1,7 @@ const { namedNode, triple, literal } = require('@rdfjs/data-model'); const CONFIG = require('../config'); const initialize = require('./initialize'); +const waitForExpect = require('wait-for-expect'); jest.setTimeout(20000); @@ -132,12 +133,14 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); - await expect( - broker.call('ldp.resource.get', { - resourceUri, - webId: BOB_WEBID - }) - ).resolves.toBeDefined(); + await waitForExpect(async () => { + await expect( + broker.call('ldp.resource.get', { + resourceUri, + webId: BOB_WEBID + }) + ).resolves.toBeDefined(); + }); }); test('Post data without append permission on container', async () => { From 9c58dbc501b739ca8bc623e95f69d133f7574db5 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:11:20 +0300 Subject: [PATCH 048/165] ts-migrate rename middleware --- .../packages/activitypub/{constants.js => constants.ts} | 0 .../packages/activitypub/{containers.js => containers.ts} | 0 src/middleware/packages/activitypub/{index.js => index.ts} | 0 .../mixins/{activities-handler.js => activities-handler.ts} | 0 .../activitypub/mixins/{await-activity.js => await-activity.ts} | 0 src/middleware/packages/activitypub/mixins/{bot.js => bot.ts} | 0 .../packages/activitypub/mixins/{fake-queue.js => fake-queue.ts} | 0 .../services/{activity-mapping.js => activity-mapping.ts} | 0 .../activitypub/services/activitypub/{index.js => index.ts} | 0 .../{setRightsHandler.js => setRightsHandler.ts} | 0 .../services/activitypub/subservices/{activity.js => activity.ts} | 0 .../services/activitypub/subservices/{actor.js => actor.ts} | 0 .../services/activitypub/subservices/{api.js => api.ts} | 0 .../activitypub/subservices/collection/actions/{get.js => get.ts} | 0 .../activitypub/subservices/collection/{index.js => index.ts} | 0 .../{collections-registry.js => collections-registry.ts} | 0 .../services/activitypub/subservices/{follow.js => follow.ts} | 0 .../services/activitypub/subservices/{inbox.js => inbox.ts} | 0 .../services/activitypub/subservices/{like.js => like.ts} | 0 .../services/activitypub/subservices/{object.js => object.ts} | 0 .../services/activitypub/subservices/{outbox.js => outbox.ts} | 0 .../services/activitypub/subservices/{reply.js => reply.ts} | 0 .../services/activitypub/subservices/{share.js => share.ts} | 0 .../activitypub/subservices/{side-effects.js => side-effects.ts} | 0 .../packages/activitypub/services/{migration.js => migration.ts} | 0 .../packages/activitypub/services/{relay.js => relay.ts} | 0 src/middleware/packages/activitypub/{utils.js => utils.ts} | 0 .../activitypub/utils/{matchActivity.js => matchActivity.ts} | 0 src/middleware/packages/auth/{index.js => index.ts} | 0 .../packages/auth/middlewares/{localLogout.js => localLogout.ts} | 0 .../auth/middlewares/{redirectToFront.js => redirectToFront.ts} | 0 .../auth/middlewares/{saveRedirectUrl.js => saveRedirectUrl.ts} | 0 .../packages/auth/middlewares/{sendToken.js => sendToken.ts} | 0 src/middleware/packages/auth/mixins/{auth.sso.js => auth.sso.ts} | 0 src/middleware/packages/auth/mixins/{auth.js => auth.ts} | 0 src/middleware/packages/auth/services/{account.js => account.ts} | 0 .../packages/auth/services/{auth.cas.js => auth.cas.ts} | 0 .../packages/auth/services/{auth.local.js => auth.local.ts} | 0 .../packages/auth/services/{auth.oidc.js => auth.oidc.ts} | 0 src/middleware/packages/auth/services/{jwt.js => jwt.ts} | 0 src/middleware/packages/auth/services/{mail.js => mail.ts} | 0 .../packages/auth/services/{migration.js => migration.ts} | 0 src/middleware/packages/backup/{index.js => index.ts} | 0 src/middleware/packages/backup/utils/{fsCopy.js => fsCopy.ts} | 0 src/middleware/packages/backup/utils/{fsRemove.js => fsRemove.ts} | 0 src/middleware/packages/backup/utils/{ftpCopy.js => ftpCopy.ts} | 0 .../packages/backup/utils/{ftpRemove.js => ftpRemove.ts} | 0 .../packages/backup/utils/{rsyncCopy.js => rsyncCopy.ts} | 0 src/middleware/packages/core/{index.js => index.ts} | 0 src/middleware/packages/core/{service.js => service.ts} | 0 src/middleware/packages/crypto/{constants.js => constants.ts} | 0 src/middleware/packages/crypto/{index.js => index.ts} | 0 src/middleware/packages/crypto/keys/{index.js => index.ts} | 0 .../packages/crypto/keys/{key-container.js => key-container.ts} | 0 src/middleware/packages/crypto/keys/{keys.js => keys.ts} | 0 .../packages/crypto/keys/{migration.js => migration.ts} | 0 .../keys/{public-key-container.js => public-key-container.ts} | 0 .../crypto/signature/{http-signatures.js => http-signatures.ts} | 0 src/middleware/packages/crypto/signature/{index.js => index.ts} | 0 .../packages/crypto/signature/{keypair.js => keypair.ts} | 0 src/middleware/packages/crypto/signature/{proxy.js => proxy.ts} | 0 .../{noGraphCredentialContext.js => noGraphCredentialContext.ts} | 0 src/middleware/packages/crypto/utils/{utils.js => utils.ts} | 0 ...ionProofPurpose.js => VcCapabilityPresentationProofPurpose.ts} | 0 .../crypto/verifiable-credentials/{VcPurpose.js => VcPurpose.ts} | 0 .../{challenge-service.js => challenge-service.ts} | 0 .../{data-integrity-service.js => data-integrity-service.ts} | 0 .../packages/crypto/verifiable-credentials/{index.js => index.ts} | 0 .../{vc-api-service.js => vc-api-service.ts} | 0 .../{vc-authorizer-service.js => vc-authorizer-service.ts} | 0 .../{vc-credential-container.js => vc-credential-container.ts} | 0 .../{vc-holder-service.js => vc-holder-service.ts} | 0 .../{vc-issuer-service.js => vc-issuer-service.ts} | 0 ...{vc-presentation-container.js => vc-presentation-container.ts} | 0 .../verifiable-credentials/{vc-service.js => vc-service.ts} | 0 .../{vc-verifier-service.js => vc-verifier-service.ts} | 0 src/middleware/packages/importer/{index.js => index.ts} | 0 .../packages/importer/mixins/{discourse.js => discourse.ts} | 0 src/middleware/packages/importer/mixins/{drupal.js => drupal.ts} | 0 .../packages/importer/mixins/{gogocarto.js => gogocarto.ts} | 0 src/middleware/packages/importer/mixins/{humhub.js => humhub.ts} | 0 .../packages/importer/mixins/{importer.js => importer.ts} | 0 .../packages/importer/mixins/{jotform.js => jotform.ts} | 0 .../packages/importer/mixins/{mobilizon.js => mobilizon.ts} | 0 .../packages/importer/mixins/{prestashop.js => prestashop.ts} | 0 .../packages/importer/mixins/{wordpress.js => wordpress.ts} | 0 .../packages/importer/mixins/{yeswiki.js => yeswiki.ts} | 0 src/middleware/packages/importer/{utils.js => utils.ts} | 0 src/middleware/packages/inference/{index.js => index.ts} | 0 src/middleware/packages/inference/{service.js => service.ts} | 0 .../packages/inference/subservices/{remote.js => remote.ts} | 0 src/middleware/packages/jsonld/{index.js => index.ts} | 0 src/middleware/packages/jsonld/{service.js => service.ts} | 0 .../packages/jsonld/services/api/{index.js => index.ts} | 0 .../packages/jsonld/services/context/actions/{get.js => get.ts} | 0 .../jsonld/services/context/actions/{getLocal.js => getLocal.ts} | 0 .../jsonld/services/context/actions/{merge.js => merge.ts} | 0 .../jsonld/services/context/actions/{parse.js => parse.ts} | 0 .../jsonld/services/context/actions/{validate.js => validate.ts} | 0 .../packages/jsonld/services/context/{index.js => index.ts} | 0 .../jsonld/services/document-loader/{index.js => index.ts} | 0 .../packages/jsonld/services/parser/{index.js => index.ts} | 0 .../packages/jsonld/utils/{uriSchemes.js => uriSchemes.ts} | 0 src/middleware/packages/jsonld/utils/{utils.js => utils.ts} | 0 src/middleware/packages/ldp/{adapter.js => adapter.ts} | 0 src/middleware/packages/ldp/{index.js => index.ts} | 0 .../mixins/{controlled-container.js => controlled-container.ts} | 0 .../packages/ldp/mixins/{dereference.js => dereference.ts} | 0 .../packages/ldp/mixins/{disassembly.js => disassembly.ts} | 0 .../ldp/mixins/{document-tagger.js => document-tagger.ts} | 0 .../ldp/mixins/{image-processor.js => image-processor.ts} | 0 .../packages/ldp/mixins/{mime-types.js => mime-types.ts} | 0 .../mixins/{orphan-files-deletion.js => orphan-files-deletion.ts} | 0 src/middleware/packages/ldp/mixins/{pseudo-id.js => pseudo-id.ts} | 0 ...{single-resource-container.js => single-resource-container.ts} | 0 .../ldp/mixins/{special-endpoint.js => special-endpoint.ts} | 0 .../ldp/routes/{getCatchAllRoute.js => getCatchAllRoute.ts} | 0 .../packages/ldp/routes/{getPodsRoute.js => getPodsRoute.ts} | 0 src/middleware/packages/ldp/{service.js => service.ts} | 0 .../packages/ldp/services/api/actions/{delete.js => delete.ts} | 0 .../packages/ldp/services/api/actions/{get.js => get.ts} | 0 .../packages/ldp/services/api/actions/{head.js => head.ts} | 0 .../packages/ldp/services/api/actions/{patch.js => patch.ts} | 0 .../packages/ldp/services/api/actions/{post.js => post.ts} | 0 .../packages/ldp/services/api/actions/{put.js => put.ts} | 0 src/middleware/packages/ldp/services/api/{index.js => index.ts} | 0 src/middleware/packages/ldp/services/cache/{index.js => index.ts} | 0 .../ldp/services/container/actions/{attach.js => attach.ts} | 0 .../ldp/services/container/actions/{clear.js => clear.ts} | 0 .../ldp/services/container/actions/{create.js => create.ts} | 0 .../container/actions/{createAndAttach.js => createAndAttach.ts} | 0 .../ldp/services/container/actions/{delete.js => delete.ts} | 0 .../ldp/services/container/actions/{detach.js => detach.ts} | 0 .../ldp/services/container/actions/{exist.js => exist.ts} | 0 .../packages/ldp/services/container/actions/{get.js => get.ts} | 0 .../ldp/services/container/actions/{getAll.js => getAll.ts} | 0 .../ldp/services/container/actions/{getPath.js => getPath.ts} | 0 .../ldp/services/container/actions/{getUris.js => getUris.ts} | 0 .../ldp/services/container/actions/{includes.js => includes.ts} | 0 .../ldp/services/container/actions/{isEmpty.js => isEmpty.ts} | 0 .../ldp/services/container/actions/{patch.js => patch.ts} | 0 .../packages/ldp/services/container/actions/{post.js => post.ts} | 0 .../packages/ldp/services/container/{index.js => index.ts} | 0 .../packages/ldp/services/link-header/actions/{get.js => get.ts} | 0 .../ldp/services/link-header/actions/{register.js => register.ts} | 0 .../packages/ldp/services/link-header/{index.js => index.ts} | 0 .../permissions/actions/{addAuthorizer.js => addAuthorizer.ts} | 0 .../ldp/services/permissions/actions/{check.js => check.ts} | 0 .../packages/ldp/services/permissions/actions/{has.js => has.ts} | 0 .../packages/ldp/services/permissions/{index.js => index.ts} | 0 .../ldp/services/registry/actions/{getByType.js => getByType.ts} | 0 .../ldp/services/registry/actions/{getByUri.js => getByUri.ts} | 0 .../ldp/services/registry/actions/{getUri.js => getUri.ts} | 0 .../packages/ldp/services/registry/actions/{list.js => list.ts} | 0 .../ldp/services/registry/actions/{register.js => register.ts} | 0 .../services/registry/{defaultOptions.js => defaultOptions.ts} | 0 .../packages/ldp/services/registry/{index.js => index.ts} | 0 .../packages/ldp/services/remote/actions/{delete.js => delete.ts} | 0 .../packages/ldp/services/remote/actions/{get.js => get.ts} | 0 .../ldp/services/remote/actions/{getNetwork.js => getNetwork.ts} | 0 .../ldp/services/remote/actions/{getStored.js => getStored.ts} | 0 .../ldp/services/remote/actions/{isRemote.js => isRemote.ts} | 0 .../packages/ldp/services/remote/actions/{store.js => store.ts} | 0 .../packages/ldp/services/remote/{index.js => index.ts} | 0 .../actions/{awaitCreateComplete.js => awaitCreateComplete.ts} | 0 .../ldp/services/resource/actions/{create.js => create.ts} | 0 .../ldp/services/resource/actions/{delete.js => delete.ts} | 0 .../packages/ldp/services/resource/actions/{exist.js => exist.ts} | 0 .../services/resource/actions/{generateId.js => generateId.ts} | 0 .../packages/ldp/services/resource/actions/{get.js => get.ts} | 0 .../resource/actions/{getContainers.js => getContainers.ts} | 0 .../ldp/services/resource/actions/{getTypes.js => getTypes.ts} | 0 .../packages/ldp/services/resource/actions/{patch.js => patch.ts} | 0 .../packages/ldp/services/resource/actions/{put.js => put.ts} | 0 .../ldp/services/resource/actions/{upload.js => upload.ts} | 0 .../packages/ldp/services/resource/{index.js => index.ts} | 0 .../packages/ldp/services/resource/{methods.js => methods.ts} | 0 src/middleware/packages/ldp/{utils.js => utils.ts} | 0 src/middleware/packages/middlewares/{index.js => index.ts} | 0 src/middleware/packages/migration/{index.js => index.ts} | 0 src/middleware/packages/migration/{service.js => service.ts} | 0 src/middleware/packages/mime-types/{constants.js => constants.ts} | 0 src/middleware/packages/mime-types/{index.js => index.ts} | 0 src/middleware/packages/nodeinfo/{index.js => index.ts} | 0 src/middleware/packages/nodeinfo/{service.js => service.ts} | 0 src/middleware/packages/notifications/{index.js => index.ts} | 0 .../notifications/services/digest/{service.js => service.ts} | 0 .../services/digest/{subscription.js => subscription.ts} | 0 .../notifications/services/expo-push/{device.js => device.ts} | 0 .../services/expo-push/{notification.js => notification.ts} | 0 .../notifications/services/expo-push/{service.js => service.ts} | 0 .../notifications/services/single-mail/{service.js => service.ts} | 0 .../ontologies/actions/{findNamespace.js => findNamespace.ts} | 0 .../packages/ontologies/actions/{findPrefix.js => findPrefix.ts} | 0 src/middleware/packages/ontologies/actions/{get.js => get.ts} | 0 .../ontologies/actions/{getPrefixes.js => getPrefixes.ts} | 0 .../ontologies/actions/{getRdfPrefixes.js => getRdfPrefixes.ts} | 0 src/middleware/packages/ontologies/actions/{list.js => list.ts} | 0 .../ontologies/actions/{prefixToUri.js => prefixToUri.ts} | 0 .../packages/ontologies/actions/{register.js => register.ts} | 0 src/middleware/packages/ontologies/{index.js => index.ts} | 0 .../packages/ontologies/ontologies/core/{index.js => index.ts} | 0 .../packages/ontologies/ontologies/custom/{index.js => index.ts} | 0 .../packages/ontologies/ontologies/solid/{index.js => index.ts} | 0 src/middleware/packages/ontologies/{service.js => service.ts} | 0 .../packages/ontologies/sub-services/{registry.js => registry.ts} | 0 src/middleware/packages/ontologies/{utils.js => utils.ts} | 0 src/middleware/packages/solid/{index.js => index.ts} | 0 .../packages/solid/services/{authorizer.js => authorizer.ts} | 0 .../packages/solid/services/{endpoint.js => endpoint.ts} | 0 ...otification-channel.mixin.js => notification-channel.mixin.ts} | 0 .../channels/{webhook-channel.js => webhook-channel.ts} | 0 .../channels/{websocket-channel.js => websocket-channel.ts} | 0 .../solid/services/notifications/{listener.js => listener.ts} | 0 .../solid/services/notifications/{provider.js => provider.ts} | 0 .../solid/services/{preferences-file.js => preferences-file.ts} | 0 src/middleware/packages/solid/services/{storage.js => storage.ts} | 0 .../services/type-index/{type-indexes.js => type-indexes.ts} | 0 .../type-index/{type-registrations.js => type-registrations.ts} | 0 .../packages/sparql-endpoint/{getRoute.js => getRoute.ts} | 0 src/middleware/packages/sparql-endpoint/{index.js => index.ts} | 0 .../packages/sparql-endpoint/{service.js => service.ts} | 0 src/middleware/packages/sync/{index.js => index.ts} | 0 .../sync/middlewares/{objects-watcher.js => objects-watcher.ts} | 0 .../packages/sync/services/{aggregator.js => aggregator.ts} | 0 src/middleware/packages/sync/services/{mirror.js => mirror.ts} | 0 .../packages/sync/services/{synchronizer.js => synchronizer.ts} | 0 .../{countTriplesOfSubject.js => countTriplesOfSubject.ts} | 0 .../{deleteOrphanBlankNodes.js => deleteOrphanBlankNodes.ts} | 0 .../packages/triplestore/actions/{dropAll.js => dropAll.ts} | 0 .../packages/triplestore/actions/{insert.js => insert.ts} | 0 .../packages/triplestore/actions/{query.js => query.ts} | 0 .../triplestore/actions/{tripleExist.js => tripleExist.ts} | 0 .../packages/triplestore/actions/{update.js => update.ts} | 0 src/middleware/packages/triplestore/{adapter.js => adapter.ts} | 0 src/middleware/packages/triplestore/{index.js => index.ts} | 0 src/middleware/packages/triplestore/{service.js => service.ts} | 0 .../packages/triplestore/subservices/{dataset.js => dataset.ts} | 0 .../packages/triplestore/subservices/{document.js => document.ts} | 0 src/middleware/packages/triplestore/{utils.js => utils.ts} | 0 src/middleware/packages/void/{index.js => index.ts} | 0 src/middleware/packages/void/{service.js => service.ts} | 0 .../packages/webacl/bots/{authorizer-bot.js => authorizer-bot.ts} | 0 .../packages/webacl/bots/{groups-manager.js => groups-manager.ts} | 0 src/middleware/packages/webacl/{index.js => index.ts} | 0 .../packages/webacl/middlewares/{cacher.js => cacher.ts} | 0 .../packages/webacl/middlewares/{webacl.js => webacl.ts} | 0 .../packages/webacl/routes/{getRoutes.js => getRoutes.ts} | 0 src/middleware/packages/webacl/{service.js => service.ts} | 0 .../packages/webacl/services/authorizer/{index.js => index.ts} | 0 .../packages/webacl/services/cache/{index.js => index.ts} | 0 .../webacl/services/group/actions/{addMember.js => addMember.ts} | 0 .../webacl/services/group/actions/{create.js => create.ts} | 0 .../webacl/services/group/actions/{delete.js => delete.ts} | 0 .../packages/webacl/services/group/actions/{exist.js => exist.ts} | 0 .../webacl/services/group/actions/{getGroups.js => getGroups.ts} | 0 .../services/group/actions/{getMembers.js => getMembers.ts} | 0 .../webacl/services/group/actions/{getUri.js => getUri.ts} | 0 .../webacl/services/group/actions/{isMember.js => isMember.ts} | 0 .../services/group/actions/{removeMember.js => removeMember.ts} | 0 .../packages/webacl/services/group/{index.js => index.ts} | 0 .../services/resource/actions/{addRights.js => addRights.ts} | 0 .../resource/actions/{awaitReadRight.js => awaitReadRight.ts} | 0 .../resource/actions/{deleteAllRights.js => deleteAllRights.ts} | 0 .../actions/{deleteAllUserRights.js => deleteAllUserRights.ts} | 0 .../webacl/services/resource/actions/{getLink.js => getLink.ts} | 0 .../services/resource/actions/{getRights.js => getRights.ts} | 0 .../{getUsersWithReadRights.js => getUsersWithReadRights.ts} | 0 .../services/resource/actions/{hasRights.js => hasRights.ts} | 0 .../webacl/services/resource/actions/{isPublic.js => isPublic.ts} | 0 .../{refreshContainersRights.js => refreshContainersRights.ts} | 0 .../resource/actions/{removeRights.js => removeRights.ts} | 0 .../services/resource/actions/{setRights.js => setRights.ts} | 0 .../packages/webacl/services/resource/{index.js => index.ts} | 0 src/middleware/packages/webacl/{utils.js => utils.ts} | 0 src/middleware/packages/webfinger/{index.js => index.ts} | 0 src/middleware/packages/webfinger/{service.js => service.ts} | 0 src/middleware/packages/webhooks/{index.js => index.ts} | 0 src/middleware/packages/webhooks/{service.js => service.ts} | 0 src/middleware/packages/webid/{index.js => index.ts} | 0 src/middleware/packages/webid/{service.js => service.ts} | 0 .../tests/activitypub/{actors.test.js => actors.test.ts} | 0 .../{collection-api.test.js => collection-api.test.ts} | 0 .../tests/activitypub/{collection.test.js => collection.test.ts} | 0 .../tests/activitypub/{follow.test.js => follow.test.ts} | 0 src/middleware/tests/activitypub/{inbox.test.js => inbox.test.ts} | 0 src/middleware/tests/activitypub/{initialize.js => initialize.ts} | 0 src/middleware/tests/activitypub/{like.test.js => like.test.ts} | 0 .../tests/activitypub/{message.test.js => message.test.ts} | 0 .../tests/activitypub/{object.test.js => object.test.ts} | 0 .../tests/activitypub/{outbox.test.js => outbox.test.ts} | 0 .../tests/activitypub/{shares.test.js => shares.test.ts} | 0 src/middleware/tests/{config.js => config.ts} | 0 src/middleware/tests/crypto/{initialize.js => initialize.ts} | 0 src/middleware/tests/crypto/{keys.test.js => keys.test.ts} | 0 ...ifiable-credentials.test.js => verifiable-credentials.test.ts} | 0 src/middleware/tests/interop/{initialize.js => initialize.ts} | 0 .../{mirror-protected.test.js => mirror-protected.test.ts} | 0 src/middleware/tests/interop/{mirror.test.js => mirror.test.ts} | 0 .../tests/interop/{patch-remote.test.js => patch-remote.test.ts} | 0 .../{remote-inference.test.js => remote-inference.test.ts} | 0 src/middleware/tests/{jest.config.js => jest.config.ts} | 0 src/middleware/tests/{jest.setup.js => jest.setup.ts} | 0 src/middleware/tests/jsonld/{initialize.js => initialize.ts} | 0 src/middleware/tests/jsonld/{merge.test.js => merge.test.ts} | 0 src/middleware/tests/ldp/{api.test.js => api.test.ts} | 0 src/middleware/tests/ldp/{binary.test.js => binary.test.ts} | 0 .../tests/ldp/{container-path.test.js => container-path.test.ts} | 0 src/middleware/tests/ldp/{container.test.js => container.test.ts} | 0 .../{content-negotiation.test.js => content-negotiation.test.ts} | 0 src/middleware/tests/ldp/{headers.test.js => headers.test.ts} | 0 src/middleware/tests/ldp/{initialize.js => initialize.ts} | 0 src/middleware/tests/ldp/{resource.test.js => resource.test.ts} | 0 src/middleware/tests/ontologies/{initialize.js => initialize.ts} | 0 .../tests/ontologies/{ontologies.test.js => ontologies.test.ts} | 0 src/middleware/tests/{utils.js => utils.ts} | 0 src/middleware/tests/webId/{webId.test.js => webId.test.ts} | 0 .../tests/webacl/{groupCRUD.test.js => groupCRUD.test.ts} | 0 src/middleware/tests/webacl/{initialize.js => initialize.ts} | 0 .../tests/webacl/{resource.test.js => resource.test.ts} | 0 .../tests/webacl/{resourceCRUD.test.js => resourceCRUD.test.ts} | 0 .../webacl/{sparql-injection.test.js => sparql-injection.test.ts} | 0 src/middleware/tests/webacl/{utils.test.js => utils.test.ts} | 0 323 files changed, 0 insertions(+), 0 deletions(-) rename src/middleware/packages/activitypub/{constants.js => constants.ts} (100%) rename src/middleware/packages/activitypub/{containers.js => containers.ts} (100%) rename src/middleware/packages/activitypub/{index.js => index.ts} (100%) rename src/middleware/packages/activitypub/mixins/{activities-handler.js => activities-handler.ts} (100%) rename src/middleware/packages/activitypub/mixins/{await-activity.js => await-activity.ts} (100%) rename src/middleware/packages/activitypub/mixins/{bot.js => bot.ts} (100%) rename src/middleware/packages/activitypub/mixins/{fake-queue.js => fake-queue.ts} (100%) rename src/middleware/packages/activitypub/services/{activity-mapping.js => activity-mapping.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/{index.js => index.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/{setRightsHandler.js => setRightsHandler.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{activity.js => activity.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{actor.js => actor.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{api.js => api.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/{get.js => get.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/collection/{index.js => index.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{collections-registry.js => collections-registry.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{follow.js => follow.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{inbox.js => inbox.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{like.js => like.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{object.js => object.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{outbox.js => outbox.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{reply.js => reply.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{share.js => share.ts} (100%) rename src/middleware/packages/activitypub/services/activitypub/subservices/{side-effects.js => side-effects.ts} (100%) rename src/middleware/packages/activitypub/services/{migration.js => migration.ts} (100%) rename src/middleware/packages/activitypub/services/{relay.js => relay.ts} (100%) rename src/middleware/packages/activitypub/{utils.js => utils.ts} (100%) rename src/middleware/packages/activitypub/utils/{matchActivity.js => matchActivity.ts} (100%) rename src/middleware/packages/auth/{index.js => index.ts} (100%) rename src/middleware/packages/auth/middlewares/{localLogout.js => localLogout.ts} (100%) rename src/middleware/packages/auth/middlewares/{redirectToFront.js => redirectToFront.ts} (100%) rename src/middleware/packages/auth/middlewares/{saveRedirectUrl.js => saveRedirectUrl.ts} (100%) rename src/middleware/packages/auth/middlewares/{sendToken.js => sendToken.ts} (100%) rename src/middleware/packages/auth/mixins/{auth.sso.js => auth.sso.ts} (100%) rename src/middleware/packages/auth/mixins/{auth.js => auth.ts} (100%) rename src/middleware/packages/auth/services/{account.js => account.ts} (100%) rename src/middleware/packages/auth/services/{auth.cas.js => auth.cas.ts} (100%) rename src/middleware/packages/auth/services/{auth.local.js => auth.local.ts} (100%) rename src/middleware/packages/auth/services/{auth.oidc.js => auth.oidc.ts} (100%) rename src/middleware/packages/auth/services/{jwt.js => jwt.ts} (100%) rename src/middleware/packages/auth/services/{mail.js => mail.ts} (100%) rename src/middleware/packages/auth/services/{migration.js => migration.ts} (100%) rename src/middleware/packages/backup/{index.js => index.ts} (100%) rename src/middleware/packages/backup/utils/{fsCopy.js => fsCopy.ts} (100%) rename src/middleware/packages/backup/utils/{fsRemove.js => fsRemove.ts} (100%) rename src/middleware/packages/backup/utils/{ftpCopy.js => ftpCopy.ts} (100%) rename src/middleware/packages/backup/utils/{ftpRemove.js => ftpRemove.ts} (100%) rename src/middleware/packages/backup/utils/{rsyncCopy.js => rsyncCopy.ts} (100%) rename src/middleware/packages/core/{index.js => index.ts} (100%) rename src/middleware/packages/core/{service.js => service.ts} (100%) rename src/middleware/packages/crypto/{constants.js => constants.ts} (100%) rename src/middleware/packages/crypto/{index.js => index.ts} (100%) rename src/middleware/packages/crypto/keys/{index.js => index.ts} (100%) rename src/middleware/packages/crypto/keys/{key-container.js => key-container.ts} (100%) rename src/middleware/packages/crypto/keys/{keys.js => keys.ts} (100%) rename src/middleware/packages/crypto/keys/{migration.js => migration.ts} (100%) rename src/middleware/packages/crypto/keys/{public-key-container.js => public-key-container.ts} (100%) rename src/middleware/packages/crypto/signature/{http-signatures.js => http-signatures.ts} (100%) rename src/middleware/packages/crypto/signature/{index.js => index.ts} (100%) rename src/middleware/packages/crypto/signature/{keypair.js => keypair.ts} (100%) rename src/middleware/packages/crypto/signature/{proxy.js => proxy.ts} (100%) rename src/middleware/packages/crypto/utils/{noGraphCredentialContext.js => noGraphCredentialContext.ts} (100%) rename src/middleware/packages/crypto/utils/{utils.js => utils.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{VcCapabilityPresentationProofPurpose.js => VcCapabilityPresentationProofPurpose.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{VcPurpose.js => VcPurpose.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{challenge-service.js => challenge-service.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{data-integrity-service.js => data-integrity-service.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{index.js => index.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-api-service.js => vc-api-service.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-authorizer-service.js => vc-authorizer-service.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-credential-container.js => vc-credential-container.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-holder-service.js => vc-holder-service.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-issuer-service.js => vc-issuer-service.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-presentation-container.js => vc-presentation-container.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-service.js => vc-service.ts} (100%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-verifier-service.js => vc-verifier-service.ts} (100%) rename src/middleware/packages/importer/{index.js => index.ts} (100%) rename src/middleware/packages/importer/mixins/{discourse.js => discourse.ts} (100%) rename src/middleware/packages/importer/mixins/{drupal.js => drupal.ts} (100%) rename src/middleware/packages/importer/mixins/{gogocarto.js => gogocarto.ts} (100%) rename src/middleware/packages/importer/mixins/{humhub.js => humhub.ts} (100%) rename src/middleware/packages/importer/mixins/{importer.js => importer.ts} (100%) rename src/middleware/packages/importer/mixins/{jotform.js => jotform.ts} (100%) rename src/middleware/packages/importer/mixins/{mobilizon.js => mobilizon.ts} (100%) rename src/middleware/packages/importer/mixins/{prestashop.js => prestashop.ts} (100%) rename src/middleware/packages/importer/mixins/{wordpress.js => wordpress.ts} (100%) rename src/middleware/packages/importer/mixins/{yeswiki.js => yeswiki.ts} (100%) rename src/middleware/packages/importer/{utils.js => utils.ts} (100%) rename src/middleware/packages/inference/{index.js => index.ts} (100%) rename src/middleware/packages/inference/{service.js => service.ts} (100%) rename src/middleware/packages/inference/subservices/{remote.js => remote.ts} (100%) rename src/middleware/packages/jsonld/{index.js => index.ts} (100%) rename src/middleware/packages/jsonld/{service.js => service.ts} (100%) rename src/middleware/packages/jsonld/services/api/{index.js => index.ts} (100%) rename src/middleware/packages/jsonld/services/context/actions/{get.js => get.ts} (100%) rename src/middleware/packages/jsonld/services/context/actions/{getLocal.js => getLocal.ts} (100%) rename src/middleware/packages/jsonld/services/context/actions/{merge.js => merge.ts} (100%) rename src/middleware/packages/jsonld/services/context/actions/{parse.js => parse.ts} (100%) rename src/middleware/packages/jsonld/services/context/actions/{validate.js => validate.ts} (100%) rename src/middleware/packages/jsonld/services/context/{index.js => index.ts} (100%) rename src/middleware/packages/jsonld/services/document-loader/{index.js => index.ts} (100%) rename src/middleware/packages/jsonld/services/parser/{index.js => index.ts} (100%) rename src/middleware/packages/jsonld/utils/{uriSchemes.js => uriSchemes.ts} (100%) rename src/middleware/packages/jsonld/utils/{utils.js => utils.ts} (100%) rename src/middleware/packages/ldp/{adapter.js => adapter.ts} (100%) rename src/middleware/packages/ldp/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/mixins/{controlled-container.js => controlled-container.ts} (100%) rename src/middleware/packages/ldp/mixins/{dereference.js => dereference.ts} (100%) rename src/middleware/packages/ldp/mixins/{disassembly.js => disassembly.ts} (100%) rename src/middleware/packages/ldp/mixins/{document-tagger.js => document-tagger.ts} (100%) rename src/middleware/packages/ldp/mixins/{image-processor.js => image-processor.ts} (100%) rename src/middleware/packages/ldp/mixins/{mime-types.js => mime-types.ts} (100%) rename src/middleware/packages/ldp/mixins/{orphan-files-deletion.js => orphan-files-deletion.ts} (100%) rename src/middleware/packages/ldp/mixins/{pseudo-id.js => pseudo-id.ts} (100%) rename src/middleware/packages/ldp/mixins/{single-resource-container.js => single-resource-container.ts} (100%) rename src/middleware/packages/ldp/mixins/{special-endpoint.js => special-endpoint.ts} (100%) rename src/middleware/packages/ldp/routes/{getCatchAllRoute.js => getCatchAllRoute.ts} (100%) rename src/middleware/packages/ldp/routes/{getPodsRoute.js => getPodsRoute.ts} (100%) rename src/middleware/packages/ldp/{service.js => service.ts} (100%) rename src/middleware/packages/ldp/services/api/actions/{delete.js => delete.ts} (100%) rename src/middleware/packages/ldp/services/api/actions/{get.js => get.ts} (100%) rename src/middleware/packages/ldp/services/api/actions/{head.js => head.ts} (100%) rename src/middleware/packages/ldp/services/api/actions/{patch.js => patch.ts} (100%) rename src/middleware/packages/ldp/services/api/actions/{post.js => post.ts} (100%) rename src/middleware/packages/ldp/services/api/actions/{put.js => put.ts} (100%) rename src/middleware/packages/ldp/services/api/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/cache/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{attach.js => attach.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{clear.js => clear.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{create.js => create.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{createAndAttach.js => createAndAttach.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{delete.js => delete.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{detach.js => detach.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{exist.js => exist.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{get.js => get.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{getAll.js => getAll.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{getPath.js => getPath.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{getUris.js => getUris.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{includes.js => includes.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{isEmpty.js => isEmpty.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{patch.js => patch.ts} (100%) rename src/middleware/packages/ldp/services/container/actions/{post.js => post.ts} (100%) rename src/middleware/packages/ldp/services/container/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/link-header/actions/{get.js => get.ts} (100%) rename src/middleware/packages/ldp/services/link-header/actions/{register.js => register.ts} (100%) rename src/middleware/packages/ldp/services/link-header/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/permissions/actions/{addAuthorizer.js => addAuthorizer.ts} (100%) rename src/middleware/packages/ldp/services/permissions/actions/{check.js => check.ts} (100%) rename src/middleware/packages/ldp/services/permissions/actions/{has.js => has.ts} (100%) rename src/middleware/packages/ldp/services/permissions/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/registry/actions/{getByType.js => getByType.ts} (100%) rename src/middleware/packages/ldp/services/registry/actions/{getByUri.js => getByUri.ts} (100%) rename src/middleware/packages/ldp/services/registry/actions/{getUri.js => getUri.ts} (100%) rename src/middleware/packages/ldp/services/registry/actions/{list.js => list.ts} (100%) rename src/middleware/packages/ldp/services/registry/actions/{register.js => register.ts} (100%) rename src/middleware/packages/ldp/services/registry/{defaultOptions.js => defaultOptions.ts} (100%) rename src/middleware/packages/ldp/services/registry/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/remote/actions/{delete.js => delete.ts} (100%) rename src/middleware/packages/ldp/services/remote/actions/{get.js => get.ts} (100%) rename src/middleware/packages/ldp/services/remote/actions/{getNetwork.js => getNetwork.ts} (100%) rename src/middleware/packages/ldp/services/remote/actions/{getStored.js => getStored.ts} (100%) rename src/middleware/packages/ldp/services/remote/actions/{isRemote.js => isRemote.ts} (100%) rename src/middleware/packages/ldp/services/remote/actions/{store.js => store.ts} (100%) rename src/middleware/packages/ldp/services/remote/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{awaitCreateComplete.js => awaitCreateComplete.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{create.js => create.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{delete.js => delete.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{exist.js => exist.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{generateId.js => generateId.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{get.js => get.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{getContainers.js => getContainers.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{getTypes.js => getTypes.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{patch.js => patch.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{put.js => put.ts} (100%) rename src/middleware/packages/ldp/services/resource/actions/{upload.js => upload.ts} (100%) rename src/middleware/packages/ldp/services/resource/{index.js => index.ts} (100%) rename src/middleware/packages/ldp/services/resource/{methods.js => methods.ts} (100%) rename src/middleware/packages/ldp/{utils.js => utils.ts} (100%) rename src/middleware/packages/middlewares/{index.js => index.ts} (100%) rename src/middleware/packages/migration/{index.js => index.ts} (100%) rename src/middleware/packages/migration/{service.js => service.ts} (100%) rename src/middleware/packages/mime-types/{constants.js => constants.ts} (100%) rename src/middleware/packages/mime-types/{index.js => index.ts} (100%) rename src/middleware/packages/nodeinfo/{index.js => index.ts} (100%) rename src/middleware/packages/nodeinfo/{service.js => service.ts} (100%) rename src/middleware/packages/notifications/{index.js => index.ts} (100%) rename src/middleware/packages/notifications/services/digest/{service.js => service.ts} (100%) rename src/middleware/packages/notifications/services/digest/{subscription.js => subscription.ts} (100%) rename src/middleware/packages/notifications/services/expo-push/{device.js => device.ts} (100%) rename src/middleware/packages/notifications/services/expo-push/{notification.js => notification.ts} (100%) rename src/middleware/packages/notifications/services/expo-push/{service.js => service.ts} (100%) rename src/middleware/packages/notifications/services/single-mail/{service.js => service.ts} (100%) rename src/middleware/packages/ontologies/actions/{findNamespace.js => findNamespace.ts} (100%) rename src/middleware/packages/ontologies/actions/{findPrefix.js => findPrefix.ts} (100%) rename src/middleware/packages/ontologies/actions/{get.js => get.ts} (100%) rename src/middleware/packages/ontologies/actions/{getPrefixes.js => getPrefixes.ts} (100%) rename src/middleware/packages/ontologies/actions/{getRdfPrefixes.js => getRdfPrefixes.ts} (100%) rename src/middleware/packages/ontologies/actions/{list.js => list.ts} (100%) rename src/middleware/packages/ontologies/actions/{prefixToUri.js => prefixToUri.ts} (100%) rename src/middleware/packages/ontologies/actions/{register.js => register.ts} (100%) rename src/middleware/packages/ontologies/{index.js => index.ts} (100%) rename src/middleware/packages/ontologies/ontologies/core/{index.js => index.ts} (100%) rename src/middleware/packages/ontologies/ontologies/custom/{index.js => index.ts} (100%) rename src/middleware/packages/ontologies/ontologies/solid/{index.js => index.ts} (100%) rename src/middleware/packages/ontologies/{service.js => service.ts} (100%) rename src/middleware/packages/ontologies/sub-services/{registry.js => registry.ts} (100%) rename src/middleware/packages/ontologies/{utils.js => utils.ts} (100%) rename src/middleware/packages/solid/{index.js => index.ts} (100%) rename src/middleware/packages/solid/services/{authorizer.js => authorizer.ts} (100%) rename src/middleware/packages/solid/services/{endpoint.js => endpoint.ts} (100%) rename src/middleware/packages/solid/services/notifications/channels/{notification-channel.mixin.js => notification-channel.mixin.ts} (100%) rename src/middleware/packages/solid/services/notifications/channels/{webhook-channel.js => webhook-channel.ts} (100%) rename src/middleware/packages/solid/services/notifications/channels/{websocket-channel.js => websocket-channel.ts} (100%) rename src/middleware/packages/solid/services/notifications/{listener.js => listener.ts} (100%) rename src/middleware/packages/solid/services/notifications/{provider.js => provider.ts} (100%) rename src/middleware/packages/solid/services/{preferences-file.js => preferences-file.ts} (100%) rename src/middleware/packages/solid/services/{storage.js => storage.ts} (100%) rename src/middleware/packages/solid/services/type-index/{type-indexes.js => type-indexes.ts} (100%) rename src/middleware/packages/solid/services/type-index/{type-registrations.js => type-registrations.ts} (100%) rename src/middleware/packages/sparql-endpoint/{getRoute.js => getRoute.ts} (100%) rename src/middleware/packages/sparql-endpoint/{index.js => index.ts} (100%) rename src/middleware/packages/sparql-endpoint/{service.js => service.ts} (100%) rename src/middleware/packages/sync/{index.js => index.ts} (100%) rename src/middleware/packages/sync/middlewares/{objects-watcher.js => objects-watcher.ts} (100%) rename src/middleware/packages/sync/services/{aggregator.js => aggregator.ts} (100%) rename src/middleware/packages/sync/services/{mirror.js => mirror.ts} (100%) rename src/middleware/packages/sync/services/{synchronizer.js => synchronizer.ts} (100%) rename src/middleware/packages/triplestore/actions/{countTriplesOfSubject.js => countTriplesOfSubject.ts} (100%) rename src/middleware/packages/triplestore/actions/{deleteOrphanBlankNodes.js => deleteOrphanBlankNodes.ts} (100%) rename src/middleware/packages/triplestore/actions/{dropAll.js => dropAll.ts} (100%) rename src/middleware/packages/triplestore/actions/{insert.js => insert.ts} (100%) rename src/middleware/packages/triplestore/actions/{query.js => query.ts} (100%) rename src/middleware/packages/triplestore/actions/{tripleExist.js => tripleExist.ts} (100%) rename src/middleware/packages/triplestore/actions/{update.js => update.ts} (100%) rename src/middleware/packages/triplestore/{adapter.js => adapter.ts} (100%) rename src/middleware/packages/triplestore/{index.js => index.ts} (100%) rename src/middleware/packages/triplestore/{service.js => service.ts} (100%) rename src/middleware/packages/triplestore/subservices/{dataset.js => dataset.ts} (100%) rename src/middleware/packages/triplestore/subservices/{document.js => document.ts} (100%) rename src/middleware/packages/triplestore/{utils.js => utils.ts} (100%) rename src/middleware/packages/void/{index.js => index.ts} (100%) rename src/middleware/packages/void/{service.js => service.ts} (100%) rename src/middleware/packages/webacl/bots/{authorizer-bot.js => authorizer-bot.ts} (100%) rename src/middleware/packages/webacl/bots/{groups-manager.js => groups-manager.ts} (100%) rename src/middleware/packages/webacl/{index.js => index.ts} (100%) rename src/middleware/packages/webacl/middlewares/{cacher.js => cacher.ts} (100%) rename src/middleware/packages/webacl/middlewares/{webacl.js => webacl.ts} (100%) rename src/middleware/packages/webacl/routes/{getRoutes.js => getRoutes.ts} (100%) rename src/middleware/packages/webacl/{service.js => service.ts} (100%) rename src/middleware/packages/webacl/services/authorizer/{index.js => index.ts} (100%) rename src/middleware/packages/webacl/services/cache/{index.js => index.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{addMember.js => addMember.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{create.js => create.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{delete.js => delete.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{exist.js => exist.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{getGroups.js => getGroups.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{getMembers.js => getMembers.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{getUri.js => getUri.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{isMember.js => isMember.ts} (100%) rename src/middleware/packages/webacl/services/group/actions/{removeMember.js => removeMember.ts} (100%) rename src/middleware/packages/webacl/services/group/{index.js => index.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{addRights.js => addRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{awaitReadRight.js => awaitReadRight.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{deleteAllRights.js => deleteAllRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{deleteAllUserRights.js => deleteAllUserRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{getLink.js => getLink.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{getRights.js => getRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{getUsersWithReadRights.js => getUsersWithReadRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{hasRights.js => hasRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{isPublic.js => isPublic.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{refreshContainersRights.js => refreshContainersRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{removeRights.js => removeRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/actions/{setRights.js => setRights.ts} (100%) rename src/middleware/packages/webacl/services/resource/{index.js => index.ts} (100%) rename src/middleware/packages/webacl/{utils.js => utils.ts} (100%) rename src/middleware/packages/webfinger/{index.js => index.ts} (100%) rename src/middleware/packages/webfinger/{service.js => service.ts} (100%) rename src/middleware/packages/webhooks/{index.js => index.ts} (100%) rename src/middleware/packages/webhooks/{service.js => service.ts} (100%) rename src/middleware/packages/webid/{index.js => index.ts} (100%) rename src/middleware/packages/webid/{service.js => service.ts} (100%) rename src/middleware/tests/activitypub/{actors.test.js => actors.test.ts} (100%) rename src/middleware/tests/activitypub/{collection-api.test.js => collection-api.test.ts} (100%) rename src/middleware/tests/activitypub/{collection.test.js => collection.test.ts} (100%) rename src/middleware/tests/activitypub/{follow.test.js => follow.test.ts} (100%) rename src/middleware/tests/activitypub/{inbox.test.js => inbox.test.ts} (100%) rename src/middleware/tests/activitypub/{initialize.js => initialize.ts} (100%) rename src/middleware/tests/activitypub/{like.test.js => like.test.ts} (100%) rename src/middleware/tests/activitypub/{message.test.js => message.test.ts} (100%) rename src/middleware/tests/activitypub/{object.test.js => object.test.ts} (100%) rename src/middleware/tests/activitypub/{outbox.test.js => outbox.test.ts} (100%) rename src/middleware/tests/activitypub/{shares.test.js => shares.test.ts} (100%) rename src/middleware/tests/{config.js => config.ts} (100%) rename src/middleware/tests/crypto/{initialize.js => initialize.ts} (100%) rename src/middleware/tests/crypto/{keys.test.js => keys.test.ts} (100%) rename src/middleware/tests/crypto/{verifiable-credentials.test.js => verifiable-credentials.test.ts} (100%) rename src/middleware/tests/interop/{initialize.js => initialize.ts} (100%) rename src/middleware/tests/interop/{mirror-protected.test.js => mirror-protected.test.ts} (100%) rename src/middleware/tests/interop/{mirror.test.js => mirror.test.ts} (100%) rename src/middleware/tests/interop/{patch-remote.test.js => patch-remote.test.ts} (100%) rename src/middleware/tests/interop/{remote-inference.test.js => remote-inference.test.ts} (100%) rename src/middleware/tests/{jest.config.js => jest.config.ts} (100%) rename src/middleware/tests/{jest.setup.js => jest.setup.ts} (100%) rename src/middleware/tests/jsonld/{initialize.js => initialize.ts} (100%) rename src/middleware/tests/jsonld/{merge.test.js => merge.test.ts} (100%) rename src/middleware/tests/ldp/{api.test.js => api.test.ts} (100%) rename src/middleware/tests/ldp/{binary.test.js => binary.test.ts} (100%) rename src/middleware/tests/ldp/{container-path.test.js => container-path.test.ts} (100%) rename src/middleware/tests/ldp/{container.test.js => container.test.ts} (100%) rename src/middleware/tests/ldp/{content-negotiation.test.js => content-negotiation.test.ts} (100%) rename src/middleware/tests/ldp/{headers.test.js => headers.test.ts} (100%) rename src/middleware/tests/ldp/{initialize.js => initialize.ts} (100%) rename src/middleware/tests/ldp/{resource.test.js => resource.test.ts} (100%) rename src/middleware/tests/ontologies/{initialize.js => initialize.ts} (100%) rename src/middleware/tests/ontologies/{ontologies.test.js => ontologies.test.ts} (100%) rename src/middleware/tests/{utils.js => utils.ts} (100%) rename src/middleware/tests/webId/{webId.test.js => webId.test.ts} (100%) rename src/middleware/tests/webacl/{groupCRUD.test.js => groupCRUD.test.ts} (100%) rename src/middleware/tests/webacl/{initialize.js => initialize.ts} (100%) rename src/middleware/tests/webacl/{resource.test.js => resource.test.ts} (100%) rename src/middleware/tests/webacl/{resourceCRUD.test.js => resourceCRUD.test.ts} (100%) rename src/middleware/tests/webacl/{sparql-injection.test.js => sparql-injection.test.ts} (100%) rename src/middleware/tests/webacl/{utils.test.js => utils.test.ts} (100%) diff --git a/src/middleware/packages/activitypub/constants.js b/src/middleware/packages/activitypub/constants.ts similarity index 100% rename from src/middleware/packages/activitypub/constants.js rename to src/middleware/packages/activitypub/constants.ts diff --git a/src/middleware/packages/activitypub/containers.js b/src/middleware/packages/activitypub/containers.ts similarity index 100% rename from src/middleware/packages/activitypub/containers.js rename to src/middleware/packages/activitypub/containers.ts diff --git a/src/middleware/packages/activitypub/index.js b/src/middleware/packages/activitypub/index.ts similarity index 100% rename from src/middleware/packages/activitypub/index.js rename to src/middleware/packages/activitypub/index.ts diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.js b/src/middleware/packages/activitypub/mixins/activities-handler.ts similarity index 100% rename from src/middleware/packages/activitypub/mixins/activities-handler.js rename to src/middleware/packages/activitypub/mixins/activities-handler.ts diff --git a/src/middleware/packages/activitypub/mixins/await-activity.js b/src/middleware/packages/activitypub/mixins/await-activity.ts similarity index 100% rename from src/middleware/packages/activitypub/mixins/await-activity.js rename to src/middleware/packages/activitypub/mixins/await-activity.ts diff --git a/src/middleware/packages/activitypub/mixins/bot.js b/src/middleware/packages/activitypub/mixins/bot.ts similarity index 100% rename from src/middleware/packages/activitypub/mixins/bot.js rename to src/middleware/packages/activitypub/mixins/bot.ts diff --git a/src/middleware/packages/activitypub/mixins/fake-queue.js b/src/middleware/packages/activitypub/mixins/fake-queue.ts similarity index 100% rename from src/middleware/packages/activitypub/mixins/fake-queue.js rename to src/middleware/packages/activitypub/mixins/fake-queue.ts diff --git a/src/middleware/packages/activitypub/services/activity-mapping.js b/src/middleware/packages/activitypub/services/activity-mapping.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activity-mapping.js rename to src/middleware/packages/activitypub/services/activity-mapping.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/index.js b/src/middleware/packages/activitypub/services/activitypub/index.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/index.js rename to src/middleware/packages/activitypub/services/activitypub/index.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.js b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.js b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/activity.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.js b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/actor.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.js b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/api.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/api.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.js b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/follow.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/inbox.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.js b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/like.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/like.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.js b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/object.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/object.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/outbox.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.js b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/reply.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.js b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/share.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/share.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts similarity index 100% rename from src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.js rename to src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts diff --git a/src/middleware/packages/activitypub/services/migration.js b/src/middleware/packages/activitypub/services/migration.ts similarity index 100% rename from src/middleware/packages/activitypub/services/migration.js rename to src/middleware/packages/activitypub/services/migration.ts diff --git a/src/middleware/packages/activitypub/services/relay.js b/src/middleware/packages/activitypub/services/relay.ts similarity index 100% rename from src/middleware/packages/activitypub/services/relay.js rename to src/middleware/packages/activitypub/services/relay.ts diff --git a/src/middleware/packages/activitypub/utils.js b/src/middleware/packages/activitypub/utils.ts similarity index 100% rename from src/middleware/packages/activitypub/utils.js rename to src/middleware/packages/activitypub/utils.ts diff --git a/src/middleware/packages/activitypub/utils/matchActivity.js b/src/middleware/packages/activitypub/utils/matchActivity.ts similarity index 100% rename from src/middleware/packages/activitypub/utils/matchActivity.js rename to src/middleware/packages/activitypub/utils/matchActivity.ts diff --git a/src/middleware/packages/auth/index.js b/src/middleware/packages/auth/index.ts similarity index 100% rename from src/middleware/packages/auth/index.js rename to src/middleware/packages/auth/index.ts diff --git a/src/middleware/packages/auth/middlewares/localLogout.js b/src/middleware/packages/auth/middlewares/localLogout.ts similarity index 100% rename from src/middleware/packages/auth/middlewares/localLogout.js rename to src/middleware/packages/auth/middlewares/localLogout.ts diff --git a/src/middleware/packages/auth/middlewares/redirectToFront.js b/src/middleware/packages/auth/middlewares/redirectToFront.ts similarity index 100% rename from src/middleware/packages/auth/middlewares/redirectToFront.js rename to src/middleware/packages/auth/middlewares/redirectToFront.ts diff --git a/src/middleware/packages/auth/middlewares/saveRedirectUrl.js b/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts similarity index 100% rename from src/middleware/packages/auth/middlewares/saveRedirectUrl.js rename to src/middleware/packages/auth/middlewares/saveRedirectUrl.ts diff --git a/src/middleware/packages/auth/middlewares/sendToken.js b/src/middleware/packages/auth/middlewares/sendToken.ts similarity index 100% rename from src/middleware/packages/auth/middlewares/sendToken.js rename to src/middleware/packages/auth/middlewares/sendToken.ts diff --git a/src/middleware/packages/auth/mixins/auth.sso.js b/src/middleware/packages/auth/mixins/auth.sso.ts similarity index 100% rename from src/middleware/packages/auth/mixins/auth.sso.js rename to src/middleware/packages/auth/mixins/auth.sso.ts diff --git a/src/middleware/packages/auth/mixins/auth.js b/src/middleware/packages/auth/mixins/auth.ts similarity index 100% rename from src/middleware/packages/auth/mixins/auth.js rename to src/middleware/packages/auth/mixins/auth.ts diff --git a/src/middleware/packages/auth/services/account.js b/src/middleware/packages/auth/services/account.ts similarity index 100% rename from src/middleware/packages/auth/services/account.js rename to src/middleware/packages/auth/services/account.ts diff --git a/src/middleware/packages/auth/services/auth.cas.js b/src/middleware/packages/auth/services/auth.cas.ts similarity index 100% rename from src/middleware/packages/auth/services/auth.cas.js rename to src/middleware/packages/auth/services/auth.cas.ts diff --git a/src/middleware/packages/auth/services/auth.local.js b/src/middleware/packages/auth/services/auth.local.ts similarity index 100% rename from src/middleware/packages/auth/services/auth.local.js rename to src/middleware/packages/auth/services/auth.local.ts diff --git a/src/middleware/packages/auth/services/auth.oidc.js b/src/middleware/packages/auth/services/auth.oidc.ts similarity index 100% rename from src/middleware/packages/auth/services/auth.oidc.js rename to src/middleware/packages/auth/services/auth.oidc.ts diff --git a/src/middleware/packages/auth/services/jwt.js b/src/middleware/packages/auth/services/jwt.ts similarity index 100% rename from src/middleware/packages/auth/services/jwt.js rename to src/middleware/packages/auth/services/jwt.ts diff --git a/src/middleware/packages/auth/services/mail.js b/src/middleware/packages/auth/services/mail.ts similarity index 100% rename from src/middleware/packages/auth/services/mail.js rename to src/middleware/packages/auth/services/mail.ts diff --git a/src/middleware/packages/auth/services/migration.js b/src/middleware/packages/auth/services/migration.ts similarity index 100% rename from src/middleware/packages/auth/services/migration.js rename to src/middleware/packages/auth/services/migration.ts diff --git a/src/middleware/packages/backup/index.js b/src/middleware/packages/backup/index.ts similarity index 100% rename from src/middleware/packages/backup/index.js rename to src/middleware/packages/backup/index.ts diff --git a/src/middleware/packages/backup/utils/fsCopy.js b/src/middleware/packages/backup/utils/fsCopy.ts similarity index 100% rename from src/middleware/packages/backup/utils/fsCopy.js rename to src/middleware/packages/backup/utils/fsCopy.ts diff --git a/src/middleware/packages/backup/utils/fsRemove.js b/src/middleware/packages/backup/utils/fsRemove.ts similarity index 100% rename from src/middleware/packages/backup/utils/fsRemove.js rename to src/middleware/packages/backup/utils/fsRemove.ts diff --git a/src/middleware/packages/backup/utils/ftpCopy.js b/src/middleware/packages/backup/utils/ftpCopy.ts similarity index 100% rename from src/middleware/packages/backup/utils/ftpCopy.js rename to src/middleware/packages/backup/utils/ftpCopy.ts diff --git a/src/middleware/packages/backup/utils/ftpRemove.js b/src/middleware/packages/backup/utils/ftpRemove.ts similarity index 100% rename from src/middleware/packages/backup/utils/ftpRemove.js rename to src/middleware/packages/backup/utils/ftpRemove.ts diff --git a/src/middleware/packages/backup/utils/rsyncCopy.js b/src/middleware/packages/backup/utils/rsyncCopy.ts similarity index 100% rename from src/middleware/packages/backup/utils/rsyncCopy.js rename to src/middleware/packages/backup/utils/rsyncCopy.ts diff --git a/src/middleware/packages/core/index.js b/src/middleware/packages/core/index.ts similarity index 100% rename from src/middleware/packages/core/index.js rename to src/middleware/packages/core/index.ts diff --git a/src/middleware/packages/core/service.js b/src/middleware/packages/core/service.ts similarity index 100% rename from src/middleware/packages/core/service.js rename to src/middleware/packages/core/service.ts diff --git a/src/middleware/packages/crypto/constants.js b/src/middleware/packages/crypto/constants.ts similarity index 100% rename from src/middleware/packages/crypto/constants.js rename to src/middleware/packages/crypto/constants.ts diff --git a/src/middleware/packages/crypto/index.js b/src/middleware/packages/crypto/index.ts similarity index 100% rename from src/middleware/packages/crypto/index.js rename to src/middleware/packages/crypto/index.ts diff --git a/src/middleware/packages/crypto/keys/index.js b/src/middleware/packages/crypto/keys/index.ts similarity index 100% rename from src/middleware/packages/crypto/keys/index.js rename to src/middleware/packages/crypto/keys/index.ts diff --git a/src/middleware/packages/crypto/keys/key-container.js b/src/middleware/packages/crypto/keys/key-container.ts similarity index 100% rename from src/middleware/packages/crypto/keys/key-container.js rename to src/middleware/packages/crypto/keys/key-container.ts diff --git a/src/middleware/packages/crypto/keys/keys.js b/src/middleware/packages/crypto/keys/keys.ts similarity index 100% rename from src/middleware/packages/crypto/keys/keys.js rename to src/middleware/packages/crypto/keys/keys.ts diff --git a/src/middleware/packages/crypto/keys/migration.js b/src/middleware/packages/crypto/keys/migration.ts similarity index 100% rename from src/middleware/packages/crypto/keys/migration.js rename to src/middleware/packages/crypto/keys/migration.ts diff --git a/src/middleware/packages/crypto/keys/public-key-container.js b/src/middleware/packages/crypto/keys/public-key-container.ts similarity index 100% rename from src/middleware/packages/crypto/keys/public-key-container.js rename to src/middleware/packages/crypto/keys/public-key-container.ts diff --git a/src/middleware/packages/crypto/signature/http-signatures.js b/src/middleware/packages/crypto/signature/http-signatures.ts similarity index 100% rename from src/middleware/packages/crypto/signature/http-signatures.js rename to src/middleware/packages/crypto/signature/http-signatures.ts diff --git a/src/middleware/packages/crypto/signature/index.js b/src/middleware/packages/crypto/signature/index.ts similarity index 100% rename from src/middleware/packages/crypto/signature/index.js rename to src/middleware/packages/crypto/signature/index.ts diff --git a/src/middleware/packages/crypto/signature/keypair.js b/src/middleware/packages/crypto/signature/keypair.ts similarity index 100% rename from src/middleware/packages/crypto/signature/keypair.js rename to src/middleware/packages/crypto/signature/keypair.ts diff --git a/src/middleware/packages/crypto/signature/proxy.js b/src/middleware/packages/crypto/signature/proxy.ts similarity index 100% rename from src/middleware/packages/crypto/signature/proxy.js rename to src/middleware/packages/crypto/signature/proxy.ts diff --git a/src/middleware/packages/crypto/utils/noGraphCredentialContext.js b/src/middleware/packages/crypto/utils/noGraphCredentialContext.ts similarity index 100% rename from src/middleware/packages/crypto/utils/noGraphCredentialContext.js rename to src/middleware/packages/crypto/utils/noGraphCredentialContext.ts diff --git a/src/middleware/packages/crypto/utils/utils.js b/src/middleware/packages/crypto/utils/utils.ts similarity index 100% rename from src/middleware/packages/crypto/utils/utils.js rename to src/middleware/packages/crypto/utils/utils.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.js b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.js rename to src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.js b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/VcPurpose.js rename to src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.js b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/challenge-service.js rename to src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.js b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.js rename to src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/index.js b/src/middleware/packages/crypto/verifiable-credentials/index.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/index.js rename to src/middleware/packages/crypto/verifiable-credentials/index.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-api-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.js b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.js b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-service.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.js b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.js rename to src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts diff --git a/src/middleware/packages/importer/index.js b/src/middleware/packages/importer/index.ts similarity index 100% rename from src/middleware/packages/importer/index.js rename to src/middleware/packages/importer/index.ts diff --git a/src/middleware/packages/importer/mixins/discourse.js b/src/middleware/packages/importer/mixins/discourse.ts similarity index 100% rename from src/middleware/packages/importer/mixins/discourse.js rename to src/middleware/packages/importer/mixins/discourse.ts diff --git a/src/middleware/packages/importer/mixins/drupal.js b/src/middleware/packages/importer/mixins/drupal.ts similarity index 100% rename from src/middleware/packages/importer/mixins/drupal.js rename to src/middleware/packages/importer/mixins/drupal.ts diff --git a/src/middleware/packages/importer/mixins/gogocarto.js b/src/middleware/packages/importer/mixins/gogocarto.ts similarity index 100% rename from src/middleware/packages/importer/mixins/gogocarto.js rename to src/middleware/packages/importer/mixins/gogocarto.ts diff --git a/src/middleware/packages/importer/mixins/humhub.js b/src/middleware/packages/importer/mixins/humhub.ts similarity index 100% rename from src/middleware/packages/importer/mixins/humhub.js rename to src/middleware/packages/importer/mixins/humhub.ts diff --git a/src/middleware/packages/importer/mixins/importer.js b/src/middleware/packages/importer/mixins/importer.ts similarity index 100% rename from src/middleware/packages/importer/mixins/importer.js rename to src/middleware/packages/importer/mixins/importer.ts diff --git a/src/middleware/packages/importer/mixins/jotform.js b/src/middleware/packages/importer/mixins/jotform.ts similarity index 100% rename from src/middleware/packages/importer/mixins/jotform.js rename to src/middleware/packages/importer/mixins/jotform.ts diff --git a/src/middleware/packages/importer/mixins/mobilizon.js b/src/middleware/packages/importer/mixins/mobilizon.ts similarity index 100% rename from src/middleware/packages/importer/mixins/mobilizon.js rename to src/middleware/packages/importer/mixins/mobilizon.ts diff --git a/src/middleware/packages/importer/mixins/prestashop.js b/src/middleware/packages/importer/mixins/prestashop.ts similarity index 100% rename from src/middleware/packages/importer/mixins/prestashop.js rename to src/middleware/packages/importer/mixins/prestashop.ts diff --git a/src/middleware/packages/importer/mixins/wordpress.js b/src/middleware/packages/importer/mixins/wordpress.ts similarity index 100% rename from src/middleware/packages/importer/mixins/wordpress.js rename to src/middleware/packages/importer/mixins/wordpress.ts diff --git a/src/middleware/packages/importer/mixins/yeswiki.js b/src/middleware/packages/importer/mixins/yeswiki.ts similarity index 100% rename from src/middleware/packages/importer/mixins/yeswiki.js rename to src/middleware/packages/importer/mixins/yeswiki.ts diff --git a/src/middleware/packages/importer/utils.js b/src/middleware/packages/importer/utils.ts similarity index 100% rename from src/middleware/packages/importer/utils.js rename to src/middleware/packages/importer/utils.ts diff --git a/src/middleware/packages/inference/index.js b/src/middleware/packages/inference/index.ts similarity index 100% rename from src/middleware/packages/inference/index.js rename to src/middleware/packages/inference/index.ts diff --git a/src/middleware/packages/inference/service.js b/src/middleware/packages/inference/service.ts similarity index 100% rename from src/middleware/packages/inference/service.js rename to src/middleware/packages/inference/service.ts diff --git a/src/middleware/packages/inference/subservices/remote.js b/src/middleware/packages/inference/subservices/remote.ts similarity index 100% rename from src/middleware/packages/inference/subservices/remote.js rename to src/middleware/packages/inference/subservices/remote.ts diff --git a/src/middleware/packages/jsonld/index.js b/src/middleware/packages/jsonld/index.ts similarity index 100% rename from src/middleware/packages/jsonld/index.js rename to src/middleware/packages/jsonld/index.ts diff --git a/src/middleware/packages/jsonld/service.js b/src/middleware/packages/jsonld/service.ts similarity index 100% rename from src/middleware/packages/jsonld/service.js rename to src/middleware/packages/jsonld/service.ts diff --git a/src/middleware/packages/jsonld/services/api/index.js b/src/middleware/packages/jsonld/services/api/index.ts similarity index 100% rename from src/middleware/packages/jsonld/services/api/index.js rename to src/middleware/packages/jsonld/services/api/index.ts diff --git a/src/middleware/packages/jsonld/services/context/actions/get.js b/src/middleware/packages/jsonld/services/context/actions/get.ts similarity index 100% rename from src/middleware/packages/jsonld/services/context/actions/get.js rename to src/middleware/packages/jsonld/services/context/actions/get.ts diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.js b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts similarity index 100% rename from src/middleware/packages/jsonld/services/context/actions/getLocal.js rename to src/middleware/packages/jsonld/services/context/actions/getLocal.ts diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.js b/src/middleware/packages/jsonld/services/context/actions/merge.ts similarity index 100% rename from src/middleware/packages/jsonld/services/context/actions/merge.js rename to src/middleware/packages/jsonld/services/context/actions/merge.ts diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.js b/src/middleware/packages/jsonld/services/context/actions/parse.ts similarity index 100% rename from src/middleware/packages/jsonld/services/context/actions/parse.js rename to src/middleware/packages/jsonld/services/context/actions/parse.ts diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.js b/src/middleware/packages/jsonld/services/context/actions/validate.ts similarity index 100% rename from src/middleware/packages/jsonld/services/context/actions/validate.js rename to src/middleware/packages/jsonld/services/context/actions/validate.ts diff --git a/src/middleware/packages/jsonld/services/context/index.js b/src/middleware/packages/jsonld/services/context/index.ts similarity index 100% rename from src/middleware/packages/jsonld/services/context/index.js rename to src/middleware/packages/jsonld/services/context/index.ts diff --git a/src/middleware/packages/jsonld/services/document-loader/index.js b/src/middleware/packages/jsonld/services/document-loader/index.ts similarity index 100% rename from src/middleware/packages/jsonld/services/document-loader/index.js rename to src/middleware/packages/jsonld/services/document-loader/index.ts diff --git a/src/middleware/packages/jsonld/services/parser/index.js b/src/middleware/packages/jsonld/services/parser/index.ts similarity index 100% rename from src/middleware/packages/jsonld/services/parser/index.js rename to src/middleware/packages/jsonld/services/parser/index.ts diff --git a/src/middleware/packages/jsonld/utils/uriSchemes.js b/src/middleware/packages/jsonld/utils/uriSchemes.ts similarity index 100% rename from src/middleware/packages/jsonld/utils/uriSchemes.js rename to src/middleware/packages/jsonld/utils/uriSchemes.ts diff --git a/src/middleware/packages/jsonld/utils/utils.js b/src/middleware/packages/jsonld/utils/utils.ts similarity index 100% rename from src/middleware/packages/jsonld/utils/utils.js rename to src/middleware/packages/jsonld/utils/utils.ts diff --git a/src/middleware/packages/ldp/adapter.js b/src/middleware/packages/ldp/adapter.ts similarity index 100% rename from src/middleware/packages/ldp/adapter.js rename to src/middleware/packages/ldp/adapter.ts diff --git a/src/middleware/packages/ldp/index.js b/src/middleware/packages/ldp/index.ts similarity index 100% rename from src/middleware/packages/ldp/index.js rename to src/middleware/packages/ldp/index.ts diff --git a/src/middleware/packages/ldp/mixins/controlled-container.js b/src/middleware/packages/ldp/mixins/controlled-container.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/controlled-container.js rename to src/middleware/packages/ldp/mixins/controlled-container.ts diff --git a/src/middleware/packages/ldp/mixins/dereference.js b/src/middleware/packages/ldp/mixins/dereference.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/dereference.js rename to src/middleware/packages/ldp/mixins/dereference.ts diff --git a/src/middleware/packages/ldp/mixins/disassembly.js b/src/middleware/packages/ldp/mixins/disassembly.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/disassembly.js rename to src/middleware/packages/ldp/mixins/disassembly.ts diff --git a/src/middleware/packages/ldp/mixins/document-tagger.js b/src/middleware/packages/ldp/mixins/document-tagger.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/document-tagger.js rename to src/middleware/packages/ldp/mixins/document-tagger.ts diff --git a/src/middleware/packages/ldp/mixins/image-processor.js b/src/middleware/packages/ldp/mixins/image-processor.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/image-processor.js rename to src/middleware/packages/ldp/mixins/image-processor.ts diff --git a/src/middleware/packages/ldp/mixins/mime-types.js b/src/middleware/packages/ldp/mixins/mime-types.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/mime-types.js rename to src/middleware/packages/ldp/mixins/mime-types.ts diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.js b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/orphan-files-deletion.js rename to src/middleware/packages/ldp/mixins/orphan-files-deletion.ts diff --git a/src/middleware/packages/ldp/mixins/pseudo-id.js b/src/middleware/packages/ldp/mixins/pseudo-id.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/pseudo-id.js rename to src/middleware/packages/ldp/mixins/pseudo-id.ts diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.js b/src/middleware/packages/ldp/mixins/single-resource-container.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/single-resource-container.js rename to src/middleware/packages/ldp/mixins/single-resource-container.ts diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.js b/src/middleware/packages/ldp/mixins/special-endpoint.ts similarity index 100% rename from src/middleware/packages/ldp/mixins/special-endpoint.js rename to src/middleware/packages/ldp/mixins/special-endpoint.ts diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.js b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts similarity index 100% rename from src/middleware/packages/ldp/routes/getCatchAllRoute.js rename to src/middleware/packages/ldp/routes/getCatchAllRoute.ts diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.js b/src/middleware/packages/ldp/routes/getPodsRoute.ts similarity index 100% rename from src/middleware/packages/ldp/routes/getPodsRoute.js rename to src/middleware/packages/ldp/routes/getPodsRoute.ts diff --git a/src/middleware/packages/ldp/service.js b/src/middleware/packages/ldp/service.ts similarity index 100% rename from src/middleware/packages/ldp/service.js rename to src/middleware/packages/ldp/service.ts diff --git a/src/middleware/packages/ldp/services/api/actions/delete.js b/src/middleware/packages/ldp/services/api/actions/delete.ts similarity index 100% rename from src/middleware/packages/ldp/services/api/actions/delete.js rename to src/middleware/packages/ldp/services/api/actions/delete.ts diff --git a/src/middleware/packages/ldp/services/api/actions/get.js b/src/middleware/packages/ldp/services/api/actions/get.ts similarity index 100% rename from src/middleware/packages/ldp/services/api/actions/get.js rename to src/middleware/packages/ldp/services/api/actions/get.ts diff --git a/src/middleware/packages/ldp/services/api/actions/head.js b/src/middleware/packages/ldp/services/api/actions/head.ts similarity index 100% rename from src/middleware/packages/ldp/services/api/actions/head.js rename to src/middleware/packages/ldp/services/api/actions/head.ts diff --git a/src/middleware/packages/ldp/services/api/actions/patch.js b/src/middleware/packages/ldp/services/api/actions/patch.ts similarity index 100% rename from src/middleware/packages/ldp/services/api/actions/patch.js rename to src/middleware/packages/ldp/services/api/actions/patch.ts diff --git a/src/middleware/packages/ldp/services/api/actions/post.js b/src/middleware/packages/ldp/services/api/actions/post.ts similarity index 100% rename from src/middleware/packages/ldp/services/api/actions/post.js rename to src/middleware/packages/ldp/services/api/actions/post.ts diff --git a/src/middleware/packages/ldp/services/api/actions/put.js b/src/middleware/packages/ldp/services/api/actions/put.ts similarity index 100% rename from src/middleware/packages/ldp/services/api/actions/put.js rename to src/middleware/packages/ldp/services/api/actions/put.ts diff --git a/src/middleware/packages/ldp/services/api/index.js b/src/middleware/packages/ldp/services/api/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/api/index.js rename to src/middleware/packages/ldp/services/api/index.ts diff --git a/src/middleware/packages/ldp/services/cache/index.js b/src/middleware/packages/ldp/services/cache/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/cache/index.js rename to src/middleware/packages/ldp/services/cache/index.ts diff --git a/src/middleware/packages/ldp/services/container/actions/attach.js b/src/middleware/packages/ldp/services/container/actions/attach.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/attach.js rename to src/middleware/packages/ldp/services/container/actions/attach.ts diff --git a/src/middleware/packages/ldp/services/container/actions/clear.js b/src/middleware/packages/ldp/services/container/actions/clear.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/clear.js rename to src/middleware/packages/ldp/services/container/actions/clear.ts diff --git a/src/middleware/packages/ldp/services/container/actions/create.js b/src/middleware/packages/ldp/services/container/actions/create.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/create.js rename to src/middleware/packages/ldp/services/container/actions/create.ts diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.js b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/createAndAttach.js rename to src/middleware/packages/ldp/services/container/actions/createAndAttach.ts diff --git a/src/middleware/packages/ldp/services/container/actions/delete.js b/src/middleware/packages/ldp/services/container/actions/delete.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/delete.js rename to src/middleware/packages/ldp/services/container/actions/delete.ts diff --git a/src/middleware/packages/ldp/services/container/actions/detach.js b/src/middleware/packages/ldp/services/container/actions/detach.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/detach.js rename to src/middleware/packages/ldp/services/container/actions/detach.ts diff --git a/src/middleware/packages/ldp/services/container/actions/exist.js b/src/middleware/packages/ldp/services/container/actions/exist.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/exist.js rename to src/middleware/packages/ldp/services/container/actions/exist.ts diff --git a/src/middleware/packages/ldp/services/container/actions/get.js b/src/middleware/packages/ldp/services/container/actions/get.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/get.js rename to src/middleware/packages/ldp/services/container/actions/get.ts diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.js b/src/middleware/packages/ldp/services/container/actions/getAll.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/getAll.js rename to src/middleware/packages/ldp/services/container/actions/getAll.ts diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.js b/src/middleware/packages/ldp/services/container/actions/getPath.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/getPath.js rename to src/middleware/packages/ldp/services/container/actions/getPath.ts diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.js b/src/middleware/packages/ldp/services/container/actions/getUris.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/getUris.js rename to src/middleware/packages/ldp/services/container/actions/getUris.ts diff --git a/src/middleware/packages/ldp/services/container/actions/includes.js b/src/middleware/packages/ldp/services/container/actions/includes.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/includes.js rename to src/middleware/packages/ldp/services/container/actions/includes.ts diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.js b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/isEmpty.js rename to src/middleware/packages/ldp/services/container/actions/isEmpty.ts diff --git a/src/middleware/packages/ldp/services/container/actions/patch.js b/src/middleware/packages/ldp/services/container/actions/patch.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/patch.js rename to src/middleware/packages/ldp/services/container/actions/patch.ts diff --git a/src/middleware/packages/ldp/services/container/actions/post.js b/src/middleware/packages/ldp/services/container/actions/post.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/actions/post.js rename to src/middleware/packages/ldp/services/container/actions/post.ts diff --git a/src/middleware/packages/ldp/services/container/index.js b/src/middleware/packages/ldp/services/container/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/container/index.js rename to src/middleware/packages/ldp/services/container/index.ts diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.js b/src/middleware/packages/ldp/services/link-header/actions/get.ts similarity index 100% rename from src/middleware/packages/ldp/services/link-header/actions/get.js rename to src/middleware/packages/ldp/services/link-header/actions/get.ts diff --git a/src/middleware/packages/ldp/services/link-header/actions/register.js b/src/middleware/packages/ldp/services/link-header/actions/register.ts similarity index 100% rename from src/middleware/packages/ldp/services/link-header/actions/register.js rename to src/middleware/packages/ldp/services/link-header/actions/register.ts diff --git a/src/middleware/packages/ldp/services/link-header/index.js b/src/middleware/packages/ldp/services/link-header/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/link-header/index.js rename to src/middleware/packages/ldp/services/link-header/index.ts diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts similarity index 100% rename from src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.js rename to src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.js b/src/middleware/packages/ldp/services/permissions/actions/check.ts similarity index 100% rename from src/middleware/packages/ldp/services/permissions/actions/check.js rename to src/middleware/packages/ldp/services/permissions/actions/check.ts diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.js b/src/middleware/packages/ldp/services/permissions/actions/has.ts similarity index 100% rename from src/middleware/packages/ldp/services/permissions/actions/has.js rename to src/middleware/packages/ldp/services/permissions/actions/has.ts diff --git a/src/middleware/packages/ldp/services/permissions/index.js b/src/middleware/packages/ldp/services/permissions/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/permissions/index.js rename to src/middleware/packages/ldp/services/permissions/index.ts diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.js b/src/middleware/packages/ldp/services/registry/actions/getByType.ts similarity index 100% rename from src/middleware/packages/ldp/services/registry/actions/getByType.js rename to src/middleware/packages/ldp/services/registry/actions/getByType.ts diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.js b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts similarity index 100% rename from src/middleware/packages/ldp/services/registry/actions/getByUri.js rename to src/middleware/packages/ldp/services/registry/actions/getByUri.ts diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.js b/src/middleware/packages/ldp/services/registry/actions/getUri.ts similarity index 100% rename from src/middleware/packages/ldp/services/registry/actions/getUri.js rename to src/middleware/packages/ldp/services/registry/actions/getUri.ts diff --git a/src/middleware/packages/ldp/services/registry/actions/list.js b/src/middleware/packages/ldp/services/registry/actions/list.ts similarity index 100% rename from src/middleware/packages/ldp/services/registry/actions/list.js rename to src/middleware/packages/ldp/services/registry/actions/list.ts diff --git a/src/middleware/packages/ldp/services/registry/actions/register.js b/src/middleware/packages/ldp/services/registry/actions/register.ts similarity index 100% rename from src/middleware/packages/ldp/services/registry/actions/register.js rename to src/middleware/packages/ldp/services/registry/actions/register.ts diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.js b/src/middleware/packages/ldp/services/registry/defaultOptions.ts similarity index 100% rename from src/middleware/packages/ldp/services/registry/defaultOptions.js rename to src/middleware/packages/ldp/services/registry/defaultOptions.ts diff --git a/src/middleware/packages/ldp/services/registry/index.js b/src/middleware/packages/ldp/services/registry/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/registry/index.js rename to src/middleware/packages/ldp/services/registry/index.ts diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.js b/src/middleware/packages/ldp/services/remote/actions/delete.ts similarity index 100% rename from src/middleware/packages/ldp/services/remote/actions/delete.js rename to src/middleware/packages/ldp/services/remote/actions/delete.ts diff --git a/src/middleware/packages/ldp/services/remote/actions/get.js b/src/middleware/packages/ldp/services/remote/actions/get.ts similarity index 100% rename from src/middleware/packages/ldp/services/remote/actions/get.js rename to src/middleware/packages/ldp/services/remote/actions/get.ts diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.js b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts similarity index 100% rename from src/middleware/packages/ldp/services/remote/actions/getNetwork.js rename to src/middleware/packages/ldp/services/remote/actions/getNetwork.ts diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.js b/src/middleware/packages/ldp/services/remote/actions/getStored.ts similarity index 100% rename from src/middleware/packages/ldp/services/remote/actions/getStored.js rename to src/middleware/packages/ldp/services/remote/actions/getStored.ts diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.js b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts similarity index 100% rename from src/middleware/packages/ldp/services/remote/actions/isRemote.js rename to src/middleware/packages/ldp/services/remote/actions/isRemote.ts diff --git a/src/middleware/packages/ldp/services/remote/actions/store.js b/src/middleware/packages/ldp/services/remote/actions/store.ts similarity index 100% rename from src/middleware/packages/ldp/services/remote/actions/store.js rename to src/middleware/packages/ldp/services/remote/actions/store.ts diff --git a/src/middleware/packages/ldp/services/remote/index.js b/src/middleware/packages/ldp/services/remote/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/remote/index.js rename to src/middleware/packages/ldp/services/remote/index.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.js rename to src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/create.js b/src/middleware/packages/ldp/services/resource/actions/create.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/create.js rename to src/middleware/packages/ldp/services/resource/actions/create.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/delete.js rename to src/middleware/packages/ldp/services/resource/actions/delete.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.js b/src/middleware/packages/ldp/services/resource/actions/exist.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/exist.js rename to src/middleware/packages/ldp/services/resource/actions/exist.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.js b/src/middleware/packages/ldp/services/resource/actions/generateId.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/generateId.js rename to src/middleware/packages/ldp/services/resource/actions/generateId.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/get.js b/src/middleware/packages/ldp/services/resource/actions/get.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/get.js rename to src/middleware/packages/ldp/services/resource/actions/get.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.js b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/getContainers.js rename to src/middleware/packages/ldp/services/resource/actions/getContainers.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.js b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/getTypes.js rename to src/middleware/packages/ldp/services/resource/actions/getTypes.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.js b/src/middleware/packages/ldp/services/resource/actions/patch.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/patch.js rename to src/middleware/packages/ldp/services/resource/actions/patch.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/put.js b/src/middleware/packages/ldp/services/resource/actions/put.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/put.js rename to src/middleware/packages/ldp/services/resource/actions/put.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.js b/src/middleware/packages/ldp/services/resource/actions/upload.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/actions/upload.js rename to src/middleware/packages/ldp/services/resource/actions/upload.ts diff --git a/src/middleware/packages/ldp/services/resource/index.js b/src/middleware/packages/ldp/services/resource/index.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/index.js rename to src/middleware/packages/ldp/services/resource/index.ts diff --git a/src/middleware/packages/ldp/services/resource/methods.js b/src/middleware/packages/ldp/services/resource/methods.ts similarity index 100% rename from src/middleware/packages/ldp/services/resource/methods.js rename to src/middleware/packages/ldp/services/resource/methods.ts diff --git a/src/middleware/packages/ldp/utils.js b/src/middleware/packages/ldp/utils.ts similarity index 100% rename from src/middleware/packages/ldp/utils.js rename to src/middleware/packages/ldp/utils.ts diff --git a/src/middleware/packages/middlewares/index.js b/src/middleware/packages/middlewares/index.ts similarity index 100% rename from src/middleware/packages/middlewares/index.js rename to src/middleware/packages/middlewares/index.ts diff --git a/src/middleware/packages/migration/index.js b/src/middleware/packages/migration/index.ts similarity index 100% rename from src/middleware/packages/migration/index.js rename to src/middleware/packages/migration/index.ts diff --git a/src/middleware/packages/migration/service.js b/src/middleware/packages/migration/service.ts similarity index 100% rename from src/middleware/packages/migration/service.js rename to src/middleware/packages/migration/service.ts diff --git a/src/middleware/packages/mime-types/constants.js b/src/middleware/packages/mime-types/constants.ts similarity index 100% rename from src/middleware/packages/mime-types/constants.js rename to src/middleware/packages/mime-types/constants.ts diff --git a/src/middleware/packages/mime-types/index.js b/src/middleware/packages/mime-types/index.ts similarity index 100% rename from src/middleware/packages/mime-types/index.js rename to src/middleware/packages/mime-types/index.ts diff --git a/src/middleware/packages/nodeinfo/index.js b/src/middleware/packages/nodeinfo/index.ts similarity index 100% rename from src/middleware/packages/nodeinfo/index.js rename to src/middleware/packages/nodeinfo/index.ts diff --git a/src/middleware/packages/nodeinfo/service.js b/src/middleware/packages/nodeinfo/service.ts similarity index 100% rename from src/middleware/packages/nodeinfo/service.js rename to src/middleware/packages/nodeinfo/service.ts diff --git a/src/middleware/packages/notifications/index.js b/src/middleware/packages/notifications/index.ts similarity index 100% rename from src/middleware/packages/notifications/index.js rename to src/middleware/packages/notifications/index.ts diff --git a/src/middleware/packages/notifications/services/digest/service.js b/src/middleware/packages/notifications/services/digest/service.ts similarity index 100% rename from src/middleware/packages/notifications/services/digest/service.js rename to src/middleware/packages/notifications/services/digest/service.ts diff --git a/src/middleware/packages/notifications/services/digest/subscription.js b/src/middleware/packages/notifications/services/digest/subscription.ts similarity index 100% rename from src/middleware/packages/notifications/services/digest/subscription.js rename to src/middleware/packages/notifications/services/digest/subscription.ts diff --git a/src/middleware/packages/notifications/services/expo-push/device.js b/src/middleware/packages/notifications/services/expo-push/device.ts similarity index 100% rename from src/middleware/packages/notifications/services/expo-push/device.js rename to src/middleware/packages/notifications/services/expo-push/device.ts diff --git a/src/middleware/packages/notifications/services/expo-push/notification.js b/src/middleware/packages/notifications/services/expo-push/notification.ts similarity index 100% rename from src/middleware/packages/notifications/services/expo-push/notification.js rename to src/middleware/packages/notifications/services/expo-push/notification.ts diff --git a/src/middleware/packages/notifications/services/expo-push/service.js b/src/middleware/packages/notifications/services/expo-push/service.ts similarity index 100% rename from src/middleware/packages/notifications/services/expo-push/service.js rename to src/middleware/packages/notifications/services/expo-push/service.ts diff --git a/src/middleware/packages/notifications/services/single-mail/service.js b/src/middleware/packages/notifications/services/single-mail/service.ts similarity index 100% rename from src/middleware/packages/notifications/services/single-mail/service.js rename to src/middleware/packages/notifications/services/single-mail/service.ts diff --git a/src/middleware/packages/ontologies/actions/findNamespace.js b/src/middleware/packages/ontologies/actions/findNamespace.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/findNamespace.js rename to src/middleware/packages/ontologies/actions/findNamespace.ts diff --git a/src/middleware/packages/ontologies/actions/findPrefix.js b/src/middleware/packages/ontologies/actions/findPrefix.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/findPrefix.js rename to src/middleware/packages/ontologies/actions/findPrefix.ts diff --git a/src/middleware/packages/ontologies/actions/get.js b/src/middleware/packages/ontologies/actions/get.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/get.js rename to src/middleware/packages/ontologies/actions/get.ts diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.js b/src/middleware/packages/ontologies/actions/getPrefixes.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/getPrefixes.js rename to src/middleware/packages/ontologies/actions/getPrefixes.ts diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.js b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/getRdfPrefixes.js rename to src/middleware/packages/ontologies/actions/getRdfPrefixes.ts diff --git a/src/middleware/packages/ontologies/actions/list.js b/src/middleware/packages/ontologies/actions/list.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/list.js rename to src/middleware/packages/ontologies/actions/list.ts diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.js b/src/middleware/packages/ontologies/actions/prefixToUri.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/prefixToUri.js rename to src/middleware/packages/ontologies/actions/prefixToUri.ts diff --git a/src/middleware/packages/ontologies/actions/register.js b/src/middleware/packages/ontologies/actions/register.ts similarity index 100% rename from src/middleware/packages/ontologies/actions/register.js rename to src/middleware/packages/ontologies/actions/register.ts diff --git a/src/middleware/packages/ontologies/index.js b/src/middleware/packages/ontologies/index.ts similarity index 100% rename from src/middleware/packages/ontologies/index.js rename to src/middleware/packages/ontologies/index.ts diff --git a/src/middleware/packages/ontologies/ontologies/core/index.js b/src/middleware/packages/ontologies/ontologies/core/index.ts similarity index 100% rename from src/middleware/packages/ontologies/ontologies/core/index.js rename to src/middleware/packages/ontologies/ontologies/core/index.ts diff --git a/src/middleware/packages/ontologies/ontologies/custom/index.js b/src/middleware/packages/ontologies/ontologies/custom/index.ts similarity index 100% rename from src/middleware/packages/ontologies/ontologies/custom/index.js rename to src/middleware/packages/ontologies/ontologies/custom/index.ts diff --git a/src/middleware/packages/ontologies/ontologies/solid/index.js b/src/middleware/packages/ontologies/ontologies/solid/index.ts similarity index 100% rename from src/middleware/packages/ontologies/ontologies/solid/index.js rename to src/middleware/packages/ontologies/ontologies/solid/index.ts diff --git a/src/middleware/packages/ontologies/service.js b/src/middleware/packages/ontologies/service.ts similarity index 100% rename from src/middleware/packages/ontologies/service.js rename to src/middleware/packages/ontologies/service.ts diff --git a/src/middleware/packages/ontologies/sub-services/registry.js b/src/middleware/packages/ontologies/sub-services/registry.ts similarity index 100% rename from src/middleware/packages/ontologies/sub-services/registry.js rename to src/middleware/packages/ontologies/sub-services/registry.ts diff --git a/src/middleware/packages/ontologies/utils.js b/src/middleware/packages/ontologies/utils.ts similarity index 100% rename from src/middleware/packages/ontologies/utils.js rename to src/middleware/packages/ontologies/utils.ts diff --git a/src/middleware/packages/solid/index.js b/src/middleware/packages/solid/index.ts similarity index 100% rename from src/middleware/packages/solid/index.js rename to src/middleware/packages/solid/index.ts diff --git a/src/middleware/packages/solid/services/authorizer.js b/src/middleware/packages/solid/services/authorizer.ts similarity index 100% rename from src/middleware/packages/solid/services/authorizer.js rename to src/middleware/packages/solid/services/authorizer.ts diff --git a/src/middleware/packages/solid/services/endpoint.js b/src/middleware/packages/solid/services/endpoint.ts similarity index 100% rename from src/middleware/packages/solid/services/endpoint.js rename to src/middleware/packages/solid/services/endpoint.ts diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts similarity index 100% rename from src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.js rename to src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.js b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts similarity index 100% rename from src/middleware/packages/solid/services/notifications/channels/webhook-channel.js rename to src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.js b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts similarity index 100% rename from src/middleware/packages/solid/services/notifications/channels/websocket-channel.js rename to src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts diff --git a/src/middleware/packages/solid/services/notifications/listener.js b/src/middleware/packages/solid/services/notifications/listener.ts similarity index 100% rename from src/middleware/packages/solid/services/notifications/listener.js rename to src/middleware/packages/solid/services/notifications/listener.ts diff --git a/src/middleware/packages/solid/services/notifications/provider.js b/src/middleware/packages/solid/services/notifications/provider.ts similarity index 100% rename from src/middleware/packages/solid/services/notifications/provider.js rename to src/middleware/packages/solid/services/notifications/provider.ts diff --git a/src/middleware/packages/solid/services/preferences-file.js b/src/middleware/packages/solid/services/preferences-file.ts similarity index 100% rename from src/middleware/packages/solid/services/preferences-file.js rename to src/middleware/packages/solid/services/preferences-file.ts diff --git a/src/middleware/packages/solid/services/storage.js b/src/middleware/packages/solid/services/storage.ts similarity index 100% rename from src/middleware/packages/solid/services/storage.js rename to src/middleware/packages/solid/services/storage.ts diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.js b/src/middleware/packages/solid/services/type-index/type-indexes.ts similarity index 100% rename from src/middleware/packages/solid/services/type-index/type-indexes.js rename to src/middleware/packages/solid/services/type-index/type-indexes.ts diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.js b/src/middleware/packages/solid/services/type-index/type-registrations.ts similarity index 100% rename from src/middleware/packages/solid/services/type-index/type-registrations.js rename to src/middleware/packages/solid/services/type-index/type-registrations.ts diff --git a/src/middleware/packages/sparql-endpoint/getRoute.js b/src/middleware/packages/sparql-endpoint/getRoute.ts similarity index 100% rename from src/middleware/packages/sparql-endpoint/getRoute.js rename to src/middleware/packages/sparql-endpoint/getRoute.ts diff --git a/src/middleware/packages/sparql-endpoint/index.js b/src/middleware/packages/sparql-endpoint/index.ts similarity index 100% rename from src/middleware/packages/sparql-endpoint/index.js rename to src/middleware/packages/sparql-endpoint/index.ts diff --git a/src/middleware/packages/sparql-endpoint/service.js b/src/middleware/packages/sparql-endpoint/service.ts similarity index 100% rename from src/middleware/packages/sparql-endpoint/service.js rename to src/middleware/packages/sparql-endpoint/service.ts diff --git a/src/middleware/packages/sync/index.js b/src/middleware/packages/sync/index.ts similarity index 100% rename from src/middleware/packages/sync/index.js rename to src/middleware/packages/sync/index.ts diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.js b/src/middleware/packages/sync/middlewares/objects-watcher.ts similarity index 100% rename from src/middleware/packages/sync/middlewares/objects-watcher.js rename to src/middleware/packages/sync/middlewares/objects-watcher.ts diff --git a/src/middleware/packages/sync/services/aggregator.js b/src/middleware/packages/sync/services/aggregator.ts similarity index 100% rename from src/middleware/packages/sync/services/aggregator.js rename to src/middleware/packages/sync/services/aggregator.ts diff --git a/src/middleware/packages/sync/services/mirror.js b/src/middleware/packages/sync/services/mirror.ts similarity index 100% rename from src/middleware/packages/sync/services/mirror.js rename to src/middleware/packages/sync/services/mirror.ts diff --git a/src/middleware/packages/sync/services/synchronizer.js b/src/middleware/packages/sync/services/synchronizer.ts similarity index 100% rename from src/middleware/packages/sync/services/synchronizer.js rename to src/middleware/packages/sync/services/synchronizer.ts diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.js b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts similarity index 100% rename from src/middleware/packages/triplestore/actions/countTriplesOfSubject.js rename to src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.js b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts similarity index 100% rename from src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.js rename to src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts diff --git a/src/middleware/packages/triplestore/actions/dropAll.js b/src/middleware/packages/triplestore/actions/dropAll.ts similarity index 100% rename from src/middleware/packages/triplestore/actions/dropAll.js rename to src/middleware/packages/triplestore/actions/dropAll.ts diff --git a/src/middleware/packages/triplestore/actions/insert.js b/src/middleware/packages/triplestore/actions/insert.ts similarity index 100% rename from src/middleware/packages/triplestore/actions/insert.js rename to src/middleware/packages/triplestore/actions/insert.ts diff --git a/src/middleware/packages/triplestore/actions/query.js b/src/middleware/packages/triplestore/actions/query.ts similarity index 100% rename from src/middleware/packages/triplestore/actions/query.js rename to src/middleware/packages/triplestore/actions/query.ts diff --git a/src/middleware/packages/triplestore/actions/tripleExist.js b/src/middleware/packages/triplestore/actions/tripleExist.ts similarity index 100% rename from src/middleware/packages/triplestore/actions/tripleExist.js rename to src/middleware/packages/triplestore/actions/tripleExist.ts diff --git a/src/middleware/packages/triplestore/actions/update.js b/src/middleware/packages/triplestore/actions/update.ts similarity index 100% rename from src/middleware/packages/triplestore/actions/update.js rename to src/middleware/packages/triplestore/actions/update.ts diff --git a/src/middleware/packages/triplestore/adapter.js b/src/middleware/packages/triplestore/adapter.ts similarity index 100% rename from src/middleware/packages/triplestore/adapter.js rename to src/middleware/packages/triplestore/adapter.ts diff --git a/src/middleware/packages/triplestore/index.js b/src/middleware/packages/triplestore/index.ts similarity index 100% rename from src/middleware/packages/triplestore/index.js rename to src/middleware/packages/triplestore/index.ts diff --git a/src/middleware/packages/triplestore/service.js b/src/middleware/packages/triplestore/service.ts similarity index 100% rename from src/middleware/packages/triplestore/service.js rename to src/middleware/packages/triplestore/service.ts diff --git a/src/middleware/packages/triplestore/subservices/dataset.js b/src/middleware/packages/triplestore/subservices/dataset.ts similarity index 100% rename from src/middleware/packages/triplestore/subservices/dataset.js rename to src/middleware/packages/triplestore/subservices/dataset.ts diff --git a/src/middleware/packages/triplestore/subservices/document.js b/src/middleware/packages/triplestore/subservices/document.ts similarity index 100% rename from src/middleware/packages/triplestore/subservices/document.js rename to src/middleware/packages/triplestore/subservices/document.ts diff --git a/src/middleware/packages/triplestore/utils.js b/src/middleware/packages/triplestore/utils.ts similarity index 100% rename from src/middleware/packages/triplestore/utils.js rename to src/middleware/packages/triplestore/utils.ts diff --git a/src/middleware/packages/void/index.js b/src/middleware/packages/void/index.ts similarity index 100% rename from src/middleware/packages/void/index.js rename to src/middleware/packages/void/index.ts diff --git a/src/middleware/packages/void/service.js b/src/middleware/packages/void/service.ts similarity index 100% rename from src/middleware/packages/void/service.js rename to src/middleware/packages/void/service.ts diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.js b/src/middleware/packages/webacl/bots/authorizer-bot.ts similarity index 100% rename from src/middleware/packages/webacl/bots/authorizer-bot.js rename to src/middleware/packages/webacl/bots/authorizer-bot.ts diff --git a/src/middleware/packages/webacl/bots/groups-manager.js b/src/middleware/packages/webacl/bots/groups-manager.ts similarity index 100% rename from src/middleware/packages/webacl/bots/groups-manager.js rename to src/middleware/packages/webacl/bots/groups-manager.ts diff --git a/src/middleware/packages/webacl/index.js b/src/middleware/packages/webacl/index.ts similarity index 100% rename from src/middleware/packages/webacl/index.js rename to src/middleware/packages/webacl/index.ts diff --git a/src/middleware/packages/webacl/middlewares/cacher.js b/src/middleware/packages/webacl/middlewares/cacher.ts similarity index 100% rename from src/middleware/packages/webacl/middlewares/cacher.js rename to src/middleware/packages/webacl/middlewares/cacher.ts diff --git a/src/middleware/packages/webacl/middlewares/webacl.js b/src/middleware/packages/webacl/middlewares/webacl.ts similarity index 100% rename from src/middleware/packages/webacl/middlewares/webacl.js rename to src/middleware/packages/webacl/middlewares/webacl.ts diff --git a/src/middleware/packages/webacl/routes/getRoutes.js b/src/middleware/packages/webacl/routes/getRoutes.ts similarity index 100% rename from src/middleware/packages/webacl/routes/getRoutes.js rename to src/middleware/packages/webacl/routes/getRoutes.ts diff --git a/src/middleware/packages/webacl/service.js b/src/middleware/packages/webacl/service.ts similarity index 100% rename from src/middleware/packages/webacl/service.js rename to src/middleware/packages/webacl/service.ts diff --git a/src/middleware/packages/webacl/services/authorizer/index.js b/src/middleware/packages/webacl/services/authorizer/index.ts similarity index 100% rename from src/middleware/packages/webacl/services/authorizer/index.js rename to src/middleware/packages/webacl/services/authorizer/index.ts diff --git a/src/middleware/packages/webacl/services/cache/index.js b/src/middleware/packages/webacl/services/cache/index.ts similarity index 100% rename from src/middleware/packages/webacl/services/cache/index.js rename to src/middleware/packages/webacl/services/cache/index.ts diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.js b/src/middleware/packages/webacl/services/group/actions/addMember.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/addMember.js rename to src/middleware/packages/webacl/services/group/actions/addMember.ts diff --git a/src/middleware/packages/webacl/services/group/actions/create.js b/src/middleware/packages/webacl/services/group/actions/create.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/create.js rename to src/middleware/packages/webacl/services/group/actions/create.ts diff --git a/src/middleware/packages/webacl/services/group/actions/delete.js b/src/middleware/packages/webacl/services/group/actions/delete.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/delete.js rename to src/middleware/packages/webacl/services/group/actions/delete.ts diff --git a/src/middleware/packages/webacl/services/group/actions/exist.js b/src/middleware/packages/webacl/services/group/actions/exist.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/exist.js rename to src/middleware/packages/webacl/services/group/actions/exist.ts diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.js b/src/middleware/packages/webacl/services/group/actions/getGroups.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/getGroups.js rename to src/middleware/packages/webacl/services/group/actions/getGroups.ts diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.js b/src/middleware/packages/webacl/services/group/actions/getMembers.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/getMembers.js rename to src/middleware/packages/webacl/services/group/actions/getMembers.ts diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.js b/src/middleware/packages/webacl/services/group/actions/getUri.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/getUri.js rename to src/middleware/packages/webacl/services/group/actions/getUri.ts diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.js b/src/middleware/packages/webacl/services/group/actions/isMember.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/isMember.js rename to src/middleware/packages/webacl/services/group/actions/isMember.ts diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.js b/src/middleware/packages/webacl/services/group/actions/removeMember.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/actions/removeMember.js rename to src/middleware/packages/webacl/services/group/actions/removeMember.ts diff --git a/src/middleware/packages/webacl/services/group/index.js b/src/middleware/packages/webacl/services/group/index.ts similarity index 100% rename from src/middleware/packages/webacl/services/group/index.js rename to src/middleware/packages/webacl/services/group/index.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.js b/src/middleware/packages/webacl/services/resource/actions/addRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/addRights.js rename to src/middleware/packages/webacl/services/resource/actions/addRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.js b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/awaitReadRight.js rename to src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.js b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/deleteAllRights.js rename to src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.js b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.js rename to src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.js b/src/middleware/packages/webacl/services/resource/actions/getLink.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/getLink.js rename to src/middleware/packages/webacl/services/resource/actions/getLink.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.js b/src/middleware/packages/webacl/services/resource/actions/getRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/getRights.js rename to src/middleware/packages/webacl/services/resource/actions/getRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.js rename to src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.js b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/hasRights.js rename to src/middleware/packages/webacl/services/resource/actions/hasRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.js b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/isPublic.js rename to src/middleware/packages/webacl/services/resource/actions/isPublic.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.js b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.js rename to src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.js b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/removeRights.js rename to src/middleware/packages/webacl/services/resource/actions/removeRights.ts diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.js b/src/middleware/packages/webacl/services/resource/actions/setRights.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/actions/setRights.js rename to src/middleware/packages/webacl/services/resource/actions/setRights.ts diff --git a/src/middleware/packages/webacl/services/resource/index.js b/src/middleware/packages/webacl/services/resource/index.ts similarity index 100% rename from src/middleware/packages/webacl/services/resource/index.js rename to src/middleware/packages/webacl/services/resource/index.ts diff --git a/src/middleware/packages/webacl/utils.js b/src/middleware/packages/webacl/utils.ts similarity index 100% rename from src/middleware/packages/webacl/utils.js rename to src/middleware/packages/webacl/utils.ts diff --git a/src/middleware/packages/webfinger/index.js b/src/middleware/packages/webfinger/index.ts similarity index 100% rename from src/middleware/packages/webfinger/index.js rename to src/middleware/packages/webfinger/index.ts diff --git a/src/middleware/packages/webfinger/service.js b/src/middleware/packages/webfinger/service.ts similarity index 100% rename from src/middleware/packages/webfinger/service.js rename to src/middleware/packages/webfinger/service.ts diff --git a/src/middleware/packages/webhooks/index.js b/src/middleware/packages/webhooks/index.ts similarity index 100% rename from src/middleware/packages/webhooks/index.js rename to src/middleware/packages/webhooks/index.ts diff --git a/src/middleware/packages/webhooks/service.js b/src/middleware/packages/webhooks/service.ts similarity index 100% rename from src/middleware/packages/webhooks/service.js rename to src/middleware/packages/webhooks/service.ts diff --git a/src/middleware/packages/webid/index.js b/src/middleware/packages/webid/index.ts similarity index 100% rename from src/middleware/packages/webid/index.js rename to src/middleware/packages/webid/index.ts diff --git a/src/middleware/packages/webid/service.js b/src/middleware/packages/webid/service.ts similarity index 100% rename from src/middleware/packages/webid/service.js rename to src/middleware/packages/webid/service.ts diff --git a/src/middleware/tests/activitypub/actors.test.js b/src/middleware/tests/activitypub/actors.test.ts similarity index 100% rename from src/middleware/tests/activitypub/actors.test.js rename to src/middleware/tests/activitypub/actors.test.ts diff --git a/src/middleware/tests/activitypub/collection-api.test.js b/src/middleware/tests/activitypub/collection-api.test.ts similarity index 100% rename from src/middleware/tests/activitypub/collection-api.test.js rename to src/middleware/tests/activitypub/collection-api.test.ts diff --git a/src/middleware/tests/activitypub/collection.test.js b/src/middleware/tests/activitypub/collection.test.ts similarity index 100% rename from src/middleware/tests/activitypub/collection.test.js rename to src/middleware/tests/activitypub/collection.test.ts diff --git a/src/middleware/tests/activitypub/follow.test.js b/src/middleware/tests/activitypub/follow.test.ts similarity index 100% rename from src/middleware/tests/activitypub/follow.test.js rename to src/middleware/tests/activitypub/follow.test.ts diff --git a/src/middleware/tests/activitypub/inbox.test.js b/src/middleware/tests/activitypub/inbox.test.ts similarity index 100% rename from src/middleware/tests/activitypub/inbox.test.js rename to src/middleware/tests/activitypub/inbox.test.ts diff --git a/src/middleware/tests/activitypub/initialize.js b/src/middleware/tests/activitypub/initialize.ts similarity index 100% rename from src/middleware/tests/activitypub/initialize.js rename to src/middleware/tests/activitypub/initialize.ts diff --git a/src/middleware/tests/activitypub/like.test.js b/src/middleware/tests/activitypub/like.test.ts similarity index 100% rename from src/middleware/tests/activitypub/like.test.js rename to src/middleware/tests/activitypub/like.test.ts diff --git a/src/middleware/tests/activitypub/message.test.js b/src/middleware/tests/activitypub/message.test.ts similarity index 100% rename from src/middleware/tests/activitypub/message.test.js rename to src/middleware/tests/activitypub/message.test.ts diff --git a/src/middleware/tests/activitypub/object.test.js b/src/middleware/tests/activitypub/object.test.ts similarity index 100% rename from src/middleware/tests/activitypub/object.test.js rename to src/middleware/tests/activitypub/object.test.ts diff --git a/src/middleware/tests/activitypub/outbox.test.js b/src/middleware/tests/activitypub/outbox.test.ts similarity index 100% rename from src/middleware/tests/activitypub/outbox.test.js rename to src/middleware/tests/activitypub/outbox.test.ts diff --git a/src/middleware/tests/activitypub/shares.test.js b/src/middleware/tests/activitypub/shares.test.ts similarity index 100% rename from src/middleware/tests/activitypub/shares.test.js rename to src/middleware/tests/activitypub/shares.test.ts diff --git a/src/middleware/tests/config.js b/src/middleware/tests/config.ts similarity index 100% rename from src/middleware/tests/config.js rename to src/middleware/tests/config.ts diff --git a/src/middleware/tests/crypto/initialize.js b/src/middleware/tests/crypto/initialize.ts similarity index 100% rename from src/middleware/tests/crypto/initialize.js rename to src/middleware/tests/crypto/initialize.ts diff --git a/src/middleware/tests/crypto/keys.test.js b/src/middleware/tests/crypto/keys.test.ts similarity index 100% rename from src/middleware/tests/crypto/keys.test.js rename to src/middleware/tests/crypto/keys.test.ts diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.js b/src/middleware/tests/crypto/verifiable-credentials.test.ts similarity index 100% rename from src/middleware/tests/crypto/verifiable-credentials.test.js rename to src/middleware/tests/crypto/verifiable-credentials.test.ts diff --git a/src/middleware/tests/interop/initialize.js b/src/middleware/tests/interop/initialize.ts similarity index 100% rename from src/middleware/tests/interop/initialize.js rename to src/middleware/tests/interop/initialize.ts diff --git a/src/middleware/tests/interop/mirror-protected.test.js b/src/middleware/tests/interop/mirror-protected.test.ts similarity index 100% rename from src/middleware/tests/interop/mirror-protected.test.js rename to src/middleware/tests/interop/mirror-protected.test.ts diff --git a/src/middleware/tests/interop/mirror.test.js b/src/middleware/tests/interop/mirror.test.ts similarity index 100% rename from src/middleware/tests/interop/mirror.test.js rename to src/middleware/tests/interop/mirror.test.ts diff --git a/src/middleware/tests/interop/patch-remote.test.js b/src/middleware/tests/interop/patch-remote.test.ts similarity index 100% rename from src/middleware/tests/interop/patch-remote.test.js rename to src/middleware/tests/interop/patch-remote.test.ts diff --git a/src/middleware/tests/interop/remote-inference.test.js b/src/middleware/tests/interop/remote-inference.test.ts similarity index 100% rename from src/middleware/tests/interop/remote-inference.test.js rename to src/middleware/tests/interop/remote-inference.test.ts diff --git a/src/middleware/tests/jest.config.js b/src/middleware/tests/jest.config.ts similarity index 100% rename from src/middleware/tests/jest.config.js rename to src/middleware/tests/jest.config.ts diff --git a/src/middleware/tests/jest.setup.js b/src/middleware/tests/jest.setup.ts similarity index 100% rename from src/middleware/tests/jest.setup.js rename to src/middleware/tests/jest.setup.ts diff --git a/src/middleware/tests/jsonld/initialize.js b/src/middleware/tests/jsonld/initialize.ts similarity index 100% rename from src/middleware/tests/jsonld/initialize.js rename to src/middleware/tests/jsonld/initialize.ts diff --git a/src/middleware/tests/jsonld/merge.test.js b/src/middleware/tests/jsonld/merge.test.ts similarity index 100% rename from src/middleware/tests/jsonld/merge.test.js rename to src/middleware/tests/jsonld/merge.test.ts diff --git a/src/middleware/tests/ldp/api.test.js b/src/middleware/tests/ldp/api.test.ts similarity index 100% rename from src/middleware/tests/ldp/api.test.js rename to src/middleware/tests/ldp/api.test.ts diff --git a/src/middleware/tests/ldp/binary.test.js b/src/middleware/tests/ldp/binary.test.ts similarity index 100% rename from src/middleware/tests/ldp/binary.test.js rename to src/middleware/tests/ldp/binary.test.ts diff --git a/src/middleware/tests/ldp/container-path.test.js b/src/middleware/tests/ldp/container-path.test.ts similarity index 100% rename from src/middleware/tests/ldp/container-path.test.js rename to src/middleware/tests/ldp/container-path.test.ts diff --git a/src/middleware/tests/ldp/container.test.js b/src/middleware/tests/ldp/container.test.ts similarity index 100% rename from src/middleware/tests/ldp/container.test.js rename to src/middleware/tests/ldp/container.test.ts diff --git a/src/middleware/tests/ldp/content-negotiation.test.js b/src/middleware/tests/ldp/content-negotiation.test.ts similarity index 100% rename from src/middleware/tests/ldp/content-negotiation.test.js rename to src/middleware/tests/ldp/content-negotiation.test.ts diff --git a/src/middleware/tests/ldp/headers.test.js b/src/middleware/tests/ldp/headers.test.ts similarity index 100% rename from src/middleware/tests/ldp/headers.test.js rename to src/middleware/tests/ldp/headers.test.ts diff --git a/src/middleware/tests/ldp/initialize.js b/src/middleware/tests/ldp/initialize.ts similarity index 100% rename from src/middleware/tests/ldp/initialize.js rename to src/middleware/tests/ldp/initialize.ts diff --git a/src/middleware/tests/ldp/resource.test.js b/src/middleware/tests/ldp/resource.test.ts similarity index 100% rename from src/middleware/tests/ldp/resource.test.js rename to src/middleware/tests/ldp/resource.test.ts diff --git a/src/middleware/tests/ontologies/initialize.js b/src/middleware/tests/ontologies/initialize.ts similarity index 100% rename from src/middleware/tests/ontologies/initialize.js rename to src/middleware/tests/ontologies/initialize.ts diff --git a/src/middleware/tests/ontologies/ontologies.test.js b/src/middleware/tests/ontologies/ontologies.test.ts similarity index 100% rename from src/middleware/tests/ontologies/ontologies.test.js rename to src/middleware/tests/ontologies/ontologies.test.ts diff --git a/src/middleware/tests/utils.js b/src/middleware/tests/utils.ts similarity index 100% rename from src/middleware/tests/utils.js rename to src/middleware/tests/utils.ts diff --git a/src/middleware/tests/webId/webId.test.js b/src/middleware/tests/webId/webId.test.ts similarity index 100% rename from src/middleware/tests/webId/webId.test.js rename to src/middleware/tests/webId/webId.test.ts diff --git a/src/middleware/tests/webacl/groupCRUD.test.js b/src/middleware/tests/webacl/groupCRUD.test.ts similarity index 100% rename from src/middleware/tests/webacl/groupCRUD.test.js rename to src/middleware/tests/webacl/groupCRUD.test.ts diff --git a/src/middleware/tests/webacl/initialize.js b/src/middleware/tests/webacl/initialize.ts similarity index 100% rename from src/middleware/tests/webacl/initialize.js rename to src/middleware/tests/webacl/initialize.ts diff --git a/src/middleware/tests/webacl/resource.test.js b/src/middleware/tests/webacl/resource.test.ts similarity index 100% rename from src/middleware/tests/webacl/resource.test.js rename to src/middleware/tests/webacl/resource.test.ts diff --git a/src/middleware/tests/webacl/resourceCRUD.test.js b/src/middleware/tests/webacl/resourceCRUD.test.ts similarity index 100% rename from src/middleware/tests/webacl/resourceCRUD.test.js rename to src/middleware/tests/webacl/resourceCRUD.test.ts diff --git a/src/middleware/tests/webacl/sparql-injection.test.js b/src/middleware/tests/webacl/sparql-injection.test.ts similarity index 100% rename from src/middleware/tests/webacl/sparql-injection.test.js rename to src/middleware/tests/webacl/sparql-injection.test.ts diff --git a/src/middleware/tests/webacl/utils.test.js b/src/middleware/tests/webacl/utils.test.ts similarity index 100% rename from src/middleware/tests/webacl/utils.test.js rename to src/middleware/tests/webacl/utils.test.ts From 17ce501ac1833866d86d84172015f9a14483db60 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:14:57 +0300 Subject: [PATCH 049/165] transform_ts_codemod --- .../packages/activitypub/constants.ts | 16 +- .../packages/activitypub/containers.ts | 4 +- src/middleware/packages/activitypub/index.ts | 32 +- .../activitypub/mixins/activities-handler.ts | 42 +- .../activitypub/mixins/await-activity.ts | 6 +- .../packages/activitypub/mixins/bot.ts | 33 +- .../packages/activitypub/mixins/fake-queue.ts | 2 +- .../activitypub/services/activity-mapping.ts | 151 +++--- .../activitypub/services/activitypub/index.ts | 47 +- .../activity-handlers/setRightsHandler.ts | 6 +- .../activitypub/subservices/activity.ts | 134 ++--- .../services/activitypub/subservices/actor.ts | 350 +++++++------ .../services/activitypub/subservices/api.ts | 116 +++-- .../subservices/collection/actions/get.ts | 11 +- .../subservices/collection/index.ts | 478 ++++++++++-------- .../subservices/collections-registry.ts | 448 ++++++++-------- .../activitypub/subservices/follow.ts | 186 ++++--- .../services/activitypub/subservices/inbox.ts | 289 ++++++----- .../services/activitypub/subservices/like.ts | 135 +++-- .../activitypub/subservices/object.ts | 378 +++++++------- .../activitypub/subservices/outbox.ts | 258 +++++----- .../services/activitypub/subservices/reply.ts | 126 +++-- .../services/activitypub/subservices/share.ts | 83 +-- .../activitypub/subservices/side-effects.ts | 120 +++-- .../activitypub/services/migration.ts | 75 +-- .../packages/activitypub/services/relay.ts | 25 +- src/middleware/packages/activitypub/utils.ts | 2 +- .../activitypub/utils/matchActivity.ts | 4 +- src/middleware/packages/auth/index.ts | 23 +- .../packages/auth/middlewares/localLogout.ts | 2 +- .../auth/middlewares/redirectToFront.ts | 2 +- .../auth/middlewares/saveRedirectUrl.ts | 2 +- .../packages/auth/middlewares/sendToken.ts | 2 +- .../packages/auth/mixins/auth.sso.ts | 94 ++-- src/middleware/packages/auth/mixins/auth.ts | 139 ++--- .../packages/auth/services/account.ts | 463 +++++++++-------- .../packages/auth/services/auth.cas.ts | 21 +- .../packages/auth/services/auth.local.ts | 180 ++++--- .../packages/auth/services/auth.oidc.ts | 22 +- src/middleware/packages/auth/services/jwt.ts | 159 +++--- src/middleware/packages/auth/services/mail.ts | 57 ++- .../packages/auth/services/migration.ts | 51 +- src/middleware/packages/backup/index.ts | 188 ++++--- .../packages/backup/utils/fsCopy.ts | 6 +- .../packages/backup/utils/fsRemove.ts | 6 +- .../packages/backup/utils/ftpCopy.ts | 8 +- .../packages/backup/utils/ftpRemove.ts | 6 +- .../packages/backup/utils/rsyncCopy.ts | 6 +- src/middleware/packages/core/index.ts | 5 +- src/middleware/packages/core/service.ts | 43 +- src/middleware/packages/crypto/constants.ts | 10 +- src/middleware/packages/crypto/index.ts | 10 +- src/middleware/packages/crypto/keys/index.ts | 7 +- .../packages/crypto/keys/key-container.ts | 74 +-- src/middleware/packages/crypto/keys/keys.ts | 166 +++--- .../packages/crypto/keys/migration.ts | 215 ++++---- .../crypto/keys/public-key-container.ts | 33 +- .../crypto/signature/http-signatures.ts | 258 +++++----- .../packages/crypto/signature/index.ts | 9 +- .../packages/crypto/signature/keypair.ts | 318 ++++++------ .../packages/crypto/signature/proxy.ts | 234 +++++---- .../crypto/utils/noGraphCredentialContext.ts | 2 +- src/middleware/packages/crypto/utils/utils.ts | 4 +- .../VcCapabilityPresentationProofPurpose.ts | 4 +- .../verifiable-credentials/VcPurpose.ts | 4 +- .../challenge-service.ts | 95 ++-- .../data-integrity-service.ts | 37 +- .../crypto/verifiable-credentials/index.ts | 11 +- .../verifiable-credentials/vc-api-service.ts | 21 +- .../vc-authorizer-service.ts | 33 +- .../vc-credential-container.ts | 110 ++-- .../vc-holder-service.ts | 35 +- .../vc-issuer-service.ts | 34 +- .../vc-presentation-container.ts | 114 +++-- .../verifiable-credentials/vc-service.ts | 35 +- .../vc-verifier-service.ts | 40 +- src/middleware/packages/importer/index.ts | 34 +- .../packages/importer/mixins/discourse.ts | 11 +- .../packages/importer/mixins/drupal.ts | 11 +- .../packages/importer/mixins/gogocarto.ts | 11 +- .../packages/importer/mixins/humhub.ts | 14 +- .../packages/importer/mixins/importer.ts | 341 +++++++------ .../packages/importer/mixins/jotform.ts | 11 +- .../packages/importer/mixins/mobilizon.ts | 11 +- .../packages/importer/mixins/prestashop.ts | 13 +- .../packages/importer/mixins/wordpress.ts | 15 +- .../packages/importer/mixins/yeswiki.ts | 11 +- src/middleware/packages/importer/utils.ts | 10 +- src/middleware/packages/inference/index.ts | 5 +- src/middleware/packages/inference/service.ts | 308 +++++------ .../packages/inference/subservices/remote.ts | 28 +- src/middleware/packages/jsonld/index.ts | 22 +- src/middleware/packages/jsonld/service.ts | 29 +- .../packages/jsonld/services/api/index.ts | 26 +- .../jsonld/services/context/actions/get.ts | 8 +- .../services/context/actions/getLocal.ts | 8 +- .../jsonld/services/context/actions/merge.ts | 9 +- .../jsonld/services/context/actions/parse.ts | 8 +- .../services/context/actions/validate.ts | 8 +- .../packages/jsonld/services/context/index.ts | 29 +- .../jsonld/services/document-loader/index.ts | 92 ++-- .../packages/jsonld/services/parser/index.ts | 342 +++++++------ .../packages/jsonld/utils/uriSchemes.ts | 2 +- src/middleware/packages/jsonld/utils/utils.ts | 14 +- src/middleware/packages/ldp/adapter.ts | 4 +- src/middleware/packages/ldp/index.ts | 66 ++- .../ldp/mixins/controlled-container.ts | 202 +++++--- .../packages/ldp/mixins/dereference.ts | 9 +- .../packages/ldp/mixins/disassembly.ts | 9 +- .../packages/ldp/mixins/document-tagger.ts | 132 ++--- .../packages/ldp/mixins/image-processor.ts | 109 ++-- .../packages/ldp/mixins/mime-types.ts | 9 +- .../ldp/mixins/orphan-files-deletion.ts | 73 +-- .../packages/ldp/mixins/pseudo-id.ts | 8 +- .../ldp/mixins/single-resource-container.ts | 114 +++-- .../packages/ldp/mixins/special-endpoint.ts | 68 +-- .../packages/ldp/routes/getCatchAllRoute.ts | 9 +- .../packages/ldp/routes/getPodsRoute.ts | 9 +- src/middleware/packages/ldp/service.ts | 63 ++- .../ldp/services/api/actions/delete.ts | 4 +- .../packages/ldp/services/api/actions/get.ts | 10 +- .../packages/ldp/services/api/actions/head.ts | 4 +- .../ldp/services/api/actions/patch.ts | 8 +- .../packages/ldp/services/api/actions/post.ts | 10 +- .../packages/ldp/services/api/actions/put.ts | 6 +- .../packages/ldp/services/api/index.ts | 35 +- .../packages/ldp/services/cache/index.ts | 210 +++++--- .../ldp/services/container/actions/attach.ts | 9 +- .../ldp/services/container/actions/clear.ts | 8 +- .../ldp/services/container/actions/create.ts | 8 +- .../container/actions/createAndAttach.ts | 11 +- .../ldp/services/container/actions/delete.ts | 9 +- .../ldp/services/container/actions/detach.ts | 9 +- .../ldp/services/container/actions/exist.ts | 8 +- .../ldp/services/container/actions/get.ts | 11 +- .../ldp/services/container/actions/getAll.ts | 8 +- .../ldp/services/container/actions/getPath.ts | 11 +- .../ldp/services/container/actions/getUris.ts | 8 +- .../services/container/actions/includes.ts | 8 +- .../ldp/services/container/actions/isEmpty.ts | 8 +- .../ldp/services/container/actions/patch.ts | 9 +- .../ldp/services/container/actions/post.ts | 13 +- .../packages/ldp/services/container/index.ts | 49 +- .../ldp/services/link-header/actions/get.ts | 9 +- .../services/link-header/actions/register.ts | 8 +- .../ldp/services/link-header/index.ts | 21 +- .../permissions/actions/addAuthorizer.ts | 8 +- .../ldp/services/permissions/actions/check.ts | 7 +- .../ldp/services/permissions/actions/has.ts | 8 +- .../ldp/services/permissions/index.ts | 23 +- .../services/registry/actions/getByType.ts | 8 +- .../ldp/services/registry/actions/getByUri.ts | 8 +- .../ldp/services/registry/actions/getUri.ts | 9 +- .../ldp/services/registry/actions/list.ts | 7 +- .../ldp/services/registry/actions/register.ts | 16 +- .../ldp/services/registry/defaultOptions.ts | 4 +- .../packages/ldp/services/registry/index.ts | 59 ++- .../ldp/services/remote/actions/delete.ts | 8 +- .../ldp/services/remote/actions/get.ts | 9 +- .../ldp/services/remote/actions/getNetwork.ts | 11 +- .../ldp/services/remote/actions/getStored.ts | 9 +- .../ldp/services/remote/actions/isRemote.ts | 9 +- .../ldp/services/remote/actions/store.ts | 11 +- .../packages/ldp/services/remote/index.ts | 41 +- .../resource/actions/awaitCreateComplete.ts | 9 +- .../ldp/services/resource/actions/create.ts | 9 +- .../ldp/services/resource/actions/delete.ts | 9 +- .../ldp/services/resource/actions/exist.ts | 8 +- .../services/resource/actions/generateId.ts | 13 +- .../ldp/services/resource/actions/get.ts | 11 +- .../resource/actions/getContainers.ts | 9 +- .../ldp/services/resource/actions/getTypes.ts | 8 +- .../ldp/services/resource/actions/patch.ts | 9 +- .../ldp/services/resource/actions/put.ts | 11 +- .../ldp/services/resource/actions/upload.ts | 13 +- .../packages/ldp/services/resource/index.ts | 43 +- .../packages/ldp/services/resource/methods.ts | 6 +- src/middleware/packages/ldp/utils.ts | 9 +- src/middleware/packages/middlewares/index.ts | 9 +- src/middleware/packages/migration/index.ts | 5 +- src/middleware/packages/migration/service.ts | 344 +++++++------ .../packages/mime-types/constants.ts | 5 +- src/middleware/packages/mime-types/index.ts | 13 +- src/middleware/packages/nodeinfo/index.ts | 5 +- src/middleware/packages/nodeinfo/service.ts | 88 ++-- .../packages/notifications/index.ts | 9 +- .../notifications/services/digest/service.ts | 171 ++++--- .../services/digest/subscription.ts | 31 +- .../services/expo-push/device.ts | 130 ++--- .../services/expo-push/notification.ts | 216 ++++---- .../services/expo-push/service.ts | 21 +- .../services/single-mail/service.ts | 84 +-- .../ontologies/actions/findNamespace.ts | 9 +- .../packages/ontologies/actions/findPrefix.ts | 11 +- .../packages/ontologies/actions/get.ts | 8 +- .../ontologies/actions/getPrefixes.ts | 8 +- .../ontologies/actions/getRdfPrefixes.ts | 8 +- .../packages/ontologies/actions/list.ts | 8 +- .../ontologies/actions/prefixToUri.ts | 10 +- .../packages/ontologies/actions/register.ts | 9 +- src/middleware/packages/ontologies/index.ts | 25 +- .../ontologies/ontologies/core/index.ts | 33 +- .../ontologies/ontologies/custom/index.ts | 21 +- .../ontologies/ontologies/solid/index.ts | 15 +- src/middleware/packages/ontologies/service.ts | 37 +- .../ontologies/sub-services/registry.ts | 90 ++-- src/middleware/packages/ontologies/utils.ts | 6 +- src/middleware/packages/solid/index.ts | 23 +- .../packages/solid/services/authorizer.ts | 32 +- .../packages/solid/services/endpoint.ts | 31 +- .../channels/notification-channel.mixin.ts | 262 +++++----- .../notifications/channels/webhook-channel.ts | 46 +- .../channels/websocket-channel.ts | 21 +- .../solid/services/notifications/listener.ts | 259 +++++----- .../solid/services/notifications/provider.ts | 29 +- .../solid/services/preferences-file.ts | 23 +- .../packages/solid/services/storage.ts | 118 +++-- .../solid/services/type-index/type-indexes.ts | 326 ++++++------ .../services/type-index/type-registrations.ts | 87 ++-- .../packages/sparql-endpoint/getRoute.ts | 6 +- .../packages/sparql-endpoint/index.ts | 5 +- .../packages/sparql-endpoint/service.ts | 85 ++-- src/middleware/packages/sync/index.ts | 11 +- .../sync/middlewares/objects-watcher.ts | 5 +- .../packages/sync/services/aggregator.ts | 21 +- .../packages/sync/services/mirror.ts | 30 +- .../packages/sync/services/synchronizer.ts | 19 +- .../actions/countTriplesOfSubject.ts | 8 +- .../actions/deleteOrphanBlankNodes.ts | 8 +- .../packages/triplestore/actions/dropAll.ts | 9 +- .../packages/triplestore/actions/insert.ts | 9 +- .../packages/triplestore/actions/query.ts | 11 +- .../triplestore/actions/tripleExist.ts | 8 +- .../packages/triplestore/actions/update.ts | 9 +- .../packages/triplestore/adapter.ts | 11 +- src/middleware/packages/triplestore/index.ts | 13 +- .../packages/triplestore/service.ts | 42 +- .../triplestore/subservices/dataset.ts | 217 ++++---- .../triplestore/subservices/document.ts | 124 +++-- src/middleware/packages/triplestore/utils.ts | 6 +- src/middleware/packages/void/index.ts | 5 +- src/middleware/packages/void/service.ts | 64 ++- .../packages/webacl/bots/authorizer-bot.ts | 161 +++--- .../packages/webacl/bots/groups-manager.ts | 153 +++--- src/middleware/packages/webacl/index.ts | 17 +- .../packages/webacl/middlewares/cacher.ts | 5 +- .../packages/webacl/middlewares/webacl.ts | 8 +- .../packages/webacl/routes/getRoutes.ts | 7 +- src/middleware/packages/webacl/service.ts | 31 +- .../webacl/services/authorizer/index.ts | 44 +- .../packages/webacl/services/cache/index.ts | 180 ++++--- .../services/group/actions/addMember.ts | 102 ++-- .../webacl/services/group/actions/create.ts | 142 +++--- .../webacl/services/group/actions/delete.ts | 105 ++-- .../webacl/services/group/actions/exist.ts | 51 +- .../services/group/actions/getGroups.ts | 101 ++-- .../services/group/actions/getMembers.ts | 102 ++-- .../webacl/services/group/actions/getUri.ts | 23 +- .../webacl/services/group/actions/isMember.ts | 83 ++- .../services/group/actions/removeMember.ts | 105 ++-- .../packages/webacl/services/group/index.ts | 37 +- .../services/resource/actions/addRights.ts | 282 +++++------ .../resource/actions/awaitReadRight.ts | 72 +-- .../resource/actions/deleteAllRights.ts | 54 +- .../resource/actions/deleteAllUserRights.ts | 48 +- .../services/resource/actions/getLink.ts | 29 +- .../services/resource/actions/getRights.ts | 78 +-- .../actions/getUsersWithReadRights.ts | 47 +- .../services/resource/actions/hasRights.ts | 94 ++-- .../services/resource/actions/isPublic.ts | 32 +- .../actions/refreshContainersRights.ts | 115 +++-- .../services/resource/actions/removeRights.ts | 117 ++--- .../services/resource/actions/setRights.ts | 256 +++++----- .../webacl/services/resource/index.ts | 48 +- src/middleware/packages/webacl/utils.ts | 21 +- src/middleware/packages/webfinger/index.ts | 5 +- src/middleware/packages/webfinger/service.ts | 92 ++-- src/middleware/packages/webhooks/index.ts | 5 +- src/middleware/packages/webhooks/service.ts | 139 ++--- src/middleware/packages/webid/index.ts | 5 +- src/middleware/packages/webid/service.ts | 146 +++--- .../tests/activitypub/actors.test.ts | 6 +- .../tests/activitypub/collection-api.test.ts | 13 +- .../tests/activitypub/collection.test.ts | 8 +- .../tests/activitypub/follow.test.ts | 8 +- .../tests/activitypub/inbox.test.ts | 9 +- .../tests/activitypub/initialize.ts | 22 +- src/middleware/tests/activitypub/like.test.ts | 8 +- .../tests/activitypub/message.test.ts | 8 +- .../tests/activitypub/object.test.ts | 11 +- .../tests/activitypub/outbox.test.ts | 9 +- .../tests/activitypub/shares.test.ts | 8 +- src/middleware/tests/config.ts | 18 +- src/middleware/tests/crypto/initialize.ts | 22 +- src/middleware/tests/crypto/keys.test.ts | 10 +- .../crypto/verifiable-credentials.test.ts | 9 +- src/middleware/tests/interop/initialize.ts | 30 +- .../tests/interop/mirror-protected.test.ts | 12 +- src/middleware/tests/interop/mirror.test.ts | 12 +- .../tests/interop/patch-remote.test.ts | 9 +- .../tests/interop/remote-inference.test.ts | 9 +- src/middleware/tests/jest.config.ts | 2 +- src/middleware/tests/jsonld/initialize.ts | 18 +- src/middleware/tests/jsonld/merge.test.ts | 4 +- src/middleware/tests/ldp/api.test.ts | 13 +- src/middleware/tests/ldp/binary.test.ts | 18 +- .../tests/ldp/container-path.test.ts | 4 +- src/middleware/tests/ldp/container.test.ts | 8 +- .../tests/ldp/content-negotiation.test.ts | 13 +- src/middleware/tests/ldp/headers.test.ts | 12 +- src/middleware/tests/ldp/initialize.ts | 44 +- src/middleware/tests/ldp/resource.test.ts | 8 +- src/middleware/tests/ontologies/initialize.ts | 18 +- .../tests/ontologies/ontologies.test.ts | 18 +- src/middleware/tests/utils.ts | 16 +- src/middleware/tests/webId/webId.test.ts | 12 +- src/middleware/tests/webacl/groupCRUD.test.ts | 8 +- src/middleware/tests/webacl/initialize.ts | 18 +- src/middleware/tests/webacl/resource.test.ts | 9 +- .../tests/webacl/resourceCRUD.test.ts | 13 +- .../tests/webacl/sparql-injection.test.ts | 8 +- src/middleware/tests/webacl/utils.test.ts | 7 +- 322 files changed, 9671 insertions(+), 7599 deletions(-) diff --git a/src/middleware/packages/activitypub/constants.ts b/src/middleware/packages/activitypub/constants.ts index 4f627c0bb..8e1d68d2c 100644 --- a/src/middleware/packages/activitypub/constants.ts +++ b/src/middleware/packages/activitypub/constants.ts @@ -1,7 +1,5 @@ const appendPrefix = types => Object.fromEntries(Object.entries(types).map(([key, value]) => [key, AS_PREFIX + value])); - const AS_PREFIX = 'https://www.w3.org/ns/activitystreams#'; - const PUBLIC_URI = `${AS_PREFIX}Public`; const ACTIVITY_TYPES = { @@ -58,13 +56,7 @@ const OBJECT_TYPES = { VIDEO: 'Video' }; -module.exports = { - AS_PREFIX, - PUBLIC_URI, - ACTIVITY_TYPES, - ACTOR_TYPES, - OBJECT_TYPES, - FULL_ACTIVITY_TYPES: appendPrefix(ACTIVITY_TYPES), - FULL_ACTOR_TYPES: appendPrefix(ACTOR_TYPES), - FULL_OBJECT_TYPES: appendPrefix(OBJECT_TYPES) -}; +export { AS_PREFIX, PUBLIC_URI, ACTIVITY_TYPES, ACTOR_TYPES, OBJECT_TYPES }; +export const FULL_ACTIVITY_TYPES = appendPrefix(ACTIVITY_TYPES); +export const FULL_ACTOR_TYPES = appendPrefix(ACTOR_TYPES); +export const FULL_OBJECT_TYPES = appendPrefix(OBJECT_TYPES); diff --git a/src/middleware/packages/activitypub/containers.ts b/src/middleware/packages/activitypub/containers.ts index 8c14c6a7b..21abf7345 100644 --- a/src/middleware/packages/activitypub/containers.ts +++ b/src/middleware/packages/activitypub/containers.ts @@ -1,6 +1,6 @@ -const { FULL_ACTOR_TYPES, FULL_OBJECT_TYPES } = require('./constants'); +import { FULL_ACTOR_TYPES, FULL_OBJECT_TYPES } from './constants.ts'; -module.exports = [ +export default [ { path: '/as/actor', acceptedTypes: Object.values(FULL_ACTOR_TYPES) diff --git a/src/middleware/packages/activitypub/index.ts b/src/middleware/packages/activitypub/index.ts index 82a95cc2e..927b53298 100644 --- a/src/middleware/packages/activitypub/index.ts +++ b/src/middleware/packages/activitypub/index.ts @@ -1,15 +1,19 @@ -const constants = require('./constants'); - -module.exports = { - ActivityPubService: require('./services/activitypub'), - ActivityPubMigrationService: require('./services/migration'), - ActivityMappingService: require('./services/activity-mapping'), - RelayService: require('./services/relay'), - // Mixins - BotMixin: require('./mixins/bot'), - ActivitiesHandlerMixin: require('./mixins/activities-handler'), - // Misc. - matchActivity: require('./utils/matchActivity'), - containers: require('./containers'), - ...constants +import ActivityPubService from './services/activitypub/index.ts'; +import ActivityPubMigrationService from './services/migration.ts'; +import ActivityMappingService from './services/activity-mapping.ts'; +import RelayService from './services/relay.ts'; +import BotMixin from './mixins/bot.ts'; +import ActivitiesHandlerMixin from './mixins/activities-handler.ts'; +import matchActivity from './utils/matchActivity.ts'; +import containers from './containers.ts'; +export * from './constants.ts'; +export { + ActivityPubService, + ActivityPubMigrationService, + ActivityMappingService, + RelayService, + BotMixin, + ActivitiesHandlerMixin, + matchActivity, + containers }; diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts index 73b3ee586..c7ccddfcc 100644 --- a/src/middleware/packages/activitypub/mixins/activities-handler.ts +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -1,3 +1,5 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + const ActivitiesHandlerMixin = { dependencies: ['activitypub.side-effects'], async started() { @@ -24,28 +26,30 @@ const ActivitiesHandlerMixin = { } }, actions: { - async processActivity(ctx) { - const { key, boxType, dereferencedActivity, actorUri } = ctx.params; + processActivity: defineAction({ + async handler(ctx) { + const { key, boxType, dereferencedActivity, actorUri } = ctx.params; - const activityHandler = this.schema.activities[key]; + const activityHandler = this.schema.activities[key]; - if (!activityHandler) { - this.logger.warn(`Cannot process activity because no handler with key ${key} found`); - return dereferencedActivity; - } + if (!activityHandler) { + this.logger.warn(`Cannot process activity because no handler with key ${key} found`); + return dereferencedActivity; + } - if (boxType === 'inbox' && activityHandler.onReceive) { - return await activityHandler.onReceive.bind(this)(ctx, dereferencedActivity, actorUri); - } else if (boxType === 'outbox' && activityHandler.onEmit) { - return await activityHandler.onEmit.bind(this)(ctx, dereferencedActivity, actorUri); - } else { - this.logger.warn( - `Cannot process activity because no onReceive or onEmit methods are associated with with key ${key}` - ); - return dereferencedActivity; + if (boxType === 'inbox' && activityHandler.onReceive) { + return await activityHandler.onReceive.bind(this)(ctx, dereferencedActivity, actorUri); + } else if (boxType === 'outbox' && activityHandler.onEmit) { + return await activityHandler.onEmit.bind(this)(ctx, dereferencedActivity, actorUri); + } else { + this.logger.warn( + `Cannot process activity because no onReceive or onEmit methods are associated with with key ${key}` + ); + return dereferencedActivity; + } } - } + }) } -}; +} satisfies ServiceSchema; -module.exports = ActivitiesHandlerMixin; +export default ActivitiesHandlerMixin; diff --git a/src/middleware/packages/activitypub/mixins/await-activity.ts b/src/middleware/packages/activitypub/mixins/await-activity.ts index c4f24033b..d0ca34ddf 100644 --- a/src/middleware/packages/activitypub/mixins/await-activity.ts +++ b/src/middleware/packages/activitypub/mixins/await-activity.ts @@ -1,5 +1,5 @@ -const { delay } = require('../utils'); -const matchActivity = require('../utils/matchActivity'); +import { delay } from '../utils.ts'; +import matchActivity from '../utils/matchActivity.ts'; /** * Mixin used by the OutboxService and InboxService @@ -65,4 +65,4 @@ const AwaitActivityMixin = { } }; -module.exports = AwaitActivityMixin; +export default AwaitActivityMixin; diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index dbe8facd6..d3fa68a2e 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const { arrayOf } = require('@semapps/ldp'); -const { ACTOR_TYPES } = require('../constants'); -const { getSlugFromUri, getContainerFromUri } = require('../utils'); +import urlJoin from 'url-join'; +import { arrayOf } from '@semapps/ldp'; +import { ACTOR_TYPES } from '../constants.ts'; +import { getSlugFromUri, getContainerFromUri } from '../utils.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; const BotMixin = { settings: { @@ -68,18 +69,22 @@ const BotMixin = { } }, actions: { - getUri() { - return this.settings.actor.uri; - } + getUri: defineAction({ + handler() { + return this.settings.actor.uri; + } + }) }, events: { - 'activitypub.inbox.received'(ctx) { - if (this.inboxReceived) { - if (ctx.params.recipients.includes(this.settings.actor.uri)) { - this.inboxReceived(ctx.params.activity); + 'activitypub.inbox.received': defineServiceEvent({ + handler(ctx) { + if (this.inboxReceived) { + if (ctx.params.recipients.includes(this.settings.actor.uri)) { + this.inboxReceived(ctx.params.activity); + } } } - } + }) }, methods: { async getFollowers() { @@ -89,6 +94,6 @@ const BotMixin = { return arrayOf(result?.items); } } -}; +} satisfies ServiceSchema; -module.exports = BotMixin; +export default BotMixin; diff --git a/src/middleware/packages/activitypub/mixins/fake-queue.ts b/src/middleware/packages/activitypub/mixins/fake-queue.ts index 822d1a523..530b850b0 100644 --- a/src/middleware/packages/activitypub/mixins/fake-queue.ts +++ b/src/middleware/packages/activitypub/mixins/fake-queue.ts @@ -27,4 +27,4 @@ const FakeQueueMixin = { } }; -module.exports = FakeQueueMixin; +export default FakeQueueMixin; diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 7801992a3..4de70c632 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -1,9 +1,10 @@ -const Handlebars = require('handlebars'); -const matchActivity = require('../utils/matchActivity'); -const { ACTIVITY_TYPES } = require('../constants'); +import Handlebars from 'handlebars'; +import matchActivity from '../utils/matchActivity.ts'; +import { ACTIVITY_TYPES } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const ActivityMappingService = { - name: 'activity-mapping', + name: 'activity-mapping' as const, settings: { mappers: [], handlebars: { @@ -24,78 +25,86 @@ const ActivityMappingService = { } }, actions: { - async map(ctx) { - let { activity, locale, ...rest } = ctx.params; - - // If the activity is an Announce, match the announced activity - if (this.settings.matchAnnouncedActivities && activity.type === ACTIVITY_TYPES.ANNOUNCE) { - const announcedActivity = - typeof activity.object === 'string' - ? await ctx.call('activitypub.object.get', { objectUri: activity.object, actorUri: 'system' }) - : activity.object; - - activity = { - actor: activity.actor, // Ensure the actor is defined - ...announcedActivity - }; - } + map: defineAction({ + async handler(ctx) { + let { activity, locale, ...rest } = ctx.params; + + // If the activity is an Announce, match the announced activity + if (this.settings.matchAnnouncedActivities && activity.type === ACTIVITY_TYPES.ANNOUNCE) { + const announcedActivity = + typeof activity.object === 'string' + ? await ctx.call('activitypub.object.get', { objectUri: activity.object, actorUri: 'system' }) + : activity.object; - for (const mapper of this.mappers) { - const dereferencedActivity = await this.matchActivity(ctx, mapper.match, activity); + activity = { + actor: activity.actor, // Ensure the actor is defined + ...announcedActivity + }; + } - // If we have a match... - if (dereferencedActivity) { - // If mapping is false, we want the activity to be ignored - if (mapper.mapping === false) return; + for (const mapper of this.mappers) { + const dereferencedActivity = await this.matchActivity(ctx, mapper.match, activity); - const emitter = await ctx.call('activitypub.actor.get', { actorUri: activity.actor }); + // If we have a match... + if (dereferencedActivity) { + // If mapping is false, we want the activity to be ignored + if (mapper.mapping === false) return; - let emitterProfile = {}; - try { - emitterProfile = emitter.url - ? await ctx.call('activitypub.actor.getProfile', { actorUri: activity.actor }) - : {}; - } catch (e) { - this.logger.warn( - `Could not get profile of actor ${activity.actor} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})` + const emitter = await ctx.call('activitypub.actor.get', { actorUri: activity.actor }); + + let emitterProfile = {}; + try { + emitterProfile = emitter.url + ? await ctx.call('activitypub.actor.getProfile', { actorUri: activity.actor }) + : {}; + } catch (e) { + this.logger.warn( + `Could not get profile of actor ${activity.actor} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})` + ); + } + + const templateParams = { activity: dereferencedActivity, emitter, emitterProfile, ...rest }; + + return Object.fromEntries( + Object.entries(mapper.mapping).map(([key, value]) => { + // If the value is a function, it is a Handlebar template + if (typeof value === 'function') { + return [key, value(templateParams)]; + } + // If we have an object with locales mapping, look for the right locale + if (value[locale]) { + return [key, value[locale](templateParams)]; + } + throw new Error(`No ${locale} locale found for key ${key}`); + }) ); } - - const templateParams = { activity: dereferencedActivity, emitter, emitterProfile, ...rest }; - - return Object.fromEntries( - Object.entries(mapper.mapping).map(([key, value]) => { - // If the value is a function, it is a Handlebar template - if (typeof value === 'function') { - return [key, value(templateParams)]; - } - // If we have an object with locales mapping, look for the right locale - if (value[locale]) { - return [key, value[locale](templateParams)]; - } - throw new Error(`No ${locale} locale found for key ${key}`); - }) - ); } } - }, - async addMapper(ctx) { - const { match, mapping, priority = 1 } = ctx.params; + }), - if (!match || mapping === undefined) throw new Error('No object defined for match or mapping property'); + addMapper: defineAction({ + async handler(ctx) { + const { match, mapping, priority = 1 } = ctx.params; - this.mappers.push({ - match, - mapping: this.compileObject(mapping), - priority - }); + if (!match || mapping === undefined) throw new Error('No object defined for match or mapping property'); - // Reorder cached mappings - this.prioritizeMappers(); - }, - getMappers() { - return this.mappers; - } + this.mappers.push({ + match, + mapping: this.compileObject(mapping), + priority + }); + + // Reorder cached mappings + this.prioritizeMappers(); + } + }), + + getMappers: defineAction({ + handler() { + return this.mappers; + } + }) }, methods: { matchActivity(ctx, pattern, activityOrObject) { @@ -118,6 +127,14 @@ const ActivityMappingService = { ); } } -}; +} satisfies ServiceSchema; + +export default ActivityMappingService; -module.exports = ActivityMappingService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivityMappingService.name]: typeof ActivityMappingService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index 0c6cf226c..5896a1312 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -1,22 +1,23 @@ -const QueueMixin = require('moleculer-bull'); -const { as, sec } = require('@semapps/ontologies'); -const ActorService = require('./subservices/actor'); -const ActivityService = require('./subservices/activity'); -const ApiService = require('./subservices/api'); -const CollectionService = require('./subservices/collection'); -const FollowService = require('./subservices/follow'); -const InboxService = require('./subservices/inbox'); -const LikeService = require('./subservices/like'); -const ObjectService = require('./subservices/object'); -const OutboxService = require('./subservices/outbox'); -const CollectionsRegistryService = require('./subservices/collections-registry'); -const ReplyService = require('./subservices/reply'); -const ShareService = require('./subservices/share'); -const SideEffectsService = require('./subservices/side-effects'); -const FakeQueueMixin = require('../../mixins/fake-queue'); +import QueueMixin from 'moleculer-bull'; +import { as, sec } from '@semapps/ontologies'; +import ActorService from './subservices/actor.ts'; +import ActivityService from './subservices/activity.ts'; +import ApiService from './subservices/api.ts'; +import CollectionService from './subservices/collection/index.ts'; +import FollowService from './subservices/follow.ts'; +import InboxService from './subservices/inbox.ts'; +import LikeService from './subservices/like.ts'; +import ObjectService from './subservices/object.ts'; +import OutboxService from './subservices/outbox.ts'; +import CollectionsRegistryService from './subservices/collections-registry.ts'; +import ReplyService from './subservices/reply.ts'; +import ShareService from './subservices/share.ts'; +import SideEffectsService from './subservices/side-effects.ts'; +import FakeQueueMixin from '../../mixins/fake-queue.ts'; +import { ServiceSchema } from 'moleculer'; const ActivityPubService = { - name: 'activitypub', + name: 'activitypub' as const, settings: { baseUri: null, podProvider: false, @@ -144,6 +145,14 @@ const ActivityPubService = { await this.broker.call('ontologies.register', as); await this.broker.call('ontologies.register', sec); } -}; +} satisfies ServiceSchema; -module.exports = ActivityPubService; +export default ActivityPubService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivityPubService.name]: typeof ActivityPubService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts index aaf7ecaf0..f719ba418 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts @@ -1,5 +1,5 @@ -const { hasType, getId } = require('@semapps/ldp'); -const { ACTIVITY_TYPES } = require('../../../../constants'); +import { hasType, getId } from '@semapps/ldp'; +import { ACTIVITY_TYPES } from '../../../../constants.ts'; // const removeReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatcher, anon }) => { // if (recipientUris === 0 && !anon) return; @@ -133,4 +133,4 @@ const setRightsHandler = { } }; -module.exports = setRightsHandler; +export default setRightsHandler; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 9f039549f..da0a7bf9d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -1,12 +1,13 @@ -const { Errors: E } = require('moleculer-web'); -const { ControlledContainerMixin } = require('@semapps/ldp'); -const setRightsHandler = require('./activity-handlers/setRightsHandler'); -const { arrayOf } = require('../../../utils'); -const { PUBLIC_URI, FULL_ACTIVITY_TYPES } = require('../../../constants'); -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); +import { Errors as E } from 'moleculer-web'; +import { ControlledContainerMixin } from '@semapps/ldp'; +import setRightsHandler from './activity-handlers/setRightsHandler.ts'; +import { arrayOf } from '../../../utils.ts'; +import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const ActivityService = { - name: 'activitypub.activity', + name: 'activitypub.activity' as const, mixins: [ControlledContainerMixin, ActivitiesHandlerMixin], settings: { baseUri: null, @@ -28,63 +29,74 @@ const ActivityService = { }, dependencies: ['ldp.container'], actions: { - forbidden() { - throw new E.ForbiddenError(); - }, - async getRecipients(ctx) { - const { activity } = ctx.params; - const output = []; + forbidden: defineAction({ + handler() { + throw new E.ForbiddenError(); + } + }), + + getRecipients: defineAction({ + async handler(ctx) { + const { activity } = ctx.params; + const output = []; - const actor = activity.actor ? await ctx.call('activitypub.actor.get', { actorUri: activity.actor }) : {}; + const actor = activity.actor ? await ctx.call('activitypub.actor.get', { actorUri: activity.actor }) : {}; - for (const predicates of ['to', 'bto', 'cc', 'bcc']) { - if (activity[predicates]) { - for (const recipient of arrayOf(activity[predicates])) { - switch (recipient) { - // Skip public URI - case PUBLIC_URI: - case 'as:Public': - case 'Public': - break; + for (const predicates of ['to', 'bto', 'cc', 'bcc']) { + if (activity[predicates]) { + for (const recipient of arrayOf(activity[predicates])) { + switch (recipient) { + // Skip public URI + case PUBLIC_URI: + case 'as:Public': + case 'Public': + break; - // Sender's followers list - case actor.followers: - // Ignore remote followers list - // TODO Fetch remote followers list ? - if (recipient.startsWith(this.settings.baseUri)) { - const collection = await ctx.call('activitypub.collection.get', { - resourceUri: recipient, - webId: activity.actor - }); - if (collection && collection.items) output.push(...arrayOf(collection.items)); - } - break; + // Sender's followers list + case actor.followers: + // Ignore remote followers list + // TODO Fetch remote followers list ? + if (recipient.startsWith(this.settings.baseUri)) { + const collection = await ctx.call('activitypub.collection.get', { + resourceUri: recipient, + webId: activity.actor + }); + if (collection && collection.items) output.push(...arrayOf(collection.items)); + } + break; - // Simple actor URI - default: - output.push(recipient); - break; + // Simple actor URI + default: + output.push(recipient); + break; + } } } } + + // Remove duplicates + return [...new Set(output)]; } + }), - // Remove duplicates - return [...new Set(output)]; - }, - async getLocalRecipients(ctx) { - const { activity } = ctx.params; - const recipients = await this.actions.getRecipients({ activity }, { parentCtx: ctx }); - return recipients.filter(recipientUri => this.isLocalActor(recipientUri)); - }, - isPublic(ctx) { - const { activity } = ctx.params; - // We accept all three representations, as required by https://www.w3.org/TR/activitypub/#public-addressing - const publicRepresentations = [PUBLIC_URI, 'Public', 'as:Public']; - return arrayOf(activity.to).length > 0 - ? arrayOf(activity.to).some(r => publicRepresentations.includes(r)) - : false; - } + getLocalRecipients: defineAction({ + async handler(ctx) { + const { activity } = ctx.params; + const recipients = await this.actions.getRecipients({ activity }, { parentCtx: ctx }); + return recipients.filter(recipientUri => this.isLocalActor(recipientUri)); + } + }), + + isPublic: defineAction({ + handler(ctx) { + const { activity } = ctx.params; + // We accept all three representations, as required by https://www.w3.org/TR/activitypub/#public-addressing + const publicRepresentations = [PUBLIC_URI, 'Public', 'as:Public']; + return arrayOf(activity.to).length > 0 + ? arrayOf(activity.to).some(r => publicRepresentations.includes(r)) + : false; + } + }) }, methods: { isLocalActor(uri) { @@ -106,6 +118,14 @@ const ActivityService = { activities: { setRights: setRightsHandler } -}; +} satisfies ServiceSchema; + +export default ActivityService; -module.exports = ActivityService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivityService.name]: typeof ActivityService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 6b902e54a..be20dc904 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -1,12 +1,13 @@ -const fetch = require('node-fetch'); -const { namedNode, literal, triple, variable } = require('@rdfjs/data-model'); -const { arrayOf } = require('@semapps/ldp'); -const { ACTOR_TYPES, AS_PREFIX } = require('../../../constants'); -const { getSlugFromUri, waitForResource } = require('../../../utils'); +import fetch from 'node-fetch'; +import { namedNode, literal, triple, variable } from '@rdfjs/data-model'; +import { arrayOf } from '@semapps/ldp'; +import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; +import { getSlugFromUri, waitForResource } from '../../../utils.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const ActorService = { - name: 'activitypub.actor', + name: 'activitypub.actor' as const, dependencies: ['activitypub.collection', 'ldp', 'signature'], settings: { baseUri: null, @@ -14,159 +15,174 @@ const ActorService = { podProvider: false }, actions: { - async get(ctx) { - const { actorUri, webId } = ctx.params; - // If dataset is not in the meta, assume that actor is remote - if (ctx.meta.dataset && !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { - try { - // Don't return immediately the promise, or we won't be able to catch errors - const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, webId }); + get: defineAction({ + async handler(ctx) { + const { actorUri, webId } = ctx.params; + // If dataset is not in the meta, assume that actor is remote + if (ctx.meta.dataset && !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { + try { + // Don't return immediately the promise, or we won't be able to catch errors + const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, webId }); + return actor; + } catch (e) { + console.error(e); + return false; + } + } else { + const response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); + if (!response.ok) return false; + const actor = await response.json(); return actor; - } catch (e) { - console.error(e); - return false; } - } else { - const response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); - if (!response.ok) return false; - const actor = await response.json(); - return actor; - } - }, - async getProfile(ctx) { - const { actorUri, webId } = ctx.params; - const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); - // If the URL is not in the same domain as the actor, it is most likely not a profile - if (actor.url && new URL(actor.url).host === new URL(actorUri).host) { - return await ctx.call('ldp.resource.get', { resourceUri: actor.url, webId }); } - }, - async appendActorData(ctx) { - const { actorUri } = ctx.params; - const userData = await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx }); - const propertiesToAdd = this.settings.selectActorData ? this.settings.selectActorData(userData) : {}; - - if (!propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']) { - // Ensure at least one actor type, otherwise ActivityPub-specific properties (inbox, public key...) will not be added - const resourceType = arrayOf(userData.type || userData['@type']); - const includeActorType = resourceType.some(type => Object.values(ACTOR_TYPES).includes(type)); - if (!includeActorType) { - propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = `${AS_PREFIX}Person`; + }), + + getProfile: defineAction({ + async handler(ctx) { + const { actorUri, webId } = ctx.params; + const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); + // If the URL is not in the same domain as the actor, it is most likely not a profile + if (actor.url && new URL(actor.url).host === new URL(actorUri).host) { + return await ctx.call('ldp.resource.get', { resourceUri: actor.url, webId }); } } + }), - if (!propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername']) { - propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername'] = getSlugFromUri( - userData.id || userData['@id'] - ); - } + appendActorData: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; + const userData = await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx }); + const propertiesToAdd = this.settings.selectActorData ? this.settings.selectActorData(userData) : {}; - if (Object.keys(propertiesToAdd).length > 0) { - await ctx.call('ldp.resource.patch', { - resourceUri: actorUri, - triplesToAdd: Object.entries(propertiesToAdd).map(([predicate, subject]) => - triple( - namedNode(actorUri), - namedNode(predicate), - typeof subject === 'string' && subject.startsWith('http') ? namedNode(subject) : literal(subject) - ) - ), - webId: 'system' - }); + if (!propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']) { + // Ensure at least one actor type, otherwise ActivityPub-specific properties (inbox, public key...) will not be added + const resourceType = arrayOf(userData.type || userData['@type']); + const includeActorType = resourceType.some(type => Object.values(ACTOR_TYPES).includes(type)); + if (!includeActorType) { + propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = `${AS_PREFIX}Person`; + } + } + + if (!propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername']) { + propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername'] = getSlugFromUri( + userData.id || userData['@id'] + ); + } + + if (Object.keys(propertiesToAdd).length > 0) { + await ctx.call('ldp.resource.patch', { + resourceUri: actorUri, + triplesToAdd: Object.entries(propertiesToAdd).map(([predicate, subject]) => + triple( + namedNode(actorUri), + namedNode(predicate), + typeof subject === 'string' && subject.startsWith('http') ? namedNode(subject) : literal(subject) + ) + ), + webId: 'system' + }); + } } - }, - async addEndpoint(ctx) { - const { actorUri, predicate, endpoint } = ctx.params; - - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - const dataset = account.username; - - await ctx.call('triplestore.update', { - query: { - type: 'update', - updates: [ - { - updateType: 'insertdelete', - insert: [ - { - type: 'graph', - name: namedNode(actorUri), - triples: [ - triple( - namedNode(actorUri), - namedNode('https://www.w3.org/ns/activitystreams#endpoints'), - variable('endpoints') - ), - triple(variable('endpoints'), namedNode(predicate), namedNode(endpoint)) - ] - } - ], - delete: [], - where: [ - { - type: 'optional', - patterns: [ - { - type: 'graph', - name: namedNode(actorUri), - triples: [ - triple( - namedNode(actorUri), - namedNode('https://www.w3.org/ns/activitystreams#endpoints'), - variable('b0') - ) - ] - } - ] - }, - { - type: 'bind', - variable: variable('endpoints'), - expression: { - type: 'operation', - operator: 'if', - args: [ - { - type: 'operation', - operator: 'bound', - args: [variable('b0')] - }, - variable('b0'), + }), + + addEndpoint: defineAction({ + async handler(ctx) { + const { actorUri, predicate, endpoint } = ctx.params; + + const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + const dataset = account.username; + + await ctx.call('triplestore.update', { + query: { + type: 'update', + updates: [ + { + updateType: 'insertdelete', + insert: [ + { + type: 'graph', + name: namedNode(actorUri), + triples: [ + triple( + namedNode(actorUri), + namedNode('https://www.w3.org/ns/activitystreams#endpoints'), + variable('endpoints') + ), + triple(variable('endpoints'), namedNode(predicate), namedNode(endpoint)) + ] + } + ], + delete: [], + where: [ + { + type: 'optional', + patterns: [ { - type: 'operation', - operator: 'BNODE', - args: [] + type: 'graph', + name: namedNode(actorUri), + triples: [ + triple( + namedNode(actorUri), + namedNode('https://www.w3.org/ns/activitystreams#endpoints'), + variable('b0') + ) + ] } ] + }, + { + type: 'bind', + variable: variable('endpoints'), + expression: { + type: 'operation', + operator: 'if', + args: [ + { + type: 'operation', + operator: 'bound', + args: [variable('b0')] + }, + variable('b0'), + { + type: 'operation', + operator: 'BNODE', + args: [] + } + ] + } } - } - ] - } - ] - }, - webId: 'system', - dataset - }); - }, - async awaitCreateComplete(ctx) { - const { actorUri, additionalKeys = [], delayMs = 1000, maxTries = 20 } = ctx.params; - const keysToCheck = ['publicKey', 'outbox', 'inbox', 'followers', 'following', ...additionalKeys]; - - return await waitForResource( - delayMs, - keysToCheck, - maxTries, - async () => await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx, meta: { $cache: false } }) - ); - }, - getCollectionUri: { + ] + } + ] + }, + webId: 'system', + dataset + }); + } + }), + + awaitCreateComplete: defineAction({ + async handler(ctx) { + const { actorUri, additionalKeys = [], delayMs = 1000, maxTries = 20 } = ctx.params; + const keysToCheck = ['publicKey', 'outbox', 'inbox', 'followers', 'following', ...additionalKeys]; + + return await waitForResource( + delayMs, + keysToCheck, + maxTries, + async () => await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx, meta: { $cache: false } }) + ); + } + }), + + getCollectionUri: defineAction({ cache: true, async handler(ctx) { const { actorUri, predicate, webId } = ctx.params; const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); return actor && actor[predicate]; } - } + }) }, methods: { isActor(resource) { @@ -174,25 +190,41 @@ const ActorService = { } }, events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - if (this.isActor(newData)) { - await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); - await ctx.call('signature.keypair.generate', { actorUri: resourceUri }); - await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData } = ctx.params; + if (this.isActor(newData)) { + await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); + await ctx.call('signature.keypair.generate', { actorUri: resourceUri }); + await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); + } } - }, - async 'ldp.resource.deleted'(ctx) { - const { resourceUri, oldData } = ctx.params; - if (this.isActor(oldData)) { - await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, oldData } = ctx.params; + if (this.isActor(oldData)) { + await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); + } } - }, - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); - } + }), + + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; + await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); + } + }) } -}; +} satisfies ServiceSchema; + +export default ActorService; -module.exports = ActorService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ActorService.name]: typeof ActorService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index e801359fb..286f64817 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const path = require('path'); -const { arrayOf } = require('@semapps/ldp'); -const { +import urlJoin from 'url-join'; +import path from 'path'; +import { arrayOf } from '@semapps/ldp'; + +import { parseUrl, parseHeader, parseRawBody, @@ -10,11 +11,13 @@ const { parseJson, parseFile, saveDatasetMeta -} = require('@semapps/middlewares'); -const { FULL_ACTOR_TYPES } = require('../../../constants'); +} from '@semapps/middlewares'; + +import { FULL_ACTOR_TYPES } from '../../../constants.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; const ApiService = { - name: 'activitypub.api', + name: 'activitypub.api' as const, settings: { baseUri: null, podProvider: false @@ -43,54 +46,61 @@ const ApiService = { } }, actions: { - async inbox(ctx) { - const { actorSlug, ...activity } = ctx.params; - const { requestUrl } = ctx.meta; - const { origin } = new URL(this.settings.baseUri); + inbox: defineAction({ + async handler(ctx) { + const { actorSlug, ...activity } = ctx.params; + const { requestUrl } = ctx.meta; + const { origin } = new URL(this.settings.baseUri); - await ctx.call('activitypub.inbox.post', { - collectionUri: urlJoin(origin, requestUrl), - ...activity - }); + await ctx.call('activitypub.inbox.post', { + collectionUri: urlJoin(origin, requestUrl), + ...activity + }); + + ctx.meta.$statusCode = 202; + } + }), - ctx.meta.$statusCode = 202; - }, - async outbox(ctx) { - let { actorSlug, ...activity } = ctx.params; - const { requestUrl } = ctx.meta; - const { origin } = new URL(this.settings.baseUri); + outbox: defineAction({ + async handler(ctx) { + let { actorSlug, ...activity } = ctx.params; + const { requestUrl } = ctx.meta; + const { origin } = new URL(this.settings.baseUri); - activity = await ctx.call('activitypub.outbox.post', { - collectionUri: urlJoin(origin, requestUrl), - ...activity - }); + activity = await ctx.call('activitypub.outbox.post', { + collectionUri: urlJoin(origin, requestUrl), + ...activity + }); - ctx.meta.$responseHeaders = { - Location: activity.id || activity['@id'], - 'Content-Length': 0 - }; - // We need to set this also here (in addition to above) or we get a Moleculer warning - ctx.meta.$location = activity.id || activity['@id']; - ctx.meta.$statusCode = 201; - } + ctx.meta.$responseHeaders = { + Location: activity.id || activity['@id'], + 'Content-Length': 0 + }; + // We need to set this also here (in addition to above) or we get a Moleculer warning + ctx.meta.$location = activity.id || activity['@id']; + ctx.meta.$statusCode = 201; + } + }) }, events: { - async 'ldp.registry.registered'(ctx) { - const { container } = ctx.params; - const { pathname: basePath } = new URL(this.settings.baseUri); - const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { - key: 'resourcesWithContainerPath' - }); - if ( - !this.settings.podProvider && - resourcesWithContainerPath && - arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) - ) { - await ctx.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) + 'ldp.registry.registered': defineServiceEvent({ + async handler(ctx) { + const { container } = ctx.params; + const { pathname: basePath } = new URL(this.settings.baseUri); + const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { + key: 'resourcesWithContainerPath' }); + if ( + !this.settings.podProvider && + resourcesWithContainerPath && + arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) + ) { + await ctx.call('api.addRoute', { + route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) + }); + } } - } + }) }, methods: { getBoxesRoute(actorsPath) { @@ -120,6 +130,14 @@ const ApiService = { }; } } -}; +} satisfies ServiceSchema; + +export default ApiService; -module.exports = ApiService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ApiService.name]: typeof ApiService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index cf38400f0..2535bd30a 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,6 +1,7 @@ -const { sanitizeSparqlUri } = require('@semapps/triplestore'); +import { sanitizeSparqlUri } from '@semapps/triplestore'; const { MoleculerError } = require('moleculer').Errors; -const { getValueFromDataType } = require('../../../../../utils'); +import { getValueFromDataType } from '../../../../../utils.ts'; +import { defineAction } from 'moleculer'; /** * Retrieves the collection metadata from the triplestore @@ -283,7 +284,7 @@ function formatResponse( }; } -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -356,4 +357,6 @@ module.exports = { context: jsonContext || localContext }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 4888bb6ad..59774efdf 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -1,11 +1,12 @@ const { MoleculerError } = require('moleculer').Errors; -const { ControlledContainerMixin, arrayOf, getDatasetFromUri } = require('@semapps/ldp'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const { Errors: E } = require('moleculer-web'); -const getAction = require('./actions/get'); +import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/ldp'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { Errors as E } from 'moleculer-web'; +import getAction from './actions/get.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const CollectionService = { - name: 'activitypub.collection', + name: 'activitypub.collection' as const, mixins: [ControlledContainerMixin], settings: { podProvider: false, @@ -48,240 +49,271 @@ const CollectionService = { }, dependencies: ['triplestore', 'ldp.resource'], actions: { - put() { - throw new E.ForbiddenError(); - }, - async patch(ctx) { - const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri, webId }); - if (!collectionExist) { - throw new MoleculerError( - `Cannot update content of non-existing collection ${collectionUri}`, - 400, - 'BAD_REQUEST' - ); + put: defineAction({ + handler() { + throw new E.ForbiddenError(); } + }), + + patch: defineAction({ + async handler(ctx) { + const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri, webId }); + if (!collectionExist) { + throw new MoleculerError( + `Cannot update content of non-existing collection ${collectionUri}`, + 400, + 'BAD_REQUEST' + ); + } - if (triplesToAdd) { - for (const triple of triplesToAdd) { - if ( - triple.subject.value === collectionUri && - triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' - ) { - const itemUri = triple.object.value; - await ctx.call('activitypub.collection.add', { collectionUri, itemUri }); + if (triplesToAdd) { + for (const triple of triplesToAdd) { + if ( + triple.subject.value === collectionUri && + triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' + ) { + const itemUri = triple.object.value; + await ctx.call('activitypub.collection.add', { collectionUri, itemUri }); + } } } - } - if (triplesToRemove) { - for (const triple of triplesToRemove) { - if ( - triple.subject.value === collectionUri && - triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' - ) { - const itemUri = triple.object.value; - await ctx.call('activitypub.collection.remove', { collectionUri, itemUri }); + if (triplesToRemove) { + for (const triple of triplesToRemove) { + if ( + triple.subject.value === collectionUri && + triple.predicate.value === 'https://www.w3.org/ns/activitystreams#items' + ) { + const itemUri = triple.object.value; + await ctx.call('activitypub.collection.remove', { collectionUri, itemUri }); + } } } } - }, - async post(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - } + }), - await this.actions.waitForContainerCreation({ containerUri: ctx.params.containerUri }); + post: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } - const ordered = arrayOf(ctx.params.resource.type).includes('OrderedCollection'); + await this.actions.waitForContainerCreation({ containerUri: ctx.params.containerUri }); - // TODO Use ShEx to check collection validity - if (!ordered && (ctx.params.resource['semapps:sortPredicate'] || ctx.params.resource['semapps:sortOrder'])) { - throw new Error(`Non-ordered collections cannot include semapps:sortPredicate or semapps:sortOrder predicates`); - } + const ordered = arrayOf(ctx.params.resource.type).includes('OrderedCollection'); + + // TODO Use ShEx to check collection validity + if (!ordered && (ctx.params.resource['semapps:sortPredicate'] || ctx.params.resource['semapps:sortOrder'])) { + throw new Error( + `Non-ordered collections cannot include semapps:sortPredicate or semapps:sortOrder predicates` + ); + } + + // Set default values + if (!ctx.params.resource['semapps:dereferenceItems']) ctx.params.resource['semapps:dereferenceItems'] = false; + if (ordered) { + if (!ctx.params.resource['semapps:sortPredicate']) + ctx.params.resource['semapps:sortPredicate'] = 'as:published'; + if (!ctx.params.resource['semapps:sortOrder']) ctx.params.resource['semapps:sortOrder'] = 'semapps:DescOrder'; + } - // Set default values - if (!ctx.params.resource['semapps:dereferenceItems']) ctx.params.resource['semapps:dereferenceItems'] = false; - if (ordered) { - if (!ctx.params.resource['semapps:sortPredicate']) - ctx.params.resource['semapps:sortPredicate'] = 'as:published'; - if (!ctx.params.resource['semapps:sortOrder']) ctx.params.resource['semapps:sortOrder'] = 'semapps:DescOrder'; + return await ctx.call('ldp.container.post', ctx.params); } + }), - return await ctx.call('ldp.container.post', ctx.params); - }, - /* - * Checks if the collection is empty - * @param collectionUri The full URI of the collection - * @return true if the collection is empty - */ - - async isEmpty(ctx) { - const { collectionUri } = ctx.params; - const res = await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX as: - SELECT ( Count(?items) as ?count ) - WHERE { - GRAPH <${collectionUri}> { - <${collectionUri}> as:items ?items . + isEmpty: defineAction({ + /* + * Checks if the collection is empty + * @param collectionUri The full URI of the collection + * @return true if the collection is empty + */ + + async handler(ctx) { + const { collectionUri } = ctx.params; + const res = await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX as: + SELECT ( Count(?items) as ?count ) + WHERE { + GRAPH <${collectionUri}> { + <${collectionUri}> as:items ?items . + } } - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - return Number(res[0].count.value) === 0; - }, - /* - * Checks if an item is in a collection - * @param collectionUri The full URI of the collection - * @param itemUri The full URI of the item - * @return true if the collection exists - */ - async includes(ctx) { - const { collectionUri, itemUri } = ctx.params; - if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.includes'); - return await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX as: - ASK - WHERE { - GRAPH <${collectionUri}> { - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items <${itemUri}> . + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + return Number(res[0].count.value) === 0; + } + }), + + includes: defineAction({ + /* + * Checks if an item is in a collection + * @param collectionUri The full URI of the collection + * @param itemUri The full URI of the item + * @return true if the collection exists + */ + async handler(ctx) { + const { collectionUri, itemUri } = ctx.params; + if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.includes'); + return await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX as: + ASK + WHERE { + GRAPH <${collectionUri}> { + <${collectionUri}> a as:Collection . + <${collectionUri}> as:items <${itemUri}> . + } } - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - }, - /* - * Attach an object to a collection - * @param collectionUri The full URI of the collection - * @param item The resource to add to the collection - */ - async add(ctx) { - let { collectionUri, item, itemUri } = ctx.params; - if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; - if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.add'); - - // TODO also check external resources - // const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri: itemUri }); - // if (!resourceExist) throw new Error('Cannot attach a non-existing resource !') - - // TODO check why thrown error is lost and process is stopped - const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!collectionExist) - throw new Error(`Cannot attach to a non-existing collection: ${collectionUri} (dataset: ${ctx.meta.dataset})`); - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - INSERT DATA { - GRAPH <${collectionUri}> { - <${collectionUri}> <${itemUri}> + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + } + }), + + add: defineAction({ + /* + * Attach an object to a collection + * @param collectionUri The full URI of the collection + * @param item The resource to add to the collection + */ + async handler(ctx) { + let { collectionUri, item, itemUri } = ctx.params; + if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; + if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.add'); + + // TODO also check external resources + // const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri: itemUri }); + // if (!resourceExist) throw new Error('Cannot attach a non-existing resource !') + + // TODO check why thrown error is lost and process is stopped + const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!collectionExist) + throw new Error( + `Cannot attach to a non-existing collection: ${collectionUri} (dataset: ${ctx.meta.dataset})` + ); + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + INSERT DATA { + GRAPH <${collectionUri}> { + <${collectionUri}> <${itemUri}> + } } - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - - await ctx.emit('activitypub.collection.added', { - collectionUri, - itemUri - }); - }, - /* - * Detach an object from a collection - * @param collectionUri The full URI of the collection - * @param item The resource to remove from the collection - */ - async remove(ctx) { - let { collectionUri, item, itemUri } = ctx.params; - if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; - if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.remove'); - - const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!collectionExist) throw new Error(`Cannot detach from a non-existing collection: ${collectionUri}`); - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - DELETE - WHERE { - GRAPH <${collectionUri}> { - <${collectionUri}> <${itemUri}> + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + + await ctx.emit('activitypub.collection.added', { + collectionUri, + itemUri + }); + } + }), + + remove: defineAction({ + /* + * Detach an object from a collection + * @param collectionUri The full URI of the collection + * @param item The resource to remove from the collection + */ + async handler(ctx) { + let { collectionUri, item, itemUri } = ctx.params; + if (!itemUri && item) itemUri = typeof item === 'object' ? item.id || item['@id'] : item; + if (!itemUri) throw new Error('No valid item URI provided for activitypub.collection.remove'); + + const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!collectionExist) throw new Error(`Cannot detach from a non-existing collection: ${collectionUri}`); + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + DELETE + WHERE { + GRAPH <${collectionUri}> { + <${collectionUri}> <${itemUri}> + } } - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - - await ctx.emit('activitypub.collection.removed', { - collectionUri, - itemUri - }); - }, + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + + await ctx.emit('activitypub.collection.removed', { + collectionUri, + itemUri + }); + } + }), + get: getAction, - /* - * Empty the collection, deleting all items it contains. - * @param collectionUri The full URI of the collection - */ - async clear(ctx) { - const { collectionUri } = ctx.params; - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX as: - DELETE { - GRAPH ?g1 { - ?s1 ?p1 ?o1 . - } - } - WHERE { - GRAPH <${collectionUri}> { - <${collectionUri}> as:items ?s1 . - } - GRAPH ?g1 { - ?s1 ?p1 ?o1 . + + clear: defineAction({ + /* + * Empty the collection, deleting all items it contains. + * @param collectionUri The full URI of the collection + */ + async handler(ctx) { + const { collectionUri } = ctx.params; + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX as: + DELETE { + GRAPH ?g1 { + ?s1 ?p1 ?o1 . + } } - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); - }, - /* - * Get the owner of collections attached to actors - * @param collectionUri The full URI of the collection - * @param collectionKey The key of the collection (eg. inbox) - */ - async getOwner(ctx) { - const { collectionUri, collectionKey } = ctx.params; - - // Inboxes use the LDP ontology (LDN) - const prefix = collectionKey === 'inbox' ? 'ldp' : 'as'; - - const results = await ctx.call('triplestore.query', { - query: ` - PREFIX as: - PREFIX ldp: - SELECT ?actorUri - WHERE { - GRAPH ?g { - ?actorUri ${prefix}:${collectionKey} <${collectionUri}> + WHERE { + GRAPH <${collectionUri}> { + <${collectionUri}> as:items ?s1 . + } + GRAPH ?g1 { + ?s1 ?p1 ?o1 . + } + } + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); + } + }), + + getOwner: defineAction({ + /* + * Get the owner of collections attached to actors + * @param collectionUri The full URI of the collection + * @param collectionKey The key of the collection (eg. inbox) + */ + async handler(ctx) { + const { collectionUri, collectionKey } = ctx.params; + + // Inboxes use the LDP ontology (LDN) + const prefix = collectionKey === 'inbox' ? 'ldp' : 'as'; + + const results = await ctx.call('triplestore.query', { + query: ` + PREFIX as: + PREFIX ldp: + SELECT ?actorUri + WHERE { + GRAPH ?g { + ?actorUri ${prefix}:${collectionKey} <${collectionUri}> + } } - } - `, - dataset: this.getCollectionDataset(collectionUri), - webId: 'system' - }); + `, + dataset: this.getCollectionDataset(collectionUri), + webId: 'system' + }); - return results.length > 0 ? results[0].actorUri.value : null; - } + return results.length > 0 ? results[0].actorUri.value : null; + } + }) }, methods: { getCollectionDataset(collectionUri) { @@ -289,6 +321,14 @@ const CollectionService = { return getDatasetFromUri(collectionUri); } } -}; +} satisfies ServiceSchema; -module.exports = CollectionService; +export default CollectionService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [CollectionService.name]: typeof CollectionService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 913ee52bd..69dfcf988 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -1,11 +1,12 @@ -const urlJoin = require('url-join'); -const { quad, namedNode } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { getWebIdFromUri, arrayOf } = require('@semapps/ldp'); -const { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } = require('../../../constants'); +import urlJoin from 'url-join'; +import { quad, namedNode } from '@rdfjs/data-model'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { getWebIdFromUri, arrayOf } from '@semapps/ldp'; +import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; const CollectionsRegistryService = { - name: 'activitypub.collections-registry', + name: 'activitypub.collections-registry' as const, settings: { baseUri: null, podProvider: false @@ -16,182 +17,204 @@ const CollectionsRegistryService = { this.collectionsInCreation = []; }, actions: { - async register(ctx) { - let { path, name, attachToTypes, ...options } = ctx.params; - if (!name) name = path; + register: defineAction({ + async handler(ctx) { + let { path, name, attachToTypes, ...options } = ctx.params; + if (!name) name = path; - // Ignore undefined options - Object.keys(options).forEach(key => (options[key] === undefined || options[key] === null) && delete options[key]); + // Ignore undefined options + Object.keys(options).forEach( + key => (options[key] === undefined || options[key] === null) && delete options[key] + ); - // Persist the collection in memory - this.registeredCollections.push({ path, name, attachToTypes, ...options }); - }, - list() { - return this.registeredCollections; - }, - async createAndAttachCollection(ctx) { - const { objectUri, collection } = ctx.params; - const { - path, - attachPredicate, - ordered, - summary, - dereferenceItems, - itemsPerPage, - sortPredicate, - sortOrder, - permissions - } = collection || {}; - const collectionUri = urlJoin(objectUri, path); + // Persist the collection in memory + this.registeredCollections.push({ path, name, attachToTypes, ...options }); + } + }), - const exists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!exists && !this.collectionsInCreation.includes(collectionUri)) { - // Prevent race conditions by keeping the collections being created in memory - this.collectionsInCreation.push(collectionUri); + list: defineAction({ + handler() { + return this.registeredCollections; + } + }), + + createAndAttachCollection: defineAction({ + async handler(ctx) { + const { objectUri, collection } = ctx.params; + const { + path, + attachPredicate, + ordered, + summary, + dereferenceItems, + itemsPerPage, + sortPredicate, + sortOrder, + permissions + } = collection || {}; + const collectionUri = urlJoin(objectUri, path); - // Create the collection - await ctx.call('activitypub.collection.post', { - resource: { - type: ordered ? ['Collection', 'OrderedCollection'] : 'Collection', - summary, - 'semapps:dereferenceItems': dereferenceItems, - 'semapps:itemsPerPage': itemsPerPage, - 'semapps:sortPredicate': sortPredicate, - 'semapps:sortOrder': sortOrder - }, - contentType: MIME_TYPES.JSON, - webId: this.settings.podProvider ? getWebIdFromUri(objectUri) : 'system', - permissions, // Handled by the WebAclMiddleware, if present - forcedResourceUri: path ? collectionUri : undefined // Bypass the automatic URI generation - }); + const exists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!exists && !this.collectionsInCreation.includes(collectionUri)) { + // Prevent race conditions by keeping the collections being created in memory + this.collectionsInCreation.push(collectionUri); - // Attach it to the object - await ctx.call( - 'ldp.resource.patch', - { - resourceUri: objectUri, - triplesToAdd: [quad(namedNode(objectUri), namedNode(attachPredicate), namedNode(collectionUri))], - webId: 'system' - }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger an Update + // Create the collection + await ctx.call('activitypub.collection.post', { + resource: { + type: ordered ? ['Collection', 'OrderedCollection'] : 'Collection', + summary, + 'semapps:dereferenceItems': dereferenceItems, + 'semapps:itemsPerPage': itemsPerPage, + 'semapps:sortPredicate': sortPredicate, + 'semapps:sortOrder': sortOrder + }, + contentType: MIME_TYPES.JSON, + webId: this.settings.podProvider ? getWebIdFromUri(objectUri) : 'system', + permissions, // Handled by the WebAclMiddleware, if present + forcedResourceUri: path ? collectionUri : undefined // Bypass the automatic URI generation + }); + + // Attach it to the object + await ctx.call( + 'ldp.resource.patch', + { + resourceUri: objectUri, + triplesToAdd: [quad(namedNode(objectUri), namedNode(attachPredicate), namedNode(collectionUri))], + webId: 'system' + }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger an Update + } } - } - ); + ); + + // Now the collection has been created, we can remove it (this way we don't use too much memory) + this.collectionsInCreation = this.collectionsInCreation.filter(c => c !== collectionUri); + } - // Now the collection has been created, we can remove it (this way we don't use too much memory) - this.collectionsInCreation = this.collectionsInCreation.filter(c => c !== collectionUri); + return collectionUri; } + }), - return collectionUri; - }, - async deleteCollection(ctx) { - const { objectUri, collection } = ctx.params; - const resourceUri = urlJoin(objectUri, collection.path); + deleteCollection: defineAction({ + async handler(ctx) { + const { objectUri, collection } = ctx.params; + const resourceUri = urlJoin(objectUri, collection.path); - const exists = await ctx.call('activitypub.collection.exist', { resourceUri, webId: 'system' }); - if (exists) { - // Delete the collection - await ctx.call('activitypub.collection.delete', { resourceUri, webId: 'system' }); + const exists = await ctx.call('activitypub.collection.exist', { resourceUri, webId: 'system' }); + if (exists) { + // Delete the collection + await ctx.call('activitypub.collection.delete', { resourceUri, webId: 'system' }); + } } - }, - async createAndAttachMissingCollections(ctx) { - for (const collection of this.registeredCollections) { - this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); + }), - const accounts = await this.broker.call('auth.account.find'); - const datasets = this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; + createAndAttachMissingCollections: defineAction({ + async handler(ctx) { + for (const collection of this.registeredCollections) { + this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); + + const accounts = await this.broker.call('auth.account.find'); + const datasets = this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; - for (let dataset of datasets) { - // Find all containers where we want to attach this collection - const containers = await ctx.call('ldp.registry.getByType', { type: collection.attachToTypes, dataset }); - for (const container of Object.values(containers)) { - const containerUri = urlJoin(this.settings.baseUri, container.fullPath); - this.logger.info(`Looking for resources in container ${containerUri}`); - const resources = await ctx.call('ldp.container.getUris', { containerUri }); - for (const resourceUri of resources) { - await this.actions.createAndAttachCollection( - { - objectUri: resourceUri, - collection - }, - { parentCtx: ctx } - ); + for (let dataset of datasets) { + // Find all containers where we want to attach this collection + const containers = await ctx.call('ldp.registry.getByType', { type: collection.attachToTypes, dataset }); + for (const container of Object.values(containers)) { + const containerUri = urlJoin(this.settings.baseUri, container.fullPath); + this.logger.info(`Looking for resources in container ${containerUri}`); + const resources = await ctx.call('ldp.container.getUris', { containerUri }); + for (const resourceUri of resources) { + await this.actions.createAndAttachCollection( + { + objectUri: resourceUri, + collection + }, + { parentCtx: ctx } + ); + } } } } } - }, - async updateCollectionsOptions(ctx) { - let { collection, dataset } = ctx.params; - let { attachPredicate, ordered, summary, dereferenceItems, itemsPerPage, sortPredicate, sortOrder } = - collection || {}; + }), - attachPredicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: attachPredicate }); - sortPredicate = sortPredicate && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortPredicate })); - sortOrder = sortOrder && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortOrder })); + updateCollectionsOptions: defineAction({ + async handler(ctx) { + let { collection, dataset } = ctx.params; + let { attachPredicate, ordered, summary, dereferenceItems, itemsPerPage, sortPredicate, sortOrder } = + collection || {}; - const accounts = await this.broker.call('auth.account.find'); - const datasets = dataset ? [dataset] : this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; + attachPredicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: attachPredicate }); + sortPredicate = + sortPredicate && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortPredicate })); + sortOrder = sortOrder && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortOrder })); - for (dataset of datasets) { - this.logger.info(`Getting all collections in dataset ${dataset} attached with predicate ${attachPredicate}...`); + const accounts = await this.broker.call('auth.account.find'); + const datasets = dataset ? [dataset] : this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; - const results = await ctx.call('triplestore.query', { - query: ` - SELECT ?collectionUri - WHERE { - GRAPH ?g { - ?objectUri <${attachPredicate}> ?collectionUri - } - } - `, - webId: 'system', - dataset - }); + for (dataset of datasets) { + this.logger.info( + `Getting all collections in dataset ${dataset} attached with predicate ${attachPredicate}...` + ); - for (const collectionUri of results.map(r => r.collectionUri.value)) { - if (this.isLocalObject(collectionUri, urlJoin(this.settings.baseUri, dataset))) { - this.logger.info(`Updating options of ${collectionUri}...`); - await ctx.call('triplestore.update', { - query: ` - PREFIX as: - PREFIX semapps: - WITH <${collectionUri}> - DELETE { - <${collectionUri}> - a ?type ; - as:summary ?summary ; - semapps:dereferenceItems ?dereferenceItems ; - semapps:itemsPerPage ?itemsPerPage ; - semapps:sortPredicate ?sortPredicate ; - semapps:sortOrder ?sortOrder . - } - INSERT { - <${collectionUri}> a ${ordered ? 'as:OrderedCollection, as:Collection' : 'as:Collection'} . - ${summary ? `<${collectionUri}> as:summary "${summary}" .` : ''} - <${collectionUri}> semapps:dereferenceItems ${dereferenceItems} . - ${itemsPerPage ? `<${collectionUri}> semapps:itemsPerPage ${itemsPerPage} .` : ''} - ${sortPredicate ? `<${collectionUri}> semapps:sortPredicate <${sortPredicate}> .` : ''} - ${sortOrder ? `<${collectionUri}> semapps:sortOrder <${sortOrder}> .` : ''} + const results = await ctx.call('triplestore.query', { + query: ` + SELECT ?collectionUri + WHERE { + GRAPH ?g { + ?objectUri <${attachPredicate}> ?collectionUri } - WHERE { - <${collectionUri}> a ?type - OPTIONAL { <${collectionUri}> as:summary ?summary . } - OPTIONAL { <${collectionUri}> semapps:dereferenceItems ?dereferenceItems . } - OPTIONAL { <${collectionUri}> semapps:itemsPerPage ?itemsPerPage . } - OPTIONAL { <${collectionUri}> semapps:sortPredicate ?sortPredicate . } - OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } - } - `, - webId: 'system', - dataset - }); + } + `, + webId: 'system', + dataset + }); + + for (const collectionUri of results.map(r => r.collectionUri.value)) { + if (this.isLocalObject(collectionUri, urlJoin(this.settings.baseUri, dataset))) { + this.logger.info(`Updating options of ${collectionUri}...`); + await ctx.call('triplestore.update', { + query: ` + PREFIX as: + PREFIX semapps: + WITH <${collectionUri}> + DELETE { + <${collectionUri}> + a ?type ; + as:summary ?summary ; + semapps:dereferenceItems ?dereferenceItems ; + semapps:itemsPerPage ?itemsPerPage ; + semapps:sortPredicate ?sortPredicate ; + semapps:sortOrder ?sortOrder . + } + INSERT { + <${collectionUri}> a ${ordered ? 'as:OrderedCollection, as:Collection' : 'as:Collection'} . + ${summary ? `<${collectionUri}> as:summary "${summary}" .` : ''} + <${collectionUri}> semapps:dereferenceItems ${dereferenceItems} . + ${itemsPerPage ? `<${collectionUri}> semapps:itemsPerPage ${itemsPerPage} .` : ''} + ${sortPredicate ? `<${collectionUri}> semapps:sortPredicate <${sortPredicate}> .` : ''} + ${sortOrder ? `<${collectionUri}> semapps:sortOrder <${sortOrder}> .` : ''} + } + WHERE { + <${collectionUri}> a ?type + OPTIONAL { <${collectionUri}> as:summary ?summary . } + OPTIONAL { <${collectionUri}> semapps:dereferenceItems ?dereferenceItems . } + OPTIONAL { <${collectionUri}> semapps:itemsPerPage ?itemsPerPage . } + OPTIONAL { <${collectionUri}> semapps:sortPredicate ?sortPredicate . } + OPTIONAL { <${collectionUri}> semapps:sortOrder ?sortOrder . } + } + `, + webId: 'system', + dataset + }); + } } } } - } + }) }, methods: { // Get the collections attached to the given type @@ -236,22 +259,9 @@ const CollectionsRegistryService = { } }, events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - const collections = this.getCollectionsByType(newData.type || newData['@type']); - for (const collection of collections) { - if (this.isActor(newData.type || newData['@type'])) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } else { - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } - } - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData, oldData } = ctx.params; - // Check if we need to create collection only if the type has changed - if (this.hasTypeChanged(oldData, newData)) { + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData } = ctx.params; const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { if (this.isActor(newData.type || newData['@type'])) { @@ -262,42 +272,74 @@ const CollectionsRegistryService = { } } } - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri, triplesAdded } = ctx.params; - if (triplesAdded) { - for (const triple of triplesAdded) { - if (triple.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { - const collections = this.getCollectionsByType(triple.object.value); - for (const collection of collections) { - if (this.isActor(triple.object.value)) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection }, - { parentCtx: ctx } - ); - } else { - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection }, - { parentCtx: ctx } - ); + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData, oldData } = ctx.params; + // Check if we need to create collection only if the type has changed + if (this.hasTypeChanged(oldData, newData)) { + const collections = this.getCollectionsByType(newData.type || newData['@type']); + for (const collection of collections) { + if (this.isActor(newData.type || newData['@type'])) { + // If the resource is an actor, use the resource URI as the webId + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); + } else { + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); + } + } + } + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, triplesAdded } = ctx.params; + if (triplesAdded) { + for (const triple of triplesAdded) { + if (triple.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { + const collections = this.getCollectionsByType(triple.object.value); + for (const collection of collections) { + if (this.isActor(triple.object.value)) { + // If the resource is an actor, use the resource URI as the webId + await this.actions.createAndAttachCollection( + { objectUri: resourceUri, collection }, + { parentCtx: ctx } + ); + } else { + await this.actions.createAndAttachCollection( + { objectUri: resourceUri, collection }, + { parentCtx: ctx } + ); + } } } } } } - }, - async 'ldp.resource.deleted'(ctx) { - const { oldData } = ctx.params; - const collections = this.getCollectionsByType(oldData.type || oldData['@type']); - for (const collection of collections) { - await this.actions.deleteCollection( - { objectUri: oldData.id || oldData['@id'], collection }, - { parentCtx: ctx } - ); + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + const { oldData } = ctx.params; + const collections = this.getCollectionsByType(oldData.type || oldData['@type']); + for (const collection of collections) { + await this.actions.deleteCollection( + { objectUri: oldData.id || oldData['@id'], collection }, + { parentCtx: ctx } + ); + } } - } + }) } -}; +} satisfies ServiceSchema; -module.exports = CollectionsRegistryService; +export default CollectionsRegistryService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [CollectionsRegistryService.name]: typeof CollectionsRegistryService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index 291aebeb4..96685fe04 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -1,9 +1,10 @@ -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, ACTOR_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const FollowService = { - name: 'activitypub.follow', + name: 'activitypub.follow' as const, mixins: [ActivitiesHandlerMixin], settings: { baseUri: null, @@ -30,95 +31,112 @@ const FollowService = { await this.broker.call('activitypub.collections-registry.register', this.settings.followingCollectionOptions); }, actions: { - async addFollower(ctx) { - const { follower, following } = ctx.params; - - if (this.isLocalActor(following)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); - if (actor.followers) { - await ctx.call('activitypub.collection.add', { - collectionUri: actor.followers, - item: follower - }); + addFollower: defineAction({ + async handler(ctx) { + const { follower, following } = ctx.params; + + if (this.isLocalActor(following)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); + if (actor.followers) { + await ctx.call('activitypub.collection.add', { + collectionUri: actor.followers, + item: follower + }); + } } - } - // Add reverse relation - if (this.isLocalActor(follower)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - if (actor.following) { - await ctx.call('activitypub.collection.add', { - collectionUri: actor.following, - item: following - }); + // Add reverse relation + if (this.isLocalActor(follower)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); + if (actor.following) { + await ctx.call('activitypub.collection.add', { + collectionUri: actor.following, + item: following + }); + } } + + ctx.emit('activitypub.follow.added', { follower, following }, { meta: { webId: null, dataset: null } }); } + }), - ctx.emit('activitypub.follow.added', { follower, following }, { meta: { webId: null, dataset: null } }); - }, - async removeFollower(ctx) { - const { follower, following } = ctx.params; - - if (this.isLocalActor(following)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); - if (actor.followers) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.followers, - item: follower - }); + removeFollower: defineAction({ + async handler(ctx) { + const { follower, following } = ctx.params; + + if (this.isLocalActor(following)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); + if (actor.followers) { + await ctx.call('activitypub.collection.remove', { + collectionUri: actor.followers, + item: follower + }); + } + } + + // Add reverse relation + if (this.isLocalActor(follower)) { + const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); + if (actor.following) { + await ctx.call('activitypub.collection.remove', { + collectionUri: actor.following, + item: following + }); + } } + + ctx.emit('activitypub.follow.removed', { follower, following }, { meta: { webId: null, dataset: null } }); } + }), + + isFollowing: defineAction({ + async handler(ctx) { + const { follower, following } = ctx.params; + + if (!this.isLocalActor(follower)) + throw new Error('The method activitypub.follow.isFollowing currently only works with local actors'); - // Add reverse relation - if (this.isLocalActor(follower)) { const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - if (actor.following) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.following, - item: following - }); - } + return await ctx.call('activitypub.collection.includes', { + collectionUri: actor.following, + itemUri: following + }); } + }), - ctx.emit('activitypub.follow.removed', { follower, following }, { meta: { webId: null, dataset: null } }); - }, - async isFollowing(ctx) { - const { follower, following } = ctx.params; + listFollowers: defineAction({ + async handler(ctx) { + const { collectionUri } = ctx.params; - if (!this.isLocalActor(follower)) - throw new Error('The method activitypub.follow.isFollowing currently only works with local actors'); + return await ctx.call('activitypub.collection.get', { + resourceUri: collectionUri + }); + } + }), - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - return await ctx.call('activitypub.collection.includes', { - collectionUri: actor.following, - itemUri: following - }); - }, - async listFollowers(ctx) { - const { collectionUri } = ctx.params; + listFollowing: defineAction({ + async handler(ctx) { + const { collectionUri } = ctx.params; - return await ctx.call('activitypub.collection.get', { - resourceUri: collectionUri - }); - }, - async listFollowing(ctx) { - const { collectionUri } = ctx.params; + return await ctx.call('activitypub.collection.get', { + resourceUri: collectionUri + }); + } + }), - return await ctx.call('activitypub.collection.get', { - resourceUri: collectionUri - }); - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.followersCollectionOptions, - dataset - }); - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.followingCollectionOptions, - dataset - }); - } + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.followersCollectionOptions, + dataset + }); + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.followingCollectionOptions, + dataset + }); + } + }) }, activities: { follow: { @@ -217,6 +235,14 @@ const FollowService = { return uri.startsWith(this.settings.baseUri); } } -}; +} satisfies ServiceSchema; + +export default FollowService; -module.exports = FollowService; +declare global { + export namespace Moleculer { + export interface AllServices { + [FollowService.name]: typeof FollowService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 3d6d9abb5..f879d90d6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,12 +1,13 @@ -const { Errors: E } = require('moleculer-web'); +import { Errors as E } from 'moleculer-web'; const { MoleculerError } = require('moleculer').Errors; -const { collectionPermissionsWithAnonRead } = require('../../../utils'); -const { ACTOR_TYPES } = require('../../../constants'); -const AwaitActivityMixin = require('../../../mixins/await-activity'); +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import { ACTOR_TYPES } from '../../../constants.ts'; +import AwaitActivityMixin from '../../../mixins/await-activity.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const InboxService = { - name: 'activitypub.inbox', + name: 'activitypub.inbox' as const, mixins: [AwaitActivityMixin], settings: { podProvider: false, @@ -27,164 +28,180 @@ const InboxService = { await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - async post(ctx) { - const { collectionUri, ...activity } = ctx.params; + post: defineAction({ + async handler(ctx) { + const { collectionUri, ...activity } = ctx.params; - if (!collectionUri || !collectionUri.startsWith('http')) { - throw new Error(`The collectionUri ${collectionUri} is not a valid URL`); - } + if (!collectionUri || !collectionUri.startsWith('http')) { + throw new Error(`The collectionUri ${collectionUri} is not a valid URL`); + } - if (!(await ctx.call('ldp.resource.exist', { resourceUri: collectionUri, webId: 'system' }))) { - throw E.NotFoundError(); - } + if (!(await ctx.call('ldp.resource.exist', { resourceUri: collectionUri, webId: 'system' }))) { + throw E.NotFoundError(); + } - // Ensure the actor in the activity is the same as the posting actor - // (When posting, the webId is the one of the poster) - if (activity.actor !== ctx.meta.webId) { - throw new E.UnAuthorizedError('INVALID_ACTOR', 'Activity actor is not the same as the posting actor'); - } + // Ensure the actor in the activity is the same as the posting actor + // (When posting, the webId is the one of the poster) + if (activity.actor !== ctx.meta.webId) { + throw new E.UnAuthorizedError('INVALID_ACTOR', 'Activity actor is not the same as the posting actor'); + } - const inboxOwner = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'inbox' }); + const inboxOwner = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'inbox' }); - // Verify that the account exists and has not been deleted - const account = await ctx.call('auth.account.findByWebId', { webId: inboxOwner }); - if (!account) throw new E.NotFoundError(); - if (account.deletedAt) throw new MoleculerError(`User does not exist anymore`, 410, 'GONE'); + // Verify that the account exists and has not been deleted + const account = await ctx.call('auth.account.findByWebId', { webId: inboxOwner }); + if (!account) throw new E.NotFoundError(); + if (account.deletedAt) throw new MoleculerError(`User does not exist anymore`, 410, 'GONE'); - if (this.settings.podProvider) { - ctx.meta.dataset = account.username; - } + if (this.settings.podProvider) { + ctx.meta.dataset = account.username; + } - // We want the next operations to be done by the system - // TODO check if we can avoid this, as this is a bad practice - ctx.meta.webId = 'system'; + // We want the next operations to be done by the system + // TODO check if we can avoid this, as this is a bad practice + ctx.meta.webId = 'system'; - const collectionExists = await ctx.call('activitypub.collection.exist', { - resourceUri: collectionUri, - webId: 'system' - }); - if (!collectionExists) { - throw new E.NotFoundError(); - } + const collectionExists = await ctx.call('activitypub.collection.exist', { + resourceUri: collectionUri, + webId: 'system' + }); + if (!collectionExists) { + throw new E.NotFoundError(); + } - if (!ctx.meta.skipSignatureValidation) { - if (!ctx.meta.rawBody || !ctx.meta.originalHeaders) - throw new Error(`Cannot validate HTTP signature because of missing meta (rawBody or originalHeaders)`); + if (!ctx.meta.skipSignatureValidation) { + if (!ctx.meta.rawBody || !ctx.meta.originalHeaders) + throw new Error(`Cannot validate HTTP signature because of missing meta (rawBody or originalHeaders)`); - const validDigest = await ctx.call('signature.verifyDigest', { - body: ctx.meta.rawBody, // Stored by parseRawBody middleware - headers: ctx.meta.originalHeaders - }); + const validDigest = await ctx.call('signature.verifyDigest', { + body: ctx.meta.rawBody, // Stored by parseRawBody middleware + headers: ctx.meta.originalHeaders + }); - const { isValid: validSignature } = await ctx.call('signature.verifyHttpSignature', { - url: collectionUri, - method: 'POST', - headers: ctx.meta.originalHeaders - }); + const { isValid: validSignature } = await ctx.call('signature.verifyHttpSignature', { + url: collectionUri, + method: 'POST', + headers: ctx.meta.originalHeaders + }); - if (!validDigest || !validSignature) { - throw new E.UnAuthorizedError('INVALID_SIGNATURE'); + if (!validDigest || !validSignature) { + throw new E.UnAuthorizedError('INVALID_SIGNATURE'); + } } - } - // TODO check activity is valid + // TODO check activity is valid - try { - await this.broker.call('activitypub.side-effects.processInbox', { activity, recipients: [inboxOwner] }); - } catch (e) { - // If some processors failed, log error message but don't stop - this.logger.error(e.message); - } - - // If this is a transient activity, we have no way to retrieve it - // so do not store it in the inbox (Mastodon works the same way) - if (activity.id && !activity.id.includes('#')) { - // Save the remote activity in the local triple store - await ctx.call('ldp.remote.store', { - resource: activity, - keepInSync: false, // Activities are immutable - webId: inboxOwner - }); + try { + await this.broker.call('activitypub.side-effects.processInbox', { activity, recipients: [inboxOwner] }); + } catch (e) { + // If some processors failed, log error message but don't stop + this.logger.error(e.message); + } - // Attach the activity to the activities container, in order to use the container options - await ctx.call('activitypub.activity.attach', { - resourceUri: activity.id, - webId: this.settings.podProvider ? inboxOwner : 'system' - }); + // If this is a transient activity, we have no way to retrieve it + // so do not store it in the inbox (Mastodon works the same way) + if (activity.id && !activity.id.includes('#')) { + // Save the remote activity in the local triple store + await ctx.call('ldp.remote.store', { + resource: activity, + keepInSync: false, // Activities are immutable + webId: inboxOwner + }); + + // Attach the activity to the activities container, in order to use the container options + await ctx.call('activitypub.activity.attach', { + resourceUri: activity.id, + webId: this.settings.podProvider ? inboxOwner : 'system' + }); + + // Attach the activity to the inbox + await ctx.call('activitypub.collection.add', { + collectionUri, + item: activity + }); + } else { + // If the activity cannot be retrieved, pass the full object + // This will be used in particular for Solid notifications + // which will send the full activity to the listeners + ctx.emit( + 'activitypub.collection.added', + { + collectionUri, + item: activity + }, + { meta: { webId: null, dataset: null } } + ); + } - // Attach the activity to the inbox - await ctx.call('activitypub.collection.add', { - collectionUri, - item: activity - }); - } else { - // If the activity cannot be retrieved, pass the full object - // This will be used in particular for Solid notifications - // which will send the full activity to the listeners ctx.emit( - 'activitypub.collection.added', + 'activitypub.inbox.received', { - collectionUri, - item: activity + activity, + recipients: [inboxOwner], + local: false }, { meta: { webId: null, dataset: null } } ); } - - ctx.emit( - 'activitypub.inbox.received', - { - activity, - recipients: [inboxOwner], - local: false - }, - { meta: { webId: null, dataset: null } } - ); - }, - async getByDates(ctx) { - const { collectionUri, fromDate, toDate } = ctx.params; - - const filters = []; - if (fromDate) filters.push(`?published >= "${fromDate.toISOString()}"^^xsd:dateTime`); - if (toDate) filters.push(`?published < "${toDate.toISOString()}"^^xsd:dateTime`); - - const results = await ctx.call('triplestore.query', { - query: ` - PREFIX as: - PREFIX xsd: - SELECT DISTINCT ?activityUri - WHERE { - GRAPH <${collectionUri}> { - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items ?activityUri . - } - GRAPH ?g { - ?activityUri as:published ?published . - ${filters ? `FILTER (${filters.join(' && ')})` : ''} + }), + + getByDates: defineAction({ + async handler(ctx) { + const { collectionUri, fromDate, toDate } = ctx.params; + + const filters = []; + if (fromDate) filters.push(`?published >= "${fromDate.toISOString()}"^^xsd:dateTime`); + if (toDate) filters.push(`?published < "${toDate.toISOString()}"^^xsd:dateTime`); + + const results = await ctx.call('triplestore.query', { + query: ` + PREFIX as: + PREFIX xsd: + SELECT DISTINCT ?activityUri + WHERE { + GRAPH <${collectionUri}> { + <${collectionUri}> a as:Collection . + <${collectionUri}> as:items ?activityUri . + } + GRAPH ?g { + ?activityUri as:published ?published . + ${filters ? `FILTER (${filters.join(' && ')})` : ''} + } } - } - ORDER BY ?published - `, - webId: 'system' - }); + ORDER BY ?published + `, + webId: 'system' + }); - const activities = []; + const activities = []; - for (const activityUri of results.filter(node => node.activityUri).map(node => node.activityUri.value)) { - const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' }); - activities.push(activity); + for (const activityUri of results.filter(node => node.activityUri).map(node => node.activityUri.value)) { + const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' }); + activities.push(activity); + } + + return activities; } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset + }); + } + }) + } +} satisfies ServiceSchema; - return activities; - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); +export default InboxService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [InboxService.name]: typeof InboxService; } } -}; - -module.exports = InboxService; +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 8cae157ca..d673187a3 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -1,9 +1,10 @@ -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, ACTOR_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const LikeService = { - name: 'activitypub.like', + name: 'activitypub.like' as const, mixins: [ActivitiesHandlerMixin], settings: { baseUri: null, @@ -29,69 +30,83 @@ const LikeService = { await this.broker.call('activitypub.collections-registry.register', this.settings.likedCollectionOptions); }, actions: { - async addObjectToActorLikedCollection(ctx) { - const { actorUri, objectUri } = ctx.params; + addObjectToActorLikedCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; - const actor = await ctx.call('activitypub.actor.get', { actorUri }); + const actor = await ctx.call('activitypub.actor.get', { actorUri }); + + // If a liked collection is attached to the actor, attach the object + if (actor.liked) { + await ctx.call('activitypub.collection.add', { + collectionUri: actor.liked, + item: objectUri + }); + } + } + }), + + addActorToObjectLikesCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; + + const likesCollectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { + objectUri, + collection: this.settings.likesCollectionOptions + }); - // If a liked collection is attached to the actor, attach the object - if (actor.liked) { await ctx.call('activitypub.collection.add', { - collectionUri: actor.liked, - item: objectUri + collectionUri: likesCollectionUri, + item: actorUri }); } - }, - async addActorToObjectLikesCollection(ctx) { - const { actorUri, objectUri } = ctx.params; - - const likesCollectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { - objectUri, - collection: this.settings.likesCollectionOptions - }); + }), - await ctx.call('activitypub.collection.add', { - collectionUri: likesCollectionUri, - item: actorUri - }); - }, - async removeObjectFromActorLikedCollection(ctx) { - const { actorUri, objectUri } = ctx.params; + removeObjectFromActorLikedCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; - const actor = await ctx.call('activitypub.actor.get', { actorUri }); + const actor = await ctx.call('activitypub.actor.get', { actorUri }); - // If a liked collection is attached to the actor, detach the object - if (actor.liked) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.liked, - item: objectUri - }); + // If a liked collection is attached to the actor, detach the object + if (actor.liked) { + await ctx.call('activitypub.collection.remove', { + collectionUri: actor.liked, + item: objectUri + }); + } } - }, - async removeActorFromObjectLikesCollection(ctx) { - const { actorUri, objectUri } = ctx.params; + }), - const object = await ctx.call('activitypub.object.get', { objectUri, actorUri }); + removeActorFromObjectLikesCollection: defineAction({ + async handler(ctx) { + const { actorUri, objectUri } = ctx.params; - // If a likes collection is attached to the object, detach the actor - if (object.likes) { - await ctx.call('activitypub.collection.remove', { - collectionUri: object.likes, - item: actorUri + const object = await ctx.call('activitypub.object.get', { objectUri, actorUri }); + + // If a likes collection is attached to the object, detach the actor + if (object.likes) { + await ctx.call('activitypub.collection.remove', { + collectionUri: object.likes, + item: actorUri + }); + } + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.likesCollectionOptions, + dataset + }); + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.likedCollectionOptions, + dataset }); } - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.likesCollectionOptions, - dataset - }); - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.likedCollectionOptions, - dataset - }); - } + }) }, activities: { likeObject: { @@ -173,6 +188,14 @@ const LikeService = { } } } -}; +} satisfies ServiceSchema; -module.exports = LikeService; +export default LikeService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LikeService.name]: typeof LikeService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 7bea90f4b..47fb4927d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,8 +1,9 @@ -const { getType } = require('@semapps/ldp'); -const { OBJECT_TYPES, ACTIVITY_TYPES } = require('../../../constants'); +import { getType } from '@semapps/ldp'; +import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; const ObjectService = { - name: 'activitypub.object', + name: 'activitypub.object' as const, settings: { baseUri: null, podProvider: false, @@ -10,205 +11,228 @@ const ObjectService = { }, dependencies: ['ldp.resource'], actions: { - async get(ctx) { - const { objectUri, actorUri, ...rest } = ctx.params; - - // If the object is already dereferenced, return it - if (typeof objectUri !== 'string') return objectUri; - - return await ctx.call('ldp.resource.get', { - resourceUri: objectUri, - webId: actorUri, - ...rest - }); - }, - // If an object is passed directly, wrap it in a Create activity - async wrap(ctx) { - const { activity } = ctx.params; - - if (Object.values(OBJECT_TYPES).includes(getType(activity))) { - const { to, cc, '@id': id, ...object } = activity; - return { - '@context': object['@context'], - type: ACTIVITY_TYPES.CREATE, - to, - cc, - actor: object.attributedTo, - object - }; - } else { - return activity; + get: defineAction({ + async handler(ctx) { + const { objectUri, actorUri, ...rest } = ctx.params; + + // If the object is already dereferenced, return it + if (typeof objectUri !== 'string') return objectUri; + + return await ctx.call('ldp.resource.get', { + resourceUri: objectUri, + webId: actorUri, + ...rest + }); } - }, - async process(ctx) { - let { activity, actorUri } = ctx.params; - let objectUri; - - switch (getType(activity)) { - case ACTIVITY_TYPES.CREATE: { - // If the object passed is an URI, this is an announcement and there is nothing to process - if (typeof activity.object === 'string') break; - - const types = await ctx.call('jsonld.parser.expandTypes', { - types: activity.object.type || activity.object['@type'], - context: activity['@context'] - }); - - // TODO: attach to all matching containers - let container, containerUri; - - if (this.settings.podProvider) { - // If this is a Pod provider, find the container with the type-registrations service - for (const type of types) { - const containersUris = await ctx.call('type-registrations.findContainersUris', { - type, - webId: actorUri - }); - if (containersUris.length > 0) { - containerUri = containersUris[0]; - continue; + }), + + wrap: defineAction({ + // If an object is passed directly, wrap it in a Create activity + async handler(ctx) { + const { activity } = ctx.params; + + if (Object.values(OBJECT_TYPES).includes(getType(activity))) { + const { to, cc, '@id': id, ...object } = activity; + return { + '@context': object['@context'], + type: ACTIVITY_TYPES.CREATE, + to, + cc, + actor: object.attributedTo, + object + }; + } else { + return activity; + } + } + }), + + process: defineAction({ + async handler(ctx) { + let { activity, actorUri } = ctx.params; + let objectUri; + + switch (getType(activity)) { + case ACTIVITY_TYPES.CREATE: { + // If the object passed is an URI, this is an announcement and there is nothing to process + if (typeof activity.object === 'string') break; + + const types = await ctx.call('jsonld.parser.expandTypes', { + types: activity.object.type || activity.object['@type'], + context: activity['@context'] + }); + + // TODO: attach to all matching containers + let container, containerUri; + + if (this.settings.podProvider) { + // If this is a Pod provider, find the container with the type-registrations service + for (const type of types) { + const containersUris = await ctx.call('type-registrations.findContainersUris', { + type, + webId: actorUri + }); + if (containersUris.length > 0) { + containerUri = containersUris[0]; + continue; + } + } + } else { + // Otherwise try to find it with the LdpRegistry + container = await ctx.call('ldp.registry.getByType', { type: types }); + if (container) { + containerUri = await ctx.call('ldp.registry.getUri', { + path: container.path, + webId: actorUri + }); } } - } else { - // Otherwise try to find it with the LdpRegistry - container = await ctx.call('ldp.registry.getByType', { type: types }); - if (container) { - containerUri = await ctx.call('ldp.registry.getUri', { - path: container.path, - webId: actorUri - }); - } - } - if (!containerUri) - throw new Error(`Cannot create resource of type "${types.join(', ')}", no matching containers were found!`); + if (!containerUri) + throw new Error( + `Cannot create resource of type "${types.join(', ')}", no matching containers were found!` + ); - objectUri = await ctx.call( - container?.controlledActions?.post || 'ldp.container.post', - { - containerUri, - resource: activity.object, - webId: actorUri - }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger another Create action + objectUri = await ctx.call( + container?.controlledActions?.post || 'ldp.container.post', + { + containerUri, + resource: activity.object, + webId: actorUri + }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger another Create action + } } - } - ); - break; - } + ); + break; + } - case ACTIVITY_TYPES.UPDATE: { - // If the object passed is an URI, this is an announcement and there is nothing to process - if (typeof activity.object === 'string') break; + case ACTIVITY_TYPES.UPDATE: { + // If the object passed is an URI, this is an announcement and there is nothing to process + if (typeof activity.object === 'string') break; - objectUri = activity.object['@id'] || activity.object.id; + objectUri = activity.object['@id'] || activity.object.id; - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: objectUri }); + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: objectUri }); - await ctx.call( - controlledActions?.put || 'ldp.resource.put', - { - resource: activity.object, - webId: actorUri - }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger another Update action + await ctx.call( + controlledActions?.put || 'ldp.resource.put', + { + resource: activity.object, + webId: actorUri + }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger another Update action + } } - } - ); + ); - break; - } + break; + } - case ACTIVITY_TYPES.DELETE: { - if (activity.object) { - const resourceUri = typeof activity.object === 'string' ? activity.object : activity.object.id; - // If the resource is already deleted, it means it was an announcement - if (await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' })) { - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); - - await ctx.call( - controlledActions?.delete || 'ldp.resource.delete', - { resourceUri, webId: actorUri }, - { - meta: { - skipObjectsWatcher: true // We don't want to trigger another Delete action + case ACTIVITY_TYPES.DELETE: { + if (activity.object) { + const resourceUri = typeof activity.object === 'string' ? activity.object : activity.object.id; + // If the resource is already deleted, it means it was an announcement + if (await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' })) { + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); + + await ctx.call( + controlledActions?.delete || 'ldp.resource.delete', + { resourceUri, webId: actorUri }, + { + meta: { + skipObjectsWatcher: true // We don't want to trigger another Delete action + } } - } - ); + ); + } + } else { + this.logger.warn('Cannot delete object as it is undefined'); } - } else { - this.logger.warn('Cannot delete object as it is undefined'); + break; } - break; + + default: + break; } - default: - break; - } + if (objectUri) { + activity.object = await ctx.call( + 'ldp.resource.get', + { + resourceUri: objectUri, + webId: actorUri + }, + { meta: { $cache: false } } + ); + } - if (objectUri) { - activity.object = await ctx.call( - 'ldp.resource.get', - { - resourceUri: objectUri, - webId: actorUri + return activity; + } + }), + + createTombstone: defineAction({ + async handler(ctx) { + const { resourceUri, formerType } = ctx.params; + const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); + + // We need to recreate the document as it has been deleted + // TODO See how we can avoid this since it will not work with NextGraph + await ctx.call('triplestore.document.create', { documentUri: resourceUri }); + + // Insert directly the Tombstone in the triple store to avoid resource creation side-effects + await ctx.call('triplestore.insert', { + resource: { + '@id': resourceUri, + '@type': 'https://www.w3.org/ns/activitystreams#Tombstone', + 'https://www.w3.org/ns/activitystreams#formerType': expandedFormerTypes.map(type => ({ '@id': type })), + 'https://www.w3.org/ns/activitystreams#deleted': { + '@value': new Date().toISOString(), + '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' + } }, - { meta: { $cache: false } } - ); + graphName: resourceUri, + webId: 'system' + }); } - - return activity; - }, - async createTombstone(ctx) { - const { resourceUri, formerType } = ctx.params; - const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); - - // We need to recreate the document as it has been deleted - // TODO See how we can avoid this since it will not work with NextGraph - await ctx.call('triplestore.document.create', { documentUri: resourceUri }); - - // Insert directly the Tombstone in the triple store to avoid resource creation side-effects - await ctx.call('triplestore.insert', { - resource: { - '@id': resourceUri, - '@type': 'https://www.w3.org/ns/activitystreams#Tombstone', - 'https://www.w3.org/ns/activitystreams#formerType': expandedFormerTypes.map(type => ({ '@id': type })), - 'https://www.w3.org/ns/activitystreams#deleted': { - '@value': new Date().toISOString(), - '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' - } - }, - graphName: resourceUri, - webId: 'system' - }); - } + }) }, events: { - async 'ldp.resource.deleted'(ctx) { - // Check if tombstones are globally activated - if (this.settings.activateTombstones) { - const { resourceUri, containersUris, oldData, dataset } = ctx.params; - - // If the resource was in no container, skip... - if (containersUris.length > 0) { - // Check if tombstones are activated for this specific container - const containerOptions = await ctx.call('ldp.registry.getByUri', { - containerUri: containersUris[0], - dataset - }); - - if (containerOptions.activateTombstones !== false && ctx.meta.activateTombstones !== false) { - const formerType = oldData.type || oldData['@type']; - await this.actions.createTombstone({ resourceUri, formerType }, { meta: { dataset }, parentCtx: ctx }); + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + // Check if tombstones are globally activated + if (this.settings.activateTombstones) { + const { resourceUri, containersUris, oldData, dataset } = ctx.params; + + // If the resource was in no container, skip... + if (containersUris.length > 0) { + // Check if tombstones are activated for this specific container + const containerOptions = await ctx.call('ldp.registry.getByUri', { + containerUri: containersUris[0], + dataset + }); + + if (containerOptions.activateTombstones !== false && ctx.meta.activateTombstones !== false) { + const formerType = oldData.type || oldData['@type']; + await this.actions.createTombstone({ resourceUri, formerType }, { meta: { dataset }, parentCtx: ctx }); + } } } } - } + }) } -}; +} satisfies ServiceSchema; -module.exports = ObjectService; +export default ObjectService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ObjectService.name]: typeof ObjectService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index 248419e3a..cc8adf52f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -1,10 +1,11 @@ -const fetch = require('node-fetch'); -const { Errors: E } = require('moleculer-web'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { getType, arrayOf } = require('@semapps/ldp'); -const { collectionPermissionsWithAnonRead, getSlugFromUri } = require('../../../utils'); -const { ACTOR_TYPES } = require('../../../constants'); -const AwaitActivityMixin = require('../../../mixins/await-activity'); +import fetch from 'node-fetch'; +import { Errors as E } from 'moleculer-web'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { getType, arrayOf } from '@semapps/ldp'; +import { collectionPermissionsWithAnonRead, getSlugFromUri } from '../../../utils.ts'; +import { ACTOR_TYPES } from '../../../constants.ts'; +import AwaitActivityMixin from '../../../mixins/await-activity.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const queueOptions = process.env.NODE_ENV === 'test' @@ -19,7 +20,7 @@ const queueOptions = }; const OutboxService = { - name: 'activitypub.outbox', + name: 'activitypub.outbox' as const, mixins: [AwaitActivityMixin], settings: { baseUri: null, @@ -41,139 +42,144 @@ const OutboxService = { await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - async post(ctx) { - let { collectionUri, username, transient, ...activity } = ctx.params; - let activityUri; - - const collectionExists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!collectionExists) { - throw new E.NotFoundError(); - } - - const actorUri = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'outbox' }); - if (!actorUri) { - throw new E.BadRequestError('INVALID_COLLECTION', 'The collection is not a valid ActivityPub outbox'); - } - - // Ensure logged user is posting to his own outbox - if (ctx.meta.webId && ctx.meta.webId !== 'system' && actorUri !== ctx.meta.webId) { - throw new E.UnAuthorizedError( - 'UNAUTHORIZED', - `Forbidden to post to the outbox ${collectionUri} (webId ${ctx.meta.webId})` - ); - } + post: defineAction({ + async handler(ctx) { + let { collectionUri, username, transient, ...activity } = ctx.params; + let activityUri; + + const collectionExists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); + if (!collectionExists) { + throw new E.NotFoundError(); + } - if (this.settings.podProvider) { - ctx.meta.dataset = getSlugFromUri(actorUri); - } + const actorUri = await ctx.call('activitypub.collection.getOwner', { collectionUri, collectionKey: 'outbox' }); + if (!actorUri) { + throw new E.BadRequestError('INVALID_COLLECTION', 'The collection is not a valid ActivityPub outbox'); + } - if (!activity['@context']) { - activity['@context'] = await ctx.call('jsonld.context.get'); - } + // Ensure logged user is posting to his own outbox + if (ctx.meta.webId && ctx.meta.webId !== 'system' && actorUri !== ctx.meta.webId) { + throw new E.UnAuthorizedError( + 'UNAUTHORIZED', + `Forbidden to post to the outbox ${collectionUri} (webId ${ctx.meta.webId})` + ); + } - // Wrap object in Create activity, if necessary - activity = await ctx.call('activitypub.object.wrap', { activity }); + if (this.settings.podProvider) { + ctx.meta.dataset = getSlugFromUri(actorUri); + } - if (!ctx.meta.doNotProcessObject && transient !== true) { - // Process object create, update or delete - // and return an activity with the object ID - activity = await ctx.call('activitypub.object.process', { activity, actorUri }); - } + if (!activity['@context']) { + activity['@context'] = await ctx.call('jsonld.context.get'); + } - if (!activity.actor) { - activity.actor = actorUri; - } + // Wrap object in Create activity, if necessary + activity = await ctx.call('activitypub.object.wrap', { activity }); - // Use the current time for the activity's publish date - activity.published = new Date().toISOString(); + if (!ctx.meta.doNotProcessObject && transient !== true) { + // Process object create, update or delete + // and return an activity with the object ID + activity = await ctx.call('activitypub.object.process', { activity, actorUri }); + } - if (transient === true) { - // Object or actor URI + hash with lower case activity - activityUri = `${activity.object || activity.actor}#${arrayOf(getType(activity))[0].toLowerCase()}`; - activity = { id: activityUri, ...activity }; - } else { - const activitiesContainerUri = await ctx.call('activitypub.activity.getContainerUri', { - webId: actorUri - }); + if (!activity.actor) { + activity.actor = actorUri; + } - // -- Persist Activity -- - // There might be a capability attached which cannot be persisted, if it has a non-resolvable id. - // So we won't persist it and re-attach it afterwards. - let { capability, ...activityToPersist } = activity; + // Use the current time for the activity's publish date + activity.published = new Date().toISOString(); - activityUri = await ctx.call('activitypub.activity.post', { - containerUri: activitiesContainerUri, - resource: activityToPersist, - contentType: MIME_TYPES.JSON, - webId: 'system' // Post as system since there is no write permission to the activities container - }); + if (transient === true) { + // Object or actor URI + hash with lower case activity + activityUri = `${activity.object || activity.actor}#${arrayOf(getType(activity))[0].toLowerCase()}`; + activity = { id: activityUri, ...activity }; + } else { + const activitiesContainerUri = await ctx.call('activitypub.activity.getContainerUri', { + webId: actorUri + }); + + // -- Persist Activity -- + // There might be a capability attached which cannot be persisted, if it has a non-resolvable id. + // So we won't persist it and re-attach it afterwards. + let { capability, ...activityToPersist } = activity; + + activityUri = await ctx.call('activitypub.activity.post', { + containerUri: activitiesContainerUri, + resource: activityToPersist, + contentType: MIME_TYPES.JSON, + webId: 'system' // Post as system since there is no write permission to the activities container + }); + + // Refetch because persisting has side-effects. + // And reattach capability for further processing (if present). + activity = { + ...(await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' })), + capability + }; + } - // Refetch because persisting has side-effects. - // And reattach capability for further processing (if present). - activity = { - ...(await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' })), - capability - }; - } + try { + await ctx.call('activitypub.side-effects.processOutbox', { activity }); + } catch (e) { + if (transient !== true) { + await ctx.call('activitypub.activity.delete', { resourceUri: activityUri, webId: 'system' }); + } + // TODO unprocess objects + throw e; + } - try { - await ctx.call('activitypub.side-effects.processOutbox', { activity }); - } catch (e) { if (transient !== true) { - await ctx.call('activitypub.activity.delete', { resourceUri: activityUri, webId: 'system' }); + // Attach the newly-created activity to the outbox + await ctx.call('activitypub.collection.add', { + collectionUri, + item: activity + }); } - // TODO unprocess objects - throw e; - } - if (transient !== true) { - // Attach the newly-created activity to the outbox - await ctx.call('activitypub.collection.add', { - collectionUri, - item: activity - }); - } - - const localRecipients = []; - const remoteRecipients = []; - const recipients = await ctx.call('activitypub.activity.getRecipients', { activity }); - - for (const recipientUri of recipients) { - if (this.isLocalActor(recipientUri)) { - const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); - if (account) { - localRecipients.push(recipientUri); + const localRecipients = []; + const remoteRecipients = []; + const recipients = await ctx.call('activitypub.activity.getRecipients', { activity }); + + for (const recipientUri of recipients) { + if (this.isLocalActor(recipientUri)) { + const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); + if (account) { + localRecipients.push(recipientUri); + } else { + this.logger.warn(`No local account found with webId ${recipientUri}`); + } } else { - this.logger.warn(`No local account found with webId ${recipientUri}`); + remoteRecipients.push(recipientUri); } - } else { - remoteRecipients.push(recipientUri); } - } - // Post to remote recipients - for (const recipientUri of remoteRecipients) { - this.createJob('remotePost', recipientUri, { recipientUri, activity }, queueOptions); - } + // Post to remote recipients + for (const recipientUri of remoteRecipients) { + this.createJob('remotePost', recipientUri, { recipientUri, activity }, queueOptions); + } - // Send this event now, because the localPost method will emit activitypub.inbox.received event - ctx.emit('activitypub.outbox.posted', { activity }, { meta: { webId: null } }); + // Send this event now, because the localPost method will emit activitypub.inbox.received event + ctx.emit('activitypub.outbox.posted', { activity }, { meta: { webId: null } }); - // Post to local recipients - if (localRecipients.length > 0) { - // Call directly (but without waiting) - this.localPost(localRecipients, activity); - } + // Post to local recipients + if (localRecipients.length > 0) { + // Call directly (but without waiting) + this.localPost(localRecipients, activity); + } - return activity; - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); - } + return activity; + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset + }); + } + }) }, methods: { isLocalActor(uri) { @@ -315,6 +321,14 @@ const OutboxService = { } } } -}; +} satisfies ServiceSchema; -module.exports = OutboxService; +export default OutboxService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [OutboxService.name]: typeof OutboxService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 3e4055a9e..42dee4db7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -1,11 +1,12 @@ -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); -const matchActivity = require('../../../utils/matchActivity'); +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import matchActivity from '../../../utils/matchActivity.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const ReplyService = { - name: 'activitypub.reply', + name: 'activitypub.reply' as const, mixins: [ActivitiesHandlerMixin], settings: { baseUri: null, @@ -20,58 +21,69 @@ const ReplyService = { }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { - async addReply(ctx) { - const { objectUri, replyUri } = ctx.params; + addReply: defineAction({ + async handler(ctx) { + const { objectUri, replyUri } = ctx.params; - // Create the /replies collection and attach it to the object, unless it already exists - const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { - objectUri, - collection: this.settings.collectionOptions - }); + // Create the /replies collection and attach it to the object, unless it already exists + const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { + objectUri, + collection: this.settings.collectionOptions + }); - await ctx.call('activitypub.collection.add', { collectionUri, item: replyUri }); - }, - async removeReply(ctx) { - const { objectUri, replyUri } = ctx.params; + await ctx.call('activitypub.collection.add', { collectionUri, item: replyUri }); + } + }), - const object = await ctx.call('activitypub.object.get', { objectUri }); + removeReply: defineAction({ + async handler(ctx) { + const { objectUri, replyUri } = ctx.params; - // Remove the reply only if a /replies collection was attached to the object - if (object.replies) { - await ctx.call('activitypub.collection.remove', { collectionUri: object.replies, item: replyUri }); + const object = await ctx.call('activitypub.object.get', { objectUri }); + + // Remove the reply only if a /replies collection was attached to the object + if (object.replies) { + await ctx.call('activitypub.collection.remove', { collectionUri: object.replies, item: replyUri }); + } } - }, - async removeFromAllRepliesCollections(ctx) { - const { objectUri } = ctx.params; + }), - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX as: - DELETE { - GRAPH ?g1 { - ?collection as:items <${objectUri}> . - } - } - WHERE { - GRAPH ?g1 { - ?collection as:items <${objectUri}> . - ?collection a as:Collection . - } - GRAPH ?g2 { - ?object as:replies ?collection . + removeFromAllRepliesCollections: defineAction({ + async handler(ctx) { + const { objectUri } = ctx.params; + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX as: + DELETE { + GRAPH ?g1 { + ?collection as:items <${objectUri}> . + } + } + WHERE { + GRAPH ?g1 { + ?collection as:items <${objectUri}> . + ?collection a as:Collection . + } + GRAPH ?g2 { + ?object as:replies ?collection . + } } - } - `, - webId: 'system' - }); - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); - } + `, + webId: 'system' + }); + } + }), + + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset + }); + } + }) }, activities: { postReply: { @@ -141,6 +153,14 @@ const ReplyService = { } } } -}; +} satisfies ServiceSchema; + +export default ReplyService; -module.exports = ReplyService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ReplyService.name]: typeof ReplyService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index dd73d09b3..0b62126f6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -1,10 +1,11 @@ -const ActivitiesHandlerMixin = require('../../../mixins/activities-handler'); -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('../../../constants'); -const { collectionPermissionsWithAnonRead } = require('../../../utils'); -const matchActivity = require('../../../utils/matchActivity'); +import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; +import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import matchActivity from '../../../utils/matchActivity.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const ShareService = { - name: 'activitypub.share', + name: 'activitypub.share' as const, mixins: [ActivitiesHandlerMixin], settings: { baseUri: null, @@ -19,38 +20,46 @@ const ShareService = { }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { - async addShare(ctx) { - const { objectUri, announce } = ctx.params; + addShare: defineAction({ + async handler(ctx) { + const { objectUri, announce } = ctx.params; - // Create the /shares collection and attach it to the object, unless it already exists - const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { - objectUri, - collection: this.settings.collectionOptions - }); + // Create the /shares collection and attach it to the object, unless it already exists + const collectionUri = await ctx.call('activitypub.collections-registry.createAndAttachCollection', { + objectUri, + collection: this.settings.collectionOptions + }); - // Add the announce to the shares collection - await ctx.call('activitypub.collection.add', { collectionUri, item: announce.id }); - }, - async removeShare(ctx) { - const { objectUri, announce } = ctx.params; + // Add the announce to the shares collection + await ctx.call('activitypub.collection.add', { collectionUri, item: announce.id }); + } + }), - const object = await ctx.call('activitypub.object.get', { objectUri }); + removeShare: defineAction({ + async handler(ctx) { + const { objectUri, announce } = ctx.params; + + const object = await ctx.call('activitypub.object.get', { objectUri }); + + // If a shares collection is attached to the object, detach the announce + if (object?.shares) { + await ctx.call('activitypub.collection.remove', { + collectionUri: object.shares, + item: announce.id + }); + } + } + }), - // If a shares collection is attached to the object, detach the announce - if (object?.shares) { - await ctx.call('activitypub.collection.remove', { - collectionUri: object.shares, - item: announce.id + updateCollectionsOptions: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { + collection: this.settings.collectionOptions, + dataset }); } - }, - async updateCollectionsOptions(ctx) { - const { dataset } = ctx.params; - await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { - collection: this.settings.collectionOptions, - dataset - }); - } + }) }, activities: { shareObject: { @@ -95,6 +104,14 @@ const ShareService = { } } } -}; +} satisfies ServiceSchema; + +export default ShareService; -module.exports = ShareService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ShareService.name]: typeof ShareService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 743d3f35b..f4dd8ce17 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -1,14 +1,15 @@ -const { credentialsContext } = require('@semapps/crypto'); -const { arrayOf } = require('@semapps/ldp'); -const matchActivity = require('../../../utils/matchActivity'); +import { credentialsContext } from '@semapps/crypto'; +import { arrayOf } from '@semapps/ldp'; +import matchActivity from '../../../utils/matchActivity.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Allow any service to process activities just after they are posted to the inbox or outbox. * It uses a jobs queue so that it is easy to watch and debug results * We recommend to use the ActivitiesHandlerMixin to make it easier to use this service. */ -module.exports = { - name: 'activitypub.side-effects', +const ActivitypubSideEffectsSchema = { + name: 'activitypub.side-effects' as const, settings: { podProvider: false }, @@ -16,51 +17,62 @@ module.exports = { this.processors = []; }, actions: { - /** - * Add a new processor to handle activities - */ - async addProcessor(ctx) { - const { matcher, actionName, boxTypes, key, capabilityGrantMatchFnGenerator, priority = 10 } = ctx.params; + addProcessor: defineAction({ + /** + * Add a new processor to handle activities + */ + async handler(ctx) { + const { matcher, actionName, boxTypes, key, capabilityGrantMatchFnGenerator, priority = 10 } = ctx.params; - this.processors.push({ matcher, actionName, boxTypes, key, priority, capabilityGrantMatchFnGenerator }); + this.processors.push({ matcher, actionName, boxTypes, key, priority, capabilityGrantMatchFnGenerator }); - // Sort processors by priority - this.processors.sort((a, b) => a.priority - b.priority); - }, - /** - * Called by activitypub.outbox.post when an activity is posted - */ - async processOutbox(ctx) { - const { activity } = ctx.params; - - const job = await this.createJob( - 'processOutbox', - activity.id, - { activity }, - { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days - ); - - await job.finished(); - }, - /** - * Called by activitypub.inbox.post when an activity is received - * and by activitypub.outbox.post when an activity is sent to a local actor - */ - async processInbox(ctx) { - const { activity, recipients } = ctx.params; - - const job = await this.createJob( - 'processInbox', - activity.id, - { activity, recipients }, - { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days - ); - - await job.finished(); - }, - getProcessors() { - return this.processors; - } + // Sort processors by priority + this.processors.sort((a, b) => a.priority - b.priority); + } + }), + + processOutbox: defineAction({ + /** + * Called by activitypub.outbox.post when an activity is posted + */ + async handler(ctx) { + const { activity } = ctx.params; + + const job = await this.createJob( + 'processOutbox', + activity.id, + { activity }, + { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days + ); + + await job.finished(); + } + }), + + processInbox: defineAction({ + /** + * Called by activitypub.inbox.post when an activity is received + * and by activitypub.outbox.post when an activity is sent to a local actor + */ + async handler(ctx) { + const { activity, recipients } = ctx.params; + + const job = await this.createJob( + 'processInbox', + activity.id, + { activity, recipients }, + { removeOnComplete: { age: 259200 } } // Keep completed jobs for 3 days + ); + + await job.finished(); + } + }), + + getProcessors: defineAction({ + handler() { + return this.processors; + } + }) }, methods: { matchActivity(pattern, activity, fetcher) { @@ -415,4 +427,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default ActivitypubSideEffectsSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivitypubSideEffectsSchema.name]: typeof ActivitypubSideEffectsSchema; + } + } +} diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts index ed502b170..c25ac53e4 100644 --- a/src/middleware/packages/activitypub/services/migration.ts +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -1,36 +1,53 @@ -module.exports = { - name: 'activitypub.migration', +import { ServiceSchema, defineAction } from 'moleculer'; + +const ActivitypubMigrationSchema = { + name: 'activitypub.migration' as const, actions: { - async updateCollectionsOptions(ctx) { - await ctx.call('activitypub.follow.updateCollectionsOptions'); - await ctx.call('activitypub.inbox.updateCollectionsOptions'); - await ctx.call('activitypub.outbox.updateCollectionsOptions'); - await ctx.call('activitypub.like.updateCollectionsOptions'); - await ctx.call('activitypub.reply.updateCollectionsOptions'); - }, - // This shouldn't be used in Pod provider config - async addCollectionsToContainer(ctx) { - const collectionsContainerUri = await ctx.call('activitypub.collection.getContainerUri'); + updateCollectionsOptions: defineAction({ + async handler(ctx) { + await ctx.call('activitypub.follow.updateCollectionsOptions'); + await ctx.call('activitypub.inbox.updateCollectionsOptions'); + await ctx.call('activitypub.outbox.updateCollectionsOptions'); + await ctx.call('activitypub.like.updateCollectionsOptions'); + await ctx.call('activitypub.reply.updateCollectionsOptions'); + } + }), + + addCollectionsToContainer: defineAction({ + // This shouldn't be used in Pod provider config + async handler(ctx) { + const collectionsContainerUri = await ctx.call('activitypub.collection.getContainerUri'); - this.logger.info(`Attaching all collections to ${collectionsContainerUri}`); + this.logger.info(`Attaching all collections to ${collectionsContainerUri}`); - await ctx.call('triplestore.update', { - query: ` - PREFIX as: - PREFIX ldp: - INSERT { - GRAPH <${collectionsContainerUri}> { - <${collectionsContainerUri}> ldp:contains ?collectionUri + await ctx.call('triplestore.update', { + query: ` + PREFIX as: + PREFIX ldp: + INSERT { + GRAPH <${collectionsContainerUri}> { + <${collectionsContainerUri}> ldp:contains ?collectionUri + } } - } - WHERE { - GRAPH ?g { - ?collectionUri a as:Collection + WHERE { + GRAPH ?g { + ?collectionUri a as:Collection + } } - } - `, - webId: 'system' - }); + `, + webId: 'system' + }); + } + }) + } +} satisfies ServiceSchema; + +export default ActivitypubMigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ActivitypubMigrationSchema.name]: typeof ActivitypubMigrationSchema; } } -}; +} diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts index c9a29be3e..46397c589 100644 --- a/src/middleware/packages/activitypub/services/relay.ts +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -1,9 +1,10 @@ -const urlJoin = require('url-join'); -const { ACTOR_TYPES } = require('../constants'); -const { delay } = require('../utils'); +import urlJoin from 'url-join'; +import { ACTOR_TYPES } from '../constants.ts'; +import { delay } from '../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const RelayService = { - name: 'activitypub.relay', + name: 'activitypub.relay' as const, settings: { actor: { username: 'relay', @@ -69,13 +70,21 @@ const RelayService = { this.relayActor = await this.broker.call('activitypub.actor.awaitCreateComplete', { actorUri }); }, actions: { - getActor: { + getActor: defineAction({ visibility: 'public', handler() { return this.relayActor; } - } + }) } -}; +} satisfies ServiceSchema; + +export default RelayService; -module.exports = RelayService; +declare global { + export namespace Moleculer { + export interface AllServices { + [RelayService.name]: typeof RelayService; + } + } +} diff --git a/src/middleware/packages/activitypub/utils.ts b/src/middleware/packages/activitypub/utils.ts index e033c0cbb..0c6d4be93 100644 --- a/src/middleware/packages/activitypub/utils.ts +++ b/src/middleware/packages/activitypub/utils.ts @@ -77,7 +77,7 @@ const getValueFromDataType = result => { } }; -module.exports = { +export { collectionPermissionsWithAnonRead, getSlugFromUri, getContainerFromUri, diff --git a/src/middleware/packages/activitypub/utils/matchActivity.ts b/src/middleware/packages/activitypub/utils/matchActivity.ts index bdf5a2a45..44869b078 100644 --- a/src/middleware/packages/activitypub/utils/matchActivity.ts +++ b/src/middleware/packages/activitypub/utils/matchActivity.ts @@ -1,4 +1,4 @@ -const { arrayOf } = require('@semapps/ldp'); +import { arrayOf } from '@semapps/ldp'; /** * Match an activity against a pattern @@ -47,4 +47,4 @@ const matchActivity = async (matcher, activity, fetcher) => { return { match: true, dereferencedActivity }; }; -module.exports = matchActivity; +export default matchActivity; diff --git a/src/middleware/packages/auth/index.ts b/src/middleware/packages/auth/index.ts index 5be77ecfe..e18b4e6a7 100644 --- a/src/middleware/packages/auth/index.ts +++ b/src/middleware/packages/auth/index.ts @@ -1,9 +1,16 @@ -module.exports = { - AuthCASService: require('./services/auth.cas'), - AuthLocalService: require('./services/auth.local'), - AuthOIDCService: require('./services/auth.oidc'), - AuthAccountService: require('./services/account'), - AuthJWTService: require('./services/jwt'), - AuthMigrationService: require('./services/migration'), - AuthMailService: require('./services/mail') +import AuthCASService from './services/auth.cas.ts'; +import AuthLocalService from './services/auth.local.ts'; +import AuthOIDCService from './services/auth.oidc.ts'; +import AuthAccountService from './services/account.ts'; +import AuthJWTService from './services/jwt.ts'; +import AuthMigrationService from './services/migration.ts'; +import AuthMailService from './services/mail.ts'; +export { + AuthCASService, + AuthLocalService, + AuthOIDCService, + AuthAccountService, + AuthJWTService, + AuthMigrationService, + AuthMailService }; diff --git a/src/middleware/packages/auth/middlewares/localLogout.ts b/src/middleware/packages/auth/middlewares/localLogout.ts index 9d446188f..10f5bd31f 100644 --- a/src/middleware/packages/auth/middlewares/localLogout.ts +++ b/src/middleware/packages/auth/middlewares/localLogout.ts @@ -3,4 +3,4 @@ const localLogout = (req, res, next) => { next(); }; -module.exports = localLogout; +export default localLogout; diff --git a/src/middleware/packages/auth/middlewares/redirectToFront.ts b/src/middleware/packages/auth/middlewares/redirectToFront.ts index 01797fb2c..0b59de541 100644 --- a/src/middleware/packages/auth/middlewares/redirectToFront.ts +++ b/src/middleware/packages/auth/middlewares/redirectToFront.ts @@ -11,4 +11,4 @@ const redirectToFront = (req, res) => { res.end(); }; -module.exports = redirectToFront; +export default redirectToFront; diff --git a/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts b/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts index 392388379..3800dbb5f 100644 --- a/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts +++ b/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts @@ -6,4 +6,4 @@ const saveRedirectUrl = (req, res, next) => { next(); }; -module.exports = saveRedirectUrl; +export default saveRedirectUrl; diff --git a/src/middleware/packages/auth/middlewares/sendToken.ts b/src/middleware/packages/auth/middlewares/sendToken.ts index 721f41cb0..de2ef3dcc 100644 --- a/src/middleware/packages/auth/middlewares/sendToken.ts +++ b/src/middleware/packages/auth/middlewares/sendToken.ts @@ -3,4 +3,4 @@ const sendToken = (req, res) => { res.end(JSON.stringify({ token: req.user.token, webId: req.user.webId, newUser: req.user.newUser })); }; -module.exports = sendToken; +export default sendToken; diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index b6633e1ea..eb0812dc8 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -1,9 +1,10 @@ -const path = require('path'); -const session = require('express-session'); -const AuthMixin = require('./auth'); -const saveRedirectUrl = require('../middlewares/saveRedirectUrl'); -const redirectToFront = require('../middlewares/redirectToFront'); -const localLogout = require('../middlewares/localLogout'); +import path from 'path'; +import session from 'express-session'; +import AuthMixin from './auth.ts'; +import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; +import redirectToFront from '../middlewares/redirectToFront.ts'; +import localLogout from '../middlewares/localLogout.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const AuthSSOMixin = { mixins: [AuthMixin], @@ -18,52 +19,57 @@ const AuthSSOMixin = { selectSsoData: null }, actions: { - async loginOrSignup(ctx) { - const { ssoData } = ctx.params; + loginOrSignup: defineAction({ + async handler(ctx) { + const { ssoData } = ctx.params; - const profileData = this.settings.selectSsoData ? await this.settings.selectSsoData(ssoData) : ssoData; + const profileData = this.settings.selectSsoData ? await this.settings.selectSsoData(ssoData) : ssoData; - // TODO use UUID to identify unique accounts with SSO - const existingAccounts = await ctx.call('auth.account.find', { query: { email: profileData.email } }); + // TODO use UUID to identify unique accounts with SSO + const existingAccounts = await ctx.call('auth.account.find', { query: { email: profileData.email } }); - let accountData; - let webId; - let newUser; - if (existingAccounts.length > 0) { - accountData = existingAccounts[0]; - webId = accountData.webId; - newUser = false; + let accountData; + let webId; + let newUser; + if (existingAccounts.length > 0) { + accountData = existingAccounts[0]; + webId = accountData.webId; + newUser = false; - // TODO update account with recent profileData information + // TODO update account with recent profileData information - ctx.emit('auth.connected', { webId, accountData, ssoData }, { meta: { webId: null, dataset: null } }); - } else { - if (!this.settings.registrationAllowed) { - throw new Error('registration.not-allowed'); - } + ctx.emit('auth.connected', { webId, accountData, ssoData }, { meta: { webId: null, dataset: null } }); + } else { + if (!this.settings.registrationAllowed) { + throw new Error('registration.not-allowed'); + } - accountData = await ctx.call('auth.account.create', { - uuid: profileData.uuid, - email: profileData.email, - username: profileData.username - }); - webId = await ctx.call('webid.createWebId', this.pickWebIdData({ nick: accountData.username, ...profileData })); - newUser = true; + accountData = await ctx.call('auth.account.create', { + uuid: profileData.uuid, + email: profileData.email, + username: profileData.username + }); + webId = await ctx.call( + 'webid.createWebId', + this.pickWebIdData({ nick: accountData.username, ...profileData }) + ); + newUser = true; - // Link the webId with the account - await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); + // Link the webId with the account + await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); - ctx.emit( - 'auth.registered', - { webId, profileData, accountData, ssoData }, - { meta: { webId: null, dataset: null } } - ); - } + ctx.emit( + 'auth.registered', + { webId, profileData, accountData, ssoData }, + { meta: { webId: null, dataset: null } } + ); + } - const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); + const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); - return { token, newUser }; - } + return { token, newUser }; + } + }) }, methods: { getApiRoutes(basePath) { @@ -88,6 +94,6 @@ const AuthSSOMixin = { ]; } } -}; +} satisfies ServiceSchema; -module.exports = AuthSSOMixin; +export default AuthSSOMixin; diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index 99a0e8378..c8eb22c32 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -1,8 +1,9 @@ -const passport = require('passport'); -const { Errors: E } = require('moleculer-web'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const AuthAccountService = require('../services/account'); -const AuthJWTService = require('../services/jwt'); +import passport from 'passport'; +import { Errors as E } from 'moleculer-web'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import AuthAccountService from '../services/account.ts'; +import AuthJWTService from '../services/jwt.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Auth Mixin that handles authentication and authorization for routes @@ -109,24 +110,64 @@ const AuthMixin = { } }, actions: { - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication - async authenticate(ctx) { - const { route, req, res } = ctx.params; - // Extract method and token from authorization header. - const [method, token] = req.headers.authorization?.split(' ') || []; - - if (!token) { - // No token + authenticate: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication + async handler(ctx) { + const { route, req, res } = ctx.params; + // Extract method and token from authorization header. + const [method, token] = req.headers.authorization?.split(' ') || []; + + if (!token) { + // No token + ctx.meta.webId = 'anon'; + return Promise.resolve(null); + } + + if (method === 'Bearer') { + const payload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); + if (payload) { + ctx.meta.tokenPayload = payload; + ctx.meta.webId = payload.webId; + return Promise.resolve(payload); + } + + // Check if token is a capability. + if (route.opts.authorizeWithCapability) { + return this.validateCapability(ctx, token); + } + + // Invalid token + // TODO make sure token is deleted client-side + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + } + + // No valid auth method given. ctx.meta.webId = 'anon'; return Promise.resolve(null); } + }), + + authorize: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization + async handler(ctx) { + const { route, req, res } = ctx.params; + // Extract token from authorization header (do not take the Bearer part) + /** @type {[string, string]} */ + const [method, token] = req.headers.authorization && req.headers.authorization.split(' '); + + if (!token) { + return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); + } + if (method !== 'Bearer') { + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + } - if (method === 'Bearer') { - const payload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); - if (payload) { - ctx.meta.tokenPayload = payload; - ctx.meta.webId = payload.webId; - return Promise.resolve(payload); + // Validate if the token was signed by server (registered user). + const serverSignedPayload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); + if (serverSignedPayload) { + ctx.meta.tokenPayload = serverSignedPayload; + ctx.meta.webId = serverSignedPayload.webId; + return Promise.resolve(serverSignedPayload); } // Check if token is a capability. @@ -134,54 +175,20 @@ const AuthMixin = { return this.validateCapability(ctx, token); } - // Invalid token - // TODO make sure token is deleted client-side - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); - } - - // No valid auth method given. - ctx.meta.webId = 'anon'; - return Promise.resolve(null); - }, - - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization - async authorize(ctx) { - const { route, req, res } = ctx.params; - // Extract token from authorization header (do not take the Bearer part) - /** @type {[string, string]} */ - const [method, token] = req.headers.authorization && req.headers.authorization.split(' '); - - if (!token) { - return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); - } - if (method !== 'Bearer') { return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } - - // Validate if the token was signed by server (registered user). - const serverSignedPayload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); - if (serverSignedPayload) { - ctx.meta.tokenPayload = serverSignedPayload; - ctx.meta.webId = serverSignedPayload.webId; - return Promise.resolve(serverSignedPayload); - } - - // Check if token is a capability. - if (route.opts.authorizeWithCapability) { - return this.validateCapability(ctx, token); + }), + + impersonate: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + return await ctx.call('auth.jwt.generateServerSignedToken', { + payload: { + webId + } + }); } - - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); - }, - - async impersonate(ctx) { - const { webId } = ctx.params; - return await ctx.call('auth.jwt.generateServerSignedToken', { - payload: { - webId - } - }); - } + }) }, methods: { async validateCapability(ctx, token) { @@ -241,6 +248,6 @@ const AuthMixin = { } } } -}; +} satisfies ServiceSchema; -module.exports = AuthMixin; +export default AuthMixin; diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 12ccb9a3e..e81ac1f75 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -1,14 +1,15 @@ -const bcrypt = require('bcrypt'); -const createSlug = require('speakingurl'); -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const crypto = require('crypto'); +import bcrypt from 'bcrypt'; +import createSlug from 'speakingurl'; +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import crypto from 'crypto'; +import { ServiceSchema, defineAction } from 'moleculer'; // Taken from https://stackoverflow.com/a/9204568/7900695 const emailRegexp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; -module.exports = { - name: 'auth.account', +const AuthAccountSchema = { + name: 'auth.account' as const, mixins: [DbService], adapter: new TripleStoreAdapter({ type: 'AuthAccount', dataset: 'settings' }), settings: { @@ -19,239 +20,289 @@ module.exports = { }, dependencies: ['triplestore'], actions: { - async create(ctx) { - let { uuid, username, password, email, webId, ...rest } = ctx.params; + create: defineAction({ + async handler(ctx) { + let { uuid, username, password, email, webId, ...rest } = ctx.params; - // FORMAT AND VERIFY PASSWORD + // FORMAT AND VERIFY PASSWORD - if (password) { - if (password.length < this.settings.minPasswordLength) { - throw new Error('password.too-short'); + if (password) { + if (password.length < this.settings.minPasswordLength) { + throw new Error('password.too-short'); + } + + password = await this.hashPassword(password); } - password = await this.hashPassword(password); - } + // FORMAT AND VERIFY EMAIL - // FORMAT AND VERIFY EMAIL + if (email) { + email = email.toLowerCase(); - if (email) { - email = email.toLowerCase(); + const emailExists = await ctx.call('auth.account.emailExists', { email }); + if (emailExists) { + throw new Error('email.already.exists'); + } - const emailExists = await ctx.call('auth.account.emailExists', { email }); - if (emailExists) { - throw new Error('email.already.exists'); + if (!emailRegexp.test(email)) { + throw new Error('email.invalid'); + } } - if (!emailRegexp.test(email)) { - throw new Error('email.invalid'); + // FORMAT AND VERIFY USERNAME + + if (username) { + if (!ctx.meta.isSystemCall) { + const { isValid, error } = await this.isValidUsername(ctx, username); + if (!isValid) throw new Error(error); + } + } else if (email) { + // If username is not provided, find one automatically from the email (without errors) + username = createSlug(email.split('@')[0].toLowerCase()); + + let { isValid, error } = await this.isValidUsername(ctx, username); + + if (!isValid) { + if (error === 'username.invalid' || error === 'username.too-short') { + // If username generated from email is invalid, use a generic name + username = 'user'; + } + + // If necessary, add a number after the username + let i = 0; + do { + username = i === 0 ? username : username + i; + ({ isValid } = await this.isValidUsername(ctx, username)); + } while (!isValid); + } + } else { + throw new Error('You must provide at least a username or an email address'); } + + return await this._create(ctx, { + ...rest, + uuid, + username, + email, + hashedPassword: password, + webId + }); } + }), - // FORMAT AND VERIFY USERNAME + attachWebId: defineAction({ + async handler(ctx) { + const { accountUri, webId } = ctx.params; - if (username) { - if (!ctx.meta.isSystemCall) { - const { isValid, error } = await this.isValidUsername(ctx, username); - if (!isValid) throw new Error(error); - } - } else if (email) { - // If username is not provided, find one automatically from the email (without errors) - username = createSlug(email.split('@')[0].toLowerCase()); + return await this._update(ctx, { + '@id': accountUri, + webId + }); + } + }), - let { isValid, error } = await this.isValidUsername(ctx, username); + verify: defineAction({ + async handler(ctx) { + const { username, password } = ctx.params; - if (!isValid) { - if (error === 'username.invalid' || error === 'username.too-short') { - // If username generated from email is invalid, use a generic name - username = 'user'; - } + // If the username includes a @, assume it is an email + const query = username.includes('@') ? { email: username } : { username }; + + const accounts = await this._find(ctx, { query }); - // If necessary, add a number after the username - let i = 0; - do { - username = i === 0 ? username : username + i; - ({ isValid } = await this.isValidUsername(ctx, username)); - } while (!isValid); + if (accounts.length > 0) { + const passwordMatch = await this.comparePassword(password, accounts[0].hashedPassword); + if (passwordMatch) { + return accounts[0]; + } + throw new Error('account.not-found'); + } else { + throw new Error('account.not-found'); } - } else { - throw new Error('You must provide at least a username or an email address'); } + }), - return await this._create(ctx, { - ...rest, - uuid, - username, - email, - hashedPassword: password, - webId - }); - }, - async attachWebId(ctx) { - const { accountUri, webId } = ctx.params; + usernameExists: defineAction({ + async handler(ctx) { + const { username } = ctx.params; + const accounts = await this._find(ctx, { query: { username } }); + return accounts.length > 0; + } + }), - return await this._update(ctx, { - '@id': accountUri, - webId - }); - }, - async verify(ctx) { - const { username, password } = ctx.params; + emailExists: defineAction({ + async handler(ctx) { + const { email } = ctx.params; + const accounts = await this._find(ctx, { query: { email } }); + return accounts.length > 0; + } + }), + + find: defineAction({ + /** Overwrite find method, to filter accounts with tombstone. */ + async handler(ctx) { + /** @type {object[]} */ + const accounts = await this._find(ctx, ctx.params); + return accounts.filter(account => !account.deletedAt); + } + }), - // If the username includes a @, assume it is an email - const query = username.includes('@') ? { email: username } : { username }; + findByUsername: defineAction({ + async handler(ctx) { + const { username } = ctx.params; + const accounts = await this._find(ctx, { query: { username } }); + return accounts.length > 0 ? accounts[0] : null; + } + }), - const accounts = await this._find(ctx, { query }); + findByWebId: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const accounts = await this._find(ctx, { query: { webId } }); + return accounts.length > 0 ? accounts[0] : null; + } + }), - if (accounts.length > 0) { - const passwordMatch = await this.comparePassword(password, accounts[0].hashedPassword); - if (passwordMatch) { - return accounts[0]; - } - throw new Error('account.not-found'); - } else { - throw new Error('account.not-found'); + findByEmail: defineAction({ + async handler(ctx) { + const { email } = ctx.params; + const accounts = await this._find(ctx, { query: { email } }); + return accounts.length > 0 ? accounts[0] : null; } - }, - async usernameExists(ctx) { - const { username } = ctx.params; - const accounts = await this._find(ctx, { query: { username } }); - return accounts.length > 0; - }, - async emailExists(ctx) { - const { email } = ctx.params; - const accounts = await this._find(ctx, { query: { email } }); - return accounts.length > 0; - }, - /** Overwrite find method, to filter accounts with tombstone. */ - async find(ctx) { - /** @type {object[]} */ - const accounts = await this._find(ctx, ctx.params); - return accounts.filter(account => !account.deletedAt); - }, - async findByUsername(ctx) { - const { username } = ctx.params; - const accounts = await this._find(ctx, { query: { username } }); - return accounts.length > 0 ? accounts[0] : null; - }, - async findByWebId(ctx) { - const { webId } = ctx.params; - const accounts = await this._find(ctx, { query: { webId } }); - return accounts.length > 0 ? accounts[0] : null; - }, - async findByEmail(ctx) { - const { email } = ctx.params; - const accounts = await this._find(ctx, { query: { email } }); - return accounts.length > 0 ? accounts[0] : null; - }, - async setPassword(ctx) { - const { webId, password } = ctx.params; - const hashedPassword = await this.hashPassword(password); - const account = await ctx.call('auth.account.findByWebId', { webId }); - - return await this._update(ctx, { - '@id': account['@id'], - hashedPassword - }); - }, - async setNewPassword(ctx) { - const { webId, token, password } = ctx.params; - const hashedPassword = await this.hashPassword(password); - const account = await ctx.call('auth.account.findByWebId', { webId }); + }), - if (account.resetPasswordToken !== token) { - throw new Error('auth.password.invalid_reset_token'); + setPassword: defineAction({ + async handler(ctx) { + const { webId, password } = ctx.params; + const hashedPassword = await this.hashPassword(password); + const account = await ctx.call('auth.account.findByWebId', { webId }); + + return await this._update(ctx, { + '@id': account['@id'], + hashedPassword + }); } + }), - return await this._update(ctx, { - '@id': account['@id'], - hashedPassword, - resetPasswordToken: undefined - }); - }, - async generateResetPasswordToken(ctx) { - const { webId } = ctx.params; - const resetPasswordToken = await this.generateResetPasswordToken(); - const account = await ctx.call('auth.account.findByWebId', { webId }); - - await this._update(ctx, { - '@id': account['@id'], - resetPasswordToken - }); + setNewPassword: defineAction({ + async handler(ctx) { + const { webId, token, password } = ctx.params; + const hashedPassword = await this.hashPassword(password); + const account = await ctx.call('auth.account.findByWebId', { webId }); - return resetPasswordToken; - }, - async findDatasetByWebId(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; - const account = await ctx.call('auth.account.findByWebId', { webId }); - return account?.username; - }, - async findSettingsByWebId(ctx) { - const webId = ctx.meta.webId; + if (account.resetPasswordToken !== token) { + throw new Error('auth.password.invalid_reset_token'); + } - const account = await ctx.call('auth.account.findByWebId', { webId }); + return await this._update(ctx, { + '@id': account['@id'], + hashedPassword, + resetPasswordToken: undefined + }); + } + }), - return { - email: account.email, - preferredLocale: account.preferredLocale - }; - }, - async updateAccountSettings(ctx) { - const { currentPassword, email, newPassword } = ctx.params; - const { webId } = ctx.meta; - const account = await ctx.call('auth.account.findByWebId', { webId }); - const passwordMatch = await this.comparePassword(currentPassword, account.hashedPassword); - let params = {}; - - if (!passwordMatch) { - throw new Error('auth.account.invalid_password'); + generateResetPasswordToken: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const resetPasswordToken = await this.generateResetPasswordToken(); + const account = await ctx.call('auth.account.findByWebId', { webId }); + + await this._update(ctx, { + '@id': account['@id'], + resetPasswordToken + }); + + return resetPasswordToken; } + }), - if (newPassword) { - const hashedPassword = await this.hashPassword(newPassword); - params = { ...params, hashedPassword }; + findDatasetByWebId: defineAction({ + async handler(ctx) { + const webId = ctx.params.webId || ctx.meta.webId; + const account = await ctx.call('auth.account.findByWebId', { webId }); + return account?.username; } + }), - if (email !== account.email) { - const existing = await ctx.call('auth.account.findByEmail', { email }); - if (existing) { - throw new Error('email.already.exists'); - } + findSettingsByWebId: defineAction({ + async handler(ctx) { + const webId = ctx.meta.webId; + + const account = await ctx.call('auth.account.findByWebId', { webId }); - params = { ...params, email }; + return { + email: account.email, + preferredLocale: account.preferredLocale + }; } + }), + + updateAccountSettings: defineAction({ + async handler(ctx) { + const { currentPassword, email, newPassword } = ctx.params; + const { webId } = ctx.meta; + const account = await ctx.call('auth.account.findByWebId', { webId }); + const passwordMatch = await this.comparePassword(currentPassword, account.hashedPassword); + let params = {}; + + if (!passwordMatch) { + throw new Error('auth.account.invalid_password'); + } - return await this._update(ctx, { - '@id': account['@id'], - ...params - }); - }, - async deleteByWebId(ctx) { - const { webId } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId }); + if (newPassword) { + const hashedPassword = await this.hashPassword(newPassword); + params = { ...params, hashedPassword }; + } - if (account) { - await this._remove(ctx, { id: account['@id'] }); - return true; + if (email !== account.email) { + const existing = await ctx.call('auth.account.findByEmail', { email }); + if (existing) { + throw new Error('email.already.exists'); + } + + params = { ...params, email }; + } + + return await this._update(ctx, { + '@id': account['@id'], + ...params + }); } + }), - return false; - }, - // Remove email and password from an account, set deletedAt timestamp. - async setTombstone(ctx) { - const { webId } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId }); - - return await this._update(ctx, { - // Set all values to undefined... - ...Object.fromEntries(Object.keys(account).map(key => [key, null])), - '@id': account['@id'], - // ...except for - webId: account.webId, - username: account.username, - // And add a deletedAt date. - deletedAt: new Date().toISOString() - }); - } + deleteByWebId: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const account = await ctx.call('auth.account.findByWebId', { webId }); + + if (account) { + await this._remove(ctx, { id: account['@id'] }); + return true; + } + + return false; + } + }), + + setTombstone: defineAction({ + // Remove email and password from an account, set deletedAt timestamp. + async handler(ctx) { + const { webId } = ctx.params; + const account = await ctx.call('auth.account.findByWebId', { webId }); + + return await this._update(ctx, { + // Set all values to undefined... + ...Object.fromEntries(Object.keys(account).map(key => [key, null])), + '@id': account['@id'], + // ...except for + webId: account.webId, + username: account.username, + // And add a deletedAt date. + deletedAt: new Date().toISOString() + }); + } + }) }, methods: { async isValidUsername(ctx, username) { @@ -312,4 +363,14 @@ module.exports = { }); } } -}; +} satisfies ServiceSchema; + +export default AuthAccountSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthAccountSchema.name]: typeof AuthAccountSchema; + } + } +} diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts index 9545b5acc..2b4f055aa 100644 --- a/src/middleware/packages/auth/services/auth.cas.ts +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -1,9 +1,10 @@ -const { Strategy } = require('passport-cas2'); -const { Errors: E } = require('moleculer-web'); -const AuthSSOMixin = require('../mixins/auth.sso'); +import { Strategy } from 'passport-cas2'; +import { Errors as E } from 'moleculer-web'; +import AuthSSOMixin from '../mixins/auth.sso.ts'; +import { ServiceSchema } from 'moleculer'; const AuthCASService = { - name: 'auth', + name: 'auth' as const, mixins: [AuthSSOMixin], settings: { baseUrl: null, @@ -40,6 +41,14 @@ const AuthCASService = { ); } } -}; +} satisfies ServiceSchema; -module.exports = AuthCASService; +export default AuthCASService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthCASService.name]: typeof AuthCASService; + } + } +} diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 59f6bbdaf..5cd384c47 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,13 +1,14 @@ -const path = require('path'); -const { Strategy } = require('passport-local'); -const AuthMixin = require('../mixins/auth'); -const sendToken = require('../middlewares/sendToken'); +import path from 'path'; +import { Strategy } from 'passport-local'; +import AuthMixin from '../mixins/auth.ts'; +import sendToken from '../middlewares/sendToken.ts'; const { MoleculerError } = require('moleculer').Errors; -const AuthMailService = require('./mail'); +import AuthMailService from './mail.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const AuthLocalService = { - name: 'auth', + name: 'auth' as const, mixins: [AuthMixin], settings: { baseUrl: null, @@ -47,98 +48,115 @@ const AuthLocalService = { } }, actions: { - async signup(ctx) { - const { username, email, password, ...rest } = ctx.params; + signup: defineAction({ + async handler(ctx) { + const { username, email, password, ...rest } = ctx.params; - // This is going to get in our way otherwise when waiting for completions. - ctx.meta.skipObjectsWatcher = true; + // This is going to get in our way otherwise when waiting for completions. + ctx.meta.skipObjectsWatcher = true; - let accountData = await ctx.call('auth.account.create', { - username, - email, - password, - ...this.pickAccountData(rest) - }); - - try { - const profileData = { nick: accountData.username, email: accountData.email, ...rest }; - const webId = await ctx.call('webid.createWebId', this.pickWebIdData(profileData), { - meta: { - isSignup: true // Allow services to handle directly the webId creation if it is generated by the AuthService - } + let accountData = await ctx.call('auth.account.create', { + username, + email, + password, + ...this.pickAccountData(rest) }); - // Link the webId with the account - accountData = await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); + try { + const profileData = { nick: accountData.username, email: accountData.email, ...rest }; + const webId = await ctx.call('webid.createWebId', this.pickWebIdData(profileData), { + meta: { + isSignup: true // Allow services to handle directly the webId creation if it is generated by the AuthService + } + }); + + // Link the webId with the account + accountData = await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); - ctx.emit('auth.registered', { webId, profileData, accountData }); + ctx.emit('auth.registered', { webId, profileData, accountData }); - const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); + const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); - return { token, webId, newUser: true }; - } catch (e) { - // Delete account if resource creation failed, or it may cause problems when retrying - await ctx.call('auth.account.remove', { id: accountData['@id'] }); - throw e; + return { token, webId, newUser: true }; + } catch (e) { + // Delete account if resource creation failed, or it may cause problems when retrying + await ctx.call('auth.account.remove', { id: accountData['@id'] }); + throw e; + } } - }, - async login(ctx) { - const { username, password } = ctx.params; + }), - const accountData = await ctx.call('auth.account.verify', { username, password }); + login: defineAction({ + async handler(ctx) { + const { username, password } = ctx.params; - ctx.emit('auth.connected', { webId: accountData.webId, accountData }, { meta: { webId: null, dataset: null } }); + const accountData = await ctx.call('auth.account.verify', { username, password }); - const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId: accountData.webId } }); + ctx.emit('auth.connected', { webId: accountData.webId, accountData }, { meta: { webId: null, dataset: null } }); - return { token, webId: accountData.webId, newUser: false }; - }, - async logout(ctx) { - ctx.meta.$statusCode = 302; - ctx.meta.$location = ctx.params.redirectUrl || this.settings.formUrl; - ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); - }, - async redirectToForm(ctx) { - if (this.settings.formUrl) { - const formUrl = new URL(this.settings.formUrl); - if (ctx.params) { - for (const [key, value] of Object.entries(ctx.params)) { - formUrl.searchParams.set(key, value); + const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId: accountData.webId } }); + + return { token, webId: accountData.webId, newUser: false }; + } + }), + + logout: defineAction({ + async handler(ctx) { + ctx.meta.$statusCode = 302; + ctx.meta.$location = ctx.params.redirectUrl || this.settings.formUrl; + ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); + } + }), + + redirectToForm: defineAction({ + async handler(ctx) { + if (this.settings.formUrl) { + const formUrl = new URL(this.settings.formUrl); + if (ctx.params) { + for (const [key, value] of Object.entries(ctx.params)) { + formUrl.searchParams.set(key, value); + } } + ctx.meta.$statusCode = 302; + ctx.meta.$location = formUrl.toString(); + } else { + throw new Error('No formUrl defined in auth.local settings'); } - ctx.meta.$statusCode = 302; - ctx.meta.$location = formUrl.toString(); - } else { - throw new Error('No formUrl defined in auth.local settings'); } - }, - async resetPassword(ctx) { - const { email } = ctx.params; + }), + + resetPassword: defineAction({ + async handler(ctx) { + const { email } = ctx.params; - const account = await ctx.call('auth.account.findByEmail', { email }); + const account = await ctx.call('auth.account.findByEmail', { email }); + + if (!account) { + throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); + } - if (!account) { - throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); + const token = await ctx.call('auth.account.generateResetPasswordToken', { webId: account.webId }); + + await ctx.call('auth.mail.sendResetPasswordEmail', { + account, + token + }); } + }), - const token = await ctx.call('auth.account.generateResetPasswordToken', { webId: account.webId }); + setNewPassword: defineAction({ + async handler(ctx) { + const { email, token, password } = ctx.params; - await ctx.call('auth.mail.sendResetPasswordEmail', { - account, - token - }); - }, - async setNewPassword(ctx) { - const { email, token, password } = ctx.params; + const account = await ctx.call('auth.account.findByEmail', { email }); - const account = await ctx.call('auth.account.findByEmail', { email }); + if (!account) { + throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); + } - if (!account) { - throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); + await ctx.call('auth.account.setNewPassword', { webId: account.webId, token, password }); } - - await ctx.call('auth.account.setNewPassword', { webId: account.webId, token, password }); - } + }) }, methods: { getStrategy() { @@ -233,6 +251,14 @@ const AuthLocalService = { return routes; } } -}; +} satisfies ServiceSchema; -module.exports = AuthLocalService; +export default AuthLocalService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthLocalService.name]: typeof AuthLocalService; + } + } +} diff --git a/src/middleware/packages/auth/services/auth.oidc.ts b/src/middleware/packages/auth/services/auth.oidc.ts index afa76d62a..abf6f35ee 100644 --- a/src/middleware/packages/auth/services/auth.oidc.ts +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -1,13 +1,15 @@ -const urlJoin = require('url-join'); -const { Issuer, Strategy, custom } = require('openid-client'); +import urlJoin from 'url-join'; +import { Issuer, Strategy, custom } from 'openid-client'; custom.setHttpOptionsDefaults({ timeout: 10000 }); -const AuthSSOMixin = require('../mixins/auth.sso'); + +import AuthSSOMixin from '../mixins/auth.sso.ts'; +import { ServiceSchema } from 'moleculer'; const AuthOIDCService = { - name: 'auth', + name: 'auth' as const, mixins: [AuthSSOMixin], settings: { baseUrl: null, @@ -65,6 +67,14 @@ const AuthOIDCService = { ); } } -}; +} satisfies ServiceSchema; + +export default AuthOIDCService; -module.exports = AuthOIDCService; +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthOIDCService.name]: typeof AuthOIDCService; + } + } +} diff --git a/src/middleware/packages/auth/services/jwt.ts b/src/middleware/packages/auth/services/jwt.ts index 386436230..b172935fe 100644 --- a/src/middleware/packages/auth/services/jwt.ts +++ b/src/middleware/packages/auth/services/jwt.ts @@ -1,7 +1,8 @@ -const fs = require('fs'); -const path = require('path'); -const jwt = require('jsonwebtoken'); -const crypto = require('crypto'); +import fs from 'fs'; +import path from 'path'; +import jwt from 'jsonwebtoken'; +import crypto from 'crypto'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Service that creates and validates JSON web tokens(JWT). @@ -10,8 +11,8 @@ const crypto = require('crypto'); * * TODO: Tokens do not expire. */ -module.exports = { - name: 'auth.jwt', +const AuthJwtSchema = { + name: 'auth.jwt' as const, settings: { jwtPath: null }, @@ -31,71 +32,95 @@ module.exports = { this.publicKey = fs.readFileSync(publicKeyPath); }, actions: { - generateKeyPair(ctx) { - const { privateKeyPath, publicKeyPath } = ctx.params; + generateKeyPair: defineAction({ + handler(ctx) { + const { privateKeyPath, publicKeyPath } = ctx.params; - return new Promise((resolve, reject) => { - crypto.generateKeyPair( - 'rsa', - { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem' + return new Promise((resolve, reject) => { + crypto.generateKeyPair( + 'rsa', + { + modulusLength: 4096, + publicKeyEncoding: { + type: 'spki', + format: 'pem' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'pem' + } }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' + (err, publicKey, privateKey) => { + if (err) { + reject(err); + } else { + fs.writeFile(privateKeyPath, privateKey, err => { + if (err) { + reject(err); + } else { + fs.writeFile(publicKeyPath, publicKey, err => { + if (err) { + reject(err); + } else { + resolve({ privateKey, publicKey }); + } + }); + } + }); + } } - }, - (err, publicKey, privateKey) => { - if (err) { - reject(err); - } else { - fs.writeFile(privateKeyPath, privateKey, err => { - if (err) { - reject(err); - } else { - fs.writeFile(publicKeyPath, publicKey, err => { - if (err) { - reject(err); - } else { - resolve({ privateKey, publicKey }); - } - }); - } - }); - } - } - ); - }); - }, - async generateServerSignedToken(ctx) { - const { payload } = ctx.params; - return jwt.sign(payload, this.privateKey, { algorithm: 'RS256' }); - }, - /** Verifies that the token was signed by this server. */ - async verifyServerSignedToken(ctx) { - const { token } = ctx.params; - try { - return jwt.verify(token, this.publicKey, { algorithms: ['RS256'] }); - } catch (err) { - return false; + ); + }); + } + }), + + generateServerSignedToken: defineAction({ + async handler(ctx) { + const { payload } = ctx.params; + return jwt.sign(payload, this.privateKey, { algorithm: 'RS256' }); } - }, - async generateUnsignedToken(ctx) { - const { payload } = ctx.params; - const token = jwt.sign(payload, null, { algorithm: 'none' }); - return token; - }, - // Warning, this does NOT verify if signature is valid - async decodeToken(ctx) { - const { token } = ctx.params; - try { - return jwt.decode(token); - } catch (err) { - return false; + }), + + verifyServerSignedToken: defineAction({ + /** Verifies that the token was signed by this server. */ + async handler(ctx) { + const { token } = ctx.params; + try { + return jwt.verify(token, this.publicKey, { algorithms: ['RS256'] }); + } catch (err) { + return false; + } + } + }), + + generateUnsignedToken: defineAction({ + async handler(ctx) { + const { payload } = ctx.params; + const token = jwt.sign(payload, null, { algorithm: 'none' }); + return token; } + }), + + decodeToken: defineAction({ + // Warning, this does NOT verify if signature is valid + async handler(ctx) { + const { token } = ctx.params; + try { + return jwt.decode(token); + } catch (err) { + return false; + } + } + }) + } +} satisfies ServiceSchema; + +export default AuthJwtSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthJwtSchema.name]: typeof AuthJwtSchema; } } -}; +} diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts index 3a94b2e29..706756282 100644 --- a/src/middleware/packages/auth/services/mail.ts +++ b/src/middleware/packages/auth/services/mail.ts @@ -1,9 +1,10 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const MailService = require('moleculer-mail'); +import path from 'path'; +import urlJoin from 'url-join'; +import MailService from 'moleculer-mail'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'auth.mail', +const AuthMailSchema = { + name: 'auth.mail' as const, mixins: [MailService], settings: { defaults: { @@ -15,24 +16,26 @@ module.exports = { transport: null }, actions: { - async sendResetPasswordEmail(ctx) { - const { account, token } = ctx.params; + sendResetPasswordEmail: defineAction({ + async handler(ctx) { + const { account, token } = ctx.params; - await this.actions.send( - { - to: account.email, - template: 'reset-password', - locale: this.getTemplateLocale(account.preferredLocale || this.settings.defaults.locale), - data: { - account, - resetUrl: `${urlJoin(this.settings.defaults.frontUrl, 'login')}?new_password=true&token=${token}` + await this.actions.send( + { + to: account.email, + template: 'reset-password', + locale: this.getTemplateLocale(account.preferredLocale || this.settings.defaults.locale), + data: { + account, + resetUrl: `${urlJoin(this.settings.defaults.frontUrl, 'login')}?new_password=true&token=${token}` + } + }, + { + parentCtx: ctx } - }, - { - parentCtx: ctx - } - ); - } + ); + } + }) }, methods: { getTemplateLocale(userLocale) { @@ -46,4 +49,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default AuthMailSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthMailSchema.name]: typeof AuthMailSchema; + } + } +} diff --git a/src/middleware/packages/auth/services/migration.ts b/src/middleware/packages/auth/services/migration.ts index f42dc615d..9b1fedb10 100644 --- a/src/middleware/packages/auth/services/migration.ts +++ b/src/middleware/packages/auth/services/migration.ts @@ -1,28 +1,41 @@ -const { getSlugFromUri } = require('@semapps/ldp'); +import { getSlugFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'auth.migration', +const AuthMigrationSchema = { + name: 'auth.migration' as const, actions: { - async migrateUsersToAccounts(ctx) { - const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; + migrateUsersToAccounts: defineAction({ + async handler(ctx) { + const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; - const results = await ctx.call('ldp.container.get', { containerUri: usersContainer }); + const results = await ctx.call('ldp.container.get', { containerUri: usersContainer }); - for (const user of results['ldp:contains']) { - if (user[emailPredicate]) { - try { - await ctx.call('auth.account.create', { - email: user[emailPredicate], - username: usernamePredicate ? user[usernamePredicate] : getSlugFromUri(user.id), - webId: user.id - }); - } catch (e) { - console.log(`Unable to create account for user ${user.id}. Error message: ${e.message}`); + for (const user of results['ldp:contains']) { + if (user[emailPredicate]) { + try { + await ctx.call('auth.account.create', { + email: user[emailPredicate], + username: usernamePredicate ? user[usernamePredicate] : getSlugFromUri(user.id), + webId: user.id + }); + } catch (e) { + console.log(`Unable to create account for user ${user.id}. Error message: ${e.message}`); + } + } else { + console.log(`No email found for user ${user.id}`); } - } else { - console.log(`No email found for user ${user.id}`); } } + }) + } +} satisfies ServiceSchema; + +export default AuthMigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthMigrationSchema.name]: typeof AuthMigrationSchema; } } -}; +} diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index 2c15c4b3d..d8ef0bce2 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -1,18 +1,21 @@ -const { CronJob } = require('cron'); -const fs = require('fs'); -const { emptyDirSync } = require('fs-extra'); -const pathJoin = require('path').join; -const fsCopy = require('./utils/fsCopy'); -const ftpCopy = require('./utils/ftpCopy'); -const rsyncCopy = require('./utils/rsyncCopy'); -const ftpRemove = require('./utils/ftpRemove'); -const fsRemove = require('./utils/fsRemove'); +import { CronJob } from 'cron'; +import fs from 'fs'; +import { emptyDirSync } from 'fs-extra'; +import pathModule from 'path'; +const pathJoin = pathModule.join; +import fsCopy from './utils/fsCopy.ts'; +import ftpCopy from './utils/ftpCopy.ts'; +import rsyncCopy from './utils/rsyncCopy.ts'; +import ftpRemove from './utils/ftpRemove.ts'; +import fsRemove from './utils/fsRemove.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; + /** * @typedef {import('moleculer').Context} Context */ const BackupService = { - name: 'backup', + name: 'backup' as const, settings: { localServer: { fusekiBase: null, @@ -54,74 +57,86 @@ const BackupService = { } }, actions: { - async backupAll(ctx) { - await this.actions.backupDatasets({}, { parentCtx: ctx }); - await this.actions.backupOtherDirs({}, { parentCtx: ctx }); - }, - async backupDatasets(ctx) { - // Generate a new backup of all datasets - const datasets = await ctx.call('triplestore.dataset.list'); - for (const dataset of datasets) { - this.logger.info(`Backing up dataset: ${dataset}`); - await ctx.call('triplestore.dataset.backup', { dataset }); + backupAll: defineAction({ + async handler(ctx) { + await this.actions.backupDatasets({}, { parentCtx: ctx }); + await this.actions.backupOtherDirs({}, { parentCtx: ctx }); } + }), - const backupsDirPath = pathJoin(this.settings.localServer.fusekiBase, 'backups'); + backupDatasets: defineAction({ + async handler(ctx) { + // Generate a new backup of all datasets + const datasets = await ctx.call('triplestore.dataset.list'); + for (const dataset of datasets) { + this.logger.info(`Backing up dataset: ${dataset}`); + await ctx.call('triplestore.dataset.backup', { dataset }); + } - const copied = await this.actions.copyToRemoteServer( - { path: backupsDirPath, subDir: 'datasets' }, - { parentCtx: ctx } - ); + const backupsDirPath = pathJoin(this.settings.localServer.fusekiBase, 'backups'); - // If there was an error on copy, don't delete the backups - if (copied && this.settings.deleteFusekiBackupsAfterCopy) { - emptyDirSync(backupsDirPath); - } - }, - async backupOtherDirs(ctx) { - const { otherDirsPaths } = this.settings.localServer; + const copied = await this.actions.copyToRemoteServer( + { path: backupsDirPath, subDir: 'datasets' }, + { parentCtx: ctx } + ); - if (!otherDirsPaths) { - this.logger.info('No otherDirPaths defined, skipping backup...'); - return; + // If there was an error on copy, don't delete the backups + if (copied && this.settings.deleteFusekiBackupsAfterCopy) { + emptyDirSync(backupsDirPath); + } } + }), - for (const [key, path] of Object.entries(otherDirsPaths)) { - this.logger.info(`Backing up directory: ${path}`); - await this.actions.copyToRemoteServer({ path, subDir: key }, { parentCtx: ctx }); - } - }, - async copyToRemoteServer(ctx) { - const { path, subDir } = ctx.params; - const { copyMethod, remoteServer } = this.settings; - - // Path is mandatory for all copy methods - if (!remoteServer.path) { - this.logger.info('No remote server config defined, skipping remote backup...'); - return false; + backupOtherDirs: defineAction({ + async handler(ctx) { + const { otherDirsPaths } = this.settings.localServer; + + if (!otherDirsPaths) { + this.logger.info('No otherDirPaths defined, skipping backup...'); + return; + } + + for (const [key, path] of Object.entries(otherDirsPaths)) { + this.logger.info(`Backing up directory: ${path}`); + await this.actions.copyToRemoteServer({ path, subDir: key }, { parentCtx: ctx }); + } } + }), - try { - switch (copyMethod) { - case 'rsync': - await rsyncCopy(path, subDir, remoteServer, false); - break; + copyToRemoteServer: defineAction({ + async handler(ctx) { + const { path, subDir } = ctx.params; + const { copyMethod, remoteServer } = this.settings; + + // Path is mandatory for all copy methods + if (!remoteServer.path) { + this.logger.info('No remote server config defined, skipping remote backup...'); + return false; + } + + try { + switch (copyMethod) { + case 'rsync': + await rsyncCopy(path, subDir, remoteServer, false); + break; - case 'ftp': - await ftpCopy(path, subDir, remoteServer); - break; + case 'ftp': + await ftpCopy(path, subDir, remoteServer); + break; - case 'fs': - await fsCopy(path, subDir, remoteServer); - break; + case 'fs': + await fsCopy(path, subDir, remoteServer); + break; + } + return true; + } catch (e) { + this.logger.error(`Failed to copy ${path} to remote server with ${copyMethod}. Error: ${e.message}`); + return false; } - return true; - } catch (e) { - this.logger.error(`Failed to copy ${path} to remote server with ${copyMethod}. Error: ${e.message}`); - return false; } - }, - deleteDataset: { + }), + + deleteDataset: defineAction({ params: { dataset: { type: 'string' } }, @@ -159,21 +174,32 @@ const BackupService = { } } } - }, - // Returns an array of file paths to the backups relative to `this.settings.localServer.fusekiBase`. - async listBackupsForDataset(ctx) { - const { dataset } = ctx.params; - - // File format: _ - const backupsPattern = RegExp(`^${dataset}_.{10}_.{8}\\.nq\\.gz$`); - const filenames = await fs.promises - .readdir(pathJoin(this.settings.localServer.fusekiBase, 'backups')) - .then(files => files.filter(file => backupsPattern.test(file))) - .then(files => files.map(file => pathJoin(this.settings.localServer.fusekiBase, 'backups', file))); - - return filenames; - } + }), + + listBackupsForDataset: defineAction({ + // Returns an array of file paths to the backups relative to `this.settings.localServer.fusekiBase`. + async handler(ctx) { + const { dataset } = ctx.params; + + // File format: _ + const backupsPattern = RegExp(`^${dataset}_.{10}_.{8}\\.nq\\.gz$`); + const filenames = await fs.promises + .readdir(pathJoin(this.settings.localServer.fusekiBase, 'backups')) + .then(files => files.filter(file => backupsPattern.test(file))) + .then(files => files.map(file => pathJoin(this.settings.localServer.fusekiBase, 'backups', file))); + + return filenames; + } + }) } -}; +} satisfies ServiceSchema; + +export default BackupService; -module.exports = BackupService; +declare global { + export namespace Moleculer { + export interface AllServices { + [BackupService.name]: typeof BackupService; + } + } +} diff --git a/src/middleware/packages/backup/utils/fsCopy.ts b/src/middleware/packages/backup/utils/fsCopy.ts index 20b71e925..d5d05c00a 100644 --- a/src/middleware/packages/backup/utils/fsCopy.ts +++ b/src/middleware/packages/backup/utils/fsCopy.ts @@ -1,9 +1,9 @@ -const fs = require('fs-extra'); -const { join: pathJoin } = require('path'); +import fs from 'fs-extra'; +import { join as pathJoin } from 'path'; const fsCopy = async (path, subDir, remoteServer) => { const destDir = pathJoin(remoteServer.path, subDir); await fs.copy(path, destDir); }; -module.exports = fsCopy; +export default fsCopy; diff --git a/src/middleware/packages/backup/utils/fsRemove.ts b/src/middleware/packages/backup/utils/fsRemove.ts index 7a4315d0d..bc071f3d7 100644 --- a/src/middleware/packages/backup/utils/fsRemove.ts +++ b/src/middleware/packages/backup/utils/fsRemove.ts @@ -1,5 +1,5 @@ -const fs = require('fs'); -const { join: pathJoin } = require('path'); +import fs from 'fs'; +import { join as pathJoin } from 'path'; const fsRemove = async (removeFiles, subDir, remoteServer) => { await Promise.all( @@ -9,4 +9,4 @@ const fsRemove = async (removeFiles, subDir, remoteServer) => { ); }; -module.exports = fsRemove; +export default fsRemove; diff --git a/src/middleware/packages/backup/utils/ftpCopy.ts b/src/middleware/packages/backup/utils/ftpCopy.ts index c9b7b31e6..cb4796211 100644 --- a/src/middleware/packages/backup/utils/ftpCopy.ts +++ b/src/middleware/packages/backup/utils/ftpCopy.ts @@ -1,6 +1,6 @@ -const fs = require('fs'); -const Client = require('ssh2-sftp-client'); -const { join: pathJoin } = require('path'); +import fs from 'fs'; +import Client from 'ssh2-sftp-client'; +import { join as pathJoin } from 'path'; const ftpCopy = (path, subDir, remoteServer) => { return new Promise((resolve, reject) => { @@ -30,4 +30,4 @@ const ftpCopy = (path, subDir, remoteServer) => { }); }; -module.exports = ftpCopy; +export default ftpCopy; diff --git a/src/middleware/packages/backup/utils/ftpRemove.ts b/src/middleware/packages/backup/utils/ftpRemove.ts index 6176a13ba..59bb90dca 100644 --- a/src/middleware/packages/backup/utils/ftpRemove.ts +++ b/src/middleware/packages/backup/utils/ftpRemove.ts @@ -1,5 +1,5 @@ -const Client = require('ssh2-sftp-client'); -const { join: pathJoin } = require('path'); +import Client from 'ssh2-sftp-client'; +import { join as pathJoin } from 'path'; const ftpRemove = (removeFiles, remoteServer) => { return new Promise((resolve, reject) => { @@ -21,4 +21,4 @@ const ftpRemove = (removeFiles, remoteServer) => { }); }; -module.exports = ftpRemove; +export default ftpRemove; diff --git a/src/middleware/packages/backup/utils/rsyncCopy.ts b/src/middleware/packages/backup/utils/rsyncCopy.ts index 573075266..9a924d703 100644 --- a/src/middleware/packages/backup/utils/rsyncCopy.ts +++ b/src/middleware/packages/backup/utils/rsyncCopy.ts @@ -1,5 +1,5 @@ -const Rsync = require('rsync'); -const { join: pathJoin } = require('path'); +import Rsync from 'rsync'; +import { join as pathJoin } from 'path'; const rsyncCopy = (path, subDir, remoteServer, syncDelete = false) => { // Setup rsync to remote server @@ -24,4 +24,4 @@ const rsyncCopy = (path, subDir, remoteServer, syncDelete = false) => { }); }; -module.exports = rsyncCopy; +export default rsyncCopy; diff --git a/src/middleware/packages/core/index.ts b/src/middleware/packages/core/index.ts index b9d68cf85..1b55d1a47 100644 --- a/src/middleware/packages/core/index.ts +++ b/src/middleware/packages/core/index.ts @@ -1,3 +1,2 @@ -module.exports = { - CoreService: require('./service') -}; +import CoreService from './service.ts'; +export { CoreService }; diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 818f28858..239de38e1 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -1,17 +1,18 @@ -const path = require('path'); -const ApiGatewayService = require('moleculer-web'); -const { Errors: E } = require('moleculer-web'); -const { ActivityPubService, FULL_ACTOR_TYPES } = require('@semapps/activitypub'); -const { JsonLdService } = require('@semapps/jsonld'); -const { LdpService, DocumentTaggerMixin } = require('@semapps/ldp'); -const { OntologiesService } = require('@semapps/ontologies'); -const { SparqlEndpointService } = require('@semapps/sparql-endpoint'); -const { TripleStoreService } = require('@semapps/triplestore'); -const { VoidService } = require('@semapps/void'); -const { WebAclService } = require('@semapps/webacl'); -const { WebfingerService } = require('@semapps/webfinger'); -const { KeysService, SignatureService } = require('@semapps/crypto'); -const { WebIdService } = require('@semapps/webid'); +import path from 'path'; +import ApiGatewayService from 'moleculer-web'; +import { Errors as E } from 'moleculer-web'; +import { ActivityPubService, FULL_ACTOR_TYPES } from '@semapps/activitypub'; +import { JsonLdService } from '@semapps/jsonld'; +import { LdpService, DocumentTaggerMixin } from '@semapps/ldp'; +import { OntologiesService } from '@semapps/ontologies'; +import { SparqlEndpointService } from '@semapps/sparql-endpoint'; +import { TripleStoreService } from '@semapps/triplestore'; +import { VoidService } from '@semapps/void'; +import { WebAclService } from '@semapps/webacl'; +import { WebfingerService } from '@semapps/webfinger'; +import { KeysService, SignatureService } from '@semapps/crypto'; +import { WebIdService } from '@semapps/webid'; +import { ServiceSchema } from 'moleculer'; const botsContainer = { path: '/as/application', @@ -25,7 +26,7 @@ const botsContainer = { /** @type {import('moleculer').ServiceSchema} */ const CoreService = { - name: 'core', + name: 'core' as const, settings: { baseUrl: undefined, baseDir: undefined, @@ -227,6 +228,14 @@ const CoreService = { }); } } -}; +} satisfies ServiceSchema; + +export default CoreService; -module.exports = CoreService; +declare global { + export namespace Moleculer { + export interface AllServices { + [CoreService.name]: typeof CoreService; + } + } +} diff --git a/src/middleware/packages/crypto/constants.ts b/src/middleware/packages/crypto/constants.ts index 8196f9788..dbfb700c9 100644 --- a/src/middleware/packages/crypto/constants.ts +++ b/src/middleware/packages/crypto/constants.ts @@ -1,5 +1,4 @@ -const noGraphCredentialContext = require('./utils/noGraphCredentialContext'); - +import noGraphCredentialContext from './utils/noGraphCredentialContext.ts'; const VC_API_PATH = '/vc/v0.3'; /** @@ -50,9 +49,4 @@ const KEY_TYPES = { KEY: 'https://w3id.org/security#Key' }; -module.exports = { - VC_API_PATH, - KEY_TYPES, - credentialsContext, - credentialsContextNoGraphProof -}; +export { VC_API_PATH, KEY_TYPES, credentialsContext, credentialsContextNoGraphProof }; diff --git a/src/middleware/packages/crypto/index.ts b/src/middleware/packages/crypto/index.ts index c2da76dba..0a3e4ea59 100644 --- a/src/middleware/packages/crypto/index.ts +++ b/src/middleware/packages/crypto/index.ts @@ -1,6 +1,4 @@ -module.exports = { - ...require('./keys'), - ...require('./signature'), - ...require('./constants'), - ...require('./verifiable-credentials') -}; +export * from './keys.ts'; +export * from './signature.ts'; +export * from './constants.ts'; +export * from './verifiable-credentials.ts'; diff --git a/src/middleware/packages/crypto/keys/index.ts b/src/middleware/packages/crypto/keys/index.ts index e53efda24..b60e2e742 100644 --- a/src/middleware/packages/crypto/keys/index.ts +++ b/src/middleware/packages/crypto/keys/index.ts @@ -1,4 +1,3 @@ -module.exports = { - MigrationService: require('./migration'), - KeysService: require('./keys') -}; +import MigrationService from './migration.ts'; +import KeysService from './keys.ts'; +export { MigrationService, KeysService }; diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index ed191b8bd..e8d84be1a 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -1,7 +1,8 @@ -const { ControlledContainerMixin } = require('@semapps/ldp'); -const { Errors: E } = require('moleculer-web'); -const { arrayOf } = require('../utils/utils'); -const { KEY_TYPES } = require('../constants'); +import { ControlledContainerMixin } from '@semapps/ldp'; +import { Errors as E } from 'moleculer-web'; +import { arrayOf } from '../utils/utils.ts'; +import { KEY_TYPES } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * DANGER ZONE @@ -11,8 +12,8 @@ const { KEY_TYPES } = require('../constants'); * Watch out with permissions. This should be strictly limited to the owner and privileged apps. * @type {import('moleculer').ServiceSchema} */ -module.exports = { - name: 'keys.container', +const KeysContainerSchema = { + name: 'keys.container' as const, mixins: [ControlledContainerMixin], settings: { path: '/key', @@ -49,31 +50,46 @@ module.exports = { } }, actions: { - async forbidden(ctx) { - throw new E.ForbiddenError(); - }, - /** - * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. - * See: - * - https://www.w3.org/TR/controller-document/#json-ld-context - * - https://www.w3.org/TR/controller-document/#Multikey - * - * This Action is used by the public key container as well. - * - */ - async get(ctx) { - const resource = await ctx.call('ldp.resource.get', { - ...ctx.params, - jsonContext: ['https://w3id.org/security/multikey/v1', ...(await ctx.call('jsonld.context.get'))] - }); + forbidden: defineAction({ + async handler(ctx) { + throw new E.ForbiddenError(); + } + }), - // Make type `Multikey` only, to comply with spec. - if (arrayOf(resource.type).includes('sec:Multikey') || arrayOf(resource.type).includes('Multikey')) { - // Type must be Multikey only - resource.type = 'Multikey'; + get: defineAction({ + /** + * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. + * See: + * - https://www.w3.org/TR/controller-document/#json-ld-context + * - https://www.w3.org/TR/controller-document/#Multikey + * + * This Action is used by the public key container as well. + * + */ + async handler(ctx) { + const resource = await ctx.call('ldp.resource.get', { + ...ctx.params, + jsonContext: ['https://w3id.org/security/multikey/v1', ...(await ctx.call('jsonld.context.get'))] + }); + + // Make type `Multikey` only, to comply with spec. + if (arrayOf(resource.type).includes('sec:Multikey') || arrayOf(resource.type).includes('Multikey')) { + // Type must be Multikey only + resource.type = 'Multikey'; + } + + return resource; } + }) + } +} satisfies ServiceSchema; + +export default KeysContainerSchema; - return resource; +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysContainerSchema.name]: typeof KeysContainerSchema; } } -}; +} diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index d8a4b8305..cbad0a7ad 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -1,15 +1,16 @@ -const fetch = require('node-fetch'); -const { generateKeyPair } = require('crypto'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { sec } = require('@semapps/ontologies'); -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); -const { arrayOf } = require('../utils/utils'); -const { KEY_TYPES } = require('../constants'); -const KeyContainerService = require('./key-container'); -const PublicKeyContainerService = require('./public-key-container'); -const MigrationService = require('./migration'); -const { KeyPairService } = require('../signature'); +import fetch from 'node-fetch'; +import { generateKeyPair } from 'crypto'; +import { namedNode, triple } from '@rdfjs/data-model'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { sec } from '@semapps/ontologies'; +import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; +import { arrayOf } from '../utils/utils.ts'; +import { KEY_TYPES } from '../constants.ts'; +import KeyContainerService from './key-container.ts'; +import PublicKeyContainerService from './public-key-container.ts'; +import MigrationService from './migration.ts'; +import { KeyPairService } from '../signature/index.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ @@ -26,7 +27,7 @@ const { KeyPairService } = require('../signature'); * @type {import('moleculer').ServiceSchema} */ const KeysService = { - name: 'keys', + name: 'keys' as const, settings: { podProvider: false, actorsKeyPairsDir: null @@ -74,7 +75,7 @@ const KeysService = { * Returns all available keys of the given `keyType` in the `/key` container. * If none is available `[]` is returned. */ - getByType: { + getByType: defineAction({ params: { keyType: { type: 'string' }, webId: { type: 'string', optional: true } @@ -94,7 +95,7 @@ const KeysService = { return matchedKeys; } - }, + }), /** * Gets the keys by type that are present in the actor's webId. @@ -102,7 +103,7 @@ const KeysService = { * TODO: If this becomes a performance bottleneck, we can use SPARQL queries. * @returns An array of keys present in the webId. */ - getOrCreateWebIdKeys: { + getOrCreateWebIdKeys: defineAction({ params: { keyType: { type: 'string' }, webId: { type: 'string' } @@ -137,14 +138,14 @@ const KeysService = { }) ); } - }, + }), /** * Returns a signing key instance for a given key or key type. If no key is available, a new one is created. * Currently supports Ed25519Multikey only. * @returns {object} The Multikey object. */ - getMultikey: { + getMultikey: defineAction({ params: { webId: { type: 'string' }, keyObject: { type: 'object', optional: true }, @@ -177,7 +178,7 @@ const KeysService = { return keyObject; } - }, + }), /** * Generates key, stores it in the `/key` container. @@ -185,7 +186,7 @@ const KeysService = { * If `attachToWebId` is true (not default), it will publish the key and attach the key to the webId document. * @returns {object} The key resource as located in the `/key` container. */ - createKeyForActor: { + createKeyForActor: defineAction({ params: { webId: { type: 'string' }, keyType: { type: 'string' }, @@ -223,13 +224,13 @@ const KeysService = { return keyObject; } - }, + }), /** * Generate a key of the type specified. * Type must be in the form of a {@link KEY_TYPES} URI. */ - generateKey: { + generateKey: defineAction({ params: { keyType: { type: 'string' } }, @@ -245,13 +246,13 @@ const KeysService = { throw new Error('Key type not supported.'); } - }, + }), /** * Generate ED25519 key pair. * @returns {object} Key pair in [MultiKey format](https://www.w3.org/TR/controller-document/#Multikey). */ - generateEd25519Key: { + generateEd25519Key: defineAction({ params: {}, async handler() { const keyPair = await Ed25519Multikey.generate(); @@ -265,7 +266,7 @@ const KeysService = { keyObject['@type'] = [KEY_TYPES.ED25519, KEY_TYPES.MULTI_KEY, KEY_TYPES.VERIFICATION_METHOD]; return keyObject; } - }, + }), /** * Generate a RSA key pair and returns public and private key in spki pkcs8 PEM encodings, respectively. @@ -276,7 +277,7 @@ const KeysService = { * 'privateKeyPem': privateKeyPkcs8PemString } * ``` */ - generateRsaKey: { + generateRsaKey: defineAction({ params: {}, async handler() { return new Promise((resolve, reject) => { @@ -307,7 +308,7 @@ const KeysService = { ); }); } - }, + }), /** * Attaches a given key to the webId document. @@ -318,7 +319,7 @@ const KeysService = { * @param {string} ctx.keyId The id of the public-private key pair resource. * @param {string} ctx.keyObject Alternatively, the public-private key pair resource itself. */ - attachPublicKeyToWebId: { + attachPublicKeyToWebId: defineAction({ params: { webId: { type: 'string' }, keyId: { type: 'string', optional: true }, @@ -373,10 +374,10 @@ const KeysService = { webId }); } - }, + }), /** Given a key object, remove the key from the webId document. */ - detachFromWebId: { + detachFromWebId: defineAction({ params: { webId: { type: 'string' }, publicKeyId: { type: 'string' } @@ -394,10 +395,10 @@ const KeysService = { webId }); } - }, + }), /** Given a local key (stored in `/key`), add the public key part to the `/public-key` container. */ - publishPublicKeyLocally: { + publishPublicKeyLocally: defineAction({ params: { keyId: { type: 'string', optional: true }, keyObject: { type: 'object', optional: true }, @@ -431,12 +432,12 @@ const KeysService = { }); return publicKeyUri; } - }, + }), /** * Removes key from `key` container and detaches it from webId document and `public-key` container. */ - delete: { + delete: defineAction({ params: { resourceUri: { type: 'string', optional: true }, keyObject: { type: 'object', optional: true }, @@ -460,10 +461,10 @@ const KeysService = { await this.actions.detachFromWebId({ webId, publicKeyId }, { parentCtx: ctx }); } } - }, + }), /** Delete all keys belonging to an actor. */ - deleteAllKeysForWebId: { + deleteAllKeysForWebId: defineAction({ params: { webId: { type: 'string' } }, @@ -474,14 +475,14 @@ const KeysService = { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } } - }, + }), /** * Fetches remote keys from a webId (publicKey or assertionMethod field). * Returns all keys of the given `keyType` or all, if `keyType` is `null`. * Does not filter outdated keys. */ - getRemotePublicKeys: { + getRemotePublicKeys: defineAction({ params: { webId: { type: 'string' }, keyType: { type: 'string', optional: true, default: KEY_TYPES.RSA, nullable: true } @@ -527,12 +528,12 @@ const KeysService = { return keyObjects; } - }, + }), /** * Returns the public key part of a given `keyObject`. */ - getPublicKeyObject: { + getPublicKeyObject: defineAction({ params: { keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } @@ -570,9 +571,9 @@ const KeysService = { /** @type {never} Not implemented yet. */ throw new Error(`Key type ${keyType} not supported.`); } - }, + }), - findPrivateKeyUri: { + findPrivateKeyUri: defineAction({ params: { publicKeyUri: { type: 'string' } }, @@ -593,7 +594,7 @@ const KeysService = { return queryResult[0]?.privateKey?.value; } - } + }) }, methods: {}, hooks: { @@ -608,38 +609,55 @@ const KeysService = { } }, events: { - async 'keys.migration.migrated'() { - this.isMigrated = true; - }, - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - - if (!this.isMigrated) { - // Key creation will be handled by legacy service. - return; + 'keys.migration.migrated': defineServiceEvent({ + async handler() { + this.isMigrated = true; } + }), - // Wait for the key containers to be created. - const keyContainerUri = await ctx.call('keys.container.getContainerUri', { webId }, { parentCtx: ctx }); - const publicKeyContainerUri = await ctx.call( - 'keys.public-container.getContainerUri', - { webId }, - { parentCtx: ctx } - ); - await ctx.call('keys.container.waitForContainerCreation', { containerUri: keyContainerUri }, { parentCtx: ctx }); - await ctx.call( - 'keys.container.waitForContainerCreation', - { containerUri: publicKeyContainerUri }, - { parentCtx: ctx } - ); - - // Create, publish and attach keys to the webId. - await Promise.all([ - this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.RSA }, { parentCtx: ctx }), - this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) - ]); - } + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; + + if (!this.isMigrated) { + // Key creation will be handled by legacy service. + return; + } + + // Wait for the key containers to be created. + const keyContainerUri = await ctx.call('keys.container.getContainerUri', { webId }, { parentCtx: ctx }); + const publicKeyContainerUri = await ctx.call( + 'keys.public-container.getContainerUri', + { webId }, + { parentCtx: ctx } + ); + await ctx.call( + 'keys.container.waitForContainerCreation', + { containerUri: keyContainerUri }, + { parentCtx: ctx } + ); + await ctx.call( + 'keys.container.waitForContainerCreation', + { containerUri: publicKeyContainerUri }, + { parentCtx: ctx } + ); + + // Create, publish and attach keys to the webId. + await Promise.all([ + this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.RSA }, { parentCtx: ctx }), + this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) + ]); + } + }) } -}; +} satisfies ServiceSchema; + +export default KeysService; -module.exports = KeysService; +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysService.name]: typeof KeysService; + } + } +} diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index 8053548e1..e02de32b6 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -1,131 +1,136 @@ -const fs = require('fs'); -const path = require('path'); -const { KEY_TYPES } = require('../constants'); +import fs from 'fs'; +import path from 'path'; +import { KEY_TYPES } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ -module.exports = { - name: 'keys.migration', +const KeysMigrationSchema = { + name: 'keys.migration' as const, settings: { actorsKeyPairsDir: null, podProvider: false }, actions: { - /** Migrates cryptographic RSA keys from filesystem storage to the `/keys` ldp containers */ - async migrateKeysToDb(ctx) { - // Check actorsKeyPairsDir for existing keys. - if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { - this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't exist."); - return; - } + migrateKeysToDb: defineAction({ + /** Migrates cryptographic RSA keys from filesystem storage to the `/keys` ldp containers */ + async handler(ctx) { + // Check actorsKeyPairsDir for existing keys. + if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { + this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't exist."); + return; + } - const accounts = await ctx.call('auth.account.find'); - const usernamesByKey = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .filter(fn => fn.endsWith('.key')) - .map(file => file.substring(0, file.length - 4)); + const accounts = await ctx.call('auth.account.find'); + const usernamesByKey = fs + .readdirSync(this.settings.actorsKeyPairsDir) + .filter(fn => fn.endsWith('.key')) + .map(file => file.substring(0, file.length - 4)); - if (usernamesByKey.length === 0) { - this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't contain any key files."); - return; - } + if (usernamesByKey.length === 0) { + this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't contain any key files."); + return; + } - let errorUsernames = []; + let errorUsernames = []; - this.logger.info(`=== Migrating keys from filesystem to LDP ===`); + this.logger.info(`=== Migrating keys from filesystem to LDP ===`); - // This can cause deadlocks otherwise. - ctx.meta.skipObjectsWatcher = true; + // This can cause deadlocks otherwise. + ctx.meta.skipObjectsWatcher = true; - for (const { webId, username } of accounts) { - // Do the migration process. - try { - this.logger.info(`Migrating key of ${webId}`); + for (const { webId, username } of accounts) { + // Do the migration process. + try { + this.logger.info(`Migrating key of ${webId}`); - if (this.settings.podProvider) ctx.meta.dataset = username; + if (this.settings.podProvider) ctx.meta.dataset = username; - const { publicKey, privateKey } = await ctx.call('signature.keypair.get', { - actorUri: webId, - webId: 'system' - }); + const { publicKey, privateKey } = await ctx.call('signature.keypair.get', { + actorUri: webId, + webId: 'system' + }); - // Delete public key material from webId (later replaced with references to the public key resources). - await this.deleteKeysFromWebId(ctx, webId); + // Delete public key material from webId (later replaced with references to the public key resources). + await this.deleteKeysFromWebId(ctx, webId); - // Create key resources in db and link to webIds. - await this.attachOrCreateToDb(ctx, webId, publicKey, privateKey); - } catch (err) { - this.logger.error(`An error occurred during migration. Key of ${webId} could not be migrated.`, err); + // Create key resources in db and link to webIds. + await this.attachOrCreateToDb(ctx, webId, publicKey, privateKey); + } catch (err) { + this.logger.error(`An error occurred during migration. Key of ${webId} could not be migrated.`, err); - errorUsernames.push(username); + errorUsernames.push(username); - // Try to revert to initial state. - try { - await this.deleteKeysFromWebId(ctx, webId); - } catch (_) { - // pass - } + // Try to revert to initial state. + try { + await this.deleteKeysFromWebId(ctx, webId); + } catch (_) { + // pass + } - // Re-add possibly deleted publicKeys to webId document. This will do nothing if keys are attached. - await ctx.call('signature.keypair.attachPublicKey', { actorUri: webId }); + // Re-add possibly deleted publicKeys to webId document. This will do nothing if keys are attached. + await ctx.call('signature.keypair.attachPublicKey', { actorUri: webId }); + } } - } - // Keys are stored in db now. - // Finally, move fs keys to ./old folder - const keyFiles = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .filter(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); - fs.mkdirSync(path.join(this.settings.actorsKeyPairsDir, 'old'), { recursive: true }); - keyFiles.map(keyFile => - fs.renameSync( - path.join(this.settings.actorsKeyPairsDir, keyFile), - path.join(this.settings.actorsKeyPairsDir, 'old', keyFile) - ) - ); - - // Stats about missing accounts and key-pairs. - const accountNames = accounts.map(acc => acc.username); - const keysWithoutRegisteredUser = usernamesByKey.filter(keyName => !accountNames.includes(keyName)); - const usersWithoutKeys = accountNames.filter(accName => !usernamesByKey.includes(accName)); - - if (errorUsernames.length > 0) { - this.logger.warn(`During the migration, the following accounts generated errors:`, errorUsernames); - } - if (keysWithoutRegisteredUser.length > 0) { - this.logger.warn( - `During the migration, the following keys were found that did not have a registered user associated:`, - keysWithoutRegisteredUser - ); - } - if (usersWithoutKeys.length > 0) { - this.logger.warn( - `During the migration, the following accounts were found that did not have key pairs. New ones were created:`, - usersWithoutKeys + // Keys are stored in db now. + // Finally, move fs keys to ./old folder + const keyFiles = fs + .readdirSync(this.settings.actorsKeyPairsDir) + .filter(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); + fs.mkdirSync(path.join(this.settings.actorsKeyPairsDir, 'old'), { recursive: true }); + keyFiles.map(keyFile => + fs.renameSync( + path.join(this.settings.actorsKeyPairsDir, keyFile), + path.join(this.settings.actorsKeyPairsDir, 'old', keyFile) + ) ); - } - this.logger.info('=== Keys migration completed ==='); - await ctx.emit('keys.migration.migrated'); - }, + // Stats about missing accounts and key-pairs. + const accountNames = accounts.map(acc => acc.username); + const keysWithoutRegisteredUser = usernamesByKey.filter(keyName => !accountNames.includes(keyName)); + const usersWithoutKeys = accountNames.filter(accName => !usernamesByKey.includes(accName)); - /** Returns true, if the server has migrated to the new keys service yet, i.e. keys are stored in the user dataset, not on fs. */ - async isMigrated() { - // If the `actorsKeyPairsDir` setting is not set, we assume migration has happened or was never needed. - if (!this.settings.actorsKeyPairsDir) { - return true; - } + if (errorUsernames.length > 0) { + this.logger.warn(`During the migration, the following accounts generated errors:`, errorUsernames); + } + if (keysWithoutRegisteredUser.length > 0) { + this.logger.warn( + `During the migration, the following keys were found that did not have a registered user associated:`, + keysWithoutRegisteredUser + ); + } + if (usersWithoutKeys.length > 0) { + this.logger.warn( + `During the migration, the following accounts were found that did not have key pairs. New ones were created:`, + usersWithoutKeys + ); + } - // Check actorsKeyPairsDir for existing keys. - if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { - return true; + this.logger.info('=== Keys migration completed ==='); + await ctx.emit('keys.migration.migrated'); } + }), + + isMigrated: defineAction({ + /** Returns true, if the server has migrated to the new keys service yet, i.e. keys are stored in the user dataset, not on fs. */ + async handler() { + // If the `actorsKeyPairsDir` setting is not set, we assume migration has happened or was never needed. + if (!this.settings.actorsKeyPairsDir) { + return true; + } - const anyKeyFile = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .find(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); + // Check actorsKeyPairsDir for existing keys. + if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { + return true; + } - return !anyKeyFile; - } + const anyKeyFile = fs + .readdirSync(this.settings.actorsKeyPairsDir) + .find(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); + + return !anyKeyFile; + } + }) }, methods: { // Delete old public key blank node and data from the webId. @@ -175,4 +180,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default KeysMigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysMigrationSchema.name]: typeof KeysMigrationSchema; + } + } +} diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index d509532ed..64a184216 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -1,15 +1,16 @@ -const { triple, namedNode } = require('@rdfjs/data-model'); -const { ControlledContainerMixin } = require('@semapps/ldp'); -const { Errors: E } = require('moleculer-web'); -const { KEY_TYPES } = require('../constants'); +import { triple, namedNode } from '@rdfjs/data-model'; +import { ControlledContainerMixin } from '@semapps/ldp'; +import { Errors as E } from 'moleculer-web'; +import { KEY_TYPES } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Container to store the public keys of actors only. * Anonymous read is allowed by default. * */ -module.exports = { - name: 'keys.public-container', +const KeysPublicContainerSchema = { + name: 'keys.public-container' as const, mixins: [ControlledContainerMixin], settings: { path: '/public-key', @@ -49,9 +50,11 @@ module.exports = { }, actions: { - async forbidden(ctx) { - throw new E.ForbiddenError(); - } + forbidden: defineAction({ + async handler(ctx) { + throw new E.ForbiddenError(); + } + }) }, hooks: { @@ -75,4 +78,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default KeysPublicContainerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [KeysPublicContainerSchema.name]: typeof KeysPublicContainerSchema; + } + } +} diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 0a8abe90c..3582d3ab4 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -1,145 +1,167 @@ -const { createSign, createHash } = require('crypto'); -const { parseRequest, verifySignature } = require('http-signature'); -const { createAuthzHeader, createSignatureString } = require('http-signature-header'); -const { Errors: E } = require('moleculer-web'); -const { KEY_TYPES } = require('../constants'); -const { arrayOf } = require('../utils/utils'); +import { createSign, createHash } from 'crypto'; +import { parseRequest, verifySignature } from 'http-signature'; +import { createAuthzHeader, createSignatureString } from 'http-signature-header'; +import { Errors as E } from 'moleculer-web'; +import { KEY_TYPES } from '../constants.ts'; +import { arrayOf } from '../utils/utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const HttpSignatureService = { // TODO: Rename to signature.http-signatures in a major release. - name: 'signature', + name: 'signature' as const, actions: { - async generateSignatureHeaders(ctx) { - const { url, method, body, actorUri } = ctx.params; - // TODO: Use new service. - const [{ privateKeyPem }] = await ctx.call('keys.getOrCreateWebIdKeys', { - keyType: KEY_TYPES.RSA, - webId: actorUri - }); - - const headers = { Date: new Date().toUTCString() }; - const includeHeaders = ['(request-target)', 'host', 'date']; - if (body) { - headers.Digest = this.buildDigest(body); - includeHeaders.push('digest'); + generateSignatureHeaders: defineAction({ + async handler(ctx) { + const { url, method, body, actorUri } = ctx.params; + // TODO: Use new service. + const [{ privateKeyPem }] = await ctx.call('keys.getOrCreateWebIdKeys', { + keyType: KEY_TYPES.RSA, + webId: actorUri + }); + + const headers = { Date: new Date().toUTCString() }; + const includeHeaders = ['(request-target)', 'host', 'date']; + if (body) { + headers.Digest = this.buildDigest(body); + includeHeaders.push('digest'); + } + + // Generate signature string + const requestOptions = { url, method, headers }; + const signatureString = createSignatureString({ includeHeaders, requestOptions }); + + // Hash signature string + const signer = createSign('sha256'); + signer.update(signatureString); + const signatureHash = signer.sign(privateKeyPem).toString('base64'); + + headers.Signature = createAuthzHeader({ + includeHeaders, + keyId: actorUri, + signature: signatureHash, + algorithm: 'rsa-sha256' + }).substr('Signature '.length); + + return headers; } + }), - // Generate signature string - const requestOptions = { url, method, headers }; - const signatureString = createSignatureString({ includeHeaders, requestOptions }); - - // Hash signature string - const signer = createSign('sha256'); - signer.update(signatureString); - const signatureHash = signer.sign(privateKeyPem).toString('base64'); - - headers.Signature = createAuthzHeader({ - includeHeaders, - keyId: actorUri, - signature: signatureHash, - algorithm: 'rsa-sha256' - }).substr('Signature '.length); - - return headers; - }, - async verifyDigest(ctx) { - const { body, headers } = ctx.params; - return headers.digest ? this.buildDigest(body) === headers.digest : true; - }, - - /** - * Given url, path, method, headers, validates a given http signature. - * If the signature is valid, it returns the actorUri and the publicKeyPem used to verify the signature. - * Else, it returns `{isValid: false}`. - * @param {object} ctx Context - * @param {object} ctx.params Params - * @param {string} ctx.params.url The URL of the request - * @param {string} ctx.params.path The path of the request - * @param {string} ctx.params.method The method of the request - * @param {object} ctx.params.headers The headers of the request - * @returns {Promise<{isValid: boolean, actorUri: string, publicKeyPem: string}>} - */ - async verifyHttpSignature(ctx) { - const { url, path, method, headers } = ctx.params; - - // If there is a x-forwarded-host header, set is as host - // This is the default behavior for Express server but the ApiGateway doesn't use Express - if (headers['x-forwarded-host']) { - headers.host = headers['x-forwarded-host']; + verifyDigest: defineAction({ + async handler(ctx) { + const { body, headers } = ctx.params; + return headers.digest ? this.buildDigest(body) === headers.digest : true; } + }), + + verifyHttpSignature: defineAction({ + /** + * Given url, path, method, headers, validates a given http signature. + * If the signature is valid, it returns the actorUri and the publicKeyPem used to verify the signature. + * Else, it returns `{isValid: false}`. + * @param {object} ctx Context + * @param {object} ctx.params Params + * @param {string} ctx.params.url The URL of the request + * @param {string} ctx.params.path The path of the request + * @param {string} ctx.params.method The method of the request + * @param {object} ctx.params.headers The headers of the request + * @returns {Promise<{isValid: boolean, actorUri: string, publicKeyPem: string}>} + */ + async handler(ctx) { + const { url, path, method, headers } = ctx.params; + + // If there is a x-forwarded-host header, set is as host + // This is the default behavior for Express server but the ApiGateway doesn't use Express + if (headers['x-forwarded-host']) { + headers.host = headers['x-forwarded-host']; + } + + const parsedSignature = parseRequest({ + url: path || url.replace(new URL(url).origin, ''), // URL without domain name + method, + headers + }); - const parsedSignature = parseRequest({ - url: path || url.replace(new URL(url).origin, ''), // URL without domain name - method, - headers - }); + const { keyId } = parsedSignature.params; + if (!keyId) return { isValid: false }; + const [actorUri] = keyId.split('#'); - const { keyId } = parsedSignature.params; - if (!keyId) return { isValid: false }; - const [actorUri] = keyId.split('#'); + // TODO: Check if keys are outdated - // TODO: Check if keys are outdated + const publicKeys = await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); - const publicKeys = await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); + if (!publicKeys) return { isValid: false }; - if (!publicKeys) return { isValid: false }; + // Check, if one of the keys is able to verify the signature. + const { isValid: keyValid, publicKey: publicKeyPem } = publicKeys + .flatMap(key => key.publicKeyPem || []) + .map(pubKeyPem => { + try { + return { isValid: verifySignature(parsedSignature, pubKeyPem), publicKey: pubKeyPem }; + } catch (e) { + return { isValid: false }; + } + }) + .find(({ isValid }) => isValid) || { isValid: false, publicKey: null }; - // Check, if one of the keys is able to verify the signature. - const { isValid: keyValid, publicKey: publicKeyPem } = publicKeys - .flatMap(key => key.publicKeyPem || []) - .map(pubKeyPem => { - try { - return { isValid: verifySignature(parsedSignature, pubKeyPem), publicKey: pubKeyPem }; - } catch (e) { - return { isValid: false }; + return { isValid: keyValid, actorUri, publicKeyPem }; + } + }), + + authenticate: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication + async handler(ctx) { + const { route, req, res } = ctx.params; + if (req.headers.signature) { + const { isValid, actorUri } = await this.actions.verifyHttpSignature( + { path: req.originalUrl, method: req.method, headers: req.headers }, + { parentCtx: ctx } + ); + if (isValid) { + ctx.meta.webId = actorUri; + return Promise.resolve(); } - }) - .find(({ isValid }) => isValid) || { isValid: false, publicKey: null }; - - return { isValid: keyValid, actorUri, publicKeyPem }; - }, - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication - async authenticate(ctx) { - const { route, req, res } = ctx.params; - if (req.headers.signature) { - const { isValid, actorUri } = await this.actions.verifyHttpSignature( - { path: req.originalUrl, method: req.method, headers: req.headers }, - { parentCtx: ctx } - ); - if (isValid) { - ctx.meta.webId = actorUri; - return Promise.resolve(); + ctx.meta.webId = 'anon'; + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } ctx.meta.webId = 'anon'; - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + return Promise.resolve(null); } - ctx.meta.webId = 'anon'; - return Promise.resolve(null); - }, - // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization - async authorize(ctx) { - const { route, req, res } = ctx.params; - if (req.headers.signature) { - const { isValid, actorUri } = await this.actions.verifyHttpSignature( - { path: req.originalUrl, method: req.method, headers: req.headers }, - { parentCtx: ctx } - ); - if (isValid) { - ctx.meta.webId = actorUri; - return Promise.resolve(); + }), + + authorize: defineAction({ + // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization + async handler(ctx) { + const { route, req, res } = ctx.params; + if (req.headers.signature) { + const { isValid, actorUri } = await this.actions.verifyHttpSignature( + { path: req.originalUrl, method: req.method, headers: req.headers }, + { parentCtx: ctx } + ); + if (isValid) { + ctx.meta.webId = actorUri; + return Promise.resolve(); + } + ctx.meta.webId = 'anon'; + return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } ctx.meta.webId = 'anon'; - return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); + return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); } - ctx.meta.webId = 'anon'; - return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); - } + }) }, methods: { buildDigest(body) { return `SHA-256=${createHash('sha256').update(body).digest('base64')}`; } } -}; +} satisfies ServiceSchema; -module.exports = HttpSignatureService; +export default HttpSignatureService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [HttpSignatureService.name]: typeof HttpSignatureService; + } + } +} diff --git a/src/middleware/packages/crypto/signature/index.ts b/src/middleware/packages/crypto/signature/index.ts index cf96939ab..757431ed9 100644 --- a/src/middleware/packages/crypto/signature/index.ts +++ b/src/middleware/packages/crypto/signature/index.ts @@ -1,5 +1,4 @@ -module.exports = { - SignatureService: require('./http-signatures'), - ProxyService: require('./proxy'), - KeyPairService: require('./keypair') -}; +import SignatureService from './http-signatures.ts'; +import ProxyService from './proxy.ts'; +import KeyPairService from './keypair.ts'; +export { SignatureService, ProxyService, KeyPairService }; diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index 8858e1abf..5c82c7908 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -1,9 +1,10 @@ -const fs = require('fs'); -const path = require('path'); -const fetch = require('node-fetch'); -const { generateKeyPair } = require('crypto'); -const { namedNode, blankNode, literal, triple } = require('@rdfjs/data-model'); -const { KEY_TYPES } = require('../constants'); +import fs from 'fs'; +import path from 'path'; +import fetch from 'node-fetch'; +import { generateKeyPair } from 'crypto'; +import { namedNode, blankNode, literal, triple } from '@rdfjs/data-model'; +import { KEY_TYPES } from '../constants.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; /** * Deprecated Service. @@ -13,7 +14,7 @@ const { KEY_TYPES } = require('../constants'); * @type {import('moleculer').ServiceSchema} */ const SignatureService = { - name: 'signature.keypair', + name: 'signature.keypair' as const, settings: { actorsKeyPairsDir: null }, @@ -29,163 +30,175 @@ const SignatureService = { this.isMigrated = await this.broker.call('keys.migration.isMigrated'); }, actions: { - async generate(ctx) { - const { actorUri } = ctx.params; + generate: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; - if (this.isMigrated) { - let [key] = await ctx.call('keys.getOrCreateWebIdKeys', { - keyType: KEY_TYPES.RSA, - webId: actorUri - }); - return key.publicKeyPem; - } - - const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); - if (publicKey) { - this.logger.info(`Key for ${actorUri} already exists, skipping...`); - return publicKey; - } + if (this.isMigrated) { + let [key] = await ctx.call('keys.getOrCreateWebIdKeys', { + keyType: KEY_TYPES.RSA, + webId: actorUri + }); + return key.publicKeyPem; + } - const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); + const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); + if (publicKey) { + this.logger.info(`Key for ${actorUri} already exists, skipping...`); + return publicKey; + } - return new Promise((resolve, reject) => { - generateKeyPair( - 'rsa', - { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem' + const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); + + return new Promise((resolve, reject) => { + generateKeyPair( + 'rsa', + { + modulusLength: 4096, + publicKeyEncoding: { + type: 'spki', + format: 'pem' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'pem' + } }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' + (err, publicKey, privateKey) => { + if (!err) { + fs.writeFile(privateKeyPath, privateKey, err => reject(err)); + fs.writeFile(publicKeyPath, publicKey, err => reject(err)); + resolve(publicKey); + } else { + reject(err); + } } - }, - (err, publicKey, privateKey) => { - if (!err) { - fs.writeFile(privateKeyPath, privateKey, err => reject(err)); - fs.writeFile(publicKeyPath, publicKey, err => reject(err)); - resolve(publicKey); - } else { - reject(err); - } - } - ); - }); - }, - - async delete(ctx) { - const { actorUri } = ctx.params; - - if (this.isMigrated) { - const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); - await ctx.call('keys.delete', { resourceUri: key.id || key['@id'], webId: actorUri }); - return; + ); + }); } + }), - const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); + delete: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; - try { - await fs.promises.unlink(privateKeyPath); - await fs.promises.unlink(publicKeyPath); - } catch (e) { - console.log(`Could not delete key pair for actor ${actorUri}`); - } - }, + if (this.isMigrated) { + const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); + await ctx.call('keys.delete', { resourceUri: key.id || key['@id'], webId: actorUri }); + return; + } - async attachPublicKey(ctx) { - const { actorUri } = ctx.params; + const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - if (this.isMigrated) { - this.logger.info( - `The keys service has been migrated. Key setup is handled by the keys service. This function will not have an effect` - ); - return; + try { + await fs.promises.unlink(privateKeyPath); + await fs.promises.unlink(publicKeyPath); + } catch (e) { + console.log(`Could not delete key pair for actor ${actorUri}`); + } } + }), - const actor = await ctx.call('ldp.resource.get', { - resourceUri: actorUri, - webId: actorUri - }); + attachPublicKey: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; - // Ensure a public key is not already attached - if (!actor.publicKey) { - const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); + if (this.isMigrated) { + this.logger.info( + `The keys service has been migrated. Key setup is handled by the keys service. This function will not have an effect` + ); + return; + } - await ctx.call('ldp.resource.patch', { + const actor = await ctx.call('ldp.resource.get', { resourceUri: actorUri, - triplesToAdd: [ - triple(namedNode(actorUri), namedNode('https://w3id.org/security#publicKey'), blankNode('b0')), - triple(blankNode('b0'), namedNode('https://w3id.org/security#owner'), namedNode(actorUri)), - triple(blankNode('b0'), namedNode('https://w3id.org/security#publicKeyPem'), literal(publicKey)) - ], - webId: 'system' + webId: actorUri }); + + // Ensure a public key is not already attached + if (!actor.publicKey) { + const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); + + await ctx.call('ldp.resource.patch', { + resourceUri: actorUri, + triplesToAdd: [ + triple(namedNode(actorUri), namedNode('https://w3id.org/security#publicKey'), blankNode('b0')), + triple(blankNode('b0'), namedNode('https://w3id.org/security#owner'), namedNode(actorUri)), + triple(blankNode('b0'), namedNode('https://w3id.org/security#publicKeyPem'), literal(publicKey)) + ], + webId: 'system' + }); + } } - }, + }), - async getPaths(ctx) { - const { actorUri } = ctx.params; + getPaths: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - if (account) { - const privateKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key`); - const publicKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key.pub`); - return { privateKeyPath, publicKeyPath }; - } - throw new Error(`No account found with URI ${actorUri}`); - }, - - async get(ctx) { - const { actorUri } = ctx.params; - - // Call new method, if migrated. - if (this.isMigrated) { - const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { keyType: KEY_TYPES.RSA, webId: actorUri }); - return { - publicKey: key.publicKeyPem, - privateKey: key.privateKeyPem - }; + if (account) { + const privateKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key`); + const publicKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key.pub`); + return { privateKeyPath, publicKeyPath }; + } + throw new Error(`No account found with URI ${actorUri}`); } + }), - const { publicKeyPath, privateKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - try { - const publicKey = await fs.promises.readFile(publicKeyPath, { encoding: 'utf8' }); - const privateKey = await fs.promises.readFile(privateKeyPath, { encoding: 'utf8' }); - return { publicKey, privateKey }; - } catch (e) { - return {}; - } - }, + get: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; - async getRemotePublicKey(ctx) { - const { actorUri } = ctx.params; + // Call new method, if migrated. + if (this.isMigrated) { + const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { keyType: KEY_TYPES.RSA, webId: actorUri }); + return { + publicKey: key.publicKeyPem, + privateKey: key.privateKeyPem + }; + } - // Call new method, if migrated. - if (this.isMigrated) { - return (await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }))?.[0] - ?.publicKeyPem; + const { publicKeyPath, privateKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); + try { + const publicKey = await fs.promises.readFile(publicKeyPath, { encoding: 'utf8' }); + const privateKey = await fs.promises.readFile(privateKeyPath, { encoding: 'utf8' }); + return { publicKey, privateKey }; + } catch (e) { + return {}; + } } + }), - let response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); - if (!response.ok) return false; + getRemotePublicKey: defineAction({ + async handler(ctx) { + const { actorUri } = ctx.params; - const actor = await response.json(); - if (!actor || !actor.publicKey) return false; + // Call new method, if migrated. + if (this.isMigrated) { + return (await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }))?.[0] + ?.publicKeyPem; + } - // If the public key is not dereferenced - if (typeof actor.publicKey === 'string') { - response = await fetch(actor.publicKey, { headers: { Accept: 'application/json' } }); + let response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); if (!response.ok) return false; - const publicKey = await response.json(); - if (!publicKey) return false; - return publicKey.publicKeyPem; - } else { - return actor.publicKey.publicKeyPem; + + const actor = await response.json(); + if (!actor || !actor.publicKey) return false; + + // If the public key is not dereferenced + if (typeof actor.publicKey === 'string') { + response = await fetch(actor.publicKey, { headers: { Accept: 'application/json' } }); + if (!response.ok) return false; + const publicKey = await response.json(); + if (!publicKey) return false; + return publicKey.publicKeyPem; + } else { + return actor.publicKey.publicKeyPem; + } } - } + }) }, hooks: { before: { @@ -211,19 +224,32 @@ const SignatureService = { } }, events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - if (this.isMigrated) { - return; + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; + if (this.isMigrated) { + return; + } + + await this.actions.generate({ actorUri: webId }, { parentCtx: ctx }); + await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); } + }), - await this.actions.generate({ actorUri: webId }, { parentCtx: ctx }); - await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); - }, - async 'keys.migration.migrated'(ctx) { - this.isMigrated = true; - } + 'keys.migration.migrated': defineServiceEvent({ + async handler(ctx) { + this.isMigrated = true; + } + }) } -}; +} satisfies ServiceSchema; + +export default SignatureService; -module.exports = SignatureService; +declare global { + export namespace Moleculer { + export interface AllServices { + [SignatureService.name]: typeof SignatureService; + } + } +} diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 058ddf351..74195be58 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -1,8 +1,9 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const { parseHeader, parseFile, saveDatasetMeta } = require('@semapps/middlewares'); -const fetch = require('node-fetch'); -const { Errors: E } = require('moleculer-web'); +import path from 'path'; +import urlJoin from 'url-join'; +import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; +import fetch from 'node-fetch'; +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; const stream2buffer = stream => { return new Promise((resolve, reject) => { @@ -14,7 +15,7 @@ const stream2buffer = stream => { }; const ProxyService = { - name: 'signature.proxy', + name: 'signature.proxy' as const, settings: { podProvider: false }, @@ -40,120 +41,135 @@ const ProxyService = { } }, actions: { - async api_query(ctx) { - const url = ctx.params.id; - const method = ctx.params.method || 'GET'; - const headers = JSON.parse(ctx.params.headers) || { accept: 'application/json' }; - const actorUri = ctx.meta.webId; - - // Only user can query his own proxy URL - if (this.settings.podProvider) { - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - if (account.username !== ctx.params.username) throw new E.ForbiddenError(); - } + api_query: defineAction({ + async handler(ctx) { + const url = ctx.params.id; + const method = ctx.params.method || 'GET'; + const headers = JSON.parse(ctx.params.headers) || { accept: 'application/json' }; + const actorUri = ctx.meta.webId; - // If a file is uploaded, convert it to a Buffer - const body = - ctx.params.files && ctx.params.files.length > 0 - ? await stream2buffer(ctx.params.files[0].readableStream) - : ctx.meta.rawBody; - - try { - const response = await this.actions.query( - { - url, - method, - headers, - body, - actorUri - }, - { - parentCtx: ctx - } - ); - ctx.meta.$statusCode = response.status; - ctx.meta.$statusMessage = response.statusText; - ctx.meta.$responseHeaders = response.headers; - return response.body; - } catch (e) { - if (e.code !== 404 && e.code !== 403) console.error(e); - ctx.meta.$statusCode = !e.code ? 500 : e.code === 'ECONNREFUSED' ? 502 : e.code; - ctx.meta.$statusMessage = e.message; - } - }, - async query(ctx) { - let { url, method, headers, body, actorUri } = ctx.params; - - const signatureHeaders = await ctx.call('signature.generateSignatureHeaders', { - url, - method, - body, - actorUri - }); - - // Convert Headers object if necessary (otherwise we can't destructure it below) - // Note: if we use NodeJS built-in Headers instead of node-fetch Headers, the constructor name is _Headers - if ( - headers && - typeof headers === 'object' && - (headers.constructor.name === 'Headers' || headers.constructor.name === '_Headers') - ) { - headers = Object.fromEntries(headers); - } + // Only user can query his own proxy URL + if (this.settings.podProvider) { + const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + if (account.username !== ctx.params.username) throw new E.ForbiddenError(); + } - const response = await fetch(url, { - method, - headers: { - ...headers, - ...signatureHeaders - }, - body - }); + // If a file is uploaded, convert it to a Buffer + const body = + ctx.params.files && ctx.params.files.length > 0 + ? await stream2buffer(ctx.params.files[0].readableStream) + : ctx.meta.rawBody; - if (response.ok) { - let responseBody = await response.text(); try { - responseBody = JSON.parse(responseBody); + const response = await this.actions.query( + { + url, + method, + headers, + body, + actorUri + }, + { + parentCtx: ctx + } + ); + ctx.meta.$statusCode = response.status; + ctx.meta.$statusMessage = response.statusText; + ctx.meta.$responseHeaders = response.headers; + return response.body; } catch (e) { - // Do nothing if body is not JSON + if (e.code !== 404 && e.code !== 403) console.error(e); + ctx.meta.$statusCode = !e.code ? 500 : e.code === 'ECONNREFUSED' ? 502 : e.code; + ctx.meta.$statusMessage = e.message; + } + } + }), + + query: defineAction({ + async handler(ctx) { + let { url, method, headers, body, actorUri } = ctx.params; + + const signatureHeaders = await ctx.call('signature.generateSignatureHeaders', { + url, + method, + body, + actorUri + }); + + // Convert Headers object if necessary (otherwise we can't destructure it below) + // Note: if we use NodeJS built-in Headers instead of node-fetch Headers, the constructor name is _Headers + if ( + headers && + typeof headers === 'object' && + (headers.constructor.name === 'Headers' || headers.constructor.name === '_Headers') + ) { + headers = Object.fromEntries(headers); } - // Remove headers that we don't want to be transfered - response.headers.delete('content-length'); - response.headers.delete('connection'); - response.headers.delete('content-encoding'); - - return { - ok: true, - body: responseBody, - headers: Object.fromEntries(response.headers.entries()), - status: response.status, - statusText: response.statusText - }; - } else { - return { - ok: false, - status: response.status, - statusText: response.statusText - }; + const response = await fetch(url, { + method, + headers: { + ...headers, + ...signatureHeaders + }, + body + }); + + if (response.ok) { + let responseBody = await response.text(); + try { + responseBody = JSON.parse(responseBody); + } catch (e) { + // Do nothing if body is not JSON + } + + // Remove headers that we don't want to be transfered + response.headers.delete('content-length'); + response.headers.delete('connection'); + response.headers.delete('content-encoding'); + + return { + ok: true, + body: responseBody, + headers: Object.fromEntries(response.headers.entries()), + status: response.status, + statusText: response.statusText + }; + } else { + return { + ok: false, + status: response.status, + statusText: response.statusText + }; + } } - } + }) }, events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - if (this.settings.podProvider) { - const services = await ctx.call('$node.services'); - if (services.filter(s => s.name === 'activitypub.actor')) { - await ctx.call('activitypub.actor.addEndpoint', { - actorUri: webId, - predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', - endpoint: urlJoin(webId, 'proxy') - }); + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; + if (this.settings.podProvider) { + const services = await ctx.call('$node.services'); + if (services.filter(s => s.name === 'activitypub.actor')) { + await ctx.call('activitypub.actor.addEndpoint', { + actorUri: webId, + predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', + endpoint: urlJoin(webId, 'proxy') + }); + } } } - } + }) } -}; +} satisfies ServiceSchema; -module.exports = ProxyService; +export default ProxyService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ProxyService.name]: typeof ProxyService; + } + } +} diff --git a/src/middleware/packages/crypto/utils/noGraphCredentialContext.ts b/src/middleware/packages/crypto/utils/noGraphCredentialContext.ts index 2c2a680fb..d8116c310 100644 --- a/src/middleware/packages/crypto/utils/noGraphCredentialContext.ts +++ b/src/middleware/packages/crypto/utils/noGraphCredentialContext.ts @@ -328,4 +328,4 @@ const noGraphCredentialContext = { } }; -module.exports = noGraphCredentialContext; +export default noGraphCredentialContext; diff --git a/src/middleware/packages/crypto/utils/utils.ts b/src/middleware/packages/crypto/utils/utils.ts index 85c11a9a9..1836d4dda 100644 --- a/src/middleware/packages/crypto/utils/utils.ts +++ b/src/middleware/packages/crypto/utils/utils.ts @@ -1,4 +1,4 @@ -const assert = require('node:assert'); +import assert from 'node:assert'; /** * Converts a value to an array. If the value is undefined or null, returns an empty array. @@ -35,4 +35,4 @@ const deepStrictEqual = (object1, object2) => { return true; }; -module.exports = { arrayOf, deepStrictEqual }; +export { arrayOf, deepStrictEqual }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts index 149fa40ca..26a3e254d 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts @@ -2,7 +2,7 @@ const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); -const { arrayOf, deepStrictEqual } = require('../utils/utils'); +import { arrayOf, deepStrictEqual } from '../utils/utils.ts'; /** * Create an instance of this class when verifying capability VC presentations using @@ -125,4 +125,4 @@ class VcCapabilityPresentationProofPurpose extends AuthenticationProofPurpose { } } -module.exports = VcCapabilityPresentationProofPurpose; +export default VcCapabilityPresentationProofPurpose; diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts index 5b41a3928..5cf5bfd1f 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts @@ -1,4 +1,4 @@ -const { CredentialIssuancePurpose } = require('@digitalbazaar/vc'); +import { CredentialIssuancePurpose } from '@digitalbazaar/vc'; /** * VC purpose that is the same as the vc.CredentialIssuancePurpose but checks validFrom and validUntil. @@ -41,4 +41,4 @@ class VCPurpose extends CredentialIssuancePurpose { } } -module.exports = VCPurpose; +export default VCPurpose; diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts index 0e3ef9b68..9b5d108c5 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts @@ -1,4 +1,5 @@ -const crypto = require('node:crypto'); +import crypto from 'node:crypto'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Service to generate challenges upon request. @@ -8,7 +9,7 @@ const crypto = require('node:crypto'); * @type {import('moleculer').ServiceSchema} */ const ChallengeService = { - name: 'crypto.vc.presentation.challenge', + name: 'crypto.vc.presentation.challenge' as const, settings: { /** Milliseconds challenges should be valid for. @default 5 minutes */ challengeExpirationMs: 5 * 60 * 1000 @@ -18,52 +19,62 @@ const ChallengeService = { this.challenges = {}; }, actions: { - create() { - if (!this.cleanupTimerSetUp) { - this.startCleanupTimer(); - } - - const challenge = crypto.randomUUID(); - this.challenges[challenge] = { issued: Date.now() }; - - return { challenge }; - }, - - getAll() { - return this.challenges; - }, + create: defineAction({ + handler() { + if (!this.cleanupTimerSetUp) { + this.startCleanupTimer(); + } - clearAll() { - this.challenges = {}; - }, + const challenge = crypto.randomUUID(); + this.challenges[challenge] = { issued: Date.now() }; - validate(ctx) { - const { challenge } = ctx.params; + return { challenge }; + } + }), - // Does challenge exist? - if (!this.challenges[challenge]) { - return { valid: false, error: new Error('Challenge not found or has expired.') }; + getAll: defineAction({ + handler() { + return this.challenges; } + }), - // Is challenge expired? - if (Date.now() - this.challenges[challenge].issued > this.settings.challengeExpirationMs) { - delete this.challenges[challenge]; - return { valid: false, error: new Error('Challenge not found or has expired.') }; + clearAll: defineAction({ + handler() { + this.challenges = {}; } + }), - delete this.challenges[challenge]; + validate: defineAction({ + handler(ctx) { + const { challenge } = ctx.params; - return { valid: true }; - }, + // Does challenge exist? + if (!this.challenges[challenge]) { + return { valid: false, error: new Error('Challenge not found or has expired.') }; + } - cleanElapsed() { - const now = Date.now(); - for (const [challenge, { issued }] of Object.entries(this.challenges)) { - if (now - issued > this.settings.challengeExpirationMs) { + // Is challenge expired? + if (Date.now() - this.challenges[challenge].issued > this.settings.challengeExpirationMs) { delete this.challenges[challenge]; + return { valid: false, error: new Error('Challenge not found or has expired.') }; + } + + delete this.challenges[challenge]; + + return { valid: true }; + } + }), + + cleanElapsed: defineAction({ + handler() { + const now = Date.now(); + for (const [challenge, { issued }] of Object.entries(this.challenges)) { + if (now - issued > this.settings.challengeExpirationMs) { + delete this.challenges[challenge]; + } } } - } + }) }, methods: { startCleanupTimer() { @@ -86,6 +97,14 @@ const ChallengeService = { } } } -}; +} satisfies ServiceSchema; + +export default ChallengeService; -module.exports = ChallengeService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ChallengeService.name]: typeof ChallengeService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 74ef8a234..1ff86bf96 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -1,12 +1,17 @@ -const jsigs = require('jsonld-signatures'); +import jsigs from 'jsonld-signatures'; + const { purposes: { AssertionProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); + +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; + /** @type {import('@digitalbazaar/ed25519-multikey')} */ -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); -const { KEY_TYPES } = require('../constants'); +import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; + +import { KEY_TYPES } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Data integrity service for signing objects using the [VC data integrity spec](https://www.w3.org/TR/vc-data-integrity/). @@ -18,7 +23,7 @@ const { KEY_TYPES } = require('../constants'); * @type {import('moleculer').ServiceSchema} */ const DataIntegrityService = { - name: 'crypto.vc.data-integrity', + name: 'crypto.vc.data-integrity' as const, dependencies: ['ldp', 'api'], async started() { @@ -32,7 +37,7 @@ const DataIntegrityService = { * Verify an object. * @param {object} ctx.params.object - The object to verify. */ - verifyObject: { + verifyObject: defineAction({ params: { object: { type: 'object' }, options: { @@ -57,7 +62,7 @@ const DataIntegrityService = { return jsigs.verify(object, { purpose, documentLoader: this.documentLoader, suite }); } - }, + }), /** * Sign an object. @@ -67,7 +72,7 @@ const DataIntegrityService = { * @param {object} [ctx.params.keyObject] - The key object to use. * @param {string} [ctx.params.keyId] - The key ID to use. */ - signObject: { + signObject: defineAction({ params: { object: { type: 'object' }, options: { type: 'object', optional: true, params: { proofPurpose: { type: 'string', optional: true } } }, @@ -103,8 +108,16 @@ const DataIntegrityService = { return jsigs.sign(object, { purpose, documentLoader: this.documentLoader, suite }); } - } + }) } -}; +} satisfies ServiceSchema; + +export default DataIntegrityService; -module.exports = DataIntegrityService; +declare global { + export namespace Moleculer { + export interface AllServices { + [DataIntegrityService.name]: typeof DataIntegrityService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/index.ts b/src/middleware/packages/crypto/verifiable-credentials/index.ts index 14c755289..b52fb69bf 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/index.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/index.ts @@ -1,6 +1,5 @@ -module.exports = { - DataIntegrityService: require('./data-integrity-service'), - VerifiableCredentialsService: require('./vc-service'), - VCPurpose: require('./VcPurpose'), - VCCapabilityPresentationProofPurpose: require('./VcCapabilityPresentationProofPurpose') -}; +import DataIntegrityService from './data-integrity-service.ts'; +import VerifiableCredentialsService from './vc-service.ts'; +import VCPurpose from './VcPurpose.ts'; +import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; +export { DataIntegrityService, VerifiableCredentialsService, VCPurpose, VCCapabilityPresentationProofPurpose }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts index a669e15be..86aa1a6ba 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts @@ -1,7 +1,8 @@ -const { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } = require('@semapps/middlewares'); -const path = require('node:path'); -const { VC_API_PATH } = require('../constants'); +import { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } from '@semapps/middlewares'; +import path from 'node:path'; +import { VC_API_PATH } from '../constants.ts'; +import { ServiceSchema } from 'moleculer'; const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; /** @@ -16,7 +17,7 @@ const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRa * @type {import('moleculer').ServiceSchema} */ const VCApiService = { - name: 'crypto.vc.api', + name: 'crypto.vc.api' as const, dependencies: ['api', 'ldp'], settings: { podProvider: null @@ -83,6 +84,14 @@ const VCApiService = { } }); } -}; +} satisfies ServiceSchema; -module.exports = VCApiService; +export default VCApiService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCApiService.name]: typeof VCApiService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts index 7638701be..57782f195 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts @@ -1,4 +1,5 @@ -const { arrayOf } = require('@semapps/ldp'); +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; // Check, if a capability grants access to the resource. const hasValidCapability = async (ctx, resourceUri, mode) => { @@ -27,23 +28,35 @@ const hasValidCapability = async (ctx, resourceUri, mode) => { return true; }; -module.exports = { - name: 'vc.guard', +const VcGuardSchema = { + name: 'vc.guard' as const, dependencies: 'permissions', async started() { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, actions: { - async hasPermission(ctx) { - const { uri, mode } = ctx.params; + hasPermission: defineAction({ + async handler(ctx) { + const { uri, mode } = ctx.params; - if (ctx.meta.authorization?.capabilityPresentation) { - if (await hasValidCapability(ctx, uri, mode)) { - return true; + if (ctx.meta.authorization?.capabilityPresentation) { + if (await hasValidCapability(ctx, uri, mode)) { + return true; + } } + + return undefined; } + }) + } +} satisfies ServiceSchema; - return undefined; +export default VcGuardSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VcGuardSchema.name]: typeof VcGuardSchema; } } -}; +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index c05698ef9..f4383185b 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -1,6 +1,7 @@ -const path = require('node:path'); -const { ControlledContainerMixin, PseudoIdMixin } = require('@semapps/ldp'); -const { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } = require('../constants'); +import path from 'node:path'; +import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; +import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Container for Verifiable Credentials. Posting to this container will create a new VC. @@ -11,7 +12,7 @@ const { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } = requ * @type {import('moleculer').ServiceSchema} */ const VCCredentialsContainer = { - name: 'crypto.vc.issuer.credential-container', + name: 'crypto.vc.issuer.credential-container' as const, mixins: [ControlledContainerMixin, PseudoIdMixin], dependencies: ['ontologies'], settings: { @@ -51,46 +52,65 @@ const VCCredentialsContainer = { * We can't handle that internally so we use a copy of the context with the `@graph`s removed. */ actions: { - async get(ctx) { - const resource = await ctx.call('ldp.resource.get', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - ctx.meta.$responseHeaders = { - ...ctx.meta.$responseHeaders, - 'Cache-Control': 'private, max-age=300, immutable' - }; - return { ...resource, '@context': credentialsContext }; - }, - async put(ctx) { - const { resource } = ctx.params; - return await ctx.call('ldp.resource.put', { - ...ctx.params, - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async post(ctx) { - const { resource } = ctx.params; - return await ctx.call('ldp.container.post', { - ...ctx.params, - containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async list(ctx) { - const container = await ctx.call('ldp.container.list', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - return { ...container, '@context': credentialsContext }; - } + get: defineAction({ + async handler(ctx) { + const resource = await ctx.call('ldp.resource.get', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + ctx.meta.$responseHeaders = { + ...ctx.meta.$responseHeaders, + 'Cache-Control': 'private, max-age=300, immutable' + }; + return { ...resource, '@context': credentialsContext }; + } + }), + + put: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; + return await ctx.call('ldp.resource.put', { + ...ctx.params, + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + post: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; + return await ctx.call('ldp.container.post', { + ...ctx.params, + containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + list: defineAction({ + async handler(ctx) { + const container = await ctx.call('ldp.container.list', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + return { ...container, '@context': credentialsContext }; + } + }) } -}; +} satisfies ServiceSchema; -module.exports = VCCredentialsContainer; +export default VCCredentialsContainer; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCCredentialsContainer.name]: typeof VCCredentialsContainer; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index 7ab3c3127..4df29885d 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -1,13 +1,18 @@ -const { randomUUID } = require('node:crypto'); +import { randomUUID } from 'node:crypto'; + const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); -const vc = require('@digitalbazaar/vc'); + +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +import vc from '@digitalbazaar/vc'; + /** @type {import('@digitalbazaar/ed25519-multikey')} */ -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); -const { KEY_TYPES, credentialsContext } = require('../constants'); +import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; + +import { KEY_TYPES, credentialsContext } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Service for verifying and creating Verifiable Presentations @@ -19,7 +24,7 @@ const { KEY_TYPES, credentialsContext } = require('../constants'); * @type {import('moleculer').ServiceSchema} */ const VCHolderService = { - name: 'crypto.vc.holder', + name: 'crypto.vc.holder' as const, dependencies: ['jsonld', 'jsonld.context'], async started() { this.documentLoader = async (url, options) => { @@ -33,7 +38,7 @@ const VCHolderService = { * @param {object} ctx.params - The parameters for creating the presentation. * @returns {object} The signed presentation. */ - createPresentation: { + createPresentation: defineAction({ params: { presentation: { type: 'object', @@ -120,7 +125,7 @@ const VCHolderService = { return signedPresentation; } - } + }) }, methods: { @@ -159,6 +164,14 @@ const VCHolderService = { return resource; } } -}; +} satisfies ServiceSchema; + +export default VCHolderService; -module.exports = VCHolderService; +declare global { + export namespace Moleculer { + export interface AllServices { + [VCHolderService.name]: typeof VCHolderService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 4a685e579..438b66034 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -1,14 +1,18 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; + const { purposes: { AssertionProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); -const vc = require('@digitalbazaar/vc'); + +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +import vc from '@digitalbazaar/vc'; + /** @type {import('@digitalbazaar/ed25519-multikey')} */ -const Ed25519Multikey = require('@digitalbazaar/ed25519-multikey'); +import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -const { KEY_TYPES, credentialsContext } = require('../constants'); +import { KEY_TYPES, credentialsContext } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Service for verifying, reading, and revoking Verifiable Credentials. @@ -18,7 +22,7 @@ const { KEY_TYPES, credentialsContext } = require('../constants'); * @type {import('moleculer').ServiceSchema} */ const VCCredentialService = { - name: 'crypto.vc.issuer', + name: 'crypto.vc.issuer' as const, settings: { podProvider: null }, @@ -50,7 +54,7 @@ const VCCredentialService = { * @param {object} ctx.params - The parameters for creating the VC. * @returns {object} The signed credential. */ - createVC: { + createVC: defineAction({ params: { credential: { type: 'object', @@ -133,7 +137,7 @@ const VCCredentialService = { return signedCredential; } - } + }) }, methods: { /** Creates an ldp resource from the presentation and sets rights. */ @@ -170,6 +174,14 @@ const VCCredentialService = { return resource; } } -}; +} satisfies ServiceSchema; -module.exports = VCCredentialService; +export default VCCredentialService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCCredentialService.name]: typeof VCCredentialService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index d3afc9fd3..d04b9a25b 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -1,5 +1,6 @@ -const { ControlledContainerMixin, PseudoIdMixin } = require('@semapps/ldp'); -const { credentialsContext, credentialsContextNoGraphProof } = require('../constants'); +import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; +import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Container for Verifiable Presentations. Posting to this container will create a new VP. @@ -13,7 +14,7 @@ const { credentialsContext, credentialsContextNoGraphProof } = require('../const * @type {import('moleculer').ServiceSchema} */ const VCPresentationContainer = { - name: 'crypto.vc.holder.presentation-container', + name: 'crypto.vc.holder.presentation-container' as const, mixins: [ControlledContainerMixin, PseudoIdMixin], settings: { path: null, @@ -40,49 +41,68 @@ const VCPresentationContainer = { * We can't handle that internally so we use a copy of the context with the `@graph`s removed. */ actions: { - async get(ctx) { - const resource = await ctx.call('ldp.resource.get', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - ctx.meta.$responseHeaders = { - ...ctx.meta.$responseHeaders, - 'Cache-Control': 'private, max-age=300, immutable' - }; - return { ...resource, '@context': credentialsContext }; - }, - async put(ctx) { - const { resource } = ctx.params; - return await ctx.call('ldp.resource.put', { - ...ctx.params, - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async post(ctx) { - // FIXME: The action fails to store the VC with the VP. - // This is okay because persisting VPs is not required - // and with Apods v3 this issue will probably go away. - const { resource } = ctx.params; - return await ctx.call('ldp.container.post', { - ...ctx.params, - containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), - resource: { - ...resource, - '@context': credentialsContextNoGraphProof - } - }); - }, - async list(ctx) { - const container = await ctx.call('ldp.container.list', { - ...ctx.params, - jsonContext: credentialsContextNoGraphProof - }); - return { ...container, '@context': credentialsContext }; - } + get: defineAction({ + async handler(ctx) { + const resource = await ctx.call('ldp.resource.get', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + ctx.meta.$responseHeaders = { + ...ctx.meta.$responseHeaders, + 'Cache-Control': 'private, max-age=300, immutable' + }; + return { ...resource, '@context': credentialsContext }; + } + }), + + put: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; + return await ctx.call('ldp.resource.put', { + ...ctx.params, + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + post: defineAction({ + async handler(ctx) { + // FIXME: The action fails to store the VC with the VP. + // This is okay because persisting VPs is not required + // and with Apods v3 this issue will probably go away. + const { resource } = ctx.params; + return await ctx.call('ldp.container.post', { + ...ctx.params, + containerUri: await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }), + resource: { + ...resource, + '@context': credentialsContextNoGraphProof + } + }); + } + }), + + list: defineAction({ + async handler(ctx) { + const container = await ctx.call('ldp.container.list', { + ...ctx.params, + jsonContext: credentialsContextNoGraphProof + }); + return { ...container, '@context': credentialsContext }; + } + }) } -}; +} satisfies ServiceSchema; -module.exports = VCPresentationContainer; +export default VCPresentationContainer; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCPresentationContainer.name]: typeof VCPresentationContainer; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts index 3cc2716d1..ce166ef6f 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts @@ -1,13 +1,14 @@ -const { did, cred } = require('@semapps/ontologies'); -const VCAuthorizerService = require('./vc-authorizer-service'); -const VCHolderService = require('./vc-holder-service'); -const VCIssuerService = require('./vc-issuer-service'); -const VCVerifierService = require('./vc-verifier-service'); -const DataIntegrityService = require('./data-integrity-service'); -const VCApiService = require('./vc-api-service'); -const VCCredentialContainer = require('./vc-credential-container'); -const VCPresentationContainer = require('./vc-presentation-container'); -const ChallengeService = require('./challenge-service'); +import { did, cred } from '@semapps/ontologies'; +import VCAuthorizerService from './vc-authorizer-service.ts'; +import VCHolderService from './vc-holder-service.ts'; +import VCIssuerService from './vc-issuer-service.ts'; +import VCVerifierService from './vc-verifier-service.ts'; +import DataIntegrityService from './data-integrity-service.ts'; +import VCApiService from './vc-api-service.ts'; +import VCCredentialContainer from './vc-credential-container.ts'; +import VCPresentationContainer from './vc-presentation-container.ts'; +import ChallengeService from './challenge-service.ts'; +import { ServiceSchema } from 'moleculer'; /** * Root service for Verifiable Credential and the VC API. @@ -27,7 +28,7 @@ const ChallengeService = require('./challenge-service'); * @type {import('moleculer').ServiceSchema} */ const VCService = { - name: 'crypto.vc', + name: 'crypto.vc' as const, dependencies: ['ontologies'], settings: { podProvider: false, @@ -56,6 +57,14 @@ const VCService = { this.broker.call('ontologies.register', did); this.broker.call('ontologies.register', cred); } -}; +} satisfies ServiceSchema; -module.exports = VCService; +export default VCService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VCService.name]: typeof VCService; + } + } +} diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 6160ee00a..be36bf902 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -1,12 +1,14 @@ const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); -const { cryptosuite } = require('@digitalbazaar/eddsa-rdfc-2022-cryptosuite'); -const { DataIntegrityProof } = require('@digitalbazaar/data-integrity'); -const vc = require('@digitalbazaar/vc'); -const VCCapabilityPresentationProofPurpose = require('./VcCapabilityPresentationProofPurpose'); -const VCPurpose = require('./VcPurpose'); -const { arrayOf } = require('../utils/utils'); + +import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +import vc from '@digitalbazaar/vc'; +import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; +import VCPurpose from './VcPurpose.ts'; +import { arrayOf } from '../utils/utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; /** * Service for verifying and creating Verifiable Presentations @@ -17,7 +19,7 @@ const { arrayOf } = require('../utils/utils'); * @type {import('moleculer').ServiceSchema} */ const VCPresentationService = { - name: 'crypto.vc.verifier', + name: 'crypto.vc.verifier' as const, dependencies: ['ldp', 'jsonld'], async started() { this.documentLoader = async (url, options) => { @@ -29,7 +31,7 @@ const VCPresentationService = { /** * Verify a verifiable credential. */ - verifyVC: { + verifyVC: defineAction({ params: { verifiableCredential: { type: 'object', @@ -73,12 +75,12 @@ const VCPresentationService = { return verificationResult; } - }, + }), /** * Verify a presentation. */ - verifyPresentation: { + verifyPresentation: defineAction({ params: { verifiablePresentation: { type: 'object' }, options: { @@ -136,14 +138,14 @@ const VCPresentationService = { return { verified: false, error: e.message }; } } - }, + }), /** * Verify a capability presentation. * @param {object} ctx.params - The parameters for verifying the capability presentation. * @returns {object} The verification result. */ - verifyCapabilityPresentation: { + verifyCapabilityPresentation: defineAction({ params: { verifiablePresentation: { type: 'object' }, options: { @@ -193,8 +195,16 @@ const VCPresentationService = { return { ...verificationResult, presentation }; } - } + }) } -}; +} satisfies ServiceSchema; + +export default VCPresentationService; -module.exports = VCPresentationService; +declare global { + export namespace Moleculer { + export interface AllServices { + [VCPresentationService.name]: typeof VCPresentationService; + } + } +} diff --git a/src/middleware/packages/importer/index.ts b/src/middleware/packages/importer/index.ts index e9069c04d..ab67f20c0 100644 --- a/src/middleware/packages/importer/index.ts +++ b/src/middleware/packages/importer/index.ts @@ -1,13 +1,23 @@ -module.exports = { - ImporterMixin: require('./mixins/importer'), - DiscourseImporterMixin: require('./mixins/discourse'), - DrupalImporterMixin: require('./mixins/drupal'), - GoGoCartoImporterMixin: require('./mixins/gogocarto'), - HumHubImporterMixin: require('./mixins/humhub'), - JotformImporterMixin: require('./mixins/jotform'), - MobilizonImporterMixin: require('./mixins/mobilizon'), - PrestaShopImporterMixin: require('./mixins/prestashop'), - YesWikiImporterMixin: require('./mixins/yeswiki'), - WordpressImporterMixin: require('./mixins/wordpress'), - ...require('./utils') +import ImporterMixin from './mixins/importer.ts'; +import DiscourseImporterMixin from './mixins/discourse.ts'; +import DrupalImporterMixin from './mixins/drupal.ts'; +import GoGoCartoImporterMixin from './mixins/gogocarto.ts'; +import HumHubImporterMixin from './mixins/humhub.ts'; +import JotformImporterMixin from './mixins/jotform.ts'; +import MobilizonImporterMixin from './mixins/mobilizon.ts'; +import PrestaShopImporterMixin from './mixins/prestashop.ts'; +import YesWikiImporterMixin from './mixins/yeswiki.ts'; +import WordpressImporterMixin from './mixins/wordpress.ts'; +export * from './utils.ts'; +export { + ImporterMixin, + DiscourseImporterMixin, + DrupalImporterMixin, + GoGoCartoImporterMixin, + HumHubImporterMixin, + JotformImporterMixin, + MobilizonImporterMixin, + PrestaShopImporterMixin, + YesWikiImporterMixin, + WordpressImporterMixin }; diff --git a/src/middleware/packages/importer/mixins/discourse.ts b/src/middleware/packages/importer/mixins/discourse.ts index 922cf81d5..c44d331d3 100644 --- a/src/middleware/packages/importer/mixins/discourse.ts +++ b/src/middleware/packages/importer/mixins/discourse.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import ImporterMixin from './importer.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -42,4 +43,6 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/drupal.ts b/src/middleware/packages/importer/mixins/drupal.ts index 366a1f350..0d86a6046 100644 --- a/src/middleware/packages/importer/mixins/drupal.ts +++ b/src/middleware/packages/importer/mixins/drupal.ts @@ -1,7 +1,8 @@ -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -38,4 +39,6 @@ module.exports = { return false; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/gogocarto.ts b/src/middleware/packages/importer/mixins/gogocarto.ts index f543e689d..99ce8e4da 100644 --- a/src/middleware/packages/importer/mixins/gogocarto.ts +++ b/src/middleware/packages/importer/mixins/gogocarto.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import ImporterMixin from './importer.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -41,4 +42,6 @@ module.exports = { return result.data; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/humhub.ts b/src/middleware/packages/importer/mixins/humhub.ts index e88f82d75..e9abeb927 100644 --- a/src/middleware/packages/importer/mixins/humhub.ts +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -1,7 +1,7 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); - +import urlJoin from 'url-join'; +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; +import { ServiceSchema } from 'moleculer'; const allowedTypes = ['user', 'space', 'calendar', 'post']; const getSlugByUrl = url => { @@ -14,7 +14,7 @@ const getSlugByUrl = url => { } }; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -109,4 +109,6 @@ module.exports = { return results; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 39b44a792..2f5f7d7bf 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -1,10 +1,11 @@ -const fetch = require('node-fetch'); -const cronParser = require('cron-parser'); -const { promises: fsPromises } = require('fs'); -const { ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const { isDir } = require('../utils'); - -module.exports = { +import fetch from 'node-fetch'; +import cronParser from 'cron-parser'; +import { promises as fsPromises } from 'fs'; +import { ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import { isDir } from '../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const Schema = { settings: { source: { apiUrl: null, @@ -92,133 +93,171 @@ module.exports = { } }, actions: { - async freshImport(ctx) { - if (ctx.params.clear === undefined || ctx.params.clear === true) { - this.logger.info('Clearing all existing data...'); + freshImport: defineAction({ + async handler(ctx) { + if (ctx.params.clear === undefined || ctx.params.clear === true) { + this.logger.info('Clearing all existing data...'); - await this.actions.deleteImported(); - } + await this.actions.deleteImported(); + } - await this.prepare(); + await this.prepare(); - if (this.settings.source.getAllCompact) { - this.logger.info('Fetching compact list...'); - - const compactResults = await this.list(this.settings.source.getAllCompact); - - if (compactResults) { - this.logger.info( - `Importing ${compactResults.length} items from ${ - typeof this.settings.source.getAllCompact === 'string' - ? this.settings.source.getAllCompact - : this.settings.source.getAllCompact.url - }...` - ); - - for (const data of compactResults) { - const sourceUri = this.settings.source.getOneFull(data); - const destUri = await this.actions.importOne({ sourceUri }, { parentCtx: ctx }); - if (destUri) this.imported[sourceUri] = destUri; + if (this.settings.source.getAllCompact) { + this.logger.info('Fetching compact list...'); + + const compactResults = await this.list(this.settings.source.getAllCompact); + + if (compactResults) { + this.logger.info( + `Importing ${compactResults.length} items from ${ + typeof this.settings.source.getAllCompact === 'string' + ? this.settings.source.getAllCompact + : this.settings.source.getAllCompact.url + }...` + ); + + for (const data of compactResults) { + const sourceUri = this.settings.source.getOneFull(data); + const destUri = await this.actions.importOne({ sourceUri }, { parentCtx: ctx }); + if (destUri) this.imported[sourceUri] = destUri; + } + } else { + throw new Error( + `Error fetching the endpoint ${ + typeof this.settings.source.getAllCompact === 'string' + ? this.settings.source.getAllCompact + : this.settings.source.getAllCompact.url + }...` + ); } - } else { - throw new Error( - `Error fetching the endpoint ${ - typeof this.settings.source.getAllCompact === 'string' - ? this.settings.source.getAllCompact - : this.settings.source.getAllCompact.url - }...` - ); - } - } else if (this.settings.source.getAllFull) { - this.logger.info('Fetching full list...'); - - const fullResults = await this.list(this.settings.source.getAllFull); - - if (fullResults) { - this.logger.info( - `Importing ${fullResults.length} items from ${ - typeof this.settings.source.getAllFull === 'string' - ? this.settings.source.getAllFull - : this.settings.source.getAllFull.url - }...` - ); - - for (const data of fullResults) { - const sourceUri = this.settings.source.getOneFull && this.settings.source.getOneFull(data); - const destUri = await this.actions.importOne({ sourceUri, data }, { parentCtx: ctx }); - if (destUri) this.imported[sourceUri] = destUri; + } else if (this.settings.source.getAllFull) { + this.logger.info('Fetching full list...'); + + const fullResults = await this.list(this.settings.source.getAllFull); + + if (fullResults) { + this.logger.info( + `Importing ${fullResults.length} items from ${ + typeof this.settings.source.getAllFull === 'string' + ? this.settings.source.getAllFull + : this.settings.source.getAllFull.url + }...` + ); + + for (const data of fullResults) { + const sourceUri = this.settings.source.getOneFull && this.settings.source.getOneFull(data); + const destUri = await this.actions.importOne({ sourceUri, data }, { parentCtx: ctx }); + if (destUri) this.imported[sourceUri] = destUri; + } + } else { + throw new Error( + `Error fetching the endpoint ${ + typeof this.settings.source.getAllFull === 'string' + ? this.settings.source.getAllFull + : this.settings.source.getAllFull.url + }...` + ); } } else { - throw new Error( - `Error fetching the endpoint ${ - typeof this.settings.source.getAllFull === 'string' - ? this.settings.source.getAllFull - : this.settings.source.getAllFull.url - }...` - ); + throw new Error('You must define the setting source.getAllCompact or source.getAllFull'); } - } else { - throw new Error('You must define the setting source.getAllCompact or source.getAllFull'); + + this.logger.info(`Import finished !`); } + }), - this.logger.info(`Import finished !`); - }, - synchronize() { - if (this.createJob) { - this.createJob(this.name, 'synchronize', {}); - } else { - // If QueueMixin is not available, call method with fake job object - return this.processSynchronize({ - data: {}, - progress: number => this.logger.info(`Progress: ${number}%`), - log: message => this.logger.info(message) - }); + synchronize: defineAction({ + handler() { + if (this.createJob) { + this.createJob(this.name, 'synchronize', {}); + } else { + // If QueueMixin is not available, call method with fake job object + return this.processSynchronize({ + data: {}, + progress: number => this.logger.info(`Progress: ${number}%`), + log: message => this.logger.info(message) + }); + } } - }, - async importOne(ctx) { - let { sourceUri, destUri, data } = ctx.params; + }), - if (!data) { - data = await this.getOne(sourceUri); + importOne: defineAction({ + async handler(ctx) { + let { sourceUri, destUri, data } = ctx.params; if (!data) { - this.logger.warn(`Invalid ${sourceUri}...`); + data = await this.getOne(sourceUri); + + if (!data) { + this.logger.warn(`Invalid ${sourceUri}...`); + return false; // False = delete resource if it exists + } + } + + const resource = await this.transform(data); + + // If resource is false, it means it is not published + if (!resource) { + this.logger.info(`Skipping ${sourceUri} (not published)...`); return false; // False = delete resource if it exists } - } + if (destUri) { + const oldData = await ctx.call('ldp.resource.get', { + resourceUri: destUri, + webId: 'system' + }); - const resource = await this.transform(data); + const oldUpdatedDate = oldData['dc:modified']; + const newUpdatedDate = this.getField('updated', data); - // If resource is false, it means it is not published - if (!resource) { - this.logger.info(`Skipping ${sourceUri} (not published)...`); - return false; // False = delete resource if it exists - } - if (destUri) { - const oldData = await ctx.call('ldp.resource.get', { - resourceUri: destUri, - webId: 'system' - }); + if (!oldUpdatedDate || !newUpdatedDate || new Date(newUpdatedDate) > new Date(oldUpdatedDate)) { + this.logger.info(`Reimporting ${sourceUri}...`); - const oldUpdatedDate = oldData['dc:modified']; - const newUpdatedDate = this.getField('updated', data); + const oldDataToKeep = + this.settings.dest.predicatesToKeep.length > 0 + ? Object.fromEntries( + Object.entries(oldData).filter(([key]) => this.settings.dest.predicatesToKeep.includes(key)) + ) + : {}; - if (!oldUpdatedDate || !newUpdatedDate || new Date(newUpdatedDate) > new Date(oldUpdatedDate)) { - this.logger.info(`Reimporting ${sourceUri}...`); + try { + await ctx.call('ldp.resource.put', { + resource: { + '@id': destUri, + ...resource, + ...oldDataToKeep, + 'dc:source': sourceUri, + 'dc:created': resource['dc:created'] || this.getField('created', data), + 'dc:modified': resource['dc:modified'] || this.getField('updated', data), + 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri + }, + webId: 'system' + }); + } catch (e) { + this.logger.warn(`Unable to update ${destUri} (Error message: ${e.message})`); + return false; + } + } else { + this.logger.info(`Skipping ${sourceUri} (not changed)...`); + return true; // True = skipping + } + } else { + this.logger.info(`Importing ${sourceUri}...`); - const oldDataToKeep = - this.settings.dest.predicatesToKeep.length > 0 - ? Object.fromEntries( - Object.entries(oldData).filter(([key]) => this.settings.dest.predicatesToKeep.includes(key)) - ) - : {}; + if (!this.settings.dest.containerUri) { + throw new Error(`Cannot import as dest.containerUri setting is not defined`); + } try { - await ctx.call('ldp.resource.put', { + destUri = await ctx.call('ldp.container.post', { + containerUri: + typeof this.settings.dest.containerUri === 'string' + ? this.settings.dest.containerUri + : this.settings.dest.containerUri(resource), + slug: this.getField('slug', data), resource: { - '@id': destUri, ...resource, - ...oldDataToKeep, 'dc:source': sourceUri, 'dc:created': resource['dc:created'] || this.getField('created', data), 'dc:modified': resource['dc:modified'] || this.getField('updated', data), @@ -227,68 +266,50 @@ module.exports = { webId: 'system' }); } catch (e) { - this.logger.warn(`Unable to update ${destUri} (Error message: ${e.message})`); + this.logger.warn(`Unable to import ${sourceUri} (Error message: ${e.message})`); return false; } - } else { - this.logger.info(`Skipping ${sourceUri} (not changed)...`); - return true; // True = skipping - } - } else { - this.logger.info(`Importing ${sourceUri}...`); - if (!this.settings.dest.containerUri) { - throw new Error(`Cannot import as dest.containerUri setting is not defined`); + this.logger.info(`Done! Resource URL: ${destUri}`); } - try { - destUri = await ctx.call('ldp.container.post', { - containerUri: - typeof this.settings.dest.containerUri === 'string' - ? this.settings.dest.containerUri - : this.settings.dest.containerUri(resource), - slug: this.getField('slug', data), - resource: { - ...resource, - 'dc:source': sourceUri, - 'dc:created': resource['dc:created'] || this.getField('created', data), - 'dc:modified': resource['dc:modified'] || this.getField('updated', data), - 'dc:creator': resource['dc:creator'] || this.settings.dest.actorUri - }, + return destUri; + } + }), + + deleteImported: defineAction({ + async handler(ctx) { + for (const resourceUri of Object.values(this.imported)) { + this.logger.info(`Deleting ${resourceUri}...`); + + // TODO also delete blank nodes attached to the resources + await ctx.call('ldp.resource.delete', { + resourceUri, webId: 'system' }); - } catch (e) { - this.logger.warn(`Unable to import ${sourceUri} (Error message: ${e.message})`); - return false; } - this.logger.info(`Done! Resource URL: ${destUri}`); + this.imported = {}; } + }), - return destUri; - }, - async deleteImported(ctx) { - for (const resourceUri of Object.values(this.imported)) { - this.logger.info(`Deleting ${resourceUri}...`); + list: defineAction({ + async handler(ctx) { + return await this.list(ctx.params.url || this.settings.source.getAllFull); + } + }), - // TODO also delete blank nodes attached to the resources - await ctx.call('ldp.resource.delete', { - resourceUri, - webId: 'system' - }); + getOne: defineAction({ + async handler(ctx) { + return await this.getOne(this.settings.source.getOneFull(ctx.params.data)); } + }), - this.imported = {}; - }, - async list(ctx) { - return await this.list(ctx.params.url || this.settings.source.getAllFull); - }, - async getOne(ctx) { - return await this.getOne(this.settings.source.getOneFull(ctx.params.data)); - }, - getImported() { - return this.imported; - } + getImported: defineAction({ + handler() { + return this.imported; + } + }) }, methods: { async prepare() { @@ -525,4 +546,6 @@ module.exports = { }; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/jotform.ts b/src/middleware/packages/importer/mixins/jotform.ts index 823230ef0..f1b88d791 100644 --- a/src/middleware/packages/importer/mixins/jotform.ts +++ b/src/middleware/packages/importer/mixins/jotform.ts @@ -1,7 +1,8 @@ -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -50,4 +51,6 @@ module.exports = { return false; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/mobilizon.ts b/src/middleware/packages/importer/mixins/mobilizon.ts index 06c124dd8..37eb3b457 100644 --- a/src/middleware/packages/importer/mixins/mobilizon.ts +++ b/src/middleware/packages/importer/mixins/mobilizon.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import ImporterMixin from './importer.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -54,4 +55,6 @@ module.exports = { return results && results.data && results.data.events && results.data.events.elements; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/prestashop.ts b/src/middleware/packages/importer/mixins/prestashop.ts index 9097c1684..d51ce3d61 100644 --- a/src/middleware/packages/importer/mixins/prestashop.ts +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -1,8 +1,9 @@ -const urlJoin = require('url-join'); -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import urlJoin from 'url-join'; +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -59,4 +60,6 @@ module.exports = { return false; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index ecf89de84..fdc35f889 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -1,9 +1,10 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const { getSlugFromUri, delay } = require('@semapps/ldp'); -const ImporterMixin = require('./importer'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { getSlugFromUri, delay } from '@semapps/ldp'; +import ImporterMixin from './importer.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -97,4 +98,6 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/mixins/yeswiki.ts b/src/middleware/packages/importer/mixins/yeswiki.ts index ca0db328a..c70c753d4 100644 --- a/src/middleware/packages/importer/mixins/yeswiki.ts +++ b/src/middleware/packages/importer/mixins/yeswiki.ts @@ -1,7 +1,8 @@ -const ImporterMixin = require('./importer'); -const { convertToIsoString } = require('../utils'); +import ImporterMixin from './importer.ts'; +import { convertToIsoString } from '../utils.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ImporterMixin], settings: { source: { @@ -46,4 +47,6 @@ module.exports = { return false; } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/importer/utils.ts b/src/middleware/packages/importer/utils.ts index eee3ef6a1..f25ab8030 100644 --- a/src/middleware/packages/importer/utils.ts +++ b/src/middleware/packages/importer/utils.ts @@ -1,8 +1,8 @@ -const { promises: fsPromises } = require('fs'); -const sanitizeHtml = require('sanitize-html'); -const PNF = require('google-libphonenumber').PhoneNumberFormat; +import { promises as fsPromises } from 'fs'; +import sanitizeHtml from 'sanitize-html'; +import googlelibphonenumberModule from 'google-libphonenumber'; +const PNF = googlelibphonenumberModule.PhoneNumberFormat; const phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance(); - const convertToIsoString = str => str && new Date(str).toISOString(); const formatPhoneNumber = (number, countryCode) => { @@ -55,7 +55,7 @@ const isDir = async path => { } }; -module.exports = { +export { convertToIsoString, formatPhoneNumber, frenchAddressSearch, diff --git a/src/middleware/packages/inference/index.ts b/src/middleware/packages/inference/index.ts index 88c3fc106..8cb806f20 100644 --- a/src/middleware/packages/inference/index.ts +++ b/src/middleware/packages/inference/index.ts @@ -1,3 +1,2 @@ -module.exports = { - InferenceService: require('./service') -}; +import InferenceService from './service.ts'; +export { InferenceService }; diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 12a4b4397..789fbd331 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -1,12 +1,12 @@ -const fetch = require('node-fetch'); -const N3 = require('n3'); - +import fetch from 'node-fetch'; +import N3 from 'n3'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; -const RemoteService = require('./subservices/remote'); +import RemoteService from './subservices/remote.ts'; +import { ServiceSchema, defineServiceEvent } from 'moleculer'; -module.exports = { - name: 'inference', +const InferenceSchema = { + name: 'inference' as const, settings: { baseUrl: null, acceptFromRemoteServers: false, @@ -146,180 +146,204 @@ module.exports = { } }, events: { - async 'ldp.resource.created'(ctx) { - let { newData } = ctx.params; - newData = await ctx.call('jsonld.parser.expand', { input: newData }); + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + let { newData } = ctx.params; + newData = await ctx.call('jsonld.parser.expand', { input: newData }); - let triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); + let triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); - const [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); + const [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); - // Avoid adding inverse link to non-existent resources - triplesToAdd = await this.filterMissingResources(ctx, addLocals); + // Avoid adding inverse link to non-existent resources + triplesToAdd = await this.filterMissingResources(ctx, addLocals); - // local data - if (triplesToAdd.length > 0) { - await ctx.call('triplestore.update', { query: this.generateInsertQuery(triplesToAdd), webId: 'system' }); - this.cleanResourcesCache(ctx, triplesToAdd); - } + // local data + if (triplesToAdd.length > 0) { + await ctx.call('triplestore.update', { query: this.generateInsertQuery(triplesToAdd), webId: 'system' }); + this.cleanResourcesCache(ctx, triplesToAdd); + } - // remote data - if (this.settings.offerToRemoteServers) { - for (const triple of addRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: true - }); + // remote data + if (this.settings.offerToRemoteServers) { + for (const triple of addRemotes) { + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: true + }); + } } } - }, - async 'ldp.resource.deleted'(ctx) { - let { oldData } = ctx.params; - oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); + }), - const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + let { oldData } = ctx.params; + oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); - const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); + const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); - if (removeLocals.length > 0) { - await ctx.call('triplestore.update', { query: this.generateDeleteQuery(removeLocals), webId: 'system' }); - this.cleanResourcesCache(ctx, removeLocals); - } + const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); - // remote data - if (this.settings.offerToRemoteServers) { - for (const triple of removeRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: false - }); + if (removeLocals.length > 0) { + await ctx.call('triplestore.update', { query: this.generateDeleteQuery(removeLocals), webId: 'system' }); + this.cleanResourcesCache(ctx, removeLocals); } - } - }, - async 'ldp.resource.updated'(ctx) { - let { oldData, newData } = ctx.params; - oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); - newData = await ctx.call('jsonld.parser.expand', { input: newData }); - const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); - const triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); + // remote data + if (this.settings.offerToRemoteServers) { + for (const triple of removeRemotes) { + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: false + }); + } + } + } + }), - // Filter out triples which are removed and added at the same time - const filteredTriplesToAdd = this.getTriplesDifference(triplesToAdd, triplesToRemove); - const filteredTriplesToRemove = this.getTriplesDifference(triplesToRemove, triplesToAdd); + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + let { oldData, newData } = ctx.params; + oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); + newData = await ctx.call('jsonld.parser.expand', { input: newData }); - let [addLocals, addRemotes] = this.splitLocalAndRemote(filteredTriplesToAdd); - const [removeLocals, removeRemotes] = this.splitLocalAndRemote(filteredTriplesToRemove); + const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); + const triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); - // Dealing with locals first + // Filter out triples which are removed and added at the same time + const filteredTriplesToAdd = this.getTriplesDifference(triplesToAdd, triplesToRemove); + const filteredTriplesToRemove = this.getTriplesDifference(triplesToRemove, triplesToAdd); - // Avoid adding inverse link to non-existent resources - addLocals = await this.filterMissingResources(ctx, addLocals); + let [addLocals, addRemotes] = this.splitLocalAndRemote(filteredTriplesToAdd); + const [removeLocals, removeRemotes] = this.splitLocalAndRemote(filteredTriplesToRemove); - if (removeLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateDeleteQuery(removeLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, removeLocals); - } + // Dealing with locals first - if (addLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateInsertQuery(addLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, addLocals); - } + // Avoid adding inverse link to non-existent resources + addLocals = await this.filterMissingResources(ctx, addLocals); - // Dealing with remotes - - // remote relationships are sent to relay actor of remote server - if (this.settings.offerToRemoteServers) { - for (const triple of addRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: true + if (removeLocals.length > 0) { + await ctx.call('triplestore.update', { + query: this.generateDeleteQuery(removeLocals), + webId: 'system' }); + this.cleanResourcesCache(ctx, removeLocals); } - for (const triple of removeRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: false + + if (addLocals.length > 0) { + await ctx.call('triplestore.update', { + query: this.generateInsertQuery(addLocals), + webId: 'system' }); + this.cleanResourcesCache(ctx, addLocals); } - } - }, - async 'ldp.resource.patched'(ctx) { - const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; - // If the patch is done following a remote inference offer - if (skipInferenceCheck) return; + // Dealing with remotes - const triplesToAdd = this.generateInverseTriples(triplesAdded); - const triplesToRemove = this.generateInverseTriples(triplesRemoved); + // remote relationships are sent to relay actor of remote server + if (this.settings.offerToRemoteServers) { + for (const triple of addRemotes) { + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: true + }); + } + for (const triple of removeRemotes) { + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: false + }); + } + } + } + }), - let [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); - const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; - // Dealing with locals first + // If the patch is done following a remote inference offer + if (skipInferenceCheck) return; - // Avoid adding inverse link to non-existent resources - addLocals = await this.filterMissingResources(ctx, addLocals); + const triplesToAdd = this.generateInverseTriples(triplesAdded); + const triplesToRemove = this.generateInverseTriples(triplesRemoved); - if (removeLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateDeleteQuery(removeLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, removeLocals); - } + let [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); + const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); - if (addLocals.length > 0) { - await ctx.call('triplestore.update', { - query: this.generateInsertQuery(addLocals), - webId: 'system' - }); - this.cleanResourcesCache(ctx, addLocals); - } + // Dealing with locals first - // Dealing with remotes + // Avoid adding inverse link to non-existent resources + addLocals = await this.filterMissingResources(ctx, addLocals); - // remote relationships are sent to relay actor of remote server - if (this.settings.offerToRemoteServers) { - for (const triple of addRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: true + if (removeLocals.length > 0) { + await ctx.call('triplestore.update', { + query: this.generateDeleteQuery(removeLocals), + webId: 'system' }); + this.cleanResourcesCache(ctx, removeLocals); } - for (const triple of removeRemotes) { - await this.broker.call('inference.remote.offerInference', { - subject: triple.subject.id, - predicate: triple.predicate.id, - object: triple.object.id, - add: false + + if (addLocals.length > 0) { + await ctx.call('triplestore.update', { + query: this.generateInsertQuery(addLocals), + webId: 'system' }); + this.cleanResourcesCache(ctx, addLocals); + } + + // Dealing with remotes + + // remote relationships are sent to relay actor of remote server + if (this.settings.offerToRemoteServers) { + for (const triple of addRemotes) { + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: true + }); + } + for (const triple of removeRemotes) { + await this.broker.call('inference.remote.offerInference', { + subject: triple.subject.id, + predicate: triple.predicate.id, + object: triple.object.id, + add: false + }); + } } } - }, - async 'ontologies.registered'(ctx) { - const { owl } = ctx.params; - if (owl) { - const result = await this.findInverseRelations(owl); - this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${owl}`); - this.inverseRelations = { ...this.inverseRelations, ...result }; + }), + + 'ontologies.registered': defineServiceEvent({ + async handler(ctx) { + const { owl } = ctx.params; + if (owl) { + const result = await this.findInverseRelations(owl); + this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${owl}`); + this.inverseRelations = { ...this.inverseRelations, ...result }; + } } + }) + } +} satisfies ServiceSchema; + +export default InferenceSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [InferenceSchema.name]: typeof InferenceSchema; } } -}; +} diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index 1a6f26c1b..91a5fab48 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -1,12 +1,12 @@ -const fetch = require('node-fetch'); -const N3 = require('n3'); -const { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } = require('@semapps/activitypub'); - +import fetch from 'node-fetch'; +import N3 from 'n3'; +import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } from '@semapps/activitypub'; +import { ServiceSchema, defineAction } from 'moleculer'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; -module.exports = { - name: 'inference.remote', +const InferenceRemoteSchema = { + name: 'inference.remote' as const, mixins: [ActivitiesHandlerMixin], settings: { baseUrl: null, @@ -18,7 +18,7 @@ module.exports = { this.relayActor = await this.broker.call('activitypub.relay.getActor'); }, actions: { - offerInference: { + offerInference: defineAction({ visibility: 'public', params: { subject: { type: 'string', optional: false }, @@ -85,7 +85,7 @@ module.exports = { } } } - } + }) }, activities: { offerInference: { @@ -165,4 +165,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default InferenceRemoteSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [InferenceRemoteSchema.name]: typeof InferenceRemoteSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/index.ts b/src/middleware/packages/jsonld/index.ts index 1e1622987..588032664 100644 --- a/src/middleware/packages/jsonld/index.ts +++ b/src/middleware/packages/jsonld/index.ts @@ -1,9 +1,15 @@ -module.exports = { - JsonLdService: require('./service'), - JsonLdApiService: require('./services/api'), - JsonLdContextService: require('./services/context'), - JsonLdDocumentLoaderService: require('./services/document-loader'), - JsonLdParserService: require('./services/parser'), - uriSchemes: require('./utils/uriSchemes'), - isRegisteredURI: require('./utils/utils').isRegisteredURI +import JsonLdService from './service.ts'; +import JsonLdApiService from './services/api/index.ts'; +import JsonLdContextService from './services/context/index.ts'; +import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; +import JsonLdParserService from './services/parser/index.ts'; +import uriSchemes from './utils/uriSchemes.ts'; +export { + JsonLdService, + JsonLdApiService, + JsonLdContextService, + JsonLdDocumentLoaderService, + JsonLdParserService, + uriSchemes }; +export const isRegisteredURI = require('./utils/utils').isRegisteredURI; diff --git a/src/middleware/packages/jsonld/service.ts b/src/middleware/packages/jsonld/service.ts index 6b3c7f27d..7979955df 100644 --- a/src/middleware/packages/jsonld/service.ts +++ b/src/middleware/packages/jsonld/service.ts @@ -1,11 +1,12 @@ -const urlJoin = require('url-join'); -const JsonLdApiService = require('./services/api'); -const JsonLdContextService = require('./services/context'); -const JsonLdDocumentLoaderService = require('./services/document-loader'); -const JsonLdParserService = require('./services/parser'); - -module.exports = { - name: 'jsonld', +import urlJoin from 'url-join'; +import JsonLdApiService from './services/api/index.ts'; +import JsonLdContextService from './services/context/index.ts'; +import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; +import JsonLdParserService from './services/parser/index.ts'; +import { ServiceSchema } from 'moleculer'; + +const JsonldSchema = { + name: 'jsonld' as const, settings: { baseUri: null, localContextPath: '.well-known/context.jsonld', @@ -54,4 +55,14 @@ module.exports = { } }); } -}; +} satisfies ServiceSchema; + +export default JsonldSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldSchema.name]: typeof JsonldSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts index 408f9a0ed..bb260065c 100644 --- a/src/middleware/packages/jsonld/services/api/index.ts +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -1,5 +1,7 @@ -module.exports = { - name: 'jsonld.api', +import { ServiceSchema, defineAction } from 'moleculer'; + +const JsonldApiSchema = { + name: 'jsonld.api' as const, settings: { localContextPath: null }, @@ -19,9 +21,21 @@ module.exports = { }); }, actions: { - async getContext(ctx) { - ctx.meta.$responseType = 'application/ld+json'; - return await ctx.call('jsonld.context.getLocal'); + getContext: defineAction({ + async handler(ctx) { + ctx.meta.$responseType = 'application/ld+json'; + return await ctx.call('jsonld.context.getLocal'); + } + }) + } +} satisfies ServiceSchema; + +export default JsonldApiSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldApiSchema.name]: typeof JsonldApiSchema; } } -}; +} diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index f77a85497..039f8b4c5 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', cache: true, async handler(ctx) { @@ -21,4 +23,6 @@ module.exports = { return context; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts index ecce05e97..37d7eee41 100644 --- a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts +++ b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', cache: true, async handler(ctx) { @@ -25,4 +27,6 @@ module.exports = { '@context': context }; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index 854015466..9d97adbd7 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -1,6 +1,7 @@ -const { isURL, isObject, mergeObjectInArray } = require('../../../utils/utils'); +import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { a: { @@ -48,4 +49,6 @@ module.exports = { throw new Error('Could not merge JSON-LD contexts'); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts index 474fd6611..0f56a62b4 100644 --- a/src/middleware/packages/jsonld/services/context/actions/parse.ts +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { context: { @@ -12,4 +14,6 @@ module.exports = { const { contextRaw } = await this.contextParser.parse(context, options); return contextRaw; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index d860889b1..513d02a3d 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { context: { @@ -16,4 +18,6 @@ module.exports = { return false; } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/index.ts b/src/middleware/packages/jsonld/services/context/index.ts index d3365f672..e60df301e 100644 --- a/src/middleware/packages/jsonld/services/context/index.ts +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -1,12 +1,13 @@ -const { ContextParser } = require('jsonld-context-parser'); -const getAction = require('./actions/get'); -const getLocalAction = require('./actions/getLocal'); -const mergeAction = require('./actions/merge'); -const parseAction = require('./actions/parse'); -const validateAction = require('./actions/validate'); +import { ContextParser } from 'jsonld-context-parser'; +import getAction from './actions/get.ts'; +import getLocalAction from './actions/getLocal.ts'; +import mergeAction from './actions/merge.ts'; +import parseAction from './actions/parse.ts'; +import validateAction from './actions/validate.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'jsonld.context', +const JsonldContextSchema = { + name: 'jsonld.context' as const, settings: { localContextUri: null }, @@ -35,4 +36,14 @@ module.exports = { parse: parseAction, validate: validateAction } -}; +} satisfies ServiceSchema; + +export default JsonldContextSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldContextSchema.name]: typeof JsonldContextSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index a3b20c9f4..12f4fe66e 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -1,6 +1,8 @@ -const jsonld = require('jsonld'); -const fsPromises = require('fs').promises; -const LRU = require('lru-cache'); +import jsonld from 'jsonld'; +import fsModule from 'fs'; +const fsPromises = fsModule.promises; +import LRU from 'lru-cache'; +import { ServiceSchema, defineAction } from 'moleculer'; /** Use document loader depending on node / bun runtime. */ const defaultDocumentLoader = !process.versions.bun @@ -27,8 +29,8 @@ const defaultDocumentLoader = !process.versions.bun const cache = new LRU({ max: 500 }); -module.exports = { - name: 'jsonld.document-loader', +const JsonldDocumentLoaderSchema = { + name: 'jsonld.document-loader' as const, settings: { cachedContextFiles: [], localContextUri: null @@ -45,39 +47,57 @@ module.exports = { } }, actions: { - async loadWithCache(ctx) { - const { url, options } = ctx.params; - if (url === this.settings.localContextUri) { - // For local context, get it directly as it is frequently updated - // We will use the Redis cache to avoid compiling it every time - return { - contextUrl: null, - documentUrl: url, - document: await ctx.call('jsonld.context.getLocal') - }; + loadWithCache: defineAction({ + async handler(ctx) { + const { url, options } = ctx.params; + if (url === this.settings.localContextUri) { + // For local context, get it directly as it is frequently updated + // We will use the Redis cache to avoid compiling it every time + return { + contextUrl: null, + documentUrl: url, + document: await ctx.call('jsonld.context.getLocal') + }; + } + if (cache.has(url) && !options?.noCache) { + return cache.get(url); + } + const context = await defaultDocumentLoader(url, options); + if (typeof context.document === 'string') { + context.document = JSON.parse(context.document); + } + cache.set(url, context); + return context; } - if (cache.has(url) && !options?.noCache) { - return cache.get(url); + }), + + getCache: defineAction({ + handler(ctx) { + const { uri } = ctx.params; + const context = cache.get(uri); + return context?.document; } - const context = await defaultDocumentLoader(url, options); - if (typeof context.document === 'string') { - context.document = JSON.parse(context.document); + }), + + setCache: defineAction({ + handler(ctx) { + const { uri, json } = ctx.params; + cache.set(uri, { + contextUrl: null, + documentUrl: uri, + document: json + }); } - cache.set(url, context); - return context; - }, - getCache(ctx) { - const { uri } = ctx.params; - const context = cache.get(uri); - return context?.document; - }, - setCache(ctx) { - const { uri, json } = ctx.params; - cache.set(uri, { - contextUrl: null, - documentUrl: uri, - document: json - }); + }) + } +} satisfies ServiceSchema; + +export default JsonldDocumentLoaderSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldDocumentLoaderSchema.name]: typeof JsonldDocumentLoaderSchema; } } -}; +} diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 01d6729d0..3203e62ae 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -1,13 +1,15 @@ -const jsonld = require('jsonld'); -const N3 = require('n3'); -const { JsonLdParser } = require('jsonld-streaming-parser'); -const { JsonLdSerializer } = require('jsonld-streaming-serializer'); -const streamifyString = require('streamify-string'); -const rdfParser = require('rdf-parse').default; -const { arrayOf, isURI } = require('../../utils/utils'); - -module.exports = { - name: 'jsonld.parser', +import jsonld from 'jsonld'; +import N3 from 'n3'; +import { JsonLdParser } from 'jsonld-streaming-parser'; +import { JsonLdSerializer } from 'jsonld-streaming-serializer'; +import streamifyString from 'streamify-string'; +import rdfparseModule from 'rdf-parse'; +const rdfParser = rdfparseModule.default; +import { arrayOf, isURI } from '../../utils/utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; + +const JsonldParserSchema = { + name: 'jsonld.parser' as const, dependencies: ['jsonld.document-loader'], async started() { this.jsonld = jsonld; @@ -22,170 +24,208 @@ module.exports = { }); }, actions: { - compact(ctx) { - const { input, context, options } = ctx.params; - return this.jsonld.compact(input, context, options); - }, - expand(ctx) { - const { input, options } = ctx.params; - return this.jsonld.expand(input, options); - }, - flatten(ctx) { - const { input, context, options } = ctx.params; - return this.jsonld.flatten(input, context, options); - }, - frame(ctx) { - const { input, frame, options } = ctx.params; - return this.jsonld.frame(input, frame, options); - }, - normalize(ctx) { - const { input, options } = ctx.params; - return this.jsonld.normalize(input, options); - }, - async fromRDF(ctx) { - const { input, options = {} } = ctx.params; - const { format } = options; + compact: defineAction({ + handler(ctx) { + const { input, context, options } = ctx.params; + return this.jsonld.compact(input, context, options); + } + }), - if (!format || format === 'application/n-quads') { - return await this.jsonld.fromRDF(input, options); - } else { - const quads = await this.rdfToQuads(input, format); + expand: defineAction({ + handler(ctx) { + const { input, options } = ctx.params; + return this.jsonld.expand(input, options); + } + }), - const context = await ctx.call('jsonld.context.get'); + flatten: defineAction({ + handler(ctx) { + const { input, context, options } = ctx.params; + return this.jsonld.flatten(input, context, options); + } + }), - // Options: https://github.com/rubensworks/jsonld-streaming-serializer.js?tab=readme-ov-file#configuration - const jsonLdSerializer = new JsonLdSerializer(); - quads.forEach(quad => jsonLdSerializer.write(quad)); - jsonLdSerializer.end(); + frame: defineAction({ + handler(ctx) { + const { input, frame, options } = ctx.params; + return this.jsonld.frame(input, frame, options); + } + }), - const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); + normalize: defineAction({ + handler(ctx) { + const { input, options } = ctx.params; + return this.jsonld.normalize(input, options); + } + }), - const contextWithNullBase = await ctx.call('jsonld.context.merge', { - a: context, - b: { '@base': null } - }); + fromRDF: defineAction({ + async handler(ctx) { + const { input, options = {} } = ctx.params; + const { format } = options; - const framedResource = await this.actions.frame( - { - input: jsonLd, - frame: { - '@context': contextWithNullBase + if (!format || format === 'application/n-quads') { + return await this.jsonld.fromRDF(input, options); + } else { + const quads = await this.rdfToQuads(input, format); + + const context = await ctx.call('jsonld.context.get'); + + // Options: https://github.com/rubensworks/jsonld-streaming-serializer.js?tab=readme-ov-file#configuration + const jsonLdSerializer = new JsonLdSerializer(); + quads.forEach(quad => jsonLdSerializer.write(quad)); + jsonLdSerializer.end(); + + const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); + + const contextWithNullBase = await ctx.call('jsonld.context.merge', { + a: context, + b: { '@base': null } + }); + + const framedResource = await this.actions.frame( + { + input: jsonLd, + frame: { + '@context': contextWithNullBase + }, + options: { + base: null, // If we don't set base to null (here and in the frame), empty IRIs will be turned to ./ + embed: '@never' // If a resource refers to another resource in the same graph, we don't want it to be embedded + } }, - options: { - base: null, // If we don't set base to null (here and in the frame), empty IRIs will be turned to ./ - embed: '@never' // If a resource refers to another resource in the same graph, we don't want it to be embedded - } - }, - { parentCtx: ctx } - ); + { parentCtx: ctx } + ); - // See if it is necessary to remove the base ? - framedResource['@context'] = context; + // See if it is necessary to remove the base ? + framedResource['@context'] = context; - return framedResource; + return framedResource; + } } - }, - async toRDF(ctx) { - const { input, options = {} } = ctx.params; - const { format } = options; - - if (!format || format === 'application/n-quads') { - return await this.jsonld.toRDF(input, options); - } else { - // Since JSONLD.js does not support output other than N-Quads, use N3 for that - const quads = await this.actions.toQuads({ input }, { parentCtx: ctx }); - const prefixes = await ctx.call('ontologies.getPrefixes'); - return new Promise((resolve, reject) => { - const writer = new N3.Writer({ format, prefixes }); - writer.addQuads(quads.reverse()); // We reverse quads in order to have the type first - writer.end((error, result) => { - if (error) { - reject(error); - } else { - resolve(result); - } + }), + + toRDF: defineAction({ + async handler(ctx) { + const { input, options = {} } = ctx.params; + const { format } = options; + + if (!format || format === 'application/n-quads') { + return await this.jsonld.toRDF(input, options); + } else { + // Since JSONLD.js does not support output other than N-Quads, use N3 for that + const quads = await this.actions.toQuads({ input }, { parentCtx: ctx }); + const prefixes = await ctx.call('ontologies.getPrefixes'); + return new Promise((resolve, reject) => { + const writer = new N3.Writer({ format, prefixes }); + writer.addQuads(quads.reverse()); // We reverse quads in order to have the type first + writer.end((error, result) => { + if (error) { + reject(error); + } else { + resolve(result); + } + }); }); + } + } + }), + + toQuads: defineAction({ + // Return quads in RDF.JS data model + // (this.jsonld.toRDF does not use the same model) + // https://github.com/rdfjs/data-model-spec + handler(ctx) { + const { input } = ctx.params; + return new Promise((resolve, reject) => { + const jsonString = typeof input === 'object' ? JSON.stringify(input) : input; + const textStream = streamifyString(jsonString); + const res = []; + this.jsonLdParser + .import(textStream) + .on('data', quad => res.push(quad)) + .on('error', error => reject(error)) + .on('end', () => resolve(res)); }); } - }, - // Return quads in RDF.JS data model - // (this.jsonld.toRDF does not use the same model) - // https://github.com/rdfjs/data-model-spec - toQuads(ctx) { - const { input } = ctx.params; - return new Promise((resolve, reject) => { - const jsonString = typeof input === 'object' ? JSON.stringify(input) : input; - const textStream = streamifyString(jsonString); - const res = []; - this.jsonLdParser - .import(textStream) - .on('data', quad => res.push(quad)) - .on('error', error => reject(error)) - .on('end', () => resolve(res)); - }); - }, - // TODO move to ontologies service ?? - async expandPredicate(ctx) { - let { predicate, context } = ctx.params; + }), - if (!predicate) throw new Error('No predicate param provided to expandPredicate action'); + expandPredicate: defineAction({ + // TODO move to ontologies service ?? + async handler(ctx) { + let { predicate, context } = ctx.params; - if (isURI(predicate)) return predicate; + if (!predicate) throw new Error('No predicate param provided to expandPredicate action'); - // If no context is provided, use default context - if (!context) context = await ctx.call('jsonld.context.get'); + if (isURI(predicate)) return predicate; - const result = await this.actions.expand({ input: { '@context': context, [predicate]: '' } }, { parentCtx: ctx }); + // If no context is provided, use default context + if (!context) context = await ctx.call('jsonld.context.get'); - const expandedPredicate = Object.keys(result[0])?.[0]; + const result = await this.actions.expand( + { input: { '@context': context, [predicate]: '' } }, + { parentCtx: ctx } + ); + + const expandedPredicate = Object.keys(result[0])?.[0]; + + if (!isURI(expandedPredicate)) { + throw new Error(` + Could not expand predicate (${expandedPredicate}). + Is an ontology missing or not registered yet on the local context ? + `); + } - if (!isURI(expandedPredicate)) { - throw new Error(` - Could not expand predicate (${expandedPredicate}). - Is an ontology missing or not registered yet on the local context ? - `); + return expandedPredicate; } + }), - return expandedPredicate; - }, - async expandTypes(ctx) { - let { types, context } = ctx.params; + expandTypes: defineAction({ + async handler(ctx) { + let { types, context } = ctx.params; - if (!types) throw new Error('No types param provided to expandTypes action'); + if (!types) throw new Error('No types param provided to expandTypes action'); - // If types are already full URIs, return them immediately - if (arrayOf(types).every(type => isURI(type))) return arrayOf(types); + // If types are already full URIs, return them immediately + if (arrayOf(types).every(type => isURI(type))) return arrayOf(types); - // If no context is provided, use default context - if (!context) context = await ctx.call('jsonld.context.get'); + // If no context is provided, use default context + if (!context) context = await ctx.call('jsonld.context.get'); - const result = await this.actions.expand({ input: { '@context': context, '@type': types } }, { parentCtx: ctx }); + const result = await this.actions.expand( + { input: { '@context': context, '@type': types } }, + { parentCtx: ctx } + ); - const expandedTypes = arrayOf(result?.[0]?.['@type']); + const expandedTypes = arrayOf(result?.[0]?.['@type']); - if (!expandedTypes.every(type => isURI(type))) { - throw new Error(` - Could not expand all types (${expandedTypes.join(', ')}). - Is an ontology missing or not registered yet on the local context ? - `); + if (!expandedTypes.every(type => isURI(type))) { + throw new Error(` + Could not expand all types (${expandedTypes.join(', ')}). + Is an ontology missing or not registered yet on the local context ? + `); + } + + return expandedTypes; } + }), - return expandedTypes; - }, - async changeBase(ctx) { - const { input, base } = ctx.params; - - const contextWithBase = await ctx.call('jsonld.context.merge', { a: input['@context'], b: { '@base': base } }); - - return await this.actions.frame( - { - input: { ...input, '@context': contextWithBase }, - frame: { '@context': input['@context'] }, - options: { embed: '@never' } - }, - { parentCtx: ctx } - ); - } + changeBase: defineAction({ + async handler(ctx) { + const { input, base } = ctx.params; + + const contextWithBase = await ctx.call('jsonld.context.merge', { a: input['@context'], b: { '@base': base } }); + + return await this.actions.frame( + { + input: { ...input, '@context': contextWithBase }, + frame: { '@context': input['@context'] }, + options: { embed: '@never' } + }, + { parentCtx: ctx } + ); + } + }) }, methods: { streamToString(stream) { @@ -208,4 +248,14 @@ module.exports = { }); } } -}; +} satisfies ServiceSchema; + +export default JsonldParserSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [JsonldParserSchema.name]: typeof JsonldParserSchema; + } + } +} diff --git a/src/middleware/packages/jsonld/utils/uriSchemes.ts b/src/middleware/packages/jsonld/utils/uriSchemes.ts index 1ff0ca906..8d497cc52 100644 --- a/src/middleware/packages/jsonld/utils/uriSchemes.ts +++ b/src/middleware/packages/jsonld/utils/uriSchemes.ts @@ -1,4 +1,4 @@ -module.exports = [ +export default [ // Commonly used 'http:', 'https:', diff --git a/src/middleware/packages/jsonld/utils/utils.ts b/src/middleware/packages/jsonld/utils/utils.ts index 0999e49db..347dcbcad 100644 --- a/src/middleware/packages/jsonld/utils/utils.ts +++ b/src/middleware/packages/jsonld/utils/utils.ts @@ -1,9 +1,10 @@ -const uriSchemes = require('./uriSchemes'); - +import uriSchemes from './uriSchemes.ts'; const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); + /** If the value starts with `http` or `urn:` */ const isURI = value => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); + /** If the value starts with a IANA registered or common URI scheme */ const isRegisteredURI = value => (typeof value === 'string' || value instanceof String) && uriSchemes.some(scheme => value.startsWith(scheme)); @@ -38,11 +39,4 @@ const arrayOf = value => { return [value]; }; -module.exports = { - isURL, - isURI, - isRegisteredURI, - isObject, - mergeObjectInArray, - arrayOf -}; +export { isURL, isURI, isRegisteredURI, isObject, mergeObjectInArray, arrayOf }; diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts index 461c9e9dd..f07af49a4 100644 --- a/src/middleware/packages/ldp/adapter.ts +++ b/src/middleware/packages/ldp/adapter.ts @@ -1,4 +1,4 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; const { ServiceSchemaError } = require('moleculer').Errors; class LdpAdapter { @@ -206,4 +206,4 @@ class LdpAdapter { } } -module.exports = LdpAdapter; +export default LdpAdapter; diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index 86bfe137c..55a782247 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -1,27 +1,41 @@ -const utils = require('./utils'); - -module.exports = { - LdpService: require('./service'), - // Sub-services - LdpCacheService: require('./services/cache'), - LdpContainerService: require('./services/container'), - LdpLinkHeaderService: require('./services/link-header'), - LdpRegistryService: require('./services/registry'), - LdpResourceService: require('./services/resource'), - PermissionsService: require('./services/permissions'), - // Mixins - ControlledContainerMixin: require('./mixins/controlled-container'), - DereferenceMixin: require('./mixins/dereference'), - PseudoIdMixin: require('./mixins/pseudo-id'), - ImageProcessorMixin: require('./mixins/image-processor'), - MimeTypesMixin: require('./mixins/mime-types'), - DocumentTaggerMixin: require('./mixins/document-tagger'), - DisassemblyMixin: require('./mixins/disassembly'), - SingleResourceContainerMixin: require('./mixins/single-resource-container'), - SpecialEndpointMixin: require('./mixins/special-endpoint'), - OrphanFilesDeletionMixin: require('./mixins/orphan-files-deletion'), - // Other - defaultContainerOptions: require('./services/registry/defaultOptions'), - LdpAdapter: require('./adapter'), - ...utils +import LdpService from './service.ts'; +import LdpCacheService from './services/cache/index.ts'; +import LdpContainerService from './services/container/index.ts'; +import LdpLinkHeaderService from './services/link-header/index.ts'; +import LdpRegistryService from './services/registry/index.ts'; +import LdpResourceService from './services/resource/index.ts'; +import PermissionsService from './services/permissions/index.ts'; +import ControlledContainerMixin from './mixins/controlled-container.ts'; +import DereferenceMixin from './mixins/dereference.ts'; +import PseudoIdMixin from './mixins/pseudo-id.ts'; +import ImageProcessorMixin from './mixins/image-processor.ts'; +import MimeTypesMixin from './mixins/mime-types.ts'; +import DocumentTaggerMixin from './mixins/document-tagger.ts'; +import DisassemblyMixin from './mixins/disassembly.ts'; +import SingleResourceContainerMixin from './mixins/single-resource-container.ts'; +import SpecialEndpointMixin from './mixins/special-endpoint.ts'; +import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; +import defaultContainerOptions from './services/registry/defaultOptions.ts'; +import LdpAdapter from './adapter.ts'; +export * from './utils.ts'; +export { + LdpService, + LdpCacheService, + LdpContainerService, + LdpLinkHeaderService, + LdpRegistryService, + LdpResourceService, + PermissionsService, + ControlledContainerMixin, + DereferenceMixin, + PseudoIdMixin, + ImageProcessorMixin, + MimeTypesMixin, + DocumentTaggerMixin, + DisassemblyMixin, + SingleResourceContainerMixin, + SpecialEndpointMixin, + OrphanFilesDeletionMixin, + defaultContainerOptions, + LdpAdapter }; diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 0b64b348e..ff444897f 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,6 +1,7 @@ -const { delay, getParentContainerUri } = require('../utils'); +import { delay, getParentContainerUri } from '../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { +const Schema = { settings: { path: null, acceptedTypes: null, @@ -39,91 +40,134 @@ module.exports = { if (!path) this.settings.path = registration.path; }, actions: { - async post(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + post: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return await ctx.call('ldp.container.post', ctx.params); } - return await ctx.call('ldp.container.post', ctx.params); - }, - async list(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + }), + + list: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return ctx.call('ldp.container.get', ctx.params); } - return ctx.call('ldp.container.get', ctx.params); - }, - async attach(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + }), + + attach: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return ctx.call('ldp.container.attach', ctx.params); } - return ctx.call('ldp.container.attach', ctx.params); - }, - async detach(ctx) { - if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + }), + + detach: defineAction({ + async handler(ctx) { + if (!ctx.params.containerUri) { + ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + } + return ctx.call('ldp.container.detach', ctx.params); } - return ctx.call('ldp.container.detach', ctx.params); - }, - get(ctx) { - const containerParams = {}; - if (this.settings.accept) containerParams.accept = this.settings.accept; - return ctx.call('ldp.resource.get', { - ...containerParams, - ...ctx.params - }); - }, - getHeaderLinks(ctx) { - return []; - }, - create(ctx) { - return ctx.call('ldp.resource.create', ctx.params); - }, - patch(ctx) { - return ctx.call('ldp.resource.patch', ctx.params); - }, - put(ctx) { - return ctx.call('ldp.resource.put', ctx.params); - }, - delete(ctx) { - return ctx.call('ldp.resource.delete', ctx.params); - }, - exist(ctx) { - return ctx.call('ldp.resource.exist', ctx.params); - }, - getContainerUri(ctx) { - return ctx.call('ldp.registry.getUri', { path: this.settings.path, webId: ctx.params?.webId || ctx.meta?.webId }); - }, - async waitForContainerCreation(ctx) { - let { containerUri } = ctx.params; - let containerExist; - let containerAttached; - - if (!containerUri) { - containerUri = await this.actions.getContainerUri( - { webId: ctx.params.webId || ctx.meta.webId }, - { parentCtx: ctx } - ); + }), + + get: defineAction({ + handler(ctx) { + const containerParams = {}; + if (this.settings.accept) containerParams.accept = this.settings.accept; + return ctx.call('ldp.resource.get', { + ...containerParams, + ...ctx.params + }); } + }), - do { - if (containerExist === false) await delay(1000); - containerExist = await ctx.call('ldp.container.exist', { containerUri }); - } while (!containerExist); + getHeaderLinks: defineAction({ + handler(ctx) { + return []; + } + }), - const parentContainerUri = getParentContainerUri(containerUri); - const parentContainerExist = await ctx.call('ldp.container.exist', { containerUri: parentContainerUri }); + create: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.create', ctx.params); + } + }), + + patch: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.patch', ctx.params); + } + }), + + put: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.put', ctx.params); + } + }), + + delete: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.delete', ctx.params); + } + }), + + exist: defineAction({ + handler(ctx) { + return ctx.call('ldp.resource.exist', ctx.params); + } + }), + + getContainerUri: defineAction({ + handler(ctx) { + return ctx.call('ldp.registry.getUri', { + path: this.settings.path, + webId: ctx.params?.webId || ctx.meta?.webId + }); + } + }), + + waitForContainerCreation: defineAction({ + async handler(ctx) { + let { containerUri } = ctx.params; + let containerExist; + let containerAttached; + + if (!containerUri) { + containerUri = await this.actions.getContainerUri( + { webId: ctx.params.webId || ctx.meta.webId }, + { parentCtx: ctx } + ); + } - // If a parent container exist, check that the child container has been attached - // Otherwise, it may fail - if (parentContainerExist) { do { - if (containerAttached === false) await delay(1000); - containerAttached = await ctx.call('ldp.container.includes', { - containerUri: parentContainerUri, - resourceUri: containerUri, - webId: 'system' - }); - } while (!containerAttached); + if (containerExist === false) await delay(1000); + containerExist = await ctx.call('ldp.container.exist', { containerUri }); + } while (!containerExist); + + const parentContainerUri = getParentContainerUri(containerUri); + const parentContainerExist = await ctx.call('ldp.container.exist', { containerUri: parentContainerUri }); + + // If a parent container exist, check that the child container has been attached + // Otherwise, it may fail + if (parentContainerExist) { + do { + if (containerAttached === false) await delay(1000); + containerAttached = await ctx.call('ldp.container.includes', { + containerUri: parentContainerUri, + resourceUri: containerUri, + webId: 'system' + }); + } while (!containerAttached); + } } - } + }) } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/dereference.ts b/src/middleware/packages/ldp/mixins/dereference.ts index fef345fd6..ce94d04bd 100644 --- a/src/middleware/packages/ldp/mixins/dereference.ts +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -1,4 +1,5 @@ -const { isObject, arrayOf } = require('../utils'); +import { isObject, arrayOf } from '../utils.ts'; +import { ServiceSchema } from 'moleculer'; /** * @description MoleculerJS mixin to be applied on the ControlledContainerMixin within a Semapps project. @@ -34,7 +35,7 @@ const { isObject, arrayOf } = require('../utils'); * @type {import('moleculer').ServiceSchema} */ -module.exports = { +const Schema = { dependencies: ['ldp.resource'], methods: { /** @@ -146,4 +147,6 @@ module.exports = { get: ['handleAfterGet'] } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index cb5bce8a5..fb5567f36 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -1,6 +1,7 @@ -const { arrayOf } = require('../utils'); +import { arrayOf } from '../utils.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { settings: { disassembly: [] // Example: [{ path: 'pair:hasLocation', container: 'http://localhost:3000/places' }] }, @@ -144,4 +145,6 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 76cd7bdeb..3e5189033 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,7 +1,8 @@ -const { dc } = require('@semapps/ontologies'); -const { getDatasetFromUri } = require('../utils'); +import { dc } from '@semapps/ontologies'; +import { getDatasetFromUri } from '../utils.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; -module.exports = { +const Schema = { settings: { documentPredicates: { created: 'http://purl.org/dc/terms/created', @@ -13,71 +14,86 @@ module.exports = { await this.broker.call('ontologies.register', dc); }, actions: { - async tagCreatedResource(ctx) { - const { resourceUri, newData, webId, dataset } = ctx.params; - const now = new Date(); - const triples = []; + tagCreatedResource: defineAction({ + async handler(ctx) { + const { resourceUri, newData, webId, dataset } = ctx.params; + const now = new Date(); + const triples = []; - if (!newData['dc:created']) { - triples.push( - `<${resourceUri}> <${ - this.settings.documentPredicates.created - }> "${now.toISOString()}"^^ .` - ); - } + if (!newData['dc:created']) { + triples.push( + `<${resourceUri}> <${ + this.settings.documentPredicates.created + }> "${now.toISOString()}"^^ .` + ); + } - if (!newData['dc:modified']) { - triples.push( - `<${resourceUri}> <${ - this.settings.documentPredicates.updated - }> "${now.toISOString()}"^^ .` - ); - } + if (!newData['dc:modified']) { + triples.push( + `<${resourceUri}> <${ + this.settings.documentPredicates.updated + }> "${now.toISOString()}"^^ .` + ); + } - if (!newData['dc:creator'] && webId && webId.startsWith('http')) { - triples.push(`<${resourceUri}> <${this.settings.documentPredicates.creator}> <${webId}> .`); + if (!newData['dc:creator'] && webId && webId.startsWith('http')) { + triples.push(`<${resourceUri}> <${this.settings.documentPredicates.creator}> <${webId}> .`); + } + + if (triples.length > 0) { + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${resourceUri}> { ${triples.join('\n')} } }`, + dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, + webId: 'system' + }); + } } + }), - if (triples.length > 0) { + tagUpdatedResource: defineAction({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + const now = new Date(); await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${resourceUri}> { ${triples.join('\n')} } }`, + query: ` + WITH <${resourceUri}> + DELETE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } + INSERT { <${resourceUri}> <${ + this.settings.documentPredicates.updated + }> "${now.toISOString()}"^^ } + WHERE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } + `, dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, webId: 'system' }); } - }, - async tagUpdatedResource(ctx) { - const { resourceUri, dataset } = ctx.params; - const now = new Date(); - await ctx.call('triplestore.update', { - query: ` - WITH <${resourceUri}> - DELETE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } - INSERT { <${resourceUri}> <${ - this.settings.documentPredicates.updated - }> "${now.toISOString()}"^^ } - WHERE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } - `, - dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, - webId: 'system' - }); - } + }) }, events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData, webId, dataset } = ctx.params; - this.actions.tagCreatedResource( - { resourceUri, newData, webId: ctx.meta.impersonatedUser || webId, dataset }, - { parentCtx: ctx } - ); - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, dataset } = ctx.params; - this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri, dataset } = ctx.params; - this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); - } + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData, webId, dataset } = ctx.params; + this.actions.tagCreatedResource( + { resourceUri, newData, webId: ctx.meta.impersonatedUser || webId, dataset }, + { parentCtx: ctx } + ); + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }) } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index d0bf42579..4e505b2d3 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -1,10 +1,10 @@ -const sharp = require('sharp'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { arrayOf } = require('../utils'); - +import sharp from 'sharp'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { arrayOf } from '../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; -module.exports = { +const Schema = { settings: { imageProcessor: { maxWidth: 1900, @@ -21,61 +21,66 @@ module.exports = { } }, actions: { - async processImage(ctx) { - const { resourceUri } = ctx.params; + processImage: defineAction({ + async handler(ctx) { + const { resourceUri } = ctx.params; - const metadata = await ctx.call('ldp.resource.get', { - resourceUri, - jsonContext: { '@vocab': 'http://semapps.org/ns/core#' }, - webId: 'system' - }); + const metadata = await ctx.call('ldp.resource.get', { + resourceUri, + jsonContext: { '@vocab': 'http://semapps.org/ns/core#' }, + webId: 'system' + }); - try { - if (metadata['@type'] === 'File' && SUPPORTED_IMAGES_MIME_TYPES.includes(metadata.mimeType)) { - let image = await sharp(metadata.localPath); + try { + if (metadata['@type'] === 'File' && SUPPORTED_IMAGES_MIME_TYPES.includes(metadata.mimeType)) { + let image = await sharp(metadata.localPath); - const { width, height, format } = await image.metadata(); + const { width, height, format } = await image.metadata(); - if (width > this.settings.imageProcessor.maxWidth || height > this.settings.imageProcessor.maxHeight) { - const maxSize = this.getMaxSize(width, height); - image = image.resize({ width: maxSize.width, height: maxSize.height }); - } + if (width > this.settings.imageProcessor.maxWidth || height > this.settings.imageProcessor.maxHeight) { + const maxSize = this.getMaxSize(width, height); + image = image.resize({ width: maxSize.width, height: maxSize.height }); + } - switch (format) { - case 'jpeg': - image = await image.jpeg(this.settings.imageProcessor.jpeg || {}); - break; - case 'png': - image = await image.png(this.settings.imageProcessor.png || {}); - break; - case 'webp': - image = await image.webp(this.settings.imageProcessor.webp || {}); - break; - default: - break; - } + switch (format) { + case 'jpeg': + image = await image.jpeg(this.settings.imageProcessor.jpeg || {}); + break; + case 'png': + image = await image.png(this.settings.imageProcessor.png || {}); + break; + case 'webp': + image = await image.webp(this.settings.imageProcessor.webp || {}); + break; + default: + break; + } - // We cannot write directly to the same file as input, so write to a buffer first - const buffer = await image.toBuffer(); - await sharp(buffer).toFile(metadata.localPath); + // We cannot write directly to the same file as input, so write to a buffer first + const buffer = await image.toBuffer(); + await sharp(buffer).toFile(metadata.localPath); + } + } catch (e) { + this.logger.warn(`Image processing failed (${e.message})`); } - } catch (e) { - this.logger.warn(`Image processing failed (${e.message})`); } - }, - async processAllImages(ctx) { - const { webId } = ctx.params; - const container = await this.actions.list({ webId }, { parentCtx: ctx }); - if (container['ldp:contains']) { - const resources = arrayOf(container['ldp:contains']); - this.logger.info(`Processing ${resources.length} images...`); - for (const resource of resources) { - this.logger.info(`Processing image ${resource.id}...`); - await this.actions.processImage({ resourceUri: resource.id }, { parentCtx: ctx }); + }), + + processAllImages: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const container = await this.actions.list({ webId }, { parentCtx: ctx }); + if (container['ldp:contains']) { + const resources = arrayOf(container['ldp:contains']); + this.logger.info(`Processing ${resources.length} images...`); + for (const resource of resources) { + this.logger.info(`Processing image ${resource.id}...`); + await this.actions.processImage({ resourceUri: resource.id }, { parentCtx: ctx }); + } } + this.logger.info('Finished !'); } - this.logger.info('Finished !'); - } + }) }, methods: { getMaxSize(width, height) { @@ -94,4 +99,6 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index 50bf276e5..96c4500cf 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -1,7 +1,8 @@ const { MoleculerError } = require('moleculer').Errors; -const { isMimeTypeMatching } = require('@semapps/mime-types'); +import { isMimeTypeMatching } from '@semapps/mime-types'; +import { ServiceSchema } from 'moleculer'; -module.exports = { +const Schema = { settings: { mimeTypes: { accepted: [], @@ -31,4 +32,6 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index cf96940d1..eaf4e7d5c 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -1,6 +1,7 @@ -const { CronJob } = require('cron'); +import { CronJob } from 'cron'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { +const Schema = { settings: { orphanFilesDeletion: { cronJob: { @@ -11,46 +12,48 @@ module.exports = { }, dependencies: ['triplestore', 'ldp.resource'], actions: { - async checkOrphanFiles(ctx) { - try { - this.logger.info('OrphanFilesDeletion - Check...'); + checkOrphanFiles: defineAction({ + async handler(ctx) { + try { + this.logger.info('OrphanFilesDeletion - Check...'); - const containerUri = await this.actions.getContainerUri(); + const containerUri = await this.actions.getContainerUri(); - // Ignore ACL files - const results = await ctx.call('triplestore.query', { - query: ` - SELECT ?file - WHERE { - GRAPH <${containerUri}> { - <${containerUri}> ?file . - } - FILTER NOT EXISTS { - GRAPH ?g { - ?s ?p ?file . - FILTER(?s != <${containerUri}>) - FILTER(?p != ) + // Ignore ACL files + const results = await ctx.call('triplestore.query', { + query: ` + SELECT ?file + WHERE { + GRAPH <${containerUri}> { + <${containerUri}> ?file . + } + FILTER NOT EXISTS { + GRAPH ?g { + ?s ?p ?file . + FILTER(?s != <${containerUri}>) + FILTER(?p != ) + } } } - } - `, - webId: 'system' - }); - - this.logger.info(`OrphanFilesDeletion - Found ${results.length} orphan files`); - - for (const { file } of results) { - await ctx.call('ldp.resource.delete', { - resourceUri: file.value, + `, webId: 'system' }); - this.logger.info(`OrphanFilesDeletion - ${file.value} deleted`); + this.logger.info(`OrphanFilesDeletion - Found ${results.length} orphan files`); + + for (const { file } of results) { + await ctx.call('ldp.resource.delete', { + resourceUri: file.value, + webId: 'system' + }); + + this.logger.info(`OrphanFilesDeletion - ${file.value} deleted`); + } + } catch (error) { + this.logger.error(`OrphanFilesDeletion - Error: ${error.message}`); } - } catch (error) { - this.logger.error(`OrphanFilesDeletion - Error: ${error.message}`); } - } + }) }, created() { this.actions.checkOrphanFiles(); @@ -64,4 +67,6 @@ module.exports = { stopped() { this.cronJob?.stop(); } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/pseudo-id.ts b/src/middleware/packages/ldp/mixins/pseudo-id.ts index c39dea2a7..25842afba 100644 --- a/src/middleware/packages/ldp/mixins/pseudo-id.ts +++ b/src/middleware/packages/ldp/mixins/pseudo-id.ts @@ -1,3 +1,5 @@ +import { ServiceSchema } from 'moleculer'; + /** * MoleculerJS mixin to be applied on the ControlledContainerMixin. * Adds support for adding different subjects to the same resource/named graph than the resource URI itself. @@ -9,7 +11,7 @@ * * @type {import('moleculer').ServiceSchema} */ -module.exports = { +const Schema = { dependencies: ['ldp.resource'], settings: { pseudoIdPredicate: 'urn:tmp:pseudoId' @@ -88,4 +90,6 @@ module.exports = { list: ['handleAfterGet'] } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index 1428b5589..26ea11dae 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -1,8 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; -const ControlledContainerMixin = require('./controlled-container'); -const { delay } = require('../utils'); +import ControlledContainerMixin from './controlled-container.ts'; +import { delay } from '../utils.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; -module.exports = { +const Schema = { mixins: [ControlledContainerMixin], settings: { initialValue: {}, @@ -20,54 +21,65 @@ module.exports = { } }, actions: { - async initializeResource(ctx) { - const { webId } = ctx.params; + initializeResource: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + const containerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); + await this.actions.waitForContainerCreation({ containerUri }, { parentCtx: ctx }); + + let resource = this.settings.initialValue; + if (!resource.type && !resource['@type']) resource.type = this.settings.acceptedTypes; + + return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); + } + }), - const containerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); - await this.actions.waitForContainerCreation({ containerUri }, { parentCtx: ctx }); + getResourceUri: defineAction({ + async handler(ctx) { + const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri }); + return resourcesUris[0]; + } + }), - let resource = this.settings.initialValue; - if (!resource.type && !resource['@type']) resource.type = this.settings.acceptedTypes; + exist: defineAction({ + async handler(ctx) { + const resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + return !!resourceUri; + } + }), - return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); - }, - async getResourceUri(ctx) { - const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri }); - return resourcesUris[0]; - }, - async exist(ctx) { - const resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - return !!resourceUri; - }, - async waitForResourceCreation(ctx) { - const { webId } = ctx.params; - let resource; - let attempts = 0; + waitForResourceCreation: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + let resource; + let attempts = 0; - do { - attempts += 1; - if (attempts > 1) await delay(1000); - const resourceUri = await this.actions.getResourceUri({ webId }); + do { + attempts += 1; + if (attempts > 1) await delay(1000); + const resourceUri = await this.actions.getResourceUri({ webId }); - // Now wait for resources to have been effectively created, because when we call the ldp.container.post action, - // the ldp:contains predicate is added first (to ensure WAC permissions work) and then the resource is created - if (resourceUri) { - try { - resource = await this.actions.get( - { resourceUri, webId: 'system' }, - { parentCtx: ctx, meta: { $cache: false } } - ); - } catch (e) { - // Ignore + // Now wait for resources to have been effectively created, because when we call the ldp.container.post action, + // the ldp:contains predicate is added first (to ensure WAC permissions work) and then the resource is created + if (resourceUri) { + try { + resource = await this.actions.get( + { resourceUri, webId: 'system' }, + { parentCtx: ctx, meta: { $cache: false } } + ); + } catch (e) { + // Ignore + } } - } - } while (!resource || attempts > 30); + } while (!resource || attempts > 30); - if (!resource) throw new Error(`Resource still had not been created after 30s`); + if (!resource) throw new Error(`Resource still had not been created after 30s`); - return resource.id || resource['@id']; - } + return resource.id || resource['@id']; + } + }) }, hooks: { before: { @@ -92,11 +104,15 @@ module.exports = { } }, events: { - async 'auth.registered'(ctx) { - if (this.settings.podProvider) { - const { webId } = ctx.params; - await this.actions.initializeResource({ webId }); + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + if (this.settings.podProvider) { + const { webId } = ctx.params; + await this.actions.initializeResource({ webId }); + } } - } + }) } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index 0bed40885..3d2307d08 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -1,15 +1,18 @@ -const urlJoin = require('url-join'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const { +import urlJoin from 'url-join'; +import { namedNode, triple } from '@rdfjs/data-model'; + +import { parseUrl, parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; + +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { +const Schema = { settings: { baseUrl: null, settingsDataset: null, @@ -64,30 +67,37 @@ module.exports = { } }, actions: { - async endpointAdd(ctx) { - const { predicate, object } = ctx.params; + endpointAdd: defineAction({ + async handler(ctx) { + const { predicate, object } = ctx.params; - await ctx.call( - 'ldp.resource.patch', - { - resourceUri: this.endpointUrl, - triplesToAdd: [triple(namedNode(this.endpointUrl), predicate, object)], - webId: 'system' - }, - { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } - ); - }, - async endpointGet(ctx) { - ctx.meta.$responseType = ctx.meta.headers?.accept; + await ctx.call( + 'ldp.resource.patch', + { + resourceUri: this.endpointUrl, + triplesToAdd: [triple(namedNode(this.endpointUrl), predicate, object)], + webId: 'system' + }, + { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } + ); + } + }), - return await ctx.call( - 'ldp.resource.get', - { - resourceUri: this.endpointUrl, - webId: 'system' - }, - { meta: { dataset: this.settings.settingsDataset } } - ); - } + endpointGet: defineAction({ + async handler(ctx) { + ctx.meta.$responseType = ctx.meta.headers?.accept; + + return await ctx.call( + 'ldp.resource.get', + { + resourceUri: this.endpointUrl, + webId: 'system' + }, + { meta: { dataset: this.settings.settingsDataset } } + ); + } + }) } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts index 1b7e16238..518f6c27b 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts @@ -1,5 +1,6 @@ -const path = require('path'); -const { +import path from 'path'; + +import { parseUrl, parseHeader, parseRawBody, @@ -8,7 +9,7 @@ const { parseJson, parseFile, saveDatasetMeta -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; function getCatchAllRoute(basePath, podProvider) { const middlewares = [ @@ -45,4 +46,4 @@ function getCatchAllRoute(basePath, podProvider) { }; } -module.exports = getCatchAllRoute; +export default getCatchAllRoute; diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.ts b/src/middleware/packages/ldp/routes/getPodsRoute.ts index 6c9d379c3..ca4df0c1c 100644 --- a/src/middleware/packages/ldp/routes/getPodsRoute.ts +++ b/src/middleware/packages/ldp/routes/getPodsRoute.ts @@ -1,5 +1,6 @@ -const path = require('path'); -const { +import path from 'path'; + +import { parseUrl, parseHeader, parseRawBody, @@ -8,7 +9,7 @@ const { parseJson, parseFile, saveDatasetMeta -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; const transformRouteParamsToSlugParts = (req, res, next) => { req.$params.slugParts = []; @@ -57,4 +58,4 @@ function getPodsRoute(basePath) { }; } -module.exports = getPodsRoute; +export default getPodsRoute; diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index c847a8883..601ce33c6 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,15 +1,16 @@ -const { ldp, semapps } = require('@semapps/ontologies'); -const LdpApiService = require('./services/api'); -const LdpContainerService = require('./services/container'); -const LdpCacheService = require('./services/cache'); -const LdpLinkHeaderService = require('./services/link-header'); -const LdpRegistryService = require('./services/registry'); -const LdpRemoteService = require('./services/remote'); -const LdpResourceService = require('./services/resource'); -const PermissionsService = require('./services/permissions'); +import { ldp, semapps } from '@semapps/ontologies'; +import LdpApiService from './services/api/index.ts'; +import LdpContainerService from './services/container/index.ts'; +import LdpCacheService from './services/cache/index.ts'; +import LdpLinkHeaderService from './services/link-header/index.ts'; +import LdpRegistryService from './services/registry/index.ts'; +import LdpRemoteService from './services/remote/index.ts'; +import LdpResourceService from './services/resource/index.ts'; +import PermissionsService from './services/permissions/index.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ldp', +const LdpSchema = { + name: 'ldp' as const, settings: { baseUrl: null, containers: [], @@ -95,16 +96,34 @@ module.exports = { await this.broker.call('ontologies.register', semapps); }, actions: { - getBaseUrl() { - return this.settings.baseUrl; - }, - getBasePath() { - const { pathname } = new URL(this.settings.baseUrl); - return pathname; - }, - getSetting(ctx) { - const { key } = ctx.params; - return this.settings[key]; + getBaseUrl: defineAction({ + handler() { + return this.settings.baseUrl; + } + }), + + getBasePath: defineAction({ + handler() { + const { pathname } = new URL(this.settings.baseUrl); + return pathname; + } + }), + + getSetting: defineAction({ + handler(ctx) { + const { key } = ctx.params; + return this.settings[key]; + } + }) + } +} satisfies ServiceSchema; + +export default LdpSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpSchema.name]: typeof LdpSchema; } } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/delete.ts b/src/middleware/packages/ldp/services/api/actions/delete.ts index 5a27e0e0b..7ba54473a 100644 --- a/src/middleware/packages/ldp/services/api/actions/delete.ts +++ b/src/middleware/packages/ldp/services/api/actions/delete.ts @@ -1,4 +1,4 @@ -module.exports = async function patch(ctx) { +export default async function patch(ctx) { try { const { username, slugParts } = ctx.params; @@ -22,4 +22,4 @@ module.exports = async function patch(ctx) { ctx.meta.$statusCode = e.code || 500; ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index 5d727886b..ec0883d81 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -1,9 +1,9 @@ -const fs = require('fs'); +import fs from 'fs'; const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { cleanUndefined, parseJson } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { cleanUndefined, parseJson } from '../../../utils.ts'; -module.exports = async function get(ctx) { +export default async function get(ctx) { try { const { username, slugParts } = ctx.params; @@ -110,4 +110,4 @@ module.exports = async function get(ctx) { ctx.meta.$statusCode = e.code || 500; ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/head.ts b/src/middleware/packages/ldp/services/api/actions/head.ts index 2df25d213..aa7ac9d71 100644 --- a/src/middleware/packages/ldp/services/api/actions/head.ts +++ b/src/middleware/packages/ldp/services/api/actions/head.ts @@ -1,4 +1,4 @@ -module.exports = async function head(ctx) { +export default async function head(ctx) { try { const { username, slugParts } = ctx.params; const uri = this.getUriFromSlugParts(slugParts, username); @@ -16,4 +16,4 @@ module.exports = async function head(ctx) { ctx.meta.$statusCode = e.code || 500; ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/patch.ts b/src/middleware/packages/ldp/services/api/actions/patch.ts index f3b8b12bc..21828e5e1 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.ts +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -1,10 +1,10 @@ const { MoleculerError } = require('moleculer').Errors; -const SparqlParser = require('sparqljs').Parser; - +import sparqljsModule from 'sparqljs'; +const SparqlParser = sparqljsModule.Parser; const parser = new SparqlParser(); const ACCEPTED_OPERATIONS = ['insert', 'delete']; -module.exports = async function patch(ctx) { +export default async function patch(ctx) { try { const { username, slugParts } = ctx.params; @@ -70,4 +70,4 @@ module.exports = async function patch(ctx) { ctx.meta.$statusCode = e.code || 500; ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index 8e0f1f85b..c812dd0d0 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -1,9 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { v4: uuidv4 } = require('uuid'); -const mime = require('mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { v4 as uuidv4 } from 'uuid'; +import mime from 'mime-types'; -module.exports = async function post(ctx) { +export default async function post(ctx) { try { let { username, slugParts, ...resource } = ctx.params; @@ -55,4 +55,4 @@ module.exports = async function post(ctx) { ctx.meta.$statusCode = e.code || 500; ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 7316f1b11..b6f3ef99a 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -1,7 +1,7 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; -module.exports = async function post(ctx) { +export default async function post(ctx) { let { username, slugParts, ...resource } = ctx.params; const resourceUri = this.getUriFromSlugParts(slugParts, username); @@ -39,4 +39,4 @@ module.exports = async function post(ctx) { ctx.meta.$statusCode = e.code || 500; ctx.meta.$statusMessage = e.message; } -}; +} diff --git a/src/middleware/packages/ldp/services/api/index.ts b/src/middleware/packages/ldp/services/api/index.ts index fd14257c6..53a393085 100644 --- a/src/middleware/packages/ldp/services/api/index.ts +++ b/src/middleware/packages/ldp/services/api/index.ts @@ -1,15 +1,16 @@ -const urlJoin = require('url-join'); -const deleteAction = require('./actions/delete'); -const getAction = require('./actions/get'); -const headAction = require('./actions/head'); -const patchAction = require('./actions/patch'); -const postAction = require('./actions/post'); -const putAction = require('./actions/put'); -const getCatchAllRoute = require('../../routes/getCatchAllRoute'); -const getPodsRoute = require('../../routes/getPodsRoute'); +import urlJoin from 'url-join'; +import deleteAction from './actions/delete.ts'; +import getAction from './actions/get.ts'; +import headAction from './actions/head.ts'; +import patchAction from './actions/patch.ts'; +import postAction from './actions/post.ts'; +import putAction from './actions/put.ts'; +import getCatchAllRoute from '../../routes/getCatchAllRoute.ts'; +import getPodsRoute from '../../routes/getPodsRoute.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ldp.api', +const LdpApiSchema = { + name: 'ldp.api' as const, settings: { baseUrl: null, podProvider: false @@ -46,4 +47,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default LdpApiSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpApiSchema.name]: typeof LdpApiSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index ed80f0259..c2836c4bb 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -1,93 +1,145 @@ -module.exports = { - name: 'ldp.cache', +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +const LdpCacheSchema = { + name: 'ldp.cache' as const, dependencies: ['ldp.container'], actions: { - async generate(ctx) { - const containersUris = await ctx.call('ldp.container.getAll'); - for (const containerUri of containersUris) { - try { - await ctx.call('ldp.container.get', { containerUri }); - this.logger.info(`Generated cache for container ${containerUri}`); - } catch (e) { - this.logger.warn(`Error when generating cache for container ${containerUri}`); - console.error(e); + generate: defineAction({ + async handler(ctx) { + const containersUris = await ctx.call('ldp.container.getAll'); + for (const containerUri of containersUris) { + try { + await ctx.call('ldp.container.get', { containerUri }); + this.logger.info(`Generated cache for container ${containerUri}`); + } catch (e) { + this.logger.warn(`Error when generating cache for container ${containerUri}`); + console.error(e); + } } } - }, - async invalidateResource(ctx) { - if (this.broker.cacher) { - const { resourceUri, dataset } = ctx.params; - await this.broker.cacher.clean(`ldp.resource.get:${resourceUri}**`); - await this.broker.cacher.clean(`ldp.resource.getTypes:${resourceUri}**`); + }), + + invalidateResource: defineAction({ + async handler(ctx) { + if (this.broker.cacher) { + const { resourceUri, dataset } = ctx.params; + await this.broker.cacher.clean(`ldp.resource.get:${resourceUri}**`); + await this.broker.cacher.clean(`ldp.resource.getTypes:${resourceUri}**`); - // Also invalidate the cache of the containers containing the resource - // For deleted resources, no container will be found (containers will be invalidated through the ldp.resource.detached event) - for (const containerUri of await ctx.call('ldp.resource.getContainers', { resourceUri, dataset })) { - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + // Also invalidate the cache of the containers containing the resource + // For deleted resources, no container will be found (containers will be invalidated through the ldp.resource.detached event) + for (const containerUri of await ctx.call('ldp.resource.getContainers', { resourceUri, dataset })) { + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } } } - }, - async invalidateContainer(ctx) { - if (this.broker.cacher) { - const { containerUri } = ctx.params; - await this.broker.cacher.clean(`ldp.container.get:${containerUri}**`); - await this.broker.cacher.clean(`ldp.resource.getTypes:${containerUri}**`); + }), + + invalidateContainer: defineAction({ + async handler(ctx) { + if (this.broker.cacher) { + const { containerUri } = ctx.params; + await this.broker.cacher.clean(`ldp.container.get:${containerUri}**`); + await this.broker.cacher.clean(`ldp.resource.getTypes:${containerUri}**`); + } } - } + }) }, events: { - async 'ldp.resource.deleted'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.container.attached'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.container.patched'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.container.deleted'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.container.detached'(ctx) { - const { containerUri } = ctx.params; - await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); - }, - async 'ldp.remote.deleted'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - async 'ldp.remote.stored'(ctx) { - const { resourceUri, dataset } = ctx.params; - await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); - }, - // Invalidate cache also when ACL rights are changed - async 'webacl.resource.updated'(ctx) { - const { uri, isContainer, dataset } = ctx.params; - if (isContainer) { - await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); - } else { - await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.container.attached': defineServiceEvent({ + async handler(ctx) { + const { containerUri } = ctx.params; + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + }), + + 'ldp.container.patched': defineServiceEvent({ + async handler(ctx) { + const { containerUri } = ctx.params; + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }, - async 'webacl.resource.deleted'(ctx) { - const { uri, isContainer, dataset } = ctx.params; - if (isContainer) { - await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); - } else { - await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); + }), + + 'ldp.container.deleted': defineServiceEvent({ + async handler(ctx) { + const { containerUri } = ctx.params; + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + }), + + 'ldp.container.detached': defineServiceEvent({ + async handler(ctx) { + const { containerUri } = ctx.params; + await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); + } + }), + + 'ldp.remote.deleted': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'ldp.remote.stored': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, dataset } = ctx.params; + await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); + } + }), + + 'webacl.resource.updated': defineServiceEvent({ + // Invalidate cache also when ACL rights are changed + async handler(ctx) { + const { uri, isContainer, dataset } = ctx.params; + if (isContainer) { + await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); + } else { + await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); + } + } + }), + + 'webacl.resource.deleted': defineServiceEvent({ + async handler(ctx) { + const { uri, isContainer, dataset } = ctx.params; + if (isContainer) { + await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); + } else { + await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); + } } + }) + } +} satisfies ServiceSchema; + +export default LdpCacheSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpCacheSchema.name]: typeof LdpCacheSchema; } } -}; +} diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 7ded6e246..d4844eb01 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,7 +1,8 @@ const { MoleculerError } = require('moleculer').Errors; -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -51,4 +52,6 @@ module.exports = { return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index b8e96b1c7..6cc30ce8f 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -16,4 +18,6 @@ module.exports = { await ctx.call('ldp.resource.delete', { resourceUri, webId }); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 362922b9d..88daed9bf 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -24,4 +26,6 @@ module.exports = { ctx.emit('ldp.container.created', { containerUri, options, webId }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 47838788e..e46d437fc 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -1,12 +1,13 @@ -const urlJoin = require('url-join'); -const { getParentContainerUri } = require('../../../utils'); +import urlJoin from 'url-join'; +import { getParentContainerUri } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; /** * Create a container and attach it to its parent container(s) * Recursively create the parent container(s) if they don't exist * In Pod provider config, the webId is required to find the Pod root */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -77,4 +78,6 @@ module.exports = { } } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index 588949fe1..bbd177aa7 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -1,6 +1,7 @@ -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: 'string', @@ -48,4 +49,6 @@ module.exports = { return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index f473737b1..0f4a0d150 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -45,4 +46,6 @@ module.exports = { ); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/exist.ts b/src/middleware/packages/ldp/services/container/actions/exist.ts index 8dc27c428..ddf99de22 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.ts +++ b/src/middleware/packages/ldp/services/container/actions/exist.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' } @@ -12,4 +14,6 @@ module.exports = { (await ctx.call('triplestore.document.exist', { documentUri: `${containerUri}/` })) ); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 70a0ee151..a63be31f5 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,8 +1,9 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; const { MoleculerError } = require('moleculer').Errors; -const { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } = require('../../../utils'); +import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string', optional: true }, @@ -114,4 +115,6 @@ module.exports = { return compactResults; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.ts b/src/middleware/packages/ldp/services/container/actions/getAll.ts index 1eab4678a..31093dadf 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.ts +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { dataset: { type: 'string', optional: true } @@ -20,4 +22,6 @@ module.exports = { return result.map(node => node.containerUri.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.ts b/src/middleware/packages/ldp/services/container/actions/getPath.ts index 15f8f79ee..e811a1f8a 100644 --- a/src/middleware/packages/ldp/services/container/actions/getPath.ts +++ b/src/middleware/packages/ldp/services/container/actions/getPath.ts @@ -1,7 +1,8 @@ -const dashify = require('dashify'); -const { isURL } = require('../../../utils'); +import dashify from 'dashify'; +import { isURL } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceType: 'string' @@ -36,4 +37,6 @@ module.exports = { return `/${prefix}/${dashify(className)}`; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index bb77c94fc..a49d29d82 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string', optional: true } @@ -21,4 +23,6 @@ module.exports = { return result.map(node => node.resourceUri.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/includes.ts b/src/middleware/packages/ldp/services/container/actions/includes.ts index fbb2486ee..c942bf994 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.ts +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -28,4 +30,6 @@ module.exports = { webId }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index 2c21f9bea..67e68c5f0 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -27,4 +29,6 @@ module.exports = { const num = Number(res[0].count.value); return num === 0; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index b34b69b2e..00386a1fe 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,5 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; -const { isMirror } = require('../../../utils'); +import { isMirror } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; const checkTripleValidity = (triple, containerUri) => { if (triple.subject.value !== containerUri) { @@ -17,7 +18,7 @@ const checkTripleValidity = (triple, containerUri) => { } }; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { @@ -115,4 +116,6 @@ module.exports = { ); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index c2dbf6b7b..ab225830f 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,9 +1,10 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const { cleanUndefined } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { cleanUndefined } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { @@ -160,4 +161,6 @@ module.exports = { return resourceUri; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index 12b782383..78fbc57f9 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -1,22 +1,23 @@ -const attachAction = require('./actions/attach'); -const clearAction = require('./actions/clear'); -const createAction = require('./actions/create'); -const createAndAttachAction = require('./actions/createAndAttach'); -const deleteAction = require('./actions/delete'); -const detachAction = require('./actions/detach'); -const existAction = require('./actions/exist'); -const isEmptyAction = require('./actions/isEmpty'); -const getAction = require('./actions/get'); -const getAllAction = require('./actions/getAll'); -const getPathAction = require('./actions/getPath'); -const getUrisAction = require('./actions/getUris'); -const includesAction = require('./actions/includes'); -const postAction = require('./actions/post'); -const patchAction = require('./actions/patch'); -const { getDatasetFromUri } = require('../../utils'); +import attachAction from './actions/attach.ts'; +import clearAction from './actions/clear.ts'; +import createAction from './actions/create.ts'; +import createAndAttachAction from './actions/createAndAttach.ts'; +import deleteAction from './actions/delete.ts'; +import detachAction from './actions/detach.ts'; +import existAction from './actions/exist.ts'; +import isEmptyAction from './actions/isEmpty.ts'; +import getAction from './actions/get.ts'; +import getAllAction from './actions/getAll.ts'; +import getPathAction from './actions/getPath.ts'; +import getUrisAction from './actions/getUris.ts'; +import includesAction from './actions/includes.ts'; +import postAction from './actions/post.ts'; +import patchAction from './actions/patch.ts'; +import { getDatasetFromUri } from '../../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ldp.container', +const LdpContainerSchema = { + name: 'ldp.container' as const, settings: { baseUrl: null, podProvider: false @@ -54,4 +55,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default LdpContainerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpContainerSchema.name]: typeof LdpContainerSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index de06c5841..c96af07c0 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -1,6 +1,7 @@ -const LinkHeader = require('http-link-header'); +import LinkHeader from 'http-link-header'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { uri: { type: 'string' } @@ -32,4 +33,6 @@ module.exports = { return linkHeader.toString(); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/actions/register.ts b/src/middleware/packages/ldp/services/link-header/actions/register.ts index 4be0ad66c..ac2d15a45 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/register.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/register.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { actionName: { type: 'string' } @@ -7,4 +9,6 @@ module.exports = { const { actionName } = ctx.params; this.registeredActionNames.push(actionName); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/index.ts b/src/middleware/packages/ldp/services/link-header/index.ts index a24fac762..ac28543b2 100644 --- a/src/middleware/packages/ldp/services/link-header/index.ts +++ b/src/middleware/packages/ldp/services/link-header/index.ts @@ -1,8 +1,9 @@ -const getAction = require('./actions/get'); -const registerAction = require('./actions/register'); +import getAction from './actions/get.ts'; +import registerAction from './actions/register.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ldp.link-header', +const LdpLinkHeaderSchema = { + name: 'ldp.link-header' as const, actions: { get: getAction, register: registerAction @@ -10,4 +11,14 @@ module.exports = { async started() { this.registeredActionNames = []; } -}; +} satisfies ServiceSchema; + +export default LdpLinkHeaderSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpLinkHeaderSchema.name]: typeof LdpLinkHeaderSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index 62a7563dd..f14d61460 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { actionName: { type: 'string' }, @@ -12,4 +14,6 @@ module.exports = { // Re-order all authorizers by priority this.authorizers.sort((a, b) => b.priority - a.priority); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index eca285007..514c8bc57 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,9 +1,10 @@ +import { defineAction } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; /** * Calls "has" action and throws error if no authorization was granted */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { uri: { type: 'string' }, @@ -16,4 +17,6 @@ module.exports = { throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED'); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index 57cf16ea2..abfb14103 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { uri: { type: 'string' }, @@ -25,4 +27,6 @@ module.exports = { // If no guards returned a positive return false; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/index.ts b/src/middleware/packages/ldp/services/permissions/index.ts index d2b1ca248..c140d7721 100644 --- a/src/middleware/packages/ldp/services/permissions/index.ts +++ b/src/middleware/packages/ldp/services/permissions/index.ts @@ -1,9 +1,10 @@ -const addAuthorizerAction = require('./actions/addAuthorizer'); -const checkAction = require('./actions/check'); -const hasAction = require('./actions/has'); +import addAuthorizerAction from './actions/addAuthorizer.ts'; +import checkAction from './actions/check.ts'; +import hasAction from './actions/has.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'permissions', +const PermissionsSchema = { + name: 'permissions' as const, actions: { addAuthorizer: addAuthorizerAction, check: checkAction, @@ -12,4 +13,14 @@ module.exports = { async started() { this.authorizers = []; } -}; +} satisfies ServiceSchema; + +export default PermissionsSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [PermissionsSchema.name]: typeof PermissionsSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.ts b/src/middleware/packages/ldp/services/registry/actions/getByType.ts index 88f34e640..d4f765686 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByType.ts @@ -1,8 +1,10 @@ +import { defineAction } from 'moleculer'; + /** * Find the container options for a resource type * This only returns containers registered with the LDP registry, not the ones registered with the TypeIndex. */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } @@ -18,4 +20,6 @@ module.exports = { ) ); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 5615ce3f7..fa9e4c19d 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,7 +1,9 @@ +import { defineAction } from 'moleculer'; + /** * Find the container options for a container URI */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: { type: 'string', optional: true }, @@ -29,4 +31,6 @@ module.exports = { } return this.settings.defaultOptions; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 573c8da5b..5eb2bc980 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,10 +1,11 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; /** * Get the container URI based on its path * In Pod provider config, the webId is required to find the Pod root */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { path: { type: 'string' }, @@ -22,4 +23,6 @@ module.exports = { return urlJoin(this.settings.baseUrl, path); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index 1cdc22aba..140bc5cc4 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -1,6 +1 @@ -module.exports = { - visibility: 'public', - handler() { - return this.registeredContainers; - } -}; +export const visibility = 'public'; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index c77023baf..8f5d5f3d2 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,9 +1,11 @@ -const urlJoin = require('url-join'); -const pathJoin = require('path').join; -const { pathToRegexp } = require('path-to-regexp'); -const { arrayOf } = require('../../../utils'); +import urlJoin from 'url-join'; +import pathModule from 'path'; +const pathJoin = pathModule.join; +import { pathToRegexp } from 'path-to-regexp'; +import { arrayOf } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { path: { type: 'string', optional: true }, @@ -88,4 +90,6 @@ module.exports = { return options; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.ts b/src/middleware/packages/ldp/services/registry/defaultOptions.ts index 66d292460..d9858c3ec 100644 --- a/src/middleware/packages/ldp/services/registry/defaultOptions.ts +++ b/src/middleware/packages/ldp/services/registry/defaultOptions.ts @@ -1,4 +1,4 @@ -module.exports = { +const Schema = { readOnly: false, excludeFromMirror: false, permissions: webId => { @@ -66,3 +66,5 @@ module.exports = { }, controlledActions: {} }; + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index a6e98df53..9d93cae84 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -1,13 +1,14 @@ -const urlJoin = require('url-join'); -const getByTypeAction = require('./actions/getByType'); -const getByUriAction = require('./actions/getByUri'); -const getUriAction = require('./actions/getUri'); -const listAction = require('./actions/list'); -const registerAction = require('./actions/register'); -const defaultOptions = require('./defaultOptions'); +import urlJoin from 'url-join'; +import getByTypeAction from './actions/getByType.ts'; +import getByUriAction from './actions/getByUri.ts'; +import getUriAction from './actions/getUri.ts'; +import listAction from './actions/list.ts'; +import registerAction from './actions/register.ts'; +import defaultOptions from './defaultOptions.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; -module.exports = { - name: 'ldp.registry', +const LdpRegistrySchema = { + name: 'ldp.registry' as const, settings: { baseUrl: null, containers: [], @@ -36,21 +37,33 @@ module.exports = { } }, events: { - async 'auth.registered'(ctx) { - const { webId, accountData } = ctx.params; - // We want to add user's containers only in Pod provider config - if (this.settings.podProvider) { - const storageUrl = await ctx.call('solid-storage.getUrl', { webId }); - const registeredContainers = await this.actions.list({ dataset: accountData.username }, { parentCtx: ctx }); - // Go through each registered containers - for (const options of Object.values(registeredContainers)) { - await ctx.call('ldp.container.createAndAttach', { - containerUri: urlJoin(storageUrl, options.path), - options, - webId - }); + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId, accountData } = ctx.params; + // We want to add user's containers only in Pod provider config + if (this.settings.podProvider) { + const storageUrl = await ctx.call('solid-storage.getUrl', { webId }); + const registeredContainers = await this.actions.list({ dataset: accountData.username }, { parentCtx: ctx }); + // Go through each registered containers + for (const options of Object.values(registeredContainers)) { + await ctx.call('ldp.container.createAndAttach', { + containerUri: urlJoin(storageUrl, options.path), + options, + webId + }); + } } } + }) + } +} satisfies ServiceSchema; + +export default LdpRegistrySchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpRegistrySchema.name]: typeof LdpRegistrySchema; } } -}; +} diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index 8adb13c10..aaf876275 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -49,4 +51,6 @@ module.exports = { return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index d08923689..dc4166834 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,6 +1,7 @@ -const { cleanUndefined } = require('../../../utils'); +import { cleanUndefined } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -77,4 +78,6 @@ module.exports = { throw new Error(`Unknown strategy: ${strategy}`); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index 0917d02c5..cba2a3942 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,8 +1,9 @@ -const fetch = require('node-fetch'); +import fetch from 'node-fetch'; const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -52,4 +53,6 @@ module.exports = { } } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 21e6e1af5..792f4ed20 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,7 +1,8 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -50,4 +51,6 @@ module.exports = { return result2; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index a913e0ecb..00fd7d562 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -30,4 +31,6 @@ module.exports = { } } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index c15287da7..30d33a99c 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,7 +1,8 @@ -const { Errors: E } = require('moleculer-web'); -const { hasType } = require('../../../utils'); +import { Errors as E } from 'moleculer-web'; +import { hasType } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string', optional: true }, @@ -82,4 +83,6 @@ module.exports = { return resource; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index 69ba149bd..bf3b18807 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,13 +1,14 @@ -const Schedule = require('moleculer-schedule'); -const deleteAction = require('./actions/delete'); -const getAction = require('./actions/get'); -const getNetworkAction = require('./actions/getNetwork'); -const getStoredAction = require('./actions/getStored'); -const isRemoteAction = require('./actions/isRemote'); -const storeAction = require('./actions/store'); +import Schedule from 'moleculer-schedule'; +import deleteAction from './actions/delete.ts'; +import getAction from './actions/get.ts'; +import getNetworkAction from './actions/getNetwork.ts'; +import getStoredAction from './actions/getStored.ts'; +import isRemoteAction from './actions/isRemote.ts'; +import storeAction from './actions/store.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ldp.remote', +const LdpRemoteSchema = { + name: 'ldp.remote' as const, mixins: [Schedule], settings: { baseUrl: null, @@ -21,9 +22,13 @@ module.exports = { getStored: getStoredAction, isRemote: isRemoteAction, store: storeAction, - runCron() { - this.updateSingleMirroredResources(); - } // Used by tests + + runCron: defineAction({ + // Used by tests + handler() { + this.updateSingleMirroredResources(); + } + }) }, methods: { async proxyAvailable() { @@ -68,4 +73,14 @@ module.exports = { handler: 'updateSingleMirroredResources' } ] -}; +} satisfies ServiceSchema; + +export default LdpRemoteSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpRemoteSchema.name]: typeof LdpRemoteSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index 56eaa0f2c..b5e04dbdf 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -1,7 +1,8 @@ -const { waitForResource } = require('../../../utils'); +import { waitForResource } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; /** @type {import('moleculer').ServiceActionsSchema} */ -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -33,4 +34,6 @@ module.exports = { ) ); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index e09d7b545..73b7504a7 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,7 +1,8 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resource: { type: 'object' }, @@ -73,4 +74,6 @@ module.exports = { return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 5dff79982..9c1d3ee53 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,6 +1,7 @@ -const fs = require('fs'); +import fs from 'fs'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: 'string', @@ -65,4 +66,6 @@ module.exports = { return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 5ba18a56e..763d9b51a 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -33,4 +35,6 @@ module.exports = { return exist; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index de6659ae4..f7721f68e 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -1,8 +1,9 @@ -const createSlug = require('speakingurl'); -const { v4: uuidv4 } = require('uuid'); -const urlJoin = require('url-join'); +import createSlug from 'speakingurl'; +import { v4 as uuidv4 } from 'uuid'; +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { containerUri: 'string', @@ -59,4 +60,6 @@ module.exports = { return urlJoin(containerUri, slug || uuid); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index c7bcb26cf..6ed67d06a 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,8 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { arrayOf } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { arrayOf } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -73,4 +74,6 @@ module.exports = { } }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index af56f4eea..db967fa23 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,6 +1,7 @@ -const { getContainerFromUri } = require('../../../utils'); +import { getContainerFromUri } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: 'string', @@ -34,4 +35,6 @@ module.exports = { return result.map(node => node.containerUri.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 1d4caa229..e72bffa67 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { resourceUri: 'string' @@ -23,4 +25,6 @@ module.exports = { return result.map(node => node.type.value); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 4d3ca05c4..146a5c073 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,5 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; -const { namedNode } = require('@rdfjs/data-model'); +import { namedNode } from '@rdfjs/data-model'; +import { defineAction } from 'moleculer'; function checkTriplesSubjectIsResource(triples, resourceUri) { for (const triple of triples) { @@ -17,7 +18,7 @@ function checkTriplesSubjectIsResource(triples, resourceUri) { } } -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: { @@ -102,4 +103,6 @@ module.exports = { return returnValues; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 9cba90c4c..321a64f21 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,8 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const { cleanUndefined } = require('../../../utils'); +import { MIME_TYPES } from '@semapps/mime-types'; +import { cleanUndefined } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resource: { @@ -158,4 +159,6 @@ module.exports = { webId }; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index 3069ed2c5..22481bffa 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -1,9 +1,10 @@ -const path = require('path'); -const fs = require('fs'); +import path from 'path'; +import fs from 'fs'; const { MoleculerError } = require('moleculer').Errors; -const { getSlugFromUri, getContainerFromUri } = require('../../../utils'); +import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resourceUri: 'string', @@ -42,4 +43,6 @@ module.exports = { fileName }; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index 48d936d94..06e7cddf0 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -1,19 +1,20 @@ -const awaitCreateCompleteAction = require('./actions/awaitCreateComplete'); -const getAction = require('./actions/get'); -const createAction = require('./actions/create'); -const patchAction = require('./actions/patch'); -const putAction = require('./actions/put'); -const deleteAction = require('./actions/delete'); -const existAction = require('./actions/exist'); -const generateIdAction = require('./actions/generateId'); -const getContainersAction = require('./actions/getContainers'); -const getTypesAction = require('./actions/getTypes'); -const uploadAction = require('./actions/upload'); -const methods = require('./methods'); -const { getDatasetFromUri } = require('../../utils'); +import awaitCreateCompleteAction from './actions/awaitCreateComplete.ts'; +import getAction from './actions/get.ts'; +import createAction from './actions/create.ts'; +import patchAction from './actions/patch.ts'; +import putAction from './actions/put.ts'; +import deleteAction from './actions/delete.ts'; +import existAction from './actions/exist.ts'; +import generateIdAction from './actions/generateId.ts'; +import getContainersAction from './actions/getContainers.ts'; +import getTypesAction from './actions/getTypes.ts'; +import uploadAction from './actions/upload.ts'; +import methods from './methods.ts'; +import { getDatasetFromUri } from '../../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ldp.resource', +const LdpResourceSchema = { + name: 'ldp.resource' as const, settings: { baseUrl: null, podProvider: false, @@ -52,4 +53,14 @@ module.exports = { } }, methods -}; +} satisfies ServiceSchema; + +export default LdpResourceSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpResourceSchema.name]: typeof LdpResourceSchema; + } + } +} diff --git a/src/middleware/packages/ldp/services/resource/methods.ts b/src/middleware/packages/ldp/services/resource/methods.ts index 1e6afcf47..a4c832585 100644 --- a/src/middleware/packages/ldp/services/resource/methods.ts +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -1,6 +1,6 @@ -const fs = require('fs'); -const bytes = require('bytes'); -const { variable } = require('@rdfjs/data-model'); +import fs from 'fs'; +import bytes from 'bytes'; +import { variable } from '@rdfjs/data-model'; const { MoleculerError } = require('moleculer').Errors; // TODO put each method in a different file (problems with "this" not working) diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index ef7e126bc..cb47d5936 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -1,7 +1,5 @@ -const urlJoin = require('url-join'); - +import urlJoin from 'url-join'; const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); - const regexProtocolAndHostAndPort = new RegExp('^http(s)?:\\/\\/([\\w-\\.:]*)'); function createFragmentURL(baseUrl, serverUrl) { @@ -44,14 +42,12 @@ const buildFiltersQuery = filters => { }; const isObject = value => typeof value === 'object' && !Array.isArray(value) && value !== null; - const getSlugFromUri = uri => uri.match(new RegExp(`.*/(.*)`))[1]; /** @deprecated Use the ldp.resource.getContainers action instead */ const getContainerFromUri = uri => uri.match(new RegExp(`(.*)/.*`))[1]; const getParentContainerUri = uri => uri.match(new RegExp(`(.*)/.*`))[1]; - const getParentContainerPath = path => path.match(new RegExp(`(.*)/.*`))[1]; const getPathFromUri = uri => { @@ -89,7 +85,6 @@ const getWebIdFromUri = uri => { }; const getId = resource => resource.id || resource['@id']; - const getType = resource => resource.type || resource['@type']; const hasType = (resource, type) => { @@ -151,7 +146,7 @@ const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { throw new Error(`Waiting for resource failed. No results after ${maxTries} tries`); }; -module.exports = { +export { buildFiltersQuery, isURL, isURI, diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index 314668ccb..64962998a 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -1,8 +1,7 @@ const { MoleculerError } = require('moleculer').Errors; -const { negotiateTypeMime, MIME_TYPES } = require('@semapps/mime-types'); -const Busboy = require('busboy'); -const streams = require('memory-streams'); - +import { negotiateTypeMime, MIME_TYPES } from '@semapps/mime-types'; +import Busboy from 'busboy'; +import streams from 'memory-streams'; const handledMimeTypes = [MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE, MIME_TYPES.SPARQL_UPDATE]; // Put requested URL and query string in meta so that services may use them independently @@ -172,7 +171,7 @@ const throw500 = msg => { throw new MoleculerError(msg, 500, 'INTERNAL_SERVER_ERROR', { status: 'Server Error', text: msg }); }; -module.exports = { +export { parseUrl, parseHeader, parseRawBody, diff --git a/src/middleware/packages/migration/index.ts b/src/middleware/packages/migration/index.ts index 64f1cfa83..0a4b503af 100644 --- a/src/middleware/packages/migration/index.ts +++ b/src/middleware/packages/migration/index.ts @@ -1,3 +1,2 @@ -module.exports = { - MigrationService: require('./service') -}; +import MigrationService from './service.ts'; +export { MigrationService }; diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts index d33873a3e..f7589311f 100644 --- a/src/middleware/packages/migration/service.ts +++ b/src/middleware/packages/migration/service.ts @@ -1,8 +1,9 @@ -const { getAclUriFromResourceUri } = require('@semapps/webacl'); -const { getContainerFromUri } = require('@semapps/ldp'); +import { getAclUriFromResourceUri } from '@semapps/webacl'; +import { getContainerFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'migration', +const MigrationSchema = { + name: 'migration' as const, settings: { baseUrl: undefined }, @@ -12,170 +13,197 @@ module.exports = { } }, actions: { - async replacePredicate(ctx) { - const { oldPredicate, newPredicate, dataset } = ctx.params; - - if (!oldPredicate.startsWith('http')) - throw new Error(`oldPredicate must be a full URI. Received: ${oldPredicate}`); - if (!newPredicate.startsWith('http')) - throw new Error(`newPredicate must be a full URI. Received: ${oldPredicate}`); - - this.logger.info(`Replacing predicate ${oldPredicate} with ${newPredicate}...`); - - await ctx.call('triplestore.update', { - query: ` - DELETE { ?s <${oldPredicate}> ?o . } - INSERT { ?s <${newPredicate}> ?o . } - WHERE { ?s <${oldPredicate}> ?o . } - `, - dataset, - webId: 'system' - }); - }, - async moveResourcesToContainer(ctx) { - const { oldContainerUri, newContainerUri, dataset } = ctx.params; - - const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: oldContainerUri }); - - for (let oldResourceUri of resourcesUris) { - const newResourceUri = oldResourceUri.replace(oldContainerUri, newContainerUri); - - await this.actions.moveResource({ oldResourceUri, newResourceUri, dataset }, { parentCtx: ctx }); - - this.logger.info( - `All resources moved. You should consider deleting the old container with this command: call ldp.container.delete --containerUri ${oldContainerUri} --webId system` + replacePredicate: defineAction({ + async handler(ctx) { + const { oldPredicate, newPredicate, dataset } = ctx.params; + + if (!oldPredicate.startsWith('http')) + throw new Error(`oldPredicate must be a full URI. Received: ${oldPredicate}`); + if (!newPredicate.startsWith('http')) + throw new Error(`newPredicate must be a full URI. Received: ${oldPredicate}`); + + this.logger.info(`Replacing predicate ${oldPredicate} with ${newPredicate}...`); + + await ctx.call('triplestore.update', { + query: ` + DELETE { ?s <${oldPredicate}> ?o . } + INSERT { ?s <${newPredicate}> ?o . } + WHERE { ?s <${oldPredicate}> ?o . } + `, + dataset, + webId: 'system' + }); + } + }), + + moveResourcesToContainer: defineAction({ + async handler(ctx) { + const { oldContainerUri, newContainerUri, dataset } = ctx.params; + + const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: oldContainerUri }); + + for (let oldResourceUri of resourcesUris) { + const newResourceUri = oldResourceUri.replace(oldContainerUri, newContainerUri); + + await this.actions.moveResource({ oldResourceUri, newResourceUri, dataset }, { parentCtx: ctx }); + + this.logger.info( + `All resources moved. You should consider deleting the old container with this command: call ldp.container.delete --containerUri ${oldContainerUri} --webId system` + ); + } + } + }), + + moveResource: defineAction({ + async handler(ctx) { + const { oldResourceUri, newResourceUri, dataset } = ctx.params; + + this.logger.info(`Moving resource ${oldResourceUri} to ${newResourceUri}...`); + + await ctx.call('triplestore.update', { + query: ` + DELETE { <${oldResourceUri}> ?p ?o } + INSERT { <${newResourceUri}> ?p ?o } + WHERE { <${oldResourceUri}> ?p ?o } + `, + dataset, + webId: 'system' + }); + + await ctx.call('triplestore.update', { + query: ` + DELETE { ?s ?p <${oldResourceUri}> } + INSERT { ?s ?p <${newResourceUri}> } + WHERE { ?s ?p <${oldResourceUri}> } + `, + dataset, + webId: 'system' + }); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { ?s ?p <${oldResourceUri}> } + INSERT { ?s ?p <${newResourceUri}> } + WHERE { ?s ?p <${oldResourceUri}> } + `, + dataset, + webId: 'system' + }); + + const oldContainerUri = getContainerFromUri(oldResourceUri); + const newContainerUri = getContainerFromUri(newResourceUri); + + await ctx.call('triplestore.update', { + query: ` + PREFIX ldp: + DELETE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } + INSERT { <${newContainerUri}> ldp:contains <${newResourceUri}> } + WHERE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } + `, + dataset, + webId: 'system' + }); + + await this.actions.moveAclRights({ newResourceUri, oldResourceUri, dataset }, { parentCtx: ctx }); + } + }), + + moveAclGroup: defineAction({ + async handler(ctx) { + const { oldGroupUri, newGroupUri, dataset } = ctx.params; + + this.logger.info(`Moving ACL group ${oldGroupUri} to ${newGroupUri}...`); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { <${oldGroupUri}> ?p ?o } + INSERT { <${newGroupUri}> ?p ?o } + WHERE { <${oldGroupUri}> ?p ?o } + `, + dataset, + webId: 'system' + }); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { ?s ?p <${oldGroupUri}> } + INSERT { ?s ?p <${newGroupUri}> } + WHERE { ?s ?p <${oldGroupUri}> } + `, + dataset, + webId: 'system' + }); + + await this.actions.moveAclRights( + { newResourceUri: newGroupUri, oldResourceUri: oldGroupUri, dataset }, + { parentCtx: ctx } ); } - }, - async moveResource(ctx) { - const { oldResourceUri, newResourceUri, dataset } = ctx.params; - - this.logger.info(`Moving resource ${oldResourceUri} to ${newResourceUri}...`); - - await ctx.call('triplestore.update', { - query: ` - DELETE { <${oldResourceUri}> ?p ?o } - INSERT { <${newResourceUri}> ?p ?o } - WHERE { <${oldResourceUri}> ?p ?o } - `, - dataset, - webId: 'system' - }); - - await ctx.call('triplestore.update', { - query: ` - DELETE { ?s ?p <${oldResourceUri}> } - INSERT { ?s ?p <${newResourceUri}> } - WHERE { ?s ?p <${oldResourceUri}> } - `, - dataset, - webId: 'system' - }); - - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?s ?p <${oldResourceUri}> } - INSERT { ?s ?p <${newResourceUri}> } - WHERE { ?s ?p <${oldResourceUri}> } - `, - dataset, - webId: 'system' - }); - - const oldContainerUri = getContainerFromUri(oldResourceUri); - const newContainerUri = getContainerFromUri(newResourceUri); - - await ctx.call('triplestore.update', { - query: ` - PREFIX ldp: - DELETE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } - INSERT { <${newContainerUri}> ldp:contains <${newResourceUri}> } - WHERE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } - `, - dataset, - webId: 'system' - }); - - await this.actions.moveAclRights({ newResourceUri, oldResourceUri, dataset }, { parentCtx: ctx }); - }, - async moveAclGroup(ctx) { - const { oldGroupUri, newGroupUri, dataset } = ctx.params; - - this.logger.info(`Moving ACL group ${oldGroupUri} to ${newGroupUri}...`); - - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { <${oldGroupUri}> ?p ?o } - INSERT { <${newGroupUri}> ?p ?o } - WHERE { <${oldGroupUri}> ?p ?o } - `, - dataset, - webId: 'system' - }); - - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?s ?p <${oldGroupUri}> } - INSERT { ?s ?p <${newGroupUri}> } - WHERE { ?s ?p <${oldGroupUri}> } - `, - dataset, - webId: 'system' - }); - - await this.actions.moveAclRights( - { newResourceUri: newGroupUri, oldResourceUri: oldGroupUri, dataset }, - { parentCtx: ctx } - ); - }, - async moveAclRights(ctx) { - const { oldResourceUri, newResourceUri, dataset } = ctx.params; - - for (const right of ['Read', 'Append', 'Write', 'Control']) { - const oldResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, oldResourceUri)}#${right}`; - const newResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, newResourceUri)}#${right}`; - - this.logger.info(`Moving ACL rights ${oldResourceAclUri} to ${newResourceAclUri}...`); + }), + + moveAclRights: defineAction({ + async handler(ctx) { + const { oldResourceUri, newResourceUri, dataset } = ctx.params; + + for (const right of ['Read', 'Append', 'Write', 'Control']) { + const oldResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, oldResourceUri)}#${right}`; + const newResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, newResourceUri)}#${right}`; + + this.logger.info(`Moving ACL rights ${oldResourceAclUri} to ${newResourceAclUri}...`); + + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { <${oldResourceAclUri}> ?p ?o } + INSERT { <${newResourceAclUri}> ?p ?o } + WHERE { <${oldResourceAclUri}> ?p ?o } + `, + dataset, + webId: 'system' + }); + } + } + }), + + clearUserRights: defineAction({ + async handler(ctx) { + const { userUri, dataset } = ctx.params; + + // Remove user from all WebACL groups he may be member of + await ctx.call('triplestore.update', { + query: ` + WITH + DELETE { ?groupUri <${userUri}> } + WHERE { ?groupUri <${userUri}> } + `, + dataset, + webId: 'system' + }); + // Remove all authorization given specifically to this user await ctx.call('triplestore.update', { query: ` WITH - DELETE { <${oldResourceAclUri}> ?p ?o } - INSERT { <${newResourceAclUri}> ?p ?o } - WHERE { <${oldResourceAclUri}> ?p ?o } + DELETE { ?authorizationUri <${userUri}> } + WHERE { ?authorizationUri <${userUri}> } `, dataset, webId: 'system' }); } - }, - async clearUserRights(ctx) { - const { userUri, dataset } = ctx.params; - - // Remove user from all WebACL groups he may be member of - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?groupUri <${userUri}> } - WHERE { ?groupUri <${userUri}> } - `, - dataset, - webId: 'system' - }); - - // Remove all authorization given specifically to this user - await ctx.call('triplestore.update', { - query: ` - WITH - DELETE { ?authorizationUri <${userUri}> } - WHERE { ?authorizationUri <${userUri}> } - `, - dataset, - webId: 'system' - }); + }) + } +} satisfies ServiceSchema; + +export default MigrationSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [MigrationSchema.name]: typeof MigrationSchema; } } -}; +} diff --git a/src/middleware/packages/mime-types/constants.ts b/src/middleware/packages/mime-types/constants.ts index f1f58a44d..09d2c3090 100644 --- a/src/middleware/packages/mime-types/constants.ts +++ b/src/middleware/packages/mime-types/constants.ts @@ -68,7 +68,4 @@ const TYPES_REPO = [ } ]; -module.exports = { - MIME_TYPES, - TYPES_REPO -}; +export { MIME_TYPES, TYPES_REPO }; diff --git a/src/middleware/packages/mime-types/index.ts b/src/middleware/packages/mime-types/index.ts index 1899e9473..4b9d1bb8e 100644 --- a/src/middleware/packages/mime-types/index.ts +++ b/src/middleware/packages/mime-types/index.ts @@ -1,6 +1,6 @@ -const Negotiator = require('negotiator'); +import Negotiator from 'negotiator'; const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES, TYPES_REPO } = require('./constants'); +import { MIME_TYPES, TYPES_REPO } from './constants.ts'; const negotiateType = function (incomingType) { const availableMediaTypes = []; @@ -46,11 +46,4 @@ const isMimeTypeMatching = (type, types) => { return !!result; }; -module.exports = { - MIME_TYPES, - negotiateType, - negotiateTypeMime, - negotiateTypeN3, - negotiateTypeFuseki, - isMimeTypeMatching -}; +export { MIME_TYPES, negotiateType, negotiateTypeMime, negotiateTypeN3, negotiateTypeFuseki, isMimeTypeMatching }; diff --git a/src/middleware/packages/nodeinfo/index.ts b/src/middleware/packages/nodeinfo/index.ts index e712eab29..1800a5e0d 100644 --- a/src/middleware/packages/nodeinfo/index.ts +++ b/src/middleware/packages/nodeinfo/index.ts @@ -1,3 +1,2 @@ -module.exports = { - NodeinfoService: require('./service') -}; +import NodeinfoService from './service.ts'; +export { NodeinfoService }; diff --git a/src/middleware/packages/nodeinfo/service.ts b/src/middleware/packages/nodeinfo/service.ts index 5fe8b5d4c..238b84189 100644 --- a/src/middleware/packages/nodeinfo/service.ts +++ b/src/middleware/packages/nodeinfo/service.ts @@ -1,8 +1,9 @@ -const path = require('path'); -const urlJoin = require('url-join'); +import path from 'path'; +import urlJoin from 'url-join'; +import { ServiceSchema, defineAction } from 'moleculer'; const NodeinfoService = { - name: 'nodeinfo', + name: 'nodeinfo' as const, settings: { baseUrl: null, software: { @@ -57,36 +58,55 @@ const NodeinfoService = { }); }, actions: { - addLink(ctx) { - const { rel, href } = ctx.params; - this.links.push({ rel, href }); - }, - getLinks() { - return { - links: this.links - }; - }, - async getSchema(ctx) { - const users = await this.actions.getUsersCount({}, { parentCtx: ctx }); - return { - version: '2.1', - software: this.settings.software, - protocols: this.settings.protocols, - services: this.settings.services, - openRegistrations: this.settings.openRegistrations, - usage: { users }, - metadata: this.settings.metadata - }; - }, - // Overwrite this method to return your users count - async getUsersCount() { - return { - total: 0, - activeHalfYear: 0, - activeMonth: 0 - }; - } + addLink: defineAction({ + handler(ctx) { + const { rel, href } = ctx.params; + this.links.push({ rel, href }); + } + }), + + getLinks: defineAction({ + handler() { + return { + links: this.links + }; + } + }), + + getSchema: defineAction({ + async handler(ctx) { + const users = await this.actions.getUsersCount({}, { parentCtx: ctx }); + return { + version: '2.1', + software: this.settings.software, + protocols: this.settings.protocols, + services: this.settings.services, + openRegistrations: this.settings.openRegistrations, + usage: { users }, + metadata: this.settings.metadata + }; + } + }), + + getUsersCount: defineAction({ + // Overwrite this method to return your users count + async handler() { + return { + total: 0, + activeHalfYear: 0, + activeMonth: 0 + }; + } + }) } -}; +} satisfies ServiceSchema; -module.exports = NodeinfoService; +export default NodeinfoService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [NodeinfoService.name]: typeof NodeinfoService; + } + } +} diff --git a/src/middleware/packages/notifications/index.ts b/src/middleware/packages/notifications/index.ts index 9b3e45ba1..713b7afa9 100644 --- a/src/middleware/packages/notifications/index.ts +++ b/src/middleware/packages/notifications/index.ts @@ -1,5 +1,4 @@ -module.exports = { - DigestNotificationsService: require('./services/digest/service'), - ExpoPushNotificationsService: require('./services/expo-push/service'), - SingleMailNotificationsService: require('./services/single-mail/service') -}; +import DigestNotificationsService from './services/digest/service.ts'; +import ExpoPushNotificationsService from './services/expo-push/service.ts'; +import SingleMailNotificationsService from './services/single-mail/service.ts'; +export { DigestNotificationsService, ExpoPushNotificationsService, SingleMailNotificationsService }; diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index 2c83533f8..e4ae69c25 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -1,10 +1,11 @@ -const MailService = require('moleculer-mail'); -const cronParser = require('cron-parser'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const DigestSubscriptionService = require('./subscription'); +import MailService from 'moleculer-mail'; +import cronParser from 'cron-parser'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import DigestSubscriptionService from './subscription.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const DigestNotificationsService = { - name: 'digest', + name: 'digest' as const, mixins: [MailService], settings: { frequencies: { @@ -37,95 +38,97 @@ const DigestNotificationsService = { } }, actions: { - async build(ctx) { - const { frequency, timestamp } = ctx.params; - const success = []; - const failures = []; + build: defineAction({ + async handler(ctx) { + const { frequency, timestamp } = ctx.params; + const success = []; + const failures = []; - const currentDate = timestamp ? new Date(timestamp) : new Date(); + const currentDate = timestamp ? new Date(timestamp) : new Date(); - const interval = cronParser.parseExpression(this.settings.frequencies[frequency], { - currentDate, - tz: this.settings.timeZone - }); + const interval = cronParser.parseExpression(this.settings.frequencies[frequency], { + currentDate, + tz: this.settings.timeZone + }); - const previousDate = new Date(interval.prev().toISOString()); + const previousDate = new Date(interval.prev().toISOString()); - const subscriptions = await ctx.call('digest.subscription.find', { query: { frequency } }); + const subscriptions = await ctx.call('digest.subscription.find', { query: { frequency } }); - for (const subscription of subscriptions) { - try { - const subscriber = await ctx.call('activitypub.actor.get', { actorUri: subscription.webId }); - const account = await ctx.call('auth.account.findByWebId', { webId: subscription.webId }); - const newActivities = await ctx.call('activitypub.inbox.getByDates', { - collectionUri: subscriber.inbox, - fromDate: previousDate, - toDate: currentDate - }); + for (const subscription of subscriptions) { + try { + const subscriber = await ctx.call('activitypub.actor.get', { actorUri: subscription.webId }); + const account = await ctx.call('auth.account.findByWebId', { webId: subscription.webId }); + const newActivities = await ctx.call('activitypub.inbox.getByDates', { + collectionUri: subscriber.inbox, + fromDate: previousDate, + toDate: currentDate + }); - if (newActivities.length > 0) { - const notifications = []; - const notificationsByCategories = {}; + if (newActivities.length > 0) { + const notifications = []; + const notificationsByCategories = {}; - // Map received activities to notifications - for (const activity of newActivities) { - const notification = await ctx.call('activity-mapping.map', { - activity, - locale: subscription.locale || account.locale - }); - if (notification && (await this.filterNotification(notification, subscription, notifications))) { - notifications.push(notification); - if (notification.category) { - if (!notificationsByCategories[notification.category]) - notificationsByCategories[notification.category] = { - category: notification.category, - notifications: [] - }; - notificationsByCategories[notification.category].notifications.push(notification); + // Map received activities to notifications + for (const activity of newActivities) { + const notification = await ctx.call('activity-mapping.map', { + activity, + locale: subscription.locale || account.locale + }); + if (notification && (await this.filterNotification(notification, subscription, notifications))) { + notifications.push(notification); + if (notification.category) { + if (!notificationsByCategories[notification.category]) + notificationsByCategories[notification.category] = { + category: notification.category, + notifications: [] + }; + notificationsByCategories[notification.category].notifications.push(notification); + } } } - } - // If we have at least one notification, send email - if (notifications.length > 0) { - await this.actions.send( - { - to: subscription.email || account.email, - template: 'digest', - locale: subscription.locale || account.locale, - data: { - notifications, - notificationsByCategories, - subscription, - subscriber, - account + // If we have at least one notification, send email + if (notifications.length > 0) { + await this.actions.send( + { + to: subscription.email || account.email, + template: 'digest', + locale: subscription.locale || account.locale, + data: { + notifications, + notificationsByCategories, + subscription, + subscriber, + account + } + }, + { + parentCtx: ctx } - }, - { - parentCtx: ctx - } - ); + ); - success.push({ - email: subscription.email || account.email, - locale: subscription.locale || account.locale, - numNotifications: notifications.length, - categories: Object.keys(notificationsByCategories), - notificationsIds: notifications.map(n => n.id), - subscription - }); + success.push({ + email: subscription.email || account.email, + locale: subscription.locale || account.locale, + numNotifications: notifications.length, + categories: Object.keys(notificationsByCategories), + notificationsIds: notifications.map(n => n.id), + subscription + }); + } } + } catch (e) { + failures.push({ + error: e.message, + subscription + }); } - } catch (e) { - failures.push({ - error: e.message, - subscription - }); } - } - return { failures, success }; - } + return { failures, success }; + } + }) }, methods: { // Optional method called for each notification @@ -144,6 +147,14 @@ const DigestNotificationsService = { } ] } -}; +} satisfies ServiceSchema; -module.exports = DigestNotificationsService; +export default DigestNotificationsService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [DigestNotificationsService.name]: typeof DigestNotificationsService; + } + } +} diff --git a/src/middleware/packages/notifications/services/digest/subscription.ts b/src/middleware/packages/notifications/services/digest/subscription.ts index 6cd17c169..4d760bf93 100644 --- a/src/middleware/packages/notifications/services/digest/subscription.ts +++ b/src/middleware/packages/notifications/services/digest/subscription.ts @@ -1,8 +1,9 @@ -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'digest.subscription', +const DigestSubscriptionSchema = { + name: 'digest.subscription' as const, mixins: [DbService], adapter: new TripleStoreAdapter({ type: 'DigestSubscription', dataset: 'settings' }), settings: { @@ -10,10 +11,22 @@ module.exports = { }, dependencies: ['triplestore'], actions: { - async findByWebId(ctx) { - const { webId } = ctx.params; - const subscriptions = await this._find(ctx, { query: { webId } }); - return subscriptions.length > 0 ? subscriptions[0] : null; + findByWebId: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + const subscriptions = await this._find(ctx, { query: { webId } }); + return subscriptions.length > 0 ? subscriptions[0] : null; + } + }) + } +} satisfies ServiceSchema; + +export default DigestSubscriptionSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [DigestSubscriptionSchema.name]: typeof DigestSubscriptionSchema; } } -}; +} diff --git a/src/middleware/packages/notifications/services/expo-push/device.ts b/src/middleware/packages/notifications/services/expo-push/device.ts index b27d3e6cd..431ff6308 100644 --- a/src/middleware/packages/notifications/services/expo-push/device.ts +++ b/src/middleware/packages/notifications/services/expo-push/device.ts @@ -1,8 +1,9 @@ -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; const ExpoPushDeviceService = { - name: 'expo-push.device', + name: 'expo-push.device' as const, mixins: [DbService], adapter: new TripleStoreAdapter({ type: 'Device', dataset: 'settings' }), settings: { @@ -13,74 +14,87 @@ const ExpoPushDeviceService = { } }, actions: { - async subscribe(ctx) { - const { name, yearClass, userUri, pushToken } = ctx.params; + subscribe: defineAction({ + async handler(ctx) { + const { name, yearClass, userUri, pushToken } = ctx.params; - let device = await this.actions.find( - { - query: { - ownedBy: userUri, - pushToken: pushToken - } - }, - { parentCtx: ctx } - ); - - if (!device['ldp:contains']) { - device = await this.actions.create( + let device = await this.actions.find( { - name: name, - yearClass: yearClass, - ownedBy: userUri, - pushToken: pushToken, - addedAt: new Date().toISOString() + query: { + ownedBy: userUri, + pushToken: pushToken + } }, { parentCtx: ctx } ); - if (this.settings.newDeviceNotification && this.settings.newDeviceNotification.message) { - await ctx.call('push.notification.send', { - to: userUri, - ...this.settings.newDeviceNotification - }); + if (!device['ldp:contains']) { + device = await this.actions.create( + { + name: name, + yearClass: yearClass, + ownedBy: userUri, + pushToken: pushToken, + addedAt: new Date().toISOString() + }, + { parentCtx: ctx } + ); + + if (this.settings.newDeviceNotification && this.settings.newDeviceNotification.message) { + await ctx.call('push.notification.send', { + to: userUri, + ...this.settings.newDeviceNotification + }); + } + } else { + // If there was an error message on the device, clear it + device = await this.actions.update( + { + '@id': device['ldp:contains'][0]['@id'], + name: name, + yearClass: yearClass, + errorMessage: null + }, + { parentCtx: ctx } + ); } - } else { - // If there was an error message on the device, clear it - device = await this.actions.update( - { - '@id': device['ldp:contains'][0]['@id'], - name: name, - yearClass: yearClass, - errorMessage: null - }, - { parentCtx: ctx } - ); + + return device; } + }), - return device; - }, - async findUsersDevices(ctx) { - const devices = []; + findUsersDevices: defineAction({ + async handler(ctx) { + const devices = []; - for (const userUri of ctx.params.users) { - const container = await this.actions.find( - { - query: { - ownedBy: userUri, - errorMessage: null - } - }, - { parentCtx: ctx } - ); + for (const userUri of ctx.params.users) { + const container = await this.actions.find( + { + query: { + ownedBy: userUri, + errorMessage: null + } + }, + { parentCtx: ctx } + ); - if (container['ldp:contains']) { - devices.push(...container['ldp:contains']); + if (container['ldp:contains']) { + devices.push(...container['ldp:contains']); + } } + + return devices; } + }) + } +} satisfies ServiceSchema; + +export default ExpoPushDeviceService; - return devices; +declare global { + export namespace Moleculer { + export interface AllServices { + [ExpoPushDeviceService.name]: typeof ExpoPushDeviceService; } } -}; - -module.exports = ExpoPushDeviceService; +} diff --git a/src/middleware/packages/notifications/services/expo-push/notification.ts b/src/middleware/packages/notifications/services/expo-push/notification.ts index 4b87f40dc..226c4b85f 100644 --- a/src/middleware/packages/notifications/services/expo-push/notification.ts +++ b/src/middleware/packages/notifications/services/expo-push/notification.ts @@ -1,9 +1,10 @@ -const DbService = require('moleculer-db'); -const { Expo } = require('expo-server-sdk'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); +import DbService from 'moleculer-db'; +import { Expo } from 'expo-server-sdk'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; const ExpoPushNotificationService = { - name: 'expo-push.notification', + name: 'expo-push.notification' as const, mixins: [DbService], adapter: new TripleStoreAdapter({ type: 'PushNotification', dataset: 'settings' }), settings: { @@ -16,112 +17,123 @@ const ExpoPushNotificationService = { setInterval(this.actions.checkReceipts, 5 * 60 * 1000); }, actions: { - async send(ctx) { - await this.actions.queue(ctx.params, { parentCtx: ctx }); + send: defineAction({ + async handler(ctx) { + await this.actions.queue(ctx.params, { parentCtx: ctx }); - this.actions.processQueue({}, { parentCtx: ctx }); - }, - async queue(ctx) { - const { to, message, data } = ctx.params; + this.actions.processQueue({}, { parentCtx: ctx }); + } + }), - const devices = await ctx.call('push.device.findUsersDevices', { - users: Array.isArray(to) ? to : [to] - }); + queue: defineAction({ + async handler(ctx) { + const { to, message, data } = ctx.params; - for (const device of devices) { - await this.actions.create( - { - deviceId: device.id, - addedAt: new Date().toISOString(), - status: 'queued', - message: JSON.stringify({ - to: device.pushToken, - body: message, - data - }) - }, - { parentCtx: ctx } - ); + const devices = await ctx.call('push.device.findUsersDevices', { + users: Array.isArray(to) ? to : [to] + }); + + for (const device of devices) { + await this.actions.create( + { + deviceId: device.id, + addedAt: new Date().toISOString(), + status: 'queued', + message: JSON.stringify({ + to: device.pushToken, + body: message, + data + }) + }, + { parentCtx: ctx } + ); + } } - }, - async processQueue(ctx) { - const notifications = await this.findByStatus('queued', ctx); - - for (const notification of notifications) { - const message = JSON.parse(notification['semapps:message']); - - if (!Expo.isExpoPushToken(message.to)) { - await this.markAsError(notification['@id'], `${message.to} is not a valid Expo push token`, ctx); - } else { - const receipt = await this.expo.sendPushNotificationsAsync([message]); - - // NOTE: Not all tickets have IDs; for example, tickets for notifications - // that could not be enqueued will have error information and no receipt ID. - if (receipt[0].id) { - await this.actions.update( - { - '@id': notification['@id'], - status: 'processed', - receiptId: receipt[0].id - }, - { parentCtx: ctx } - ); + }), + + processQueue: defineAction({ + async handler(ctx) { + const notifications = await this.findByStatus('queued', ctx); + + for (const notification of notifications) { + const message = JSON.parse(notification['semapps:message']); + + if (!Expo.isExpoPushToken(message.to)) { + await this.markAsError(notification['@id'], `${message.to} is not a valid Expo push token`, ctx); } else { - // NOTE: If a ticket contains an error code in ticket.details.error, you - // must handle it appropriately. The error codes are listed in the Expo - // documentation: - // https://docs.expo.io/versions/latest/guides/push-notifications#response-format - await this.markAsError(notification['@id'], receipt.details.error, ctx); + const receipt = await this.expo.sendPushNotificationsAsync([message]); + + // NOTE: Not all tickets have IDs; for example, tickets for notifications + // that could not be enqueued will have error information and no receipt ID. + if (receipt[0].id) { + await this.actions.update( + { + '@id': notification['@id'], + status: 'processed', + receiptId: receipt[0].id + }, + { parentCtx: ctx } + ); + } else { + // NOTE: If a ticket contains an error code in ticket.details.error, you + // must handle it appropriately. The error codes are listed in the Expo + // documentation: + // https://docs.expo.io/versions/latest/guides/push-notifications#response-format + await this.markAsError(notification['@id'], receipt.details.error, ctx); + } } } } - }, - async checkReceipts(ctx) { - const notifications = await this.findByStatus('processed', ctx); - - if (notifications) { - const receiptIdChunks = this.expo.chunkPushNotificationReceiptIds( - notifications.map(notification => notification['semapps:receiptId']) - ); - - // Like sending notifications, there are different strategies you could use - // to retrieve batches of receipts from the Expo service. - for (const chunk of receiptIdChunks) { - try { - const receipts = await this.expo.getPushNotificationReceiptsAsync(chunk); - - // The receipts specify whether Apple or Google successfully received the - // notification and information about an error, if one occurred. - for (const receiptId in receipts) { - let { status, message, details } = receipts[receiptId]; - const notificationId = notifications.find(notification => notification.receiptId === receiptId)['@id']; - - if (status === 'ok') { - await this.actions.update( - { - '@id': notificationId, - status: 'checked', - receiptStatus: status - }, - { parentCtx: ctx } - ); - } else if (status === 'error') { - // Append the error code to the message for easier debug - if (details && details.error) { - // The error codes are listed in the Expo documentation: - // https://docs.expo.io/versions/latest/guides/push-notifications/#individual-errors - message = `Error code ${details.error}. ${message}`; - } + }), + + checkReceipts: defineAction({ + async handler(ctx) { + const notifications = await this.findByStatus('processed', ctx); + + if (notifications) { + const receiptIdChunks = this.expo.chunkPushNotificationReceiptIds( + notifications.map(notification => notification['semapps:receiptId']) + ); + + // Like sending notifications, there are different strategies you could use + // to retrieve batches of receipts from the Expo service. + for (const chunk of receiptIdChunks) { + try { + const receipts = await this.expo.getPushNotificationReceiptsAsync(chunk); + + // The receipts specify whether Apple or Google successfully received the + // notification and information about an error, if one occurred. + for (const receiptId in receipts) { + let { status, message, details } = receipts[receiptId]; + const notificationId = notifications.find(notification => notification.receiptId === receiptId)['@id']; + + if (status === 'ok') { + await this.actions.update( + { + '@id': notificationId, + status: 'checked', + receiptStatus: status + }, + { parentCtx: ctx } + ); + } else if (status === 'error') { + // Append the error code to the message for easier debug + if (details && details.error) { + // The error codes are listed in the Expo documentation: + // https://docs.expo.io/versions/latest/guides/push-notifications/#individual-errors + message = `Error code ${details.error}. ${message}`; + } - await this.markAsError(notificationId, message, ctx); + await this.markAsError(notificationId, message, ctx); + } } + } catch (error) { + console.error(error); } - } catch (error) { - console.error(error); } } } - } + }) }, methods: { async findByStatus(status, ctx) { @@ -150,6 +162,14 @@ const ExpoPushNotificationService = { }); } } -}; +} satisfies ServiceSchema; + +export default ExpoPushNotificationService; -module.exports = ExpoPushNotificationService; +declare global { + export namespace Moleculer { + export interface AllServices { + [ExpoPushNotificationService.name]: typeof ExpoPushNotificationService; + } + } +} diff --git a/src/middleware/packages/notifications/services/expo-push/service.ts b/src/middleware/packages/notifications/services/expo-push/service.ts index 7a8f283b8..e4c0ca191 100644 --- a/src/middleware/packages/notifications/services/expo-push/service.ts +++ b/src/middleware/packages/notifications/services/expo-push/service.ts @@ -1,9 +1,10 @@ -const path = require('path'); -const ExpoPushDeviceService = require('./device'); -const ExpoPushNotificationService = require('./notification'); +import path from 'path'; +import ExpoPushDeviceService from './device.ts'; +import ExpoPushNotificationService from './notification.ts'; +import { ServiceSchema } from 'moleculer'; const ExpoPushService = { - name: 'expo-push', + name: 'expo-push' as const, settings: { baseUrl: null, newDeviceNotification: { @@ -43,6 +44,14 @@ const ExpoPushService = { } }); } -}; +} satisfies ServiceSchema; -module.exports = ExpoPushService; +export default ExpoPushService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ExpoPushService.name]: typeof ExpoPushService; + } + } +} diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 918cd194f..654e3a7e4 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -1,12 +1,12 @@ -const urlJoin = require('url-join'); -const path = require('path'); -const MailService = require('moleculer-mail'); -const { getSlugFromUri } = require('@semapps/ldp'); - +import urlJoin from 'url-join'; +import path from 'path'; +import MailService from 'moleculer-mail'; +import { getSlugFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineServiceEvent } from 'moleculer'; const delay = t => new Promise(resolve => setTimeout(resolve, t)); const SingleMailNotificationsService = { - name: 'notifications.single-mail', + name: 'notifications.single-mail' as const, mixins: [MailService], settings: { defaultLocale: 'en', @@ -21,44 +21,46 @@ const SingleMailNotificationsService = { data: {} }, events: { - async 'activitypub.inbox.received'(ctx) { - const { activity, recipients } = ctx.params; + 'activitypub.inbox.received': defineServiceEvent({ + async handler(ctx) { + const { activity, recipients } = ctx.params; - if (this.settings.delay) { - await delay(this.settings.delay); - } + if (this.settings.delay) { + await delay(this.settings.delay); + } - for (const recipientUri of recipients) { - const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); + for (const recipientUri of recipients) { + const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); - if (account) { - ctx.meta.webId = recipientUri; - ctx.meta.dataset = this.settings.podProvider ? getSlugFromUri(recipientUri) : undefined; + if (account) { + ctx.meta.webId = recipientUri; + ctx.meta.dataset = this.settings.podProvider ? getSlugFromUri(recipientUri) : undefined; - const locale = account?.preferredLocale || this.settings.defaultLocale; - const notification = await ctx.call('activity-mapping.map', { activity, locale }); + const locale = account?.preferredLocale || this.settings.defaultLocale; + const notification = await ctx.call('activity-mapping.map', { activity, locale }); - if (notification && (await this.filterNotification(notification, activity, recipientUri))) { - if (notification.actionLink) - notification.actionLink = await this.formatLink(notification.actionLink, recipientUri); + if (notification && (await this.filterNotification(notification, activity, recipientUri))) { + if (notification.actionLink) + notification.actionLink = await this.formatLink(notification.actionLink, recipientUri); - await this.queueMail(ctx, notification.key, { - to: account.email, - locale, - data: { - ...notification, - color: this.settings.color, - descriptionWithBr: notification.description - ? notification.description.replace(/\r\n|\r|\n/g, '
') - : undefined - } - }); + await this.queueMail(ctx, notification.key, { + to: account.email, + locale, + data: { + ...notification, + color: this.settings.color, + descriptionWithBr: notification.description + ? notification.description.replace(/\r\n|\r|\n/g, '
') + : undefined + } + }); + } + } else { + this.logger.warn(`No account found for local recipient ${recipientUri}`); } - } else { - this.logger.warn(`No account found for local recipient ${recipientUri}`); } } - } + }) }, methods: { // Optional method called for each notification @@ -93,6 +95,14 @@ const SingleMailNotificationsService = { } } } -}; +} satisfies ServiceSchema; -module.exports = SingleMailNotificationsService; +export default SingleMailNotificationsService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SingleMailNotificationsService.name]: typeof SingleMailNotificationsService; + } + } +} diff --git a/src/middleware/packages/ontologies/actions/findNamespace.ts b/src/middleware/packages/ontologies/actions/findNamespace.ts index 5201c3177..044289c89 100644 --- a/src/middleware/packages/ontologies/actions/findNamespace.ts +++ b/src/middleware/packages/ontologies/actions/findNamespace.ts @@ -1,6 +1,7 @@ -const fetch = require('node-fetch'); +import fetch from 'node-fetch'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { prefix: 'string' @@ -18,4 +19,6 @@ module.exports = { return null; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/findPrefix.ts b/src/middleware/packages/ontologies/actions/findPrefix.ts index 26963d9cf..40170c949 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.ts +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -1,7 +1,8 @@ -const fetch = require('node-fetch'); -const { isURL } = require('../utils'); +import fetch from 'node-fetch'; +import { isURL } from '../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { uri: 'string' @@ -23,4 +24,6 @@ module.exports = { return null; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/get.ts b/src/middleware/packages/ontologies/actions/get.ts index 52eea04fc..ba383df17 100644 --- a/src/middleware/packages/ontologies/actions/get.ts +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { prefix: { type: 'string', optional: true }, @@ -26,4 +28,6 @@ module.exports = { return ontology; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index 4eff4de7f..10c4812ef 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', cache: true, async handler(ctx) { @@ -9,4 +11,6 @@ module.exports = { .map(ontology => [ontology.prefix, ontology.namespace]) ); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index 19187e7a2..7309d61b1 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', cache: true, async handler(ctx) { @@ -8,4 +10,6 @@ module.exports = { .map(ontology => `PREFIX ${ontology.prefix}: <${ontology.namespace}>`) .join('\n'); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index dd49c0d40..f047412a5 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -1,7 +1,11 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', cache: true, handler() { return Object.values(this.ontologies); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 0fc06a8e7..641872042 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -1,8 +1,8 @@ -const { isURL } = require('../utils'); - +import { isURL } from '../utils.ts'; +import { defineAction } from 'moleculer'; const regexPrefix = /^([^:]+):([^:]+)$/gm; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { value: 'string' @@ -24,4 +24,6 @@ module.exports = { return value.replace(`${ontology.prefix}:`, ontology.namespace); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index 26939f8e6..ff62a2a50 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -1,6 +1,7 @@ -const { isURL, arrayOf } = require('../utils'); +import { isURL, arrayOf } from '../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { prefix: 'string', @@ -56,4 +57,6 @@ module.exports = { ctx.emit('ontologies.registered', { prefix, namespace, owl, jsonldContext, preserveContextUri }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/ontologies/index.ts b/src/middleware/packages/ontologies/index.ts index 1030a036d..45c739095 100644 --- a/src/middleware/packages/ontologies/index.ts +++ b/src/middleware/packages/ontologies/index.ts @@ -1,16 +1,9 @@ -const OntologiesService = require('./service'); -const OntologiesRegistryService = require('./sub-services/registry'); -const coreOntologies = require('./ontologies/core'); -const customOntologies = require('./ontologies/custom'); -const solidOntologies = require('./ontologies/solid'); - -module.exports = { - OntologiesService, - OntologiesRegistryService, - coreOntologies: Object.values(coreOntologies), - solidOntologies: Object.values(solidOntologies), - customOntologies: Object.values(customOntologies), - ...coreOntologies, - ...solidOntologies, - ...customOntologies -}; +import OntologiesService from './service.ts'; +import OntologiesRegistryService from './sub-services/registry.ts'; +export * from './ontologies/core.ts'; +export * from './ontologies/solid.ts'; +export * from './ontologies/custom.ts'; +export { OntologiesService, OntologiesRegistryService }; +export const coreOntologies = Object.values(coreOntologies); +export const solidOntologies = Object.values(solidOntologies); +export const customOntologies = Object.values(customOntologies); diff --git a/src/middleware/packages/ontologies/ontologies/core/index.ts b/src/middleware/packages/ontologies/ontologies/core/index.ts index 8528465e3..c0433105a 100644 --- a/src/middleware/packages/ontologies/ontologies/core/index.ts +++ b/src/middleware/packages/ontologies/ontologies/core/index.ts @@ -1,17 +1,16 @@ -module.exports = { - acl: require('./acl.json'), - as: require('./as.json'), - cred: require('./cred.json'), - dc: require('./dc.json'), - did: require('./did.json'), - foaf: require('./foaf.json'), - ldp: require('./ldp.json'), - rdf: require('./rdf.json'), - rdfs: require('./rdfs.json'), - sec: require('./sec.json'), - semapps: require('./semapps.json'), - skos: require('./skos.json'), - vcard: require('./vcard.json'), - void: require('./void.json'), - xsd: require('./xsd.json') -}; +import acl from './acl.json'; +import as from './as.json'; +import cred from './cred.json'; +import dc from './dc.json'; +import did from './did.json'; +import foaf from './foaf.json'; +import ldp from './ldp.json'; +import rdf from './rdf.json'; +import rdfs from './rdfs.json'; +import sec from './sec.json'; +import semapps from './semapps.json'; +import skos from './skos.json'; +import vcard from './vcard.json'; +import void from './void.json'; +import xsd from './xsd.json'; +export { acl, as, cred, dc, did, foaf, ldp, rdf, rdfs, sec, semapps, skos, vcard, void, xsd }; diff --git a/src/middleware/packages/ontologies/ontologies/custom/index.ts b/src/middleware/packages/ontologies/ontologies/custom/index.ts index f4bdc3c42..294738898 100644 --- a/src/middleware/packages/ontologies/ontologies/custom/index.ts +++ b/src/middleware/packages/ontologies/ontologies/custom/index.ts @@ -1,11 +1,10 @@ -module.exports = { - mp: require('./mp.json'), - oasis: require('./oasis.json'), - og: require('./og.json'), - pair: require('./pair.json'), - petr: require('./petr.json'), - schema: require('./schema.json'), - skos: require('./skos.json'), - syreen: require('./syreen.json'), - tutor: require('./tutor.json') -}; +import mp from './mp.json'; +import oasis from './oasis.json'; +import og from './og.json'; +import pair from './pair.json'; +import petr from './petr.json'; +import schema from './schema.json'; +import skos from './skos.json'; +import syreen from './syreen.json'; +import tutor from './tutor.json'; +export { mp, oasis, og, pair, petr, schema, skos, syreen, tutor }; diff --git a/src/middleware/packages/ontologies/ontologies/solid/index.ts b/src/middleware/packages/ontologies/ontologies/solid/index.ts index 5ec4d923c..9105def70 100644 --- a/src/middleware/packages/ontologies/ontologies/solid/index.ts +++ b/src/middleware/packages/ontologies/ontologies/solid/index.ts @@ -1,8 +1,7 @@ -module.exports = { - apods: require('./apods.json'), - interop: require('./interop.json'), - notify: require('./notify.json'), - oidc: require('./oidc.json'), - pim: require('./pim.json'), - solid: require('./solid.json') -}; +import apods from './apods.json'; +import interop from './interop.json'; +import notify from './notify.json'; +import oidc from './oidc.json'; +import pim from './pim.json'; +import solid from './solid.json'; +export { apods, interop, notify, oidc, pim, solid }; diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index 3d88f801b..b7cc693d4 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -1,16 +1,17 @@ -const { TripleStoreAdapter } = require('@semapps/triplestore'); -const OntologiesRegistryService = require('./sub-services/registry'); -const findPrefixAction = require('./actions/findPrefix'); -const findNamespaceAction = require('./actions/findNamespace'); -const getAction = require('./actions/get'); -const getPrefixesAction = require('./actions/getPrefixes'); -const getRdfPrefixesAction = require('./actions/getRdfPrefixes'); -const listAction = require('./actions/list'); -const prefixToUriAction = require('./actions/prefixToUri'); -const registerAction = require('./actions/register'); +import { TripleStoreAdapter } from '@semapps/triplestore'; +import OntologiesRegistryService from './sub-services/registry.ts'; +import findPrefixAction from './actions/findPrefix.ts'; +import findNamespaceAction from './actions/findNamespace.ts'; +import getAction from './actions/get.ts'; +import getPrefixesAction from './actions/getPrefixes.ts'; +import getRdfPrefixesAction from './actions/getRdfPrefixes.ts'; +import listAction from './actions/list.ts'; +import prefixToUriAction from './actions/prefixToUri.ts'; +import registerAction from './actions/register.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ontologies', +const OntologiesSchema = { + name: 'ontologies' as const, settings: { ontologies: [], persistRegistry: false, @@ -51,4 +52,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default OntologiesSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [OntologiesSchema.name]: typeof OntologiesSchema; + } + } +} diff --git a/src/middleware/packages/ontologies/sub-services/registry.ts b/src/middleware/packages/ontologies/sub-services/registry.ts index 9d3c8b7f4..7fdf1e5bd 100644 --- a/src/middleware/packages/ontologies/sub-services/registry.ts +++ b/src/middleware/packages/ontologies/sub-services/registry.ts @@ -1,44 +1,66 @@ -const DbService = require('moleculer-db'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); +import DbService from 'moleculer-db'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'ontologies.registry', +const OntologiesRegistrySchema = { + name: 'ontologies.registry' as const, mixins: [DbService], adapter: new TripleStoreAdapter({ type: 'Ontology', dataset: 'settings' }), settings: { idField: '@id' }, actions: { - async getByPrefix(ctx) { - const { prefix } = ctx.params; - const [ontology] = await this._find(ctx, { query: { prefix } }); - return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; - }, - async getByNamespace(ctx) { - const { namespace } = ctx.params; - const [ontology] = await this._find(ctx, { query: { namespace } }); - return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; - }, - async list(ctx) { - const ontologies = await this._list(ctx, {}); - return ontologies.rows.map(({ prefix, namespace }) => ({ prefix, namespace })); - }, - async updateOrCreate(ctx) { - const { prefix, namespace } = ctx.params; - - const ontology = await this.actions.getByPrefix({ prefix }, { parentCtx: ctx }); - - if (ontology) { - await this._update(ctx, { - '@id': ontology['@id'], - namespace - }); - } else { - await this._create(ctx, { - prefix, - namespace - }); + getByPrefix: defineAction({ + async handler(ctx) { + const { prefix } = ctx.params; + const [ontology] = await this._find(ctx, { query: { prefix } }); + return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; } + }), + + getByNamespace: defineAction({ + async handler(ctx) { + const { namespace } = ctx.params; + const [ontology] = await this._find(ctx, { query: { namespace } }); + return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; + } + }), + + list: defineAction({ + async handler(ctx) { + const ontologies = await this._list(ctx, {}); + return ontologies.rows.map(({ prefix, namespace }) => ({ prefix, namespace })); + } + }), + + updateOrCreate: defineAction({ + async handler(ctx) { + const { prefix, namespace } = ctx.params; + + const ontology = await this.actions.getByPrefix({ prefix }, { parentCtx: ctx }); + + if (ontology) { + await this._update(ctx, { + '@id': ontology['@id'], + namespace + }); + } else { + await this._create(ctx, { + prefix, + namespace + }); + } + } + }) + } +} satisfies ServiceSchema; + +export default OntologiesRegistrySchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [OntologiesRegistrySchema.name]: typeof OntologiesRegistrySchema; } } -}; +} diff --git a/src/middleware/packages/ontologies/utils.ts b/src/middleware/packages/ontologies/utils.ts index 89efbffe7..6baeb130a 100644 --- a/src/middleware/packages/ontologies/utils.ts +++ b/src/middleware/packages/ontologies/utils.ts @@ -12,8 +12,4 @@ const arrayOf = value => { }; const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); - -module.exports = { - arrayOf, - isURL -}; +export { arrayOf, isURL }; diff --git a/src/middleware/packages/solid/index.ts b/src/middleware/packages/solid/index.ts index f8ee053b0..bebd3bee0 100644 --- a/src/middleware/packages/solid/index.ts +++ b/src/middleware/packages/solid/index.ts @@ -1,9 +1,16 @@ -module.exports = { - AuthorizerService: require('./services/authorizer'), - EndpointService: require('./services/endpoint'), - NotificationsProviderService: require('./services/notifications/provider'), - NotificationsListenerService: require('./services/notifications/listener'), - PreferencesFileService: require('./services/preferences-file'), - StorageService: require('./services/storage'), - TypeIndexesService: require('./services/type-index/type-indexes') +import AuthorizerService from './services/authorizer.ts'; +import EndpointService from './services/endpoint.ts'; +import NotificationsProviderService from './services/notifications/provider.ts'; +import NotificationsListenerService from './services/notifications/listener.ts'; +import PreferencesFileService from './services/preferences-file.ts'; +import StorageService from './services/storage.ts'; +import TypeIndexesService from './services/type-index/type-indexes.ts'; +export { + AuthorizerService, + EndpointService, + NotificationsProviderService, + NotificationsListenerService, + PreferencesFileService, + StorageService, + TypeIndexesService }; diff --git a/src/middleware/packages/solid/services/authorizer.ts b/src/middleware/packages/solid/services/authorizer.ts index 00b0d58c7..d3ce7b51b 100644 --- a/src/middleware/packages/solid/services/authorizer.ts +++ b/src/middleware/packages/solid/services/authorizer.ts @@ -1,19 +1,33 @@ -module.exports = { - name: 'solid-authorizer', +import { ServiceSchema, defineAction } from 'moleculer'; + +const SolidAuthorizerSchema = { + name: 'solid-authorizer' as const, dependencies: 'permissions', async started() { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission`, priority: 1 }); }, actions: { - async hasPermission(ctx) { - const { uri, webId } = ctx.params; + hasPermission: defineAction({ + async handler(ctx) { + const { uri, webId } = ctx.params; + + // The owner has access to all resources on their Pod + if (uri.startsWith(`${webId}/`)) { + return true; + } - // The owner has access to all resources on their Pod - if (uri.startsWith(`${webId}/`)) { - return true; + return undefined; } + }) + } +} satisfies ServiceSchema; + +export default SolidAuthorizerSchema; - return undefined; +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidAuthorizerSchema.name]: typeof SolidAuthorizerSchema; } } -}; +} diff --git a/src/middleware/packages/solid/services/endpoint.ts b/src/middleware/packages/solid/services/endpoint.ts index 7b2a58644..8a52e08eb 100644 --- a/src/middleware/packages/solid/services/endpoint.ts +++ b/src/middleware/packages/solid/services/endpoint.ts @@ -1,7 +1,8 @@ -const { SpecialEndpointMixin } = require('@semapps/ldp'); +import { SpecialEndpointMixin } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'solid-endpoint', +const SolidEndpointSchema = { + name: 'solid-endpoint' as const, mixins: [SpecialEndpointMixin], settings: { baseUrl: null, @@ -18,11 +19,23 @@ module.exports = { await this.broker.call('ldp.link-header.register', { actionName: 'solid-endpoint.getLink' }); }, actions: { - getLink() { - return { - uri: this.endpointUrl, - rel: 'http://www.w3.org/ns/solid/terms#storageDescription' - }; + getLink: defineAction({ + handler() { + return { + uri: this.endpointUrl, + rel: 'http://www.w3.org/ns/solid/terms#storageDescription' + }; + } + }) + } +} satisfies ServiceSchema; + +export default SolidEndpointSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidEndpointSchema.name]: typeof SolidEndpointSchema; } } -}; +} diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index 2504d43cc..a89d4c9a6 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -1,10 +1,11 @@ -const urlJoin = require('url-join'); -const { Errors: E } = require('moleculer-web'); -const { SpecialEndpointMixin, ControlledContainerMixin, getDatasetFromUri, arrayOf } = require('@semapps/ldp'); -const { ACTIVITY_TYPES } = require('@semapps/activitypub'); -const { namedNode } = require('@rdfjs/data-model'); -const { v4: uuidV4 } = require('uuid'); -const moment = require('moment'); +import urlJoin from 'url-join'; +import { Errors as E } from 'moleculer-web'; +import { SpecialEndpointMixin, ControlledContainerMixin, getDatasetFromUri, arrayOf } from '@semapps/ldp'; +import { ACTIVITY_TYPES } from '@semapps/activitypub'; +import { namedNode } from '@rdfjs/data-model'; +import { v4 as uuidV4 } from 'uuid'; +import moment from 'moment'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; /** * Solid Notification Channel mixin. @@ -18,7 +19,7 @@ const moment = require('moment'); * * Note: modifying a channel resource using the ldp API will not take effect until a server restart. */ -module.exports = { +const Schema = { // name: 'solid-notifications.provider.', mixins: [ControlledContainerMixin, SpecialEndpointMixin], settings: { @@ -71,122 +72,153 @@ module.exports = { this.loadChannelsFromDb({ removeOldChannels: true }); }, actions: { - // Action called by the SpecialEndpointMixin when POSTing to the endpoint - async endpointPost(ctx) { - // Expect format https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#webhooks - // Correct context: https://github.com/solid/vocab/blob/main/solid-notifications-context.jsonld - const type = ctx.params.type || ctx.params['@type']; - const topic = ctx.params.topic || ctx.params['notify:topic']; - const sendToParam = ctx.params.sendTo || ctx.params['notify:sendTo']; - const { webId } = ctx.meta; + endpointPost: defineAction({ + // Action called by the SpecialEndpointMixin when POSTing to the endpoint + async handler(ctx) { + // Expect format https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#webhooks + // Correct context: https://github.com/solid/vocab/blob/main/solid-notifications-context.jsonld + const type = ctx.params.type || ctx.params['@type']; + const topic = ctx.params.topic || ctx.params['notify:topic']; + const sendToParam = ctx.params.sendTo || ctx.params['notify:sendTo']; + const { webId } = ctx.meta; - // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... - if (!this.settings.acceptedTypes.includes(type) && this.settings.channelType !== type) - throw new Error(`Only one of ${this.settings.acceptedTypes} is accepted on this endpoint`); + // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... + if (!this.settings.acceptedTypes.includes(type) && this.settings.channelType !== type) + throw new Error(`Only one of ${this.settings.acceptedTypes} is accepted on this endpoint`); - // Ensure topic exist (LDP resource, container or collection) - const exists = await ctx.call('ldp.resource.exist', { - resourceUri: topic, - webId: 'system' - }); - if (!exists) throw new E.BadRequestError('Cannot watch non-existing resource'); + // Ensure topic exist (LDP resource, container or collection) + const exists = await ctx.call('ldp.resource.exist', { + resourceUri: topic, + webId: 'system' + }); + if (!exists) throw new E.BadRequestError('Cannot watch non-existing resource'); - // Ensure topic can be watched by the authenticated agent - const rights = await ctx.call('webacl.resource.hasRights', { - resourceUri: topic, - rights: { read: true }, - webId - }); - // TODO: Should a client without read rights know about the existence of that resource? - if (!rights.read) throw new E.ForbiddenError('You need acl:Read rights on the resource'); + // Ensure topic can be watched by the authenticated agent + const rights = await ctx.call('webacl.resource.hasRights', { + resourceUri: topic, + rights: { read: true }, + webId + }); + // TODO: Should a client without read rights know about the existence of that resource? + if (!rights.read) throw new E.ForbiddenError('You need acl:Read rights on the resource'); - // Find container URI from topic (must be stored on same Pod) - const topicWebId = urlJoin(this.settings.baseUrl, getDatasetFromUri(topic)); - const channelContainerUri = await this.actions.getContainerUri({ webId: topicWebId }, { parentCtx: ctx }); + // Find container URI from topic (must be stored on same Pod) + const topicWebId = urlJoin(this.settings.baseUrl, getDatasetFromUri(topic)); + const channelContainerUri = await this.actions.getContainerUri({ webId: topicWebId }, { parentCtx: ctx }); - // Create receiveFrom URI if needed (e.g. for web sockets). - const receiveFrom = - (this.settings.sendOrReceive === 'receive' && (await this.createReceiveFromUri(topic, webId))) || undefined; - const sendTo = (this.settings.sendOrReceive === 'send' && sendToParam) || undefined; + // Create receiveFrom URI if needed (e.g. for web sockets). + const receiveFrom = + (this.settings.sendOrReceive === 'receive' && (await this.createReceiveFromUri(topic, webId))) || undefined; + const sendTo = (this.settings.sendOrReceive === 'send' && sendToParam) || undefined; - // Post channel on Pod - const channelUri = await this.actions.post( - { - containerUri: channelContainerUri, - resource: { - type: this.settings.typePredicate, - 'notify:topic': topic, - 'notify:sendTo': sendTo, - 'notify:receiveFrom': receiveFrom + // Post channel on Pod + const channelUri = await this.actions.post( + { + containerUri: channelContainerUri, + resource: { + type: this.settings.typePredicate, + 'notify:topic': topic, + 'notify:sendTo': sendTo, + 'notify:receiveFrom': receiveFrom + }, + webId: 'system' }, - webId: 'system' - }, - { parentCtx: ctx } - ); + { parentCtx: ctx } + ); - // Keep track of channel internally. - const channel = { - id: channelUri, - topic, - sendTo, - receiveFrom, - webId: topicWebId - }; - this.channels.push(channel); - this.onChannelCreated(channel); + // Keep track of channel internally. + const channel = { + id: channelUri, + topic, + sendTo, + receiveFrom, + webId: topicWebId + }; + this.channels.push(channel); + this.onChannelCreated(channel); - ctx.meta.$responseType = 'application/ld+json'; - return this.actions.get( - { - resourceUri: channelUri, - webId: 'system' - }, - { parentCtx: ctx } - ); - }, - getCache() { - return this.channels; - }, - resetCache() { - this.channels = []; - } + ctx.meta.$responseType = 'application/ld+json'; + return this.actions.get( + { + resourceUri: channelUri, + webId: 'system' + }, + { parentCtx: ctx } + ); + } + }), + + getCache: defineAction({ + handler() { + return this.channels; + } + }), + + resetCache: defineAction({ + handler() { + this.channels = []; + } + }) }, events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); - }, - async 'ldp.resource.patched'(ctx) { - const { resourceUri } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); - }, - async 'ldp.resource.deleted'(ctx) { - const { resourceUri } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); - }, - async 'ldp.container.attached'(ctx) { - const { containerUri, resourceUri } = ctx.params; - this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); - }, - async 'ldp.container.detached'(ctx) { - const { containerUri, resourceUri } = ctx.params; - this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); - }, - async 'activitypub.collection.added'(ctx) { - const { collectionUri, itemUri, item } = ctx.params; - // Mastodon sometimes send unfetchable activities (like `Accept` activities) - // In this case, we receive the activity as `item` and `itemUri` is undefined - // We will send a notification to the listener with the whole activity - this.onContainerOrCollectionEvent(collectionUri, itemUri || item, ACTIVITY_TYPES.ADD); - }, - async 'activitypub.collection.removed'(ctx) { - const { collectionUri, itemUri } = ctx.params; - this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); - } + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData } = ctx.params; + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); + } + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData } = ctx.params; + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); + } + }), + + 'ldp.resource.patched': defineServiceEvent({ + async handler(ctx) { + const { resourceUri } = ctx.params; + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); + } + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + const { resourceUri } = ctx.params; + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); + } + }), + + 'ldp.container.attached': defineServiceEvent({ + async handler(ctx) { + const { containerUri, resourceUri } = ctx.params; + this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); + } + }), + + 'ldp.container.detached': defineServiceEvent({ + async handler(ctx) { + const { containerUri, resourceUri } = ctx.params; + this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); + } + }), + + 'activitypub.collection.added': defineServiceEvent({ + async handler(ctx) { + const { collectionUri, itemUri, item } = ctx.params; + // Mastodon sometimes send unfetchable activities (like `Accept` activities) + // In this case, we receive the activity as `item` and `itemUri` is undefined + // We will send a notification to the listener with the whole activity + this.onContainerOrCollectionEvent(collectionUri, itemUri || item, ACTIVITY_TYPES.ADD); + } + }), + + 'activitypub.collection.removed': defineServiceEvent({ + async handler(ctx) { + const { collectionUri, itemUri } = ctx.params; + this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); + } + }) }, methods: { async getModified(resourceUri) { @@ -306,4 +338,6 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default Schema; diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index 6c46023a1..ec7c4a046 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,5 +1,6 @@ -const fetch = require('node-fetch'); -const NotificationChannelMixin = require('./notification-channel.mixin'); +import fetch from 'node-fetch'; +import NotificationChannelMixin from './notification-channel.mixin.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const queueOptions = process.env.NODE_ENV === 'test' @@ -15,7 +16,7 @@ const queueOptions = /** @type {import('moleculer').ServiceSchema} */ const WebhookChannel2023Service = { - name: 'solid-notifications.provider.webhook', + name: 'solid-notifications.provider.webhook' as const, mixins: [NotificationChannelMixin], settings: { channelType: 'WebhookChannel2023', @@ -34,18 +35,23 @@ const WebhookChannel2023Service = { if (!this.createJob) throw new Error('The QueueMixin must be configured with this service'); }, actions: { - async getAppChannels(ctx) { - const { appUri, webId } = ctx.params; - const { origin: appOrigin } = new URL(appUri); - return this.channels.filter(c => c.webId === webId && c.sendTo.startsWith(appOrigin)); - }, - async deleteAppChannels(ctx) { - const { appUri, webId } = ctx.params; - const appChannels = await this.actions.getAppChannels({ appUri, webId }, { parentCtx: ctx }); - for (const appChannel of appChannels) { - await this.actions.delete({ resourceUri: appChannel.id, webId: appChannel.webId }); + getAppChannels: defineAction({ + async handler(ctx) { + const { appUri, webId } = ctx.params; + const { origin: appOrigin } = new URL(appUri); + return this.channels.filter(c => c.webId === webId && c.sendTo.startsWith(appOrigin)); } - } + }), + + deleteAppChannels: defineAction({ + async handler(ctx) { + const { appUri, webId } = ctx.params; + const appChannels = await this.actions.getAppChannels({ appUri, webId }, { parentCtx: ctx }); + for (const appChannel of appChannels) { + await this.actions.delete({ resourceUri: appChannel.id, webId: appChannel.webId }); + } + } + }) }, methods: { onEvent(channel, activity) { @@ -92,6 +98,14 @@ const WebhookChannel2023Service = { } } } -}; +} satisfies ServiceSchema; -module.exports = WebhookChannel2023Service; +export default WebhookChannel2023Service; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebhookChannel2023Service.name]: typeof WebhookChannel2023Service; + } + } +} diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index 15467e08d..b9cc23199 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -1,10 +1,11 @@ -const urlJoin = require('url-join'); -const { v4: uuidV4 } = require('uuid'); -const NotificationChannelMixin = require('./notification-channel.mixin'); +import urlJoin from 'url-join'; +import { v4 as uuidV4 } from 'uuid'; +import NotificationChannelMixin from './notification-channel.mixin.ts'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const WebSocketChannel2023Service = { - name: 'solid-notifications.provider.websocket', + name: 'solid-notifications.provider.websocket' as const, mixins: [NotificationChannelMixin], settings: { channelType: 'WebSocketChannel2023', @@ -82,6 +83,14 @@ const WebSocketChannel2023Service = { ); } } -}; +} satisfies ServiceSchema; -module.exports = WebSocketChannel2023Service; +export default WebSocketChannel2023Service; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebSocketChannel2023Service.name]: typeof WebSocketChannel2023Service; + } + } +} diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 1673dea8c..3bcb6b8e0 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -1,16 +1,17 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const LinkHeader = require('http-link-header'); -const { v4: uuidv4 } = require('uuid'); -const DbService = require('moleculer-db'); +import path from 'path'; +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import LinkHeader from 'http-link-header'; +import { v4 as uuidv4 } from 'uuid'; +import DbService from 'moleculer-db'; const { MoleculerError } = require('moleculer').Errors; -const { parseHeader, parseRawBody, negotiateContentType, parseJson } = require('@semapps/middlewares'); -const { notify } = require('@semapps/ontologies'); -const { TripleStoreAdapter } = require('@semapps/triplestore'); +import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; +import { notify } from '@semapps/ontologies'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'solid-notifications.listener', +const SolidNotificationsListenerSchema = { + name: 'solid-notifications.listener' as const, mixins: [DbService], adapter: new TripleStoreAdapter({ type: 'WebhookChannelListener', dataset: 'settings' }), settings: { @@ -49,122 +50,130 @@ module.exports = { }); }, actions: { - async register(ctx) { - const { resourceUri, actionName } = ctx.params; - - const appActor = await ctx.call('app.get'); - - // Check if a listener already exist - const existingListener = this.listeners.find( - listener => listener.resourceUri === resourceUri && listener.actionName === actionName - ); - - if (existingListener) { - try { - // Check if channel still exist. If not, it will throw an error. - await ctx.call('ldp.remote.get', { - resourceUri: existingListener.channelUri, - webId: appActor.id, - strategy: 'networkOnly' - }); - - // If the channel still exist, registration is not needed - return existingListener; - } catch (e) { - if (e.code === 404) { - this.logger.warn( - `Channel ${existingListener.channelUri} doesn't exist anymore. Registering a new channel...` - ); - this.actions.remove({ id: existingListener['@id'] }, { parentCtx: ctx }); - this.listeners = this.listeners.filter(l => l['@id'] !== existingListener['@id']); - } else { - throw e; + register: defineAction({ + async handler(ctx) { + const { resourceUri, actionName } = ctx.params; + + const appActor = await ctx.call('app.get'); + + // Check if a listener already exist + const existingListener = this.listeners.find( + listener => listener.resourceUri === resourceUri && listener.actionName === actionName + ); + + if (existingListener) { + try { + // Check if channel still exist. If not, it will throw an error. + await ctx.call('ldp.remote.get', { + resourceUri: existingListener.channelUri, + webId: appActor.id, + strategy: 'networkOnly' + }); + + // If the channel still exist, registration is not needed + return existingListener; + } catch (e) { + if (e.code === 404) { + this.logger.warn( + `Channel ${existingListener.channelUri} doesn't exist anymore. Registering a new channel...` + ); + this.actions.remove({ id: existingListener['@id'] }, { parentCtx: ctx }); + this.listeners = this.listeners.filter(l => l['@id'] !== existingListener['@id']); + } else { + throw e; + } } } - } - - // Discover webhook endpoint - const storageDescription = await this.getSolidEndpoint(resourceUri); - if (!storageDescription) throw new Error(`No storageDescription found for resourceUri ${resourceUri}`); - - // Fetch all subscriptions URLs - const results = await Promise.all( - storageDescription['notify:subscription'].map(channelSubscriptionUrl => - fetch(channelSubscriptionUrl, { - headers: { - Accept: 'application/ld+json' - } - }).then(res => res.ok && res.json()) - ) - ); - // Find webhook channel - const webhookSubscription = results.find( - subscription => subscription && subscription['notify:channelType'] === 'notify:WebhookChannel2023' - ); - - if (!webhookSubscription) throw new Error(`No webhook subscription URL found for resourceUri ${resourceUri}`); + // Discover webhook endpoint + const storageDescription = await this.getSolidEndpoint(resourceUri); + if (!storageDescription) throw new Error(`No storageDescription found for resourceUri ${resourceUri}`); + + // Fetch all subscriptions URLs + const results = await Promise.all( + storageDescription['notify:subscription'].map(channelSubscriptionUrl => + fetch(channelSubscriptionUrl, { + headers: { + Accept: 'application/ld+json' + } + }).then(res => res.ok && res.json()) + ) + ); + + // Find webhook channel + const webhookSubscription = results.find( + subscription => subscription && subscription['notify:channelType'] === 'notify:WebhookChannel2023' + ); + + if (!webhookSubscription) throw new Error(`No webhook subscription URL found for resourceUri ${resourceUri}`); + + // Ensure webhookSubscription['notify:feature'] are correct + + // Generate a webhook path + const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuidv4()); + + // Persist listener on the settings dataset + // We must do it before creating the webhook channel, in case the webhook is called immediately + let listener = await this._create(ctx, { + webhookUrl, + resourceUri, + actionName + }); + + this.listeners.push(listener); + + // Create a webhook channel (authenticate with HTTP signature) + const { body } = await ctx.call('signature.proxy.query', { + url: webhookSubscription.id || webhookSubscription['@id'], + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: JSON.stringify({ + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebhookChannel2023', + 'notify:topic': resourceUri, + 'notify:sendTo': webhookUrl + }), + actorUri: appActor.id + }); + + // Keep track of the channel URI, to be able to check if it still exists + listener.channelUri = body.id; + await this._update(ctx, listener); + const listenerIndex = this.listeners.findIndex(l => l['@id'] === listener['@id']); + this.listeners[listenerIndex] = listener; + + return listener; + } + }), - // Ensure webhookSubscription['notify:feature'] are correct + transfer: defineAction({ + async handler(ctx) { + const { uuid, ...data } = ctx.params; + const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuid); - // Generate a webhook path - const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuidv4()); + const listener = this.listeners.find(l => l.webhookUrl === webhookUrl); - // Persist listener on the settings dataset - // We must do it before creating the webhook channel, in case the webhook is called immediately - let listener = await this._create(ctx, { - webhookUrl, - resourceUri, - actionName - }); - - this.listeners.push(listener); - - // Create a webhook channel (authenticate with HTTP signature) - const { body } = await ctx.call('signature.proxy.query', { - url: webhookSubscription.id || webhookSubscription['@id'], - method: 'POST', - headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), - body: JSON.stringify({ - '@context': { - notify: 'http://www.w3.org/ns/solid/notifications#' - }, - '@type': 'notify:WebhookChannel2023', - 'notify:topic': resourceUri, - 'notify:sendTo': webhookUrl - }), - actorUri: appActor.id - }); - - // Keep track of the channel URI, to be able to check if it still exists - listener.channelUri = body.id; - await this._update(ctx, listener); - const listenerIndex = this.listeners.findIndex(l => l['@id'] === listener['@id']); - this.listeners[listenerIndex] = listener; - - return listener; - }, - async transfer(ctx) { - const { uuid, ...data } = ctx.params; - const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuid); - - const listener = this.listeners.find(l => l.webhookUrl === webhookUrl); - - if (listener) { - try { - // Do no wait for the action to finish, so that the result can be immediately returned - ctx.call(listener.actionName, data); - } catch (e) { - // Ignore errors that the actions may generate (otherwise 404 errors will be considered as non-existing webhooks) + if (listener) { + try { + // Do no wait for the action to finish, so that the result can be immediately returned + ctx.call(listener.actionName, data); + } catch (e) { + // Ignore errors that the actions may generate (otherwise 404 errors will be considered as non-existing webhooks) + } + ctx.meta.$statusCode = 200; + } else { + throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); } - ctx.meta.$statusCode = 200; - } else { - throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); } - }, - getCache() { - return this.listeners; - } + }), + + getCache: defineAction({ + handler() { + return this.listeners; + } + }) }, methods: { async getSolidEndpoint(resourceUri) { @@ -197,4 +206,14 @@ module.exports = { return false; } } -}; +} satisfies ServiceSchema; + +export default SolidNotificationsListenerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidNotificationsListenerSchema.name]: typeof SolidNotificationsListenerSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/notifications/provider.ts b/src/middleware/packages/solid/services/notifications/provider.ts index 2510c5d6a..6b181d6e8 100644 --- a/src/middleware/packages/solid/services/notifications/provider.ts +++ b/src/middleware/packages/solid/services/notifications/provider.ts @@ -1,10 +1,11 @@ -const QueueMixin = require('moleculer-bull'); -const { notify } = require('@semapps/ontologies'); -const WebhookChannelService = require('./channels/webhook-channel'); -const WebSocketChannelService = require('./channels/websocket-channel'); +import QueueMixin from 'moleculer-bull'; +import { notify } from '@semapps/ontologies'; +import WebhookChannelService from './channels/webhook-channel.ts'; +import WebSocketChannelService from './channels/websocket-channel.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { - name: 'solid-notifications.provider', +const SolidNotificationsProviderSchema = { + name: 'solid-notifications.provider' as const, settings: { baseUrl: null, settingsDataset: null, @@ -24,7 +25,7 @@ module.exports = { if (channels.webhook) { this.broker.createService({ - name: 'solid-notifications.provider.webhook', + name: 'solid-notifications.provider.webhook' as const, mixins: [WebhookChannelService, QueueMixin(queueServiceUrl)], settings: { baseUrl, settingsDataset } }); @@ -32,7 +33,7 @@ module.exports = { if (channels.websocket) { this.broker.createService({ - name: 'solid-notifications.provider.websocket', + name: 'solid-notifications.provider.websocket' as const, mixins: [WebSocketChannelService], settings: { baseUrl, settingsDataset } }); @@ -41,4 +42,14 @@ module.exports = { async started() { await this.broker.call('ontologies.register', notify); } -}; +} satisfies ServiceSchema; + +export default SolidNotificationsProviderSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidNotificationsProviderSchema.name]: typeof SolidNotificationsProviderSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index 91fa106f3..3370bb06d 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -1,9 +1,10 @@ -const { SingleResourceContainerMixin } = require('@semapps/ldp'); -const { pim } = require('@semapps/ontologies'); -const { namedNode, triple } = require('@rdfjs/data-model'); +import { SingleResourceContainerMixin } from '@semapps/ldp'; +import { pim } from '@semapps/ontologies'; +import { namedNode, triple } from '@rdfjs/data-model'; +import { ServiceSchema } from 'moleculer'; -module.exports = { - name: 'solid-preferences-file', +const SolidPreferencesFileSchema = { + name: 'solid-preferences-file' as const, mixins: [SingleResourceContainerMixin], settings: { acceptedTypes: ['pim:ConfigurationFile'], @@ -35,4 +36,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default SolidPreferencesFileSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidPreferencesFileSchema.name]: typeof SolidPreferencesFileSchema; + } + } +} diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 80f410f5c..080f09fd5 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,10 +1,11 @@ -const urlJoin = require('url-join'); -const { triple, namedNode } = require('@rdfjs/data-model'); -const { pim } = require('@semapps/ontologies'); +import urlJoin from 'url-join'; +import { triple, namedNode } from '@rdfjs/data-model'; +import { pim } from '@semapps/ontologies'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ -module.exports = { - name: 'solid-storage', +const SolidStorageSchema = { + name: 'solid-storage' as const, settings: { baseUrl: null, pathName: 'data' @@ -25,65 +26,82 @@ module.exports = { }); }, actions: { - async create(ctx) { - const { username } = ctx.params; - if (!username) throw new Error('Cannot create Solid storage without a username'); + create: defineAction({ + async handler(ctx) { + const { username } = ctx.params; + if (!username) throw new Error('Cannot create Solid storage without a username'); - await ctx.call('triplestore.dataset.create', { - dataset: username, - secure: false // TODO Remove when we switch to Fuseki 5 - }); + await ctx.call('triplestore.dataset.create', { + dataset: username, + secure: false // TODO Remove when we switch to Fuseki 5 + }); - ctx.meta.dataset = username; + ctx.meta.dataset = username; - // Create the storage root container so that the LdpRegistryService can create the default containers - const storageRootUri = urlJoin(this.settings.baseUrl, username, this.settings.pathName); - await ctx.call('ldp.container.create', { containerUri: storageRootUri, webId: 'system' }); + // Create the storage root container so that the LdpRegistryService can create the default containers + const storageRootUri = urlJoin(this.settings.baseUrl, username, this.settings.pathName); + await ctx.call('ldp.container.create', { containerUri: storageRootUri, webId: 'system' }); - return storageRootUri; - }, - async getUrl(ctx) { - const { webId } = ctx.params; - // This is faster, but later we should use the 'pim:storage' property of the webId - return urlJoin(webId, this.settings.pathName); - } + return storageRootUri; + } + }), + + getUrl: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + // This is faster, but later we should use the 'pim:storage' property of the webId + return urlJoin(webId, this.settings.pathName); + } + }) }, events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; - const storageUrl = await this.actions.getUrl({ webId }, { parentCtx: ctx }); + const storageUrl = await this.actions.getUrl({ webId }, { parentCtx: ctx }); - // Attach the storage URL to the webId - await ctx.call('ldp.resource.patch', { - resourceUri: webId, - triplesToAdd: [ - triple(namedNode(webId), namedNode('http://www.w3.org/ns/pim/space#storage'), namedNode(storageUrl)) - ], - webId: 'system' - }); + // Attach the storage URL to the webId + await ctx.call('ldp.resource.patch', { + resourceUri: webId, + triplesToAdd: [ + triple(namedNode(webId), namedNode('http://www.w3.org/ns/pim/space#storage'), namedNode(storageUrl)) + ], + webId: 'system' + }); - // Give full rights to user on his storage - await ctx.call('webacl.resource.addRights', { - resourceUri: storageUrl, - additionalRights: { - user: { - uri: webId, - read: true, - write: true, - control: true - }, - default: { + // Give full rights to user on his storage + await ctx.call('webacl.resource.addRights', { + resourceUri: storageUrl, + additionalRights: { user: { uri: webId, read: true, write: true, control: true + }, + default: { + user: { + uri: webId, + read: true, + write: true, + control: true + } } - } - }, - webId: 'system' - }); + }, + webId: 'system' + }); + } + }) + } +} satisfies ServiceSchema; + +export default SolidStorageSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SolidStorageSchema.name]: typeof SolidStorageSchema; } } -}; +} diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 661e06b86..665ec986c 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -1,11 +1,12 @@ -const { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } = require('@semapps/ldp'); -const { solid, skos, apods } = require('@semapps/ontologies'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const TypeRegistrationsService = require('./type-registrations'); - -module.exports = { - name: 'type-indexes', +import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@semapps/ldp'; +import { solid, skos, apods } from '@semapps/ontologies'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { namedNode, triple } from '@rdfjs/data-model'; +import TypeRegistrationsService from './type-registrations.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +const TypeIndexesSchema = { + name: 'type-indexes' as const, mixins: [ControlledContainerMixin, DereferenceMixin], settings: { acceptedTypes: ['solid:TypeIndex'], @@ -29,139 +30,158 @@ module.exports = { await this.broker.call('ontologies.register', apods); }, actions: { - async createPublicIndex(ctx) { - const { webId } = ctx.params; - - const indexUri = await this.actions.post( - { - resource: { - type: ['solid:TypeIndex', 'solid:ListedDocument'] + createPublicIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + const indexUri = await this.actions.post( + { + resource: { + type: ['solid:TypeIndex', 'solid:ListedDocument'] + }, + webId + }, + { parentCtx: ctx } + ); + + // Give anonymous read permission + await ctx.call('webacl.resource.addRights', { + resourceUri: indexUri, + additionalRights: { + anon: { + read: true + } }, + webId: 'system' + }); + + await ctx.call('ldp.resource.patch', { + resourceUri: webId, + triplesToAdd: [ + triple(namedNode(webId), namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), namedNode(indexUri)) + ], webId - }, - { parentCtx: ctx } - ); - - // Give anonymous read permission - await ctx.call('webacl.resource.addRights', { - resourceUri: indexUri, - additionalRights: { - anon: { - read: true - } - }, - webId: 'system' - }); - - await ctx.call('ldp.resource.patch', { - resourceUri: webId, - triplesToAdd: [ - triple(namedNode(webId), namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), namedNode(indexUri)) - ], - webId - }); - }, - async createPrivateIndex(ctx) { - const { webId } = ctx.params; - - if (!(await this.preferencesFileAvailable())) - throw new Error(`The private type index requires the SolidPreferencesFile service`); - - const preferencesUri = await ctx.call('solid-preferences-file.getResourceUri', { webId }); - if (!preferencesUri) throw new Error(`No preferences file found for user ${webId}`); - - const privateIndex = await this.actions.getPrivateIndex({ webId }); - if (privateIndex) throw new Error(`A private index already exist for user ${webId}`); - - const indexUri = await this.actions.post( - { - resource: { - type: ['solid:TypeIndex', 'solid:UnlistedDocument'] + }); + } + }), + + createPrivateIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + if (!(await this.preferencesFileAvailable())) + throw new Error(`The private type index requires the SolidPreferencesFile service`); + + const preferencesUri = await ctx.call('solid-preferences-file.getResourceUri', { webId }); + if (!preferencesUri) throw new Error(`No preferences file found for user ${webId}`); + + const privateIndex = await this.actions.getPrivateIndex({ webId }); + if (privateIndex) throw new Error(`A private index already exist for user ${webId}`); + + const indexUri = await this.actions.post( + { + resource: { + type: ['solid:TypeIndex', 'solid:UnlistedDocument'] + }, + contentType: MIME_TYPES.JSON, + webId }, - contentType: MIME_TYPES.JSON, + { parentCtx: ctx } + ); + + await ctx.call('solid-preferences-file.patch', { + resourceUri: preferencesUri, + triplesToAdd: [ + triple( + namedNode(preferencesUri), + namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), + namedNode(indexUri) + ) + ], + webId + }); + } + }), + + getPublicIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + const user = await ctx.call('ldp.resource.get', { + resourceUri: webId, webId - }, - { parentCtx: ctx } - ); - - await ctx.call('solid-preferences-file.patch', { - resourceUri: preferencesUri, - triplesToAdd: [ - triple( - namedNode(preferencesUri), - namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), - namedNode(indexUri) - ) - ], - webId - }); - }, - async getPublicIndex(ctx) { - const { webId } = ctx.params; - - const user = await ctx.call('ldp.resource.get', { - resourceUri: webId, - webId - }); - - return user['solid:publicTypeIndex']; - }, - async getPrivateIndex(ctx) { - const { webId } = ctx.params; - - if (!(await this.preferencesFileAvailable())) - throw new Error(`The private type index requires the SolidPreferencesFile service`); - - const preferencesFileUri = await ctx.call('solid-preferences-file.get', { webId }); - - return preferencesFileUri?.['solid:privateTypeIndex']; - }, - async waitForIndexCreation(ctx) { - const { type, webId } = ctx.params; - let indexUri; - let attempts = 0; - - do { - attempts += 1; - if (attempts > 1) await delay(1000); - try { - indexUri = - type === 'private' - ? await this.actions.getPrivateIndex({ webId }) - : await this.actions.getPublicIndex({ webId }); - } catch (e) { - // Ignore 404 errors - if (e.code !== 404) throw e; - } - } while (!indexUri || attempts > 30); - - if (!indexUri) - throw new Error(`${type === 'private' ? 'Private' : 'Public'} TypeIndex still has not been created after 30s`); - - return indexUri; - }, - /** - * Wait until all type registrations have been created for the newly-created user - */ - async awaitCreateComplete(ctx) { - const { webId } = ctx.params; - - const containers = await ctx.call('ldp.registry.list'); - const numContainersWithTypeIndex = Object.values(containers).filter(container => container.typeIndex).length; - - let numTypeRegistrations; - let attempts = 0; - do { - attempts += 1; - if (attempts > 1) await delay(1000); - const typeRegistrationsContainer = await ctx.call('type-registrations.list', { webId }); - numTypeRegistrations = arrayOf(typeRegistrationsContainer['ldp:contains']).length; - if (attempts > 30) + }); + + return user['solid:publicTypeIndex']; + } + }), + + getPrivateIndex: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + + if (!(await this.preferencesFileAvailable())) + throw new Error(`The private type index requires the SolidPreferencesFile service`); + + const preferencesFileUri = await ctx.call('solid-preferences-file.get', { webId }); + + return preferencesFileUri?.['solid:privateTypeIndex']; + } + }), + + waitForIndexCreation: defineAction({ + async handler(ctx) { + const { type, webId } = ctx.params; + let indexUri; + let attempts = 0; + + do { + attempts += 1; + if (attempts > 1) await delay(1000); + try { + indexUri = + type === 'private' + ? await this.actions.getPrivateIndex({ webId }) + : await this.actions.getPublicIndex({ webId }); + } catch (e) { + // Ignore 404 errors + if (e.code !== 404) throw e; + } + } while (!indexUri || attempts > 30); + + if (!indexUri) throw new Error( - `After 30s, user ${webId} has only ${numTypeRegistrations} types registrations. Expecting ${numContainersWithTypeIndex}` + `${type === 'private' ? 'Private' : 'Public'} TypeIndex still has not been created after 30s` ); - } while (numTypeRegistrations < numContainersWithTypeIndex); - } + + return indexUri; + } + }), + + awaitCreateComplete: defineAction({ + /** + * Wait until all type registrations have been created for the newly-created user + */ + async handler(ctx) { + const { webId } = ctx.params; + + const containers = await ctx.call('ldp.registry.list'); + const numContainersWithTypeIndex = Object.values(containers).filter(container => container.typeIndex).length; + + let numTypeRegistrations; + let attempts = 0; + do { + attempts += 1; + if (attempts > 1) await delay(1000); + const typeRegistrationsContainer = await ctx.call('type-registrations.list', { webId }); + numTypeRegistrations = arrayOf(typeRegistrationsContainer['ldp:contains']).length; + if (attempts > 30) + throw new Error( + `After 30s, user ${webId} has only ${numTypeRegistrations} types registrations. Expecting ${numContainersWithTypeIndex}` + ); + } while (numTypeRegistrations < numContainersWithTypeIndex); + } + }) }, methods: { async preferencesFileAvailable() { @@ -170,19 +190,31 @@ module.exports = { } }, events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - - // Wait until the /solid/type-index container has been created for the user - const indexesContainerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); - await this.actions.waitForContainerCreation({ containerUri: indexesContainerUri }, { parentCtx: ctx }); + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; + + // Wait until the /solid/type-index container has been created for the user + const indexesContainerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); + await this.actions.waitForContainerCreation({ containerUri: indexesContainerUri }, { parentCtx: ctx }); + + // Wait until the /solid/type-registration container has been created for the user + const registrationsContainerUri = await ctx.call('type-registrations.getContainerUri', { webId }); + await ctx.call('type-registrations.waitForContainerCreation', { containerUri: registrationsContainerUri }); + + await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); + await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); + } + }) + } +} satisfies ServiceSchema; - // Wait until the /solid/type-registration container has been created for the user - const registrationsContainerUri = await ctx.call('type-registrations.getContainerUri', { webId }); - await ctx.call('type-registrations.waitForContainerCreation', { containerUri: registrationsContainerUri }); +export default TypeIndexesSchema; - await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); - await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); +declare global { + export namespace Moleculer { + export interface AllServices { + [TypeIndexesSchema.name]: typeof TypeIndexesSchema; } } -}; +} diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index a634f4423..24d0c9d81 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -1,9 +1,10 @@ -const urlJoin = require('url-join'); -const { namedNode, triple } = require('@rdfjs/data-model'); -const { ControlledContainerMixin, arrayOf } = require('@semapps/ldp'); +import urlJoin from 'url-join'; +import { namedNode, triple } from '@rdfjs/data-model'; +import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; -module.exports = { - name: 'type-registrations', +const TypeRegistrationsSchema = { + name: 'type-registrations' as const, mixins: [ControlledContainerMixin], settings: { acceptedTypes: ['solid:TypeRegistration'], @@ -13,7 +14,7 @@ module.exports = { activateTombstones: false }, actions: { - register: { + register: defineAction({ visibility: 'public', params: { types: { type: 'array' }, @@ -108,13 +109,14 @@ module.exports = { return registrationUri; } } - }, + }), + /** * Bind an application to a certain type of resources * If no other app is bound with this type yet, it will be marked as the default app * Otherwise, the app will be added to the list of available apps, that the user can switch to */ - bindApp: { + bindApp: defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -135,11 +137,12 @@ module.exports = { await ctx.call('type-registrations.put', { resource: registration, webId }); } - }, + }), + /** * Unbind an application from a certain type of resource (Mirror of the above action.) */ - unbindApp: { + unbindApp: defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -168,8 +171,9 @@ module.exports = { webId }); } - }, - getByType: { + }), + + getByType: defineAction({ visibility: 'public', params: { type: { type: 'string' }, @@ -191,8 +195,9 @@ module.exports = { // There can be several TypeRegistration per type return arrayOf(filteredContainer['ldp:contains']); } - }, - getByContainerUri: { + }), + + getByContainerUri: defineAction({ visibility: 'public', params: { containerUri: { type: 'string' }, @@ -212,8 +217,9 @@ module.exports = { // There should be only one TypeRegistration per container return arrayOf(filteredContainer['ldp:contains'])[0]; } - }, - findContainersUris: { + }), + + findContainersUris: defineAction({ visibility: 'public', params: { type: { type: 'string' }, @@ -226,12 +232,13 @@ module.exports = { return registrations.map(r => r['solid:instanceContainer']); } - }, + }), + /** * Reset the public and private registries of the given user * Based on the information found on the LDP registry */ - resetFromRegistry: { + resetFromRegistry: defineAction({ visibility: 'public', params: { webId: { type: 'string' } @@ -271,26 +278,28 @@ module.exports = { } } } - } + }) }, events: { - async 'ldp.container.created'(ctx) { - const { containerUri, options, webId } = ctx.params; + 'ldp.container.created': defineServiceEvent({ + async handler(ctx) { + const { containerUri, options, webId } = ctx.params; - if (options?.typeIndex) { - await ctx.call('type-indexes.waitForIndexCreation', { type: options.typeIndex, webId }); + if (options?.typeIndex) { + await ctx.call('type-indexes.waitForIndexCreation', { type: options.typeIndex, webId }); - await this.actions.register( - { - types: arrayOf(options?.acceptedTypes), - containerUri, - webId, - isPrivate: options.typeIndex === 'private' - }, - { parentCtx: ctx } - ); + await this.actions.register( + { + types: arrayOf(options?.acceptedTypes), + containerUri, + webId, + isPrivate: options.typeIndex === 'private' + }, + { parentCtx: ctx } + ); + } } - } + }) }, hooks: { after: { @@ -312,4 +321,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default TypeRegistrationsSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [TypeRegistrationsSchema.name]: typeof TypeRegistrationsSchema; + } + } +} diff --git a/src/middleware/packages/sparql-endpoint/getRoute.ts b/src/middleware/packages/sparql-endpoint/getRoute.ts index 1204a1b9e..79a5df28c 100644 --- a/src/middleware/packages/sparql-endpoint/getRoute.ts +++ b/src/middleware/packages/sparql-endpoint/getRoute.ts @@ -1,10 +1,10 @@ -const { +import { parseHeader, parseRawBody, negotiateAccept, saveDatasetMeta, negotiateContentType -} = require('@semapps/middlewares'); +} from '@semapps/middlewares'; const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, saveDatasetMeta]; @@ -35,4 +35,4 @@ function getRoute(path) { }; } -module.exports = getRoute; +export default getRoute; diff --git a/src/middleware/packages/sparql-endpoint/index.ts b/src/middleware/packages/sparql-endpoint/index.ts index 5690ee81f..24566e00e 100644 --- a/src/middleware/packages/sparql-endpoint/index.ts +++ b/src/middleware/packages/sparql-endpoint/index.ts @@ -1,3 +1,2 @@ -module.exports = { - SparqlEndpointService: require('./service') -}; +import SparqlEndpointService from './service.ts'; +export { SparqlEndpointService }; diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 199f022fc..3f7a6c8ef 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -1,9 +1,10 @@ -const path = require('path'); -const urlJoin = require('url-join'); -const getRoute = require('./getRoute'); +import path from 'path'; +import urlJoin from 'url-join'; +import getRoute from './getRoute.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; const SparqlEndpointService = { - name: 'sparqlEndpoint', + name: 'sparqlEndpoint' as const, settings: { defaultAccept: 'text/turtle', ignoreAcl: false, @@ -22,46 +23,58 @@ const SparqlEndpointService = { } }, actions: { - async query(ctx) { - const query = ctx.params.query || ctx.meta.rawBody; - const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; + query: defineAction({ + async handler(ctx) { + const query = ctx.params.query || ctx.meta.rawBody; + const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; - if (this.settings.podProvider) { - const [account] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); - if (!account) throw new Error(`No account found with username ${ctx.params.username}`); + if (this.settings.podProvider) { + const [account] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); + if (!account) throw new Error(`No account found with username ${ctx.params.username}`); - if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { - throw new Error(`You can only query your own SPARQL endpoint`); + if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { + throw new Error(`You can only query your own SPARQL endpoint`); + } } - } - const response = await ctx.call('triplestore.query', { - query, - accept, - dataset: this.settings.podProvider ? ctx.params.username : undefined, - // In Pod provider config, query as system when the Pod owner is querying his own data - webId: this.settings.ignoreAcl ? 'system' : ctx.meta.webId - }); + const response = await ctx.call('triplestore.query', { + query, + accept, + dataset: this.settings.podProvider ? ctx.params.username : undefined, + // In Pod provider config, query as system when the Pod owner is querying his own data + webId: this.settings.ignoreAcl ? 'system' : ctx.meta.webId + }); - if (ctx.meta.$responseType === undefined) { - ctx.meta.$responseType = ctx.meta.responseType || accept; - } + if (ctx.meta.$responseType === undefined) { + ctx.meta.$responseType = ctx.meta.responseType || accept; + } - return response; - } + return response; + } + }) }, events: { - async 'auth.registered'(ctx) { - const { webId } = ctx.params; - if (this.settings.podProvider) { - await ctx.call('activitypub.actor.addEndpoint', { - actorUri: webId, - predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', - endpoint: urlJoin(webId, 'sparql') - }); + 'auth.registered': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; + if (this.settings.podProvider) { + await ctx.call('activitypub.actor.addEndpoint', { + actorUri: webId, + predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', + endpoint: urlJoin(webId, 'sparql') + }); + } } - } + }) } -}; +} satisfies ServiceSchema; -module.exports = SparqlEndpointService; +export default SparqlEndpointService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SparqlEndpointService.name]: typeof SparqlEndpointService; + } + } +} diff --git a/src/middleware/packages/sync/index.ts b/src/middleware/packages/sync/index.ts index 1ee79d4b1..6e71e2311 100644 --- a/src/middleware/packages/sync/index.ts +++ b/src/middleware/packages/sync/index.ts @@ -1,6 +1,5 @@ -module.exports = { - ObjectsWatcherMiddleware: require('./middlewares/objects-watcher'), - AggregatorService: require('./services/aggregator'), - MirrorService: require('./services/mirror'), - SynchronizerService: require('./services/synchronizer') -}; +import ObjectsWatcherMiddleware from './middlewares/objects-watcher.ts'; +import AggregatorService from './services/aggregator.ts'; +import MirrorService from './services/mirror.ts'; +import SynchronizerService from './services/synchronizer.ts'; +export { ObjectsWatcherMiddleware, AggregatorService, MirrorService, SynchronizerService }; diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index 5ac02c810..e512dd50d 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -1,5 +1,4 @@ -const { PUBLIC_URI, ACTIVITY_TYPES } = require('@semapps/activitypub'); - +import { PUBLIC_URI, ACTIVITY_TYPES } from '@semapps/activitypub'; const handledLdpActions = ['ldp.container.post', 'ldp.resource.put', 'ldp.resource.patch', 'ldp.resource.delete']; const handledWacActions = [ @@ -352,4 +351,4 @@ const ObjectsWatcherMiddleware = (config = {}) => { }; }; -module.exports = ObjectsWatcherMiddleware; +export default ObjectsWatcherMiddleware; diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index 38a654cd0..c9ca8fc16 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -1,8 +1,9 @@ -const { ActivitiesHandlerMixin, ACTIVITY_TYPES } = require('@semapps/activitypub'); -const SynchronizerService = require('./synchronizer'); +import { ActivitiesHandlerMixin, ACTIVITY_TYPES } from '@semapps/activitypub'; +import SynchronizerService from './synchronizer.ts'; +import { ServiceSchema } from 'moleculer'; -module.exports = { - name: 'aggregator', +const AggregatorSchema = { + name: 'aggregator' as const, mixins: [ActivitiesHandlerMixin], settings: { acceptFollowOffers: true, @@ -45,4 +46,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default AggregatorSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AggregatorSchema.name]: typeof AggregatorSchema; + } + } +} diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index 6a6e8d80b..b147593f2 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -1,14 +1,14 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; const { MoleculerError } = require('moleculer').Errors; -const { createFragmentURL, arrayOf } = require('@semapps/ldp'); -const { ACTIVITY_TYPES } = require('@semapps/activitypub'); -const SynchronizerService = require('./synchronizer'); - +import { createFragmentURL, arrayOf } from '@semapps/ldp'; +import { ACTIVITY_TYPES } from '@semapps/activitypub'; +import SynchronizerService from './synchronizer.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); -module.exports = { - name: 'mirror', +const MirrorSchema = { + name: 'mirror' as const, settings: { graphName: 'http://semapps.org/mirror', servers: [] @@ -45,7 +45,7 @@ module.exports = { } }, actions: { - mirror: { + mirror: defineAction({ visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -170,6 +170,16 @@ module.exports = { return remoteRelayActorUri; } + }) + } +} satisfies ServiceSchema; + +export default MirrorSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [MirrorSchema.name]: typeof MirrorSchema; } } -}; +} diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index cdc0b1d14..a341a0647 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -1,8 +1,9 @@ -const { arrayOf } = require('@semapps/ldp'); -const { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin } = require('@semapps/activitypub'); +import { arrayOf } from '@semapps/ldp'; +import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin } from '@semapps/activitypub'; +import { ServiceSchema } from 'moleculer'; const SynchronizerService = { - name: 'synchronizer', + name: 'synchronizer' as const, mixins: [ActivitiesHandlerMixin], settings: { podProvider: false, @@ -243,6 +244,14 @@ const SynchronizerService = { } } } -}; +} satisfies ServiceSchema; -module.exports = SynchronizerService; +export default SynchronizerService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SynchronizerService.name]: typeof SynchronizerService; + } + } +} diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index 74b86e499..ae67001a5 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { uri: { @@ -38,4 +40,6 @@ module.exports = { return results.length; } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts index 6584cce69..4ad78f163 100644 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts +++ b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { dataset: { @@ -39,4 +41,6 @@ module.exports = { ); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index d897052a3..d8532b7d5 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { webId: { @@ -27,4 +28,6 @@ module.exports = { } }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index d21afef71..89c6f9b25 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { resource: { @@ -51,4 +52,6 @@ module.exports = { }); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 4d67a12fb..2554d137d 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,7 +1,8 @@ -const urlJoin = require('url-join'); -const { MIME_TYPES, negotiateType } = require('@semapps/mime-types'); +import urlJoin from 'url-join'; +import { MIME_TYPES, negotiateType } from '@semapps/mime-types'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { query: { @@ -76,4 +77,6 @@ module.exports = { throw new Error('SPARQL Verb not supported'); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts index 25f4b6845..3c98cdb95 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -1,4 +1,6 @@ -module.exports = { +import { defineAction } from 'moleculer'; + +const Schema = defineAction({ visibility: 'public', params: { triple: { @@ -43,4 +45,6 @@ module.exports = { dataset }); } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index bce5936d8..32fb0c822 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -1,6 +1,7 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { +const Schema = defineAction({ visibility: 'public', params: { query: { @@ -41,4 +42,6 @@ module.exports = { }); } } -}; +}); + +export default Schema; diff --git a/src/middleware/packages/triplestore/adapter.ts b/src/middleware/packages/triplestore/adapter.ts index cd0428efa..57947f067 100644 --- a/src/middleware/packages/triplestore/adapter.ts +++ b/src/middleware/packages/triplestore/adapter.ts @@ -1,8 +1,9 @@ /* eslint-disable class-methods-use-this */ -const { MIME_TYPES } = require('@semapps/mime-types'); -const { v4: uuidv4 } = require('uuid'); -const { frame } = require('jsonld'); -const { sanitizeSparqlUri, sanitizeSparqlString } = require('./utils'); +import { MIME_TYPES } from '@semapps/mime-types'; + +import { v4 as uuidv4 } from 'uuid'; +import { frame } from 'jsonld'; +import { sanitizeSparqlUri, sanitizeSparqlString } from './utils.ts'; class TripleStoreAdapter { constructor({ type, dataset, baseUri, ontology = 'http://semapps.org/ns/core#' }) { @@ -278,4 +279,4 @@ class TripleStoreAdapter { } } -module.exports = TripleStoreAdapter; +export default TripleStoreAdapter; diff --git a/src/middleware/packages/triplestore/index.ts b/src/middleware/packages/triplestore/index.ts index 4205f2365..4cc5c012e 100644 --- a/src/middleware/packages/triplestore/index.ts +++ b/src/middleware/packages/triplestore/index.ts @@ -1,8 +1,5 @@ -const utils = require('./utils'); - -module.exports = { - DatasetService: require('./subservices/dataset'), - TripleStoreAdapter: require('./adapter'), - TripleStoreService: require('./service'), - ...utils -}; +import DatasetService from './subservices/dataset.ts'; +import TripleStoreAdapter from './adapter.ts'; +import TripleStoreService from './service.ts'; +export * from './utils.ts'; +export { DatasetService, TripleStoreAdapter, TripleStoreService }; diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 0c81dfa69..85a1d6c4d 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -1,20 +1,22 @@ -const { SparqlJsonParser } = require('sparqljson-parse'); -const SparqlGenerator = require('sparqljs').Generator; +import { SparqlJsonParser } from 'sparqljson-parse'; +import sparqljsModule from 'sparqljs'; +const SparqlGenerator = sparqljsModule.Generator; const { MoleculerError } = require('moleculer').Errors; -const fetch = require('node-fetch'); -const { throw403, throw500 } = require('@semapps/middlewares'); -const countTriplesOfSubject = require('./actions/countTriplesOfSubject'); -const deleteOrphanBlankNodes = require('./actions/deleteOrphanBlankNodes'); -const dropAll = require('./actions/dropAll'); -const insert = require('./actions/insert'); -const query = require('./actions/query'); -const update = require('./actions/update'); -const tripleExist = require('./actions/tripleExist'); -const DatasetService = require('./subservices/dataset'); -const DocumentService = require('./subservices/document'); +import fetch from 'node-fetch'; +import { throw403, throw500 } from '@semapps/middlewares'; +import countTriplesOfSubject from './actions/countTriplesOfSubject.ts'; +import deleteOrphanBlankNodes from './actions/deleteOrphanBlankNodes.ts'; +import dropAll from './actions/dropAll.ts'; +import insert from './actions/insert.ts'; +import query from './actions/query.ts'; +import update from './actions/update.ts'; +import tripleExist from './actions/tripleExist.ts'; +import DatasetService from './subservices/dataset.ts'; +import DocumentService from './subservices/document.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const TripleStoreService = { - name: 'triplestore', + name: 'triplestore' as const, settings: { url: null, user: null, @@ -100,6 +102,14 @@ const TripleStoreService = { } } } -}; +} satisfies ServiceSchema; -module.exports = TripleStoreService; +export default TripleStoreService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [TripleStoreService.name]: typeof TripleStoreService; + } + } +} diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 3f6a06fb8..64bf6d833 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -1,14 +1,14 @@ -const fetch = require('node-fetch'); -const fs = require('fs'); -const path = require('path'); -const urlJoin = require('url-join'); -const format = require('string-template'); - +import fetch from 'node-fetch'; +import fs from 'fs'; +import path from 'path'; +import urlJoin from 'url-join'; +import format from 'string-template'; +import { ServiceSchema, defineAction } from 'moleculer'; const delay = t => new Promise(resolve => setTimeout(resolve, t)); /** @type {import('moleculer').ServiceSchema} */ const DatasetService = { - name: 'triplestore.dataset', + name: 'triplestore.dataset' as const, settings: { url: null, user: null, @@ -21,101 +21,122 @@ const DatasetService = { }; }, actions: { - async backup(ctx) { - const { dataset } = ctx.params; - - // Ask Fuseki to backup the given dataset - const response = await fetch(urlJoin(this.settings.url, '$/backup', dataset), { - method: 'POST', - headers: this.headers - }); - - // Wait for backup to complete - const { taskId } = await response.json(); - await this.actions.waitForTaskCompletion({ taskId }, { parentCtx: ctx }); - }, - async create(ctx) { - const { dataset, secure } = ctx.params; - if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); - const exist = await this.actions.exist({ dataset }, { parentCtx: ctx }); - if (!exist) { - this.logger.info(`Dataset ${dataset} doesn't exist. Creating it...`); - let response; - - if (dataset.endsWith('Acl') || dataset.endsWith('Mirror')) - throw new Error(`Error when creating dataset ${dataset}. Its name cannot end with Acl or Mirror`); - - const templateFilePath = path.join(__dirname, '../templates', secure ? 'secure-dataset.ttl' : 'dataset.ttl'); - const template = await fs.promises.readFile(templateFilePath, 'utf8'); - const assembler = format(template, { dataset: dataset }); - response = await fetch(urlJoin(this.settings.url, '$/datasets'), { + backup: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + + // Ask Fuseki to backup the given dataset + const response = await fetch(urlJoin(this.settings.url, '$/backup', dataset), { method: 'POST', - headers: { ...this.headers, 'Content-Type': 'text/turtle' }, - body: assembler + headers: this.headers }); - if (response.status === 200) { - await this.actions.waitForCreation({ dataset }, { parentCtx: ctx }); - this.logger.info(`Created ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); - } else { - this.logger.info(await response.text()); - throw new Error(`Error when creating ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); + // Wait for backup to complete + const { taskId } = await response.json(); + await this.actions.waitForTaskCompletion({ taskId }, { parentCtx: ctx }); + } + }), + + create: defineAction({ + async handler(ctx) { + const { dataset, secure } = ctx.params; + if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); + const exist = await this.actions.exist({ dataset }, { parentCtx: ctx }); + if (!exist) { + this.logger.info(`Dataset ${dataset} doesn't exist. Creating it...`); + let response; + + if (dataset.endsWith('Acl') || dataset.endsWith('Mirror')) + throw new Error(`Error when creating dataset ${dataset}. Its name cannot end with Acl or Mirror`); + + const templateFilePath = path.join(__dirname, '../templates', secure ? 'secure-dataset.ttl' : 'dataset.ttl'); + const template = await fs.promises.readFile(templateFilePath, 'utf8'); + const assembler = format(template, { dataset: dataset }); + response = await fetch(urlJoin(this.settings.url, '$/datasets'), { + method: 'POST', + headers: { ...this.headers, 'Content-Type': 'text/turtle' }, + body: assembler + }); + + if (response.status === 200) { + await this.actions.waitForCreation({ dataset }, { parentCtx: ctx }); + this.logger.info(`Created ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); + } else { + this.logger.info(await response.text()); + throw new Error(`Error when creating ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); + } } } - }, - async exist(ctx) { - const { dataset } = ctx.params; - const response = await fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { - headers: this.headers - }); - return response.status === 200; - }, - async list() { - const response = await fetch(urlJoin(this.settings.url, '$/datasets'), { - headers: this.headers - }); - - if (response.ok) { - const json = await response.json(); - return json.datasets.map(dataset => dataset['ds.name'].substring(1)); + }), + + exist: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + const response = await fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { + headers: this.headers + }); + return response.status === 200; } - return []; - }, - async isSecure(ctx) { - const { dataset } = ctx.params; - // Check if http://semapps.org/webacl graph exists - return await ctx.call('triplestore.query', { - query: `ASK WHERE { GRAPH { ?s ?p ?o } }`, - dataset, - webId: 'system' - }); - }, - async waitForCreation(ctx) { - const { dataset } = ctx.params; - let datasetExist; - do { - await delay(1000); - datasetExist = await this.actions.exist({ dataset }, { parentCtx: ctx }); - } while (!datasetExist); - }, - async waitForTaskCompletion(ctx) { - const { taskId } = ctx.params; - let task; - - do { - await delay(1000); - - const response = await fetch(urlJoin(this.settings.url, '$/tasks/', `${taskId}`), { - method: 'GET', + }), + + list: defineAction({ + async handler() { + const response = await fetch(urlJoin(this.settings.url, '$/datasets'), { headers: this.headers }); if (response.ok) { - task = await response.json(); + const json = await response.json(); + return json.datasets.map(dataset => dataset['ds.name'].substring(1)); } - } while (!task || !task.finished); - }, - delete: { + return []; + } + }), + + isSecure: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + // Check if http://semapps.org/webacl graph exists + return await ctx.call('triplestore.query', { + query: `ASK WHERE { GRAPH { ?s ?p ?o } }`, + dataset, + webId: 'system' + }); + } + }), + + waitForCreation: defineAction({ + async handler(ctx) { + const { dataset } = ctx.params; + let datasetExist; + do { + await delay(1000); + datasetExist = await this.actions.exist({ dataset }, { parentCtx: ctx }); + } while (!datasetExist); + } + }), + + waitForTaskCompletion: defineAction({ + async handler(ctx) { + const { taskId } = ctx.params; + let task; + + do { + await delay(1000); + + const response = await fetch(urlJoin(this.settings.url, '$/tasks/', `${taskId}`), { + method: 'GET', + headers: this.headers + }); + + if (response.ok) { + task = await response.json(); + } + } while (!task || !task.finished); + } + }), + + delete: defineAction({ params: { dataset: { type: 'string' }, iKnowWhatImDoing: { type: 'boolean' } @@ -156,8 +177,16 @@ const DatasetService = { ]); } } - } + }) } -}; +} satisfies ServiceSchema; -module.exports = DatasetService; +export default DatasetService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [DatasetService.name]: typeof DatasetService; + } + } +} diff --git a/src/middleware/packages/triplestore/subservices/document.ts b/src/middleware/packages/triplestore/subservices/document.ts index 126fe7558..ad84527df 100644 --- a/src/middleware/packages/triplestore/subservices/document.ts +++ b/src/middleware/packages/triplestore/subservices/document.ts @@ -1,67 +1,87 @@ -const { v4: uuidv4 } = require('uuid'); +import { v4 as uuidv4 } from 'uuid'; +import { ServiceSchema, defineAction } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const DocumentService = { - name: 'triplestore.document', + name: 'triplestore.document' as const, actions: { - async create(ctx) { - // TODO Do not allow to pass the document URI on creation - let { documentUri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + create: defineAction({ + async handler(ctx) { + // TODO Do not allow to pass the document URI on creation + let { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; - if (!documentUri) uuidv4(); + if (!documentUri) uuidv4(); - if (await this.actions.exist({ documentUri }, { parentCtx: ctx })) { - throw new Error(`Cannot create document as it already exists`); + if (await this.actions.exist({ documentUri }, { parentCtx: ctx })) { + throw new Error(`Cannot create document as it already exists`); + } + + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${documentUri}> {} }`, + webId: 'system', + dataset + }); + + return documentUri; } + }), - await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${documentUri}> {} }`, - webId: 'system', - dataset - }); + exist: defineAction({ + async handler(ctx) { + const { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; - return documentUri; - }, - async exist(ctx) { - const { documentUri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + return await ctx.call('triplestore.query', { + query: `ASK { GRAPH <${documentUri}> {} }`, + webId: 'system', + dataset + }); + } + }), - return await ctx.call('triplestore.query', { - query: `ASK { GRAPH <${documentUri}> {} }`, - webId: 'system', - dataset - }); - }, - async clear(ctx) { - const { documentUri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + clear: defineAction({ + async handler(ctx) { + const { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - GRAPH <${documentUri}> { - ?s1 ?p1 ?o1 . + await ctx.call('triplestore.update', { + query: ` + DELETE + WHERE { + GRAPH <${documentUri}> { + ?s1 ?p1 ?o1 . + } } - } - `, - webId: 'system', - dataset - }); - }, - async delete(ctx) { - const { documentUri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + `, + webId: 'system', + dataset + }); + } + }), - // We need to manually drop the graph, otherwise Fuseki will consider it still exists - await ctx.call('triplestore.update', { - query: `DROP GRAPH <${documentUri}>`, - webId: 'system', - dataset - }); - } + delete: defineAction({ + async handler(ctx) { + const { documentUri } = ctx.params; + const dataset = ctx.params.dataset || ctx.meta.dataset; + + // We need to manually drop the graph, otherwise Fuseki will consider it still exists + await ctx.call('triplestore.update', { + query: `DROP GRAPH <${documentUri}>`, + webId: 'system', + dataset + }); + } + }) } -}; +} satisfies ServiceSchema; + +export default DocumentService; -module.exports = DocumentService; +declare global { + export namespace Moleculer { + export interface AllServices { + [DocumentService.name]: typeof DocumentService; + } + } +} diff --git a/src/middleware/packages/triplestore/utils.ts b/src/middleware/packages/triplestore/utils.ts index cfb2195fc..5c6e1821c 100644 --- a/src/middleware/packages/triplestore/utils.ts +++ b/src/middleware/packages/triplestore/utils.ts @@ -39,8 +39,4 @@ const sanitizeSparqlQuery = (fragments, ...values) => { return values.reduce((acc, value, i) => `${acc}${fragments[i]}${value}`, '') + fragments.slice(-1); }; -module.exports = { - sanitizeSparqlUri, - sanitizeSparqlString, - sanitizeSparqlQuery -}; +export { sanitizeSparqlUri, sanitizeSparqlString, sanitizeSparqlQuery }; diff --git a/src/middleware/packages/void/index.ts b/src/middleware/packages/void/index.ts index 397978225..3e31e8ebd 100644 --- a/src/middleware/packages/void/index.ts +++ b/src/middleware/packages/void/index.ts @@ -1,3 +1,2 @@ -module.exports = { - VoidService: require('./service') -}; +import VoidService from './service.ts'; +export { VoidService }; diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 600a5c112..e3392317e 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -1,13 +1,13 @@ -const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { void: voidOntology } = require('@semapps/ontologies'); -const { JsonLdSerializer } = require('jsonld-streaming-serializer'); -const { DataFactory, Writer } = require('n3'); - +import urlJoin from 'url-join'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { void as voidOntology } from '@semapps/ontologies'; +import { JsonLdSerializer } from 'jsonld-streaming-serializer'; +import { DataFactory, Writer } from 'n3'; const { quad, namedNode, literal, blankNode } = DataFactory; const { MoleculerError } = require('moleculer').Errors; -const { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } = require('@semapps/ldp'); -const { parseHeader } = require('@semapps/middlewares'); +import { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } from '@semapps/ldp'; +import { parseHeader } from '@semapps/middlewares'; +import { ServiceSchema, defineAction } from 'moleculer'; const prefixes = { dc: 'http://purl.org/dc/terms/', @@ -148,8 +148,8 @@ const addMirrorServer = async ( } }; -module.exports = { - name: 'void', +const VoidSchema = { + name: 'void' as const, settings: { baseUrl: null, mirrorGraphName: 'http://semapps.org/mirror', @@ -174,7 +174,7 @@ module.exports = { }); }, actions: { - getRemote: { + getRemote: defineAction({ visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -196,8 +196,9 @@ module.exports = { this.logger.warn(`Silently ignored error when fetching void endpoint: ${e.message}`); } } - }, - get: { + }), + + get: defineAction({ visibility: 'public', params: { accept: { type: 'string', optional: true } @@ -344,17 +345,20 @@ module.exports = { return await this.formatOutput(ctx, graph, url, accept === MIME_TYPES.JSON); } - }, - api_get: async function api(ctx) { - let { accept } = ctx.meta.headers; - if (accept.includes('*/*')) accept = MIME_TYPES.JSON; - else if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) - throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); - - return await ctx.call('void.get', { - accept: accept - }); - } + }), + + api_get: defineAction({ + handler: async function api(ctx) { + let { accept } = ctx.meta.headers; + if (accept.includes('*/*')) accept = MIME_TYPES.JSON; + else if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) + throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); + + return await ctx.call('void.get', { + accept: accept + }); + } + }) }, methods: { async getContainers(ctx) { @@ -450,4 +454,14 @@ module.exports = { return compactJsonLd; } } -}; +} satisfies ServiceSchema; + +export default VoidSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [VoidSchema.name]: typeof VoidSchema; + } + } +} diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index 316a4d2d5..e0c2e86ec 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -1,5 +1,7 @@ -module.exports = { - name: 'authorizer-bot', +import { ServiceSchema, defineServiceEvent } from 'moleculer'; + +const AuthorizerBotSchema = { + name: 'authorizer-bot' as const, settings: { rules: [] }, @@ -29,84 +31,99 @@ module.exports = { } }, events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - const users = this.getUsers(rule, newData); - for (const user of users) { - await ctx.call('webacl.resource.addRights', { - resourceUri, - additionalRights: { - user: { - uri: user, - ...rule.rights - } - }, - webId: 'system' - }); - } - if (users.length > 0) { - ctx.emit('authorizer.added', { - resourceUri, - users, - rule - }); + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData } = ctx.params; + for (const rule of this.settings.rules) { + if (this.matchRule(rule, newData)) { + const users = this.getUsers(rule, newData); + for (const user of users) { + await ctx.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { + uri: user, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (users.length > 0) { + ctx.emit('authorizer.added', { + resourceUri, + users, + rule + }); + } } } } - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData, oldData } = ctx.params; + }), - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - const newUsers = this.getUsers(rule, newData); - const oldUsers = this.getUsers(rule, oldData); + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData, oldData } = ctx.params; - const usersToAdd = newUsers.filter(t1 => !oldUsers.some(t2 => t1 === t2)); - for (const userUri of usersToAdd) { - await ctx.call('webacl.resource.addRights', { - resourceUri, - additionalRights: { - user: { - uri: userUri, - ...rule.rights - } - }, - webId: 'system' - }); - } - if (usersToAdd.length > 0) { - ctx.emit('authorizer.added', { - resourceUri, - users: usersToAdd, - rule - }); - } + for (const rule of this.settings.rules) { + if (this.matchRule(rule, newData)) { + const newUsers = this.getUsers(rule, newData); + const oldUsers = this.getUsers(rule, oldData); - const usersToRemove = oldUsers.filter(t1 => !newUsers.some(t2 => t1 === t2)); - for (const userUri of usersToRemove) { - await ctx.call('webacl.resource.removeRights', { - resourceUri, - rights: { - user: { - uri: userUri, - ...rule.rights - } - }, - webId: 'system' - }); - } - if (usersToRemove.length > 0) { - ctx.emit('authorizer.removed', { - resourceUri, - users: usersToRemove, - rule - }); + const usersToAdd = newUsers.filter(t1 => !oldUsers.some(t2 => t1 === t2)); + for (const userUri of usersToAdd) { + await ctx.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + user: { + uri: userUri, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (usersToAdd.length > 0) { + ctx.emit('authorizer.added', { + resourceUri, + users: usersToAdd, + rule + }); + } + + const usersToRemove = oldUsers.filter(t1 => !newUsers.some(t2 => t1 === t2)); + for (const userUri of usersToRemove) { + await ctx.call('webacl.resource.removeRights', { + resourceUri, + rights: { + user: { + uri: userUri, + ...rule.rights + } + }, + webId: 'system' + }); + } + if (usersToRemove.length > 0) { + ctx.emit('authorizer.removed', { + resourceUri, + users: usersToRemove, + rule + }); + } } } } + }) + } +} satisfies ServiceSchema; + +export default AuthorizerBotSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [AuthorizerBotSchema.name]: typeof AuthorizerBotSchema; } } -}; +} diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index dd3838b69..c0ac02c60 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -1,8 +1,9 @@ -const { arrayOf } = require('@semapps/ldp'); -const { hasType } = require('../utils'); +import { arrayOf } from '@semapps/ldp'; +import { hasType } from '../utils.ts'; +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; -module.exports = { - name: 'groups-manager', +const GroupsManagerSchema = { + name: 'groups-manager' as const, settings: { usersContainer: null, rules: [] @@ -17,34 +18,36 @@ module.exports = { } }, actions: { - async refreshAll(ctx) { - const usersContainer = await ctx.call('ldp.container.get', { - containerUri: this.settings.usersContainer, - webId: 'system' - }); + refreshAll: defineAction({ + async handler(ctx) { + const usersContainer = await ctx.call('ldp.container.get', { + containerUri: this.settings.usersContainer, + webId: 'system' + }); - for (const user of arrayOf(usersContainer['ldp:contains'])) { - const userUri = user['@id'] || user.id; - this.logger.info(`Refreshing user ${userUri}...`); - for (const rule of this.settings.rules) { - if (this.matchRule(rule, user)) { - this.logger.info(`Adding user ${userUri} to group ${rule.groupSlug}`); - await ctx.call('webacl.group.addMember', { - groupSlug: rule.groupSlug, - memberUri: user.id, - webId: 'system' - }); - } else { - this.logger.info(`Removing user ${userUri} from group ${rule.groupSlug} (if it exists)`); - await ctx.call('webacl.group.removeMember', { - groupSlug: rule.groupSlug, - memberUri: user.id, - webId: 'system' - }); + for (const user of arrayOf(usersContainer['ldp:contains'])) { + const userUri = user['@id'] || user.id; + this.logger.info(`Refreshing user ${userUri}...`); + for (const rule of this.settings.rules) { + if (this.matchRule(rule, user)) { + this.logger.info(`Adding user ${userUri} to group ${rule.groupSlug}`); + await ctx.call('webacl.group.addMember', { + groupSlug: rule.groupSlug, + memberUri: user.id, + webId: 'system' + }); + } else { + this.logger.info(`Removing user ${userUri} from group ${rule.groupSlug} (if it exists)`); + await ctx.call('webacl.group.removeMember', { + groupSlug: rule.groupSlug, + memberUri: user.id, + webId: 'system' + }); + } } } } - } + }) }, methods: { matchRule(rule, record) { @@ -63,33 +66,54 @@ module.exports = { } }, events: { - async 'ldp.resource.created'(ctx) { - const { resourceUri, newData } = ctx.params; - if (this.isUser(newData)) { - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); - await ctx.call('webacl.group.addMember', { - groupSlug: rule.groupSlug, - memberUri: resourceUri, - webId: 'system' - }); + 'ldp.resource.created': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData } = ctx.params; + if (this.isUser(newData)) { + for (const rule of this.settings.rules) { + if (this.matchRule(rule, newData)) { + this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); + await ctx.call('webacl.group.addMember', { + groupSlug: rule.groupSlug, + memberUri: resourceUri, + webId: 'system' + }); + } } } } - }, - async 'ldp.resource.updated'(ctx) { - const { resourceUri, newData } = ctx.params; - if (this.isUser(newData)) { - for (const rule of this.settings.rules) { - if (this.matchRule(rule, newData)) { - this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); - await ctx.call('webacl.group.addMember', { - groupSlug: rule.groupSlug, - memberUri: resourceUri, - webId: 'system' - }); - } else { + }), + + 'ldp.resource.updated': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, newData } = ctx.params; + if (this.isUser(newData)) { + for (const rule of this.settings.rules) { + if (this.matchRule(rule, newData)) { + this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); + await ctx.call('webacl.group.addMember', { + groupSlug: rule.groupSlug, + memberUri: resourceUri, + webId: 'system' + }); + } else { + this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); + await ctx.call('webacl.group.removeMember', { + groupSlug: rule.groupSlug, + memberUri: resourceUri, + webId: 'system' + }); + } + } + } + } + }), + + 'ldp.resource.deleted': defineServiceEvent({ + async handler(ctx) { + const { resourceUri, oldData } = ctx.params; + if (this.isUser(oldData)) { + for (const rule of this.settings.rules) { this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); await ctx.call('webacl.group.removeMember', { groupSlug: rule.groupSlug, @@ -99,19 +123,16 @@ module.exports = { } } } - }, - async 'ldp.resource.deleted'(ctx) { - const { resourceUri, oldData } = ctx.params; - if (this.isUser(oldData)) { - for (const rule of this.settings.rules) { - this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); - await ctx.call('webacl.group.removeMember', { - groupSlug: rule.groupSlug, - memberUri: resourceUri, - webId: 'system' - }); - } - } + }) + } +} satisfies ServiceSchema; + +export default GroupsManagerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [GroupsManagerSchema.name]: typeof GroupsManagerSchema; } } -}; +} diff --git a/src/middleware/packages/webacl/index.ts b/src/middleware/packages/webacl/index.ts index b81aa6d11..d8e7fac08 100644 --- a/src/middleware/packages/webacl/index.ts +++ b/src/middleware/packages/webacl/index.ts @@ -1,10 +1,7 @@ -const utils = require('./utils'); - -module.exports = { - GroupsManagerBot: require('./bots/groups-manager'), - AuthorizerBot: require('./bots/authorizer-bot'), - WebAclService: require('./service'), - WebAclMiddleware: require('./middlewares/webacl'), - CacherMiddleware: require('./middlewares/cacher'), - ...utils -}; +import GroupsManagerBot from './bots/groups-manager.ts'; +import AuthorizerBot from './bots/authorizer-bot.ts'; +import WebAclService from './service.ts'; +import WebAclMiddleware from './middlewares/webacl.ts'; +import CacherMiddleware from './middlewares/cacher.ts'; +export * from './utils.ts'; +export { GroupsManagerBot, AuthorizerBot, WebAclService, WebAclMiddleware, CacherMiddleware }; diff --git a/src/middleware/packages/webacl/middlewares/cacher.ts b/src/middleware/packages/webacl/middlewares/cacher.ts index e033f6be7..ced2ba016 100644 --- a/src/middleware/packages/webacl/middlewares/cacher.ts +++ b/src/middleware/packages/webacl/middlewares/cacher.ts @@ -1,5 +1,4 @@ -const { Cachers } = require('moleculer'); - +import { Cachers } from 'moleculer'; let cacher; // It has been suggested to put this middleware in Moleculer core code: @@ -27,4 +26,4 @@ const CacherMiddleware = opts => ({ } }); -module.exports = CacherMiddleware; +export default CacherMiddleware; diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index ccd0cf71b..b48103fce 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -1,6 +1,6 @@ -const urlJoin = require('url-join'); -const { defaultContainerOptions } = require('@semapps/ldp'); -const { getSlugFromUri } = require('../utils'); +import urlJoin from 'url-join'; +import { defaultContainerOptions } from '@semapps/ldp'; +import { getSlugFromUri } from '../utils.ts'; const modifyActions = [ 'ldp.resource.create', @@ -314,4 +314,4 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se } }); -module.exports = WebAclMiddleware; +export default WebAclMiddleware; diff --git a/src/middleware/packages/webacl/routes/getRoutes.ts b/src/middleware/packages/webacl/routes/getRoutes.ts index d096a220e..dc9a118d2 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.ts +++ b/src/middleware/packages/webacl/routes/getRoutes.ts @@ -1,5 +1,6 @@ -const path = require('path'); -const { parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson } = require('@semapps/middlewares'); +import path from 'path'; + +import { parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson } from '@semapps/middlewares'; const onError = (req, res, err) => { const { type, code, message, data, name } = err; @@ -67,4 +68,4 @@ const getRoutes = (basePath, podProvider) => { ]; }; -module.exports = getRoutes; +export default getRoutes; diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index 09856a3c6..c0929717e 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -1,12 +1,13 @@ -const { acl, vcard, rdfs } = require('@semapps/ontologies'); -const WebAclResourceService = require('./services/resource'); -const WebAclCacheService = require('./services/cache'); -const WebAclGroupService = require('./services/group'); -const WebAclAuthorizerService = require('./services/authorizer'); -const getRoutes = require('./routes/getRoutes'); - -module.exports = { - name: 'webacl', +import { acl, vcard, rdfs } from '@semapps/ontologies'; +import WebAclResourceService from './services/resource/index.ts'; +import WebAclCacheService from './services/cache/index.ts'; +import WebAclGroupService from './services/group/index.ts'; +import WebAclAuthorizerService from './services/authorizer/index.ts'; +import getRoutes from './routes/getRoutes.ts'; +import { ServiceSchema } from 'moleculer'; + +const WebaclSchema = { + name: 'webacl' as const, settings: { baseUrl: null, graphName: 'http://semapps.org/webacl', @@ -54,4 +55,14 @@ module.exports = { await this.broker.call('ontologies.register', vcard); await this.broker.call('ontologies.register', rdfs); } -}; +} satisfies ServiceSchema; + +export default WebaclSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclSchema.name]: typeof WebaclSchema; + } + } +} diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts index fe05618c7..7079b9bcc 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.ts +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -1,3 +1,5 @@ +import { ServiceSchema, defineAction } from 'moleculer'; + // A acl:Write permission implicitly gives acl:Read and acl:Append permissions const modeMapping = { 'acl:Read': ['read', 'write'], @@ -6,30 +8,42 @@ const modeMapping = { 'acl:Control': ['control'] }; -module.exports = { - name: 'webacl.authorizer', +const WebaclAuthorizerSchema = { + name: 'webacl.authorizer' as const, dependencies: 'permissions', async started() { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, actions: { - async hasPermission(ctx) { - const { uri, type, mode, webId } = ctx.params; + hasPermission: defineAction({ + async handler(ctx) { + const { uri, type, mode, webId } = ctx.params; + + if (type === 'resource' || type === 'container') { + const modesToCheck = modeMapping[mode]; - if (type === 'resource' || type === 'container') { - const modesToCheck = modeMapping[mode]; + const rights = await ctx.call('webacl.resource.hasRights', { + resourceUri: uri, + webId, + rights: Object.fromEntries(modesToCheck.map(m => [m, true])) + }); - const rights = await ctx.call('webacl.resource.hasRights', { - resourceUri: uri, - webId, - rights: Object.fromEntries(modesToCheck.map(m => [m, true])) - }); + // Return true if there is at least one true value + return Object.values(rights).some(r => r); + } - // Return true if there is at least one true value - return Object.values(rights).some(r => r); + return undefined; } + }) + } +} satisfies ServiceSchema; - return undefined; +export default WebaclAuthorizerSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclAuthorizerSchema.name]: typeof WebaclAuthorizerSchema; } } -}; +} diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index ccac4e686..de93a5904 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -1,81 +1,121 @@ -module.exports = { - name: 'webacl.cache', +import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; + +const WebaclCacheSchema = { + name: 'webacl.cache' as const, actions: { - // Invalidate the WebACL cache of the given resource - // If specificUriOnly is false, it will invalidate all resources starting with the given URI - async invalidateResourceRights(ctx) { - if (this.broker.cacher) { - const { uri, specificUriOnly } = ctx.params; - await this.broker.cacher.clean(`webacl.resource.getRights:${uri}${specificUriOnly ? '|**' : '**'}`); - await this.broker.cacher.clean(`webacl.resource.hasRights:${uri}${specificUriOnly ? '|**' : '**'}`); + invalidateResourceRights: defineAction({ + // Invalidate the WebACL cache of the given resource + // If specificUriOnly is false, it will invalidate all resources starting with the given URI + async handler(ctx) { + if (this.broker.cacher) { + const { uri, specificUriOnly } = ctx.params; + await this.broker.cacher.clean(`webacl.resource.getRights:${uri}${specificUriOnly ? '|**' : '**'}`); + await this.broker.cacher.clean(`webacl.resource.hasRights:${uri}${specificUriOnly ? '|**' : '**'}`); + } } - }, - // Invalidate all WebACL cache for the given user - async invalidateAllUserRights(ctx) { - if (this.broker.cacher) { - const { uri } = ctx.params; - await this.broker.cacher.clean(`webacl.resource.getRights:**${uri}**`); - await this.broker.cacher.clean(`webacl.resource.hasRights:**${uri}**`); + }), + + invalidateAllUserRights: defineAction({ + // Invalidate all WebACL cache for the given user + async handler(ctx) { + if (this.broker.cacher) { + const { uri } = ctx.params; + await this.broker.cacher.clean(`webacl.resource.getRights:**${uri}**`); + await this.broker.cacher.clean(`webacl.resource.hasRights:**${uri}**`); + } } - }, - async invalidateAllUserRightsOnPod(ctx) { - if (this.broker.cacher) { - const { webId, podOwner } = ctx.params; - await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}|**|${webId}`); - await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}|**|${webId}`); - await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}/**|**|${webId}`); - await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}/**|**|${webId}`); + }), + + invalidateAllUserRightsOnPod: defineAction({ + async handler(ctx) { + if (this.broker.cacher) { + const { webId, podOwner } = ctx.params; + await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}|**|${webId}`); + await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}|**|${webId}`); + await this.broker.cacher.clean(`webacl.resource.getRights:${podOwner}/**|**|${webId}`); + await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}/**|**|${webId}`); + } } - }, - async generateForUser(ctx) { - const { webId } = ctx.params; - this.logger.info(`Generating cache for user ${webId}`); - const containers = await ctx.call('ldp.container.getAll'); - for (const containerUri of containers) { - this.logger.info(`Generating cache for container ${containerUri}`); - const resources = await ctx.call('ldp.container.getUris', { containerUri }); - for (const resourceUri of resources) { - await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, - webId - }); + }), + + generateForUser: defineAction({ + async handler(ctx) { + const { webId } = ctx.params; + this.logger.info(`Generating cache for user ${webId}`); + const containers = await ctx.call('ldp.container.getAll'); + for (const containerUri of containers) { + this.logger.info(`Generating cache for container ${containerUri}`); + const resources = await ctx.call('ldp.container.getUris', { containerUri }); + for (const resourceUri of resources) { + await ctx.call('webacl.resource.hasRights', { + resourceUri, + rights: { read: true }, + webId + }); + } } } - }, - async generateForAll(ctx) { - const { usersContainer } = ctx.params; - const users = await ctx.call('ldp.container.getUris', { containerUri: usersContainer }); - for (const webId of users) { - await this.actions.generateForUser({ webId }, { parentCtx: ctx }); + }), + + generateForAll: defineAction({ + async handler(ctx) { + const { usersContainer } = ctx.params; + const users = await ctx.call('ldp.container.getUris', { containerUri: usersContainer }); + for (const webId of users) { + await this.actions.generateForUser({ webId }, { parentCtx: ctx }); + } } - } + }) }, events: { - async 'webacl.resource.updated'(ctx) { - const { uri, isContainer, defaultRightsUpdated } = ctx.params; - await this.actions.invalidateResourceRights( - { uri, specificUriOnly: !isContainer || !defaultRightsUpdated }, - { parentCtx: ctx } - ); - }, - async 'webacl.resource.deleted'(ctx) { - const { uri, isContainer } = ctx.params; - await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); - }, - async 'webacl.resource.user-deleted'(ctx) { - const { webId } = ctx.params; - await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); - }, - async 'webacl.group.member-added'(ctx) { - const { groupUri, memberUri } = ctx.params; - await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); - await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); - }, - async 'webacl.group.member-removed'(ctx) { - const { groupUri, memberUri } = ctx.params; - await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); - await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); + 'webacl.resource.updated': defineServiceEvent({ + async handler(ctx) { + const { uri, isContainer, defaultRightsUpdated } = ctx.params; + await this.actions.invalidateResourceRights( + { uri, specificUriOnly: !isContainer || !defaultRightsUpdated }, + { parentCtx: ctx } + ); + } + }), + + 'webacl.resource.deleted': defineServiceEvent({ + async handler(ctx) { + const { uri, isContainer } = ctx.params; + await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); + } + }), + + 'webacl.resource.user-deleted': defineServiceEvent({ + async handler(ctx) { + const { webId } = ctx.params; + await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); + } + }), + + 'webacl.group.member-added': defineServiceEvent({ + async handler(ctx) { + const { groupUri, memberUri } = ctx.params; + await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); + await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); + } + }), + + 'webacl.group.member-removed': defineServiceEvent({ + async handler(ctx) { + const { groupUri, memberUri } = ctx.params; + await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); + await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); + } + }) + } +} satisfies ServiceSchema; + +export default WebaclCacheSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclCacheSchema.name]: typeof WebaclCacheSchema; } } -}; +} diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index e87be7e62..6e5394515 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -1,64 +1,64 @@ const { MoleculerError } = require('moleculer').Errors; -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const urlJoin = require('url-join'); +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { - api: async function api(ctx) { - if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; +export const api = async function api(ctx) { + if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.addMember', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, - memberUri: ctx.params.memberUri - }); + await ctx.call('webacl.group.addMember', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, + memberUri: ctx.params.memberUri + }); + + ctx.meta.$statusCode = 204; +}; - ctx.meta.$statusCode = 204; +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + memberUri: { type: 'string', optional: false, trim: true }, + webId: { type: 'string', optional: true } }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - memberUri: { type: 'string', optional: false, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri, memberUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + async handler(ctx) { + let { groupSlug, groupUri, memberUri } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - // TODO: check that the member exists ? + // TODO: check that the member exists ? - // Check we have Append ou Write permissions on the group - if (webId !== 'system') { - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - append: true, - write: true - }, - webId - }); - if (!groupRights.append && !groupRights.write) - throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } + // Check we have Append ou Write permissions on the group + if (webId !== 'system') { + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + append: true, + write: true + }, + webId + }); + if (!groupRights.append && !groupRights.write) + throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); + } - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX vcard: - INSERT DATA { - GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember <${memberUri}> - } + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX vcard: + INSERT DATA { + GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember <${memberUri}> } - `, - webId: 'system' - }); + } + `, + webId: 'system' + }); - ctx.emit('webacl.group.member-added', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); - } + ctx.emit('webacl.group.member-added', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index a0a597df0..18d819cdd 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -1,82 +1,82 @@ const { MoleculerError } = require('moleculer').Errors; -const createSlug = require('speakingurl'); -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import createSlug from 'speakingurl'; +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { - api: async function api(ctx) { - if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; +export const api = async function api(ctx) { + if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - const { groupUri } = await ctx.call('webacl.group.create', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.meta.headers.slug}` : ctx.meta.headers.slug - }); + const { groupUri } = await ctx.call('webacl.group.create', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.meta.headers.slug}` : ctx.meta.headers.slug + }); + + ctx.meta.$responseHeaders = { + Location: groupUri, + 'Content-Length': 0 + }; + // We need to set this also here (in addition to above) or we get a Moleculer warning + ctx.meta.$location = groupUri; + ctx.meta.$statusCode = 201; +}; - ctx.meta.$responseHeaders = { - Location: groupUri, - 'Content-Length': 0 - }; - // We need to set this also here (in addition to above) or we get a Moleculer warning - ctx.meta.$location = groupUri; - ctx.meta.$statusCode = 201; +export const action = defineAction({ + visibility: 'public', + params: { + groupUri: { type: 'string', optional: true }, + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + webId: { type: 'string', optional: true } }, - action: { - visibility: 'public', - params: { - groupUri: { type: 'string', optional: true }, - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupUri, groupSlug } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + async handler(ctx) { + let { groupUri, groupSlug } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - if (!groupUri) { - groupSlug = createSlug(groupSlug, { lang: 'fr', custom: { '.': '.', '/': '/' } }); - groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - } + if (!groupUri) { + groupSlug = createSlug(groupSlug, { lang: 'fr', custom: { '.': '.', '/': '/' } }); + groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + } - if (await this.actions.exist({ groupUri, webId: 'system' }, { parentCtx: ctx })) { - throw new MoleculerError('Group already exists', 400, 'BAD_REQUEST'); - } + if (await this.actions.exist({ groupUri, webId: 'system' }, { parentCtx: ctx })) { + throw new MoleculerError('Group already exists', 400, 'BAD_REQUEST'); + } - const newRights = {}; - if (webId === 'anon') { - newRights.anon = { - read: true, - write: true - }; - } else if (webId === 'system') { - newRights.anon = { - read: true - }; - } else { - newRights.user = { - uri: webId, - read: true, - write: true, - control: true - }; - } - await ctx.call('webacl.resource.addRights', { - webId: 'system', - resourceUri: groupUri, - newRights - }); + const newRights = {}; + if (webId === 'anon') { + newRights.anon = { + read: true, + write: true + }; + } else if (webId === 'system') { + newRights.anon = { + read: true + }; + } else { + newRights.user = { + uri: webId, + read: true, + write: true, + control: true + }; + } + await ctx.call('webacl.resource.addRights', { + webId: 'system', + resourceUri: groupUri, + newRights + }); - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX vcard: - INSERT DATA { - GRAPH <${this.settings.graphName}> { - <${groupUri}> a vcard:Group - } - } - `, - webId: 'system' - }); + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX vcard: + INSERT DATA { + GRAPH <${this.settings.graphName}> { + <${groupUri}> a vcard:Group + } + } + `, + webId: 'system' + }); - return { groupUri }; - } + return { groupUri }; } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index 96335dc5e..7d0bdd9fc 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -1,60 +1,59 @@ const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); -const { removeAgentGroupOrAgentFromAuthorizations } = require('../../../utils'); - -module.exports = { - api: async function api(ctx) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.delete', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id - }); +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; + +export const api = async function api(ctx) { + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + await ctx.call('webacl.group.delete', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id + }); + + ctx.meta.$statusCode = 204; +}; - ctx.meta.$statusCode = 204; +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + webId: { type: 'string', optional: true } }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - // TODO: check that the group exists ? - - if (webId !== 'system') { - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - write: true - }, - webId - }); - if (!groupRights.write) - throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - DELETE WHERE { - GRAPH <${this.settings.graphName}> { - <${groupUri}> ?p ?o. - } - } - `, - webId: 'system' - }); + async handler(ctx) { + let { groupSlug, groupUri } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - await ctx.call('webacl.resource.deleteAllRights', { resourceUri: groupUri }); + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + + // TODO: check that the group exists ? + + if (webId !== 'system') { + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + write: true + }, + webId + }); + if (!groupRights.write) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); } + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + DELETE WHERE { + GRAPH <${this.settings.graphName}> { + <${groupUri}> ?p ?o. + } + } + `, + webId: 'system' + }); + + await ctx.call('webacl.resource.deleteAllRights', { resourceUri: groupUri }); + + await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index a613cda30..04851fae8 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -1,31 +1,30 @@ const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true } - }, - async handler(ctx) { - let { groupUri, groupSlug } = ctx.params; +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true } + }, + async handler(ctx) { + let { groupUri, groupSlug } = ctx.params; - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - return await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX vcard: - ASK WHERE { - GRAPH <${this.settings.graphName}> { - <${groupUri}> a vcard:Group . - } - } - `, - webId: 'system' - }); - } + return await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX vcard: + ASK WHERE { + GRAPH <${this.settings.graphName}> { + <${groupUri}> a vcard:Group . + } + } + `, + webId: 'system' + }); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index 08b728388..b7e9d9729 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,57 +1,58 @@ -module.exports = { - api: async function api(ctx) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - return await ctx.call('webacl.group.getGroups', {}); - }, - action: { - visibility: 'public', - params: { - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; +import { defineAction } from 'moleculer'; + +export const api = async function api(ctx) { + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + return await ctx.call('webacl.group.getGroups', {}); +}; - let groups; +export const action = defineAction({ + visibility: 'public', + params: { + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - if (webId !== 'system') { - const agentSelector = webId === 'anon' ? 'acl:agentClass foaf:Agent.' : `acl:agent <${webId}>.`; + let groups; - groups = await ctx.call('triplestore.query', { - query: ` - PREFIX vcard: - PREFIX acl: - PREFIX foaf: - SELECT ?g - WHERE - { GRAPH <${this.settings.graphName}> - { ?g a vcard:Group. - ?auth a acl:Authorization; - acl:mode acl:Read; - acl:accessTo ?g; - ${agentSelector} - } - } - `, - webId: 'system' - }); + if (webId !== 'system') { + const agentSelector = webId === 'anon' ? 'acl:agentClass foaf:Agent.' : `acl:agent <${webId}>.`; - /// TODO: implement to find the groups the user has Read access to, via his membership of other groups (agentGroup) - // and also the groups with acl:AuthenticatedAgent - } else { - groups = await ctx.call('triplestore.query', { - query: ` - PREFIX vcard: - SELECT ?g - WHERE { - GRAPH <${this.settings.graphName}> - { ?g a vcard:Group } - } - `, - webId: 'system' - }); - } + groups = await ctx.call('triplestore.query', { + query: ` + PREFIX vcard: + PREFIX acl: + PREFIX foaf: + SELECT ?g + WHERE + { GRAPH <${this.settings.graphName}> + { ?g a vcard:Group. + ?auth a acl:Authorization; + acl:mode acl:Read; + acl:accessTo ?g; + ${agentSelector} + } + } + `, + webId: 'system' + }); - return groups.map(m => m.g.value); + /// TODO: implement to find the groups the user has Read access to, via his membership of other groups (agentGroup) + // and also the groups with acl:AuthenticatedAgent + } else { + groups = await ctx.call('triplestore.query', { + query: ` + PREFIX vcard: + SELECT ?g + WHERE { + GRAPH <${this.settings.graphName}> + { ?g a vcard:Group } + } + `, + webId: 'system' + }); } + + return groups.map(m => m.g.value); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index ddf71293b..e9548cdea 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -1,56 +1,56 @@ const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); - -module.exports = { - api: async function api(ctx) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - return await ctx.call('webacl.group.getMembers', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id - }); +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; + +export const api = async function api(ctx) { + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + return await ctx.call('webacl.group.getMembers', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id + }); +}; + +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + webId: { type: 'string', optional: true } }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - - // TODO: check that the group exists ? - - if (webId !== 'system') { - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - read: true - }, - webId - }); - if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - const members = await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX vcard: - SELECT ?m - WHERE { - GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember ?m - } - } - `, - webId: 'system' - }); + async handler(ctx) { + let { groupSlug, groupUri } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - return members.map(m => m.m.value); + // TODO: check that the group exists ? + + if (webId !== 'system') { + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + read: true + }, + webId + }); + if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); } + + const members = await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX vcard: + SELECT ?m + WHERE { + GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember ?m + } + } + `, + webId: 'system' + }); + + return members.map(m => m.m.value); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.ts b/src/middleware/packages/webacl/services/group/actions/getUri.ts index fe3ccb80e..e54b45729 100644 --- a/src/middleware/packages/webacl/services/group/actions/getUri.ts +++ b/src/middleware/packages/webacl/services/group/actions/getUri.ts @@ -1,14 +1,13 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; -module.exports = { - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: false, trim: true } - }, - async handler(ctx) { - const { groupSlug } = ctx.params; - return urlJoin(this.settings.baseUrl, '_groups', groupSlug); - } +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: false, trim: true } + }, + async handler(ctx) { + const { groupSlug } = ctx.params; + return urlJoin(this.settings.baseUrl, '_groups', groupSlug); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 62ef6c277..86587ebf5 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -1,51 +1,50 @@ const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - webId: { type: 'string', optional: true }, - memberId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri, memberId } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + webId: { type: 'string', optional: true }, + memberId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupSlug, groupUri, memberId } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - // TODO: check that the group exists ? + // TODO: check that the group exists ? - if (webId !== 'system') { - // verifier que nous avons bien le droit Read sur le group. - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - read: true - }, - webId - }); - if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } - - if (!memberId) memberId = webId; - if (memberId === 'anon' || memberId === 'system') return false; // anonymous is never member. - - return await ctx.call('triplestore.query', { - query: sanitizeSparqlQuery` - PREFIX vcard: - ASK - WHERE { GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember <${memberId}> . - } } - `, - webId: 'system' + if (webId !== 'system') { + // verifier que nous avons bien le droit Read sur le group. + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + read: true + }, + webId }); + if (!groupRights.read) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); } + + if (!memberId) memberId = webId; + if (memberId === 'anon' || memberId === 'system') return false; // anonymous is never member. + + return await ctx.call('triplestore.query', { + query: sanitizeSparqlQuery` + PREFIX vcard: + ASK + WHERE { GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember <${memberId}> . + } } + `, + webId: 'system' + }); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index e50b37379..2c803dc55 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -1,65 +1,64 @@ const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { sanitizeSparqlQuery } = require('@semapps/triplestore'); +import urlJoin from 'url-join'; +import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { defineAction } from 'moleculer'; -module.exports = { - api: async function api(ctx) { - if (!ctx.params.deleteUserUri) - throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; +export const api = async function api(ctx) { + if (!ctx.params.deleteUserUri) + throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); + if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.removeMember', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, - memberUri: ctx.params.deleteUserUri - }); + await ctx.call('webacl.group.removeMember', { + groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, + memberUri: ctx.params.deleteUserUri + }); - ctx.meta.$statusCode = 204; - }, - action: { - visibility: 'public', - params: { - groupSlug: { type: 'string', optional: true, min: 1, trim: true }, - groupUri: { type: 'string', optional: true, trim: true }, - memberUri: { type: 'string', optional: false, trim: true }, - webId: { type: 'string', optional: true } - }, - async handler(ctx) { - let { groupSlug, groupUri, memberUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + ctx.meta.$statusCode = 204; +}; - if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - if (!memberUri) throw new MoleculerError('needs a memberUri', 400, 'BAD_REQUEST'); +export const action = defineAction({ + visibility: 'public', + params: { + groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + groupUri: { type: 'string', optional: true, trim: true }, + memberUri: { type: 'string', optional: false, trim: true }, + webId: { type: 'string', optional: true } + }, + async handler(ctx) { + let { groupSlug, groupUri, memberUri } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); + if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + if (!memberUri) throw new MoleculerError('needs a memberUri', 400, 'BAD_REQUEST'); - // TODO: check that the member exists and is in the group ? + if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); - if (webId !== 'system') { - // verifier que nous avons bien le droit Write sur le group. - const groupRights = await ctx.call('webacl.resource.hasRights', { - resourceUri: groupUri, - rights: { - write: true - }, - webId - }); - if (!groupRights.write) - throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); - } + // TODO: check that the member exists and is in the group ? - await ctx.call('triplestore.update', { - query: sanitizeSparqlQuery` - PREFIX vcard: - DELETE DATA { - GRAPH <${this.settings.graphName}> { - <${groupUri}> vcard:hasMember <${memberUri}> - } - } - `, - webId: 'system' + if (webId !== 'system') { + // verifier que nous avons bien le droit Write sur le group. + const groupRights = await ctx.call('webacl.resource.hasRights', { + resourceUri: groupUri, + rights: { + write: true + }, + webId }); - - ctx.emit('webacl.group.member-removed', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); + if (!groupRights.write) throw new MoleculerError(`Access denied to the group ${groupUri}`, 403, 'ACCESS_DENIED'); } + + await ctx.call('triplestore.update', { + query: sanitizeSparqlQuery` + PREFIX vcard: + DELETE DATA { + GRAPH <${this.settings.graphName}> { + <${groupUri}> vcard:hasMember <${memberUri}> + } + } + `, + webId: 'system' + }); + + ctx.emit('webacl.group.member-removed', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); } -}; +}); diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index 9e2558ce2..de2515bb6 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -1,16 +1,17 @@ -const urlJoin = require('url-join'); -const createAction = require('./actions/create'); -const deleteAction = require('./actions/delete'); -const existAction = require('./actions/exist'); -const addMemberAction = require('./actions/addMember'); -const getMembersAction = require('./actions/getMembers'); -const getUriAction = require('./actions/getUri'); -const isMemberAction = require('./actions/isMember'); -const removeMemberAction = require('./actions/removeMember'); -const getGroupsAction = require('./actions/getGroups'); +import urlJoin from 'url-join'; +import createAction from './actions/create.ts'; +import deleteAction from './actions/delete.ts'; +import existAction from './actions/exist.ts'; +import addMemberAction from './actions/addMember.ts'; +import getMembersAction from './actions/getMembers.ts'; +import getUriAction from './actions/getUri.ts'; +import isMemberAction from './actions/isMember.ts'; +import removeMemberAction from './actions/removeMember.ts'; +import getGroupsAction from './actions/getGroups.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; -module.exports = { - name: 'webacl.group', +const WebaclGroupSchema = { + name: 'webacl.group' as const, settings: { baseUrl: null, graphName: null, @@ -130,4 +131,14 @@ module.exports = { } } } -}; +} satisfies ServiceSchema; + +export default WebaclGroupSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclGroupSchema.name]: typeof WebaclGroupSchema; + } + } +} diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index 37c3a9e87..b6dfb3ad6 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -1,167 +1,165 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const urlJoin = require('url-join'); -const { +import { MIME_TYPES } from '@semapps/mime-types'; +import urlJoin from 'url-join'; + +import { getAclUriFromResourceUri, convertBodyToTriples, filterTriplesForResource, processRights, FULL_FOAF_AGENT, FULL_AGENTCLASS_URI -} = require('../../../utils'); +} from '../../../utils.ts'; + +import { defineAction } from 'moleculer'; + +export const api = async function api(ctx) { + const contentType = ctx.meta.headers['content-type']; + let { slugParts } = ctx.params; -module.exports = { - api: async function api(ctx) { - const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; + if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) + throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) - throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); + const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); - const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); - if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + await ctx.call('webacl.resource.addRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + addedRights + }); - await ctx.call('webacl.resource.addRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - addedRights - }); + ctx.meta.$statusCode = 204; +}; - ctx.meta.$statusCode = 204; +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + webId: { type: 'string', optional: true }, + // addedRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } + // you will most likely prefer to use additionalRights instead. + addedRights: { type: 'array', optional: true, min: 1 }, + // newRights is used to add rights to a non existing resource. + newRights: { type: 'object', optional: true }, + // additionalRights is used to add rights to an existing resource. + additionalRights: { type: 'object', optional: true } }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - webId: { type: 'string', optional: true }, - // addedRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } - // you will most likely prefer to use additionalRights instead. - addedRights: { type: 'array', optional: true, min: 1 }, - // newRights is used to add rights to a non existing resource. - newRights: { type: 'object', optional: true }, - // additionalRights is used to add rights to an existing resource. - additionalRights: { type: 'object', optional: true } - }, - async handler(ctx) { - let { webId, addedRights, resourceUri, newRights, additionalRights } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; - - let difference; - let currentAuths; - let isContainer; - - if (!newRights && (addedRights || additionalRights)) { - if (!addedRights && !additionalRights) - throw new MoleculerError( - 'please use addedRights or additionalRights, none were provided', - 403, - 'BAD_REQUEST' - ); - - isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - - await ctx.call('permissions.check', { - uri: resourceUri, - type: isContainer ? 'container' : 'resource', - mode: 'acl:Control', - webId - }); - - const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); - - if (!addedRights) { - // we process additionalRights only if addedRights was not set. - addedRights = processRights(additionalRights, `${aclUri}#`); - if (isContainer && additionalRights.default) - addedRights = addedRights.concat(processRights(additionalRights.default, `${aclUri}#Default`)); - if (addedRights.length === 0) new MoleculerError('No additional permissions to add!', 400, 'BAD_REQUEST'); - } else { - // filter out all the addedRights that are not for the resource - addedRights = addedRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); - if (addedRights.length === 0) - throw new MoleculerError('The rights cannot be added because they are incorrect', 400, 'BAD_REQUEST'); - } - - const currentPerms = await this.getExistingPerms( - ctx, - resourceUri, - this.settings.baseUrl, - this.settings.graphName, - isContainer - ); + async handler(ctx) { + let { webId, addedRights, resourceUri, newRights, additionalRights } = ctx.params; + webId = webId || ctx.meta.webId || 'anon'; - // find the difference between addedRights and currentPerms. add only what is not existent yet. - difference = addedRights.filter(x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p)); - if (difference.length === 0) return; - - // compile a list of Authorization already present. if some of them don't exist, we need to create them here below - currentAuths = this.compileAuthorizationNodesMap(currentPerms); - } else if (newRights) { - // TODO: check that the resource doesn't exist. otherwise, raise an error - if (webId !== 'system') - throw new MoleculerError( - 'Access denied! Only system can add permissions for a newly created resource', - 403, - 'ACCESS_DENIED' - ); - - // we set new rights for a non existing resource - const aclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, resourceUri)}#`; - difference = processRights(newRights, aclUri); - // we do add default container permissions if any is set in newRights. but we cannot know for sure - // that the resource that will be created will be a container. we don't want to add default permissions on a resource ! - // please be careful, as programmers, not to call newRights with 'default' perms for a resource. - // it should only be used for containers - if (newRights.default) difference = difference.concat(processRights(newRights.default, `${aclUri}Default`)); - currentAuths = {}; - } + let difference; + let currentAuths; + let isContainer; - let addRequest = ''; - for (const add of difference) { - if (!currentAuths[add.auth]) { - addRequest += this.generateNewAuthNode(add.auth); - currentAuths[add.auth] = true; - } - addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; - } + if (!newRights && (addedRights || additionalRights)) { + if (!addedRights && !additionalRights) + throw new MoleculerError('please use addedRights or additionalRights, none were provided', 403, 'BAD_REQUEST'); - if (addRequest.length > 0) { - await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }`, - webId: 'system' - }); - } + isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - if (newRights) { - const returnValues = { uri: resourceUri, created: true, isContainer }; - ctx.emit('webacl.resource.created', returnValues, { meta: { webId: null, dataset: null } }); - return returnValues; + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); + + const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); + + if (!addedRights) { + // we process additionalRights only if addedRights was not set. + addedRights = processRights(additionalRights, `${aclUri}#`); + if (isContainer && additionalRights.default) + addedRights = addedRights.concat(processRights(additionalRights.default, `${aclUri}#Default`)); + if (addedRights.length === 0) new MoleculerError('No additional permissions to add!', 400, 'BAD_REQUEST'); + } else { + // filter out all the addedRights that are not for the resource + addedRights = addedRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); + if (addedRights.length === 0) + throw new MoleculerError('The rights cannot be added because they are incorrect', 400, 'BAD_REQUEST'); } - const defaultRightsUpdated = isContainer && difference.some(triple => triple.auth.includes('#Default')); - const addPublicRead = difference.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + + const currentPerms = await this.getExistingPerms( + ctx, + resourceUri, + this.settings.baseUrl, + this.settings.graphName, + isContainer ); - const addDefaultPublicRead = - isContainer && - difference.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + + // find the difference between addedRights and currentPerms. add only what is not existent yet. + difference = addedRights.filter(x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p)); + if (difference.length === 0) return; + + // compile a list of Authorization already present. if some of them don't exist, we need to create them here below + currentAuths = this.compileAuthorizationNodesMap(currentPerms); + } else if (newRights) { + // TODO: check that the resource doesn't exist. otherwise, raise an error + if (webId !== 'system') + throw new MoleculerError( + 'Access denied! Only system can add permissions for a newly created resource', + 403, + 'ACCESS_DENIED' ); - const returnValues = { - uri: resourceUri, - dataset: ctx.meta.dataset, - webId, - created: false, - isContainer, - defaultRightsUpdated, - addPublicRead, - addDefaultPublicRead - }; - ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); + // we set new rights for a non existing resource + const aclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, resourceUri)}#`; + difference = processRights(newRights, aclUri); + // we do add default container permissions if any is set in newRights. but we cannot know for sure + // that the resource that will be created will be a container. we don't want to add default permissions on a resource ! + // please be careful, as programmers, not to call newRights with 'default' perms for a resource. + // it should only be used for containers + if (newRights.default) difference = difference.concat(processRights(newRights.default, `${aclUri}Default`)); + currentAuths = {}; + } + + let addRequest = ''; + for (const add of difference) { + if (!currentAuths[add.auth]) { + addRequest += this.generateNewAuthNode(add.auth); + currentAuths[add.auth] = true; + } + addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; + } + + if (addRequest.length > 0) { + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }`, + webId: 'system' + }); + } + + if (newRights) { + const returnValues = { uri: resourceUri, created: true, isContainer }; + ctx.emit('webacl.resource.created', returnValues, { meta: { webId: null, dataset: null } }); return returnValues; } + const defaultRightsUpdated = isContainer && difference.some(triple => triple.auth.includes('#Default')); + const addPublicRead = difference.some( + triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const addDefaultPublicRead = + isContainer && + difference.some( + triple => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + + const returnValues = { + uri: resourceUri, + dataset: ctx.meta.dataset, + webId, + created: false, + isContainer, + defaultRightsUpdated, + addPublicRead, + addDefaultPublicRead + }; + ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); + return returnValues; } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index cf33f66c9..12037a10d 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -1,37 +1,37 @@ -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - webId: { type: 'string' }, - timeout: { type: 'number', default: 10000 } - }, - handler(ctx) { - const { resourceUri, webId, timeout } = ctx.params; - return new Promise(resolve => { - let i = 0; - let interval; - const checkRights = () => { - ctx - .call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, - webId - }) - .then(rights => { - if (rights.read === true) { - if (interval) clearInterval(interval); - resolve(true); - } else if (i * 1000 >= timeout) { - if (interval) clearInterval(interval); - resolve(false); - } - i++; - }); - }; - checkRights(); // Try immediately, then launch interval - interval = setInterval(checkRights, 1000); - }); - } +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + webId: { type: 'string' }, + timeout: { type: 'number', default: 10000 } + }, + handler(ctx) { + const { resourceUri, webId, timeout } = ctx.params; + return new Promise(resolve => { + let i = 0; + let interval; + const checkRights = () => { + ctx + .call('webacl.resource.hasRights', { + resourceUri, + rights: { read: true }, + webId + }) + .then(rights => { + if (rights.read === true) { + if (interval) clearInterval(interval); + resolve(true); + } else if (i * 1000 >= timeout) { + if (interval) clearInterval(interval); + resolve(false); + } + i++; + }); + }; + checkRights(); // Try immediately, then launch interval + interval = setInterval(checkRights, 1000); + }); } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index cc052a8c5..b871cc1ae 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -1,31 +1,31 @@ -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string', optional: false } - }, - async handler(ctx) { - const { resourceUri } = ctx.params; +import { defineAction } from 'moleculer'; - const isContainer = await ctx.call('ldp.container.exist', { containerUri: resourceUri }); +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string', optional: false } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; - await ctx.call('triplestore.update', { - query: ` - PREFIX acl: - WITH <${this.settings.graphName}> - DELETE { ?auth ?p2 ?o } - WHERE { ?auth ?p <${resourceUri}>. - FILTER (?p IN (acl:accessTo, acl:default ) ) - ?auth ?p2 ?o } - `, - webId: 'system' - }); + const isContainer = await ctx.call('ldp.container.exist', { containerUri: resourceUri }); - ctx.emit( - 'webacl.resource.deleted', - { uri: resourceUri, dataset: ctx.meta.dataset, isContainer }, - { meta: { webId: null, dataset: null } } - ); - } + await ctx.call('triplestore.update', { + query: ` + PREFIX acl: + WITH <${this.settings.graphName}> + DELETE { ?auth ?p2 ?o } + WHERE { ?auth ?p <${resourceUri}>. + FILTER (?p IN (acl:accessTo, acl:default ) ) + ?auth ?p2 ?o } + `, + webId: 'system' + }); + + ctx.emit( + 'webacl.resource.deleted', + { uri: resourceUri, dataset: ctx.meta.dataset, isContainer }, + { meta: { webId: null, dataset: null } } + ); } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index f517e6957..e2da4b3af 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -1,27 +1,27 @@ -module.exports = { - action: { - visibility: 'public', - params: { - webId: { type: 'string', optional: false } - }, - async handler(ctx) { - const { webId } = ctx.params; +import { defineAction } from 'moleculer'; - await ctx.call('triplestore.update', { - query: ` - PREFIX acl: - WITH <${this.settings.graphName}> - DELETE { ?auth acl:agent <${webId}> } - WHERE { ?auth acl:agent <${webId}> } - `, - webId: 'system' - }); +export const action = defineAction({ + visibility: 'public', + params: { + webId: { type: 'string', optional: false } + }, + async handler(ctx) { + const { webId } = ctx.params; - ctx.emit( - 'webacl.resource.user-deleted', - { webId, dataset: ctx.meta.dataset }, - { meta: { webId: null, dataset: null } } - ); - } + await ctx.call('triplestore.update', { + query: ` + PREFIX acl: + WITH <${this.settings.graphName}> + DELETE { ?auth acl:agent <${webId}> } + WHERE { ?auth acl:agent <${webId}> } + `, + webId: 'system' + }); + + ctx.emit( + 'webacl.resource.user-deleted', + { webId, dataset: ctx.meta.dataset }, + { meta: { webId: null, dataset: null } } + ); } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index 1e7955f09..bc1363a57 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -1,17 +1,16 @@ -const { getAclUriFromResourceUri } = require('../../../utils'); +import { getAclUriFromResourceUri } from '../../../utils.ts'; +import { defineAction } from 'moleculer'; -module.exports = { - action: { - visibility: 'public', - params: { - uri: { type: 'string', optional: false } - }, - handler(ctx) { - const { uri } = ctx.params; - return { - uri: getAclUriFromResourceUri(this.settings.baseUrl, uri), - rel: 'acl' - }; - } +export const action = defineAction({ + visibility: 'public', + params: { + uri: { type: 'string', optional: false } + }, + handler(ctx) { + const { uri } = ctx.params; + return { + uri: getAclUriFromResourceUri(this.settings.baseUrl, uri), + rel: 'acl' + }; } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 067edfd2f..bce96f0f8 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -1,18 +1,19 @@ -const { JsonLdSerializer } = require('jsonld-streaming-serializer'); -const { DataFactory, Writer } = require('n3'); - +import { JsonLdSerializer } from 'jsonld-streaming-serializer'; +import { DataFactory, Writer } from 'n3'; const { quad } = DataFactory; -const urlJoin = require('url-join'); -const { MIME_TYPES } = require('@semapps/mime-types'); +import urlJoin from 'url-join'; +import { MIME_TYPES } from '@semapps/mime-types'; const { MoleculerError } = require('moleculer').Errors; -const { +import { getAuthorizationNode, findParentContainers, filterAgentAcl, getAclUriFromResourceUri, getUserAgentSearchParam -} = require('../../../utils'); +} from '../../../utils.ts'; + +import { defineAction } from 'moleculer'; const prefixes = { acl: 'http://www.w3.org/ns/auth/acl#', @@ -176,43 +177,42 @@ async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isCont return await formatOutput(ctx, document, resourceAclUri, ctx.meta.$responseType === MIME_TYPES.JSON); } -module.exports = { - api: async function api(ctx) { - const { accept } = ctx.meta.headers; - let { slugParts } = ctx.params; +export const api = async function api(ctx) { + const { accept } = ctx.meta.headers; + let { slugParts } = ctx.params; - if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) - throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); + if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) + throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - return await ctx.call('webacl.resource.getRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - accept - }); + return await ctx.call('webacl.resource.getRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + accept + }); +}; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + accept: { type: 'string', default: MIME_TYPES.JSON }, + webId: { type: 'string', optional: true }, + skipResourceCheck: { type: 'boolean', default: false } }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - accept: { type: 'string', default: MIME_TYPES.JSON }, - webId: { type: 'string', optional: true }, - skipResourceCheck: { type: 'boolean', default: false } - }, - cache: { - keys: ['resourceUri', 'accept', 'webId', '#webId'] - }, - async handler(ctx) { - let { resourceUri, webId, accept, skipResourceCheck } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; + cache: { + keys: ['resourceUri', 'accept', 'webId', '#webId'] + }, + async handler(ctx) { + let { resourceUri, webId, accept, skipResourceCheck } = ctx.params; + webId = webId || ctx.meta.webId || 'anon'; - accept = accept || MIME_TYPES.TURTLE; - ctx.meta.$responseType = accept; + accept = accept || MIME_TYPES.TURTLE; + ctx.meta.$responseType = accept; - const isContainer = !skipResourceCheck && (await this.checkResourceOrContainerExists(ctx, resourceUri)); + const isContainer = !skipResourceCheck && (await this.checkResourceOrContainerExists(ctx, resourceUri)); - return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); - } + return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index f47bdf1b5..10a817c64 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -1,32 +1,31 @@ -const { arrayOf } = require('@semapps/ldp'); +import { arrayOf } from '@semapps/ldp'; +import { defineAction } from 'moleculer'; -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' } - }, - async handler(ctx) { - const { resourceUri } = ctx.params; +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; - const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); - const readAuthorization = - authorizations['@graph'] && authorizations['@graph'].find(auth => auth['@id'] === '#Read'); + const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); + const readAuthorization = + authorizations['@graph'] && authorizations['@graph'].find(auth => auth['@id'] === '#Read'); - let usersWithReadRights = []; + let usersWithReadRights = []; - if (readAuthorization) { - usersWithReadRights = arrayOf(readAuthorization['acl:agent']); - const groupsWithReadRights = arrayOf(readAuthorization['acl:agentGroup']); + if (readAuthorization) { + usersWithReadRights = arrayOf(readAuthorization['acl:agent']); + const groupsWithReadRights = arrayOf(readAuthorization['acl:agentGroup']); - for (const groupUri of groupsWithReadRights) { - const members = await ctx.call('webacl.group.getMembers', { groupUri, webId: 'system' }); - if (members) usersWithReadRights.push(...members); - } + for (const groupUri of groupsWithReadRights) { + const members = await ctx.call('webacl.group.getMembers', { groupUri, webId: 'system' }); + if (members) usersWithReadRights.push(...members); } - - // Deduplicate (users might be in multiple groups). - return [...new Set(usersWithReadRights)]; } + + // Deduplicate (users might be in multiple groups). + return [...new Set(usersWithReadRights)]; } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index 7faf704a8..49578d33c 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -1,12 +1,15 @@ -const urlJoin = require('url-join'); -const { +import urlJoin from 'url-join'; + +import { getAuthorizationNode, checkAgentPresent, getUserGroups, findParentContainers, getUserAgentSearchParam, getAclUriFromResourceUri -} = require('../../../utils'); +} from '../../../utils.ts'; + +import { defineAction } from 'moleculer'; const perms = { read: 'Read', @@ -79,51 +82,50 @@ async function hasPermissions(ctx, resourceUri, askedRights, baseUrl, user, grap return resultRights; } -module.exports = { - api: async function api(ctx) { - let { slugParts } = ctx.params; +export const api = async function api(ctx) { + let { slugParts } = ctx.params; - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - return await ctx.call('webacl.resource.hasRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - rights: ctx.params.rights, - webId: ctx.meta.webId - }); - }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - rights: { - type: 'object', - optional: true, - strict: true, - props: { - read: { type: 'boolean', optional: true }, - write: { type: 'boolean', optional: true }, - append: { type: 'boolean', optional: true }, - control: { type: 'boolean', optional: true } - } - }, - webId: { type: 'string', optional: true } + return await ctx.call('webacl.resource.hasRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + rights: ctx.params.rights, + webId: ctx.meta.webId + }); +}; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + rights: { + type: 'object', + optional: true, + strict: true, + props: { + read: { type: 'boolean', optional: true }, + write: { type: 'boolean', optional: true }, + append: { type: 'boolean', optional: true }, + control: { type: 'boolean', optional: true } + } }, - cache: { - enabled(ctx) { - // Do not cache remote resources as we have no mecanism to clear this cache - return ctx.params.resourceUri.startsWith(this.settings.baseUrl); - }, - keys: ['resourceUri', 'rights', 'webId'] + webId: { type: 'string', optional: true } + }, + cache: { + enabled(ctx) { + // Do not cache remote resources as we have no mecanism to clear this cache + return ctx.params.resourceUri.startsWith(this.settings.baseUrl); }, - async handler(ctx) { - let { resourceUri, webId, rights } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; - rights = rights || {}; - if (Object.keys(rights).length === 0) rights = { read: true, write: true, append: true, control: true }; - - await this.checkResourceOrContainerExists(ctx, resourceUri); - return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); - } + keys: ['resourceUri', 'rights', 'webId'] + }, + async handler(ctx) { + let { resourceUri, webId, rights } = ctx.params; + webId = webId || ctx.meta.webId || 'anon'; + rights = rights || {}; + if (Object.keys(rights).length === 0) rights = { read: true, write: true, append: true, control: true }; + + await this.checkResourceOrContainerExists(ctx, resourceUri); + return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts index 282259883..ef94bdcf9 100644 --- a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts +++ b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts @@ -1,17 +1,17 @@ -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' } - }, - async handler(ctx) { - const { resourceUri } = ctx.params; - const { read } = await ctx.call('webacl.resource.hasRights', { - resourceUri, - rights: { read: true }, - webId: 'anon' - }); - return read; - } +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + const { read } = await ctx.call('webacl.resource.hasRights', { + resourceUri, + rights: { read: true }, + webId: 'anon' + }); + return read; } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index abcd6688a..b90bc591d 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,61 +1,60 @@ -const urlJoin = require('url-join'); - -module.exports = { - action: { - visibility: 'public', - async handler(ctx) { - const { webId } = ctx.params; - - const containers = await ctx.call('ldp.registry.list'); - - for (const { permissions, podsContainer, path } of Object.values(containers)) { - if (permissions && !podsContainer) { - const baseUrl = this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId }) - : this.settings.baseUrl; - - const containerUri = urlJoin(baseUrl, path); - - const containerRights = - typeof permissions === 'function' - ? permissions(this.settings.podProvider ? webId : 'system', ctx) - : permissions; - - this.logger.info(`Refreshing rights for container ${containerUri}...`); - - const publicPermissions = await ctx.call('webacl.resource.hasRights', { - resourceUri: containerUri, - rights: { read: true }, - webId: 'anon' - }); - - await ctx.call('webacl.resource.deleteAllRights', { - resourceUri: containerUri - }); - - await ctx.call('webacl.resource.addRights', { - resourceUri: containerUri, - additionalRights: containerRights, - webId: 'system' - }); - - const removePublicRead = publicPermissions.read && (!containerRights.anon || !containerRights.anon.read); - const removeDefaultPublicRead = - !containerRights.default || !containerRights.default.anon || !containerRights.default.anon.read; - - ctx.emit( - 'webacl.resource.updated', - { - uri: containerUri, - isContainer: true, - removePublicRead, - removeDefaultPublicRead, - dataset: ctx.meta.dataset - }, - { meta: { webId: null, dataset: null } } - ); - } +import urlJoin from 'url-join'; +import { defineAction } from 'moleculer'; + +export const action = defineAction({ + visibility: 'public', + async handler(ctx) { + const { webId } = ctx.params; + + const containers = await ctx.call('ldp.registry.list'); + + for (const { permissions, podsContainer, path } of Object.values(containers)) { + if (permissions && !podsContainer) { + const baseUrl = this.settings.podProvider + ? await ctx.call('solid-storage.getUrl', { webId }) + : this.settings.baseUrl; + + const containerUri = urlJoin(baseUrl, path); + + const containerRights = + typeof permissions === 'function' + ? permissions(this.settings.podProvider ? webId : 'system', ctx) + : permissions; + + this.logger.info(`Refreshing rights for container ${containerUri}...`); + + const publicPermissions = await ctx.call('webacl.resource.hasRights', { + resourceUri: containerUri, + rights: { read: true }, + webId: 'anon' + }); + + await ctx.call('webacl.resource.deleteAllRights', { + resourceUri: containerUri + }); + + await ctx.call('webacl.resource.addRights', { + resourceUri: containerUri, + additionalRights: containerRights, + webId: 'system' + }); + + const removePublicRead = publicPermissions.read && (!containerRights.anon || !containerRights.anon.read); + const removeDefaultPublicRead = + !containerRights.default || !containerRights.default.anon || !containerRights.default.anon.read; + + ctx.emit( + 'webacl.resource.updated', + { + uri: containerUri, + isContainer: true, + removePublicRead, + removeDefaultPublicRead, + dataset: ctx.meta.dataset + }, + { meta: { webId: null, dataset: null } } + ); } } } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 70d244440..3db9d0466 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -1,70 +1,71 @@ const { MoleculerError } = require('moleculer').Errors; -const { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } = require('../../../utils'); -module.exports = { - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string', optional: false }, - webId: { type: 'string', optional: true }, - /** In nested json format (e.g. `{anon: {read: true}}`) */ - rights: { type: 'object', optional: false } - }, - async handler(ctx) { - let { resourceUri, rights } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; +import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; - const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); +import { defineAction } from 'moleculer'; - const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string', optional: false }, + webId: { type: 'string', optional: true }, + /** In nested json format (e.g. `{anon: {read: true}}`) */ + rights: { type: 'object', optional: false } + }, + async handler(ctx) { + let { resourceUri, rights } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - await ctx.call('permissions.check', { - uri: resourceUri, - type: isContainer ? 'container' : 'resource', - mode: 'acl:Control', - webId - }); + const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); + + const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); + + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); - let processedRights = processRights(rights, `${aclUri}#`); - if (isContainer && rights.default) - processedRights = processedRights.concat(processRights(rights.default, `${aclUri}#Default`)); + let processedRights = processRights(rights, `${aclUri}#`); + if (isContainer && rights.default) + processedRights = processedRights.concat(processRights(rights.default, `${aclUri}#Default`)); - await ctx.call('triplestore.update', { - query: ` - PREFIX acl: - DELETE DATA { - GRAPH <${this.settings.graphName}> { - ${processedRights.map(right => `<${right.auth}> <${right.p}> <${right.o}> .`).join('\n')} - } + await ctx.call('triplestore.update', { + query: ` + PREFIX acl: + DELETE DATA { + GRAPH <${this.settings.graphName}> { + ${processedRights.map(right => `<${right.auth}> <${right.p}> <${right.o}> .`).join('\n')} } - `, - webId: 'system' - }); + } + `, + webId: 'system' + }); - const defaultRightsUpdated = isContainer && processedRights.some(triple => triple.auth.includes('#Default')); - const removePublicRead = processedRights.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + const defaultRightsUpdated = isContainer && processedRights.some(triple => triple.auth.includes('#Default')); + const removePublicRead = processedRights.some( + triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const removeDefaultPublicRead = + isContainer && + processedRights.some( + triple => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); - const removeDefaultPublicRead = - isContainer && - processedRights.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - ctx.emit( - 'webacl.resource.updated', - { - uri: resourceUri, - webId, - dataset: ctx.meta.dataset, - isContainer, - defaultRightsUpdated, - removePublicRead, - removeDefaultPublicRead - }, - { meta: { webId: null, dataset: null } } - ); - } + ctx.emit( + 'webacl.resource.updated', + { + uri: resourceUri, + webId, + dataset: ctx.meta.dataset, + isContainer, + defaultRightsUpdated, + removePublicRead, + removeDefaultPublicRead + }, + { meta: { webId: null, dataset: null } } + ); } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index ca8304229..0495f8c17 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -1,152 +1,154 @@ const { MoleculerError } = require('moleculer').Errors; -const { MIME_TYPES } = require('@semapps/mime-types'); -const urlJoin = require('url-join'); -const { +import { MIME_TYPES } from '@semapps/mime-types'; +import urlJoin from 'url-join'; + +import { getAclUriFromResourceUri, convertBodyToTriples, filterTriplesForResource, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT -} = require('../../../utils'); +} from '../../../utils.ts'; -module.exports = { - api: async function api(ctx) { - const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; +import { defineAction } from 'moleculer'; - if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) - throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); +export const api = async function api(ctx) { + const contentType = ctx.meta.headers['content-type']; + let { slugParts } = ctx.params; - const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); - if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); + if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) + throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); - await ctx.call('webacl.resource.setRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - newRights - }); + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - ctx.meta.$statusCode = 204; - }, - action: { - visibility: 'public', - params: { - resourceUri: { type: 'string' }, - webId: { type: 'string', optional: true }, - // newRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } - newRights: { type: 'array', optional: false, min: 1 } - // minimum is one right : We cannot leave a resource without rights. - }, - async handler(ctx) { - let { webId, newRights, resourceUri } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; - - const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - - await ctx.call('permissions.check', { - uri: resourceUri, - type: isContainer ? 'container' : 'resource', - mode: 'acl:Control', - webId - }); - - // filter out all the newRights that are not for the resource - const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); - newRights = newRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); - - if (newRights.length === 0) - throw new MoleculerError('The rights cannot be changed because they are incorrect', 400, 'BAD_REQUEST'); - - const currentPerms = await this.getExistingPerms( - ctx, - resourceUri, - this.settings.baseUrl, - this.settings.graphName, - isContainer - ); + await ctx.call('webacl.resource.setRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + newRights + }); - // find the difference between newRights and currentPerms. add only what is not existent yet. and remove those that are not needed anymore - const differenceAdd = newRights.filter( - x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) - ); - const differenceDelete = currentPerms.filter( - x => !newRights.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) - ); + ctx.meta.$statusCode = 204; +}; - if (differenceAdd.length === 0 && differenceDelete.length === 0) return; +export const action = defineAction({ + visibility: 'public', + params: { + resourceUri: { type: 'string' }, + webId: { type: 'string', optional: true }, + // newRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } + newRights: { type: 'array', optional: false, min: 1 } + // minimum is one right : We cannot leave a resource without rights. + }, + async handler(ctx) { + let { webId, newRights, resourceUri } = ctx.params; + webId = webId || ctx.meta.webId || 'anon'; - // compile a list of Authorization already present. because if some of them don't exist, we need to create them - const currentAuths = this.compileAuthorizationNodesMap(currentPerms); + const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); - let addRequest = ''; - for (const add of differenceAdd) { - if (!currentAuths[add.auth]) { - addRequest += this.generateNewAuthNode(add.auth); - currentAuths[add.auth] = 1; - } else { - currentAuths[add.auth] += 1; - } - addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; - } + await ctx.call('permissions.check', { + uri: resourceUri, + type: isContainer ? 'container' : 'resource', + mode: 'acl:Control', + webId + }); - let deleteRequest = ''; - for (const del of differenceDelete) { - deleteRequest += `<${del.auth}> <${del.p}> <${del.o}>.\n`; - currentAuths[del.auth] -= 1; + // filter out all the newRights that are not for the resource + const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); + newRights = newRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); + + if (newRights.length === 0) + throw new MoleculerError('The rights cannot be changed because they are incorrect', 400, 'BAD_REQUEST'); + + const currentPerms = await this.getExistingPerms( + ctx, + resourceUri, + this.settings.baseUrl, + this.settings.graphName, + isContainer + ); + + // find the difference between newRights and currentPerms. add only what is not existent yet. and remove those that are not needed anymore + const differenceAdd = newRights.filter( + x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) + ); + const differenceDelete = currentPerms.filter( + x => !newRights.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) + ); + + if (differenceAdd.length === 0 && differenceDelete.length === 0) return; + + // compile a list of Authorization already present. because if some of them don't exist, we need to create them + const currentAuths = this.compileAuthorizationNodesMap(currentPerms); + + let addRequest = ''; + for (const add of differenceAdd) { + if (!currentAuths[add.auth]) { + addRequest += this.generateNewAuthNode(add.auth); + currentAuths[add.auth] = 1; + } else { + currentAuths[add.auth] += 1; } + addRequest += `<${add.auth}> <${add.p}> <${add.o}>.\n`; + } - for (const [auth, count] of Object.entries(currentAuths)) { - if (count < 1) { - deleteRequest += this.generateNewAuthNode(auth); - } - } + let deleteRequest = ''; + for (const del of differenceDelete) { + deleteRequest += `<${del.auth}> <${del.p}> <${del.o}>.\n`; + currentAuths[del.auth] -= 1; + } - // we do the 2 calls in one, so it is in the same transaction, and will rollback in case of failure. - await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }; DELETE DATA { GRAPH <${this.settings.graphName}> { ${deleteRequest} } }`, - webId: 'system' - }); + for (const [auth, count] of Object.entries(currentAuths)) { + if (count < 1) { + deleteRequest += this.generateNewAuthNode(auth); + } + } - const defaultRightsUpdated = - isContainer && - (differenceAdd.some(triple => triple.auth.includes('#Default')) || - differenceDelete.some(triple => triple.auth.includes('#Default'))); + // we do the 2 calls in one, so it is in the same transaction, and will rollback in case of failure. + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }; DELETE DATA { GRAPH <${this.settings.graphName}> { ${deleteRequest} } }`, + webId: 'system' + }); - const addPublicRead = differenceAdd.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + const defaultRightsUpdated = + isContainer && + (differenceAdd.some(triple => triple.auth.includes('#Default')) || + differenceDelete.some(triple => triple.auth.includes('#Default'))); + + const addPublicRead = differenceAdd.some( + triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const removePublicRead = differenceDelete.some( + triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + ); + const addDefaultPublicRead = + isContainer && + differenceAdd.some( + triple => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); - const removePublicRead = differenceDelete.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + const removeDefaultPublicRead = + isContainer && + differenceDelete.some( + triple => + triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); - const addDefaultPublicRead = - isContainer && - differenceAdd.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - const removeDefaultPublicRead = - isContainer && - differenceDelete.some( - triple => - triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT - ); - - const returnValues = { - uri: resourceUri, - webId, - dataset: ctx.meta.dataset, - created: false, - isContainer, - defaultRightsUpdated, - addPublicRead, - removePublicRead, - addDefaultPublicRead, - removeDefaultPublicRead - }; - ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); - return returnValues; - } + + const returnValues = { + uri: resourceUri, + webId, + dataset: ctx.meta.dataset, + created: false, + isContainer, + defaultRightsUpdated, + addPublicRead, + removePublicRead, + addDefaultPublicRead, + removeDefaultPublicRead + }; + ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); + return returnValues; } -}; +}); diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index 84b373712..a53368b75 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -1,18 +1,19 @@ -const urlJoin = require('url-join'); +import urlJoin from 'url-join'; const { MoleculerError } = require('moleculer').Errors; -const addRights = require('./actions/addRights'); -const awaitReadRight = require('./actions/awaitReadRight'); -const deleteAllRights = require('./actions/deleteAllRights'); -const deleteAllUserRights = require('./actions/deleteAllUserRights'); -const getLink = require('./actions/getLink'); -const getRights = require('./actions/getRights'); -const getUsersWithReadRights = require('./actions/getUsersWithReadRights'); -const hasRights = require('./actions/hasRights'); -const isPublic = require('./actions/isPublic'); -const refreshContainersRights = require('./actions/refreshContainersRights'); -const removeRights = require('./actions/removeRights'); -const setRights = require('./actions/setRights'); -const { +import addRights from './actions/addRights.ts'; +import awaitReadRight from './actions/awaitReadRight.ts'; +import deleteAllRights from './actions/deleteAllRights.ts'; +import deleteAllUserRights from './actions/deleteAllUserRights.ts'; +import getLink from './actions/getLink.ts'; +import getRights from './actions/getRights.ts'; +import getUsersWithReadRights from './actions/getUsersWithReadRights.ts'; +import hasRights from './actions/hasRights.ts'; +import isPublic from './actions/isPublic.ts'; +import refreshContainersRights from './actions/refreshContainersRights.ts'; +import removeRights from './actions/removeRights.ts'; +import setRights from './actions/setRights.ts'; + +import { getAuthorizationNode, getAclUriFromResourceUri, aclGroupExists, @@ -23,8 +24,9 @@ const { FULL_TYPE_URI, ACL_NS, getDatasetFromUri -} = require('../../utils'); +} from '../../utils.ts'; +import { ServiceSchema, defineAction } from 'moleculer'; const filterAclsOnlyAgent = acl => agentPredicates.includes(acl.p.value); /** @@ -37,8 +39,8 @@ const filterAclsOnlyAgent = acl => agentPredicates.includes(acl.p.value); * - The nested json format as used in "additionalRights" (https://semapps.org/docs/middleware/webacl/resource#addrights) * - organized by user, group, anon, anyUser. See the documentation for the details. */ -module.exports = { - name: 'webacl.resource', +const WebaclResourceSchema = { + name: 'webacl.resource' as const, settings: { baseUrl: null, graphName: null, @@ -142,4 +144,14 @@ module.exports = { return cmd; } } -}; +} satisfies ServiceSchema; + +export default WebaclResourceSchema; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebaclResourceSchema.name]: typeof WebaclResourceSchema; + } + } +} diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index aee5b4efd..267b2d92f 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -1,11 +1,11 @@ -const { arrayOf } = require('@semapps/ldp'); -const { MIME_TYPES } = require('@semapps/mime-types'); +import { arrayOf } from '@semapps/ldp'; +import { MIME_TYPES } from '@semapps/mime-types'; const { MoleculerError } = require('moleculer').Errors; -const urlJoin = require('url-join'); -const { Parser } = require('n3'); -const streamifyString = require('streamify-string'); -const rdfParser = require('rdf-parse').default; - +import urlJoin from 'url-join'; +import { Parser } from 'n3'; +import streamifyString from 'streamify-string'; +import rdfparseModule from 'rdf-parse'; +const rdfParser = rdfparseModule.default; const getSlugFromUri = str => str.match(new RegExp(`.*/(.*)`))[1]; const hasType = (resource, type) => { @@ -34,8 +34,8 @@ const findParentContainers = async (ctx, resourceUri) => { const USER_GROUPS_QUERY = (member, ACLGraphName) => { return `SELECT ?group WHERE { - { ?group vcard:hasMember <${member}> . } - UNION { GRAPH <${ACLGraphName}> { ?group vcard:hasMember <${member}> . } } + { ?group vcard:hasMember <${member}> . } + UNION { GRAPH <${ACLGraphName}> { ?group vcard:hasMember <${member}> . } } UNION { ?group ?anyLink <${member}> . @@ -189,7 +189,6 @@ function filterAndConvertTriple(quad, property) { } const AuthorizationSuffixes = ['Read', 'Write', 'Append', 'Control']; - const AuthorizationDefaultSuffixes = ['DefaultRead', 'DefaultWrite', 'DefaultAppend', 'DefaultControl']; function filterTriplesForResource(triple, resourceAclUri, allowDefault) { @@ -291,7 +290,7 @@ const processRights = (rights, aclUri) => { return list; }; -module.exports = { +export { getSlugFromUri, hasType, getDatasetFromUri, diff --git a/src/middleware/packages/webfinger/index.ts b/src/middleware/packages/webfinger/index.ts index 2e4557b03..2717e5175 100644 --- a/src/middleware/packages/webfinger/index.ts +++ b/src/middleware/packages/webfinger/index.ts @@ -1,3 +1,2 @@ -module.exports = { - WebfingerService: require('./service') -}; +import WebfingerService from './service.ts'; +export { WebfingerService }; diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts index 84a2756ac..3c1fba17d 100644 --- a/src/middleware/packages/webfinger/service.ts +++ b/src/middleware/packages/webfinger/service.ts @@ -1,7 +1,8 @@ -const fetch = require('node-fetch'); +import fetch from 'node-fetch'; +import { ServiceSchema, defineAction } from 'moleculer'; const WebfingerService = { - name: 'webfinger', + name: 'webfinger' as const, settings: { baseUrl: null, domainName: null // If not set, will be extracted from baseUrl @@ -25,51 +26,64 @@ const WebfingerService = { }); }, actions: { - async get(ctx) { - const { resource } = ctx.params; + get: defineAction({ + async handler(ctx) { + const { resource } = ctx.params; - const usernameMatchRegex = new RegExp(`^acct:([\\w-_.]*)@${this.settings.domainName}$`); - const matches = resource?.match(usernameMatchRegex); + const usernameMatchRegex = new RegExp(`^acct:([\\w-_.]*)@${this.settings.domainName}$`); + const matches = resource?.match(usernameMatchRegex); - if (matches) { - const username = matches[1]; - const accounts = await ctx.call('auth.account.find', { query: { username } }); - if (accounts.length > 0) { - return { - subject: resource, - aliases: [accounts[0].webId], - links: [ - { - rel: 'self', - type: 'application/activity+json', - href: accounts[0].webId - } - ] - }; + if (matches) { + const username = matches[1]; + const accounts = await ctx.call('auth.account.find', { query: { username } }); + if (accounts.length > 0) { + return { + subject: resource, + aliases: [accounts[0].webId], + links: [ + { + rel: 'self', + type: 'application/activity+json', + href: accounts[0].webId + } + ] + }; + } } + + ctx.meta.$statusCode = 404; } + }), - ctx.meta.$statusCode = 404; - }, - // TODO add cache if response.ok - async getRemoteUri(ctx) { - const { account } = ctx.params; - const splitAccount = account.split('@'); - const domainName = splitAccount.pop(); - const userName = splitAccount.pop(); - const webfingerUrl = `http://${domainName}/.well-known/webfinger?resource=acct:${userName}@${domainName}`; + getRemoteUri: defineAction({ + // TODO add cache if response.ok + async handler(ctx) { + const { account } = ctx.params; + const splitAccount = account.split('@'); + const domainName = splitAccount.pop(); + const userName = splitAccount.pop(); + const webfingerUrl = `http://${domainName}/.well-known/webfinger?resource=acct:${userName}@${domainName}`; - const response = await fetch(webfingerUrl); + const response = await fetch(webfingerUrl); - if (response.ok) { - const json = await response.json(); - const link = json.links.find(l => l.type === 'application/activity+json'); - if (link) { - return link.href; + if (response.ok) { + const json = await response.json(); + const link = json.links.find(l => l.type === 'application/activity+json'); + if (link) { + return link.href; + } } } - } + }) } -}; +} satisfies ServiceSchema; + +export default WebfingerService; -module.exports = WebfingerService; +declare global { + export namespace Moleculer { + export interface AllServices { + [WebfingerService.name]: typeof WebfingerService; + } + } +} diff --git a/src/middleware/packages/webhooks/index.ts b/src/middleware/packages/webhooks/index.ts index 902e047ff..5ac1ab24c 100644 --- a/src/middleware/packages/webhooks/index.ts +++ b/src/middleware/packages/webhooks/index.ts @@ -1,3 +1,2 @@ -module.exports = { - WebhooksService: require('./service') -}; +import WebhooksService from './service.ts'; +export { WebhooksService }; diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index 8c2a19f78..a6b4be0f2 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -1,10 +1,11 @@ -const path = require('path'); -const DbService = require('moleculer-db'); +import path from 'path'; +import DbService from 'moleculer-db'; const { MoleculerError, ServiceSchemaError } = require('moleculer').Errors; -const { TripleStoreAdapter } = require('@semapps/triplestore'); +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; const WebhooksService = { - name: 'webhooks', + name: 'webhooks' as const, mixins: [DbService], adapter: new TripleStoreAdapter(), settings: { @@ -25,68 +26,76 @@ const WebhooksService = { } }, actions: { - async process(ctx) { - const { hash, ...data } = ctx.params; - let webhook; + process: defineAction({ + async handler(ctx) { + const { hash, ...data } = ctx.params; + let webhook; - try { - webhook = await this.actions.get({ id: hash }, { parentCtx: ctx }); - } catch (e) { - throw new MoleculerError('Webhook not found', 404, 'NOT_FOUND'); - } + try { + webhook = await this.actions.get({ id: hash }, { parentCtx: ctx }); + } catch (e) { + throw new MoleculerError('Webhook not found', 404, 'NOT_FOUND'); + } - if (this.createJob) { - this.createJob('webhooks', webhook.action, { data, user: webhook.user }); - } else { - // If no queue service is defined, run webhook immediately - return await this.actions[webhook.action]({ data, user: webhook.user }, { parentCtx: ctx }); + if (this.createJob) { + this.createJob('webhooks', webhook.action, { data, user: webhook.user }); + } else { + // If no queue service is defined, run webhook immediately + return await this.actions[webhook.action]({ data, user: webhook.user }, { parentCtx: ctx }); + } } - }, - async generate(ctx) { - const userUri = ctx.meta.webId || ctx.params.userUri; - const { action } = ctx.params; + }), - if (!userUri || userUri === 'anon' || !action || !this.settings.allowedActions.includes(action)) { - throw new MoleculerError('Bad request', 400, 'BAD_REQUEST'); - } + generate: defineAction({ + async handler(ctx) { + const userUri = ctx.meta.webId || ctx.params.userUri; + const { action } = ctx.params; - const webhook = await this.actions.create( - { - '@type': 'Webhook', - action, - user: userUri - }, - { parentCtx: ctx } - ); + if (!userUri || userUri === 'anon' || !action || !this.settings.allowedActions.includes(action)) { + throw new MoleculerError('Bad request', 400, 'BAD_REQUEST'); + } - return webhook['@id']; - }, - getApiRoutes(basePath) { - return [ - // Unsecured routes - { - path: path.join(basePath, '/webhooks'), - name: 'webhooks-process', - bodyParsers: { json: true }, - authorization: false, - authentication: true, - aliases: { - 'POST /:hash': 'webhooks.process' - } - }, - // Secured routes - { - path: path.join(basePath, '/webhooks'), - name: 'webhooks-generate', - bodyParsers: { json: true }, - authorization: true, - authentication: false, - aliases: { - 'POST /': 'webhooks.generate' + const webhook = await this.actions.create( + { + '@type': 'Webhook', + action, + user: userUri + }, + { parentCtx: ctx } + ); + + return webhook['@id']; + } + }), + + getApiRoutes: defineAction({ + handler(basePath) { + return [ + // Unsecured routes + { + path: path.join(basePath, '/webhooks'), + name: 'webhooks-process', + bodyParsers: { json: true }, + authorization: false, + authentication: true, + aliases: { + 'POST /:hash': 'webhooks.process' + } + }, + // Secured routes + { + path: path.join(basePath, '/webhooks'), + name: 'webhooks-generate', + bodyParsers: { json: true }, + authorization: true, + authentication: false, + aliases: { + 'POST /': 'webhooks.generate' + } } - } - ]; - } + ]; + } + }) }, queues: { webhooks: { @@ -102,6 +111,14 @@ const WebhooksService = { } } } -}; +} satisfies ServiceSchema; -module.exports = WebhooksService; +export default WebhooksService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebhooksService.name]: typeof WebhooksService; + } + } +} diff --git a/src/middleware/packages/webid/index.ts b/src/middleware/packages/webid/index.ts index 284a3ac82..d8dc6b74b 100644 --- a/src/middleware/packages/webid/index.ts +++ b/src/middleware/packages/webid/index.ts @@ -1,3 +1,2 @@ -module.exports = { - WebIdService: require('./service') -}; +import WebIdService from './service.ts'; +export { WebIdService }; diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 9423ae393..39e727936 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,10 +1,11 @@ -const urlJoin = require('url-join'); -const { foaf, schema } = require('@semapps/ontologies'); -const { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } = require('@semapps/ldp'); +import urlJoin from 'url-join'; +import { foaf, schema } from '@semapps/ontologies'; +import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; +import { ServiceSchema, defineAction } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const WebIdService = { - name: 'webid', + name: 'webid' as const, mixins: [ControlledContainerMixin, DereferenceMixin], settings: { baseUrl: null, @@ -30,81 +31,94 @@ const WebIdService = { await this.broker.call('ontologies.register', schema); }, actions: { - get(ctx) { - // Always get WebID as system and on the correct dataset, since they are public - return ctx.call( - 'ldp.resource.get', - { - ...ctx.params, - webId: 'system' - }, - { - meta: { - dataset: this.settings.podProvider ? getDatasetFromUri(ctx.params.resourceUri) : undefined + get: defineAction({ + handler(ctx) { + // Always get WebID as system and on the correct dataset, since they are public + return ctx.call( + 'ldp.resource.get', + { + ...ctx.params, + webId: 'system' + }, + { + meta: { + dataset: this.settings.podProvider ? getDatasetFromUri(ctx.params.resourceUri) : undefined + } } - } - ); - }, - /** - * This should only be called after the user has been authenticated - */ - async createWebId(ctx) { - let { email, nick, name, familyName, homepage, ...rest } = ctx.params; - - if (!nick && email) { - nick = email.split('@')[0].toLowerCase(); + ); } + }), - let webId; + createWebId: defineAction({ + /** + * This should only be called after the user has been authenticated + */ + async handler(ctx) { + let { email, nick, name, familyName, homepage, ...rest } = ctx.params; - const resource = { - '@type': 'foaf:Person', - 'foaf:nick': nick, - 'foaf:email': email, - 'foaf:name': name, - 'foaf:familyName': familyName, - 'foaf:homepage': homepage, - ...rest - }; + if (!nick && email) { + nick = email.split('@')[0].toLowerCase(); + } - if (this.settings.podProvider) { - // In Pod provider config, there is no LDP container for the webId, so we must create it directly - webId = urlJoin(this.settings.baseUrl, nick); - await this.actions.create( - { - resource: { - '@id': webId, - ...resource + let webId; + + const resource = { + '@type': 'foaf:Person', + 'foaf:nick': nick, + 'foaf:email': email, + 'foaf:name': name, + 'foaf:familyName': familyName, + 'foaf:homepage': homepage, + ...rest + }; + + if (this.settings.podProvider) { + // In Pod provider config, there is no LDP container for the webId, so we must create it directly + webId = urlJoin(this.settings.baseUrl, nick); + await this.actions.create( + { + resource: { + '@id': webId, + ...resource + }, + webId: 'system' }, - webId: 'system' - }, - { parentCtx: ctx } - ); - } else { - if (!this.settings.path) throw new Error('The path setting is required'); - webId = await this.actions.post( + { parentCtx: ctx } + ); + } else { + if (!this.settings.path) throw new Error('The path setting is required'); + webId = await this.actions.post( + { + resource, + slug: nick, + webId: 'system' + }, + { parentCtx: ctx } + ); + } + + const webIdData = await this.actions.get( { - resource, - slug: nick, + resourceUri: webId, webId: 'system' }, { parentCtx: ctx } ); - } - const webIdData = await this.actions.get( - { - resourceUri: webId, - webId: 'system' - }, - { parentCtx: ctx } - ); + ctx.emit('webid.created', webIdData, { meta: { webId: null, dataset: null } }); - ctx.emit('webid.created', webIdData, { meta: { webId: null, dataset: null } }); + return webId; + } + }) + } +} satisfies ServiceSchema; - return webId; +export default WebIdService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [WebIdService.name]: typeof WebIdService; } } -}; - -module.exports = WebIdService; +} diff --git a/src/middleware/tests/activitypub/actors.test.ts b/src/middleware/tests/activitypub/actors.test.ts index c3ad0e769..fb3e9633d 100644 --- a/src/middleware/tests/activitypub/actors.test.ts +++ b/src/middleware/tests/activitypub/actors.test.ts @@ -1,8 +1,6 @@ -const urlJoin = require('url-join'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import initialize from './initialize.ts'; jest.setTimeout(70000); - const NUM_USERS = 1; describe('Actors are correctly created', () => { diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index 5aed338d3..5b3fe8bfe 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -1,16 +1,15 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const { fetchServer } = require('../utils'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); - +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; +import CONFIG from '../config.ts'; jest.setTimeout(50000); - let broker; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index 7bc06fa5c..de7c490f5 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -1,9 +1,7 @@ -const urlJoin = require('url-join'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); - +import urlJoin from 'url-join'; +import initialize from './initialize.ts'; +import CONFIG from '../config.ts'; jest.setTimeout(50000); - let broker; beforeAll(async () => { diff --git a/src/middleware/tests/activitypub/follow.test.ts b/src/middleware/tests/activitypub/follow.test.ts index d393d788a..5f7b287d0 100644 --- a/src/middleware/tests/activitypub/follow.test.ts +++ b/src/middleware/tests/activitypub/follow.test.ts @@ -1,9 +1,7 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); - +import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(50_000); - const NUM_USERS = 2; describe.each(['single-server', 'multi-server'])('In mode %s, posting to followers', mode => { diff --git a/src/middleware/tests/activitypub/inbox.test.ts b/src/middleware/tests/activitypub/inbox.test.ts index ec72bbeb9..15de2f1af 100644 --- a/src/middleware/tests/activitypub/inbox.test.ts +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -1,9 +1,7 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); - +import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(50_000); - let broker; let broker2; @@ -11,6 +9,7 @@ beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); broker2 = broker; }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 2fe34a77d..2c267cd23 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -1,13 +1,13 @@ -const fse = require('fs-extra'); -const path = require('path'); -const urlJoin = require('url-join'); -const { ServiceBroker } = require('moleculer'); -const { AuthLocalService } = require('@semapps/auth'); -const { CoreService } = require('@semapps/core'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } = require('@semapps/activitypub'); -const CONFIG = require('../config'); -const { dropDataset, clearQueue } = require('../utils'); +import fse from 'fs-extra'; +import path from 'path'; +import urlJoin from 'url-join'; +import { ServiceBroker } from 'moleculer'; +import { AuthLocalService } from '@semapps/auth'; +import { CoreService } from '@semapps/core'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } from '@semapps/activitypub'; +import CONFIG from '../config.ts'; +import { dropDataset, clearQueue } from '../utils.ts'; const containers = [ { @@ -119,4 +119,4 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0 return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/activitypub/like.test.ts b/src/middleware/tests/activitypub/like.test.ts index db599aa3a..956f3c384 100644 --- a/src/middleware/tests/activitypub/like.test.ts +++ b/src/middleware/tests/activitypub/like.test.ts @@ -1,9 +1,7 @@ -const waitForExpect = require('wait-for-expect'); -const { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const initialize = require('./initialize'); - +import waitForExpect from 'wait-for-expect'; +import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - const NUM_USERS = 2; describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', mode => { diff --git a/src/middleware/tests/activitypub/message.test.ts b/src/middleware/tests/activitypub/message.test.ts index 8f5af3e50..acce3738f 100644 --- a/src/middleware/tests/activitypub/message.test.ts +++ b/src/middleware/tests/activitypub/message.test.ts @@ -1,9 +1,7 @@ -const waitForExpect = require('wait-for-expect'); -const { OBJECT_TYPES, ACTIVITY_TYPES } = require('@semapps/activitypub'); -const initialize = require('./initialize'); - +import waitForExpect from 'wait-for-expect'; +import { OBJECT_TYPES, ACTIVITY_TYPES } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(70000); - const NUM_USERS = 2; describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages', mode => { diff --git a/src/middleware/tests/activitypub/object.test.ts b/src/middleware/tests/activitypub/object.test.ts index 748046669..75c1f1af8 100644 --- a/src/middleware/tests/activitypub/object.test.ts +++ b/src/middleware/tests/activitypub/object.test.ts @@ -1,15 +1,14 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); - +import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; +import CONFIG from '../config.ts'; jest.setTimeout(50000); - let broker; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index f63d38dfa..30316de0e 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -1,9 +1,7 @@ -const { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); - +import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(50_000); - let broker; let broker2; @@ -11,6 +9,7 @@ beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); broker2 = broker; }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/activitypub/shares.test.ts b/src/middleware/tests/activitypub/shares.test.ts index ad680a4a0..4d91e3376 100644 --- a/src/middleware/tests/activitypub/shares.test.ts +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -1,9 +1,7 @@ -const waitForExpect = require('wait-for-expect'); -const { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } = require('@semapps/activitypub'); -const initialize = require('./initialize'); - +import waitForExpect from 'wait-for-expect'; +import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - const NUM_USERS = 2; describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', mode => { diff --git a/src/middleware/tests/config.ts b/src/middleware/tests/config.ts index cd330e4d4..ff246cfc0 100644 --- a/src/middleware/tests/config.ts +++ b/src/middleware/tests/config.ts @@ -2,13 +2,11 @@ // See https://github.com/kerimdzhanov/dotenv-flow for more details require('dotenv-flow').config(); -module.exports = { - HOME_URL: process.env.SEMAPPS_HOME_URL, - SPARQL_ENDPOINT: process.env.SEMAPPS_SPARQL_ENDPOINT, - MAIN_DATASET: process.env.SEMAPPS_MAIN_DATASET, - SETTINGS_DATASET: process.env.SEMAPPS_SETTINGS_DATASET, - JENA_USER: process.env.SEMAPPS_JENA_USER, - JENA_PASSWORD: process.env.SEMAPPS_JENA_PASSWORD, - ACTIVATE_CACHE: process.env.SEMAPPS_ACTIVATE_CACHE === 'true', - FUSEKI_BASE: process.env.FUSEKI_BASE -}; +export const HOME_URL = process.env.SEMAPPS_HOME_URL; +export const SPARQL_ENDPOINT = process.env.SEMAPPS_SPARQL_ENDPOINT; +export const MAIN_DATASET = process.env.SEMAPPS_MAIN_DATASET; +export const SETTINGS_DATASET = process.env.SEMAPPS_SETTINGS_DATASET; +export const JENA_USER = process.env.SEMAPPS_JENA_USER; +export const JENA_PASSWORD = process.env.SEMAPPS_JENA_PASSWORD; +export const ACTIVATE_CACHE = process.env.SEMAPPS_ACTIVATE_CACHE === 'true'; +export const FUSEKI_BASE = process.env.FUSEKI_BASE; diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index f513f2db6..50adeb318 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -1,13 +1,13 @@ -const fse = require('fs-extra'); -const fs = require('fs'); -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const { AuthLocalService } = require('@semapps/auth'); -const { CoreService } = require('@semapps/core'); -const { VerifiableCredentialsService } = require('@semapps/crypto'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const CONFIG = require('../config'); -const { dropDataset } = require('../utils'); +import fse from 'fs-extra'; +import fs from 'fs'; +import path from 'path'; +import { ServiceBroker } from 'moleculer'; +import { AuthLocalService } from '@semapps/auth'; +import { CoreService } from '@semapps/core'; +import { VerifiableCredentialsService } from '@semapps/crypto'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import CONFIG from '../config.ts'; +import { dropDataset } from '../utils.ts'; const initialize = async (port, withOldKeyStore = false) => { await dropDataset(CONFIG.MAIN_DATASET); @@ -97,4 +97,4 @@ const initialize = async (port, withOldKeyStore = false) => { return { broker, baseUrl }; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index 0c9516eee..a35debae4 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -1,12 +1,12 @@ -const { KEY_TYPES } = require('@semapps/crypto'); -const { arrayOf, waitForResource } = require('@semapps/ldp'); -const { wait } = require('../utils'); -const initialize = require('./initialize'); - +import { KEY_TYPES } from '@semapps/crypto'; +import { arrayOf, waitForResource } from '@semapps/ldp'; +import { wait } from '../utils.ts'; +import initialize from './initialize.ts'; jest.setTimeout(100_000); /** @type {import('moleculer').ServiceBroker} */ let broker; + let user; let user2; diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index 18ca8b5ef..7b846a8ef 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -1,7 +1,6 @@ -const { MIME_TYPES } = require('@semapps/mime-types'); -const path = require('node:path'); -const initialize = require('./initialize'); - +import { MIME_TYPES } from '@semapps/mime-types'; +import path from 'node:path'; +import initialize from './initialize.ts'; jest.setTimeout(45_000); const getChallengeFrom = async actor => { @@ -11,6 +10,7 @@ const getChallengeFrom = async actor => { /** @type {import('moleculer').ServiceBroker} */ let broker; + let baseUrl; let vcApiEndpoint; let alice; @@ -46,6 +46,7 @@ const setUpUser = async (broker, username) => { return user; }; + const setUp = async withOldKeyStore => { ({ broker, baseUrl } = await initialize(3000, withOldKeyStore)); vcApiEndpoint = path.join(baseUrl, 'vc/v0.3/'); diff --git a/src/middleware/tests/interop/initialize.ts b/src/middleware/tests/interop/initialize.ts index ff7ea7d8d..d009988a9 100644 --- a/src/middleware/tests/interop/initialize.ts +++ b/src/middleware/tests/interop/initialize.ts @@ -1,17 +1,17 @@ -const fse = require('fs-extra'); -const path = require('path'); -const urlJoin = require('url-join'); -const Redis = require('ioredis'); -const { ServiceBroker } = require('moleculer'); -const { FULL_ACTOR_TYPES, RelayService } = require('@semapps/activitypub'); -const { AuthLocalService } = require('@semapps/auth'); -const { CoreService } = require('@semapps/core'); -const { InferenceService } = require('@semapps/inference'); -const { pair } = require('@semapps/ontologies'); -const { MirrorService, ObjectsWatcherMiddleware } = require('@semapps/sync'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const CONFIG = require('../config'); -const { dropDataset } = require('../utils'); +import fse from 'fs-extra'; +import path from 'path'; +import urlJoin from 'url-join'; +import Redis from 'ioredis'; +import { ServiceBroker } from 'moleculer'; +import { FULL_ACTOR_TYPES, RelayService } from '@semapps/activitypub'; +import { AuthLocalService } from '@semapps/auth'; +import { CoreService } from '@semapps/core'; +import { InferenceService } from '@semapps/inference'; +import { pair } from '@semapps/ontologies'; +import { MirrorService, ObjectsWatcherMiddleware } from '@semapps/sync'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import CONFIG from '../config.ts'; +import { dropDataset } from '../utils.ts'; const containers = [ { @@ -131,4 +131,4 @@ const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, se return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/interop/mirror-protected.test.ts b/src/middleware/tests/interop/mirror-protected.test.ts index d63180e0c..df7556b13 100644 --- a/src/middleware/tests/interop/mirror-protected.test.ts +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -1,13 +1,10 @@ -const urlJoin = require('url-join'); -const waitForExpect = require('wait-for-expect'); -const { ACTIVITY_TYPES } = require('@semapps/activitypub'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import waitForExpect from 'wait-for-expect'; +import { ACTIVITY_TYPES } from '@semapps/activitypub'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - let server1; let server2; - const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; @@ -21,6 +18,7 @@ beforeAll(async () => { server2 = await initialize(3002, 'testData2', 'settings2', 2, 'http://localhost:3001'); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); diff --git a/src/middleware/tests/interop/mirror.test.ts b/src/middleware/tests/interop/mirror.test.ts index 6473234d9..920e11e71 100644 --- a/src/middleware/tests/interop/mirror.test.ts +++ b/src/middleware/tests/interop/mirror.test.ts @@ -1,13 +1,10 @@ -const urlJoin = require('url-join'); -const waitForExpect = require('wait-for-expect'); -const { triple, namedNode } = require('@rdfjs/data-model'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import waitForExpect from 'wait-for-expect'; +import { triple, namedNode } from '@rdfjs/data-model'; +import initialize from './initialize.ts'; jest.setTimeout(100000); - let server1; let server2; - const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; @@ -21,6 +18,7 @@ beforeAll(async () => { server2 = await initialize(3002, 'testData2', 'settings2', 2, 'http://localhost:3001'); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); diff --git a/src/middleware/tests/interop/patch-remote.test.ts b/src/middleware/tests/interop/patch-remote.test.ts index d415def4a..df0c8e6e6 100644 --- a/src/middleware/tests/interop/patch-remote.test.ts +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -1,9 +1,7 @@ -const waitForExpect = require('wait-for-expect'); -const { triple, namedNode } = require('@rdfjs/data-model'); -const initialize = require('./initialize'); - +import waitForExpect from 'wait-for-expect'; +import { triple, namedNode } from '@rdfjs/data-model'; +import initialize from './initialize.ts'; jest.setTimeout(50000); - let server1; let server2; @@ -11,6 +9,7 @@ beforeAll(async () => { server1 = await initialize(3001, 'testData1', 'settings1', 1); server2 = await initialize(3002, 'testData2', 'settings2', 2); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index 4b78f8efa..8a71f0716 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -1,9 +1,7 @@ -const { triple, namedNode } = require('rdf-data-model'); -const waitForExpect = require('wait-for-expect'); -const initialize = require('./initialize'); - +import { triple, namedNode } from 'rdf-data-model'; +import waitForExpect from 'wait-for-expect'; +import initialize from './initialize.ts'; jest.setTimeout(100000); - let server1; let server2; @@ -11,6 +9,7 @@ beforeAll(async () => { server1 = await initialize(3001, 'testData1', 'settings1', 1); server2 = await initialize(3002, 'testData2', 'settings2', 2); }); + afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); diff --git a/src/middleware/tests/jest.config.ts b/src/middleware/tests/jest.config.ts index 4a8eeb3d7..ba8300029 100644 --- a/src/middleware/tests/jest.config.ts +++ b/src/middleware/tests/jest.config.ts @@ -8,4 +8,4 @@ const config = { setupFilesAfterEnv: ['/jest.setup.js'] }; -module.exports = config; +export default config; diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index b98b682c6..139ea93ff 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -1,13 +1,13 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const ApiGatewayService = require('moleculer-web'); -const { JsonLdService } = require('@semapps/jsonld'); -const { OntologiesService } = require('@semapps/ontologies'); -const { TripleStoreService } = require('@semapps/triplestore'); -const CONFIG = require('../config'); -const { dropDataset } = require('../utils'); +import path from 'path'; +import { ServiceBroker } from 'moleculer'; +import ApiGatewayService from 'moleculer-web'; +import { JsonLdService } from '@semapps/jsonld'; +import { OntologiesService } from '@semapps/ontologies'; +import { TripleStoreService } from '@semapps/triplestore'; +import CONFIG from '../config.ts'; +import { dropDataset } from '../utils.ts'; -module.exports = async (cacher, persistRegistry) => { +export default async (cacher, persistRegistry) => { await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ diff --git a/src/middleware/tests/jsonld/merge.test.ts b/src/middleware/tests/jsonld/merge.test.ts index 2f1677905..708fc0667 100644 --- a/src/middleware/tests/jsonld/merge.test.ts +++ b/src/middleware/tests/jsonld/merge.test.ts @@ -1,11 +1,11 @@ -const initialize = require('../ontologies/initialize'); - +import initialize from '../ontologies/initialize.ts'; jest.setTimeout(10000); let broker; beforeAll(async () => { broker = await initialize(false, false); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 19f6810d7..0dd7c3a26 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -1,10 +1,9 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const waitForExpect = require('wait-for-expect'); -const { fetchServer } = require('../utils'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import waitForExpect from 'wait-for-expect'; +import { fetchServer } from '../utils.ts'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index f3b6f5e0d..b33127408 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -1,18 +1,18 @@ -const fetch = require('node-fetch'); -const fs = require('fs'); -const { join: pathJoin } = require('path'); -const urlJoin = require('url-join'); -const { getSlugFromUri } = require('@semapps/ldp'); -const { fetchServer } = require('../utils'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); - +import fetch from 'node-fetch'; +import fs from 'fs'; +import { join as pathJoin } from 'path'; +import urlJoin from 'url-join'; +import { getSlugFromUri } from '@semapps/ldp'; +import { fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; +import CONFIG from '../config.ts'; jest.setTimeout(20000); let broker; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/ldp/container-path.test.ts b/src/middleware/tests/ldp/container-path.test.ts index afa0852a6..e631b41b7 100644 --- a/src/middleware/tests/ldp/container-path.test.ts +++ b/src/middleware/tests/ldp/container-path.test.ts @@ -1,11 +1,11 @@ -const initialize = require('./initialize'); - +import initialize from './initialize.ts'; jest.setTimeout(10000); let broker; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 65534ffca..8f45f4b07 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -1,13 +1,13 @@ -const waitForExpect = require('wait-for-expect'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import waitForExpect from 'wait-for-expect'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); let broker; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 8121ec899..3e843ddaa 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -1,10 +1,9 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const { MIME_TYPES } = require('@semapps/mime-types'); -const { fetchServer } = require('../utils'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { fetchServer } from '../utils.ts'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index c9826987f..dfaeea7b7 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -1,15 +1,15 @@ -const urlJoin = require('url-join'); -const { parse: parseLinkHeader } = require('http-link-header'); -const { fetchServer } = require('../utils'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); - +import urlJoin from 'url-join'; +import { parse as parseLinkHeader } from 'http-link-header'; +import { fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; +import CONFIG from '../config.ts'; jest.setTimeout(20000); let broker; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index db263a8d7..ce1c6dc88 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -1,14 +1,14 @@ -const { ServiceBroker } = require('moleculer'); -const fs = require('fs'); -const { join: pathJoin } = require('path'); -const { CoreService } = require('@semapps/core'); -const { pair, petr } = require('@semapps/ontologies'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const { AuthLocalService } = require('@semapps/auth'); -const { ControlledContainerMixin } = require('@semapps/ldp'); -const path = require('path'); -const CONFIG = require('../config'); -const { dropDataset } = require('../utils'); +import { ServiceBroker, defineAction } from 'moleculer'; +import fs from 'fs'; +import { join as pathJoin } from 'path'; +import { CoreService } from '@semapps/core'; +import { pair, petr } from '@semapps/ontologies'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { AuthLocalService } from '@semapps/auth'; +import { ControlledContainerMixin } from '@semapps/ldp'; +import path from 'path'; +import CONFIG from '../config.ts'; +import { dropDataset } from '../utils.ts'; // Give write permission on all containers to anonymous users const permissions = { @@ -97,21 +97,23 @@ const initialize = async () => { }); broker.createService({ - name: 'event', + name: 'event' as const, mixins: [ControlledContainerMixin], settings: { acceptedTypes: ['pair:Event'], permissions }, actions: { - getHeaderLinks() { - return [ - { - uri: 'http://foo.bar', - rel: 'http://foo.baz' - } - ]; - } + getHeaderLinks: defineAction({ + handler() { + return [ + { + uri: 'http://foo.bar', + rel: 'http://foo.baz' + } + ]; + } + }) } }); @@ -120,4 +122,4 @@ const initialize = async () => { return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index d21569020..f4f8cef80 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,13 +1,13 @@ -const { quad, namedNode, blankNode, literal } = require('rdf-data-model'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import { quad, namedNode, blankNode, literal } from 'rdf-data-model'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(50000); let broker; beforeAll(async () => { broker = await initialize(); }); + afterAll(async () => { if (broker) await broker.stop(); }); diff --git a/src/middleware/tests/ontologies/initialize.ts b/src/middleware/tests/ontologies/initialize.ts index 859c79b93..1dce25903 100644 --- a/src/middleware/tests/ontologies/initialize.ts +++ b/src/middleware/tests/ontologies/initialize.ts @@ -1,13 +1,13 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const ApiGatewayService = require('moleculer-web'); -const { JsonLdService } = require('@semapps/jsonld'); -const { OntologiesService } = require('@semapps/ontologies'); -const { TripleStoreService } = require('@semapps/triplestore'); -const CONFIG = require('../config'); -const { dropDataset } = require('../utils'); +import path from 'path'; +import { ServiceBroker } from 'moleculer'; +import ApiGatewayService from 'moleculer-web'; +import { JsonLdService } from '@semapps/jsonld'; +import { OntologiesService } from '@semapps/ontologies'; +import { TripleStoreService } from '@semapps/triplestore'; +import CONFIG from '../config.ts'; +import { dropDataset } from '../utils.ts'; -module.exports = async cacher => { +export default async cacher => { await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ diff --git a/src/middleware/tests/ontologies/ontologies.test.ts b/src/middleware/tests/ontologies/ontologies.test.ts index 7d590b504..1920df4c8 100644 --- a/src/middleware/tests/ontologies/ontologies.test.ts +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -1,14 +1,12 @@ -const fetch = require('node-fetch'); -const urlJoin = require('url-join'); -const initialize = require('./initialize'); -const CONFIG = require('../config'); -const ont1 = require('./ontologies/ont1.json'); -const ont2 = require('./ontologies/ont2.json'); -const ont3 = require('./ontologies/ont3.json'); -const ont4 = require('./ontologies/ont4.json'); - +import fetch from 'node-fetch'; +import urlJoin from 'url-join'; +import initialize from './initialize.ts'; +import CONFIG from '../config.ts'; +import ont1 from './ontologies/ont1.json'; +import ont2 from './ontologies/ont2.json'; +import ont3 from './ontologies/ont3.json'; +import ont4 from './ontologies/ont4.json'; jest.setTimeout(10000); - const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); describe.each([false, true])('Register ontologies with cacher %s', cacher => { diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index faed245ef..25835ad6e 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -1,7 +1,7 @@ -const urlJoin = require('url-join'); -const fetch = require('node-fetch'); -const Redis = require('ioredis'); -const CONFIG = require('./config'); +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import Redis from 'ioredis'; +import CONFIG from './config.ts'; const listDatasets = async () => { const response = await fetch(`${CONFIG.SPARQL_ENDPOINT}$/datasets`, { @@ -87,10 +87,4 @@ const wait = ms => setTimeout(resolve, ms); }); -module.exports = { - dropDataset, - listDatasets, - fetchServer, - clearQueue, - wait -}; +export { dropDataset, listDatasets, fetchServer, clearQueue, wait }; diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts index 0549063ef..ea6bf6e27 100644 --- a/src/middleware/tests/webId/webId.test.ts +++ b/src/middleware/tests/webId/webId.test.ts @@ -1,10 +1,10 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const { CoreService } = require('@semapps/core'); -const CONFIG = require('../config'); -const { dropDataset } = require('../utils'); - +import path from 'path'; +import { ServiceBroker } from 'moleculer'; +import { CoreService } from '@semapps/core'; +import CONFIG from '../config.ts'; +import { dropDataset } from '../utils.ts'; jest.setTimeout(20000); + const broker = new ServiceBroker({ logger: { type: 'Console', diff --git a/src/middleware/tests/webacl/groupCRUD.test.ts b/src/middleware/tests/webacl/groupCRUD.test.ts index a0d82d23a..6dbcf3182 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.ts +++ b/src/middleware/tests/webacl/groupCRUD.test.ts @@ -1,9 +1,7 @@ -const urlJoin = require('url-join'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - let broker; beforeAll(async () => { diff --git a/src/middleware/tests/webacl/initialize.ts b/src/middleware/tests/webacl/initialize.ts index a698ee2f8..7a94314f7 100644 --- a/src/middleware/tests/webacl/initialize.ts +++ b/src/middleware/tests/webacl/initialize.ts @@ -1,11 +1,11 @@ -const path = require('path'); -const { ServiceBroker } = require('moleculer'); -const { CoreService } = require('@semapps/core'); -const { as } = require('@semapps/ontologies'); -const { WebAclMiddleware, CacherMiddleware } = require('@semapps/webacl'); -const { AuthLocalService } = require('@semapps/auth'); -const { dropDataset } = require('../utils'); -const CONFIG = require('../config'); +import path from 'path'; +import { ServiceBroker } from 'moleculer'; +import { CoreService } from '@semapps/core'; +import { as } from '@semapps/ontologies'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { AuthLocalService } from '@semapps/auth'; +import { dropDataset } from '../utils.ts'; +import CONFIG from '../config.ts'; const initialize = async () => { await dropDataset(CONFIG.MAIN_DATASET); @@ -84,4 +84,4 @@ const initialize = async () => { return broker; }; -module.exports = initialize; +export default initialize; diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts index cbe788526..3cd2a1b12 100644 --- a/src/middleware/tests/webacl/resource.test.ts +++ b/src/middleware/tests/webacl/resource.test.ts @@ -1,12 +1,9 @@ -const { namedNode, triple, literal } = require('@rdfjs/data-model'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import { namedNode, triple, literal } from '@rdfjs/data-model'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; - let broker; beforeAll(async () => { diff --git a/src/middleware/tests/webacl/resourceCRUD.test.ts b/src/middleware/tests/webacl/resourceCRUD.test.ts index 2ad4a7de9..64c4efc04 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.ts +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -1,13 +1,10 @@ -const urlJoin = require('url-join'); -const { getSlugFromUri } = require('@semapps/ldp'); -const { fetchServer } = require('../utils'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import { getSlugFromUri } from '@semapps/ldp'; +import { fetchServer } from '../utils.ts'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - const ALICE_WEBID = 'http://localhost:3000/alice'; - let broker; beforeAll(async () => { diff --git a/src/middleware/tests/webacl/sparql-injection.test.ts b/src/middleware/tests/webacl/sparql-injection.test.ts index 936e363be..18abde16b 100644 --- a/src/middleware/tests/webacl/sparql-injection.test.ts +++ b/src/middleware/tests/webacl/sparql-injection.test.ts @@ -1,9 +1,7 @@ -const urlJoin = require('url-join'); -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import urlJoin from 'url-join'; +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - let broker; beforeAll(async () => { diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts index 6e14444cb..a11ffc7bf 100644 --- a/src/middleware/tests/webacl/utils.test.ts +++ b/src/middleware/tests/webacl/utils.test.ts @@ -1,11 +1,8 @@ -const CONFIG = require('../config'); -const initialize = require('./initialize'); - +import CONFIG from '../config.ts'; +import initialize from './initialize.ts'; jest.setTimeout(20000); - const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; - let broker; beforeAll(async () => { From d2a536e01a4099f8e6dc43e634c7745505529939 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:17:55 +0300 Subject: [PATCH 050/165] make satisfies partial --- .../packages/activitypub/mixins/activities-handler.ts | 2 +- src/middleware/packages/activitypub/mixins/bot.ts | 2 +- src/middleware/packages/auth/mixins/auth.sso.ts | 2 +- src/middleware/packages/auth/mixins/auth.ts | 2 +- src/middleware/packages/importer/mixins/discourse.ts | 2 +- src/middleware/packages/importer/mixins/drupal.ts | 2 +- src/middleware/packages/importer/mixins/gogocarto.ts | 2 +- src/middleware/packages/importer/mixins/humhub.ts | 2 +- src/middleware/packages/importer/mixins/importer.ts | 2 +- src/middleware/packages/importer/mixins/jotform.ts | 2 +- src/middleware/packages/importer/mixins/mobilizon.ts | 2 +- src/middleware/packages/importer/mixins/prestashop.ts | 2 +- src/middleware/packages/importer/mixins/wordpress.ts | 2 +- src/middleware/packages/importer/mixins/yeswiki.ts | 2 +- src/middleware/packages/ldp/mixins/controlled-container.ts | 2 +- src/middleware/packages/ldp/mixins/dereference.ts | 2 +- src/middleware/packages/ldp/mixins/disassembly.ts | 2 +- src/middleware/packages/ldp/mixins/document-tagger.ts | 2 +- src/middleware/packages/ldp/mixins/image-processor.ts | 2 +- src/middleware/packages/ldp/mixins/mime-types.ts | 2 +- src/middleware/packages/ldp/mixins/orphan-files-deletion.ts | 2 +- src/middleware/packages/ldp/mixins/pseudo-id.ts | 2 +- src/middleware/packages/ldp/mixins/single-resource-container.ts | 2 +- src/middleware/packages/ldp/mixins/special-endpoint.ts | 2 +- .../notifications/channels/notification-channel.mixin.ts | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts index c7ccddfcc..f9544417b 100644 --- a/src/middleware/packages/activitypub/mixins/activities-handler.ts +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -50,6 +50,6 @@ const ActivitiesHandlerMixin = { } }) } -} satisfies ServiceSchema; +} satisfies Partial; export default ActivitiesHandlerMixin; diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index d3fa68a2e..b0a2b4353 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -94,6 +94,6 @@ const BotMixin = { return arrayOf(result?.items); } } -} satisfies ServiceSchema; +} satisfies Partial; export default BotMixin; diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index eb0812dc8..5ab586bd2 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -94,6 +94,6 @@ const AuthSSOMixin = { ]; } } -} satisfies ServiceSchema; +} satisfies Partial; export default AuthSSOMixin; diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index c8eb22c32..ac06e9f07 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -248,6 +248,6 @@ const AuthMixin = { } } } -} satisfies ServiceSchema; +} satisfies Partial; export default AuthMixin; diff --git a/src/middleware/packages/importer/mixins/discourse.ts b/src/middleware/packages/importer/mixins/discourse.ts index c44d331d3..bf05e80a2 100644 --- a/src/middleware/packages/importer/mixins/discourse.ts +++ b/src/middleware/packages/importer/mixins/discourse.ts @@ -43,6 +43,6 @@ const Schema = { } } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/drupal.ts b/src/middleware/packages/importer/mixins/drupal.ts index 0d86a6046..092204fe0 100644 --- a/src/middleware/packages/importer/mixins/drupal.ts +++ b/src/middleware/packages/importer/mixins/drupal.ts @@ -39,6 +39,6 @@ const Schema = { return false; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/gogocarto.ts b/src/middleware/packages/importer/mixins/gogocarto.ts index 99ce8e4da..9a99186bd 100644 --- a/src/middleware/packages/importer/mixins/gogocarto.ts +++ b/src/middleware/packages/importer/mixins/gogocarto.ts @@ -42,6 +42,6 @@ const Schema = { return result.data; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/humhub.ts b/src/middleware/packages/importer/mixins/humhub.ts index e9abeb927..b7d0082d5 100644 --- a/src/middleware/packages/importer/mixins/humhub.ts +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -109,6 +109,6 @@ const Schema = { return results; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 2f5f7d7bf..9988a06a5 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -546,6 +546,6 @@ const Schema = { }; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/jotform.ts b/src/middleware/packages/importer/mixins/jotform.ts index f1b88d791..e74e8cee5 100644 --- a/src/middleware/packages/importer/mixins/jotform.ts +++ b/src/middleware/packages/importer/mixins/jotform.ts @@ -51,6 +51,6 @@ const Schema = { return false; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/mobilizon.ts b/src/middleware/packages/importer/mixins/mobilizon.ts index 37eb3b457..e3bf01c03 100644 --- a/src/middleware/packages/importer/mixins/mobilizon.ts +++ b/src/middleware/packages/importer/mixins/mobilizon.ts @@ -55,6 +55,6 @@ const Schema = { return results && results.data && results.data.events && results.data.events.elements; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/prestashop.ts b/src/middleware/packages/importer/mixins/prestashop.ts index d51ce3d61..4f38bb662 100644 --- a/src/middleware/packages/importer/mixins/prestashop.ts +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -60,6 +60,6 @@ const Schema = { return false; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index fdc35f889..6d02c1167 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -98,6 +98,6 @@ const Schema = { } } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/importer/mixins/yeswiki.ts b/src/middleware/packages/importer/mixins/yeswiki.ts index c70c753d4..023597613 100644 --- a/src/middleware/packages/importer/mixins/yeswiki.ts +++ b/src/middleware/packages/importer/mixins/yeswiki.ts @@ -47,6 +47,6 @@ const Schema = { return false; } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index ff444897f..407e97237 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -168,6 +168,6 @@ const Schema = { } }) } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/dereference.ts b/src/middleware/packages/ldp/mixins/dereference.ts index ce94d04bd..e95f86de9 100644 --- a/src/middleware/packages/ldp/mixins/dereference.ts +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -147,6 +147,6 @@ const Schema = { get: ['handleAfterGet'] } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index fb5567f36..bc41b9ab2 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -145,6 +145,6 @@ const Schema = { } } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 3e5189033..4f73ed37f 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -94,6 +94,6 @@ const Schema = { } }) } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index 4e505b2d3..e39117e63 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -99,6 +99,6 @@ const Schema = { } } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index 96c4500cf..1527a7228 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -32,6 +32,6 @@ const Schema = { } } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index eaf4e7d5c..9ceee61ff 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -67,6 +67,6 @@ const Schema = { stopped() { this.cronJob?.stop(); } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/pseudo-id.ts b/src/middleware/packages/ldp/mixins/pseudo-id.ts index 25842afba..1abe545b5 100644 --- a/src/middleware/packages/ldp/mixins/pseudo-id.ts +++ b/src/middleware/packages/ldp/mixins/pseudo-id.ts @@ -90,6 +90,6 @@ const Schema = { list: ['handleAfterGet'] } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index 26ea11dae..912f8e068 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -113,6 +113,6 @@ const Schema = { } }) } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index 3d2307d08..dc118ee89 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -98,6 +98,6 @@ const Schema = { } }) } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index a89d4c9a6..cf48e24a6 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -338,6 +338,6 @@ const Schema = { } } } -} satisfies ServiceSchema; +} satisfies Partial; export default Schema; From 4c8a3a66fdbd067fe8627e6218b75395d39addf9 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:18:25 +0300 Subject: [PATCH 051/165] remove define wrappers --- .../activitypub/mixins/activities-handler.ts | 6 +- .../packages/activitypub/mixins/bot.ts | 10 +-- .../activitypub/services/activity-mapping.ts | 14 ++-- .../activitypub/subservices/activity.ts | 18 ++--- .../services/activitypub/subservices/actor.ts | 38 +++++----- .../services/activitypub/subservices/api.ts | 14 ++-- .../subservices/collection/actions/get.ts | 6 +- .../subservices/collection/index.ts | 38 +++++----- .../subservices/collections-registry.ts | 42 +++++------ .../activitypub/subservices/follow.ts | 26 +++---- .../services/activitypub/subservices/inbox.ts | 14 ++-- .../services/activitypub/subservices/like.ts | 22 +++--- .../activitypub/subservices/object.ts | 22 +++--- .../activitypub/subservices/outbox.ts | 10 +-- .../services/activitypub/subservices/reply.ts | 18 ++--- .../services/activitypub/subservices/share.ts | 14 ++-- .../activitypub/subservices/side-effects.ts | 18 ++--- .../activitypub/services/migration.ts | 10 +-- .../packages/activitypub/services/relay.ts | 6 +- .../packages/auth/mixins/auth.sso.ts | 6 +- src/middleware/packages/auth/mixins/auth.ts | 14 ++-- .../packages/auth/services/account.ts | 70 +++++++++---------- .../packages/auth/services/auth.local.ts | 26 +++---- src/middleware/packages/auth/services/jwt.ts | 22 +++--- src/middleware/packages/auth/services/mail.ts | 6 +- .../packages/auth/services/migration.ts | 6 +- src/middleware/packages/backup/index.ts | 26 +++---- .../packages/crypto/keys/key-container.ts | 10 +-- src/middleware/packages/crypto/keys/keys.ts | 70 +++++++++---------- .../packages/crypto/keys/migration.ts | 10 +-- .../crypto/keys/public-key-container.ts | 6 +- .../crypto/signature/http-signatures.ts | 22 +++--- .../packages/crypto/signature/keypair.ts | 34 ++++----- .../packages/crypto/signature/proxy.ts | 14 ++-- .../challenge-service.ts | 22 +++--- .../data-integrity-service.ts | 10 +-- .../vc-authorizer-service.ts | 6 +- .../vc-credential-container.ts | 18 ++--- .../vc-holder-service.ts | 6 +- .../vc-issuer-service.ts | 6 +- .../vc-presentation-container.ts | 18 ++--- .../vc-verifier-service.ts | 14 ++-- .../packages/importer/mixins/importer.ts | 30 ++++---- src/middleware/packages/inference/service.ts | 22 +++--- .../packages/inference/subservices/remote.ts | 6 +- .../packages/jsonld/services/api/index.ts | 6 +- .../jsonld/services/context/actions/get.ts | 6 +- .../services/context/actions/getLocal.ts | 6 +- .../jsonld/services/context/actions/merge.ts | 6 +- .../jsonld/services/context/actions/parse.ts | 6 +- .../services/context/actions/validate.ts | 6 +- .../jsonld/services/document-loader/index.ts | 14 ++-- .../packages/jsonld/services/parser/index.ts | 46 ++++++------ .../ldp/mixins/controlled-container.ts | 54 +++++++------- .../packages/ldp/mixins/document-tagger.ts | 22 +++--- .../packages/ldp/mixins/image-processor.ts | 10 +-- .../ldp/mixins/orphan-files-deletion.ts | 6 +- .../ldp/mixins/single-resource-container.ts | 22 +++--- .../packages/ldp/mixins/special-endpoint.ts | 10 +-- src/middleware/packages/ldp/service.ts | 14 ++-- .../packages/ldp/services/cache/index.ts | 58 +++++++-------- .../ldp/services/container/actions/attach.ts | 6 +- .../ldp/services/container/actions/clear.ts | 6 +- .../ldp/services/container/actions/create.ts | 6 +- .../container/actions/createAndAttach.ts | 6 +- .../ldp/services/container/actions/delete.ts | 6 +- .../ldp/services/container/actions/detach.ts | 6 +- .../ldp/services/container/actions/exist.ts | 6 +- .../ldp/services/container/actions/get.ts | 6 +- .../ldp/services/container/actions/getAll.ts | 6 +- .../ldp/services/container/actions/getPath.ts | 6 +- .../ldp/services/container/actions/getUris.ts | 6 +- .../services/container/actions/includes.ts | 6 +- .../ldp/services/container/actions/isEmpty.ts | 6 +- .../ldp/services/container/actions/patch.ts | 6 +- .../ldp/services/container/actions/post.ts | 6 +- .../ldp/services/link-header/actions/get.ts | 6 +- .../services/link-header/actions/register.ts | 6 +- .../permissions/actions/addAuthorizer.ts | 6 +- .../ldp/services/permissions/actions/check.ts | 6 +- .../ldp/services/permissions/actions/has.ts | 6 +- .../services/registry/actions/getByType.ts | 6 +- .../ldp/services/registry/actions/getByUri.ts | 6 +- .../ldp/services/registry/actions/getUri.ts | 6 +- .../ldp/services/registry/actions/register.ts | 6 +- .../packages/ldp/services/registry/index.ts | 6 +- .../ldp/services/remote/actions/delete.ts | 6 +- .../ldp/services/remote/actions/get.ts | 6 +- .../ldp/services/remote/actions/getNetwork.ts | 6 +- .../ldp/services/remote/actions/getStored.ts | 6 +- .../ldp/services/remote/actions/isRemote.ts | 6 +- .../ldp/services/remote/actions/store.ts | 6 +- .../packages/ldp/services/remote/index.ts | 6 +- .../resource/actions/awaitCreateComplete.ts | 6 +- .../ldp/services/resource/actions/create.ts | 6 +- .../ldp/services/resource/actions/delete.ts | 6 +- .../ldp/services/resource/actions/exist.ts | 6 +- .../services/resource/actions/generateId.ts | 6 +- .../ldp/services/resource/actions/get.ts | 6 +- .../resource/actions/getContainers.ts | 6 +- .../ldp/services/resource/actions/getTypes.ts | 6 +- .../ldp/services/resource/actions/patch.ts | 6 +- .../ldp/services/resource/actions/put.ts | 6 +- .../ldp/services/resource/actions/upload.ts | 6 +- src/middleware/packages/migration/service.ts | 26 +++---- src/middleware/packages/nodeinfo/service.ts | 18 ++--- .../notifications/services/digest/service.ts | 6 +- .../services/digest/subscription.ts | 6 +- .../services/expo-push/device.ts | 10 +-- .../services/expo-push/notification.ts | 18 ++--- .../services/single-mail/service.ts | 6 +- .../ontologies/actions/findNamespace.ts | 6 +- .../packages/ontologies/actions/findPrefix.ts | 6 +- .../packages/ontologies/actions/get.ts | 6 +- .../ontologies/actions/getPrefixes.ts | 6 +- .../ontologies/actions/getRdfPrefixes.ts | 6 +- .../packages/ontologies/actions/list.ts | 6 +- .../ontologies/actions/prefixToUri.ts | 6 +- .../packages/ontologies/actions/register.ts | 6 +- .../ontologies/sub-services/registry.ts | 18 ++--- .../packages/solid/services/authorizer.ts | 6 +- .../packages/solid/services/endpoint.ts | 6 +- .../channels/notification-channel.mixin.ts | 46 ++++++------ .../notifications/channels/webhook-channel.ts | 10 +-- .../solid/services/notifications/listener.ts | 14 ++-- .../packages/solid/services/storage.ts | 14 ++-- .../solid/services/type-index/type-indexes.ts | 30 ++++---- .../services/type-index/type-registrations.ts | 34 ++++----- .../packages/sparql-endpoint/service.ts | 10 +-- .../packages/sync/services/mirror.ts | 6 +- .../actions/countTriplesOfSubject.ts | 6 +- .../actions/deleteOrphanBlankNodes.ts | 6 +- .../packages/triplestore/actions/dropAll.ts | 6 +- .../packages/triplestore/actions/insert.ts | 6 +- .../packages/triplestore/actions/query.ts | 6 +- .../triplestore/actions/tripleExist.ts | 6 +- .../packages/triplestore/actions/update.ts | 6 +- .../triplestore/subservices/dataset.ts | 34 ++++----- .../triplestore/subservices/document.ts | 18 ++--- src/middleware/packages/void/service.ts | 14 ++-- .../packages/webacl/bots/authorizer-bot.ts | 10 +-- .../packages/webacl/bots/groups-manager.ts | 18 ++--- .../webacl/services/authorizer/index.ts | 6 +- .../packages/webacl/services/cache/index.ts | 42 +++++------ .../services/group/actions/addMember.ts | 6 +- .../webacl/services/group/actions/create.ts | 6 +- .../webacl/services/group/actions/delete.ts | 6 +- .../webacl/services/group/actions/exist.ts | 6 +- .../services/group/actions/getGroups.ts | 6 +- .../services/group/actions/getMembers.ts | 6 +- .../webacl/services/group/actions/getUri.ts | 6 +- .../webacl/services/group/actions/isMember.ts | 6 +- .../services/group/actions/removeMember.ts | 6 +- .../services/resource/actions/addRights.ts | 6 +- .../resource/actions/awaitReadRight.ts | 6 +- .../resource/actions/deleteAllRights.ts | 6 +- .../resource/actions/deleteAllUserRights.ts | 6 +- .../services/resource/actions/getLink.ts | 6 +- .../services/resource/actions/getRights.ts | 6 +- .../actions/getUsersWithReadRights.ts | 6 +- .../services/resource/actions/hasRights.ts | 6 +- .../services/resource/actions/isPublic.ts | 6 +- .../actions/refreshContainersRights.ts | 6 +- .../services/resource/actions/removeRights.ts | 6 +- .../services/resource/actions/setRights.ts | 6 +- src/middleware/packages/webfinger/service.ts | 10 +-- src/middleware/packages/webhooks/service.ts | 14 ++-- src/middleware/packages/webid/service.ts | 10 +-- src/middleware/tests/ldp/initialize.ts | 6 +- 169 files changed, 1039 insertions(+), 1039 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts index f9544417b..595cc5ae6 100644 --- a/src/middleware/packages/activitypub/mixins/activities-handler.ts +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ActivitiesHandlerMixin = { dependencies: ['activitypub.side-effects'], @@ -26,7 +26,7 @@ const ActivitiesHandlerMixin = { } }, actions: { - processActivity: defineAction({ + processActivity: { async handler(ctx) { const { key, boxType, dereferencedActivity, actorUri } = ctx.params; @@ -48,7 +48,7 @@ const ActivitiesHandlerMixin = { return dereferencedActivity; } } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index b0a2b4353..bd9421165 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import { arrayOf } from '@semapps/ldp'; import { ACTOR_TYPES } from '../constants.ts'; import { getSlugFromUri, getContainerFromUri } from '../utils.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const BotMixin = { settings: { @@ -69,14 +69,14 @@ const BotMixin = { } }, actions: { - getUri: defineAction({ + getUri: { handler() { return this.settings.actor.uri; } - }) + } }, events: { - 'activitypub.inbox.received': defineServiceEvent({ + 'activitypub.inbox.received': { handler(ctx) { if (this.inboxReceived) { if (ctx.params.recipients.includes(this.settings.actor.uri)) { @@ -84,7 +84,7 @@ const BotMixin = { } } } - }) + } }, methods: { async getFollowers() { diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 4de70c632..7abccab6d 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -1,7 +1,7 @@ import Handlebars from 'handlebars'; import matchActivity from '../utils/matchActivity.ts'; import { ACTIVITY_TYPES } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ActivityMappingService = { name: 'activity-mapping' as const, @@ -25,7 +25,7 @@ const ActivityMappingService = { } }, actions: { - map: defineAction({ + map: { async handler(ctx) { let { activity, locale, ...rest } = ctx.params; @@ -81,9 +81,9 @@ const ActivityMappingService = { } } } - }), + }, - addMapper: defineAction({ + addMapper: { async handler(ctx) { const { match, mapping, priority = 1 } = ctx.params; @@ -98,13 +98,13 @@ const ActivityMappingService = { // Reorder cached mappings this.prioritizeMappers(); } - }), + }, - getMappers: defineAction({ + getMappers: { handler() { return this.mappers; } - }) + } }, methods: { matchActivity(ctx, pattern, activityOrObject) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index da0a7bf9d..16d5722d3 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -4,7 +4,7 @@ import setRightsHandler from './activity-handlers/setRightsHandler.ts'; import { arrayOf } from '../../../utils.ts'; import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ActivityService = { name: 'activitypub.activity' as const, @@ -29,13 +29,13 @@ const ActivityService = { }, dependencies: ['ldp.container'], actions: { - forbidden: defineAction({ + forbidden: { handler() { throw new E.ForbiddenError(); } - }), + }, - getRecipients: defineAction({ + getRecipients: { async handler(ctx) { const { activity } = ctx.params; const output = []; @@ -77,17 +77,17 @@ const ActivityService = { // Remove duplicates return [...new Set(output)]; } - }), + }, - getLocalRecipients: defineAction({ + getLocalRecipients: { async handler(ctx) { const { activity } = ctx.params; const recipients = await this.actions.getRecipients({ activity }, { parentCtx: ctx }); return recipients.filter(recipientUri => this.isLocalActor(recipientUri)); } - }), + }, - isPublic: defineAction({ + isPublic: { handler(ctx) { const { activity } = ctx.params; // We accept all three representations, as required by https://www.w3.org/TR/activitypub/#public-addressing @@ -96,7 +96,7 @@ const ActivityService = { ? arrayOf(activity.to).some(r => publicRepresentations.includes(r)) : false; } - }) + } }, methods: { isLocalActor(uri) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index be20dc904..664854ac4 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -3,7 +3,7 @@ import { namedNode, literal, triple, variable } from '@rdfjs/data-model'; import { arrayOf } from '@semapps/ldp'; import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; import { getSlugFromUri, waitForResource } from '../../../utils.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const ActorService = { @@ -15,7 +15,7 @@ const ActorService = { podProvider: false }, actions: { - get: defineAction({ + get: { async handler(ctx) { const { actorUri, webId } = ctx.params; // If dataset is not in the meta, assume that actor is remote @@ -35,9 +35,9 @@ const ActorService = { return actor; } } - }), + }, - getProfile: defineAction({ + getProfile: { async handler(ctx) { const { actorUri, webId } = ctx.params; const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); @@ -46,9 +46,9 @@ const ActorService = { return await ctx.call('ldp.resource.get', { resourceUri: actor.url, webId }); } } - }), + }, - appendActorData: defineAction({ + appendActorData: { async handler(ctx) { const { actorUri } = ctx.params; const userData = await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx }); @@ -83,9 +83,9 @@ const ActorService = { }); } } - }), + }, - addEndpoint: defineAction({ + addEndpoint: { async handler(ctx) { const { actorUri, predicate, endpoint } = ctx.params; @@ -159,9 +159,9 @@ const ActorService = { dataset }); } - }), + }, - awaitCreateComplete: defineAction({ + awaitCreateComplete: { async handler(ctx) { const { actorUri, additionalKeys = [], delayMs = 1000, maxTries = 20 } = ctx.params; const keysToCheck = ['publicKey', 'outbox', 'inbox', 'followers', 'following', ...additionalKeys]; @@ -173,16 +173,16 @@ const ActorService = { async () => await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx, meta: { $cache: false } }) ); } - }), + }, - getCollectionUri: defineAction({ + getCollectionUri: { cache: true, async handler(ctx) { const { actorUri, predicate, webId } = ctx.params; const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); return actor && actor[predicate]; } - }) + } }, methods: { isActor(resource) { @@ -190,7 +190,7 @@ const ActorService = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { const { resourceUri, newData } = ctx.params; if (this.isActor(newData)) { @@ -199,23 +199,23 @@ const ActorService = { await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { const { resourceUri, oldData } = ctx.params; if (this.isActor(oldData)) { await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); } } - }), + }, - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index 286f64817..61e69bb16 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -14,7 +14,7 @@ import { } from '@semapps/middlewares'; import { FULL_ACTOR_TYPES } from '../../../constants.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ApiService = { name: 'activitypub.api' as const, @@ -46,7 +46,7 @@ const ApiService = { } }, actions: { - inbox: defineAction({ + inbox: { async handler(ctx) { const { actorSlug, ...activity } = ctx.params; const { requestUrl } = ctx.meta; @@ -59,9 +59,9 @@ const ApiService = { ctx.meta.$statusCode = 202; } - }), + }, - outbox: defineAction({ + outbox: { async handler(ctx) { let { actorSlug, ...activity } = ctx.params; const { requestUrl } = ctx.meta; @@ -80,10 +80,10 @@ const ApiService = { ctx.meta.$location = activity.id || activity['@id']; ctx.meta.$statusCode = 201; } - }) + } }, events: { - 'ldp.registry.registered': defineServiceEvent({ + 'ldp.registry.registered': { async handler(ctx) { const { container } = ctx.params; const { pathname: basePath } = new URL(this.settings.baseUri); @@ -100,7 +100,7 @@ const ApiService = { }); } } - }) + } }, methods: { getBoxesRoute(actorsPath) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 2535bd30a..492b3ead7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,7 +1,7 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; const { MoleculerError } = require('moleculer').Errors; import { getValueFromDataType } from '../../../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Retrieves the collection metadata from the triplestore @@ -284,7 +284,7 @@ function formatResponse( }; } -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -357,6 +357,6 @@ const Schema = defineAction({ context: jsonContext || localContext }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 59774efdf..b4b4a8f14 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -3,7 +3,7 @@ import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/l import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { Errors as E } from 'moleculer-web'; import getAction from './actions/get.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const CollectionService = { name: 'activitypub.collection' as const, @@ -49,13 +49,13 @@ const CollectionService = { }, dependencies: ['triplestore', 'ldp.resource'], actions: { - put: defineAction({ + put: { handler() { throw new E.ForbiddenError(); } - }), + }, - patch: defineAction({ + patch: { async handler(ctx) { const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; @@ -93,9 +93,9 @@ const CollectionService = { } } } - }), + }, - post: defineAction({ + post: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); @@ -122,9 +122,9 @@ const CollectionService = { return await ctx.call('ldp.container.post', ctx.params); } - }), + }, - isEmpty: defineAction({ + isEmpty: { /* * Checks if the collection is empty * @param collectionUri The full URI of the collection @@ -148,9 +148,9 @@ const CollectionService = { }); return Number(res[0].count.value) === 0; } - }), + }, - includes: defineAction({ + includes: { /* * Checks if an item is in a collection * @param collectionUri The full URI of the collection @@ -175,9 +175,9 @@ const CollectionService = { webId: 'system' }); } - }), + }, - add: defineAction({ + add: { /* * Attach an object to a collection * @param collectionUri The full URI of the collection @@ -216,9 +216,9 @@ const CollectionService = { itemUri }); } - }), + }, - remove: defineAction({ + remove: { /* * Detach an object from a collection * @param collectionUri The full URI of the collection @@ -250,11 +250,11 @@ const CollectionService = { itemUri }); } - }), + }, get: getAction, - clear: defineAction({ + clear: { /* * Empty the collection, deleting all items it contains. * @param collectionUri The full URI of the collection @@ -282,9 +282,9 @@ const CollectionService = { webId: 'system' }); } - }), + }, - getOwner: defineAction({ + getOwner: { /* * Get the owner of collections attached to actors * @param collectionUri The full URI of the collection @@ -313,7 +313,7 @@ const CollectionService = { return results.length > 0 ? results[0].actorUri.value : null; } - }) + } }, methods: { getCollectionDataset(collectionUri) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 69dfcf988..2a2a6f9c3 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -3,7 +3,7 @@ import { quad, namedNode } from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; import { getWebIdFromUri, arrayOf } from '@semapps/ldp'; import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const CollectionsRegistryService = { name: 'activitypub.collections-registry' as const, @@ -17,7 +17,7 @@ const CollectionsRegistryService = { this.collectionsInCreation = []; }, actions: { - register: defineAction({ + register: { async handler(ctx) { let { path, name, attachToTypes, ...options } = ctx.params; if (!name) name = path; @@ -30,15 +30,15 @@ const CollectionsRegistryService = { // Persist the collection in memory this.registeredCollections.push({ path, name, attachToTypes, ...options }); } - }), + }, - list: defineAction({ + list: { handler() { return this.registeredCollections; } - }), + }, - createAndAttachCollection: defineAction({ + createAndAttachCollection: { async handler(ctx) { const { objectUri, collection } = ctx.params; const { @@ -96,9 +96,9 @@ const CollectionsRegistryService = { return collectionUri; } - }), + }, - deleteCollection: defineAction({ + deleteCollection: { async handler(ctx) { const { objectUri, collection } = ctx.params; const resourceUri = urlJoin(objectUri, collection.path); @@ -109,9 +109,9 @@ const CollectionsRegistryService = { await ctx.call('activitypub.collection.delete', { resourceUri, webId: 'system' }); } } - }), + }, - createAndAttachMissingCollections: defineAction({ + createAndAttachMissingCollections: { async handler(ctx) { for (const collection of this.registeredCollections) { this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); @@ -139,9 +139,9 @@ const CollectionsRegistryService = { } } } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { let { collection, dataset } = ctx.params; let { attachPredicate, ordered, summary, dereferenceItems, itemsPerPage, sortPredicate, sortOrder } = @@ -214,7 +214,7 @@ const CollectionsRegistryService = { } } } - }) + } }, methods: { // Get the collections attached to the given type @@ -259,7 +259,7 @@ const CollectionsRegistryService = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { const { resourceUri, newData } = ctx.params; const collections = this.getCollectionsByType(newData.type || newData['@type']); @@ -272,9 +272,9 @@ const CollectionsRegistryService = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { const { resourceUri, newData, oldData } = ctx.params; // Check if we need to create collection only if the type has changed @@ -290,9 +290,9 @@ const CollectionsRegistryService = { } } } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { const { resourceUri, triplesAdded } = ctx.params; if (triplesAdded) { @@ -317,9 +317,9 @@ const CollectionsRegistryService = { } } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { const { oldData } = ctx.params; const collections = this.getCollectionsByType(oldData.type || oldData['@type']); @@ -330,7 +330,7 @@ const CollectionsRegistryService = { ); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index 96685fe04..c229b4f3f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -1,7 +1,7 @@ import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const FollowService = { name: 'activitypub.follow' as const, @@ -31,7 +31,7 @@ const FollowService = { await this.broker.call('activitypub.collections-registry.register', this.settings.followingCollectionOptions); }, actions: { - addFollower: defineAction({ + addFollower: { async handler(ctx) { const { follower, following } = ctx.params; @@ -58,9 +58,9 @@ const FollowService = { ctx.emit('activitypub.follow.added', { follower, following }, { meta: { webId: null, dataset: null } }); } - }), + }, - removeFollower: defineAction({ + removeFollower: { async handler(ctx) { const { follower, following } = ctx.params; @@ -87,9 +87,9 @@ const FollowService = { ctx.emit('activitypub.follow.removed', { follower, following }, { meta: { webId: null, dataset: null } }); } - }), + }, - isFollowing: defineAction({ + isFollowing: { async handler(ctx) { const { follower, following } = ctx.params; @@ -102,9 +102,9 @@ const FollowService = { itemUri: following }); } - }), + }, - listFollowers: defineAction({ + listFollowers: { async handler(ctx) { const { collectionUri } = ctx.params; @@ -112,9 +112,9 @@ const FollowService = { resourceUri: collectionUri }); } - }), + }, - listFollowing: defineAction({ + listFollowing: { async handler(ctx) { const { collectionUri } = ctx.params; @@ -122,9 +122,9 @@ const FollowService = { resourceUri: collectionUri }); } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -136,7 +136,7 @@ const FollowService = { dataset }); } - }) + } }, activities: { follow: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index f879d90d6..33a046819 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -3,7 +3,7 @@ const { MoleculerError } = require('moleculer').Errors; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const InboxService = { @@ -28,7 +28,7 @@ const InboxService = { await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - post: defineAction({ + post: { async handler(ctx) { const { collectionUri, ...activity } = ctx.params; @@ -143,9 +143,9 @@ const InboxService = { { meta: { webId: null, dataset: null } } ); } - }), + }, - getByDates: defineAction({ + getByDates: { async handler(ctx) { const { collectionUri, fromDate, toDate } = ctx.params; @@ -182,9 +182,9 @@ const InboxService = { return activities; } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -192,7 +192,7 @@ const InboxService = { dataset }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index d673187a3..f025176f7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -1,7 +1,7 @@ import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const LikeService = { name: 'activitypub.like' as const, @@ -30,7 +30,7 @@ const LikeService = { await this.broker.call('activitypub.collections-registry.register', this.settings.likedCollectionOptions); }, actions: { - addObjectToActorLikedCollection: defineAction({ + addObjectToActorLikedCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -44,9 +44,9 @@ const LikeService = { }); } } - }), + }, - addActorToObjectLikesCollection: defineAction({ + addActorToObjectLikesCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -60,9 +60,9 @@ const LikeService = { item: actorUri }); } - }), + }, - removeObjectFromActorLikedCollection: defineAction({ + removeObjectFromActorLikedCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -76,9 +76,9 @@ const LikeService = { }); } } - }), + }, - removeActorFromObjectLikesCollection: defineAction({ + removeActorFromObjectLikesCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -92,9 +92,9 @@ const LikeService = { }); } } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -106,7 +106,7 @@ const LikeService = { dataset }); } - }) + } }, activities: { likeObject: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 47fb4927d..10eb37e61 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,6 +1,6 @@ import { getType } from '@semapps/ldp'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ObjectService = { name: 'activitypub.object' as const, @@ -11,7 +11,7 @@ const ObjectService = { }, dependencies: ['ldp.resource'], actions: { - get: defineAction({ + get: { async handler(ctx) { const { objectUri, actorUri, ...rest } = ctx.params; @@ -24,9 +24,9 @@ const ObjectService = { ...rest }); } - }), + }, - wrap: defineAction({ + wrap: { // If an object is passed directly, wrap it in a Create activity async handler(ctx) { const { activity } = ctx.params; @@ -45,9 +45,9 @@ const ObjectService = { return activity; } } - }), + }, - process: defineAction({ + process: { async handler(ctx) { let { activity, actorUri } = ctx.params; let objectUri; @@ -173,9 +173,9 @@ const ObjectService = { return activity; } - }), + }, - createTombstone: defineAction({ + createTombstone: { async handler(ctx) { const { resourceUri, formerType } = ctx.params; const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); @@ -199,10 +199,10 @@ const ObjectService = { webId: 'system' }); } - }) + } }, events: { - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // Check if tombstones are globally activated if (this.settings.activateTombstones) { @@ -223,7 +223,7 @@ const ObjectService = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index cc8adf52f..ad196f79a 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -5,7 +5,7 @@ import { getType, arrayOf } from '@semapps/ldp'; import { collectionPermissionsWithAnonRead, getSlugFromUri } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const queueOptions = process.env.NODE_ENV === 'test' @@ -42,7 +42,7 @@ const OutboxService = { await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - post: defineAction({ + post: { async handler(ctx) { let { collectionUri, username, transient, ...activity } = ctx.params; let activityUri; @@ -169,9 +169,9 @@ const OutboxService = { return activity; } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -179,7 +179,7 @@ const OutboxService = { dataset }); } - }) + } }, methods: { isLocalActor(uri) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 42dee4db7..5a7d7209a 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -3,7 +3,7 @@ import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import matchActivity from '../../../utils/matchActivity.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ReplyService = { name: 'activitypub.reply' as const, @@ -21,7 +21,7 @@ const ReplyService = { }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { - addReply: defineAction({ + addReply: { async handler(ctx) { const { objectUri, replyUri } = ctx.params; @@ -33,9 +33,9 @@ const ReplyService = { await ctx.call('activitypub.collection.add', { collectionUri, item: replyUri }); } - }), + }, - removeReply: defineAction({ + removeReply: { async handler(ctx) { const { objectUri, replyUri } = ctx.params; @@ -46,9 +46,9 @@ const ReplyService = { await ctx.call('activitypub.collection.remove', { collectionUri: object.replies, item: replyUri }); } } - }), + }, - removeFromAllRepliesCollections: defineAction({ + removeFromAllRepliesCollections: { async handler(ctx) { const { objectUri } = ctx.params; @@ -73,9 +73,9 @@ const ReplyService = { webId: 'system' }); } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -83,7 +83,7 @@ const ReplyService = { dataset }); } - }) + } }, activities: { postReply: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index 0b62126f6..2cf79eeea 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -2,7 +2,7 @@ import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import matchActivity from '../../../utils/matchActivity.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ShareService = { name: 'activitypub.share' as const, @@ -20,7 +20,7 @@ const ShareService = { }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { - addShare: defineAction({ + addShare: { async handler(ctx) { const { objectUri, announce } = ctx.params; @@ -33,9 +33,9 @@ const ShareService = { // Add the announce to the shares collection await ctx.call('activitypub.collection.add', { collectionUri, item: announce.id }); } - }), + }, - removeShare: defineAction({ + removeShare: { async handler(ctx) { const { objectUri, announce } = ctx.params; @@ -49,9 +49,9 @@ const ShareService = { }); } } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -59,7 +59,7 @@ const ShareService = { dataset }); } - }) + } }, activities: { shareObject: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index f4dd8ce17..5e5183af7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -1,7 +1,7 @@ import { credentialsContext } from '@semapps/crypto'; import { arrayOf } from '@semapps/ldp'; import matchActivity from '../../../utils/matchActivity.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Allow any service to process activities just after they are posted to the inbox or outbox. @@ -17,7 +17,7 @@ const ActivitypubSideEffectsSchema = { this.processors = []; }, actions: { - addProcessor: defineAction({ + addProcessor: { /** * Add a new processor to handle activities */ @@ -29,9 +29,9 @@ const ActivitypubSideEffectsSchema = { // Sort processors by priority this.processors.sort((a, b) => a.priority - b.priority); } - }), + }, - processOutbox: defineAction({ + processOutbox: { /** * Called by activitypub.outbox.post when an activity is posted */ @@ -47,9 +47,9 @@ const ActivitypubSideEffectsSchema = { await job.finished(); } - }), + }, - processInbox: defineAction({ + processInbox: { /** * Called by activitypub.inbox.post when an activity is received * and by activitypub.outbox.post when an activity is sent to a local actor @@ -66,13 +66,13 @@ const ActivitypubSideEffectsSchema = { await job.finished(); } - }), + }, - getProcessors: defineAction({ + getProcessors: { handler() { return this.processors; } - }) + } }, methods: { matchActivity(pattern, activity, fetcher) { diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts index c25ac53e4..7c178b66f 100644 --- a/src/middleware/packages/activitypub/services/migration.ts +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -1,9 +1,9 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ActivitypubMigrationSchema = { name: 'activitypub.migration' as const, actions: { - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { await ctx.call('activitypub.follow.updateCollectionsOptions'); await ctx.call('activitypub.inbox.updateCollectionsOptions'); @@ -11,9 +11,9 @@ const ActivitypubMigrationSchema = { await ctx.call('activitypub.like.updateCollectionsOptions'); await ctx.call('activitypub.reply.updateCollectionsOptions'); } - }), + }, - addCollectionsToContainer: defineAction({ + addCollectionsToContainer: { // This shouldn't be used in Pod provider config async handler(ctx) { const collectionsContainerUri = await ctx.call('activitypub.collection.getContainerUri'); @@ -38,7 +38,7 @@ const ActivitypubMigrationSchema = { webId: 'system' }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts index 46397c589..b1d05931a 100644 --- a/src/middleware/packages/activitypub/services/relay.ts +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { ACTOR_TYPES } from '../constants.ts'; import { delay } from '../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const RelayService = { name: 'activitypub.relay' as const, @@ -70,12 +70,12 @@ const RelayService = { this.relayActor = await this.broker.call('activitypub.actor.awaitCreateComplete', { actorUri }); }, actions: { - getActor: defineAction({ + getActor: { visibility: 'public', handler() { return this.relayActor; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index 5ab586bd2..e9f74c031 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -4,7 +4,7 @@ import AuthMixin from './auth.ts'; import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; import redirectToFront from '../middlewares/redirectToFront.ts'; import localLogout from '../middlewares/localLogout.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const AuthSSOMixin = { mixins: [AuthMixin], @@ -19,7 +19,7 @@ const AuthSSOMixin = { selectSsoData: null }, actions: { - loginOrSignup: defineAction({ + loginOrSignup: { async handler(ctx) { const { ssoData } = ctx.params; @@ -69,7 +69,7 @@ const AuthSSOMixin = { return { token, newUser }; } - }) + } }, methods: { getApiRoutes(basePath) { diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index ac06e9f07..003e57f27 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -3,7 +3,7 @@ import { Errors as E } from 'moleculer-web'; import { TripleStoreAdapter } from '@semapps/triplestore'; import AuthAccountService from '../services/account.ts'; import AuthJWTService from '../services/jwt.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Auth Mixin that handles authentication and authorization for routes @@ -110,7 +110,7 @@ const AuthMixin = { } }, actions: { - authenticate: defineAction({ + authenticate: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication async handler(ctx) { const { route, req, res } = ctx.params; @@ -145,9 +145,9 @@ const AuthMixin = { ctx.meta.webId = 'anon'; return Promise.resolve(null); } - }), + }, - authorize: defineAction({ + authorize: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization async handler(ctx) { const { route, req, res } = ctx.params; @@ -177,9 +177,9 @@ const AuthMixin = { return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } - }), + }, - impersonate: defineAction({ + impersonate: { async handler(ctx) { const { webId } = ctx.params; return await ctx.call('auth.jwt.generateServerSignedToken', { @@ -188,7 +188,7 @@ const AuthMixin = { } }); } - }) + } }, methods: { async validateCapability(ctx, token) { diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index e81ac1f75..6d649d47f 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -3,7 +3,7 @@ import createSlug from 'speakingurl'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; import crypto from 'crypto'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; // Taken from https://stackoverflow.com/a/9204568/7900695 const emailRegexp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; @@ -20,7 +20,7 @@ const AuthAccountSchema = { }, dependencies: ['triplestore'], actions: { - create: defineAction({ + create: { async handler(ctx) { let { uuid, username, password, email, webId, ...rest } = ctx.params; @@ -88,9 +88,9 @@ const AuthAccountSchema = { webId }); } - }), + }, - attachWebId: defineAction({ + attachWebId: { async handler(ctx) { const { accountUri, webId } = ctx.params; @@ -99,9 +99,9 @@ const AuthAccountSchema = { webId }); } - }), + }, - verify: defineAction({ + verify: { async handler(ctx) { const { username, password } = ctx.params; @@ -120,58 +120,58 @@ const AuthAccountSchema = { throw new Error('account.not-found'); } } - }), + }, - usernameExists: defineAction({ + usernameExists: { async handler(ctx) { const { username } = ctx.params; const accounts = await this._find(ctx, { query: { username } }); return accounts.length > 0; } - }), + }, - emailExists: defineAction({ + emailExists: { async handler(ctx) { const { email } = ctx.params; const accounts = await this._find(ctx, { query: { email } }); return accounts.length > 0; } - }), + }, - find: defineAction({ + find: { /** Overwrite find method, to filter accounts with tombstone. */ async handler(ctx) { /** @type {object[]} */ const accounts = await this._find(ctx, ctx.params); return accounts.filter(account => !account.deletedAt); } - }), + }, - findByUsername: defineAction({ + findByUsername: { async handler(ctx) { const { username } = ctx.params; const accounts = await this._find(ctx, { query: { username } }); return accounts.length > 0 ? accounts[0] : null; } - }), + }, - findByWebId: defineAction({ + findByWebId: { async handler(ctx) { const { webId } = ctx.params; const accounts = await this._find(ctx, { query: { webId } }); return accounts.length > 0 ? accounts[0] : null; } - }), + }, - findByEmail: defineAction({ + findByEmail: { async handler(ctx) { const { email } = ctx.params; const accounts = await this._find(ctx, { query: { email } }); return accounts.length > 0 ? accounts[0] : null; } - }), + }, - setPassword: defineAction({ + setPassword: { async handler(ctx) { const { webId, password } = ctx.params; const hashedPassword = await this.hashPassword(password); @@ -182,9 +182,9 @@ const AuthAccountSchema = { hashedPassword }); } - }), + }, - setNewPassword: defineAction({ + setNewPassword: { async handler(ctx) { const { webId, token, password } = ctx.params; const hashedPassword = await this.hashPassword(password); @@ -200,9 +200,9 @@ const AuthAccountSchema = { resetPasswordToken: undefined }); } - }), + }, - generateResetPasswordToken: defineAction({ + generateResetPasswordToken: { async handler(ctx) { const { webId } = ctx.params; const resetPasswordToken = await this.generateResetPasswordToken(); @@ -215,17 +215,17 @@ const AuthAccountSchema = { return resetPasswordToken; } - }), + }, - findDatasetByWebId: defineAction({ + findDatasetByWebId: { async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; const account = await ctx.call('auth.account.findByWebId', { webId }); return account?.username; } - }), + }, - findSettingsByWebId: defineAction({ + findSettingsByWebId: { async handler(ctx) { const webId = ctx.meta.webId; @@ -236,9 +236,9 @@ const AuthAccountSchema = { preferredLocale: account.preferredLocale }; } - }), + }, - updateAccountSettings: defineAction({ + updateAccountSettings: { async handler(ctx) { const { currentPassword, email, newPassword } = ctx.params; const { webId } = ctx.meta; @@ -269,9 +269,9 @@ const AuthAccountSchema = { ...params }); } - }), + }, - deleteByWebId: defineAction({ + deleteByWebId: { async handler(ctx) { const { webId } = ctx.params; const account = await ctx.call('auth.account.findByWebId', { webId }); @@ -283,9 +283,9 @@ const AuthAccountSchema = { return false; } - }), + }, - setTombstone: defineAction({ + setTombstone: { // Remove email and password from an account, set deletedAt timestamp. async handler(ctx) { const { webId } = ctx.params; @@ -302,7 +302,7 @@ const AuthAccountSchema = { deletedAt: new Date().toISOString() }); } - }) + } }, methods: { async isValidUsername(ctx, username) { diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 5cd384c47..8c62668de 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -4,7 +4,7 @@ import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; const { MoleculerError } = require('moleculer').Errors; import AuthMailService from './mail.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const AuthLocalService = { @@ -48,7 +48,7 @@ const AuthLocalService = { } }, actions: { - signup: defineAction({ + signup: { async handler(ctx) { const { username, email, password, ...rest } = ctx.params; @@ -84,9 +84,9 @@ const AuthLocalService = { throw e; } } - }), + }, - login: defineAction({ + login: { async handler(ctx) { const { username, password } = ctx.params; @@ -98,17 +98,17 @@ const AuthLocalService = { return { token, webId: accountData.webId, newUser: false }; } - }), + }, - logout: defineAction({ + logout: { async handler(ctx) { ctx.meta.$statusCode = 302; ctx.meta.$location = ctx.params.redirectUrl || this.settings.formUrl; ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); } - }), + }, - redirectToForm: defineAction({ + redirectToForm: { async handler(ctx) { if (this.settings.formUrl) { const formUrl = new URL(this.settings.formUrl); @@ -123,9 +123,9 @@ const AuthLocalService = { throw new Error('No formUrl defined in auth.local settings'); } } - }), + }, - resetPassword: defineAction({ + resetPassword: { async handler(ctx) { const { email } = ctx.params; @@ -142,9 +142,9 @@ const AuthLocalService = { token }); } - }), + }, - setNewPassword: defineAction({ + setNewPassword: { async handler(ctx) { const { email, token, password } = ctx.params; @@ -156,7 +156,7 @@ const AuthLocalService = { await ctx.call('auth.account.setNewPassword', { webId: account.webId, token, password }); } - }) + } }, methods: { getStrategy() { diff --git a/src/middleware/packages/auth/services/jwt.ts b/src/middleware/packages/auth/services/jwt.ts index b172935fe..39fb10ba2 100644 --- a/src/middleware/packages/auth/services/jwt.ts +++ b/src/middleware/packages/auth/services/jwt.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import path from 'path'; import jwt from 'jsonwebtoken'; import crypto from 'crypto'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Service that creates and validates JSON web tokens(JWT). @@ -32,7 +32,7 @@ const AuthJwtSchema = { this.publicKey = fs.readFileSync(publicKeyPath); }, actions: { - generateKeyPair: defineAction({ + generateKeyPair: { handler(ctx) { const { privateKeyPath, publicKeyPath } = ctx.params; @@ -72,16 +72,16 @@ const AuthJwtSchema = { ); }); } - }), + }, - generateServerSignedToken: defineAction({ + generateServerSignedToken: { async handler(ctx) { const { payload } = ctx.params; return jwt.sign(payload, this.privateKey, { algorithm: 'RS256' }); } - }), + }, - verifyServerSignedToken: defineAction({ + verifyServerSignedToken: { /** Verifies that the token was signed by this server. */ async handler(ctx) { const { token } = ctx.params; @@ -91,17 +91,17 @@ const AuthJwtSchema = { return false; } } - }), + }, - generateUnsignedToken: defineAction({ + generateUnsignedToken: { async handler(ctx) { const { payload } = ctx.params; const token = jwt.sign(payload, null, { algorithm: 'none' }); return token; } - }), + }, - decodeToken: defineAction({ + decodeToken: { // Warning, this does NOT verify if signature is valid async handler(ctx) { const { token } = ctx.params; @@ -111,7 +111,7 @@ const AuthJwtSchema = { return false; } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts index 706756282..7982e6269 100644 --- a/src/middleware/packages/auth/services/mail.ts +++ b/src/middleware/packages/auth/services/mail.ts @@ -1,7 +1,7 @@ import path from 'path'; import urlJoin from 'url-join'; import MailService from 'moleculer-mail'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const AuthMailSchema = { name: 'auth.mail' as const, @@ -16,7 +16,7 @@ const AuthMailSchema = { transport: null }, actions: { - sendResetPasswordEmail: defineAction({ + sendResetPasswordEmail: { async handler(ctx) { const { account, token } = ctx.params; @@ -35,7 +35,7 @@ const AuthMailSchema = { } ); } - }) + } }, methods: { getTemplateLocale(userLocale) { diff --git a/src/middleware/packages/auth/services/migration.ts b/src/middleware/packages/auth/services/migration.ts index 9b1fedb10..c77e5f553 100644 --- a/src/middleware/packages/auth/services/migration.ts +++ b/src/middleware/packages/auth/services/migration.ts @@ -1,10 +1,10 @@ import { getSlugFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const AuthMigrationSchema = { name: 'auth.migration' as const, actions: { - migrateUsersToAccounts: defineAction({ + migrateUsersToAccounts: { async handler(ctx) { const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; @@ -26,7 +26,7 @@ const AuthMigrationSchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index d8ef0bce2..9646805c6 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -8,7 +8,7 @@ import ftpCopy from './utils/ftpCopy.ts'; import rsyncCopy from './utils/rsyncCopy.ts'; import ftpRemove from './utils/ftpRemove.ts'; import fsRemove from './utils/fsRemove.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * @typedef {import('moleculer').Context} Context @@ -57,14 +57,14 @@ const BackupService = { } }, actions: { - backupAll: defineAction({ + backupAll: { async handler(ctx) { await this.actions.backupDatasets({}, { parentCtx: ctx }); await this.actions.backupOtherDirs({}, { parentCtx: ctx }); } - }), + }, - backupDatasets: defineAction({ + backupDatasets: { async handler(ctx) { // Generate a new backup of all datasets const datasets = await ctx.call('triplestore.dataset.list'); @@ -85,9 +85,9 @@ const BackupService = { emptyDirSync(backupsDirPath); } } - }), + }, - backupOtherDirs: defineAction({ + backupOtherDirs: { async handler(ctx) { const { otherDirsPaths } = this.settings.localServer; @@ -101,9 +101,9 @@ const BackupService = { await this.actions.copyToRemoteServer({ path, subDir: key }, { parentCtx: ctx }); } } - }), + }, - copyToRemoteServer: defineAction({ + copyToRemoteServer: { async handler(ctx) { const { path, subDir } = ctx.params; const { copyMethod, remoteServer } = this.settings; @@ -134,9 +134,9 @@ const BackupService = { return false; } } - }), + }, - deleteDataset: defineAction({ + deleteDataset: { params: { dataset: { type: 'string' } }, @@ -174,9 +174,9 @@ const BackupService = { } } } - }), + }, - listBackupsForDataset: defineAction({ + listBackupsForDataset: { // Returns an array of file paths to the backups relative to `this.settings.localServer.fusekiBase`. async handler(ctx) { const { dataset } = ctx.params; @@ -190,7 +190,7 @@ const BackupService = { return filenames; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index e8d84be1a..171dab572 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -2,7 +2,7 @@ import { ControlledContainerMixin } from '@semapps/ldp'; import { Errors as E } from 'moleculer-web'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * DANGER ZONE @@ -50,13 +50,13 @@ const KeysContainerSchema = { } }, actions: { - forbidden: defineAction({ + forbidden: { async handler(ctx) { throw new E.ForbiddenError(); } - }), + }, - get: defineAction({ + get: { /** * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. * See: @@ -80,7 +80,7 @@ const KeysContainerSchema = { return resource; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index cbad0a7ad..acf86bba4 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -10,7 +10,7 @@ import KeyContainerService from './key-container.ts'; import PublicKeyContainerService from './public-key-container.ts'; import MigrationService from './migration.ts'; import { KeyPairService } from '../signature/index.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ @@ -75,7 +75,7 @@ const KeysService = { * Returns all available keys of the given `keyType` in the `/key` container. * If none is available `[]` is returned. */ - getByType: defineAction({ + getByType: { params: { keyType: { type: 'string' }, webId: { type: 'string', optional: true } @@ -95,7 +95,7 @@ const KeysService = { return matchedKeys; } - }), + }, /** * Gets the keys by type that are present in the actor's webId. @@ -103,7 +103,7 @@ const KeysService = { * TODO: If this becomes a performance bottleneck, we can use SPARQL queries. * @returns An array of keys present in the webId. */ - getOrCreateWebIdKeys: defineAction({ + getOrCreateWebIdKeys: { params: { keyType: { type: 'string' }, webId: { type: 'string' } @@ -138,14 +138,14 @@ const KeysService = { }) ); } - }), + }, /** * Returns a signing key instance for a given key or key type. If no key is available, a new one is created. * Currently supports Ed25519Multikey only. * @returns {object} The Multikey object. */ - getMultikey: defineAction({ + getMultikey: { params: { webId: { type: 'string' }, keyObject: { type: 'object', optional: true }, @@ -178,7 +178,7 @@ const KeysService = { return keyObject; } - }), + }, /** * Generates key, stores it in the `/key` container. @@ -186,7 +186,7 @@ const KeysService = { * If `attachToWebId` is true (not default), it will publish the key and attach the key to the webId document. * @returns {object} The key resource as located in the `/key` container. */ - createKeyForActor: defineAction({ + createKeyForActor: { params: { webId: { type: 'string' }, keyType: { type: 'string' }, @@ -224,13 +224,13 @@ const KeysService = { return keyObject; } - }), + }, /** * Generate a key of the type specified. * Type must be in the form of a {@link KEY_TYPES} URI. */ - generateKey: defineAction({ + generateKey: { params: { keyType: { type: 'string' } }, @@ -246,13 +246,13 @@ const KeysService = { throw new Error('Key type not supported.'); } - }), + }, /** * Generate ED25519 key pair. * @returns {object} Key pair in [MultiKey format](https://www.w3.org/TR/controller-document/#Multikey). */ - generateEd25519Key: defineAction({ + generateEd25519Key: { params: {}, async handler() { const keyPair = await Ed25519Multikey.generate(); @@ -266,7 +266,7 @@ const KeysService = { keyObject['@type'] = [KEY_TYPES.ED25519, KEY_TYPES.MULTI_KEY, KEY_TYPES.VERIFICATION_METHOD]; return keyObject; } - }), + }, /** * Generate a RSA key pair and returns public and private key in spki pkcs8 PEM encodings, respectively. @@ -277,7 +277,7 @@ const KeysService = { * 'privateKeyPem': privateKeyPkcs8PemString } * ``` */ - generateRsaKey: defineAction({ + generateRsaKey: { params: {}, async handler() { return new Promise((resolve, reject) => { @@ -308,7 +308,7 @@ const KeysService = { ); }); } - }), + }, /** * Attaches a given key to the webId document. @@ -319,7 +319,7 @@ const KeysService = { * @param {string} ctx.keyId The id of the public-private key pair resource. * @param {string} ctx.keyObject Alternatively, the public-private key pair resource itself. */ - attachPublicKeyToWebId: defineAction({ + attachPublicKeyToWebId: { params: { webId: { type: 'string' }, keyId: { type: 'string', optional: true }, @@ -374,10 +374,10 @@ const KeysService = { webId }); } - }), + }, /** Given a key object, remove the key from the webId document. */ - detachFromWebId: defineAction({ + detachFromWebId: { params: { webId: { type: 'string' }, publicKeyId: { type: 'string' } @@ -395,10 +395,10 @@ const KeysService = { webId }); } - }), + }, /** Given a local key (stored in `/key`), add the public key part to the `/public-key` container. */ - publishPublicKeyLocally: defineAction({ + publishPublicKeyLocally: { params: { keyId: { type: 'string', optional: true }, keyObject: { type: 'object', optional: true }, @@ -432,12 +432,12 @@ const KeysService = { }); return publicKeyUri; } - }), + }, /** * Removes key from `key` container and detaches it from webId document and `public-key` container. */ - delete: defineAction({ + delete: { params: { resourceUri: { type: 'string', optional: true }, keyObject: { type: 'object', optional: true }, @@ -461,10 +461,10 @@ const KeysService = { await this.actions.detachFromWebId({ webId, publicKeyId }, { parentCtx: ctx }); } } - }), + }, /** Delete all keys belonging to an actor. */ - deleteAllKeysForWebId: defineAction({ + deleteAllKeysForWebId: { params: { webId: { type: 'string' } }, @@ -475,14 +475,14 @@ const KeysService = { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } } - }), + }, /** * Fetches remote keys from a webId (publicKey or assertionMethod field). * Returns all keys of the given `keyType` or all, if `keyType` is `null`. * Does not filter outdated keys. */ - getRemotePublicKeys: defineAction({ + getRemotePublicKeys: { params: { webId: { type: 'string' }, keyType: { type: 'string', optional: true, default: KEY_TYPES.RSA, nullable: true } @@ -528,12 +528,12 @@ const KeysService = { return keyObjects; } - }), + }, /** * Returns the public key part of a given `keyObject`. */ - getPublicKeyObject: defineAction({ + getPublicKeyObject: { params: { keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } @@ -571,9 +571,9 @@ const KeysService = { /** @type {never} Not implemented yet. */ throw new Error(`Key type ${keyType} not supported.`); } - }), + }, - findPrivateKeyUri: defineAction({ + findPrivateKeyUri: { params: { publicKeyUri: { type: 'string' } }, @@ -594,7 +594,7 @@ const KeysService = { return queryResult[0]?.privateKey?.value; } - }) + } }, methods: {}, hooks: { @@ -609,13 +609,13 @@ const KeysService = { } }, events: { - 'keys.migration.migrated': defineServiceEvent({ + 'keys.migration.migrated': { async handler() { this.isMigrated = true; } - }), + }, - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; @@ -648,7 +648,7 @@ const KeysService = { this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) ]); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index e02de32b6..a7eb41b19 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import path from 'path'; import { KEY_TYPES } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const KeysMigrationSchema = { @@ -11,7 +11,7 @@ const KeysMigrationSchema = { podProvider: false }, actions: { - migrateKeysToDb: defineAction({ + migrateKeysToDb: { /** Migrates cryptographic RSA keys from filesystem storage to the `/keys` ldp containers */ async handler(ctx) { // Check actorsKeyPairsDir for existing keys. @@ -109,9 +109,9 @@ const KeysMigrationSchema = { this.logger.info('=== Keys migration completed ==='); await ctx.emit('keys.migration.migrated'); } - }), + }, - isMigrated: defineAction({ + isMigrated: { /** Returns true, if the server has migrated to the new keys service yet, i.e. keys are stored in the user dataset, not on fs. */ async handler() { // If the `actorsKeyPairsDir` setting is not set, we assume migration has happened or was never needed. @@ -130,7 +130,7 @@ const KeysMigrationSchema = { return !anyKeyFile; } - }) + } }, methods: { // Delete old public key blank node and data from the webId. diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index 64a184216..f8b989ff7 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -2,7 +2,7 @@ import { triple, namedNode } from '@rdfjs/data-model'; import { ControlledContainerMixin } from '@semapps/ldp'; import { Errors as E } from 'moleculer-web'; import { KEY_TYPES } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Container to store the public keys of actors only. @@ -50,11 +50,11 @@ const KeysPublicContainerSchema = { }, actions: { - forbidden: defineAction({ + forbidden: { async handler(ctx) { throw new E.ForbiddenError(); } - }) + } }, hooks: { diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 3582d3ab4..7d90caf9a 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -4,13 +4,13 @@ import { createAuthzHeader, createSignatureString } from 'http-signature-header' import { Errors as E } from 'moleculer-web'; import { KEY_TYPES } from '../constants.ts'; import { arrayOf } from '../utils/utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const HttpSignatureService = { // TODO: Rename to signature.http-signatures in a major release. name: 'signature' as const, actions: { - generateSignatureHeaders: defineAction({ + generateSignatureHeaders: { async handler(ctx) { const { url, method, body, actorUri } = ctx.params; // TODO: Use new service. @@ -44,16 +44,16 @@ const HttpSignatureService = { return headers; } - }), + }, - verifyDigest: defineAction({ + verifyDigest: { async handler(ctx) { const { body, headers } = ctx.params; return headers.digest ? this.buildDigest(body) === headers.digest : true; } - }), + }, - verifyHttpSignature: defineAction({ + verifyHttpSignature: { /** * Given url, path, method, headers, validates a given http signature. * If the signature is valid, it returns the actorUri and the publicKeyPem used to verify the signature. @@ -105,9 +105,9 @@ const HttpSignatureService = { return { isValid: keyValid, actorUri, publicKeyPem }; } - }), + }, - authenticate: defineAction({ + authenticate: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication async handler(ctx) { const { route, req, res } = ctx.params; @@ -126,9 +126,9 @@ const HttpSignatureService = { ctx.meta.webId = 'anon'; return Promise.resolve(null); } - }), + }, - authorize: defineAction({ + authorize: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization async handler(ctx) { const { route, req, res } = ctx.params; @@ -147,7 +147,7 @@ const HttpSignatureService = { ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); } - }) + } }, methods: { buildDigest(body) { diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index 5c82c7908..661e442ca 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -4,7 +4,7 @@ import fetch from 'node-fetch'; import { generateKeyPair } from 'crypto'; import { namedNode, blankNode, literal, triple } from '@rdfjs/data-model'; import { KEY_TYPES } from '../constants.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Deprecated Service. @@ -30,7 +30,7 @@ const SignatureService = { this.isMigrated = await this.broker.call('keys.migration.isMigrated'); }, actions: { - generate: defineAction({ + generate: { async handler(ctx) { const { actorUri } = ctx.params; @@ -76,9 +76,9 @@ const SignatureService = { ); }); } - }), + }, - delete: defineAction({ + delete: { async handler(ctx) { const { actorUri } = ctx.params; @@ -97,9 +97,9 @@ const SignatureService = { console.log(`Could not delete key pair for actor ${actorUri}`); } } - }), + }, - attachPublicKey: defineAction({ + attachPublicKey: { async handler(ctx) { const { actorUri } = ctx.params; @@ -130,9 +130,9 @@ const SignatureService = { }); } } - }), + }, - getPaths: defineAction({ + getPaths: { async handler(ctx) { const { actorUri } = ctx.params; @@ -145,9 +145,9 @@ const SignatureService = { } throw new Error(`No account found with URI ${actorUri}`); } - }), + }, - get: defineAction({ + get: { async handler(ctx) { const { actorUri } = ctx.params; @@ -169,9 +169,9 @@ const SignatureService = { return {}; } } - }), + }, - getRemotePublicKey: defineAction({ + getRemotePublicKey: { async handler(ctx) { const { actorUri } = ctx.params; @@ -198,7 +198,7 @@ const SignatureService = { return actor.publicKey.publicKeyPem; } } - }) + } }, hooks: { before: { @@ -224,7 +224,7 @@ const SignatureService = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; if (this.isMigrated) { @@ -234,13 +234,13 @@ const SignatureService = { await this.actions.generate({ actorUri: webId }, { parentCtx: ctx }); await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); } - }), + }, - 'keys.migration.migrated': defineServiceEvent({ + 'keys.migration.migrated': { async handler(ctx) { this.isMigrated = true; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 74195be58..f7e125359 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -3,7 +3,7 @@ import urlJoin from 'url-join'; import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; import fetch from 'node-fetch'; import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const stream2buffer = stream => { return new Promise((resolve, reject) => { @@ -41,7 +41,7 @@ const ProxyService = { } }, actions: { - api_query: defineAction({ + api_query: { async handler(ctx) { const url = ctx.params.id; const method = ctx.params.method || 'GET'; @@ -83,9 +83,9 @@ const ProxyService = { ctx.meta.$statusMessage = e.message; } } - }), + }, - query: defineAction({ + query: { async handler(ctx) { let { url, method, headers, body, actorUri } = ctx.params; @@ -143,10 +143,10 @@ const ProxyService = { }; } } - }) + } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; if (this.settings.podProvider) { @@ -160,7 +160,7 @@ const ProxyService = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts index 9b5d108c5..86066ea54 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Service to generate challenges upon request. @@ -19,7 +19,7 @@ const ChallengeService = { this.challenges = {}; }, actions: { - create: defineAction({ + create: { handler() { if (!this.cleanupTimerSetUp) { this.startCleanupTimer(); @@ -30,21 +30,21 @@ const ChallengeService = { return { challenge }; } - }), + }, - getAll: defineAction({ + getAll: { handler() { return this.challenges; } - }), + }, - clearAll: defineAction({ + clearAll: { handler() { this.challenges = {}; } - }), + }, - validate: defineAction({ + validate: { handler(ctx) { const { challenge } = ctx.params; @@ -63,9 +63,9 @@ const ChallengeService = { return { valid: true }; } - }), + }, - cleanElapsed: defineAction({ + cleanElapsed: { handler() { const now = Date.now(); for (const [challenge, { issued }] of Object.entries(this.challenges)) { @@ -74,7 +74,7 @@ const ChallengeService = { } } } - }) + } }, methods: { startCleanupTimer() { diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 1ff86bf96..1c61fbe93 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -11,7 +11,7 @@ import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { KEY_TYPES } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Data integrity service for signing objects using the [VC data integrity spec](https://www.w3.org/TR/vc-data-integrity/). @@ -37,7 +37,7 @@ const DataIntegrityService = { * Verify an object. * @param {object} ctx.params.object - The object to verify. */ - verifyObject: defineAction({ + verifyObject: { params: { object: { type: 'object' }, options: { @@ -62,7 +62,7 @@ const DataIntegrityService = { return jsigs.verify(object, { purpose, documentLoader: this.documentLoader, suite }); } - }), + }, /** * Sign an object. @@ -72,7 +72,7 @@ const DataIntegrityService = { * @param {object} [ctx.params.keyObject] - The key object to use. * @param {string} [ctx.params.keyId] - The key ID to use. */ - signObject: defineAction({ + signObject: { params: { object: { type: 'object' }, options: { type: 'object', optional: true, params: { proofPurpose: { type: 'string', optional: true } } }, @@ -108,7 +108,7 @@ const DataIntegrityService = { return jsigs.sign(object, { purpose, documentLoader: this.documentLoader, suite }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts index 57782f195..2c7cf2e3a 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts @@ -1,5 +1,5 @@ import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; // Check, if a capability grants access to the resource. const hasValidCapability = async (ctx, resourceUri, mode) => { @@ -35,7 +35,7 @@ const VcGuardSchema = { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, actions: { - hasPermission: defineAction({ + hasPermission: { async handler(ctx) { const { uri, mode } = ctx.params; @@ -47,7 +47,7 @@ const VcGuardSchema = { return undefined; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index f4383185b..977207824 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -1,7 +1,7 @@ import path from 'node:path'; import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Container for Verifiable Credentials. Posting to this container will create a new VC. @@ -52,7 +52,7 @@ const VCCredentialsContainer = { * We can't handle that internally so we use a copy of the context with the `@graph`s removed. */ actions: { - get: defineAction({ + get: { async handler(ctx) { const resource = await ctx.call('ldp.resource.get', { ...ctx.params, @@ -64,9 +64,9 @@ const VCCredentialsContainer = { }; return { ...resource, '@context': credentialsContext }; } - }), + }, - put: defineAction({ + put: { async handler(ctx) { const { resource } = ctx.params; return await ctx.call('ldp.resource.put', { @@ -77,9 +77,9 @@ const VCCredentialsContainer = { } }); } - }), + }, - post: defineAction({ + post: { async handler(ctx) { const { resource } = ctx.params; return await ctx.call('ldp.container.post', { @@ -91,9 +91,9 @@ const VCCredentialsContainer = { } }); } - }), + }, - list: defineAction({ + list: { async handler(ctx) { const container = await ctx.call('ldp.container.list', { ...ctx.params, @@ -101,7 +101,7 @@ const VCCredentialsContainer = { }); return { ...container, '@context': credentialsContext }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index 4df29885d..995b9fc08 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -12,7 +12,7 @@ import vc from '@digitalbazaar/vc'; import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Service for verifying and creating Verifiable Presentations @@ -38,7 +38,7 @@ const VCHolderService = { * @param {object} ctx.params - The parameters for creating the presentation. * @returns {object} The signed presentation. */ - createPresentation: defineAction({ + createPresentation: { params: { presentation: { type: 'object', @@ -125,7 +125,7 @@ const VCHolderService = { return signedPresentation; } - }) + } }, methods: { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 438b66034..3f48b9c18 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -12,7 +12,7 @@ import vc from '@digitalbazaar/vc'; import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Service for verifying, reading, and revoking Verifiable Credentials. @@ -54,7 +54,7 @@ const VCCredentialService = { * @param {object} ctx.params - The parameters for creating the VC. * @returns {object} The signed credential. */ - createVC: defineAction({ + createVC: { params: { credential: { type: 'object', @@ -137,7 +137,7 @@ const VCCredentialService = { return signedCredential; } - }) + } }, methods: { /** Creates an ldp resource from the presentation and sets rights. */ diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index d04b9a25b..f0d2f9d87 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -1,6 +1,6 @@ import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Container for Verifiable Presentations. Posting to this container will create a new VP. @@ -41,7 +41,7 @@ const VCPresentationContainer = { * We can't handle that internally so we use a copy of the context with the `@graph`s removed. */ actions: { - get: defineAction({ + get: { async handler(ctx) { const resource = await ctx.call('ldp.resource.get', { ...ctx.params, @@ -53,9 +53,9 @@ const VCPresentationContainer = { }; return { ...resource, '@context': credentialsContext }; } - }), + }, - put: defineAction({ + put: { async handler(ctx) { const { resource } = ctx.params; return await ctx.call('ldp.resource.put', { @@ -66,9 +66,9 @@ const VCPresentationContainer = { } }); } - }), + }, - post: defineAction({ + post: { async handler(ctx) { // FIXME: The action fails to store the VC with the VP. // This is okay because persisting VPs is not required @@ -83,9 +83,9 @@ const VCPresentationContainer = { } }); } - }), + }, - list: defineAction({ + list: { async handler(ctx) { const container = await ctx.call('ldp.container.list', { ...ctx.params, @@ -93,7 +93,7 @@ const VCPresentationContainer = { }); return { ...container, '@context': credentialsContext }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index be36bf902..5e0c6926a 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -8,7 +8,7 @@ import vc from '@digitalbazaar/vc'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; import VCPurpose from './VcPurpose.ts'; import { arrayOf } from '../utils/utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Service for verifying and creating Verifiable Presentations @@ -31,7 +31,7 @@ const VCPresentationService = { /** * Verify a verifiable credential. */ - verifyVC: defineAction({ + verifyVC: { params: { verifiableCredential: { type: 'object', @@ -75,12 +75,12 @@ const VCPresentationService = { return verificationResult; } - }), + }, /** * Verify a presentation. */ - verifyPresentation: defineAction({ + verifyPresentation: { params: { verifiablePresentation: { type: 'object' }, options: { @@ -138,14 +138,14 @@ const VCPresentationService = { return { verified: false, error: e.message }; } } - }), + }, /** * Verify a capability presentation. * @param {object} ctx.params - The parameters for verifying the capability presentation. * @returns {object} The verification result. */ - verifyCapabilityPresentation: defineAction({ + verifyCapabilityPresentation: { params: { verifiablePresentation: { type: 'object' }, options: { @@ -195,7 +195,7 @@ const VCPresentationService = { return { ...verificationResult, presentation }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 9988a06a5..19f960a9c 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -3,7 +3,7 @@ import cronParser from 'cron-parser'; import { promises as fsPromises } from 'fs'; import { ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import { isDir } from '../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { settings: { @@ -93,7 +93,7 @@ const Schema = { } }, actions: { - freshImport: defineAction({ + freshImport: { async handler(ctx) { if (ctx.params.clear === undefined || ctx.params.clear === true) { this.logger.info('Clearing all existing data...'); @@ -165,9 +165,9 @@ const Schema = { this.logger.info(`Import finished !`); } - }), + }, - synchronize: defineAction({ + synchronize: { handler() { if (this.createJob) { this.createJob(this.name, 'synchronize', {}); @@ -180,9 +180,9 @@ const Schema = { }); } } - }), + }, - importOne: defineAction({ + importOne: { async handler(ctx) { let { sourceUri, destUri, data } = ctx.params; @@ -275,9 +275,9 @@ const Schema = { return destUri; } - }), + }, - deleteImported: defineAction({ + deleteImported: { async handler(ctx) { for (const resourceUri of Object.values(this.imported)) { this.logger.info(`Deleting ${resourceUri}...`); @@ -291,25 +291,25 @@ const Schema = { this.imported = {}; } - }), + }, - list: defineAction({ + list: { async handler(ctx) { return await this.list(ctx.params.url || this.settings.source.getAllFull); } - }), + }, - getOne: defineAction({ + getOne: { async handler(ctx) { return await this.getOne(this.settings.source.getOneFull(ctx.params.data)); } - }), + }, - getImported: defineAction({ + getImported: { handler() { return this.imported; } - }) + } }, methods: { async prepare() { diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 789fbd331..76b080fd7 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -3,7 +3,7 @@ import N3 from 'n3'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; import RemoteService from './subservices/remote.ts'; -import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const InferenceSchema = { name: 'inference' as const, @@ -146,7 +146,7 @@ const InferenceSchema = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { let { newData } = ctx.params; newData = await ctx.call('jsonld.parser.expand', { input: newData }); @@ -176,9 +176,9 @@ const InferenceSchema = { } } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { let { oldData } = ctx.params; oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); @@ -204,9 +204,9 @@ const InferenceSchema = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { let { oldData, newData } = ctx.params; oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); @@ -265,9 +265,9 @@ const InferenceSchema = { } } } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; @@ -323,9 +323,9 @@ const InferenceSchema = { } } } - }), + }, - 'ontologies.registered': defineServiceEvent({ + 'ontologies.registered': { async handler(ctx) { const { owl } = ctx.params; if (owl) { @@ -334,7 +334,7 @@ const InferenceSchema = { this.inverseRelations = { ...this.inverseRelations, ...result }; } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index 91a5fab48..0d782ceb6 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; import N3 from 'n3'; import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } from '@semapps/activitypub'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; @@ -18,7 +18,7 @@ const InferenceRemoteSchema = { this.relayActor = await this.broker.call('activitypub.relay.getActor'); }, actions: { - offerInference: defineAction({ + offerInference: { visibility: 'public', params: { subject: { type: 'string', optional: false }, @@ -85,7 +85,7 @@ const InferenceRemoteSchema = { } } } - }) + } }, activities: { offerInference: { diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts index bb260065c..b367f3bf0 100644 --- a/src/middleware/packages/jsonld/services/api/index.ts +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const JsonldApiSchema = { name: 'jsonld.api' as const, @@ -21,12 +21,12 @@ const JsonldApiSchema = { }); }, actions: { - getContext: defineAction({ + getContext: { async handler(ctx) { ctx.meta.$responseType = 'application/ld+json'; return await ctx.call('jsonld.context.getLocal'); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index 039f8b4c5..3531fac4f 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -23,6 +23,6 @@ const Schema = defineAction({ return context; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts index 37d7eee41..015a88293 100644 --- a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts +++ b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -27,6 +27,6 @@ const Schema = defineAction({ '@context': context }; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index 9d97adbd7..9aa4b1ee7 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -1,7 +1,7 @@ import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { a: { @@ -49,6 +49,6 @@ const Schema = defineAction({ throw new Error('Could not merge JSON-LD contexts'); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts index 0f56a62b4..5ed0864db 100644 --- a/src/middleware/packages/jsonld/services/context/actions/parse.ts +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { context: { @@ -14,6 +14,6 @@ const Schema = defineAction({ const { contextRaw } = await this.contextParser.parse(context, options); return contextRaw; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index 513d02a3d..cc561c68f 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { context: { @@ -18,6 +18,6 @@ const Schema = defineAction({ return false; } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index 12f4fe66e..729bc3479 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -2,7 +2,7 @@ import jsonld from 'jsonld'; import fsModule from 'fs'; const fsPromises = fsModule.promises; import LRU from 'lru-cache'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** Use document loader depending on node / bun runtime. */ const defaultDocumentLoader = !process.versions.bun @@ -47,7 +47,7 @@ const JsonldDocumentLoaderSchema = { } }, actions: { - loadWithCache: defineAction({ + loadWithCache: { async handler(ctx) { const { url, options } = ctx.params; if (url === this.settings.localContextUri) { @@ -69,17 +69,17 @@ const JsonldDocumentLoaderSchema = { cache.set(url, context); return context; } - }), + }, - getCache: defineAction({ + getCache: { handler(ctx) { const { uri } = ctx.params; const context = cache.get(uri); return context?.document; } - }), + }, - setCache: defineAction({ + setCache: { handler(ctx) { const { uri, json } = ctx.params; cache.set(uri, { @@ -88,7 +88,7 @@ const JsonldDocumentLoaderSchema = { document: json }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 3203e62ae..0e7fd729e 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -6,7 +6,7 @@ import streamifyString from 'streamify-string'; import rdfparseModule from 'rdf-parse'; const rdfParser = rdfparseModule.default; import { arrayOf, isURI } from '../../utils/utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const JsonldParserSchema = { name: 'jsonld.parser' as const, @@ -24,42 +24,42 @@ const JsonldParserSchema = { }); }, actions: { - compact: defineAction({ + compact: { handler(ctx) { const { input, context, options } = ctx.params; return this.jsonld.compact(input, context, options); } - }), + }, - expand: defineAction({ + expand: { handler(ctx) { const { input, options } = ctx.params; return this.jsonld.expand(input, options); } - }), + }, - flatten: defineAction({ + flatten: { handler(ctx) { const { input, context, options } = ctx.params; return this.jsonld.flatten(input, context, options); } - }), + }, - frame: defineAction({ + frame: { handler(ctx) { const { input, frame, options } = ctx.params; return this.jsonld.frame(input, frame, options); } - }), + }, - normalize: defineAction({ + normalize: { handler(ctx) { const { input, options } = ctx.params; return this.jsonld.normalize(input, options); } - }), + }, - fromRDF: defineAction({ + fromRDF: { async handler(ctx) { const { input, options = {} } = ctx.params; const { format } = options; @@ -103,9 +103,9 @@ const JsonldParserSchema = { return framedResource; } } - }), + }, - toRDF: defineAction({ + toRDF: { async handler(ctx) { const { input, options = {} } = ctx.params; const { format } = options; @@ -129,9 +129,9 @@ const JsonldParserSchema = { }); } } - }), + }, - toQuads: defineAction({ + toQuads: { // Return quads in RDF.JS data model // (this.jsonld.toRDF does not use the same model) // https://github.com/rdfjs/data-model-spec @@ -148,9 +148,9 @@ const JsonldParserSchema = { .on('end', () => resolve(res)); }); } - }), + }, - expandPredicate: defineAction({ + expandPredicate: { // TODO move to ontologies service ?? async handler(ctx) { let { predicate, context } = ctx.params; @@ -178,9 +178,9 @@ const JsonldParserSchema = { return expandedPredicate; } - }), + }, - expandTypes: defineAction({ + expandTypes: { async handler(ctx) { let { types, context } = ctx.params; @@ -208,9 +208,9 @@ const JsonldParserSchema = { return expandedTypes; } - }), + }, - changeBase: defineAction({ + changeBase: { async handler(ctx) { const { input, base } = ctx.params; @@ -225,7 +225,7 @@ const JsonldParserSchema = { { parentCtx: ctx } ); } - }) + } }, methods: { streamToString(stream) { diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 407e97237..a1b42429b 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,5 +1,5 @@ import { delay, getParentContainerUri } from '../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { settings: { @@ -40,43 +40,43 @@ const Schema = { if (!path) this.settings.path = registration.path; }, actions: { - post: defineAction({ + post: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return await ctx.call('ldp.container.post', ctx.params); } - }), + }, - list: defineAction({ + list: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return ctx.call('ldp.container.get', ctx.params); } - }), + }, - attach: defineAction({ + attach: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return ctx.call('ldp.container.attach', ctx.params); } - }), + }, - detach: defineAction({ + detach: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return ctx.call('ldp.container.detach', ctx.params); } - }), + }, - get: defineAction({ + get: { handler(ctx) { const containerParams = {}; if (this.settings.accept) containerParams.accept = this.settings.accept; @@ -85,54 +85,54 @@ const Schema = { ...ctx.params }); } - }), + }, - getHeaderLinks: defineAction({ + getHeaderLinks: { handler(ctx) { return []; } - }), + }, - create: defineAction({ + create: { handler(ctx) { return ctx.call('ldp.resource.create', ctx.params); } - }), + }, - patch: defineAction({ + patch: { handler(ctx) { return ctx.call('ldp.resource.patch', ctx.params); } - }), + }, - put: defineAction({ + put: { handler(ctx) { return ctx.call('ldp.resource.put', ctx.params); } - }), + }, - delete: defineAction({ + delete: { handler(ctx) { return ctx.call('ldp.resource.delete', ctx.params); } - }), + }, - exist: defineAction({ + exist: { handler(ctx) { return ctx.call('ldp.resource.exist', ctx.params); } - }), + }, - getContainerUri: defineAction({ + getContainerUri: { handler(ctx) { return ctx.call('ldp.registry.getUri', { path: this.settings.path, webId: ctx.params?.webId || ctx.meta?.webId }); } - }), + }, - waitForContainerCreation: defineAction({ + waitForContainerCreation: { async handler(ctx) { let { containerUri } = ctx.params; let containerExist; @@ -166,7 +166,7 @@ const Schema = { } while (!containerAttached); } } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 4f73ed37f..0a006652e 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,6 +1,6 @@ import { dc } from '@semapps/ontologies'; import { getDatasetFromUri } from '../utils.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { settings: { @@ -14,7 +14,7 @@ const Schema = { await this.broker.call('ontologies.register', dc); }, actions: { - tagCreatedResource: defineAction({ + tagCreatedResource: { async handler(ctx) { const { resourceUri, newData, webId, dataset } = ctx.params; const now = new Date(); @@ -48,9 +48,9 @@ const Schema = { }); } } - }), + }, - tagUpdatedResource: defineAction({ + tagUpdatedResource: { async handler(ctx) { const { resourceUri, dataset } = ctx.params; const now = new Date(); @@ -67,10 +67,10 @@ const Schema = { webId: 'system' }); } - }) + } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { const { resourceUri, newData, webId, dataset } = ctx.params; this.actions.tagCreatedResource( @@ -78,21 +78,21 @@ const Schema = { { parentCtx: ctx } ); } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { const { resourceUri, dataset } = ctx.params; this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { const { resourceUri, dataset } = ctx.params; this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index e39117e63..15ff59844 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -1,7 +1,7 @@ import sharp from 'sharp'; import { MIME_TYPES } from '@semapps/mime-types'; import { arrayOf } from '../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; const Schema = { @@ -21,7 +21,7 @@ const Schema = { } }, actions: { - processImage: defineAction({ + processImage: { async handler(ctx) { const { resourceUri } = ctx.params; @@ -64,9 +64,9 @@ const Schema = { this.logger.warn(`Image processing failed (${e.message})`); } } - }), + }, - processAllImages: defineAction({ + processAllImages: { async handler(ctx) { const { webId } = ctx.params; const container = await this.actions.list({ webId }, { parentCtx: ctx }); @@ -80,7 +80,7 @@ const Schema = { } this.logger.info('Finished !'); } - }) + } }, methods: { getMaxSize(width, height) { diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index 9ceee61ff..f3803a1b4 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -1,5 +1,5 @@ import { CronJob } from 'cron'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { settings: { @@ -12,7 +12,7 @@ const Schema = { }, dependencies: ['triplestore', 'ldp.resource'], actions: { - checkOrphanFiles: defineAction({ + checkOrphanFiles: { async handler(ctx) { try { this.logger.info('OrphanFilesDeletion - Check...'); @@ -53,7 +53,7 @@ const Schema = { this.logger.error(`OrphanFilesDeletion - Error: ${error.message}`); } } - }) + } }, created() { this.actions.checkOrphanFiles(); diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index 912f8e068..457e6fe29 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -1,7 +1,7 @@ const { MoleculerError } = require('moleculer').Errors; import ControlledContainerMixin from './controlled-container.ts'; import { delay } from '../utils.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { mixins: [ControlledContainerMixin], @@ -21,7 +21,7 @@ const Schema = { } }, actions: { - initializeResource: defineAction({ + initializeResource: { async handler(ctx) { const { webId } = ctx.params; @@ -33,24 +33,24 @@ const Schema = { return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); } - }), + }, - getResourceUri: defineAction({ + getResourceUri: { async handler(ctx) { const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri }); return resourcesUris[0]; } - }), + }, - exist: defineAction({ + exist: { async handler(ctx) { const resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); return !!resourceUri; } - }), + }, - waitForResourceCreation: defineAction({ + waitForResourceCreation: { async handler(ctx) { const { webId } = ctx.params; let resource; @@ -79,7 +79,7 @@ const Schema = { return resource.id || resource['@id']; } - }) + } }, hooks: { before: { @@ -104,14 +104,14 @@ const Schema = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { if (this.settings.podProvider) { const { webId } = ctx.params; await this.actions.initializeResource({ webId }); } } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index dc118ee89..fe880523d 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -10,7 +10,7 @@ import { parseJson } from '@semapps/middlewares'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { settings: { @@ -67,7 +67,7 @@ const Schema = { } }, actions: { - endpointAdd: defineAction({ + endpointAdd: { async handler(ctx) { const { predicate, object } = ctx.params; @@ -81,9 +81,9 @@ const Schema = { { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } ); } - }), + }, - endpointGet: defineAction({ + endpointGet: { async handler(ctx) { ctx.meta.$responseType = ctx.meta.headers?.accept; @@ -96,7 +96,7 @@ const Schema = { { meta: { dataset: this.settings.settingsDataset } } ); } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 601ce33c6..7d469b6ae 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -7,7 +7,7 @@ import LdpRegistryService from './services/registry/index.ts'; import LdpRemoteService from './services/remote/index.ts'; import LdpResourceService from './services/resource/index.ts'; import PermissionsService from './services/permissions/index.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const LdpSchema = { name: 'ldp' as const, @@ -96,25 +96,25 @@ const LdpSchema = { await this.broker.call('ontologies.register', semapps); }, actions: { - getBaseUrl: defineAction({ + getBaseUrl: { handler() { return this.settings.baseUrl; } - }), + }, - getBasePath: defineAction({ + getBasePath: { handler() { const { pathname } = new URL(this.settings.baseUrl); return pathname; } - }), + }, - getSetting: defineAction({ + getSetting: { handler(ctx) { const { key } = ctx.params; return this.settings[key]; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index c2836c4bb..5ef29052e 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -1,10 +1,10 @@ -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const LdpCacheSchema = { name: 'ldp.cache' as const, dependencies: ['ldp.container'], actions: { - generate: defineAction({ + generate: { async handler(ctx) { const containersUris = await ctx.call('ldp.container.getAll'); for (const containerUri of containersUris) { @@ -17,9 +17,9 @@ const LdpCacheSchema = { } } } - }), + }, - invalidateResource: defineAction({ + invalidateResource: { async handler(ctx) { if (this.broker.cacher) { const { resourceUri, dataset } = ctx.params; @@ -33,9 +33,9 @@ const LdpCacheSchema = { } } } - }), + }, - invalidateContainer: defineAction({ + invalidateContainer: { async handler(ctx) { if (this.broker.cacher) { const { containerUri } = ctx.params; @@ -43,73 +43,73 @@ const LdpCacheSchema = { await this.broker.cacher.clean(`ldp.resource.getTypes:${containerUri}**`); } } - }) + } }, events: { - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.attached': defineServiceEvent({ + 'ldp.container.attached': { async handler(ctx) { const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.patched': defineServiceEvent({ + 'ldp.container.patched': { async handler(ctx) { const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.deleted': defineServiceEvent({ + 'ldp.container.deleted': { async handler(ctx) { const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.detached': defineServiceEvent({ + 'ldp.container.detached': { async handler(ctx) { const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.remote.deleted': defineServiceEvent({ + 'ldp.remote.deleted': { async handler(ctx) { const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.remote.stored': defineServiceEvent({ + 'ldp.remote.stored': { async handler(ctx) { const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'webacl.resource.updated': defineServiceEvent({ + 'webacl.resource.updated': { // Invalidate cache also when ACL rights are changed async handler(ctx) { const { uri, isContainer, dataset } = ctx.params; @@ -119,9 +119,9 @@ const LdpCacheSchema = { await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); } } - }), + }, - 'webacl.resource.deleted': defineServiceEvent({ + 'webacl.resource.deleted': { async handler(ctx) { const { uri, isContainer, dataset } = ctx.params; if (isContainer) { @@ -130,7 +130,7 @@ const LdpCacheSchema = { await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index d4844eb01..b1c43784a 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,8 +1,8 @@ const { MoleculerError } = require('moleculer').Errors; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -52,6 +52,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index 6cc30ce8f..12ed95a4c 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -18,6 +18,6 @@ const Schema = defineAction({ await ctx.call('ldp.resource.delete', { resourceUri, webId }); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 88daed9bf..13f070ed8 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -26,6 +26,6 @@ const Schema = defineAction({ ctx.emit('ldp.container.created', { containerUri, options, webId }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index e46d437fc..4584cd10b 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -1,13 +1,13 @@ import urlJoin from 'url-join'; import { getParentContainerUri } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Create a container and attach it to its parent container(s) * Recursively create the parent container(s) if they don't exist * In Pod provider config, the webId is required to find the Pod root */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -78,6 +78,6 @@ const Schema = defineAction({ } } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index bbd177aa7..e332b279d 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -1,7 +1,7 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: 'string', @@ -49,6 +49,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index 0f4a0d150..ed161839d 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -46,6 +46,6 @@ const Schema = defineAction({ ); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/exist.ts b/src/middleware/packages/ldp/services/container/actions/exist.ts index ddf99de22..bdeb4e0b6 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.ts +++ b/src/middleware/packages/ldp/services/container/actions/exist.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' } @@ -14,6 +14,6 @@ const Schema = defineAction({ (await ctx.call('triplestore.document.exist', { documentUri: `${containerUri}/` })) ); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index a63be31f5..ea5d3f2e0 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,9 +1,9 @@ import { MIME_TYPES } from '@semapps/mime-types'; const { MoleculerError } = require('moleculer').Errors; import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string', optional: true }, @@ -115,6 +115,6 @@ const Schema = defineAction({ return compactResults; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.ts b/src/middleware/packages/ldp/services/container/actions/getAll.ts index 31093dadf..7cad6c7ef 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.ts +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { dataset: { type: 'string', optional: true } @@ -22,6 +22,6 @@ const Schema = defineAction({ return result.map(node => node.containerUri.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.ts b/src/middleware/packages/ldp/services/container/actions/getPath.ts index e811a1f8a..4a0075f66 100644 --- a/src/middleware/packages/ldp/services/container/actions/getPath.ts +++ b/src/middleware/packages/ldp/services/container/actions/getPath.ts @@ -1,8 +1,8 @@ import dashify from 'dashify'; import { isURL } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceType: 'string' @@ -37,6 +37,6 @@ const Schema = defineAction({ return `/${prefix}/${dashify(className)}`; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index a49d29d82..ab1637478 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string', optional: true } @@ -23,6 +23,6 @@ const Schema = defineAction({ return result.map(node => node.resourceUri.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/includes.ts b/src/middleware/packages/ldp/services/container/actions/includes.ts index c942bf994..a97db9b0d 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.ts +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -30,6 +30,6 @@ const Schema = defineAction({ webId }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index 67e68c5f0..6ca047b11 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -29,6 +29,6 @@ const Schema = defineAction({ const num = Number(res[0].count.value); return num === 0; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 00386a1fe..9786dcf1d 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,6 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; import { isMirror } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; const checkTripleValidity = (triple, containerUri) => { if (triple.subject.value !== containerUri) { @@ -18,7 +18,7 @@ const checkTripleValidity = (triple, containerUri) => { } }; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { @@ -116,6 +116,6 @@ const Schema = defineAction({ ); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index ab225830f..dd6f8bb16 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -2,9 +2,9 @@ const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { cleanUndefined } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { @@ -161,6 +161,6 @@ const Schema = defineAction({ return resourceUri; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index c96af07c0..1150597e7 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -1,7 +1,7 @@ import LinkHeader from 'http-link-header'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { type: 'string' } @@ -33,6 +33,6 @@ const Schema = defineAction({ return linkHeader.toString(); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/actions/register.ts b/src/middleware/packages/ldp/services/link-header/actions/register.ts index ac2d15a45..05b0059cc 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/register.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/register.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { actionName: { type: 'string' } @@ -9,6 +9,6 @@ const Schema = defineAction({ const { actionName } = ctx.params; this.registeredActionNames.push(actionName); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index f14d61460..5ee759262 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { actionName: { type: 'string' }, @@ -14,6 +14,6 @@ const Schema = defineAction({ // Re-order all authorizers by priority this.authorizers.sort((a, b) => b.priority - a.priority); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index 514c8bc57..2c734e1f0 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,10 +1,10 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; /** * Calls "has" action and throws error if no authorization was granted */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { type: 'string' }, @@ -17,6 +17,6 @@ const Schema = defineAction({ throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED'); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index abfb14103..40a91804e 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { type: 'string' }, @@ -27,6 +27,6 @@ const Schema = defineAction({ // If no guards returned a positive return false; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.ts b/src/middleware/packages/ldp/services/registry/actions/getByType.ts index d4f765686..726d82365 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByType.ts @@ -1,10 +1,10 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Find the container options for a resource type * This only returns containers registered with the LDP registry, not the ones registered with the TypeIndex. */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } @@ -20,6 +20,6 @@ const Schema = defineAction({ ) ); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index fa9e4c19d..d77b4ff6b 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,9 +1,9 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Find the container options for a container URI */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string', optional: true }, @@ -31,6 +31,6 @@ const Schema = defineAction({ } return this.settings.defaultOptions; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 5eb2bc980..952820830 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,11 +1,11 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Get the container URI based on its path * In Pod provider config, the webId is required to find the Pod root */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { path: { type: 'string' }, @@ -23,6 +23,6 @@ const Schema = defineAction({ return urlJoin(this.settings.baseUrl, path); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index 8f5d5f3d2..c8ea3dcf3 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -3,9 +3,9 @@ import pathModule from 'path'; const pathJoin = pathModule.join; import { pathToRegexp } from 'path-to-regexp'; import { arrayOf } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { path: { type: 'string', optional: true }, @@ -90,6 +90,6 @@ const Schema = defineAction({ return options; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 9d93cae84..6a8803ad5 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -5,7 +5,7 @@ import getUriAction from './actions/getUri.ts'; import listAction from './actions/list.ts'; import registerAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const LdpRegistrySchema = { name: 'ldp.registry' as const, @@ -37,7 +37,7 @@ const LdpRegistrySchema = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId, accountData } = ctx.params; // We want to add user's containers only in Pod provider config @@ -54,7 +54,7 @@ const LdpRegistrySchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index aaf876275..ad261b2f7 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -51,6 +51,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index dc4166834..a4789ca60 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,7 +1,7 @@ import { cleanUndefined } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -78,6 +78,6 @@ const Schema = defineAction({ throw new Error(`Unknown strategy: ${strategy}`); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index cba2a3942..cdef5ce36 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,9 +1,9 @@ import fetch from 'node-fetch'; const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -53,6 +53,6 @@ const Schema = defineAction({ } } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 792f4ed20..11e67dcff 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,8 +1,8 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -51,6 +51,6 @@ const Schema = defineAction({ return result2; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index 00fd7d562..c84d69df0 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -31,6 +31,6 @@ const Schema = defineAction({ } } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index 30d33a99c..cc25e6ac2 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,8 +1,8 @@ import { Errors as E } from 'moleculer-web'; import { hasType } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string', optional: true }, @@ -83,6 +83,6 @@ const Schema = defineAction({ return resource; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index bf3b18807..f81c630d4 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -5,7 +5,7 @@ import getNetworkAction from './actions/getNetwork.ts'; import getStoredAction from './actions/getStored.ts'; import isRemoteAction from './actions/isRemote.ts'; import storeAction from './actions/store.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const LdpRemoteSchema = { name: 'ldp.remote' as const, @@ -23,12 +23,12 @@ const LdpRemoteSchema = { isRemote: isRemoteAction, store: storeAction, - runCron: defineAction({ + runCron: { // Used by tests handler() { this.updateSingleMirroredResources(); } - }) + } }, methods: { async proxyAvailable() { diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index b5e04dbdf..45bde3f6d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -1,8 +1,8 @@ import { waitForResource } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** @type {import('moleculer').ServiceActionsSchema} */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -34,6 +34,6 @@ const Schema = defineAction({ ) ); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 73b7504a7..fe85a03c6 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,8 +1,8 @@ const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resource: { type: 'object' }, @@ -74,6 +74,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 9c1d3ee53..02b334aa3 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,7 +1,7 @@ import fs from 'fs'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: 'string', @@ -66,6 +66,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 763d9b51a..c6c55bffb 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -35,6 +35,6 @@ const Schema = defineAction({ return exist; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index f7721f68e..efd0156d8 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -1,9 +1,9 @@ import createSlug from 'speakingurl'; import { v4 as uuidv4 } from 'uuid'; import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: 'string', @@ -60,6 +60,6 @@ const Schema = defineAction({ return urlJoin(containerUri, slug || uuid); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index 6ed67d06a..50e9ae91e 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,9 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { arrayOf } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -74,6 +74,6 @@ const Schema = defineAction({ } }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index db967fa23..c86db0f92 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,7 +1,7 @@ import { getContainerFromUri } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: 'string', @@ -35,6 +35,6 @@ const Schema = defineAction({ return result.map(node => node.containerUri.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index e72bffa67..033380fb8 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: 'string' @@ -25,6 +25,6 @@ const Schema = defineAction({ return result.map(node => node.type.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 146a5c073..8ba11f914 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,6 +1,6 @@ const { MoleculerError } = require('moleculer').Errors; import { namedNode } from '@rdfjs/data-model'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; function checkTriplesSubjectIsResource(triples, resourceUri) { for (const triple of triples) { @@ -18,7 +18,7 @@ function checkTriplesSubjectIsResource(triples, resourceUri) { } } -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { @@ -103,6 +103,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 321a64f21..ff18c67cb 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,9 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { cleanUndefined } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resource: { @@ -159,6 +159,6 @@ const Schema = defineAction({ webId }; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index 22481bffa..6f8f0ef66 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -2,9 +2,9 @@ import path from 'path'; import fs from 'fs'; const { MoleculerError } = require('moleculer').Errors; import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: 'string', @@ -43,6 +43,6 @@ const Schema = defineAction({ fileName }; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts index f7589311f..1951d1708 100644 --- a/src/middleware/packages/migration/service.ts +++ b/src/middleware/packages/migration/service.ts @@ -1,6 +1,6 @@ import { getAclUriFromResourceUri } from '@semapps/webacl'; import { getContainerFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const MigrationSchema = { name: 'migration' as const, @@ -13,7 +13,7 @@ const MigrationSchema = { } }, actions: { - replacePredicate: defineAction({ + replacePredicate: { async handler(ctx) { const { oldPredicate, newPredicate, dataset } = ctx.params; @@ -34,9 +34,9 @@ const MigrationSchema = { webId: 'system' }); } - }), + }, - moveResourcesToContainer: defineAction({ + moveResourcesToContainer: { async handler(ctx) { const { oldContainerUri, newContainerUri, dataset } = ctx.params; @@ -52,9 +52,9 @@ const MigrationSchema = { ); } } - }), + }, - moveResource: defineAction({ + moveResource: { async handler(ctx) { const { oldResourceUri, newResourceUri, dataset } = ctx.params; @@ -107,9 +107,9 @@ const MigrationSchema = { await this.actions.moveAclRights({ newResourceUri, oldResourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - moveAclGroup: defineAction({ + moveAclGroup: { async handler(ctx) { const { oldGroupUri, newGroupUri, dataset } = ctx.params; @@ -142,9 +142,9 @@ const MigrationSchema = { { parentCtx: ctx } ); } - }), + }, - moveAclRights: defineAction({ + moveAclRights: { async handler(ctx) { const { oldResourceUri, newResourceUri, dataset } = ctx.params; @@ -166,9 +166,9 @@ const MigrationSchema = { }); } } - }), + }, - clearUserRights: defineAction({ + clearUserRights: { async handler(ctx) { const { userUri, dataset } = ctx.params; @@ -194,7 +194,7 @@ const MigrationSchema = { webId: 'system' }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/nodeinfo/service.ts b/src/middleware/packages/nodeinfo/service.ts index 238b84189..f48ab6628 100644 --- a/src/middleware/packages/nodeinfo/service.ts +++ b/src/middleware/packages/nodeinfo/service.ts @@ -1,6 +1,6 @@ import path from 'path'; import urlJoin from 'url-join'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const NodeinfoService = { name: 'nodeinfo' as const, @@ -58,22 +58,22 @@ const NodeinfoService = { }); }, actions: { - addLink: defineAction({ + addLink: { handler(ctx) { const { rel, href } = ctx.params; this.links.push({ rel, href }); } - }), + }, - getLinks: defineAction({ + getLinks: { handler() { return { links: this.links }; } - }), + }, - getSchema: defineAction({ + getSchema: { async handler(ctx) { const users = await this.actions.getUsersCount({}, { parentCtx: ctx }); return { @@ -86,9 +86,9 @@ const NodeinfoService = { metadata: this.settings.metadata }; } - }), + }, - getUsersCount: defineAction({ + getUsersCount: { // Overwrite this method to return your users count async handler() { return { @@ -97,7 +97,7 @@ const NodeinfoService = { activeMonth: 0 }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index e4ae69c25..4f84253fa 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -2,7 +2,7 @@ import MailService from 'moleculer-mail'; import cronParser from 'cron-parser'; import { TripleStoreAdapter } from '@semapps/triplestore'; import DigestSubscriptionService from './subscription.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const DigestNotificationsService = { name: 'digest' as const, @@ -38,7 +38,7 @@ const DigestNotificationsService = { } }, actions: { - build: defineAction({ + build: { async handler(ctx) { const { frequency, timestamp } = ctx.params; const success = []; @@ -128,7 +128,7 @@ const DigestNotificationsService = { return { failures, success }; } - }) + } }, methods: { // Optional method called for each notification diff --git a/src/middleware/packages/notifications/services/digest/subscription.ts b/src/middleware/packages/notifications/services/digest/subscription.ts index 4d760bf93..59ea3afad 100644 --- a/src/middleware/packages/notifications/services/digest/subscription.ts +++ b/src/middleware/packages/notifications/services/digest/subscription.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const DigestSubscriptionSchema = { name: 'digest.subscription' as const, @@ -11,13 +11,13 @@ const DigestSubscriptionSchema = { }, dependencies: ['triplestore'], actions: { - findByWebId: defineAction({ + findByWebId: { async handler(ctx) { const { webId } = ctx.params; const subscriptions = await this._find(ctx, { query: { webId } }); return subscriptions.length > 0 ? subscriptions[0] : null; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/notifications/services/expo-push/device.ts b/src/middleware/packages/notifications/services/expo-push/device.ts index 431ff6308..ab38a03ad 100644 --- a/src/middleware/packages/notifications/services/expo-push/device.ts +++ b/src/middleware/packages/notifications/services/expo-push/device.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ExpoPushDeviceService = { name: 'expo-push.device' as const, @@ -14,7 +14,7 @@ const ExpoPushDeviceService = { } }, actions: { - subscribe: defineAction({ + subscribe: { async handler(ctx) { const { name, yearClass, userUri, pushToken } = ctx.params; @@ -61,9 +61,9 @@ const ExpoPushDeviceService = { return device; } - }), + }, - findUsersDevices: defineAction({ + findUsersDevices: { async handler(ctx) { const devices = []; @@ -85,7 +85,7 @@ const ExpoPushDeviceService = { return devices; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/notifications/services/expo-push/notification.ts b/src/middleware/packages/notifications/services/expo-push/notification.ts index 226c4b85f..84c6db6bf 100644 --- a/src/middleware/packages/notifications/services/expo-push/notification.ts +++ b/src/middleware/packages/notifications/services/expo-push/notification.ts @@ -1,7 +1,7 @@ import DbService from 'moleculer-db'; import { Expo } from 'expo-server-sdk'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ExpoPushNotificationService = { name: 'expo-push.notification' as const, @@ -17,15 +17,15 @@ const ExpoPushNotificationService = { setInterval(this.actions.checkReceipts, 5 * 60 * 1000); }, actions: { - send: defineAction({ + send: { async handler(ctx) { await this.actions.queue(ctx.params, { parentCtx: ctx }); this.actions.processQueue({}, { parentCtx: ctx }); } - }), + }, - queue: defineAction({ + queue: { async handler(ctx) { const { to, message, data } = ctx.params; @@ -49,9 +49,9 @@ const ExpoPushNotificationService = { ); } } - }), + }, - processQueue: defineAction({ + processQueue: { async handler(ctx) { const notifications = await this.findByStatus('queued', ctx); @@ -84,9 +84,9 @@ const ExpoPushNotificationService = { } } } - }), + }, - checkReceipts: defineAction({ + checkReceipts: { async handler(ctx) { const notifications = await this.findByStatus('processed', ctx); @@ -133,7 +133,7 @@ const ExpoPushNotificationService = { } } } - }) + } }, methods: { async findByStatus(status, ctx) { diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 654e3a7e4..519314808 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import path from 'path'; import MailService from 'moleculer-mail'; import { getSlugFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const delay = t => new Promise(resolve => setTimeout(resolve, t)); const SingleMailNotificationsService = { @@ -21,7 +21,7 @@ const SingleMailNotificationsService = { data: {} }, events: { - 'activitypub.inbox.received': defineServiceEvent({ + 'activitypub.inbox.received': { async handler(ctx) { const { activity, recipients } = ctx.params; @@ -60,7 +60,7 @@ const SingleMailNotificationsService = { } } } - }) + } }, methods: { // Optional method called for each notification diff --git a/src/middleware/packages/ontologies/actions/findNamespace.ts b/src/middleware/packages/ontologies/actions/findNamespace.ts index 044289c89..065b14c29 100644 --- a/src/middleware/packages/ontologies/actions/findNamespace.ts +++ b/src/middleware/packages/ontologies/actions/findNamespace.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { prefix: 'string' @@ -19,6 +19,6 @@ const Schema = defineAction({ return null; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/findPrefix.ts b/src/middleware/packages/ontologies/actions/findPrefix.ts index 40170c949..121dd8520 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.ts +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -1,8 +1,8 @@ import fetch from 'node-fetch'; import { isURL } from '../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: 'string' @@ -24,6 +24,6 @@ const Schema = defineAction({ return null; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/get.ts b/src/middleware/packages/ontologies/actions/get.ts index ba383df17..b94610ad9 100644 --- a/src/middleware/packages/ontologies/actions/get.ts +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { prefix: { type: 'string', optional: true }, @@ -28,6 +28,6 @@ const Schema = defineAction({ return ontology; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index 10c4812ef..aca958708 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -11,6 +11,6 @@ const Schema = defineAction({ .map(ontology => [ontology.prefix, ontology.namespace]) ); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index 7309d61b1..83762e30d 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -10,6 +10,6 @@ const Schema = defineAction({ .map(ontology => `PREFIX ${ontology.prefix}: <${ontology.namespace}>`) .join('\n'); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index f047412a5..0933b9d65 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -1,11 +1,11 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, handler() { return Object.values(this.ontologies); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 641872042..24be240aa 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -1,8 +1,8 @@ import { isURL } from '../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; const regexPrefix = /^([^:]+):([^:]+)$/gm; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { value: 'string' @@ -24,6 +24,6 @@ const Schema = defineAction({ return value.replace(`${ontology.prefix}:`, ontology.namespace); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index ff62a2a50..2a855aa57 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -1,7 +1,7 @@ import { isURL, arrayOf } from '../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { prefix: 'string', @@ -57,6 +57,6 @@ const Schema = defineAction({ ctx.emit('ontologies.registered', { prefix, namespace, owl, jsonldContext, preserveContextUri }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/sub-services/registry.ts b/src/middleware/packages/ontologies/sub-services/registry.ts index 7fdf1e5bd..035f461bf 100644 --- a/src/middleware/packages/ontologies/sub-services/registry.ts +++ b/src/middleware/packages/ontologies/sub-services/registry.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const OntologiesRegistrySchema = { name: 'ontologies.registry' as const, @@ -10,30 +10,30 @@ const OntologiesRegistrySchema = { idField: '@id' }, actions: { - getByPrefix: defineAction({ + getByPrefix: { async handler(ctx) { const { prefix } = ctx.params; const [ontology] = await this._find(ctx, { query: { prefix } }); return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; } - }), + }, - getByNamespace: defineAction({ + getByNamespace: { async handler(ctx) { const { namespace } = ctx.params; const [ontology] = await this._find(ctx, { query: { namespace } }); return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; } - }), + }, - list: defineAction({ + list: { async handler(ctx) { const ontologies = await this._list(ctx, {}); return ontologies.rows.map(({ prefix, namespace }) => ({ prefix, namespace })); } - }), + }, - updateOrCreate: defineAction({ + updateOrCreate: { async handler(ctx) { const { prefix, namespace } = ctx.params; @@ -51,7 +51,7 @@ const OntologiesRegistrySchema = { }); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/authorizer.ts b/src/middleware/packages/solid/services/authorizer.ts index d3ce7b51b..03aac8802 100644 --- a/src/middleware/packages/solid/services/authorizer.ts +++ b/src/middleware/packages/solid/services/authorizer.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const SolidAuthorizerSchema = { name: 'solid-authorizer' as const, @@ -7,7 +7,7 @@ const SolidAuthorizerSchema = { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission`, priority: 1 }); }, actions: { - hasPermission: defineAction({ + hasPermission: { async handler(ctx) { const { uri, webId } = ctx.params; @@ -18,7 +18,7 @@ const SolidAuthorizerSchema = { return undefined; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/endpoint.ts b/src/middleware/packages/solid/services/endpoint.ts index 8a52e08eb..599d33b54 100644 --- a/src/middleware/packages/solid/services/endpoint.ts +++ b/src/middleware/packages/solid/services/endpoint.ts @@ -1,5 +1,5 @@ import { SpecialEndpointMixin } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const SolidEndpointSchema = { name: 'solid-endpoint' as const, @@ -19,14 +19,14 @@ const SolidEndpointSchema = { await this.broker.call('ldp.link-header.register', { actionName: 'solid-endpoint.getLink' }); }, actions: { - getLink: defineAction({ + getLink: { handler() { return { uri: this.endpointUrl, rel: 'http://www.w3.org/ns/solid/terms#storageDescription' }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index cf48e24a6..71b0f7a08 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -5,7 +5,7 @@ import { ACTIVITY_TYPES } from '@semapps/activitypub'; import { namedNode } from '@rdfjs/data-model'; import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Solid Notification Channel mixin. @@ -72,7 +72,7 @@ const Schema = { this.loadChannelsFromDb({ removeOldChannels: true }); }, actions: { - endpointPost: defineAction({ + endpointPost: { // Action called by the SpecialEndpointMixin when POSTing to the endpoint async handler(ctx) { // Expect format https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#webhooks @@ -146,64 +146,64 @@ const Schema = { { parentCtx: ctx } ); } - }), + }, - getCache: defineAction({ + getCache: { handler() { return this.channels; } - }), + }, - resetCache: defineAction({ + resetCache: { handler() { this.channels = []; } - }) + } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { const { resourceUri } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { const { resourceUri } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); } - }), + }, - 'ldp.container.attached': defineServiceEvent({ + 'ldp.container.attached': { async handler(ctx) { const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); } - }), + }, - 'ldp.container.detached': defineServiceEvent({ + 'ldp.container.detached': { async handler(ctx) { const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); } - }), + }, - 'activitypub.collection.added': defineServiceEvent({ + 'activitypub.collection.added': { async handler(ctx) { const { collectionUri, itemUri, item } = ctx.params; // Mastodon sometimes send unfetchable activities (like `Accept` activities) @@ -211,14 +211,14 @@ const Schema = { // We will send a notification to the listener with the whole activity this.onContainerOrCollectionEvent(collectionUri, itemUri || item, ACTIVITY_TYPES.ADD); } - }), + }, - 'activitypub.collection.removed': defineServiceEvent({ + 'activitypub.collection.removed': { async handler(ctx) { const { collectionUri, itemUri } = ctx.params; this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); } - }) + } }, methods: { async getModified(resourceUri) { diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index ec7c4a046..fdee9ab37 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,6 +1,6 @@ import fetch from 'node-fetch'; import NotificationChannelMixin from './notification-channel.mixin.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const queueOptions = process.env.NODE_ENV === 'test' @@ -35,15 +35,15 @@ const WebhookChannel2023Service = { if (!this.createJob) throw new Error('The QueueMixin must be configured with this service'); }, actions: { - getAppChannels: defineAction({ + getAppChannels: { async handler(ctx) { const { appUri, webId } = ctx.params; const { origin: appOrigin } = new URL(appUri); return this.channels.filter(c => c.webId === webId && c.sendTo.startsWith(appOrigin)); } - }), + }, - deleteAppChannels: defineAction({ + deleteAppChannels: { async handler(ctx) { const { appUri, webId } = ctx.params; const appChannels = await this.actions.getAppChannels({ appUri, webId }, { parentCtx: ctx }); @@ -51,7 +51,7 @@ const WebhookChannel2023Service = { await this.actions.delete({ resourceUri: appChannel.id, webId: appChannel.webId }); } } - }) + } }, methods: { onEvent(channel, activity) { diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 3bcb6b8e0..0d00e1121 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -8,7 +8,7 @@ const { MoleculerError } = require('moleculer').Errors; import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; import { notify } from '@semapps/ontologies'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const SolidNotificationsListenerSchema = { name: 'solid-notifications.listener' as const, @@ -50,7 +50,7 @@ const SolidNotificationsListenerSchema = { }); }, actions: { - register: defineAction({ + register: { async handler(ctx) { const { resourceUri, actionName } = ctx.params; @@ -146,9 +146,9 @@ const SolidNotificationsListenerSchema = { return listener; } - }), + }, - transfer: defineAction({ + transfer: { async handler(ctx) { const { uuid, ...data } = ctx.params; const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuid); @@ -167,13 +167,13 @@ const SolidNotificationsListenerSchema = { throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); } } - }), + }, - getCache: defineAction({ + getCache: { handler() { return this.listeners; } - }) + } }, methods: { async getSolidEndpoint(resourceUri) { diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 080f09fd5..01a7f3134 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { triple, namedNode } from '@rdfjs/data-model'; import { pim } from '@semapps/ontologies'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const SolidStorageSchema = { @@ -26,7 +26,7 @@ const SolidStorageSchema = { }); }, actions: { - create: defineAction({ + create: { async handler(ctx) { const { username } = ctx.params; if (!username) throw new Error('Cannot create Solid storage without a username'); @@ -44,18 +44,18 @@ const SolidStorageSchema = { return storageRootUri; } - }), + }, - getUrl: defineAction({ + getUrl: { async handler(ctx) { const { webId } = ctx.params; // This is faster, but later we should use the 'pim:storage' property of the webId return urlJoin(webId, this.settings.pathName); } - }) + } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; @@ -92,7 +92,7 @@ const SolidStorageSchema = { webId: 'system' }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 665ec986c..34de11e5d 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -3,7 +3,7 @@ import { solid, skos, apods } from '@semapps/ontologies'; import { MIME_TYPES } from '@semapps/mime-types'; import { namedNode, triple } from '@rdfjs/data-model'; import TypeRegistrationsService from './type-registrations.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const TypeIndexesSchema = { name: 'type-indexes' as const, @@ -30,7 +30,7 @@ const TypeIndexesSchema = { await this.broker.call('ontologies.register', apods); }, actions: { - createPublicIndex: defineAction({ + createPublicIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -63,9 +63,9 @@ const TypeIndexesSchema = { webId }); } - }), + }, - createPrivateIndex: defineAction({ + createPrivateIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -101,9 +101,9 @@ const TypeIndexesSchema = { webId }); } - }), + }, - getPublicIndex: defineAction({ + getPublicIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -114,9 +114,9 @@ const TypeIndexesSchema = { return user['solid:publicTypeIndex']; } - }), + }, - getPrivateIndex: defineAction({ + getPrivateIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -127,9 +127,9 @@ const TypeIndexesSchema = { return preferencesFileUri?.['solid:privateTypeIndex']; } - }), + }, - waitForIndexCreation: defineAction({ + waitForIndexCreation: { async handler(ctx) { const { type, webId } = ctx.params; let indexUri; @@ -156,9 +156,9 @@ const TypeIndexesSchema = { return indexUri; } - }), + }, - awaitCreateComplete: defineAction({ + awaitCreateComplete: { /** * Wait until all type registrations have been created for the newly-created user */ @@ -181,7 +181,7 @@ const TypeIndexesSchema = { ); } while (numTypeRegistrations < numContainersWithTypeIndex); } - }) + } }, methods: { async preferencesFileAvailable() { @@ -190,7 +190,7 @@ const TypeIndexesSchema = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; @@ -205,7 +205,7 @@ const TypeIndexesSchema = { await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index 24d0c9d81..c297ad251 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { namedNode, triple } from '@rdfjs/data-model'; import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const TypeRegistrationsSchema = { name: 'type-registrations' as const, @@ -14,7 +14,7 @@ const TypeRegistrationsSchema = { activateTombstones: false }, actions: { - register: defineAction({ + register: { visibility: 'public', params: { types: { type: 'array' }, @@ -109,14 +109,14 @@ const TypeRegistrationsSchema = { return registrationUri; } } - }), + }, /** * Bind an application to a certain type of resources * If no other app is bound with this type yet, it will be marked as the default app * Otherwise, the app will be added to the list of available apps, that the user can switch to */ - bindApp: defineAction({ + bindApp: { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -137,12 +137,12 @@ const TypeRegistrationsSchema = { await ctx.call('type-registrations.put', { resource: registration, webId }); } - }), + }, /** * Unbind an application from a certain type of resource (Mirror of the above action.) */ - unbindApp: defineAction({ + unbindApp: { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -171,9 +171,9 @@ const TypeRegistrationsSchema = { webId }); } - }), + }, - getByType: defineAction({ + getByType: { visibility: 'public', params: { type: { type: 'string' }, @@ -195,9 +195,9 @@ const TypeRegistrationsSchema = { // There can be several TypeRegistration per type return arrayOf(filteredContainer['ldp:contains']); } - }), + }, - getByContainerUri: defineAction({ + getByContainerUri: { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -217,9 +217,9 @@ const TypeRegistrationsSchema = { // There should be only one TypeRegistration per container return arrayOf(filteredContainer['ldp:contains'])[0]; } - }), + }, - findContainersUris: defineAction({ + findContainersUris: { visibility: 'public', params: { type: { type: 'string' }, @@ -232,13 +232,13 @@ const TypeRegistrationsSchema = { return registrations.map(r => r['solid:instanceContainer']); } - }), + }, /** * Reset the public and private registries of the given user * Based on the information found on the LDP registry */ - resetFromRegistry: defineAction({ + resetFromRegistry: { visibility: 'public', params: { webId: { type: 'string' } @@ -278,10 +278,10 @@ const TypeRegistrationsSchema = { } } } - }) + } }, events: { - 'ldp.container.created': defineServiceEvent({ + 'ldp.container.created': { async handler(ctx) { const { containerUri, options, webId } = ctx.params; @@ -299,7 +299,7 @@ const TypeRegistrationsSchema = { ); } } - }) + } }, hooks: { after: { diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 3f7a6c8ef..a392b8fb7 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -1,7 +1,7 @@ import path from 'path'; import urlJoin from 'url-join'; import getRoute from './getRoute.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const SparqlEndpointService = { name: 'sparqlEndpoint' as const, @@ -23,7 +23,7 @@ const SparqlEndpointService = { } }, actions: { - query: defineAction({ + query: { async handler(ctx) { const query = ctx.params.query || ctx.meta.rawBody; const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; @@ -51,10 +51,10 @@ const SparqlEndpointService = { return response; } - }) + } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; if (this.settings.podProvider) { @@ -65,7 +65,7 @@ const SparqlEndpointService = { }); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index b147593f2..a3d530942 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -4,7 +4,7 @@ const { MoleculerError } = require('moleculer').Errors; import { createFragmentURL, arrayOf } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; import SynchronizerService from './synchronizer.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); const MirrorSchema = { @@ -45,7 +45,7 @@ const MirrorSchema = { } }, actions: { - mirror: defineAction({ + mirror: { visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -170,7 +170,7 @@ const MirrorSchema = { return remoteRelayActorUri; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index ae67001a5..55be80530 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { @@ -40,6 +40,6 @@ const Schema = defineAction({ return results.length; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts index 4ad78f163..367d16f0c 100644 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts +++ b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { dataset: { @@ -41,6 +41,6 @@ const Schema = defineAction({ ); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index d8532b7d5..eda622ed8 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { webId: { @@ -28,6 +28,6 @@ const Schema = defineAction({ } }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 89c6f9b25..e6742c67c 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resource: { @@ -52,6 +52,6 @@ const Schema = defineAction({ }); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 2554d137d..759a70660 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,8 +1,8 @@ import urlJoin from 'url-join'; import { MIME_TYPES, negotiateType } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { query: { @@ -77,6 +77,6 @@ const Schema = defineAction({ throw new Error('SPARQL Verb not supported'); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts index 3c98cdb95..66b8a086b 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { triple: { @@ -45,6 +45,6 @@ const Schema = defineAction({ dataset }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index 32fb0c822..f72629cce 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { query: { @@ -42,6 +42,6 @@ const Schema = defineAction({ }); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 64bf6d833..0be6378e0 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import path from 'path'; import urlJoin from 'url-join'; import format from 'string-template'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const delay = t => new Promise(resolve => setTimeout(resolve, t)); /** @type {import('moleculer').ServiceSchema} */ @@ -21,7 +21,7 @@ const DatasetService = { }; }, actions: { - backup: defineAction({ + backup: { async handler(ctx) { const { dataset } = ctx.params; @@ -35,9 +35,9 @@ const DatasetService = { const { taskId } = await response.json(); await this.actions.waitForTaskCompletion({ taskId }, { parentCtx: ctx }); } - }), + }, - create: defineAction({ + create: { async handler(ctx) { const { dataset, secure } = ctx.params; if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); @@ -67,9 +67,9 @@ const DatasetService = { } } } - }), + }, - exist: defineAction({ + exist: { async handler(ctx) { const { dataset } = ctx.params; const response = await fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { @@ -77,9 +77,9 @@ const DatasetService = { }); return response.status === 200; } - }), + }, - list: defineAction({ + list: { async handler() { const response = await fetch(urlJoin(this.settings.url, '$/datasets'), { headers: this.headers @@ -91,9 +91,9 @@ const DatasetService = { } return []; } - }), + }, - isSecure: defineAction({ + isSecure: { async handler(ctx) { const { dataset } = ctx.params; // Check if http://semapps.org/webacl graph exists @@ -103,9 +103,9 @@ const DatasetService = { webId: 'system' }); } - }), + }, - waitForCreation: defineAction({ + waitForCreation: { async handler(ctx) { const { dataset } = ctx.params; let datasetExist; @@ -114,9 +114,9 @@ const DatasetService = { datasetExist = await this.actions.exist({ dataset }, { parentCtx: ctx }); } while (!datasetExist); } - }), + }, - waitForTaskCompletion: defineAction({ + waitForTaskCompletion: { async handler(ctx) { const { taskId } = ctx.params; let task; @@ -134,9 +134,9 @@ const DatasetService = { } } while (!task || !task.finished); } - }), + }, - delete: defineAction({ + delete: { params: { dataset: { type: 'string' }, iKnowWhatImDoing: { type: 'boolean' } @@ -177,7 +177,7 @@ const DatasetService = { ]); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/triplestore/subservices/document.ts b/src/middleware/packages/triplestore/subservices/document.ts index ad84527df..62cba3720 100644 --- a/src/middleware/packages/triplestore/subservices/document.ts +++ b/src/middleware/packages/triplestore/subservices/document.ts @@ -1,11 +1,11 @@ import { v4 as uuidv4 } from 'uuid'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const DocumentService = { name: 'triplestore.document' as const, actions: { - create: defineAction({ + create: { async handler(ctx) { // TODO Do not allow to pass the document URI on creation let { documentUri } = ctx.params; @@ -25,9 +25,9 @@ const DocumentService = { return documentUri; } - }), + }, - exist: defineAction({ + exist: { async handler(ctx) { const { documentUri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; @@ -38,9 +38,9 @@ const DocumentService = { dataset }); } - }), + }, - clear: defineAction({ + clear: { async handler(ctx) { const { documentUri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; @@ -58,9 +58,9 @@ const DocumentService = { dataset }); } - }), + }, - delete: defineAction({ + delete: { async handler(ctx) { const { documentUri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; @@ -72,7 +72,7 @@ const DocumentService = { dataset }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index e3392317e..1f45540b3 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -7,7 +7,7 @@ const { quad, namedNode, literal, blankNode } = DataFactory; const { MoleculerError } = require('moleculer').Errors; import { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } from '@semapps/ldp'; import { parseHeader } from '@semapps/middlewares'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const prefixes = { dc: 'http://purl.org/dc/terms/', @@ -174,7 +174,7 @@ const VoidSchema = { }); }, actions: { - getRemote: defineAction({ + getRemote: { visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -196,9 +196,9 @@ const VoidSchema = { this.logger.warn(`Silently ignored error when fetching void endpoint: ${e.message}`); } } - }), + }, - get: defineAction({ + get: { visibility: 'public', params: { accept: { type: 'string', optional: true } @@ -345,9 +345,9 @@ const VoidSchema = { return await this.formatOutput(ctx, graph, url, accept === MIME_TYPES.JSON); } - }), + }, - api_get: defineAction({ + api_get: { handler: async function api(ctx) { let { accept } = ctx.meta.headers; if (accept.includes('*/*')) accept = MIME_TYPES.JSON; @@ -358,7 +358,7 @@ const VoidSchema = { accept: accept }); } - }) + } }, methods: { async getContainers(ctx) { diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index e0c2e86ec..cbe914cbb 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const AuthorizerBotSchema = { name: 'authorizer-bot' as const, @@ -31,7 +31,7 @@ const AuthorizerBotSchema = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { const { resourceUri, newData } = ctx.params; for (const rule of this.settings.rules) { @@ -59,9 +59,9 @@ const AuthorizerBotSchema = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { const { resourceUri, newData, oldData } = ctx.params; @@ -114,7 +114,7 @@ const AuthorizerBotSchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index c0ac02c60..b64ae34f3 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -1,6 +1,6 @@ import { arrayOf } from '@semapps/ldp'; import { hasType } from '../utils.ts'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const GroupsManagerSchema = { name: 'groups-manager' as const, @@ -18,7 +18,7 @@ const GroupsManagerSchema = { } }, actions: { - refreshAll: defineAction({ + refreshAll: { async handler(ctx) { const usersContainer = await ctx.call('ldp.container.get', { containerUri: this.settings.usersContainer, @@ -47,7 +47,7 @@ const GroupsManagerSchema = { } } } - }) + } }, methods: { matchRule(rule, record) { @@ -66,7 +66,7 @@ const GroupsManagerSchema = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { const { resourceUri, newData } = ctx.params; if (this.isUser(newData)) { @@ -82,9 +82,9 @@ const GroupsManagerSchema = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { const { resourceUri, newData } = ctx.params; if (this.isUser(newData)) { @@ -107,9 +107,9 @@ const GroupsManagerSchema = { } } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { const { resourceUri, oldData } = ctx.params; if (this.isUser(oldData)) { @@ -123,7 +123,7 @@ const GroupsManagerSchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts index 7079b9bcc..2161f257c 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.ts +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; // A acl:Write permission implicitly gives acl:Read and acl:Append permissions const modeMapping = { @@ -15,7 +15,7 @@ const WebaclAuthorizerSchema = { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, actions: { - hasPermission: defineAction({ + hasPermission: { async handler(ctx) { const { uri, type, mode, webId } = ctx.params; @@ -34,7 +34,7 @@ const WebaclAuthorizerSchema = { return undefined; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index de93a5904..3919c39ba 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -1,9 +1,9 @@ -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const WebaclCacheSchema = { name: 'webacl.cache' as const, actions: { - invalidateResourceRights: defineAction({ + invalidateResourceRights: { // Invalidate the WebACL cache of the given resource // If specificUriOnly is false, it will invalidate all resources starting with the given URI async handler(ctx) { @@ -13,9 +13,9 @@ const WebaclCacheSchema = { await this.broker.cacher.clean(`webacl.resource.hasRights:${uri}${specificUriOnly ? '|**' : '**'}`); } } - }), + }, - invalidateAllUserRights: defineAction({ + invalidateAllUserRights: { // Invalidate all WebACL cache for the given user async handler(ctx) { if (this.broker.cacher) { @@ -24,9 +24,9 @@ const WebaclCacheSchema = { await this.broker.cacher.clean(`webacl.resource.hasRights:**${uri}**`); } } - }), + }, - invalidateAllUserRightsOnPod: defineAction({ + invalidateAllUserRightsOnPod: { async handler(ctx) { if (this.broker.cacher) { const { webId, podOwner } = ctx.params; @@ -36,9 +36,9 @@ const WebaclCacheSchema = { await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}/**|**|${webId}`); } } - }), + }, - generateForUser: defineAction({ + generateForUser: { async handler(ctx) { const { webId } = ctx.params; this.logger.info(`Generating cache for user ${webId}`); @@ -55,9 +55,9 @@ const WebaclCacheSchema = { } } } - }), + }, - generateForAll: defineAction({ + generateForAll: { async handler(ctx) { const { usersContainer } = ctx.params; const users = await ctx.call('ldp.container.getUris', { containerUri: usersContainer }); @@ -65,10 +65,10 @@ const WebaclCacheSchema = { await this.actions.generateForUser({ webId }, { parentCtx: ctx }); } } - }) + } }, events: { - 'webacl.resource.updated': defineServiceEvent({ + 'webacl.resource.updated': { async handler(ctx) { const { uri, isContainer, defaultRightsUpdated } = ctx.params; await this.actions.invalidateResourceRights( @@ -76,37 +76,37 @@ const WebaclCacheSchema = { { parentCtx: ctx } ); } - }), + }, - 'webacl.resource.deleted': defineServiceEvent({ + 'webacl.resource.deleted': { async handler(ctx) { const { uri, isContainer } = ctx.params; await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); } - }), + }, - 'webacl.resource.user-deleted': defineServiceEvent({ + 'webacl.resource.user-deleted': { async handler(ctx) { const { webId } = ctx.params; await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); } - }), + }, - 'webacl.group.member-added': defineServiceEvent({ + 'webacl.group.member-added': { async handler(ctx) { const { groupUri, memberUri } = ctx.params; await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); } - }), + }, - 'webacl.group.member-removed': defineServiceEvent({ + 'webacl.group.member-removed': { async handler(ctx) { const { groupUri, memberUri } = ctx.params; await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 6e5394515..bee3ead44 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -1,7 +1,7 @@ const { MoleculerError } = require('moleculer').Errors; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); @@ -15,7 +15,7 @@ export const api = async function api(ctx) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -61,4 +61,4 @@ export const action = defineAction({ ctx.emit('webacl.group.member-added', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 18d819cdd..a5bab83dd 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -2,7 +2,7 @@ const { MoleculerError } = require('moleculer').Errors; import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); @@ -21,7 +21,7 @@ export const api = async function api(ctx) { ctx.meta.$statusCode = 201; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupUri: { type: 'string', optional: true }, @@ -79,4 +79,4 @@ export const action = defineAction({ return { groupUri }; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index 7d0bdd9fc..d3a63419f 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -2,7 +2,7 @@ const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; @@ -13,7 +13,7 @@ export const api = async function api(ctx) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -56,4 +56,4 @@ export const action = defineAction({ await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index 04851fae8..edccb034d 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -1,9 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -27,4 +27,4 @@ export const action = defineAction({ webId: 'system' }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index b7e9d9729..10d0b1e8f 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,11 +1,11 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; return await ctx.call('webacl.group.getGroups', {}); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { webId: { type: 'string', optional: true } @@ -55,4 +55,4 @@ export const action = defineAction({ return groups.map(m => m.g.value); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index e9548cdea..3c291856f 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -1,7 +1,7 @@ const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; @@ -10,7 +10,7 @@ export const api = async function api(ctx) { }); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -53,4 +53,4 @@ export const action = defineAction({ return members.map(m => m.m.value); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.ts b/src/middleware/packages/webacl/services/group/actions/getUri.ts index e54b45729..2294ba30c 100644 --- a/src/middleware/packages/webacl/services/group/actions/getUri.ts +++ b/src/middleware/packages/webacl/services/group/actions/getUri.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: false, trim: true } @@ -10,4 +10,4 @@ export const action = defineAction({ const { groupSlug } = ctx.params; return urlJoin(this.settings.baseUrl, '_groups', groupSlug); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 86587ebf5..9fb568127 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -1,9 +1,9 @@ const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -47,4 +47,4 @@ export const action = defineAction({ webId: 'system' }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 2c803dc55..83b9fd2d0 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -1,7 +1,7 @@ const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { if (!ctx.params.deleteUserUri) @@ -16,7 +16,7 @@ export const api = async function api(ctx) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -61,4 +61,4 @@ export const action = defineAction({ ctx.emit('webacl.group.member-removed', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index b6dfb3ad6..ed63343cd 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -11,7 +11,7 @@ import { FULL_AGENTCLASS_URI } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { const contentType = ctx.meta.headers['content-type']; @@ -34,7 +34,7 @@ export const api = async function api(ctx) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -162,4 +162,4 @@ export const action = defineAction({ ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); return returnValues; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index 12037a10d..be9c686eb 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -34,4 +34,4 @@ export const action = defineAction({ interval = setInterval(checkRights, 1000); }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index b871cc1ae..1b28e5eb7 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string', optional: false } @@ -28,4 +28,4 @@ export const action = defineAction({ { meta: { webId: null, dataset: null } } ); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index e2da4b3af..0d11c0339 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { webId: { type: 'string', optional: false } @@ -24,4 +24,4 @@ export const action = defineAction({ { meta: { webId: null, dataset: null } } ); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index bc1363a57..ec35ed385 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -1,7 +1,7 @@ import { getAclUriFromResourceUri } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { uri: { type: 'string', optional: false } @@ -13,4 +13,4 @@ export const action = defineAction({ rel: 'acl' }; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index bce96f0f8..adb5f3902 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -13,7 +13,7 @@ import { getUserAgentSearchParam } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; const prefixes = { acl: 'http://www.w3.org/ns/auth/acl#', @@ -193,7 +193,7 @@ export const api = async function api(ctx) { }); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -215,4 +215,4 @@ export const action = defineAction({ return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index 10a817c64..b259a0c14 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -1,7 +1,7 @@ import { arrayOf } from '@semapps/ldp'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' } @@ -28,4 +28,4 @@ export const action = defineAction({ // Deduplicate (users might be in multiple groups). return [...new Set(usersWithReadRights)]; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index 49578d33c..5fb3ed566 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -9,7 +9,7 @@ import { getAclUriFromResourceUri } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; const perms = { read: 'Read', @@ -95,7 +95,7 @@ export const api = async function api(ctx) { }); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -128,4 +128,4 @@ export const action = defineAction({ await this.checkResourceOrContainerExists(ctx, resourceUri); return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts index ef94bdcf9..a63713a35 100644 --- a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts +++ b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' } @@ -14,4 +14,4 @@ export const action = defineAction({ }); return read; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index b90bc591d..7cb6d65a6 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', async handler(ctx) { const { webId } = ctx.params; @@ -57,4 +57,4 @@ export const action = defineAction({ } } } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 3db9d0466..359e9b8b4 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -2,9 +2,9 @@ const { MoleculerError } = require('moleculer').Errors; import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string', optional: false }, @@ -68,4 +68,4 @@ export const action = defineAction({ { meta: { webId: null, dataset: null } } ); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 0495f8c17..1795e0c33 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -10,7 +10,7 @@ import { FULL_FOAF_AGENT } from '../../../utils.ts'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(ctx) { const contentType = ctx.meta.headers['content-type']; @@ -33,7 +33,7 @@ export const api = async function api(ctx) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -151,4 +151,4 @@ export const action = defineAction({ ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); return returnValues; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts index 3c1fba17d..2e028bda6 100644 --- a/src/middleware/packages/webfinger/service.ts +++ b/src/middleware/packages/webfinger/service.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const WebfingerService = { name: 'webfinger' as const, @@ -26,7 +26,7 @@ const WebfingerService = { }); }, actions: { - get: defineAction({ + get: { async handler(ctx) { const { resource } = ctx.params; @@ -53,9 +53,9 @@ const WebfingerService = { ctx.meta.$statusCode = 404; } - }), + }, - getRemoteUri: defineAction({ + getRemoteUri: { // TODO add cache if response.ok async handler(ctx) { const { account } = ctx.params; @@ -74,7 +74,7 @@ const WebfingerService = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index a6b4be0f2..563b610a5 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -2,7 +2,7 @@ import path from 'path'; import DbService from 'moleculer-db'; const { MoleculerError, ServiceSchemaError } = require('moleculer').Errors; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const WebhooksService = { name: 'webhooks' as const, @@ -26,7 +26,7 @@ const WebhooksService = { } }, actions: { - process: defineAction({ + process: { async handler(ctx) { const { hash, ...data } = ctx.params; let webhook; @@ -44,9 +44,9 @@ const WebhooksService = { return await this.actions[webhook.action]({ data, user: webhook.user }, { parentCtx: ctx }); } } - }), + }, - generate: defineAction({ + generate: { async handler(ctx) { const userUri = ctx.meta.webId || ctx.params.userUri; const { action } = ctx.params; @@ -66,9 +66,9 @@ const WebhooksService = { return webhook['@id']; } - }), + }, - getApiRoutes: defineAction({ + getApiRoutes: { handler(basePath) { return [ // Unsecured routes @@ -95,7 +95,7 @@ const WebhooksService = { } ]; } - }) + } }, queues: { webhooks: { diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 39e727936..6931b1160 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { foaf, schema } from '@semapps/ontologies'; import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const WebIdService = { @@ -31,7 +31,7 @@ const WebIdService = { await this.broker.call('ontologies.register', schema); }, actions: { - get: defineAction({ + get: { handler(ctx) { // Always get WebID as system and on the correct dataset, since they are public return ctx.call( @@ -47,9 +47,9 @@ const WebIdService = { } ); } - }), + }, - createWebId: defineAction({ + createWebId: { /** * This should only be called after the user has been authenticated */ @@ -109,7 +109,7 @@ const WebIdService = { return webId; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index ce1c6dc88..815bce87d 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -1,4 +1,4 @@ -import { ServiceBroker, defineAction } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import fs from 'fs'; import { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; @@ -104,7 +104,7 @@ const initialize = async () => { permissions }, actions: { - getHeaderLinks: defineAction({ + getHeaderLinks: { handler() { return [ { @@ -113,7 +113,7 @@ const initialize = async () => { } ]; } - }) + } } }); From 4fde1bb26c1035ea16ee44ddead4ece7a0d03f49 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:20:47 +0300 Subject: [PATCH 052/165] rm define wrappers --- .../activitypub/mixins/activities-handler.ts | 6 +- .../packages/activitypub/mixins/bot.ts | 10 +-- .../activitypub/services/activity-mapping.ts | 14 ++-- .../activitypub/subservices/activity.ts | 18 ++--- .../services/activitypub/subservices/actor.ts | 38 +++++----- .../services/activitypub/subservices/api.ts | 14 ++-- .../subservices/collection/actions/get.ts | 6 +- .../subservices/collection/index.ts | 38 +++++----- .../subservices/collections-registry.ts | 42 +++++------ .../activitypub/subservices/follow.ts | 26 +++---- .../services/activitypub/subservices/inbox.ts | 14 ++-- .../services/activitypub/subservices/like.ts | 22 +++--- .../activitypub/subservices/object.ts | 22 +++--- .../activitypub/subservices/outbox.ts | 10 +-- .../services/activitypub/subservices/reply.ts | 18 ++--- .../services/activitypub/subservices/share.ts | 14 ++-- .../activitypub/subservices/side-effects.ts | 18 ++--- .../activitypub/services/migration.ts | 10 +-- .../packages/activitypub/services/relay.ts | 6 +- .../packages/auth/mixins/auth.sso.ts | 6 +- src/middleware/packages/auth/mixins/auth.ts | 14 ++-- .../packages/auth/services/account.ts | 70 +++++++++---------- .../packages/auth/services/auth.local.ts | 26 +++---- src/middleware/packages/auth/services/jwt.ts | 22 +++--- src/middleware/packages/auth/services/mail.ts | 6 +- .../packages/auth/services/migration.ts | 6 +- src/middleware/packages/backup/index.ts | 26 +++---- .../packages/crypto/keys/key-container.ts | 10 +-- src/middleware/packages/crypto/keys/keys.ts | 70 +++++++++---------- .../packages/crypto/keys/migration.ts | 10 +-- .../crypto/keys/public-key-container.ts | 6 +- .../crypto/signature/http-signatures.ts | 22 +++--- .../packages/crypto/signature/keypair.ts | 34 ++++----- .../packages/crypto/signature/proxy.ts | 14 ++-- .../challenge-service.ts | 22 +++--- .../data-integrity-service.ts | 10 +-- .../vc-authorizer-service.ts | 6 +- .../vc-credential-container.ts | 18 ++--- .../vc-holder-service.ts | 6 +- .../vc-issuer-service.ts | 6 +- .../vc-presentation-container.ts | 18 ++--- .../vc-verifier-service.ts | 14 ++-- .../packages/importer/mixins/importer.ts | 30 ++++---- src/middleware/packages/inference/service.ts | 22 +++--- .../packages/inference/subservices/remote.ts | 6 +- .../packages/jsonld/services/api/index.ts | 6 +- .../jsonld/services/context/actions/get.ts | 6 +- .../services/context/actions/getLocal.ts | 6 +- .../jsonld/services/context/actions/merge.ts | 6 +- .../jsonld/services/context/actions/parse.ts | 6 +- .../services/context/actions/validate.ts | 6 +- .../jsonld/services/document-loader/index.ts | 14 ++-- .../packages/jsonld/services/parser/index.ts | 42 +++++------ .../ldp/mixins/controlled-container.ts | 54 +++++++------- .../packages/ldp/mixins/document-tagger.ts | 22 +++--- .../packages/ldp/mixins/image-processor.ts | 10 +-- .../ldp/mixins/orphan-files-deletion.ts | 6 +- .../ldp/mixins/single-resource-container.ts | 22 +++--- .../packages/ldp/mixins/special-endpoint.ts | 10 +-- src/middleware/packages/ldp/service.ts | 14 ++-- .../packages/ldp/services/api/actions/put.ts | 6 +- .../packages/ldp/services/cache/index.ts | 58 +++++++-------- .../ldp/services/container/actions/attach.ts | 6 +- .../ldp/services/container/actions/clear.ts | 6 +- .../ldp/services/container/actions/create.ts | 6 +- .../container/actions/createAndAttach.ts | 6 +- .../ldp/services/container/actions/delete.ts | 6 +- .../ldp/services/container/actions/detach.ts | 6 +- .../ldp/services/container/actions/exist.ts | 6 +- .../ldp/services/container/actions/get.ts | 6 +- .../ldp/services/container/actions/getAll.ts | 6 +- .../ldp/services/container/actions/getPath.ts | 6 +- .../ldp/services/container/actions/getUris.ts | 6 +- .../services/container/actions/includes.ts | 6 +- .../ldp/services/container/actions/isEmpty.ts | 6 +- .../ldp/services/container/actions/patch.ts | 6 +- .../ldp/services/container/actions/post.ts | 6 +- .../ldp/services/link-header/actions/get.ts | 6 +- .../services/link-header/actions/register.ts | 6 +- .../permissions/actions/addAuthorizer.ts | 6 +- .../ldp/services/permissions/actions/check.ts | 6 +- .../ldp/services/permissions/actions/has.ts | 6 +- .../services/registry/actions/getByType.ts | 6 +- .../ldp/services/registry/actions/getByUri.ts | 6 +- .../ldp/services/registry/actions/getUri.ts | 6 +- .../ldp/services/registry/actions/list.ts | 6 +- .../ldp/services/registry/actions/register.ts | 6 +- .../packages/ldp/services/registry/index.ts | 6 +- .../ldp/services/remote/actions/delete.ts | 6 +- .../ldp/services/remote/actions/get.ts | 6 +- .../ldp/services/remote/actions/getGraph.ts | 6 +- .../ldp/services/remote/actions/getNetwork.ts | 6 +- .../ldp/services/remote/actions/getStored.ts | 6 +- .../ldp/services/remote/actions/isRemote.ts | 6 +- .../ldp/services/remote/actions/store.ts | 6 +- .../packages/ldp/services/remote/index.ts | 6 +- .../resource/actions/awaitCreateComplete.ts | 6 +- .../ldp/services/resource/actions/create.ts | 6 +- .../ldp/services/resource/actions/delete.ts | 6 +- .../ldp/services/resource/actions/exist.ts | 6 +- .../services/resource/actions/generateId.ts | 6 +- .../ldp/services/resource/actions/get.ts | 6 +- .../resource/actions/getContainers.ts | 6 +- .../ldp/services/resource/actions/getTypes.ts | 6 +- .../ldp/services/resource/actions/patch.ts | 6 +- .../ldp/services/resource/actions/put.ts | 6 +- .../ldp/services/resource/actions/upload.ts | 6 +- src/middleware/packages/migration/service.ts | 26 +++---- src/middleware/packages/nodeinfo/service.ts | 18 ++--- .../notifications/services/digest/service.ts | 6 +- .../services/digest/subscription.ts | 6 +- .../services/expo-push/device.ts | 10 +-- .../services/expo-push/notification.ts | 18 ++--- .../services/single-mail/service.ts | 6 +- .../ontologies/actions/findNamespace.ts | 6 +- .../packages/ontologies/actions/findPrefix.ts | 6 +- .../packages/ontologies/actions/get.ts | 6 +- .../ontologies/actions/getPrefixes.ts | 6 +- .../ontologies/actions/getRdfPrefixes.ts | 6 +- .../packages/ontologies/actions/list.ts | 6 +- .../ontologies/actions/prefixToUri.ts | 6 +- .../packages/ontologies/actions/register.ts | 6 +- .../ontologies/sub-services/registry.ts | 18 ++--- .../packages/solid/services/authorizer.ts | 6 +- .../packages/solid/services/endpoint.ts | 6 +- .../channels/notification-channel.mixin.ts | 46 ++++++------ .../notifications/channels/webhook-channel.ts | 10 +-- .../solid/services/notifications/listener.ts | 14 ++-- .../packages/solid/services/storage.ts | 14 ++-- .../solid/services/type-index/type-indexes.ts | 30 ++++---- .../services/type-index/type-registrations.ts | 34 ++++----- .../packages/sparql-endpoint/service.ts | 10 +-- .../packages/sync/services/mirror.ts | 6 +- .../actions/countTriplesOfSubject.ts | 6 +- .../actions/deleteOrphanBlankNodes.ts | 6 +- .../packages/triplestore/actions/dropAll.ts | 6 +- .../packages/triplestore/actions/insert.ts | 6 +- .../packages/triplestore/actions/query.ts | 6 +- .../triplestore/actions/tripleExist.ts | 6 +- .../packages/triplestore/actions/update.ts | 6 +- .../triplestore/subservices/dataset.ts | 34 ++++----- src/middleware/packages/void/service.ts | 14 ++-- .../packages/webacl/bots/authorizer-bot.ts | 10 +-- .../packages/webacl/bots/groups-manager.ts | 18 ++--- .../webacl/services/authorizer/index.ts | 6 +- .../packages/webacl/services/cache/index.ts | 42 +++++------ .../services/group/actions/addMember.ts | 6 +- .../webacl/services/group/actions/create.ts | 6 +- .../webacl/services/group/actions/delete.ts | 6 +- .../webacl/services/group/actions/exist.ts | 6 +- .../services/group/actions/getGroups.ts | 6 +- .../services/group/actions/getMembers.ts | 6 +- .../webacl/services/group/actions/getUri.ts | 6 +- .../webacl/services/group/actions/isMember.ts | 6 +- .../services/group/actions/removeMember.ts | 6 +- .../services/resource/actions/addRights.ts | 6 +- .../resource/actions/awaitReadRight.ts | 6 +- .../resource/actions/deleteAllRights.ts | 6 +- .../resource/actions/deleteAllUserRights.ts | 6 +- .../services/resource/actions/getLink.ts | 6 +- .../services/resource/actions/getRights.ts | 6 +- .../actions/getUsersWithReadRights.ts | 6 +- .../services/resource/actions/hasRights.ts | 6 +- .../services/resource/actions/isPublic.ts | 6 +- .../actions/refreshContainersRights.ts | 6 +- .../services/resource/actions/removeRights.ts | 6 +- .../services/resource/actions/setRights.ts | 6 +- src/middleware/packages/webfinger/service.ts | 10 +-- src/middleware/packages/webhooks/service.ts | 14 ++-- src/middleware/packages/webid/service.ts | 10 +-- src/middleware/tests/ldp/initialize.ts | 6 +- 171 files changed, 1037 insertions(+), 1037 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts index c87755ca6..c1a175c11 100644 --- a/src/middleware/packages/activitypub/mixins/activities-handler.ts +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ActivitiesHandlerMixin = { dependencies: ['activitypub.side-effects'], @@ -32,7 +32,7 @@ const ActivitiesHandlerMixin = { } }, actions: { - processActivity: defineAction({ + processActivity: { async handler(ctx) { const { key, boxType, dereferencedActivity, actorUri } = ctx.params; @@ -54,7 +54,7 @@ const ActivitiesHandlerMixin = { return dereferencedActivity; } } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index 9d33b2d4e..5ec1baddf 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { getSlugFromUri, getContainerFromUri } from '../utils.ts'; @@ -69,14 +69,14 @@ const BotMixin = { } }, actions: { - getUri: defineAction({ + getUri: { handler() { return this.settings.actor.uri; } - }) + } }, events: { - 'activitypub.inbox.received': defineServiceEvent({ + 'activitypub.inbox.received': { handler(ctx) { // @ts-expect-error TS(2339): Property 'inboxReceived' does not exist on type 'S... Remove this comment to see the full error message if (this.inboxReceived) { @@ -87,7 +87,7 @@ const BotMixin = { } } } - }) + } }, methods: { async getFollowers() { diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 2d9954112..8873f655f 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -1,5 +1,5 @@ import Handlebars from 'handlebars'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import matchActivity from '../utils/matchActivity.ts'; import { ACTIVITY_TYPES } from '../constants.ts'; @@ -26,7 +26,7 @@ const ActivityMappingService = { } }, actions: { - map: defineAction({ + map: { async handler(ctx) { let { activity, locale, ...rest } = ctx.params; @@ -85,9 +85,9 @@ const ActivityMappingService = { } } } - }), + }, - addMapper: defineAction({ + addMapper: { async handler(ctx) { const { match, mapping, priority = 1 } = ctx.params; @@ -102,13 +102,13 @@ const ActivityMappingService = { // Reorder cached mappings this.prioritizeMappers(); } - }), + }, - getMappers: defineAction({ + getMappers: { handler() { return this.mappers; } - }) + } }, methods: { matchActivity(ctx, pattern, activityOrObject) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index e0a12df05..cecb1a014 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ControlledContainerMixin } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import setRightsHandler from './activity-handlers/setRightsHandler.ts'; import { objectCurrentToId, objectIdToCurrent, arrayOf } from '../../../utils.ts'; import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; @@ -30,13 +30,13 @@ const ActivityService = { }, dependencies: ['ldp.container'], actions: { - forbidden: defineAction({ + forbidden: { handler() { throw new E.ForbiddenError(); } - }), + }, - getRecipients: defineAction({ + getRecipients: { async handler(ctx) { const { activity } = ctx.params; const output = []; @@ -78,17 +78,17 @@ const ActivityService = { // Remove duplicates return [...new Set(output)]; } - }), + }, - getLocalRecipients: defineAction({ + getLocalRecipients: { async handler(ctx) { const { activity } = ctx.params; const recipients = await this.actions.getRecipients({ activity }, { parentCtx: ctx }); return recipients.filter((recipientUri: any) => this.isLocalActor(recipientUri)); } - }), + }, - isPublic: defineAction({ + isPublic: { handler(ctx) { const { activity } = ctx.params; // We accept all three representations, as required by https://www.w3.org/TR/activitypub/#public-addressing @@ -97,7 +97,7 @@ const ActivityService = { ? arrayOf(activity.to).some(r => publicRepresentations.includes(r)) : false; } - }) + } }, methods: { isLocalActor(uri) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 37600ee04..5ef8420f5 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; import { namedNode, literal, triple, variable } from '@rdfjs/data-model'; import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; import { getSlugFromUri, waitForResource } from '../../../utils.ts'; @@ -15,7 +15,7 @@ const ActorService = { podProvider: false }, actions: { - get: defineAction({ + get: { async handler(ctx) { const { actorUri, webId } = ctx.params; // If dataset is not in the meta, assume that actor is remote @@ -36,9 +36,9 @@ const ActorService = { return actor; } } - }), + }, - getProfile: defineAction({ + getProfile: { async handler(ctx) { const { actorUri, webId } = ctx.params; const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); @@ -47,9 +47,9 @@ const ActorService = { return await ctx.call('ldp.resource.get', { resourceUri: actor.url, webId }); } } - }), + }, - appendActorData: defineAction({ + appendActorData: { async handler(ctx) { const { actorUri } = ctx.params; const userData = await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx }); @@ -85,9 +85,9 @@ const ActorService = { }); } } - }), + }, - addEndpoint: defineAction({ + addEndpoint: { async handler(ctx) { const { actorUri, predicate, endpoint } = ctx.params; @@ -159,9 +159,9 @@ const ActorService = { dataset }); } - }), + }, - awaitCreateComplete: defineAction({ + awaitCreateComplete: { async handler(ctx) { const { actorUri, additionalKeys = [], delayMs = 1000, maxTries = 20 } = ctx.params; const keysToCheck = ['publicKey', 'outbox', 'inbox', 'followers', 'following', ...additionalKeys]; @@ -173,16 +173,16 @@ const ActorService = { async () => await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx, meta: { $cache: false } }) ); } - }), + }, - getCollectionUri: defineAction({ + getCollectionUri: { cache: true, async handler(ctx) { const { actorUri, predicate, webId } = ctx.params; const actor = await this.actions.get({ actorUri, webId }, { parentCtx: ctx }); return actor && actor[predicate]; } - }) + } }, methods: { isActor(resource) { @@ -190,7 +190,7 @@ const ActorService = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; @@ -202,9 +202,9 @@ const ActorService = { await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; @@ -213,16 +213,16 @@ const ActorService = { await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); } } - }), + }, - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index 1fb8e115f..125c20c12 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -13,7 +13,7 @@ import { saveDatasetMeta } from '@semapps/middlewares'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { FULL_ACTOR_TYPES } from '../../../constants.ts'; const ApiService = { @@ -48,7 +48,7 @@ const ApiService = { } }, actions: { - inbox: defineAction({ + inbox: { async handler(ctx) { const { actorSlug, ...activity } = ctx.params; // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. @@ -63,9 +63,9 @@ const ApiService = { // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 202; } - }), + }, - outbox: defineAction({ + outbox: { async handler(ctx) { let { actorSlug, ...activity } = ctx.params; // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. @@ -88,10 +88,10 @@ const ApiService = { // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 201; } - }) + } }, events: { - 'ldp.registry.registered': defineServiceEvent({ + 'ldp.registry.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'container' does not exist on type 'Optio... Remove this comment to see the full error message const { container } = ctx.params; @@ -113,7 +113,7 @@ const ApiService = { }); } } - }) + } }, methods: { getBoxesRoute(actorsPath) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index e290e52e9..6649f5e05 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,5 +1,5 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getValueFromDataType } from '../../../../../utils.ts'; import { Errors } from 'moleculer'; @@ -270,7 +270,7 @@ function formatResponse( }; } -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -347,6 +347,6 @@ const Schema = defineAction({ context: jsonContext || localContext }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 0dd33cea6..6fbcec3f7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -2,7 +2,7 @@ import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/l import { sanitizeSparqlQuery } from '@semapps/triplestore'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import { Errors } from 'moleculer'; @@ -53,13 +53,13 @@ const CollectionService = { }, dependencies: ['triplestore', 'ldp.resource'], actions: { - put: defineAction({ + put: { handler() { throw new E.ForbiddenError(); } - }), + }, - patch: defineAction({ + patch: { async handler(ctx) { const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. @@ -98,9 +98,9 @@ const CollectionService = { } } } - }), + }, - post: defineAction({ + post: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); @@ -127,9 +127,9 @@ const CollectionService = { return await ctx.call('ldp.container.post', ctx.params); } - }), + }, - isEmpty: defineAction({ + isEmpty: { /* * Checks if the collection is empty * @param collectionUri The full URI of the collection @@ -151,9 +151,9 @@ const CollectionService = { }); return Number(res[0].count.value) === 0; } - }), + }, - includes: defineAction({ + includes: { /* * Checks if an item is in a collection * @param collectionUri The full URI of the collection @@ -176,9 +176,9 @@ const CollectionService = { webId: 'system' }); } - }), + }, - add: defineAction({ + add: { /* * Attach an object to a collection * @param collectionUri The full URI of the collection @@ -216,9 +216,9 @@ const CollectionService = { itemUri }); } - }), + }, - remove: defineAction({ + remove: { /* * Detach an object from a collection * @param collectionUri The full URI of the collection @@ -247,11 +247,11 @@ const CollectionService = { itemUri }); } - }), + }, get: getAction, - clear: defineAction({ + clear: { /* * Empty the collection, deleting all items it contains. * @param collectionUri The full URI of the collection @@ -274,9 +274,9 @@ const CollectionService = { webId: 'system' }); } - }), + }, - getOwner: defineAction({ + getOwner: { /* * Get the owner of collections attached to actors * @param collectionUri The full URI of the collection @@ -303,7 +303,7 @@ const CollectionService = { return results.length > 0 ? results[0].actorUri.value : null; } - }) + } }, methods: { getCollectionDataset(collectionUri) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 0efca2a49..73c08ae20 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import { quad, namedNode } from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; import { getWebIdFromUri, arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; const CollectionsRegistryService = { @@ -17,7 +17,7 @@ const CollectionsRegistryService = { this.collectionsInCreation = []; }, actions: { - register: defineAction({ + register: { async handler(ctx) { let { path, name, attachToTypes, ...options } = ctx.params; if (!name) name = path; @@ -30,15 +30,15 @@ const CollectionsRegistryService = { // Persist the collection in memory this.registeredCollections.push({ path, name, attachToTypes, ...options }); } - }), + }, - list: defineAction({ + list: { handler() { return this.registeredCollections; } - }), + }, - createAndAttachCollection: defineAction({ + createAndAttachCollection: { async handler(ctx) { const { objectUri, collection } = ctx.params; const { @@ -96,9 +96,9 @@ const CollectionsRegistryService = { return collectionUri; } - }), + }, - deleteCollection: defineAction({ + deleteCollection: { async handler(ctx) { const { objectUri, collection } = ctx.params; const resourceUri = urlJoin(objectUri, collection.path); @@ -109,9 +109,9 @@ const CollectionsRegistryService = { await ctx.call('activitypub.collection.delete', { resourceUri, webId: 'system' }); } } - }), + }, - createAndAttachMissingCollections: defineAction({ + createAndAttachMissingCollections: { async handler(ctx) { for (const collection of this.registeredCollections) { this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); @@ -140,9 +140,9 @@ const CollectionsRegistryService = { } } } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { let { collection, dataset } = ctx.params; let { attachPredicate, ordered, summary, dereferenceItems, itemsPerPage, sortPredicate, sortOrder } = @@ -216,7 +216,7 @@ const CollectionsRegistryService = { } } } - }) + } }, methods: { // Get the collections attached to the given type @@ -261,7 +261,7 @@ const CollectionsRegistryService = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; @@ -279,9 +279,9 @@ const CollectionsRegistryService = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; @@ -303,9 +303,9 @@ const CollectionsRegistryService = { } } } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, triplesAdded } = ctx.params; @@ -335,9 +335,9 @@ const CollectionsRegistryService = { } } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message const { oldData } = ctx.params; @@ -351,7 +351,7 @@ const CollectionsRegistryService = { ); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index 0e67f2a5c..b6d1c92df 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; @@ -31,7 +31,7 @@ const FollowService = { await this.broker.call('activitypub.collections-registry.register', this.settings.followingCollectionOptions); }, actions: { - addFollower: defineAction({ + addFollower: { async handler(ctx) { const { follower, following } = ctx.params; @@ -58,9 +58,9 @@ const FollowService = { ctx.emit('activitypub.follow.added', { follower, following }, { meta: { webId: null, dataset: null } }); } - }), + }, - removeFollower: defineAction({ + removeFollower: { async handler(ctx) { const { follower, following } = ctx.params; @@ -87,9 +87,9 @@ const FollowService = { ctx.emit('activitypub.follow.removed', { follower, following }, { meta: { webId: null, dataset: null } }); } - }), + }, - isFollowing: defineAction({ + isFollowing: { async handler(ctx) { const { follower, following } = ctx.params; @@ -102,9 +102,9 @@ const FollowService = { itemUri: following }); } - }), + }, - listFollowers: defineAction({ + listFollowers: { async handler(ctx) { const { collectionUri } = ctx.params; @@ -112,9 +112,9 @@ const FollowService = { resourceUri: collectionUri }); } - }), + }, - listFollowing: defineAction({ + listFollowing: { async handler(ctx) { const { collectionUri } = ctx.params; @@ -122,9 +122,9 @@ const FollowService = { resourceUri: collectionUri }); } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -136,7 +136,7 @@ const FollowService = { dataset }); } - }) + } }, activities: { follow: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 0c6c8dc3e..c8089996e 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,6 +1,6 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { objectIdToCurrent, collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; @@ -32,7 +32,7 @@ const InboxService = { await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - post: defineAction({ + post: { async handler(ctx) { const { collectionUri, ...activity } = ctx.params; @@ -157,9 +157,9 @@ const InboxService = { { meta: { webId: null, dataset: null } } ); } - }), + }, - getByDates: defineAction({ + getByDates: { async handler(ctx) { const { collectionUri, fromDate, toDate } = ctx.params; @@ -194,9 +194,9 @@ const InboxService = { return activities; } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -204,7 +204,7 @@ const InboxService = { dataset }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 0387da827..037923b4b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; @@ -30,7 +30,7 @@ const LikeService = { await this.broker.call('activitypub.collections-registry.register', this.settings.likedCollectionOptions); }, actions: { - addObjectToActorLikedCollection: defineAction({ + addObjectToActorLikedCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -44,9 +44,9 @@ const LikeService = { }); } } - }), + }, - addActorToObjectLikesCollection: defineAction({ + addActorToObjectLikesCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -60,9 +60,9 @@ const LikeService = { item: actorUri }); } - }), + }, - removeObjectFromActorLikedCollection: defineAction({ + removeObjectFromActorLikedCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -76,9 +76,9 @@ const LikeService = { }); } } - }), + }, - removeActorFromObjectLikesCollection: defineAction({ + removeActorFromObjectLikesCollection: { async handler(ctx) { const { actorUri, objectUri } = ctx.params; @@ -92,9 +92,9 @@ const LikeService = { }); } } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -106,7 +106,7 @@ const LikeService = { dataset }); } - }) + } }, activities: { likeObject: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index a3bc7de16..2a8a68de7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,5 +1,5 @@ import { getType } from '@semapps/ldp'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; const ObjectService = { @@ -11,7 +11,7 @@ const ObjectService = { }, dependencies: ['ldp.resource'], actions: { - get: defineAction({ + get: { async handler(ctx) { const { objectUri, actorUri, ...rest } = ctx.params; @@ -24,9 +24,9 @@ const ObjectService = { ...rest }); } - }), + }, - wrap: defineAction({ + wrap: { // If an object is passed directly, wrap it in a Create activity async handler(ctx) { const { activity } = ctx.params; @@ -45,9 +45,9 @@ const ObjectService = { return activity; } } - }), + }, - process: defineAction({ + process: { async handler(ctx) { let { activity, actorUri } = ctx.params; let objectUri; @@ -174,9 +174,9 @@ const ObjectService = { return activity; } - }), + }, - createTombstone: defineAction({ + createTombstone: { async handler(ctx) { const { resourceUri, formerType } = ctx.params; const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); @@ -197,10 +197,10 @@ const ObjectService = { webId: 'system' }); } - }) + } }, events: { - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // Check if tombstones are globally activated // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message @@ -225,7 +225,7 @@ const ObjectService = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index ddb904ae0..69fa996fd 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -3,7 +3,7 @@ import fetch from 'node-fetch'; import { Errors as E } from 'moleculer-web'; import { MIME_TYPES } from '@semapps/mime-types'; import { getType, arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead, getSlugFromUri, objectIdToCurrent } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; @@ -43,7 +43,7 @@ const OutboxService = { await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - post: defineAction({ + post: { async handler(ctx) { let { collectionUri, username, transient, ...activity } = ctx.params; let activityUri; @@ -174,9 +174,9 @@ const OutboxService = { return activity; } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -184,7 +184,7 @@ const OutboxService = { dataset }); } - }) + } }, methods: { isLocalActor(uri) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index ec0b7b9d9..e025294a0 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -1,5 +1,5 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; @@ -21,7 +21,7 @@ const ReplyService = { }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { - addReply: defineAction({ + addReply: { async handler(ctx) { const { objectUri, replyUri } = ctx.params; @@ -33,9 +33,9 @@ const ReplyService = { await ctx.call('activitypub.collection.add', { collectionUri, item: replyUri }); } - }), + }, - removeReply: defineAction({ + removeReply: { async handler(ctx) { const { objectUri, replyUri } = ctx.params; @@ -46,9 +46,9 @@ const ReplyService = { await ctx.call('activitypub.collection.remove', { collectionUri: object.replies, item: replyUri }); } } - }), + }, - removeFromAllRepliesCollections: defineAction({ + removeFromAllRepliesCollections: { async handler(ctx) { const { objectUri } = ctx.params; @@ -67,9 +67,9 @@ const ReplyService = { webId: 'system' }); } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -77,7 +77,7 @@ const ReplyService = { dataset }); } - }) + } }, activities: { postReply: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index d9fa9fdf3..8a36ca871 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; @@ -20,7 +20,7 @@ const ShareService = { }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { - addShare: defineAction({ + addShare: { async handler(ctx) { const { objectUri, announce } = ctx.params; @@ -33,9 +33,9 @@ const ShareService = { // Add the announce to the shares collection await ctx.call('activitypub.collection.add', { collectionUri, item: announce.id }); } - }), + }, - removeShare: defineAction({ + removeShare: { async handler(ctx) { const { objectUri, announce } = ctx.params; @@ -49,9 +49,9 @@ const ShareService = { }); } } - }), + }, - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { const { dataset } = ctx.params; await ctx.call('activitypub.collections-registry.updateCollectionsOptions', { @@ -59,7 +59,7 @@ const ShareService = { dataset }); } - }) + } }, activities: { shareObject: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index a184664f8..88fffae34 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -1,6 +1,6 @@ import { credentialsContext } from '@semapps/crypto'; import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import matchActivity from '../../../utils/matchActivity.ts'; /** @@ -17,7 +17,7 @@ const ActivitypubSideEffectsSchema = { this.processors = []; }, actions: { - addProcessor: defineAction({ + addProcessor: { /** * Add a new processor to handle activities */ @@ -29,9 +29,9 @@ const ActivitypubSideEffectsSchema = { // Sort processors by priority this.processors.sort((a: any, b: any) => a.priority - b.priority); } - }), + }, - processOutbox: defineAction({ + processOutbox: { /** * Called by activitypub.outbox.post when an activity is posted */ @@ -47,9 +47,9 @@ const ActivitypubSideEffectsSchema = { await job.finished(); } - }), + }, - processInbox: defineAction({ + processInbox: { /** * Called by activitypub.inbox.post when an activity is received * and by activitypub.outbox.post when an activity is sent to a local actor @@ -66,13 +66,13 @@ const ActivitypubSideEffectsSchema = { await job.finished(); } - }), + }, - getProcessors: defineAction({ + getProcessors: { handler() { return this.processors; } - }) + } }, methods: { matchActivity(pattern, activity, fetcher) { diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts index 29b00c1f2..45f2c8bc7 100644 --- a/src/middleware/packages/activitypub/services/migration.ts +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -1,9 +1,9 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ActivitypubMigrationSchema = { name: 'activitypub.migration' as const, actions: { - updateCollectionsOptions: defineAction({ + updateCollectionsOptions: { async handler(ctx) { await ctx.call('activitypub.follow.updateCollectionsOptions'); await ctx.call('activitypub.inbox.updateCollectionsOptions'); @@ -11,9 +11,9 @@ const ActivitypubMigrationSchema = { await ctx.call('activitypub.like.updateCollectionsOptions'); await ctx.call('activitypub.reply.updateCollectionsOptions'); } - }), + }, - addCollectionsToContainer: defineAction({ + addCollectionsToContainer: { // This shouldn't be used in Pod provider config async handler(ctx) { const collectionsContainerUri = await ctx.call('activitypub.collection.getContainerUri'); @@ -34,7 +34,7 @@ const ActivitypubMigrationSchema = { webId: 'system' }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts index 32af476fb..bdc93e52e 100644 --- a/src/middleware/packages/activitypub/services/relay.ts +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { delay } from '../utils.ts'; @@ -70,12 +70,12 @@ const RelayService = { this.relayActor = await this.broker.call('activitypub.actor.awaitCreateComplete', { actorUri }); }, actions: { - getActor: defineAction({ + getActor: { visibility: 'public', handler() { return this.relayActor; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index 5ef67e77e..b6041073c 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -1,7 +1,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'expr... Remove this comment to see the full error message import session from 'express-session'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import AuthMixin from './auth.ts'; import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; import redirectToFront from '../middlewares/redirectToFront.ts'; @@ -20,7 +20,7 @@ const AuthSSOMixin = { selectSsoData: null }, actions: { - loginOrSignup: defineAction({ + loginOrSignup: { async handler(ctx) { const { ssoData } = ctx.params; @@ -70,7 +70,7 @@ const AuthSSOMixin = { return { token, newUser }; } - }) + } }, methods: { getApiRoutes(basePath) { diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index 13472c4f2..e4bec141e 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -3,7 +3,7 @@ import passport from 'passport'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import AuthAccountService from '../services/account.ts'; import AuthJWTService from '../services/jwt.ts'; @@ -114,7 +114,7 @@ const AuthMixin = { } }, actions: { - authenticate: defineAction({ + authenticate: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication async handler(ctx) { const { route, req, res } = ctx.params; @@ -153,9 +153,9 @@ const AuthMixin = { ctx.meta.webId = 'anon'; return Promise.resolve(null); } - }), + }, - authorize: defineAction({ + authorize: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization async handler(ctx) { const { route, req, res } = ctx.params; @@ -187,9 +187,9 @@ const AuthMixin = { return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } - }), + }, - impersonate: defineAction({ + impersonate: { async handler(ctx) { const { webId } = ctx.params; return await ctx.call('auth.jwt.generateServerSignedToken', { @@ -198,7 +198,7 @@ const AuthMixin = { } }); } - }) + } }, methods: { async validateCapability(ctx, token) { diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index ded3c49ff..9ca247490 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -5,7 +5,7 @@ import createSlug from 'speakingurl'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; import crypto from 'crypto'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; // Taken from https://stackoverflow.com/a/9204568/7900695 const emailRegexp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; @@ -22,7 +22,7 @@ const AuthAccountSchema = { }, dependencies: ['triplestore'], actions: { - create: defineAction({ + create: { async handler(ctx) { let { uuid, username, password, email, webId, ...rest } = ctx.params; @@ -91,9 +91,9 @@ const AuthAccountSchema = { webId }); } - }), + }, - attachWebId: defineAction({ + attachWebId: { async handler(ctx) { const { accountUri, webId } = ctx.params; @@ -102,9 +102,9 @@ const AuthAccountSchema = { webId }); } - }), + }, - verify: defineAction({ + verify: { async handler(ctx) { const { username, password } = ctx.params; @@ -123,58 +123,58 @@ const AuthAccountSchema = { throw new Error('account.not-found'); } } - }), + }, - usernameExists: defineAction({ + usernameExists: { async handler(ctx) { const { username } = ctx.params; const accounts = await this._find(ctx, { query: { username } }); return accounts.length > 0; } - }), + }, - emailExists: defineAction({ + emailExists: { async handler(ctx) { const { email } = ctx.params; const accounts = await this._find(ctx, { query: { email } }); return accounts.length > 0; } - }), + }, - find: defineAction({ + find: { /** Overwrite find method, to filter accounts with tombstone. */ async handler(ctx) { /** @type {object[]} */ const accounts = await this._find(ctx, ctx.params); return accounts.filter((account: any) => !account.deletedAt); } - }), + }, - findByUsername: defineAction({ + findByUsername: { async handler(ctx) { const { username } = ctx.params; const accounts = await this._find(ctx, { query: { username } }); return accounts.length > 0 ? accounts[0] : null; } - }), + }, - findByWebId: defineAction({ + findByWebId: { async handler(ctx) { const { webId } = ctx.params; const accounts = await this._find(ctx, { query: { webId } }); return accounts.length > 0 ? accounts[0] : null; } - }), + }, - findByEmail: defineAction({ + findByEmail: { async handler(ctx) { const { email } = ctx.params; const accounts = await this._find(ctx, { query: { email } }); return accounts.length > 0 ? accounts[0] : null; } - }), + }, - setPassword: defineAction({ + setPassword: { async handler(ctx) { const { webId, password } = ctx.params; const hashedPassword = await this.hashPassword(password); @@ -185,9 +185,9 @@ const AuthAccountSchema = { hashedPassword }); } - }), + }, - setNewPassword: defineAction({ + setNewPassword: { async handler(ctx) { const { webId, token, password } = ctx.params; const hashedPassword = await this.hashPassword(password); @@ -203,9 +203,9 @@ const AuthAccountSchema = { resetPasswordToken: undefined }); } - }), + }, - generateResetPasswordToken: defineAction({ + generateResetPasswordToken: { async handler(ctx) { const { webId } = ctx.params; const resetPasswordToken = await this.generateResetPasswordToken(); @@ -218,18 +218,18 @@ const AuthAccountSchema = { return resetPasswordToken; } - }), + }, - findDatasetByWebId: defineAction({ + findDatasetByWebId: { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const account = await ctx.call('auth.account.findByWebId', { webId }); return account?.username; } - }), + }, - findSettingsByWebId: defineAction({ + findSettingsByWebId: { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { webId } = ctx.meta; @@ -241,9 +241,9 @@ const AuthAccountSchema = { preferredLocale: account.preferredLocale }; } - }), + }, - updateAccountSettings: defineAction({ + updateAccountSettings: { async handler(ctx) { const { currentPassword, email, newPassword } = ctx.params; // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. @@ -275,9 +275,9 @@ const AuthAccountSchema = { ...params }); } - }), + }, - deleteByWebId: defineAction({ + deleteByWebId: { async handler(ctx) { const { webId } = ctx.params; const account = await ctx.call('auth.account.findByWebId', { webId }); @@ -289,9 +289,9 @@ const AuthAccountSchema = { return false; } - }), + }, - setTombstone: defineAction({ + setTombstone: { // Remove email and password from an account, set deletedAt timestamp. async handler(ctx) { const { webId } = ctx.params; @@ -308,7 +308,7 @@ const AuthAccountSchema = { deletedAt: new Date().toISOString() }); } - }) + } }, methods: { async isValidUsername(ctx, username) { diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 7ec0bc8b9..f5a74dcd5 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,7 +1,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-local'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; import AuthMailService from './mail.ts'; @@ -53,7 +53,7 @@ const AuthLocalService = { } }, actions: { - signup: defineAction({ + signup: { async handler(ctx) { const { username, email, password, ...rest } = ctx.params; @@ -90,9 +90,9 @@ const AuthLocalService = { throw e; } } - }), + }, - login: defineAction({ + login: { async handler(ctx) { const { username, password } = ctx.params; @@ -104,9 +104,9 @@ const AuthLocalService = { return { token, webId: accountData.webId, newUser: false }; } - }), + }, - logout: defineAction({ + logout: { async handler(ctx) { // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 302; @@ -115,9 +115,9 @@ const AuthLocalService = { // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); } - }), + }, - redirectToForm: defineAction({ + redirectToForm: { async handler(ctx) { if (this.settings.formUrl) { const formUrl = new URL(this.settings.formUrl); @@ -134,9 +134,9 @@ const AuthLocalService = { throw new Error('No formUrl defined in auth.local settings'); } } - }), + }, - resetPassword: defineAction({ + resetPassword: { async handler(ctx) { const { email } = ctx.params; @@ -153,9 +153,9 @@ const AuthLocalService = { token }); } - }), + }, - setNewPassword: defineAction({ + setNewPassword: { async handler(ctx) { const { email, token, password } = ctx.params; @@ -167,7 +167,7 @@ const AuthLocalService = { await ctx.call('auth.account.setNewPassword', { webId: account.webId, token, password }); } - }) + } }, methods: { getStrategy() { diff --git a/src/middleware/packages/auth/services/jwt.ts b/src/middleware/packages/auth/services/jwt.ts index c15de82f5..f43375f27 100644 --- a/src/middleware/packages/auth/services/jwt.ts +++ b/src/middleware/packages/auth/services/jwt.ts @@ -3,7 +3,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'json... Remove this comment to see the full error message import jwt from 'jsonwebtoken'; import crypto from 'crypto'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Service that creates and validates JSON web tokens(JWT). @@ -33,7 +33,7 @@ const AuthJwtSchema = { this.publicKey = fs.readFileSync(publicKeyPath); }, actions: { - generateKeyPair: defineAction({ + generateKeyPair: { handler(ctx) { const { privateKeyPath, publicKeyPath } = ctx.params; @@ -73,16 +73,16 @@ const AuthJwtSchema = { ); }); } - }), + }, - generateServerSignedToken: defineAction({ + generateServerSignedToken: { async handler(ctx) { const { payload } = ctx.params; return jwt.sign(payload, this.privateKey, { algorithm: 'RS256' }); } - }), + }, - verifyServerSignedToken: defineAction({ + verifyServerSignedToken: { /** Verifies that the token was signed by this server. */ async handler(ctx) { const { token } = ctx.params; @@ -92,17 +92,17 @@ const AuthJwtSchema = { return false; } } - }), + }, - generateUnsignedToken: defineAction({ + generateUnsignedToken: { async handler(ctx) { const { payload } = ctx.params; const token = jwt.sign(payload, null, { algorithm: 'none' }); return token; } - }), + }, - decodeToken: defineAction({ + decodeToken: { // Warning, this does NOT verify if signature is valid async handler(ctx) { const { token } = ctx.params; @@ -112,7 +112,7 @@ const AuthJwtSchema = { return false; } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts index 070f3a86c..c84c0a7c3 100644 --- a/src/middleware/packages/auth/services/mail.ts +++ b/src/middleware/packages/auth/services/mail.ts @@ -2,7 +2,7 @@ import path from 'path'; import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message @@ -21,7 +21,7 @@ const AuthMailSchema = { transport: null }, actions: { - sendResetPasswordEmail: defineAction({ + sendResetPasswordEmail: { async handler(ctx) { const { account, token } = ctx.params; @@ -40,7 +40,7 @@ const AuthMailSchema = { } ); } - }) + } }, methods: { getTemplateLocale(userLocale) { diff --git a/src/middleware/packages/auth/services/migration.ts b/src/middleware/packages/auth/services/migration.ts index af3be2b94..1833fe91a 100644 --- a/src/middleware/packages/auth/services/migration.ts +++ b/src/middleware/packages/auth/services/migration.ts @@ -1,10 +1,10 @@ import { getSlugFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const AuthMigrationSchema = { name: 'auth.migration' as const, actions: { - migrateUsersToAccounts: defineAction({ + migrateUsersToAccounts: { async handler(ctx) { const { usersContainer, emailPredicate, usernamePredicate } = ctx.params; @@ -27,7 +27,7 @@ const AuthMigrationSchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index 04713ba8b..d59d68cb0 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -3,7 +3,7 @@ import fs from 'fs'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import { emptyDirSync } from 'fs-extra'; import pathModule from 'path'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import fsCopy from './utils/fsCopy.ts'; import ftpCopy from './utils/ftpCopy.ts'; import rsyncCopy from './utils/rsyncCopy.ts'; @@ -59,14 +59,14 @@ const BackupService = { } }, actions: { - backupAll: defineAction({ + backupAll: { async handler(ctx) { await this.actions.backupDatasets({}, { parentCtx: ctx }); await this.actions.backupOtherDirs({}, { parentCtx: ctx }); } - }), + }, - backupDatasets: defineAction({ + backupDatasets: { async handler(ctx) { // Generate a new backup of all datasets const datasets = await ctx.call('triplestore.dataset.list'); @@ -87,9 +87,9 @@ const BackupService = { emptyDirSync(backupsDirPath); } } - }), + }, - backupOtherDirs: defineAction({ + backupOtherDirs: { async handler(ctx) { const { otherDirsPaths } = this.settings.localServer; @@ -103,9 +103,9 @@ const BackupService = { await this.actions.copyToRemoteServer({ path, subDir: key }, { parentCtx: ctx }); } } - }), + }, - copyToRemoteServer: defineAction({ + copyToRemoteServer: { async handler(ctx) { const { path, subDir } = ctx.params; const { copyMethod, remoteServer } = this.settings; @@ -137,9 +137,9 @@ const BackupService = { return false; } } - }), + }, - deleteDataset: defineAction({ + deleteDataset: { params: { dataset: { type: 'string' } }, @@ -177,9 +177,9 @@ const BackupService = { } } } - }), + }, - listBackupsForDataset: defineAction({ + listBackupsForDataset: { // Returns an array of file paths to the backups relative to `this.settings.localServer.fusekiBase`. async handler(ctx) { const { dataset } = ctx.params; @@ -195,7 +195,7 @@ const BackupService = { return filenames; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index b94d0dfd9..171339cf1 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -1,7 +1,7 @@ import { ControlledContainerMixin } from '@semapps/ldp'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; @@ -51,13 +51,13 @@ const KeysContainerSchema = { } }, actions: { - forbidden: defineAction({ + forbidden: { async handler(ctx) { throw new E.ForbiddenError(); } - }), + }, - get: defineAction({ + get: { /** * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. * See: @@ -81,7 +81,7 @@ const KeysContainerSchema = { return resource; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index bf0e2b569..c67abf111 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -5,7 +5,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { sec } from '@semapps/ontologies'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; import KeyContainerService from './key-container.ts'; @@ -80,7 +80,7 @@ const KeysService = { * Returns all available keys of the given `keyType` in the `/key` container. * If none is available `[]` is returned. */ - getByType: defineAction({ + getByType: { params: { keyType: { type: 'string' }, webId: { type: 'string', optional: true } @@ -101,7 +101,7 @@ const KeysService = { return matchedKeys; } - }), + }, /** * Gets the keys by type that are present in the actor's webId. @@ -109,7 +109,7 @@ const KeysService = { * TODO: If this becomes a performance bottleneck, we can use SPARQL queries. * @returns An array of keys present in the webId. */ - getOrCreateWebIdKeys: defineAction({ + getOrCreateWebIdKeys: { params: { keyType: { type: 'string' }, webId: { type: 'string' } @@ -144,14 +144,14 @@ const KeysService = { }) ); } - }), + }, /** * Returns a signing key instance for a given key or key type. If no key is available, a new one is created. * Currently supports Ed25519Multikey only. * @returns {object} The Multikey object. */ - getMultikey: defineAction({ + getMultikey: { params: { webId: { type: 'string' }, // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message @@ -188,7 +188,7 @@ const KeysService = { return keyObject; } - }), + }, /** * Generates key, stores it in the `/key` container. @@ -196,7 +196,7 @@ const KeysService = { * If `attachToWebId` is true (not default), it will publish the key and attach the key to the webId document. * @returns {object} The key resource as located in the `/key` container. */ - createKeyForActor: defineAction({ + createKeyForActor: { params: { webId: { type: 'string' }, keyType: { type: 'string' }, @@ -234,13 +234,13 @@ const KeysService = { return keyObject; } - }), + }, /** * Generate a key of the type specified. * Type must be in the form of a {@link KEY_TYPES} URI. */ - generateKey: defineAction({ + generateKey: { params: { keyType: { type: 'string' } }, @@ -256,13 +256,13 @@ const KeysService = { throw new Error('Key type not supported.'); } - }), + }, /** * Generate ED25519 key pair. * @returns {object} Key pair in [MultiKey format](https://www.w3.org/TR/controller-document/#Multikey). */ - generateEd25519Key: defineAction({ + generateEd25519Key: { params: {}, async handler() { const keyPair = await Ed25519Multikey.generate(); @@ -276,7 +276,7 @@ const KeysService = { keyObject['@type'] = [KEY_TYPES.ED25519, KEY_TYPES.MULTI_KEY, KEY_TYPES.VERIFICATION_METHOD]; return keyObject; } - }), + }, /** * Generate a RSA key pair and returns public and private key in spki pkcs8 PEM encodings, respectively. @@ -287,7 +287,7 @@ const KeysService = { * 'privateKeyPem': privateKeyPkcs8PemString } * ``` */ - generateRsaKey: defineAction({ + generateRsaKey: { params: {}, async handler() { return new Promise((resolve, reject) => { @@ -318,7 +318,7 @@ const KeysService = { ); }); } - }), + }, /** * Attaches a given key to the webId document. @@ -329,7 +329,7 @@ const KeysService = { * @param {string} ctx.keyId The id of the public-private key pair resource. * @param {string} ctx.keyObject Alternatively, the public-private key pair resource itself. */ - attachPublicKeyToWebId: defineAction({ + attachPublicKeyToWebId: { params: { webId: { type: 'string' }, keyId: { type: 'string', optional: true }, @@ -385,10 +385,10 @@ const KeysService = { webId }); } - }), + }, /** Given a key object, remove the key from the webId document. */ - detachFromWebId: defineAction({ + detachFromWebId: { params: { webId: { type: 'string' }, publicKeyId: { type: 'string' } @@ -406,10 +406,10 @@ const KeysService = { webId }); } - }), + }, /** Given a local key (stored in `/key`), add the public key part to the `/public-key` container. */ - publishPublicKeyLocally: defineAction({ + publishPublicKeyLocally: { params: { keyId: { type: 'string', optional: true }, // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message @@ -445,12 +445,12 @@ const KeysService = { }); return publicKeyUri; } - }), + }, /** * Removes key from `key` container and detaches it from webId document and `public-key` container. */ - delete: defineAction({ + delete: { params: { resourceUri: { type: 'string', optional: true }, // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message @@ -476,10 +476,10 @@ const KeysService = { await this.actions.detachFromWebId({ webId, publicKeyId }, { parentCtx: ctx }); } } - }), + }, /** Delete all keys belonging to an actor. */ - deleteAllKeysForWebId: defineAction({ + deleteAllKeysForWebId: { params: { webId: { type: 'string' } }, @@ -490,14 +490,14 @@ const KeysService = { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } } - }), + }, /** * Fetches remote keys from a webId (publicKey or assertionMethod field). * Returns all keys of the given `keyType` or all, if `keyType` is `null`. * Does not filter outdated keys. */ - getRemotePublicKeys: defineAction({ + getRemotePublicKeys: { params: { webId: { type: 'string' }, keyType: { type: 'string', optional: true, default: KEY_TYPES.RSA, nullable: true } @@ -543,12 +543,12 @@ const KeysService = { return keyObjects; } - }), + }, /** * Returns the public key part of a given `keyObject`. */ - getPublicKeyObject: defineAction({ + getPublicKeyObject: { params: { // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, @@ -587,9 +587,9 @@ const KeysService = { /** @type {never} Not implemented yet. */ throw new Error(`Key type ${keyType} not supported.`); } - }), + }, - findPrivateKeyUri: defineAction({ + findPrivateKeyUri: { params: { publicKeyUri: { type: 'string' } }, @@ -608,7 +608,7 @@ const KeysService = { return queryResult[0]?.privateKey?.value; } - }) + } }, methods: {}, hooks: { @@ -623,14 +623,14 @@ const KeysService = { } }, events: { - 'keys.migration.migrated': defineServiceEvent({ + 'keys.migration.migrated': { async handler() { // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message this.isMigrated = true; } - }), + }, - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; @@ -667,7 +667,7 @@ const KeysService = { this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) ]); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index 1a117cce1..26384749a 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; /** @type {import('moleculer').ServiceSchema} */ @@ -11,7 +11,7 @@ const KeysMigrationSchema = { podProvider: false }, actions: { - migrateKeysToDb: defineAction({ + migrateKeysToDb: { /** Migrates cryptographic RSA keys from filesystem storage to the `/keys` ldp containers */ async handler(ctx) { // Check actorsKeyPairsDir for existing keys. @@ -111,9 +111,9 @@ const KeysMigrationSchema = { this.logger.info('=== Keys migration completed ==='); await ctx.emit('keys.migration.migrated'); } - }), + }, - isMigrated: defineAction({ + isMigrated: { /** Returns true, if the server has migrated to the new keys service yet, i.e. keys are stored in the user dataset, not on fs. */ async handler() { // If the `actorsKeyPairsDir` setting is not set, we assume migration has happened or was never needed. @@ -132,7 +132,7 @@ const KeysMigrationSchema = { return !anyKeyFile; } - }) + } }, methods: { // Delete old public key blank node and data from the webId. diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index 4b72bcd9b..196b87414 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -2,7 +2,7 @@ import { triple, namedNode } from '@rdfjs/data-model'; import { ControlledContainerMixin } from '@semapps/ldp'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; /** @@ -51,11 +51,11 @@ const KeysPublicContainerSchema = { }, actions: { - forbidden: defineAction({ + forbidden: { async handler(ctx) { throw new E.ForbiddenError(); } - }) + } }, hooks: { diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 2fa4fc06b..57bb519e3 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -5,7 +5,7 @@ import { parseRequest, verifySignature } from 'http-signature'; import { createAuthzHeader, createSignatureString } from 'http-signature-header'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; import { arrayOf } from '../utils/utils.ts'; @@ -13,7 +13,7 @@ const HttpSignatureService = { // TODO: Rename to signature.http-signatures in a major release. name: 'signature' as const, actions: { - generateSignatureHeaders: defineAction({ + generateSignatureHeaders: { async handler(ctx) { const { url, method, body, actorUri } = ctx.params; // TODO: Use new service. @@ -49,16 +49,16 @@ const HttpSignatureService = { return headers; } - }), + }, - verifyDigest: defineAction({ + verifyDigest: { async handler(ctx) { const { body, headers } = ctx.params; return headers.digest ? this.buildDigest(body) === headers.digest : true; } - }), + }, - verifyHttpSignature: defineAction({ + verifyHttpSignature: { /** * Given url, path, method, headers, validates a given http signature. * If the signature is valid, it returns the actorUri and the publicKeyPem used to verify the signature. @@ -110,9 +110,9 @@ const HttpSignatureService = { return { isValid: keyValid, actorUri, publicKeyPem }; } - }), + }, - authenticate: defineAction({ + authenticate: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authentication async handler(ctx) { const { route, req, res } = ctx.params; @@ -134,9 +134,9 @@ const HttpSignatureService = { ctx.meta.webId = 'anon'; return Promise.resolve(null); } - }), + }, - authorize: defineAction({ + authorize: { // See https://moleculer.services/docs/0.13/moleculer-web.html#Authorization async handler(ctx) { const { route, req, res } = ctx.params; @@ -158,7 +158,7 @@ const HttpSignatureService = { ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); } - }) + } }, methods: { buildDigest(body) { diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index aaff18e38..b2d761a7f 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -3,7 +3,7 @@ import path from 'path'; import fetch from 'node-fetch'; import { generateKeyPair } from 'crypto'; import { namedNode, blankNode, literal, triple } from '@rdfjs/data-model'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; /** @@ -30,7 +30,7 @@ const SignatureService = { this.isMigrated = await this.broker.call('keys.migration.isMigrated'); }, actions: { - generate: defineAction({ + generate: { async handler(ctx) { const { actorUri } = ctx.params; @@ -76,9 +76,9 @@ const SignatureService = { ); }); } - }), + }, - delete: defineAction({ + delete: { async handler(ctx) { const { actorUri } = ctx.params; @@ -97,9 +97,9 @@ const SignatureService = { console.log(`Could not delete key pair for actor ${actorUri}`); } } - }), + }, - attachPublicKey: defineAction({ + attachPublicKey: { async handler(ctx) { const { actorUri } = ctx.params; @@ -130,9 +130,9 @@ const SignatureService = { }); } } - }), + }, - getPaths: defineAction({ + getPaths: { async handler(ctx) { const { actorUri } = ctx.params; @@ -145,9 +145,9 @@ const SignatureService = { } throw new Error(`No account found with URI ${actorUri}`); } - }), + }, - get: defineAction({ + get: { async handler(ctx) { const { actorUri } = ctx.params; @@ -169,9 +169,9 @@ const SignatureService = { return {}; } } - }), + }, - getRemotePublicKey: defineAction({ + getRemotePublicKey: { async handler(ctx) { const { actorUri } = ctx.params; @@ -198,7 +198,7 @@ const SignatureService = { return actor.publicKey.publicKeyPem; } } - }) + } }, hooks: { before: { @@ -227,7 +227,7 @@ const SignatureService = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; @@ -241,14 +241,14 @@ const SignatureService = { // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); } - }), + }, - 'keys.migration.migrated': defineServiceEvent({ + 'keys.migration.migrated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message this.isMigrated = true; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index ef22fbf23..52b867b4b 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -4,7 +4,7 @@ import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; import fetch from 'node-fetch'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const stream2buffer = (stream: any) => { return new Promise((resolve, reject) => { @@ -42,7 +42,7 @@ const ProxyService = { } }, actions: { - api_query: defineAction({ + api_query: { async handler(ctx) { const url = ctx.params.id; const method = ctx.params.method || 'GET'; @@ -92,9 +92,9 @@ const ProxyService = { ctx.meta.$statusMessage = e.message; } } - }), + }, - query: defineAction({ + query: { async handler(ctx) { let { url, method, headers, body, actorUri } = ctx.params; @@ -152,10 +152,10 @@ const ProxyService = { }; } } - }) + } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; @@ -171,7 +171,7 @@ const ProxyService = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts index 824795b15..ef23d4f26 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Service to generate challenges upon request. @@ -19,7 +19,7 @@ const ChallengeService = { this.challenges = {}; }, actions: { - create: defineAction({ + create: { handler() { if (!this.cleanupTimerSetUp) { this.startCleanupTimer(); @@ -30,21 +30,21 @@ const ChallengeService = { return { challenge }; } - }), + }, - getAll: defineAction({ + getAll: { handler() { return this.challenges; } - }), + }, - clearAll: defineAction({ + clearAll: { handler() { this.challenges = {}; } - }), + }, - validate: defineAction({ + validate: { handler(ctx) { const { challenge } = ctx.params; @@ -63,9 +63,9 @@ const ChallengeService = { return { valid: true }; } - }), + }, - cleanElapsed: defineAction({ + cleanElapsed: { handler() { const now = Date.now(); // @ts-expect-error TS(2339): Property 'issued' does not exist on type 'unknown'... Remove this comment to see the full error message @@ -75,7 +75,7 @@ const ChallengeService = { } } } - }) + } }, methods: { startCleanupTimer() { diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index aa563c6fa..1bb7b1eb4 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -9,7 +9,7 @@ import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; const { @@ -40,7 +40,7 @@ const DataIntegrityService = { * Verify an object. * @param {object} ctx.params.object - The object to verify. */ - verifyObject: defineAction({ + verifyObject: { params: { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, @@ -68,7 +68,7 @@ const DataIntegrityService = { return jsigs.verify(object, { purpose, documentLoader: this.documentLoader, suite }); } - }), + }, /** * Sign an object. @@ -78,7 +78,7 @@ const DataIntegrityService = { * @param {object} [ctx.params.keyObject] - The key object to use. * @param {string} [ctx.params.keyId] - The key ID to use. */ - signObject: defineAction({ + signObject: { params: { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, @@ -118,7 +118,7 @@ const DataIntegrityService = { return jsigs.sign(object, { purpose, documentLoader: this.documentLoader, suite }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts index ad6838627..839459145 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts @@ -1,5 +1,5 @@ import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; // Check, if a capability grants access to the resource. const hasValidCapability = async (ctx: any, resourceUri: any, mode: any) => { @@ -35,7 +35,7 @@ const VcGuardSchema = { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, actions: { - hasPermission: defineAction({ + hasPermission: { async handler(ctx) { const { uri, mode } = ctx.params; @@ -48,7 +48,7 @@ const VcGuardSchema = { return undefined; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index f2f158853..d708d6b35 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -1,6 +1,6 @@ import path from 'node:path'; import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; /** @@ -52,7 +52,7 @@ const VCCredentialsContainer = { * We can't handle that internally so we use a copy of the context with the `@graph`s removed. */ actions: { - get: defineAction({ + get: { async handler(ctx) { const resource = await ctx.call('ldp.resource.get', { ...ctx.params, @@ -66,9 +66,9 @@ const VCCredentialsContainer = { }; return { ...resource, '@context': credentialsContext }; } - }), + }, - put: defineAction({ + put: { async handler(ctx) { const { resource } = ctx.params; return await ctx.call('ldp.resource.put', { @@ -79,9 +79,9 @@ const VCCredentialsContainer = { } }); } - }), + }, - post: defineAction({ + post: { async handler(ctx) { const { resource } = ctx.params; return await ctx.call('ldp.container.post', { @@ -93,9 +93,9 @@ const VCCredentialsContainer = { } }); } - }), + }, - list: defineAction({ + list: { async handler(ctx) { const container = await ctx.call('ldp.container.list', { ...ctx.params, @@ -103,7 +103,7 @@ const VCCredentialsContainer = { }); return { ...container, '@context': credentialsContext }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index 687092247..c65ae6549 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -11,7 +11,7 @@ import * as vc from '@digitalbazaar/vc'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; const { @@ -42,7 +42,7 @@ const VCHolderService = { * @param {object} ctx.params - The parameters for creating the presentation. * @returns {object} The signed presentation. */ - createPresentation: defineAction({ + createPresentation: { params: { presentation: { type: 'object', @@ -134,7 +134,7 @@ const VCHolderService = { return signedPresentation; } - }) + } }, methods: { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 354827d2e..fabd6e890 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -10,7 +10,7 @@ import * as vc from '@digitalbazaar/vc'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; const { @@ -57,7 +57,7 @@ const VCCredentialService = { * @param {object} ctx.params - The parameters for creating the VC. * @returns {object} The signed credential. */ - createVC: defineAction({ + createVC: { params: { credential: { type: 'object', @@ -146,7 +146,7 @@ const VCCredentialService = { return signedCredential; } - }) + } }, methods: { /** Creates an ldp resource from the presentation and sets rights. */ diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index ecd980b54..a0d4d6f14 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -1,5 +1,5 @@ import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; /** @@ -41,7 +41,7 @@ const VCPresentationContainer = { * We can't handle that internally so we use a copy of the context with the `@graph`s removed. */ actions: { - get: defineAction({ + get: { async handler(ctx) { const resource = await ctx.call('ldp.resource.get', { ...ctx.params, @@ -55,9 +55,9 @@ const VCPresentationContainer = { }; return { ...resource, '@context': credentialsContext }; } - }), + }, - put: defineAction({ + put: { async handler(ctx) { const { resource } = ctx.params; return await ctx.call('ldp.resource.put', { @@ -68,9 +68,9 @@ const VCPresentationContainer = { } }); } - }), + }, - post: defineAction({ + post: { async handler(ctx) { // FIXME: The action fails to store the VC with the VP. // This is okay because persisting VPs is not required @@ -85,9 +85,9 @@ const VCPresentationContainer = { } }); } - }), + }, - list: defineAction({ + list: { async handler(ctx) { const container = await ctx.call('ldp.container.list', { ...ctx.params, @@ -95,7 +95,7 @@ const VCPresentationContainer = { }); return { ...container, '@context': credentialsContext }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 7db8b8c88..6d1d83340 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -4,7 +4,7 @@ import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as vc from '@digitalbazaar/vc'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; import VCPurpose from './VcPurpose.ts'; import { arrayOf } from '../utils/utils.ts'; @@ -34,7 +34,7 @@ const VCPresentationService = { /** * Verify a verifiable credential. */ - verifyVC: defineAction({ + verifyVC: { params: { verifiableCredential: { type: 'object', @@ -82,12 +82,12 @@ const VCPresentationService = { return verificationResult; } - }), + }, /** * Verify a presentation. */ - verifyPresentation: defineAction({ + verifyPresentation: { params: { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, @@ -150,14 +150,14 @@ const VCPresentationService = { return { verified: false, error: e.message }; } } - }), + }, /** * Verify a capability presentation. * @param {object} ctx.params - The parameters for verifying the capability presentation. * @returns {object} The verification result. */ - verifyCapabilityPresentation: defineAction({ + verifyCapabilityPresentation: { params: { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, @@ -210,7 +210,7 @@ const VCPresentationService = { return { ...verificationResult, presentation }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 6ba48b0fe..7332bcef2 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -2,7 +2,7 @@ import fetch from 'node-fetch'; import cronParser from 'cron-parser'; import { promises as fsPromises } from 'fs'; import { ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { isDir } from '../utils.ts'; const Schema = { @@ -91,7 +91,7 @@ const Schema = { } }, actions: { - freshImport: defineAction({ + freshImport: { async handler(ctx) { if (ctx.params.clear === undefined || ctx.params.clear === true) { this.logger.info('Clearing all existing data...'); @@ -163,9 +163,9 @@ const Schema = { this.logger.info(`Import finished !`); } - }), + }, - synchronize: defineAction({ + synchronize: { handler() { if (this.createJob) { this.createJob(this.name, 'synchronize', {}); @@ -178,9 +178,9 @@ const Schema = { }); } } - }), + }, - importOne: defineAction({ + importOne: { async handler(ctx) { let { sourceUri, destUri, data } = ctx.params; @@ -275,9 +275,9 @@ const Schema = { return destUri; } - }), + }, - deleteImported: defineAction({ + deleteImported: { async handler(ctx) { for (const resourceUri of Object.values(this.imported)) { this.logger.info(`Deleting ${resourceUri}...`); @@ -291,25 +291,25 @@ const Schema = { this.imported = {}; } - }), + }, - list: defineAction({ + list: { async handler(ctx) { return await this.list(ctx.params.url || this.settings.source.getAllFull); } - }), + }, - getOne: defineAction({ + getOne: { async handler(ctx) { return await this.getOne(this.settings.source.getOneFull(ctx.params.data)); } - }), + }, - getImported: defineAction({ + getImported: { handler() { return this.imported; } - }) + } }, methods: { async prepare() { diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 30487d29c..a7fe00c68 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -1,6 +1,6 @@ import fetch from 'node-fetch'; import N3 from 'n3'; -import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import RemoteService from './subservices/remote.ts'; const { DataFactory } = N3; @@ -151,7 +151,7 @@ const InferenceSchema = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'newData' does not exist on type 'Optiona... Remove this comment to see the full error message let { newData } = ctx.params; @@ -189,9 +189,9 @@ const InferenceSchema = { } } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message let { oldData } = ctx.params; @@ -224,9 +224,9 @@ const InferenceSchema = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message let { oldData, newData } = ctx.params; @@ -300,9 +300,9 @@ const InferenceSchema = { } } } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'triplesAdded' does not exist on type 'Op... Remove this comment to see the full error message const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; @@ -371,9 +371,9 @@ const InferenceSchema = { } } } - }), + }, - 'ontologies.registered': defineServiceEvent({ + 'ontologies.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'owl' does not exist on type 'Optionalize... Remove this comment to see the full error message const { owl } = ctx.params; @@ -386,7 +386,7 @@ const InferenceSchema = { this.inverseRelations = { ...this.inverseRelations, ...result }; } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index e1a08b78f..dc4a49e1a 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; import N3 from 'n3'; import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } from '@semapps/activitypub'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; @@ -19,7 +19,7 @@ const InferenceRemoteSchema = { this.relayActor = await this.broker.call('activitypub.relay.getActor'); }, actions: { - offerInference: defineAction({ + offerInference: { visibility: 'public', params: { subject: { type: 'string', optional: false }, @@ -87,7 +87,7 @@ const InferenceRemoteSchema = { } } } - }) + } }, activities: { offerInference: { diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts index aff285235..6d65b6341 100644 --- a/src/middleware/packages/jsonld/services/api/index.ts +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const JsonldApiSchema = { name: 'jsonld.api' as const, @@ -21,13 +21,13 @@ const JsonldApiSchema = { }); }, actions: { - getContext: defineAction({ + getContext: { async handler(ctx) { // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = 'application/ld+json'; return await ctx.call('jsonld.context.getLocal'); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index e83fde630..7190fe14b 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -23,6 +23,6 @@ const Schema = defineAction({ return context; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts index 8c4627ba3..e0c45b559 100644 --- a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts +++ b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -27,6 +27,6 @@ const Schema = defineAction({ '@context': context }; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index 30a921be2..100219b87 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -1,7 +1,7 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { a: { @@ -51,6 +51,6 @@ const Schema = defineAction({ throw new Error('Could not merge JSON-LD contexts'); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts index bb68d1598..6930342dc 100644 --- a/src/middleware/packages/jsonld/services/context/actions/parse.ts +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { context: { @@ -16,6 +16,6 @@ const Schema = defineAction({ const { contextRaw } = await this.contextParser.parse(context, options); return contextRaw; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index 9b649d021..3944c331b 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { context: { @@ -20,6 +20,6 @@ const Schema = defineAction({ return false; } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index 31d562317..07b77fe33 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -2,7 +2,7 @@ import jsonld from 'jsonld'; import fsModule from 'fs'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'lru-... Remove this comment to see the full error message import LRU from 'lru-cache'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const fsPromises = fsModule.promises; @@ -53,7 +53,7 @@ const JsonldDocumentLoaderSchema = { } }, actions: { - loadWithCache: defineAction({ + loadWithCache: { async handler(ctx) { const { url, options } = ctx.params; if (url === this.settings.localContextUri) { @@ -75,17 +75,17 @@ const JsonldDocumentLoaderSchema = { cache.set(url, context); return context; } - }), + }, - getCache: defineAction({ + getCache: { handler(ctx) { const { uri } = ctx.params; const context = cache.get(uri); return context?.document; } - }), + }, - setCache: defineAction({ + setCache: { handler(ctx) { const { uri, json } = ctx.params; cache.set(uri, { @@ -94,7 +94,7 @@ const JsonldDocumentLoaderSchema = { document: json }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 97ee831ce..14ce76333 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -4,7 +4,7 @@ import { JsonLdParser } from 'jsonld-streaming-parser'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import streamifyString from 'streamify-string'; import rdfParser from 'rdf-parse'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { arrayOf, isURI } from '../../utils/utils.ts'; const JsonldParserSchema = { @@ -23,42 +23,42 @@ const JsonldParserSchema = { }); }, actions: { - compact: defineAction({ + compact: { handler(ctx) { const { input, context, options } = ctx.params; return this.jsonld.compact(input, context, options); } - }), + }, - expand: defineAction({ + expand: { handler(ctx) { const { input, options } = ctx.params; return this.jsonld.expand(input, options); } - }), + }, - flatten: defineAction({ + flatten: { handler(ctx) { const { input, context, options } = ctx.params; return this.jsonld.flatten(input, context, options); } - }), + }, - frame: defineAction({ + frame: { handler(ctx) { const { input, frame, options } = ctx.params; return this.jsonld.frame(input, frame, options); } - }), + }, - normalize: defineAction({ + normalize: { handler(ctx) { const { input, options } = ctx.params; return this.jsonld.normalize(input, options); } - }), + }, - fromRDF: defineAction({ + fromRDF: { async handler(ctx) { const { input, options = {} } = ctx.params; const { format } = options; @@ -88,9 +88,9 @@ const JsonldParserSchema = { ); } } - }), + }, - toRDF: defineAction({ + toRDF: { async handler(ctx) { const { input, options = {} } = ctx.params; const { format } = options; @@ -114,9 +114,9 @@ const JsonldParserSchema = { }); } } - }), + }, - toQuads: defineAction({ + toQuads: { // Return quads in RDF.JS data model // (this.jsonld.toRDF does not use the same model) // https://github.com/rdfjs/data-model-spec @@ -133,9 +133,9 @@ const JsonldParserSchema = { .on('end', () => resolve(res)); }); } - }), + }, - expandPredicate: defineAction({ + expandPredicate: { // TODO move to ontologies service ?? async handler(ctx) { let { predicate, context } = ctx.params; @@ -163,9 +163,9 @@ const JsonldParserSchema = { return expandedPredicate; } - }), + }, - expandTypes: defineAction({ + expandTypes: { async handler(ctx) { let { types, context } = ctx.params; @@ -193,7 +193,7 @@ const JsonldParserSchema = { return expandedTypes; } - }) + } }, methods: { streamToString(stream) { diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 250ee29a6..73fc305c4 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { delay, getParentContainerUri } from '../utils.ts'; const Schema = { @@ -40,43 +40,43 @@ const Schema = { if (!path) this.settings.path = registration.path; }, actions: { - post: defineAction({ + post: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return await ctx.call('ldp.container.post', ctx.params); } - }), + }, - list: defineAction({ + list: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return ctx.call('ldp.container.get', ctx.params); } - }), + }, - attach: defineAction({ + attach: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return ctx.call('ldp.container.attach', ctx.params); } - }), + }, - detach: defineAction({ + detach: { async handler(ctx) { if (!ctx.params.containerUri) { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } return ctx.call('ldp.container.detach', ctx.params); } - }), + }, - get: defineAction({ + get: { handler(ctx) { const containerParams = {}; // @ts-expect-error TS(2339): Property 'accept' does not exist on type '{}'. @@ -86,45 +86,45 @@ const Schema = { ...ctx.params }); } - }), + }, - getHeaderLinks: defineAction({ + getHeaderLinks: { handler(ctx) { return []; } - }), + }, - create: defineAction({ + create: { handler(ctx) { return ctx.call('ldp.resource.create', ctx.params); } - }), + }, - patch: defineAction({ + patch: { handler(ctx) { return ctx.call('ldp.resource.patch', ctx.params); } - }), + }, - put: defineAction({ + put: { handler(ctx) { return ctx.call('ldp.resource.put', ctx.params); } - }), + }, - delete: defineAction({ + delete: { handler(ctx) { return ctx.call('ldp.resource.delete', ctx.params); } - }), + }, - exist: defineAction({ + exist: { handler(ctx) { return ctx.call('ldp.resource.exist', ctx.params); } - }), + }, - getContainerUri: defineAction({ + getContainerUri: { handler(ctx) { return ctx.call('ldp.registry.getUri', { path: this.settings.path, @@ -132,9 +132,9 @@ const Schema = { webId: ctx.params?.webId || ctx.meta?.webId }); } - }), + }, - waitForContainerCreation: defineAction({ + waitForContainerCreation: { async handler(ctx) { let { containerUri } = ctx.params; let containerExist; @@ -169,7 +169,7 @@ const Schema = { } while (!containerAttached); } } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 8976ea585..27aaed52b 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,5 +1,5 @@ import { dc } from '@semapps/ontologies'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { getDatasetFromUri } from '../utils.ts'; const Schema = { @@ -14,7 +14,7 @@ const Schema = { await this.broker.call('ontologies.register', dc); }, actions: { - tagCreatedResource: defineAction({ + tagCreatedResource: { async handler(ctx) { const { resourceUri, newData, webId, dataset } = ctx.params; const now = new Date(); @@ -48,9 +48,9 @@ const Schema = { }); } } - }), + }, - tagUpdatedResource: defineAction({ + tagUpdatedResource: { async handler(ctx) { const { resourceUri, dataset } = ctx.params; const now = new Date(); @@ -66,10 +66,10 @@ const Schema = { webId: 'system' }); } - }) + } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, webId, dataset } = ctx.params; @@ -80,25 +80,25 @@ const Schema = { { parentCtx: ctx } ); } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index a77b4abc9..aea064b4e 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'shar... Remove this comment to see the full error message import sharp from 'sharp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils.ts'; const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; @@ -23,7 +23,7 @@ const Schema = { } }, actions: { - processImage: defineAction({ + processImage: { async handler(ctx) { const { resourceUri } = ctx.params; @@ -67,9 +67,9 @@ const Schema = { this.logger.warn(`Image processing failed (${e.message})`); } } - }), + }, - processAllImages: defineAction({ + processAllImages: { async handler(ctx) { const { webId } = ctx.params; const container = await this.actions.list({ webId }, { parentCtx: ctx }); @@ -83,7 +83,7 @@ const Schema = { } this.logger.info('Finished !'); } - }) + } }, methods: { getMaxSize(width, height) { diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index 01e2e3fc5..943e9562a 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -1,5 +1,5 @@ import { CronJob } from 'cron'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { settings: { @@ -12,7 +12,7 @@ const Schema = { }, dependencies: ['triplestore', 'ldp.resource'], actions: { - checkOrphanFiles: defineAction({ + checkOrphanFiles: { async handler(ctx) { try { this.logger.info('OrphanFilesDeletion - Check...'); @@ -47,7 +47,7 @@ const Schema = { this.logger.error(`OrphanFilesDeletion - Error: ${error.message}`); } } - }) + } }, created() { this.actions.checkOrphanFiles(); diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index d3d4dbab3..6de006be2 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import ControlledContainerMixin from './controlled-container.ts'; import { delay } from '../utils.ts'; @@ -24,7 +24,7 @@ const Schema = { } }, actions: { - initializeResource: defineAction({ + initializeResource: { async handler(ctx) { const { webId } = ctx.params; @@ -36,24 +36,24 @@ const Schema = { return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); } - }), + }, - getResourceUri: defineAction({ + getResourceUri: { async handler(ctx) { const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri }); return resourcesUris[0]; } - }), + }, - exist: defineAction({ + exist: { async handler(ctx) { const resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); return !!resourceUri; } - }), + }, - waitForResourceCreation: defineAction({ + waitForResourceCreation: { async handler(ctx) { const { webId } = ctx.params; let resource; @@ -82,7 +82,7 @@ const Schema = { return resource.id || resource['@id']; } - }) + } }, hooks: { before: { @@ -110,7 +110,7 @@ const Schema = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.podProvider) { @@ -120,7 +120,7 @@ const Schema = { await this.actions.initializeResource({ webId }); } } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index cd1145479..b5b19b22f 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -10,7 +10,7 @@ import { parseJson } from '@semapps/middlewares'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const Schema = { settings: { @@ -69,7 +69,7 @@ const Schema = { } }, actions: { - endpointAdd: defineAction({ + endpointAdd: { async handler(ctx) { const { predicate, object } = ctx.params; @@ -83,9 +83,9 @@ const Schema = { { meta: { dataset: this.settings.settingsDataset, skipEmitEvent: true, skipObjectsWatcher: true } } ); } - }), + }, - endpointGet: defineAction({ + endpointGet: { async handler(ctx) { // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = ctx.meta.headers?.accept; @@ -99,7 +99,7 @@ const Schema = { { meta: { dataset: this.settings.settingsDataset } } ); } - }) + } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 0dcc566d4..28ad432a3 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,5 +1,5 @@ import { ldp, semapps } from '@semapps/ontologies'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; import LdpContainerService from './services/container/index.ts'; import LdpCacheService from './services/cache/index.ts'; @@ -109,25 +109,25 @@ const LdpSchema = { await this.broker.call('ontologies.register', semapps); }, actions: { - getBaseUrl: defineAction({ + getBaseUrl: { handler() { return this.settings.baseUrl; } - }), + }, - getBasePath: defineAction({ + getBasePath: { handler() { const { pathname } = new URL(this.settings.baseUrl); return pathname; } - }), + }, - getSetting: defineAction({ + getSetting: { handler(ctx) { const { key } = ctx.params; return this.settings[key]; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index eeea68bde..4c1b148c6 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -1,9 +1,9 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -export default defineAction({ +export default { async handler(ctx) { let { username, slugParts, ...resource } = ctx.params; @@ -54,4 +54,4 @@ export default defineAction({ ctx.meta.$statusMessage = e.message; } } -}); +}; diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index 41781a72c..7b497b3c9 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -1,10 +1,10 @@ -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const LdpCacheSchema = { name: 'ldp.cache' as const, dependencies: ['ldp.container'], actions: { - generate: defineAction({ + generate: { async handler(ctx) { const containersUris = await ctx.call('ldp.container.getAll'); for (const containerUri of containersUris) { @@ -17,9 +17,9 @@ const LdpCacheSchema = { } } } - }), + }, - invalidateResource: defineAction({ + invalidateResource: { async handler(ctx) { if (this.broker.cacher) { const { resourceUri, dataset } = ctx.params; @@ -33,9 +33,9 @@ const LdpCacheSchema = { } } } - }), + }, - invalidateContainer: defineAction({ + invalidateContainer: { async handler(ctx) { if (this.broker.cacher) { const { containerUri } = ctx.params; @@ -43,91 +43,91 @@ const LdpCacheSchema = { await this.broker.cacher.clean(`ldp.resource.getTypes:${containerUri}**`); } } - }) + } }, events: { - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.attached': defineServiceEvent({ + 'ldp.container.attached': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.patched': defineServiceEvent({ + 'ldp.container.patched': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.deleted': defineServiceEvent({ + 'ldp.container.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.container.detached': defineServiceEvent({ + 'ldp.container.detached': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } - }), + }, - 'ldp.remote.deleted': defineServiceEvent({ + 'ldp.remote.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'ldp.remote.stored': defineServiceEvent({ + 'ldp.remote.stored': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - 'webacl.resource.updated': defineServiceEvent({ + 'webacl.resource.updated': { // Invalidate cache also when ACL rights are changed async handler(ctx) { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message @@ -140,9 +140,9 @@ const LdpCacheSchema = { await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); } } - }), + }, - 'webacl.resource.deleted': defineServiceEvent({ + 'webacl.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, dataset } = ctx.params; @@ -154,7 +154,7 @@ const LdpCacheSchema = { await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 72443e95d..d1ca8c830 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,11 +1,11 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -55,6 +55,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index 6cc30ce8f..12ed95a4c 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -18,6 +18,6 @@ const Schema = defineAction({ await ctx.call('ldp.resource.delete', { resourceUri, webId }); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 4962384ed..b48b9170c 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -27,6 +27,6 @@ const Schema = defineAction({ ctx.emit('ldp.container.created', { containerUri, options, webId }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index c5a983f1f..7e19c2e40 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getParentContainerUri } from '../../../utils.ts'; /** @@ -7,7 +7,7 @@ import { getParentContainerUri } from '../../../utils.ts'; * Recursively create the parent container(s) if they don't exist * In Pod provider config, the webId is required to find the Pod root */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -79,6 +79,6 @@ const Schema = defineAction({ } } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index 22d4c8e21..cc91206b7 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -1,7 +1,7 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -49,6 +49,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index 97a724c25..254b29ebc 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -50,6 +50,6 @@ const Schema = defineAction({ ); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/exist.ts b/src/middleware/packages/ldp/services/container/actions/exist.ts index 4fac53ad9..5408545f3 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.ts +++ b/src/middleware/packages/ldp/services/container/actions/exist.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' } @@ -25,6 +25,6 @@ const Schema = defineAction({ webId: 'system' }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index fa5d12f6c..3ebd32e2b 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,12 +1,12 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string', optional: true }, @@ -121,6 +121,6 @@ const Schema = defineAction({ return compactResults; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.ts b/src/middleware/packages/ldp/services/container/actions/getAll.ts index 4d3368aca..85c02d0c8 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.ts +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { dataset: { type: 'string', optional: true } @@ -20,6 +20,6 @@ const Schema = defineAction({ return result.map((node: any) => node.containerUri.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.ts b/src/middleware/packages/ldp/services/container/actions/getPath.ts index b68b331fb..24010e197 100644 --- a/src/middleware/packages/ldp/services/container/actions/getPath.ts +++ b/src/middleware/packages/ldp/services/container/actions/getPath.ts @@ -1,9 +1,9 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'dash... Remove this comment to see the full error message import dashify from 'dashify'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { isURL } from '../../../utils.ts'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -41,6 +41,6 @@ const Schema = defineAction({ return `/${prefix}/${dashify(className)}`; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index 56f5864cf..dedffdcf8 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string', optional: true } @@ -21,6 +21,6 @@ const Schema = defineAction({ return result.map((node: any) => node.resourceUri.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/includes.ts b/src/middleware/packages/ldp/services/container/actions/includes.ts index 53e7fe7c4..7e86656a6 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.ts +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -33,6 +33,6 @@ const Schema = defineAction({ webId }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index 595a0d418..f593252a0 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -25,6 +25,6 @@ const Schema = defineAction({ const num = Number(res[0].count.value); return num === 0; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 9d6b549b7..35ff56e06 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,4 +1,4 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { isMirror } from '../../../utils.ts'; import { Errors } from 'moleculer'; @@ -21,7 +21,7 @@ const checkTripleValidity = (triple: any, containerUri: any) => { } }; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { @@ -128,6 +128,6 @@ const Schema = defineAction({ ); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 5f75374f9..e8e09fcd7 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,13 +1,13 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { @@ -155,6 +155,6 @@ const Schema = defineAction({ return resourceUri; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index c96af07c0..1150597e7 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -1,7 +1,7 @@ import LinkHeader from 'http-link-header'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { type: 'string' } @@ -33,6 +33,6 @@ const Schema = defineAction({ return linkHeader.toString(); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/link-header/actions/register.ts b/src/middleware/packages/ldp/services/link-header/actions/register.ts index ac2d15a45..05b0059cc 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/register.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/register.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { actionName: { type: 'string' } @@ -9,6 +9,6 @@ const Schema = defineAction({ const { actionName } = ctx.params; this.registeredActionNames.push(actionName); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index df34d298d..938a3e53b 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { actionName: { type: 'string' }, @@ -14,6 +14,6 @@ const Schema = defineAction({ // Re-order all authorizers by priority this.authorizers.sort((a: any, b: any) => b.priority - a.priority); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index 0e46a8cb4..66e48e88c 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,4 +1,4 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -7,7 +7,7 @@ const { MoleculerError } = Errors; /** * Calls "has" action and throws error if no authorization was granted */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { type: 'string' }, @@ -20,6 +20,6 @@ const Schema = defineAction({ throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED'); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index a189e2666..bdc7018b5 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { type: 'string' }, @@ -28,6 +28,6 @@ const Schema = defineAction({ // If no guards returned a positive return false; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.ts b/src/middleware/packages/ldp/services/registry/actions/getByType.ts index 8bbf7b6b9..fccf1d6d8 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByType.ts @@ -1,10 +1,10 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Find the container options for a resource type * This only returns containers registered with the LDP registry, not the ones registered with the TypeIndex. */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message @@ -22,6 +22,6 @@ const Schema = defineAction({ ) ); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index bb72c5d8f..c9daaa2e8 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,9 +1,9 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Find the container options for a container URI */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { containerUri: { type: 'string', optional: true }, @@ -32,6 +32,6 @@ const Schema = defineAction({ } return this.settings.defaultOptions; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 5eb2bc980..952820830 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,11 +1,11 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; /** * Get the container URI based on its path * In Pod provider config, the webId is required to find the Pod root */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { path: { type: 'string' }, @@ -23,6 +23,6 @@ const Schema = defineAction({ return urlJoin(this.settings.baseUrl, path); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index 3baa34cef..8e3d6a1db 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -1,10 +1,10 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', handler() { return this.registeredContainers; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index b700075c4..4ef62bf7a 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,12 +1,12 @@ import urlJoin from 'url-join'; import pathModule from 'path'; import { pathToRegexp } from 'path-to-regexp'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; const pathJoin = pathModule.join; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { path: { type: 'string', optional: true }, @@ -97,6 +97,6 @@ const Schema = defineAction({ return options; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 97dc08a38..6855d0afd 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import getByTypeAction from './actions/getByType.ts'; import getByUriAction from './actions/getByUri.ts'; import getUriAction from './actions/getUri.ts'; @@ -38,7 +38,7 @@ const LdpRegistrySchema = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId, accountData } = ctx.params; @@ -59,7 +59,7 @@ const LdpRegistrySchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index 42ed9debe..f296b5c8c 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -69,6 +69,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index 92c01bf3a..09285409a 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,8 +1,8 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -84,6 +84,6 @@ const Schema = defineAction({ throw new Error(`Unknown strategy: ${strategy}`); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getGraph.ts b/src/middleware/packages/ldp/services/remote/actions/getGraph.ts index 6f0393bdb..0269fee30 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getGraph.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getGraph.ts @@ -1,7 +1,7 @@ import { triple, namedNode, variable } from '@rdfjs/data-model'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' } @@ -27,6 +27,6 @@ const Schema = defineAction({ } return false; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index 0295a8c21..89439876b 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,12 +1,12 @@ import fetch from 'node-fetch'; import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -65,6 +65,6 @@ const Schema = defineAction({ } } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 91db61562..2092b7f54 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,12 +1,12 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { buildBlankNodesQuery } from '../../../utils.ts'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -72,6 +72,6 @@ const Schema = defineAction({ throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index 4560eaeb1..02e06c131 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -32,6 +32,6 @@ const Schema = defineAction({ } } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index eeef7caa2..6728cd3e7 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,9 +1,9 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { hasType } from '../../../utils.ts'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string', optional: true }, @@ -104,6 +104,6 @@ const Schema = defineAction({ return resource; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index 63b7a1be6..be31e6b3d 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,6 +1,6 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import Schedule from 'moleculer-schedule'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import getGraphAction from './actions/getGraph.ts'; @@ -30,12 +30,12 @@ const LdpRemoteSchema = { isRemote: isRemoteAction, store: storeAction, - runCron: defineAction({ + runCron: { // Used by tests handler() { this.updateSingleMirroredResources(); } - }) + } }, methods: { async proxyAvailable() { diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index 0afa95952..0776cbbc8 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -1,8 +1,8 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { waitForResource } from '../../../utils.ts'; /** @type {import('moleculer').ServiceActionsSchema} */ -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -36,6 +36,6 @@ const Schema = defineAction({ ) ); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 75c4dab06..5c9b3baf0 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,11 +1,11 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -98,6 +98,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 4bfb399aa..ca420ee8e 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,7 +1,7 @@ import fs from 'fs'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -76,6 +76,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 961b7ae8f..919d67636 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,7 +1,7 @@ import { triple, namedNode, variable } from '@rdfjs/data-model'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -49,6 +49,6 @@ const Schema = defineAction({ return exist; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index 93c5daf2e..8ae23e100 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -3,9 +3,9 @@ import createSlug from 'speakingurl'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -65,6 +65,6 @@ const Schema = defineAction({ return urlJoin(containerUri, slug || uuid); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index c375f2310..87cea55e7 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,12 +1,12 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { buildBlankNodesQuery } from '../../../utils.ts'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -70,6 +70,6 @@ const Schema = defineAction({ } }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index 464689d83..f3ee6b575 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,7 +1,7 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getContainerFromUri } from '../../../utils.ts'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -35,6 +35,6 @@ const Schema = defineAction({ return result.map((node: any) => node.containerUri.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 8d8e28861..0441a7ca7 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -24,6 +24,6 @@ const Schema = defineAction({ return result.map((node: any) => node.type.value); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 37518525c..576bfdb06 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,4 +1,4 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -20,7 +20,7 @@ function checkTriplesSubjectIsResource(triples: any, resourceUri: any) { } } -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { resourceUri: { @@ -112,6 +112,6 @@ const Schema = defineAction({ return returnValues; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index df597e389..b07a72a24 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,12 +1,12 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message @@ -167,6 +167,6 @@ const Schema = defineAction({ webId }; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index 5f8c8b5a7..c5f97fe20 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -1,13 +1,13 @@ import path from 'path'; import fs from 'fs'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -50,6 +50,6 @@ const Schema = defineAction({ fileName }; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts index f7589311f..1951d1708 100644 --- a/src/middleware/packages/migration/service.ts +++ b/src/middleware/packages/migration/service.ts @@ -1,6 +1,6 @@ import { getAclUriFromResourceUri } from '@semapps/webacl'; import { getContainerFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const MigrationSchema = { name: 'migration' as const, @@ -13,7 +13,7 @@ const MigrationSchema = { } }, actions: { - replacePredicate: defineAction({ + replacePredicate: { async handler(ctx) { const { oldPredicate, newPredicate, dataset } = ctx.params; @@ -34,9 +34,9 @@ const MigrationSchema = { webId: 'system' }); } - }), + }, - moveResourcesToContainer: defineAction({ + moveResourcesToContainer: { async handler(ctx) { const { oldContainerUri, newContainerUri, dataset } = ctx.params; @@ -52,9 +52,9 @@ const MigrationSchema = { ); } } - }), + }, - moveResource: defineAction({ + moveResource: { async handler(ctx) { const { oldResourceUri, newResourceUri, dataset } = ctx.params; @@ -107,9 +107,9 @@ const MigrationSchema = { await this.actions.moveAclRights({ newResourceUri, oldResourceUri, dataset }, { parentCtx: ctx }); } - }), + }, - moveAclGroup: defineAction({ + moveAclGroup: { async handler(ctx) { const { oldGroupUri, newGroupUri, dataset } = ctx.params; @@ -142,9 +142,9 @@ const MigrationSchema = { { parentCtx: ctx } ); } - }), + }, - moveAclRights: defineAction({ + moveAclRights: { async handler(ctx) { const { oldResourceUri, newResourceUri, dataset } = ctx.params; @@ -166,9 +166,9 @@ const MigrationSchema = { }); } } - }), + }, - clearUserRights: defineAction({ + clearUserRights: { async handler(ctx) { const { userUri, dataset } = ctx.params; @@ -194,7 +194,7 @@ const MigrationSchema = { webId: 'system' }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/nodeinfo/service.ts b/src/middleware/packages/nodeinfo/service.ts index 238b84189..f48ab6628 100644 --- a/src/middleware/packages/nodeinfo/service.ts +++ b/src/middleware/packages/nodeinfo/service.ts @@ -1,6 +1,6 @@ import path from 'path'; import urlJoin from 'url-join'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const NodeinfoService = { name: 'nodeinfo' as const, @@ -58,22 +58,22 @@ const NodeinfoService = { }); }, actions: { - addLink: defineAction({ + addLink: { handler(ctx) { const { rel, href } = ctx.params; this.links.push({ rel, href }); } - }), + }, - getLinks: defineAction({ + getLinks: { handler() { return { links: this.links }; } - }), + }, - getSchema: defineAction({ + getSchema: { async handler(ctx) { const users = await this.actions.getUsersCount({}, { parentCtx: ctx }); return { @@ -86,9 +86,9 @@ const NodeinfoService = { metadata: this.settings.metadata }; } - }), + }, - getUsersCount: defineAction({ + getUsersCount: { // Overwrite this method to return your users count async handler() { return { @@ -97,7 +97,7 @@ const NodeinfoService = { activeMonth: 0 }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index 8c2e19501..fbbf373e9 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -2,7 +2,7 @@ import MailService from 'moleculer-mail'; import cronParser from 'cron-parser'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import DigestSubscriptionService from './subscription.ts'; const DigestNotificationsService = { @@ -40,7 +40,7 @@ const DigestNotificationsService = { } }, actions: { - build: defineAction({ + build: { async handler(ctx) { const { frequency, timestamp } = ctx.params; const success = []; @@ -134,7 +134,7 @@ const DigestNotificationsService = { return { failures, success }; } - }) + } }, methods: { // Optional method called for each notification diff --git a/src/middleware/packages/notifications/services/digest/subscription.ts b/src/middleware/packages/notifications/services/digest/subscription.ts index 4d760bf93..59ea3afad 100644 --- a/src/middleware/packages/notifications/services/digest/subscription.ts +++ b/src/middleware/packages/notifications/services/digest/subscription.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const DigestSubscriptionSchema = { name: 'digest.subscription' as const, @@ -11,13 +11,13 @@ const DigestSubscriptionSchema = { }, dependencies: ['triplestore'], actions: { - findByWebId: defineAction({ + findByWebId: { async handler(ctx) { const { webId } = ctx.params; const subscriptions = await this._find(ctx, { query: { webId } }); return subscriptions.length > 0 ? subscriptions[0] : null; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/notifications/services/expo-push/device.ts b/src/middleware/packages/notifications/services/expo-push/device.ts index 431ff6308..ab38a03ad 100644 --- a/src/middleware/packages/notifications/services/expo-push/device.ts +++ b/src/middleware/packages/notifications/services/expo-push/device.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ExpoPushDeviceService = { name: 'expo-push.device' as const, @@ -14,7 +14,7 @@ const ExpoPushDeviceService = { } }, actions: { - subscribe: defineAction({ + subscribe: { async handler(ctx) { const { name, yearClass, userUri, pushToken } = ctx.params; @@ -61,9 +61,9 @@ const ExpoPushDeviceService = { return device; } - }), + }, - findUsersDevices: defineAction({ + findUsersDevices: { async handler(ctx) { const devices = []; @@ -85,7 +85,7 @@ const ExpoPushDeviceService = { return devices; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/notifications/services/expo-push/notification.ts b/src/middleware/packages/notifications/services/expo-push/notification.ts index 934d73ea4..c18f8f5f8 100644 --- a/src/middleware/packages/notifications/services/expo-push/notification.ts +++ b/src/middleware/packages/notifications/services/expo-push/notification.ts @@ -1,7 +1,7 @@ import DbService from 'moleculer-db'; import { Expo } from 'expo-server-sdk'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const ExpoPushNotificationService = { name: 'expo-push.notification' as const, @@ -17,15 +17,15 @@ const ExpoPushNotificationService = { setInterval(this.actions.checkReceipts, 5 * 60 * 1000); }, actions: { - send: defineAction({ + send: { async handler(ctx) { await this.actions.queue(ctx.params, { parentCtx: ctx }); this.actions.processQueue({}, { parentCtx: ctx }); } - }), + }, - queue: defineAction({ + queue: { async handler(ctx) { const { to, message, data } = ctx.params; @@ -49,9 +49,9 @@ const ExpoPushNotificationService = { ); } } - }), + }, - processQueue: defineAction({ + processQueue: { async handler(ctx) { const notifications = await this.findByStatus('queued', ctx); @@ -84,9 +84,9 @@ const ExpoPushNotificationService = { } } } - }), + }, - checkReceipts: defineAction({ + checkReceipts: { async handler(ctx) { const notifications = await this.findByStatus('processed', ctx); @@ -135,7 +135,7 @@ const ExpoPushNotificationService = { } } } - }) + } }, methods: { async findByStatus(status, ctx) { diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index c9c9f1ec4..4c688cfbb 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -3,7 +3,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; import { getSlugFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message @@ -26,7 +26,7 @@ const SingleMailNotificationsService = { data: {} }, events: { - 'activitypub.inbox.received': defineServiceEvent({ + 'activitypub.inbox.received': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message const { activity, recipients } = ctx.params; @@ -76,7 +76,7 @@ const SingleMailNotificationsService = { } } } - }) + } }, methods: { // Optional method called for each notification diff --git a/src/middleware/packages/ontologies/actions/findNamespace.ts b/src/middleware/packages/ontologies/actions/findNamespace.ts index 0bff8844a..28ac3dc7b 100644 --- a/src/middleware/packages/ontologies/actions/findNamespace.ts +++ b/src/middleware/packages/ontologies/actions/findNamespace.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -20,6 +20,6 @@ const Schema = defineAction({ return null; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/findPrefix.ts b/src/middleware/packages/ontologies/actions/findPrefix.ts index 6aa3dde68..02fabf72c 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.ts +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -1,8 +1,8 @@ import fetch from 'node-fetch'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { isURL } from '../utils.ts'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -25,6 +25,6 @@ const Schema = defineAction({ return null; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/get.ts b/src/middleware/packages/ontologies/actions/get.ts index 69f4e31ed..eaef3b374 100644 --- a/src/middleware/packages/ontologies/actions/get.ts +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { prefix: { type: 'string', optional: true }, @@ -30,6 +30,6 @@ const Schema = defineAction({ return ontology; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index b492796ea..831e97d8b 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -11,6 +11,6 @@ const Schema = defineAction({ .map((ontology: any) => [ontology.prefix, ontology.namespace]) ); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index ba2a6e156..10a136889 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, async handler(ctx) { @@ -10,6 +10,6 @@ const Schema = defineAction({ .map((ontology: any) => `PREFIX ${ontology.prefix}: <${ontology.namespace}>`) .join('\n'); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index f047412a5..0933b9d65 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -1,11 +1,11 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', cache: true, handler() { return Object.values(this.ontologies); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 10578bce5..74f73735a 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -1,9 +1,9 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { isURL } from '../utils.ts'; const regexPrefix = /^([^:]+):([^:]+)$/gm; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -27,6 +27,6 @@ const Schema = defineAction({ return value.replace(`${ontology.prefix}:`, ontology.namespace); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index 41036d902..63e18bbd8 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -1,7 +1,7 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { isURL, arrayOf } from '../utils.ts'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message @@ -62,6 +62,6 @@ const Schema = defineAction({ ctx.emit('ontologies.registered', { prefix, namespace, owl, jsonldContext, preserveContextUri }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/ontologies/sub-services/registry.ts b/src/middleware/packages/ontologies/sub-services/registry.ts index 646db4b75..86f6af2e4 100644 --- a/src/middleware/packages/ontologies/sub-services/registry.ts +++ b/src/middleware/packages/ontologies/sub-services/registry.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const OntologiesRegistrySchema = { name: 'ontologies.registry' as const, @@ -10,30 +10,30 @@ const OntologiesRegistrySchema = { idField: '@id' }, actions: { - getByPrefix: defineAction({ + getByPrefix: { async handler(ctx) { const { prefix } = ctx.params; const [ontology] = await this._find(ctx, { query: { prefix } }); return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; } - }), + }, - getByNamespace: defineAction({ + getByNamespace: { async handler(ctx) { const { namespace } = ctx.params; const [ontology] = await this._find(ctx, { query: { namespace } }); return ontology && { prefix: ontology.prefix, namespace: ontology.namespace }; } - }), + }, - list: defineAction({ + list: { async handler(ctx) { const ontologies = await this._list(ctx, {}); return ontologies.rows.map(({ prefix, namespace }: any) => ({ prefix, namespace })); } - }), + }, - updateOrCreate: defineAction({ + updateOrCreate: { async handler(ctx) { const { prefix, namespace } = ctx.params; @@ -51,7 +51,7 @@ const OntologiesRegistrySchema = { }); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/authorizer.ts b/src/middleware/packages/solid/services/authorizer.ts index d3ce7b51b..03aac8802 100644 --- a/src/middleware/packages/solid/services/authorizer.ts +++ b/src/middleware/packages/solid/services/authorizer.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const SolidAuthorizerSchema = { name: 'solid-authorizer' as const, @@ -7,7 +7,7 @@ const SolidAuthorizerSchema = { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission`, priority: 1 }); }, actions: { - hasPermission: defineAction({ + hasPermission: { async handler(ctx) { const { uri, webId } = ctx.params; @@ -18,7 +18,7 @@ const SolidAuthorizerSchema = { return undefined; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/endpoint.ts b/src/middleware/packages/solid/services/endpoint.ts index 8a52e08eb..599d33b54 100644 --- a/src/middleware/packages/solid/services/endpoint.ts +++ b/src/middleware/packages/solid/services/endpoint.ts @@ -1,5 +1,5 @@ import { SpecialEndpointMixin } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const SolidEndpointSchema = { name: 'solid-endpoint' as const, @@ -19,14 +19,14 @@ const SolidEndpointSchema = { await this.broker.call('ldp.link-header.register', { actionName: 'solid-endpoint.getLink' }); }, actions: { - getLink: defineAction({ + getLink: { handler() { return { uri: this.endpointUrl, rel: 'http://www.w3.org/ns/solid/terms#storageDescription' }; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index 31d5cf0e2..c26a532e0 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -7,7 +7,7 @@ import { namedNode } from '@rdfjs/data-model'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** * Solid Notification Channel mixin. @@ -74,7 +74,7 @@ const Schema = { this.loadChannelsFromDb({ removeOldChannels: true }); }, actions: { - endpointPost: defineAction({ + endpointPost: { // Action called by the SpecialEndpointMixin when POSTing to the endpoint async handler(ctx) { // Expect format https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/notifications/#webhooks @@ -151,76 +151,76 @@ const Schema = { { parentCtx: ctx } ); } - }), + }, - getCache: defineAction({ + getCache: { handler() { return this.channels; } - }), + }, - resetCache: defineAction({ + resetCache: { handler() { this.channels = []; } - }) + } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); } - }), + }, - 'ldp.resource.patched': defineServiceEvent({ + 'ldp.resource.patched': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); } - }), + }, - 'ldp.container.attached': defineServiceEvent({ + 'ldp.container.attached': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); } - }), + }, - 'ldp.container.detached': defineServiceEvent({ + 'ldp.container.detached': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); } - }), + }, - 'activitypub.collection.added': defineServiceEvent({ + 'activitypub.collection.added': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message const { collectionUri, itemUri, item } = ctx.params; @@ -230,16 +230,16 @@ const Schema = { // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message this.onContainerOrCollectionEvent(collectionUri, itemUri || item, ACTIVITY_TYPES.ADD); } - }), + }, - 'activitypub.collection.removed': defineServiceEvent({ + 'activitypub.collection.removed': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message const { collectionUri, itemUri } = ctx.params; // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); } - }) + } }, methods: { async getModified(resourceUri) { diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index 32a93dcc8..580d13810 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; const queueOptions = @@ -35,15 +35,15 @@ const WebhookChannel2023Service = { if (!this.createJob) throw new Error('The QueueMixin must be configured with this service'); }, actions: { - getAppChannels: defineAction({ + getAppChannels: { async handler(ctx) { const { appUri, webId } = ctx.params; const { origin: appOrigin } = new URL(appUri); return this.channels.filter((c: any) => c.webId === webId && c.sendTo.startsWith(appOrigin)); } - }), + }, - deleteAppChannels: defineAction({ + deleteAppChannels: { async handler(ctx) { const { appUri, webId } = ctx.params; const appChannels = await this.actions.getAppChannels({ appUri, webId }, { parentCtx: ctx }); @@ -51,7 +51,7 @@ const WebhookChannel2023Service = { await this.actions.delete({ resourceUri: appChannel.id, webId: appChannel.webId }); } } - }) + } }, methods: { onEvent(channel, activity) { diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index f9be16c16..4ec1b8982 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -8,7 +8,7 @@ import DbService from 'moleculer-db'; import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; import { notify } from '@semapps/ontologies'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -54,7 +54,7 @@ const SolidNotificationsListenerSchema = { }); }, actions: { - register: defineAction({ + register: { async handler(ctx) { const { resourceUri, actionName } = ctx.params; @@ -151,9 +151,9 @@ const SolidNotificationsListenerSchema = { return listener; } - }), + }, - transfer: defineAction({ + transfer: { async handler(ctx) { const { uuid, ...data } = ctx.params; const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuid); @@ -173,13 +173,13 @@ const SolidNotificationsListenerSchema = { throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); } } - }), + }, - getCache: defineAction({ + getCache: { handler() { return this.listeners; } - }) + } }, methods: { async getSolidEndpoint(resourceUri) { diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 734693367..a948bb5c6 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { triple, namedNode } from '@rdfjs/data-model'; import { pim } from '@semapps/ontologies'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const SolidStorageSchema = { @@ -26,7 +26,7 @@ const SolidStorageSchema = { }); }, actions: { - create: defineAction({ + create: { async handler(ctx) { const { username } = ctx.params; if (!username) throw new Error('Cannot create Solid storage without a username'); @@ -45,18 +45,18 @@ const SolidStorageSchema = { return storageRootUri; } - }), + }, - getUrl: defineAction({ + getUrl: { async handler(ctx) { const { webId } = ctx.params; // This is faster, but later we should use the 'pim:storage' property of the webId return urlJoin(webId, this.settings.pathName); } - }) + } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; @@ -95,7 +95,7 @@ const SolidStorageSchema = { webId: 'system' }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 581487ee4..83520b0cb 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -2,7 +2,7 @@ import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@sem import { solid, skos, apods } from '@semapps/ontologies'; import { MIME_TYPES } from '@semapps/mime-types'; import { namedNode, triple } from '@rdfjs/data-model'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import TypeRegistrationsService from './type-registrations.ts'; const TypeIndexesSchema = { @@ -31,7 +31,7 @@ const TypeIndexesSchema = { await this.broker.call('ontologies.register', apods); }, actions: { - createPublicIndex: defineAction({ + createPublicIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -64,9 +64,9 @@ const TypeIndexesSchema = { webId }); } - }), + }, - createPrivateIndex: defineAction({ + createPrivateIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -102,9 +102,9 @@ const TypeIndexesSchema = { webId }); } - }), + }, - getPublicIndex: defineAction({ + getPublicIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -115,9 +115,9 @@ const TypeIndexesSchema = { return user['solid:publicTypeIndex']; } - }), + }, - getPrivateIndex: defineAction({ + getPrivateIndex: { async handler(ctx) { const { webId } = ctx.params; @@ -128,9 +128,9 @@ const TypeIndexesSchema = { return preferencesFileUri?.['solid:privateTypeIndex']; } - }), + }, - waitForIndexCreation: defineAction({ + waitForIndexCreation: { async handler(ctx) { const { type, webId } = ctx.params; let indexUri; @@ -158,9 +158,9 @@ const TypeIndexesSchema = { return indexUri; } - }), + }, - awaitCreateComplete: defineAction({ + awaitCreateComplete: { /** * Wait until all type registrations have been created for the newly-created user */ @@ -184,7 +184,7 @@ const TypeIndexesSchema = { ); } while (numTypeRegistrations < numContainersWithTypeIndex); } - }) + } }, methods: { async preferencesFileAvailable() { @@ -193,7 +193,7 @@ const TypeIndexesSchema = { } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; @@ -213,7 +213,7 @@ const TypeIndexesSchema = { // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index 10ab2dbcd..1dd15298e 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { namedNode, triple } from '@rdfjs/data-model'; import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const TypeRegistrationsSchema = { name: 'type-registrations' as const, @@ -14,7 +14,7 @@ const TypeRegistrationsSchema = { activateTombstones: false }, actions: { - register: defineAction({ + register: { visibility: 'public', params: { // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message @@ -111,14 +111,14 @@ const TypeRegistrationsSchema = { return registrationUri; } } - }), + }, /** * Bind an application to a certain type of resources * If no other app is bound with this type yet, it will be marked as the default app * Otherwise, the app will be added to the list of available apps, that the user can switch to */ - bindApp: defineAction({ + bindApp: { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -139,12 +139,12 @@ const TypeRegistrationsSchema = { await ctx.call('type-registrations.put', { resource: registration, webId }); } - }), + }, /** * Unbind an application from a certain type of resource (Mirror of the above action.) */ - unbindApp: defineAction({ + unbindApp: { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -173,9 +173,9 @@ const TypeRegistrationsSchema = { webId }); } - }), + }, - getByType: defineAction({ + getByType: { visibility: 'public', params: { type: { type: 'string' }, @@ -197,9 +197,9 @@ const TypeRegistrationsSchema = { // There can be several TypeRegistration per type return arrayOf(filteredContainer['ldp:contains']); } - }), + }, - getByContainerUri: defineAction({ + getByContainerUri: { visibility: 'public', params: { containerUri: { type: 'string' }, @@ -219,9 +219,9 @@ const TypeRegistrationsSchema = { // There should be only one TypeRegistration per container return arrayOf(filteredContainer['ldp:contains'])[0]; } - }), + }, - findContainersUris: defineAction({ + findContainersUris: { visibility: 'public', params: { type: { type: 'string' }, @@ -234,13 +234,13 @@ const TypeRegistrationsSchema = { return registrations.map((r: any) => r['solid:instanceContainer']); } - }), + }, /** * Reset the public and private registries of the given user * Based on the information found on the LDP registry */ - resetFromRegistry: defineAction({ + resetFromRegistry: { visibility: 'public', params: { webId: { type: 'string' } @@ -284,10 +284,10 @@ const TypeRegistrationsSchema = { } } } - }) + } }, events: { - 'ldp.container.created': defineServiceEvent({ + 'ldp.container.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, options, webId } = ctx.params; @@ -307,7 +307,7 @@ const TypeRegistrationsSchema = { ); } } - }) + } }, hooks: { after: { diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index d5eeb7921..5edb93f4c 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -1,7 +1,7 @@ // @ts-expect-error import path from 'path'; import urlJoin from 'url-join'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import getRoute from './getRoute.ts'; const SparqlEndpointService = { @@ -24,7 +24,7 @@ const SparqlEndpointService = { } }, actions: { - query: defineAction({ + query: { async handler(ctx) { // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. const query = ctx.params.query || ctx.meta.rawBody; @@ -58,10 +58,10 @@ const SparqlEndpointService = { return response; } - }) + } }, events: { - 'auth.registered': defineServiceEvent({ + 'auth.registered': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; @@ -74,7 +74,7 @@ const SparqlEndpointService = { }); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index 4ebca7fce..e58426e5d 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { createFragmentURL, arrayOf } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; import { Errors } from 'moleculer'; @@ -50,7 +50,7 @@ const MirrorSchema = { } }, actions: { - mirror: defineAction({ + mirror: { visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -177,7 +177,7 @@ const MirrorSchema = { return remoteRelayActorUri; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index 3bae3fbda..2af773908 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { uri: { @@ -42,6 +42,6 @@ const Schema = defineAction({ return results.length; } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts index b5f81a598..2aa4f5d5e 100644 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts +++ b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { dataset: { @@ -42,6 +42,6 @@ const Schema = defineAction({ ); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index f83c22781..82b32ca28 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { webId: { @@ -30,6 +30,6 @@ const Schema = defineAction({ } }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index c2fbd8605..a3e0f9cca 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message @@ -55,6 +55,6 @@ const Schema = defineAction({ }); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 1a236dcf0..4cef107f1 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,8 +1,8 @@ import urlJoin from 'url-join'; import { MIME_TYPES, negotiateType } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { query: { @@ -83,6 +83,6 @@ const Schema = defineAction({ throw new Error('SPARQL Verb not supported'); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts index 4e9ab68f4..9da86992b 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message @@ -48,6 +48,6 @@ const Schema = defineAction({ dataset }); } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index 949b79497..c899fd8ec 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -const Schema = defineAction({ +const Schema = { visibility: 'public', params: { query: { @@ -45,6 +45,6 @@ const Schema = defineAction({ }); } } -}); +} satisfies ActionSchema; export default Schema; diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 9b9ce94e8..03c121554 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -4,7 +4,7 @@ import path from 'path'; import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'stri... Remove this comment to see the full error message import format from 'string-template'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -24,7 +24,7 @@ const DatasetService = { }; }, actions: { - backup: defineAction({ + backup: { async handler(ctx) { const { dataset } = ctx.params; @@ -38,9 +38,9 @@ const DatasetService = { const { taskId } = await response.json(); await this.actions.waitForTaskCompletion({ taskId }, { parentCtx: ctx }); } - }), + }, - create: defineAction({ + create: { async handler(ctx) { const { dataset, secure } = ctx.params; if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); @@ -70,9 +70,9 @@ const DatasetService = { } } } - }), + }, - exist: defineAction({ + exist: { async handler(ctx) { const { dataset } = ctx.params; const response = await fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { @@ -80,9 +80,9 @@ const DatasetService = { }); return response.status === 200; } - }), + }, - list: defineAction({ + list: { async handler() { const response = await fetch(urlJoin(this.settings.url, '$/datasets'), { headers: this.headers @@ -94,9 +94,9 @@ const DatasetService = { } return []; } - }), + }, - isSecure: defineAction({ + isSecure: { async handler(ctx) { const { dataset } = ctx.params; // Check if http://semapps.org/webacl graph exists @@ -106,9 +106,9 @@ const DatasetService = { webId: 'system' }); } - }), + }, - waitForCreation: defineAction({ + waitForCreation: { async handler(ctx) { const { dataset } = ctx.params; let datasetExist; @@ -117,9 +117,9 @@ const DatasetService = { datasetExist = await this.actions.exist({ dataset }, { parentCtx: ctx }); } while (!datasetExist); } - }), + }, - waitForTaskCompletion: defineAction({ + waitForTaskCompletion: { async handler(ctx) { const { taskId } = ctx.params; let task; @@ -137,9 +137,9 @@ const DatasetService = { } } while (!task || !task.finished); } - }), + }, - delete: defineAction({ + delete: { params: { dataset: { type: 'string' }, iKnowWhatImDoing: { type: 'boolean' } @@ -180,7 +180,7 @@ const DatasetService = { ]); } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index e2bd27de4..cb3225010 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -5,7 +5,7 @@ import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; import { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } from '@semapps/ldp'; import { parseHeader } from '@semapps/middlewares'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const { quad, namedNode, literal, blankNode } = DataFactory; import { Errors } from 'moleculer'; @@ -182,7 +182,7 @@ const VoidSchema = { }); }, actions: { - getRemote: defineAction({ + getRemote: { visibility: 'public', params: { serverUrl: { type: 'string', optional: false } @@ -205,9 +205,9 @@ const VoidSchema = { this.logger.warn(`Silently ignored error when fetching void endpoint: ${e.message}`); } } - }), + }, - get: defineAction({ + get: { visibility: 'public', params: { accept: { type: 'string', optional: true } @@ -362,9 +362,9 @@ const VoidSchema = { return await this.formatOutput(ctx, graph, url, accept === MIME_TYPES.JSON); } - }), + }, - api_get: defineAction({ + api_get: { handler: async function api(ctx) { // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. let { accept } = ctx.meta.headers; @@ -376,7 +376,7 @@ const VoidSchema = { accept: accept }); } - }) + } }, methods: { async getContainers(ctx) { diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index 2a8ce4276..c69f1a5cb 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const AuthorizerBotSchema = { name: 'authorizer-bot' as const, @@ -31,7 +31,7 @@ const AuthorizerBotSchema = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; @@ -63,9 +63,9 @@ const AuthorizerBotSchema = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; @@ -123,7 +123,7 @@ const AuthorizerBotSchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index 70884e8ff..c9df943e9 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -1,5 +1,5 @@ import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { hasType } from '../utils.ts'; const GroupsManagerSchema = { @@ -18,7 +18,7 @@ const GroupsManagerSchema = { } }, actions: { - refreshAll: defineAction({ + refreshAll: { async handler(ctx) { const usersContainer = await ctx.call('ldp.container.get', { containerUri: this.settings.usersContainer, @@ -47,7 +47,7 @@ const GroupsManagerSchema = { } } } - }) + } }, methods: { matchRule(rule, record) { @@ -66,7 +66,7 @@ const GroupsManagerSchema = { } }, events: { - 'ldp.resource.created': defineServiceEvent({ + 'ldp.resource.created': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; @@ -87,9 +87,9 @@ const GroupsManagerSchema = { } } } - }), + }, - 'ldp.resource.updated': defineServiceEvent({ + 'ldp.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; @@ -118,9 +118,9 @@ const GroupsManagerSchema = { } } } - }), + }, - 'ldp.resource.deleted': defineServiceEvent({ + 'ldp.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; @@ -138,7 +138,7 @@ const GroupsManagerSchema = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts index 47d619917..0948f84cf 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.ts +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; // A acl:Write permission implicitly gives acl:Read and acl:Append permissions const modeMapping = { @@ -15,7 +15,7 @@ const WebaclAuthorizerSchema = { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, actions: { - hasPermission: defineAction({ + hasPermission: { async handler(ctx) { const { uri, type, mode, webId } = ctx.params; @@ -35,7 +35,7 @@ const WebaclAuthorizerSchema = { return undefined; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index a9226b1ff..9b0b16105 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -1,9 +1,9 @@ -import { ServiceSchema, defineAction, defineServiceEvent } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const WebaclCacheSchema = { name: 'webacl.cache' as const, actions: { - invalidateResourceRights: defineAction({ + invalidateResourceRights: { // Invalidate the WebACL cache of the given resource // If specificUriOnly is false, it will invalidate all resources starting with the given URI async handler(ctx) { @@ -13,9 +13,9 @@ const WebaclCacheSchema = { await this.broker.cacher.clean(`webacl.resource.hasRights:${uri}${specificUriOnly ? '|**' : '**'}`); } } - }), + }, - invalidateAllUserRights: defineAction({ + invalidateAllUserRights: { // Invalidate all WebACL cache for the given user async handler(ctx) { if (this.broker.cacher) { @@ -24,9 +24,9 @@ const WebaclCacheSchema = { await this.broker.cacher.clean(`webacl.resource.hasRights:**${uri}**`); } } - }), + }, - invalidateAllUserRightsOnPod: defineAction({ + invalidateAllUserRightsOnPod: { async handler(ctx) { if (this.broker.cacher) { const { webId, podOwner } = ctx.params; @@ -36,9 +36,9 @@ const WebaclCacheSchema = { await this.broker.cacher.clean(`webacl.resource.hasRights:${podOwner}/**|**|${webId}`); } } - }), + }, - generateForUser: defineAction({ + generateForUser: { async handler(ctx) { const { webId } = ctx.params; this.logger.info(`Generating cache for user ${webId}`); @@ -55,9 +55,9 @@ const WebaclCacheSchema = { } } } - }), + }, - generateForAll: defineAction({ + generateForAll: { async handler(ctx) { const { usersContainer } = ctx.params; const users = await ctx.call('ldp.container.getUris', { containerUri: usersContainer }); @@ -65,10 +65,10 @@ const WebaclCacheSchema = { await this.actions.generateForUser({ webId }, { parentCtx: ctx }); } } - }) + } }, events: { - 'webacl.resource.updated': defineServiceEvent({ + 'webacl.resource.updated': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, defaultRightsUpdated } = ctx.params; @@ -78,27 +78,27 @@ const WebaclCacheSchema = { { parentCtx: ctx } ); } - }), + }, - 'webacl.resource.deleted': defineServiceEvent({ + 'webacl.resource.deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); } - }), + }, - 'webacl.resource.user-deleted': defineServiceEvent({ + 'webacl.resource.user-deleted': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); } - }), + }, - 'webacl.group.member-added': defineServiceEvent({ + 'webacl.group.member-added': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; @@ -107,9 +107,9 @@ const WebaclCacheSchema = { // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); } - }), + }, - 'webacl.group.member-removed': defineServiceEvent({ + 'webacl.group.member-removed': { async handler(ctx) { // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; @@ -118,7 +118,7 @@ const WebaclCacheSchema = { // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 28b5b6afa..9e93fe351 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -1,6 +1,6 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -18,7 +18,7 @@ export const api = async function api(this: any, ctx: any) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -66,4 +66,4 @@ export const action = defineAction({ ctx.emit('webacl.group.member-added', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 3df143463..226494749 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -2,7 +2,7 @@ import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -25,7 +25,7 @@ export const api = async function api(this: any, ctx: any) { ctx.meta.$statusCode = 201; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupUri: { type: 'string', optional: true }, @@ -88,4 +88,4 @@ export const action = defineAction({ return { groupUri }; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index 517231305..a11b7b09b 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; import { Errors } from 'moleculer'; @@ -16,7 +16,7 @@ export const api = async function api(this: any, ctx: any) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -61,4 +61,4 @@ export const action = defineAction({ await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index 9d8651370..8455f130e 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -1,12 +1,12 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -31,4 +31,4 @@ export const action = defineAction({ webId: 'system' }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index 24808231c..fca21dacb 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,11 +1,11 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; export const api = async function api(this: any, ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; return await ctx.call('webacl.group.getGroups', {}); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { webId: { type: 'string', optional: true } @@ -56,4 +56,4 @@ export const action = defineAction({ return groups.map((m: any) => m.g.value); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 65a03b6a7..3c956e536 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -13,7 +13,7 @@ export const api = async function api(this: any, ctx: any) { }); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -58,4 +58,4 @@ export const action = defineAction({ return members.map((m: any) => m.m.value); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.ts b/src/middleware/packages/webacl/services/group/actions/getUri.ts index e54b45729..2294ba30c 100644 --- a/src/middleware/packages/webacl/services/group/actions/getUri.ts +++ b/src/middleware/packages/webacl/services/group/actions/getUri.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: false, trim: true } @@ -10,4 +10,4 @@ export const action = defineAction({ const { groupSlug } = ctx.params; return urlJoin(this.settings.baseUrl, '_groups', groupSlug); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index b3324521a..791752219 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -1,12 +1,12 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -52,4 +52,4 @@ export const action = defineAction({ webId: 'system' }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 862d69c67..73e77172f 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -19,7 +19,7 @@ export const api = async function api(this: any, ctx: any) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { groupSlug: { type: 'string', optional: true, min: 1, trim: true }, @@ -66,4 +66,4 @@ export const action = defineAction({ ctx.emit('webacl.group.member-removed', { groupUri, memberUri }, { meta: { webId: null, dataset: null } }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index c7ee3d643..c89554e32 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, @@ -37,7 +37,7 @@ export const api = async function api(this: any, ctx: any) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -172,4 +172,4 @@ export const action = defineAction({ ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); return returnValues; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index 3c9362755..1e097f88b 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -35,4 +35,4 @@ export const action = defineAction({ interval = setInterval(checkRights, 1000); }); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index b70360726..a63783a8d 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string', optional: false } @@ -29,4 +29,4 @@ export const action = defineAction({ { meta: { webId: null, dataset: null } } ); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index d8ae2f71f..1904e9b9d 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { webId: { type: 'string', optional: false } @@ -25,4 +25,4 @@ export const action = defineAction({ { meta: { webId: null, dataset: null } } ); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index adb2f4aab..dbbb10573 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -1,7 +1,7 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri } from '../../../utils.ts'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { uri: { type: 'string', optional: false } @@ -13,4 +13,4 @@ export const action = defineAction({ rel: 'acl' }; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 86e7ed7dd..172a9b071 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -3,7 +3,7 @@ import { DataFactory, Writer } from 'n3'; import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getAuthorizationNode, findParentContainers, @@ -206,7 +206,7 @@ export const api = async function api(this: any, ctx: any) { }); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -230,4 +230,4 @@ export const action = defineAction({ return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index afc4d25ec..242bed6a0 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -1,7 +1,7 @@ import { arrayOf } from '@semapps/ldp'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' } @@ -28,4 +28,4 @@ export const action = defineAction({ // Deduplicate (users might be in multiple groups). return [...new Set(usersWithReadRights)]; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index c40959315..dec929e4b 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getAuthorizationNode, checkAgentPresent, @@ -96,7 +96,7 @@ export const api = async function api(this: any, ctx: any) { }); }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -132,4 +132,4 @@ export const action = defineAction({ await this.checkResourceOrContainerExists(ctx, resourceUri); return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts index ef94bdcf9..a63713a35 100644 --- a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts +++ b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts @@ -1,6 +1,6 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' } @@ -14,4 +14,4 @@ export const action = defineAction({ }); return read; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index 0f49c7c64..efe7165e3 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; -export const action = defineAction({ +export const action = { visibility: 'public', async handler(ctx) { const { webId } = ctx.params; @@ -59,4 +59,4 @@ export const action = defineAction({ } } } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index e01f569b6..4ce67c00c 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -1,11 +1,11 @@ -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -export const action = defineAction({ +export const action = { visibility: 'public', params: { // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message @@ -73,4 +73,4 @@ export const action = defineAction({ { meta: { webId: null, dataset: null } } ); } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 9502f37d5..226a3d21e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { defineAction } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, @@ -36,7 +36,7 @@ export const api = async function api(this: any, ctx: any) { ctx.meta.$statusCode = 204; }; -export const action = defineAction({ +export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -158,4 +158,4 @@ export const action = defineAction({ ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); return returnValues; } -}); +} satisfies ActionSchema; diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts index 54a3df0cc..9d9f57044 100644 --- a/src/middleware/packages/webfinger/service.ts +++ b/src/middleware/packages/webfinger/service.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; const WebfingerService = { name: 'webfinger' as const, @@ -26,7 +26,7 @@ const WebfingerService = { }); }, actions: { - get: defineAction({ + get: { async handler(ctx) { const { resource } = ctx.params; @@ -54,9 +54,9 @@ const WebfingerService = { // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 404; } - }), + }, - getRemoteUri: defineAction({ + getRemoteUri: { // TODO add cache if response.ok async handler(ctx) { const { account } = ctx.params; @@ -75,7 +75,7 @@ const WebfingerService = { } } } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index e0f627b74..ab350d725 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -1,7 +1,7 @@ import path from 'path'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { Errors } from 'moleculer'; @@ -31,7 +31,7 @@ const WebhooksService = { } }, actions: { - process: defineAction({ + process: { async handler(ctx) { const { hash, ...data } = ctx.params; let webhook; @@ -49,9 +49,9 @@ const WebhooksService = { return await this.actions[webhook.action]({ data, user: webhook.user }, { parentCtx: ctx }); } } - }), + }, - generate: defineAction({ + generate: { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const userUri = ctx.meta.webId || ctx.params.userUri; @@ -72,9 +72,9 @@ const WebhooksService = { return webhook['@id']; } - }), + }, - getApiRoutes: defineAction({ + getApiRoutes: { handler(basePath) { return [ // Unsecured routes @@ -103,7 +103,7 @@ const WebhooksService = { } ]; } - }) + } }, queues: { webhooks: { diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 39e727936..6931b1160 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { foaf, schema } from '@semapps/ontologies'; import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const WebIdService = { @@ -31,7 +31,7 @@ const WebIdService = { await this.broker.call('ontologies.register', schema); }, actions: { - get: defineAction({ + get: { handler(ctx) { // Always get WebID as system and on the correct dataset, since they are public return ctx.call( @@ -47,9 +47,9 @@ const WebIdService = { } ); } - }), + }, - createWebId: defineAction({ + createWebId: { /** * This should only be called after the user has been authenticated */ @@ -109,7 +109,7 @@ const WebIdService = { return webId; } - }) + } } } satisfies ServiceSchema; diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index b35cc0dfa..49f3ae49c 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -1,4 +1,4 @@ -import { ServiceBroker, ServiceSchema, defineAction } from 'moleculer'; +import { ServiceBroker, ServiceSchema } from 'moleculer'; import fs from 'fs'; import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; @@ -110,7 +110,7 @@ const initialize = async () => { permissions }, actions: { - getHeaderLinks: defineAction({ + getHeaderLinks: { handler() { return [ { @@ -119,7 +119,7 @@ const initialize = async () => { } ]; } - }) + } } }); From 8f47e7bc50fc5680fd436b1cd67bbbe3f872c8c7 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:23:13 +0300 Subject: [PATCH 053/165] explicit json imports `with { type: 'json' }` --- .../ontologies/ontologies/core/index.ts | 30 +++++++++---------- .../ontologies/ontologies/custom/index.ts | 18 +++++------ .../ontologies/ontologies/solid/index.ts | 12 ++++---- .../tests/ontologies/ontologies.test.ts | 8 ++--- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/middleware/packages/ontologies/ontologies/core/index.ts b/src/middleware/packages/ontologies/ontologies/core/index.ts index c0433105a..7e35e7a4f 100644 --- a/src/middleware/packages/ontologies/ontologies/core/index.ts +++ b/src/middleware/packages/ontologies/ontologies/core/index.ts @@ -1,16 +1,16 @@ -import acl from './acl.json'; -import as from './as.json'; -import cred from './cred.json'; -import dc from './dc.json'; -import did from './did.json'; -import foaf from './foaf.json'; -import ldp from './ldp.json'; -import rdf from './rdf.json'; -import rdfs from './rdfs.json'; -import sec from './sec.json'; -import semapps from './semapps.json'; -import skos from './skos.json'; -import vcard from './vcard.json'; -import void from './void.json'; -import xsd from './xsd.json'; +import acl from './acl.json' with { type: 'json' }; +import as from './as.json' with { type: 'json' }; +import cred from './cred.json' with { type: 'json' }; +import dc from './dc.json' with { type: 'json' }; +import did from './did.json' with { type: 'json' }; +import foaf from './foaf.json' with { type: 'json' }; +import ldp from './ldp.json' with { type: 'json' }; +import rdf from './rdf.json' with { type: 'json' }; +import rdfs from './rdfs.json' with { type: 'json' }; +import sec from './sec.json' with { type: 'json' }; +import semapps from './semapps.json' with { type: 'json' }; +import skos from './skos.json' with { type: 'json' }; +import vcard from './vcard.json' with { type: 'json' }; +import void from './void.json' with { type: 'json' }; +import xsd from './xsd.json' with { type: 'json' }; export { acl, as, cred, dc, did, foaf, ldp, rdf, rdfs, sec, semapps, skos, vcard, void, xsd }; diff --git a/src/middleware/packages/ontologies/ontologies/custom/index.ts b/src/middleware/packages/ontologies/ontologies/custom/index.ts index 294738898..04956286f 100644 --- a/src/middleware/packages/ontologies/ontologies/custom/index.ts +++ b/src/middleware/packages/ontologies/ontologies/custom/index.ts @@ -1,10 +1,10 @@ -import mp from './mp.json'; -import oasis from './oasis.json'; -import og from './og.json'; -import pair from './pair.json'; -import petr from './petr.json'; -import schema from './schema.json'; -import skos from './skos.json'; -import syreen from './syreen.json'; -import tutor from './tutor.json'; +import mp from './mp.json' with { type: 'json' }; +import oasis from './oasis.json' with { type: 'json' }; +import og from './og.json' with { type: 'json' }; +import pair from './pair.json' with { type: 'json' }; +import petr from './petr.json' with { type: 'json' }; +import schema from './schema.json' with { type: 'json' }; +import skos from './skos.json' with { type: 'json' }; +import syreen from './syreen.json' with { type: 'json' }; +import tutor from './tutor.json' with { type: 'json' }; export { mp, oasis, og, pair, petr, schema, skos, syreen, tutor }; diff --git a/src/middleware/packages/ontologies/ontologies/solid/index.ts b/src/middleware/packages/ontologies/ontologies/solid/index.ts index 9105def70..e80e173ba 100644 --- a/src/middleware/packages/ontologies/ontologies/solid/index.ts +++ b/src/middleware/packages/ontologies/ontologies/solid/index.ts @@ -1,7 +1,7 @@ -import apods from './apods.json'; -import interop from './interop.json'; -import notify from './notify.json'; -import oidc from './oidc.json'; -import pim from './pim.json'; -import solid from './solid.json'; +import apods from './apods.json' with { type: 'json' }; +import interop from './interop.json' with { type: 'json' }; +import notify from './notify.json' with { type: 'json' }; +import oidc from './oidc.json' with { type: 'json' }; +import pim from './pim.json' with { type: 'json' }; +import solid from './solid.json' with { type: 'json' }; export { apods, interop, notify, oidc, pim, solid }; diff --git a/src/middleware/tests/ontologies/ontologies.test.ts b/src/middleware/tests/ontologies/ontologies.test.ts index 1920df4c8..7cfd22d79 100644 --- a/src/middleware/tests/ontologies/ontologies.test.ts +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -2,10 +2,10 @@ import fetch from 'node-fetch'; import urlJoin from 'url-join'; import initialize from './initialize.ts'; import CONFIG from '../config.ts'; -import ont1 from './ontologies/ont1.json'; -import ont2 from './ontologies/ont2.json'; -import ont3 from './ontologies/ont3.json'; -import ont4 from './ontologies/ont4.json'; +import ont1 from './ontologies/ont1.json' with { type: 'json' }; +import ont2 from './ontologies/ont2.json' with { type: 'json' }; +import ont3 from './ontologies/ont3.json' with { type: 'json' }; +import ont4 from './ontologies/ont4.json' with { type: 'json' }; jest.setTimeout(10000); const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); From a77b04e6b428f0cc9e35dc665124fb5e81a05e8a Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:25:48 +0300 Subject: [PATCH 054/165] [ts-migrate] eslint fix --- src/middleware/tests/jest.setup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/tests/jest.setup.ts b/src/middleware/tests/jest.setup.ts index 03e82cf16..895bf159c 100644 --- a/src/middleware/tests/jest.setup.ts +++ b/src/middleware/tests/jest.setup.ts @@ -1,5 +1,5 @@ expect.extend({ - //An assertion to check if a value is undefined or an empty array + // An assertion to check if a value is undefined or an empty array toBeUndefinedOrEmptyArray(received) { const pass = received === undefined || (Array.isArray(received) && received.length === 0); if (pass) { From adebc8c5bf826c94c117bbdf07496ae6328c4dac Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:02:22 +0300 Subject: [PATCH 055/165] add tsconfigs --- .../packages/activitypub/tsconfig.json | 10 +++++++ src/middleware/packages/auth/tsconfig.json | 10 +++++++ src/middleware/packages/backup/tsconfig.json | 10 +++++++ src/middleware/packages/core/tsconfig.json | 10 +++++++ src/middleware/packages/crypto/tsconfig.json | 10 +++++++ .../packages/importer/tsconfig.json | 10 +++++++ .../packages/inference/tsconfig.json | 10 +++++++ src/middleware/packages/jsonld/tsconfig.json | 10 +++++++ src/middleware/packages/ldp/tsconfig.json | 10 +++++++ .../packages/middlewares/tsconfig.json | 10 +++++++ .../packages/migration/tsconfig.json | 10 +++++++ .../packages/mime-types/tsconfig.json | 10 +++++++ .../packages/nodeinfo/tsconfig.json | 10 +++++++ .../packages/notifications/tsconfig.json | 10 +++++++ .../packages/ontologies/tsconfig.json | 10 +++++++ src/middleware/packages/solid/tsconfig.json | 10 +++++++ .../packages/sparql-endpoint/tsconfig.json | 10 +++++++ src/middleware/packages/sync/tsconfig.json | 10 +++++++ .../packages/triplestore/tsconfig.json | 10 +++++++ src/middleware/packages/void/tsconfig.json | 10 +++++++ src/middleware/packages/webacl/tsconfig.json | 10 +++++++ .../packages/webfinger/tsconfig.json | 10 +++++++ .../packages/webhooks/tsconfig.json | 10 +++++++ src/middleware/packages/webid/tsconfig.json | 10 +++++++ src/middleware/tests/babel.config.js | 4 +++ src/middleware/tests/run-typecheck.sh | 28 +++++++++++++++++++ src/middleware/tests/test-types.sh | 27 ++++++++++++++++++ src/middleware/tests/tsconfig.json | 8 ++++++ 28 files changed, 307 insertions(+) create mode 100644 src/middleware/packages/activitypub/tsconfig.json create mode 100644 src/middleware/packages/auth/tsconfig.json create mode 100644 src/middleware/packages/backup/tsconfig.json create mode 100644 src/middleware/packages/core/tsconfig.json create mode 100644 src/middleware/packages/crypto/tsconfig.json create mode 100644 src/middleware/packages/importer/tsconfig.json create mode 100644 src/middleware/packages/inference/tsconfig.json create mode 100644 src/middleware/packages/jsonld/tsconfig.json create mode 100644 src/middleware/packages/ldp/tsconfig.json create mode 100644 src/middleware/packages/middlewares/tsconfig.json create mode 100644 src/middleware/packages/migration/tsconfig.json create mode 100644 src/middleware/packages/mime-types/tsconfig.json create mode 100644 src/middleware/packages/nodeinfo/tsconfig.json create mode 100644 src/middleware/packages/notifications/tsconfig.json create mode 100644 src/middleware/packages/ontologies/tsconfig.json create mode 100644 src/middleware/packages/solid/tsconfig.json create mode 100644 src/middleware/packages/sparql-endpoint/tsconfig.json create mode 100644 src/middleware/packages/sync/tsconfig.json create mode 100644 src/middleware/packages/triplestore/tsconfig.json create mode 100644 src/middleware/packages/void/tsconfig.json create mode 100644 src/middleware/packages/webacl/tsconfig.json create mode 100644 src/middleware/packages/webfinger/tsconfig.json create mode 100644 src/middleware/packages/webhooks/tsconfig.json create mode 100644 src/middleware/packages/webid/tsconfig.json create mode 100644 src/middleware/tests/babel.config.js create mode 100644 src/middleware/tests/run-typecheck.sh create mode 100755 src/middleware/tests/test-types.sh create mode 100644 src/middleware/tests/tsconfig.json diff --git a/src/middleware/packages/activitypub/tsconfig.json b/src/middleware/packages/activitypub/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/activitypub/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/auth/tsconfig.json b/src/middleware/packages/auth/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/auth/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/backup/tsconfig.json b/src/middleware/packages/backup/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/backup/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/core/tsconfig.json b/src/middleware/packages/core/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/core/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/crypto/tsconfig.json b/src/middleware/packages/crypto/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/crypto/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/importer/tsconfig.json b/src/middleware/packages/importer/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/importer/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/inference/tsconfig.json b/src/middleware/packages/inference/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/inference/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/jsonld/tsconfig.json b/src/middleware/packages/jsonld/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/jsonld/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/ldp/tsconfig.json b/src/middleware/packages/ldp/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/ldp/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/middlewares/tsconfig.json b/src/middleware/packages/middlewares/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/middlewares/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/migration/tsconfig.json b/src/middleware/packages/migration/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/migration/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/mime-types/tsconfig.json b/src/middleware/packages/mime-types/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/mime-types/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/nodeinfo/tsconfig.json b/src/middleware/packages/nodeinfo/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/nodeinfo/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/notifications/tsconfig.json b/src/middleware/packages/notifications/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/notifications/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/ontologies/tsconfig.json b/src/middleware/packages/ontologies/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/ontologies/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/solid/tsconfig.json b/src/middleware/packages/solid/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/solid/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/sparql-endpoint/tsconfig.json b/src/middleware/packages/sparql-endpoint/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/sparql-endpoint/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/sync/tsconfig.json b/src/middleware/packages/sync/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/sync/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/triplestore/tsconfig.json b/src/middleware/packages/triplestore/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/triplestore/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/void/tsconfig.json b/src/middleware/packages/void/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/void/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/webacl/tsconfig.json b/src/middleware/packages/webacl/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/webacl/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/webfinger/tsconfig.json b/src/middleware/packages/webfinger/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/webfinger/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/webhooks/tsconfig.json b/src/middleware/packages/webhooks/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/webhooks/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/packages/webid/tsconfig.json b/src/middleware/packages/webid/tsconfig.json new file mode 100644 index 000000000..7a8c523f2 --- /dev/null +++ b/src/middleware/packages/webid/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "./" + }, + "include": ["*"] +} diff --git a/src/middleware/tests/babel.config.js b/src/middleware/tests/babel.config.js new file mode 100644 index 000000000..968efbe25 --- /dev/null +++ b/src/middleware/tests/babel.config.js @@ -0,0 +1,4 @@ +export default { + presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'], + plugins: ['@babel/transform-runtime', 'babel-plugin-transform-import-meta'] +}; diff --git a/src/middleware/tests/run-typecheck.sh b/src/middleware/tests/run-typecheck.sh new file mode 100644 index 000000000..68f99c39c --- /dev/null +++ b/src/middleware/tests/run-typecheck.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Script to typecheck frontend code. +# Called by pre-push hook. + +ROOT_DIR=$(git rev-parse --show-toplevel) + +echo "=== Running typecheck for frontend ===" + +cd "$ROOT_DIR"/src/frontend +yarn typecheck > /dev/null +if [ $? -ne 0 ]; then + echo "⛔ Typecheck failed! To see the errors, run \`yarn typecheck\` in the frontend directory." + echo " You can skip pre-push checks by setting \$SKIP_PREPUSH_CHECKS=true" + exit 1 +fi + +echo "=== Running typecheck for middleware ===" + +cd "$ROOT_DIR"/src/middleware +yarn typecheck > /dev/null +if [ $? -ne 0 ]; then + echo "⛔ Typecheck failed! To see the errors, run \`yarn typecheck\` in the middleware directory." + echo " You can skip pre-push checks by setting \$SKIP_PREPUSH_CHECKS=true" + exit 1 +fi + +echo "✅ Typecheck successful!" \ No newline at end of file diff --git a/src/middleware/tests/test-types.sh b/src/middleware/tests/test-types.sh new file mode 100755 index 000000000..aa48de746 --- /dev/null +++ b/src/middleware/tests/test-types.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Type checking test for tests in `types/*.test-d.ts`. +# This script runs tsc --noEmit and checks if there are any type errors +# in the `*.test-d.ts` files which should have none if types are correct. + +echo "Skipping type check, this is WIP and will change soon." +exit 0 + +echo "🔍 Running TypeScript type checking tests..." +echo + +# Run TypeScript compiler and capture output +tsc_output=$(tsc --noEmit 2>&1) + +# Check if moleculer.test-d.ts appears in the output +if echo "$tsc_output" | grep -q ".test-d.ts"; then + echo "❌ Type test failed. Found type errors in:" + echo + echo "$tsc_output" | grep ".test-d.ts" + echo + exit 1 +else + echo "✅ Type test PASSED" + echo + exit 0 +fi diff --git a/src/middleware/tests/tsconfig.json b/src/middleware/tests/tsconfig.json new file mode 100644 index 000000000..e0e057ee9 --- /dev/null +++ b/src/middleware/tests/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["jest"], + "isolatedModules": false + }, + "include": ["**/*.js", "**/*.ts"] +} From ebd0744126a0b4f338bc023bfca23aaf6fbf7da2 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:04:47 +0300 Subject: [PATCH 056/165] add type "module" --- src/middleware/package.json | 3 ++- src/middleware/packages/activitypub/package.json | 3 ++- src/middleware/packages/auth/package.json | 3 ++- src/middleware/packages/backup/package.json | 3 ++- src/middleware/packages/core/package.json | 3 ++- src/middleware/packages/crypto/package.json | 2 +- src/middleware/packages/importer/package.json | 3 ++- src/middleware/packages/inference/package.json | 3 ++- src/middleware/packages/jsonld/package.json | 3 ++- src/middleware/packages/ldp/package.json | 3 ++- src/middleware/packages/middlewares/package.json | 3 ++- src/middleware/packages/migration/package.json | 3 ++- src/middleware/packages/mime-types/package.json | 3 ++- src/middleware/packages/nodeinfo/package.json | 3 ++- src/middleware/packages/notifications/package.json | 3 ++- src/middleware/packages/ontologies/package.json | 3 ++- src/middleware/packages/solid/package.json | 3 ++- src/middleware/packages/sparql-endpoint/package.json | 3 ++- src/middleware/packages/sync/package.json | 3 ++- src/middleware/packages/triplestore/package.json | 3 ++- src/middleware/packages/void/package.json | 3 ++- src/middleware/packages/webacl/package.json | 3 ++- src/middleware/packages/webfinger/package.json | 3 ++- src/middleware/packages/webhooks/package.json | 3 ++- src/middleware/packages/webid/package.json | 3 ++- src/middleware/tests/package.json | 3 ++- 26 files changed, 51 insertions(+), 26 deletions(-) diff --git a/src/middleware/package.json b/src/middleware/package.json index 9b7efd8ac..03c5be33e 100644 --- a/src/middleware/package.json +++ b/src/middleware/package.json @@ -41,5 +41,6 @@ "node": ">=22.12.0" }, "version": "0.7.0", - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", + "type": "module" } diff --git a/src/middleware/packages/activitypub/package.json b/src/middleware/packages/activitypub/package.json index 4461e8c50..749f0b377 100644 --- a/src/middleware/packages/activitypub/package.json +++ b/src/middleware/packages/activitypub/package.json @@ -27,5 +27,6 @@ "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/auth/package.json b/src/middleware/packages/auth/package.json index 5bcb456b5..fc8be08a4 100644 --- a/src/middleware/packages/auth/package.json +++ b/src/middleware/packages/auth/package.json @@ -29,5 +29,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/backup/package.json b/src/middleware/packages/backup/package.json index 5b29fc228..3307c354e 100644 --- a/src/middleware/packages/backup/package.json +++ b/src/middleware/packages/backup/package.json @@ -16,5 +16,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/core/package.json b/src/middleware/packages/core/package.json index 4914d1eb3..7d8bf738e 100644 --- a/src/middleware/packages/core/package.json +++ b/src/middleware/packages/core/package.json @@ -25,5 +25,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/crypto/package.json b/src/middleware/packages/crypto/package.json index c03fbd26b..02e454fda 100644 --- a/src/middleware/packages/crypto/package.json +++ b/src/middleware/packages/crypto/package.json @@ -4,7 +4,7 @@ "description": "Key and Signature Services for Semapps", "license": "Apache-2.0", "author": "Virtual Assembly", - "type": "commonjs", + "type": "module", "dependencies": { "@digitalbazaar/data-integrity": "^2.5.0", "@digitalbazaar/ed25519-multikey": "^1.3.0", diff --git a/src/middleware/packages/importer/package.json b/src/middleware/packages/importer/package.json index 2e972a62c..0cd17738b 100644 --- a/src/middleware/packages/importer/package.json +++ b/src/middleware/packages/importer/package.json @@ -20,5 +20,6 @@ "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/inference/package.json b/src/middleware/packages/inference/package.json index cf38c5925..f5ea14e63 100644 --- a/src/middleware/packages/inference/package.json +++ b/src/middleware/packages/inference/package.json @@ -15,5 +15,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index 6befbda5b..e0fcffe03 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -23,5 +23,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index 323a912e4..460376fc8 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -35,5 +35,6 @@ "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/middlewares/package.json b/src/middleware/packages/middlewares/package.json index 7387361ef..9d5e439bb 100644 --- a/src/middleware/packages/middlewares/package.json +++ b/src/middleware/packages/middlewares/package.json @@ -15,5 +15,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/migration/package.json b/src/middleware/packages/migration/package.json index d45956cdd..7af53a46e 100644 --- a/src/middleware/packages/migration/package.json +++ b/src/middleware/packages/migration/package.json @@ -13,5 +13,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/mime-types/package.json b/src/middleware/packages/mime-types/package.json index 396505f20..8d1568a45 100644 --- a/src/middleware/packages/mime-types/package.json +++ b/src/middleware/packages/mime-types/package.json @@ -14,5 +14,6 @@ "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/nodeinfo/package.json b/src/middleware/packages/nodeinfo/package.json index 29ceb9720..a1c840c8e 100644 --- a/src/middleware/packages/nodeinfo/package.json +++ b/src/middleware/packages/nodeinfo/package.json @@ -12,5 +12,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/notifications/package.json b/src/middleware/packages/notifications/package.json index a4371c65f..ca5a4ebf4 100644 --- a/src/middleware/packages/notifications/package.json +++ b/src/middleware/packages/notifications/package.json @@ -19,5 +19,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/ontologies/package.json b/src/middleware/packages/ontologies/package.json index b346b5c23..f5d2a097e 100644 --- a/src/middleware/packages/ontologies/package.json +++ b/src/middleware/packages/ontologies/package.json @@ -14,5 +14,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/solid/package.json b/src/middleware/packages/solid/package.json index 66b87ae2e..0f0cf081b 100644 --- a/src/middleware/packages/solid/package.json +++ b/src/middleware/packages/solid/package.json @@ -28,5 +28,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/sparql-endpoint/package.json b/src/middleware/packages/sparql-endpoint/package.json index b3149c47f..fc6d79c86 100644 --- a/src/middleware/packages/sparql-endpoint/package.json +++ b/src/middleware/packages/sparql-endpoint/package.json @@ -19,5 +19,6 @@ "gitHead": "684ba335d0759920f4134f550431b3c3af8e2599", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/sync/package.json b/src/middleware/packages/sync/package.json index 0f3f3ca0b..31c66bf9b 100644 --- a/src/middleware/packages/sync/package.json +++ b/src/middleware/packages/sync/package.json @@ -17,5 +17,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 6179f36d6..dacbb72e3 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -23,5 +23,6 @@ "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/void/package.json b/src/middleware/packages/void/package.json index 0f536c0ad..1273beafc 100644 --- a/src/middleware/packages/void/package.json +++ b/src/middleware/packages/void/package.json @@ -19,5 +19,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/webacl/package.json b/src/middleware/packages/webacl/package.json index 8c835c47a..241f60c14 100644 --- a/src/middleware/packages/webacl/package.json +++ b/src/middleware/packages/webacl/package.json @@ -36,5 +36,6 @@ }, "devDependencies": { "@types/url-join": "^4.0.1" - } + }, + "type": "module" } diff --git a/src/middleware/packages/webfinger/package.json b/src/middleware/packages/webfinger/package.json index 0dda12ce0..d3284b0d8 100644 --- a/src/middleware/packages/webfinger/package.json +++ b/src/middleware/packages/webfinger/package.json @@ -13,5 +13,6 @@ }, "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/webhooks/package.json b/src/middleware/packages/webhooks/package.json index 94873fce8..133446391 100644 --- a/src/middleware/packages/webhooks/package.json +++ b/src/middleware/packages/webhooks/package.json @@ -17,5 +17,6 @@ "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/packages/webid/package.json b/src/middleware/packages/webid/package.json index 0dd89b432..9ffc77507 100644 --- a/src/middleware/packages/webid/package.json +++ b/src/middleware/packages/webid/package.json @@ -17,5 +17,6 @@ "gitHead": "f65a5a67d02782b0539d12ed482e8cc4149e5d36", "engines": { "node": ">=14" - } + }, + "type": "module" } diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 7a22501cf..e6dadd8d2 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -43,5 +43,6 @@ "version": "1.1.4", "engines": { "node": ">=22.12.0" - } + }, + "type": "module" } From c0ae582a742c8992f6c83733960a680ef51ee9fe Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:14:03 +0300 Subject: [PATCH 057/165] add sourceType "module" to eslintrc --- src/middleware/.eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/.eslintrc.json b/src/middleware/.eslintrc.json index ad83c1068..f6bf1e295 100644 --- a/src/middleware/.eslintrc.json +++ b/src/middleware/.eslintrc.json @@ -14,7 +14,7 @@ // "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", - "sourceType": "script" // Allows for the use of imports + "sourceType": "module" }, "plugins": [ "jsdoc", From 3b47dfc5dffe4732f0989beb5793df86b7717834 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:16:08 +0300 Subject: [PATCH 058/165] tsconfig allow explicit extensions --- src/middleware/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/middleware/tsconfig.json b/src/middleware/tsconfig.json index 867f567aa..8c56e0c0b 100644 --- a/src/middleware/tsconfig.json +++ b/src/middleware/tsconfig.json @@ -14,7 +14,8 @@ "moduleResolution": "NodeNext", "resolvePackageJsonExports": true, "esModuleInterop": true, - "resolvePackageJsonImports": true + "resolvePackageJsonImports": true, + "allowImportingTsExtensions": true }, "include": ["**/*.js", "**/*.ts"], "exclude": [] From fea5e0be8dc167a9acbe72d9cd5ccd528ee69fb7 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:29:36 +0300 Subject: [PATCH 059/165] activate eslintrc ts parser --- src/middleware/.eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/.eslintrc.json b/src/middleware/.eslintrc.json index f6bf1e295..f3e30262f 100644 --- a/src/middleware/.eslintrc.json +++ b/src/middleware/.eslintrc.json @@ -11,7 +11,7 @@ "plugin:jest/recommended", "prettier" ], - // "parser": "@typescript-eslint/parser", + "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", "sourceType": "module" From dc09c0584f0d46554469eeacdbc48dabca59b360 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:30:57 +0300 Subject: [PATCH 060/165] eslint autofix --- src/middleware/packages/activitypub/index.ts | 1 + src/middleware/packages/activitypub/mixins/bot.ts | 2 +- .../packages/activitypub/services/activity-mapping.ts | 2 +- .../packages/activitypub/services/activitypub/index.ts | 2 +- .../services/activitypub/subservices/activity.ts | 2 +- .../services/activitypub/subservices/actor.ts | 2 +- .../services/activitypub/subservices/api.ts | 2 +- .../activitypub/subservices/collection/actions/get.ts | 5 +++-- .../activitypub/subservices/collection/index.ts | 5 +++-- .../activitypub/subservices/collections-registry.ts | 8 ++++---- .../services/activitypub/subservices/follow.ts | 2 +- .../services/activitypub/subservices/inbox.ts | 5 +++-- .../services/activitypub/subservices/like.ts | 8 ++++---- .../services/activitypub/subservices/object.ts | 5 +++-- .../services/activitypub/subservices/outbox.ts | 2 +- .../services/activitypub/subservices/reply.ts | 8 ++++---- .../services/activitypub/subservices/share.ts | 2 +- .../services/activitypub/subservices/side-effects.ts | 2 +- src/middleware/packages/activitypub/services/relay.ts | 2 +- src/middleware/packages/auth/index.ts | 1 + src/middleware/packages/auth/mixins/auth.sso.ts | 2 +- src/middleware/packages/auth/mixins/auth.ts | 2 +- src/middleware/packages/auth/services/account.ts | 2 +- src/middleware/packages/auth/services/auth.cas.ts | 2 +- src/middleware/packages/auth/services/auth.local.ts | 5 +++-- src/middleware/packages/auth/services/auth.oidc.ts | 6 +++--- src/middleware/packages/backup/index.ts | 5 +++-- src/middleware/packages/core/index.ts | 1 + src/middleware/packages/core/service.ts | 3 +-- src/middleware/packages/crypto/constants.ts | 1 + src/middleware/packages/crypto/keys/index.ts | 1 + src/middleware/packages/crypto/keys/key-container.ts | 2 +- src/middleware/packages/crypto/keys/keys.ts | 2 +- src/middleware/packages/crypto/keys/migration.ts | 2 +- .../packages/crypto/keys/public-key-container.ts | 2 +- .../packages/crypto/signature/http-signatures.ts | 2 +- src/middleware/packages/crypto/signature/index.ts | 1 + src/middleware/packages/crypto/signature/keypair.ts | 2 +- .../VcCapabilityPresentationProofPurpose.ts | 4 ++-- .../verifiable-credentials/data-integrity-service.ts | 10 +++++----- .../packages/crypto/verifiable-credentials/index.ts | 1 + .../crypto/verifiable-credentials/vc-api-service.ts | 3 ++- .../verifiable-credentials/vc-credential-container.ts | 2 +- .../crypto/verifiable-credentials/vc-holder-service.ts | 10 +++++----- .../crypto/verifiable-credentials/vc-issuer-service.ts | 10 +++++----- .../vc-presentation-container.ts | 2 +- .../crypto/verifiable-credentials/vc-service.ts | 2 +- .../verifiable-credentials/vc-verifier-service.ts | 10 +++++----- src/middleware/packages/importer/index.ts | 1 + src/middleware/packages/importer/mixins/discourse.ts | 2 +- src/middleware/packages/importer/mixins/drupal.ts | 2 +- src/middleware/packages/importer/mixins/gogocarto.ts | 2 +- src/middleware/packages/importer/mixins/humhub.ts | 3 ++- src/middleware/packages/importer/mixins/importer.ts | 2 +- src/middleware/packages/importer/mixins/jotform.ts | 2 +- src/middleware/packages/importer/mixins/mobilizon.ts | 2 +- src/middleware/packages/importer/mixins/prestashop.ts | 2 +- src/middleware/packages/importer/mixins/wordpress.ts | 2 +- src/middleware/packages/importer/mixins/yeswiki.ts | 2 +- src/middleware/packages/importer/utils.ts | 2 ++ src/middleware/packages/inference/index.ts | 1 + src/middleware/packages/inference/service.ts | 5 +++-- .../packages/inference/subservices/remote.ts | 1 + src/middleware/packages/jsonld/index.ts | 3 ++- src/middleware/packages/jsonld/service.ts | 2 +- .../packages/jsonld/services/context/actions/merge.ts | 2 +- .../packages/jsonld/services/context/index.ts | 2 +- .../packages/jsonld/services/document-loader/index.ts | 3 ++- .../packages/jsonld/services/parser/index.ts | 5 +++-- src/middleware/packages/jsonld/utils/utils.ts | 1 + src/middleware/packages/ldp/adapter.ts | 1 + src/middleware/packages/ldp/index.ts | 1 + .../packages/ldp/mixins/controlled-container.ts | 2 +- src/middleware/packages/ldp/mixins/dereference.ts | 2 +- src/middleware/packages/ldp/mixins/disassembly.ts | 2 +- src/middleware/packages/ldp/mixins/document-tagger.ts | 2 +- src/middleware/packages/ldp/mixins/image-processor.ts | 3 ++- src/middleware/packages/ldp/mixins/mime-types.ts | 3 ++- .../packages/ldp/mixins/single-resource-container.ts | 5 +++-- src/middleware/packages/ldp/service.ts | 2 +- .../packages/ldp/services/api/actions/get.ts | 3 ++- .../packages/ldp/services/api/actions/patch.ts | 4 +++- .../packages/ldp/services/api/actions/post.ts | 3 ++- .../packages/ldp/services/api/actions/put.ts | 3 ++- src/middleware/packages/ldp/services/api/index.ts | 2 +- .../packages/ldp/services/container/actions/attach.ts | 3 ++- .../ldp/services/container/actions/createAndAttach.ts | 2 +- .../packages/ldp/services/container/actions/get.ts | 5 +++-- .../packages/ldp/services/container/actions/getPath.ts | 2 +- .../packages/ldp/services/container/actions/patch.ts | 9 +++++---- .../packages/ldp/services/container/actions/post.ts | 5 +++-- .../packages/ldp/services/container/index.ts | 2 +- .../packages/ldp/services/link-header/index.ts | 2 +- .../packages/ldp/services/permissions/actions/check.ts | 1 + .../packages/ldp/services/permissions/index.ts | 2 +- .../packages/ldp/services/registry/actions/register.ts | 5 +++-- src/middleware/packages/ldp/services/registry/index.ts | 2 +- .../packages/ldp/services/remote/actions/get.ts | 2 +- .../packages/ldp/services/remote/actions/getNetwork.ts | 3 ++- .../packages/ldp/services/remote/actions/getStored.ts | 1 + .../packages/ldp/services/remote/actions/store.ts | 2 +- src/middleware/packages/ldp/services/remote/index.ts | 2 +- .../services/resource/actions/awaitCreateComplete.ts | 2 +- .../packages/ldp/services/resource/actions/create.ts | 3 ++- .../packages/ldp/services/resource/actions/get.ts | 5 +++-- .../ldp/services/resource/actions/getContainers.ts | 2 +- .../packages/ldp/services/resource/actions/patch.ts | 3 ++- .../packages/ldp/services/resource/actions/put.ts | 5 +++-- .../packages/ldp/services/resource/actions/upload.ts | 5 +++-- src/middleware/packages/ldp/services/resource/index.ts | 2 +- .../packages/ldp/services/resource/methods.ts | 1 + src/middleware/packages/ldp/utils.ts | 1 + src/middleware/packages/middlewares/index.ts | 4 +++- src/middleware/packages/migration/index.ts | 1 + src/middleware/packages/mime-types/index.ts | 3 ++- src/middleware/packages/nodeinfo/index.ts | 1 + src/middleware/packages/notifications/index.ts | 1 + .../packages/notifications/services/digest/service.ts | 2 +- .../notifications/services/expo-push/service.ts | 2 +- .../notifications/services/single-mail/service.ts | 1 + .../packages/ontologies/actions/findPrefix.ts | 2 +- .../packages/ontologies/actions/prefixToUri.ts | 3 ++- src/middleware/packages/ontologies/actions/register.ts | 2 +- src/middleware/packages/ontologies/index.ts | 1 + .../packages/ontologies/ontologies/custom/index.ts | 1 + .../packages/ontologies/ontologies/solid/index.ts | 1 + src/middleware/packages/ontologies/service.ts | 2 +- src/middleware/packages/solid/index.ts | 1 + .../services/notifications/channels/webhook-channel.ts | 2 +- .../notifications/channels/websocket-channel.ts | 2 +- .../packages/solid/services/notifications/listener.ts | 3 ++- .../packages/solid/services/notifications/provider.ts | 2 +- .../packages/solid/services/type-index/type-indexes.ts | 2 +- src/middleware/packages/sparql-endpoint/index.ts | 1 + src/middleware/packages/sparql-endpoint/service.ts | 2 +- src/middleware/packages/sync/index.ts | 1 + .../packages/sync/middlewares/objects-watcher.ts | 1 + src/middleware/packages/sync/services/aggregator.ts | 2 +- src/middleware/packages/sync/services/mirror.ts | 6 ++++-- src/middleware/packages/sync/services/synchronizer.ts | 6 +++--- src/middleware/packages/triplestore/index.ts | 1 + src/middleware/packages/triplestore/service.ts | 7 ++++--- .../packages/triplestore/subservices/dataset.ts | 1 + src/middleware/packages/void/index.ts | 1 + src/middleware/packages/void/service.ts | 5 +++-- src/middleware/packages/webacl/bots/groups-manager.ts | 2 +- src/middleware/packages/webacl/index.ts | 1 + src/middleware/packages/webacl/middlewares/cacher.ts | 1 + src/middleware/packages/webacl/service.ts | 2 +- .../webacl/services/group/actions/addMember.ts | 3 ++- .../packages/webacl/services/group/actions/create.ts | 3 ++- .../packages/webacl/services/group/actions/delete.ts | 5 +++-- .../packages/webacl/services/group/actions/exist.ts | 3 ++- .../webacl/services/group/actions/getMembers.ts | 3 ++- .../packages/webacl/services/group/actions/isMember.ts | 3 ++- .../webacl/services/group/actions/removeMember.ts | 3 ++- src/middleware/packages/webacl/services/group/index.ts | 2 +- .../webacl/services/resource/actions/addRights.ts | 4 ++-- .../webacl/services/resource/actions/getLink.ts | 2 +- .../webacl/services/resource/actions/getRights.ts | 6 +++--- .../webacl/services/resource/actions/hasRights.ts | 3 +-- .../webacl/services/resource/actions/removeRights.ts | 5 ++--- .../webacl/services/resource/actions/setRights.ts | 4 ++-- .../packages/webacl/services/resource/index.ts | 5 +++-- src/middleware/packages/webacl/utils.ts | 4 +++- src/middleware/packages/webfinger/index.ts | 1 + src/middleware/packages/webhooks/index.ts | 1 + src/middleware/packages/webhooks/service.ts | 3 ++- src/middleware/packages/webid/index.ts | 1 + src/middleware/tests/activitypub/actors.test.ts | 1 + .../tests/activitypub/collection-api.test.ts | 1 + src/middleware/tests/activitypub/collection.test.ts | 1 + src/middleware/tests/activitypub/follow.test.ts | 1 + src/middleware/tests/activitypub/inbox.test.ts | 1 + src/middleware/tests/activitypub/like.test.ts | 1 + src/middleware/tests/activitypub/message.test.ts | 1 + src/middleware/tests/activitypub/object.test.ts | 1 + src/middleware/tests/activitypub/outbox.test.ts | 1 + src/middleware/tests/activitypub/shares.test.ts | 1 + src/middleware/tests/config.ts | 2 +- src/middleware/tests/crypto/keys.test.ts | 1 + .../tests/crypto/verifiable-credentials.test.ts | 1 + src/middleware/tests/interop/mirror-protected.test.ts | 1 + src/middleware/tests/interop/mirror.test.ts | 1 + src/middleware/tests/interop/patch-remote.test.ts | 1 + src/middleware/tests/interop/remote-inference.test.ts | 1 + src/middleware/tests/jsonld/merge.test.ts | 1 + src/middleware/tests/ldp/api.test.ts | 1 + src/middleware/tests/ldp/binary.test.ts | 1 + src/middleware/tests/ldp/container-path.test.ts | 1 + src/middleware/tests/ldp/container.test.ts | 1 + src/middleware/tests/ldp/content-negotiation.test.ts | 6 +++++- src/middleware/tests/ldp/headers.test.ts | 1 + src/middleware/tests/ldp/initialize.ts | 3 +-- src/middleware/tests/ldp/resource.test.ts | 1 + src/middleware/tests/ontologies/ontologies.test.ts | 1 + src/middleware/tests/webId/webId.test.ts | 1 + src/middleware/tests/webacl/groupCRUD.test.ts | 1 + src/middleware/tests/webacl/resource.test.ts | 1 + src/middleware/tests/webacl/resourceCRUD.test.ts | 1 + src/middleware/tests/webacl/sparql-injection.test.ts | 1 + src/middleware/tests/webacl/utils.test.ts | 1 + 202 files changed, 317 insertions(+), 198 deletions(-) diff --git a/src/middleware/packages/activitypub/index.ts b/src/middleware/packages/activitypub/index.ts index 927b53298..acc8931a1 100644 --- a/src/middleware/packages/activitypub/index.ts +++ b/src/middleware/packages/activitypub/index.ts @@ -6,6 +6,7 @@ import BotMixin from './mixins/bot.ts'; import ActivitiesHandlerMixin from './mixins/activities-handler.ts'; import matchActivity from './utils/matchActivity.ts'; import containers from './containers.ts'; + export * from './constants.ts'; export { ActivityPubService, diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index bd9421165..fe5d8b414 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -1,8 +1,8 @@ import urlJoin from 'url-join'; import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { getSlugFromUri, getContainerFromUri } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; const BotMixin = { settings: { diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 7abccab6d..0609acabf 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -1,7 +1,7 @@ import Handlebars from 'handlebars'; +import { ServiceSchema } from 'moleculer'; import matchActivity from '../utils/matchActivity.ts'; import { ACTIVITY_TYPES } from '../constants.ts'; -import { ServiceSchema } from 'moleculer'; const ActivityMappingService = { name: 'activity-mapping' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index 5896a1312..6d28c1323 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -1,5 +1,6 @@ import QueueMixin from 'moleculer-bull'; import { as, sec } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; import ActorService from './subservices/actor.ts'; import ActivityService from './subservices/activity.ts'; import ApiService from './subservices/api.ts'; @@ -14,7 +15,6 @@ import ReplyService from './subservices/reply.ts'; import ShareService from './subservices/share.ts'; import SideEffectsService from './subservices/side-effects.ts'; import FakeQueueMixin from '../../mixins/fake-queue.ts'; -import { ServiceSchema } from 'moleculer'; const ActivityPubService = { name: 'activitypub' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 16d5722d3..5c71d02af 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -1,10 +1,10 @@ import { Errors as E } from 'moleculer-web'; import { ControlledContainerMixin } from '@semapps/ldp'; +import { ServiceSchema } from 'moleculer'; import setRightsHandler from './activity-handlers/setRightsHandler.ts'; import { arrayOf } from '../../../utils.ts'; import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; -import { ServiceSchema } from 'moleculer'; const ActivityService = { name: 'activitypub.activity' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 664854ac4..f45779919 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -1,9 +1,9 @@ import fetch from 'node-fetch'; import { namedNode, literal, triple, variable } from '@rdfjs/data-model'; import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; import { getSlugFromUri, waitForResource } from '../../../utils.ts'; -import { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const ActorService = { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index 61e69bb16..d6ccf203e 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -13,8 +13,8 @@ import { saveDatasetMeta } from '@semapps/middlewares'; -import { FULL_ACTOR_TYPES } from '../../../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { FULL_ACTOR_TYPES } from '../../../constants.ts'; const ApiService = { name: 'activitypub.api' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 492b3ead7..f29629629 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,7 +1,8 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; -const { MoleculerError } = require('moleculer').Errors; -import { getValueFromDataType } from '../../../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { getValueFromDataType } from '../../../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; /** * Retrieves the collection metadata from the triplestore diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index b4b4a8f14..a2f4fcd15 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -1,9 +1,10 @@ -const { MoleculerError } = require('moleculer').Errors; import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/ldp'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { Errors as E } from 'moleculer-web'; -import getAction from './actions/get.ts'; import { ServiceSchema } from 'moleculer'; +import getAction from './actions/get.ts'; + +const { MoleculerError } = require('moleculer').Errors; const CollectionService = { name: 'activitypub.collection' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 2a2a6f9c3..f5e9d3f09 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -2,8 +2,8 @@ import urlJoin from 'url-join'; import { quad, namedNode } from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; import { getWebIdFromUri, arrayOf } from '@semapps/ldp'; -import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; const CollectionsRegistryService = { name: 'activitypub.collections-registry' as const, @@ -247,11 +247,11 @@ const CollectionsRegistryService = { const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice return ( uri === actorUri || - uri.startsWith(actorUri + '/') || + uri.startsWith(`${actorUri}/`) || uri === aclBase || - uri.startsWith(aclBase + '/') || + uri.startsWith(`${aclBase}/`) || uri === aclGroupBase || - uri.startsWith(aclGroupBase + '/') + uri.startsWith(`${aclGroupBase}/`) ); } else { return uri.startsWith(this.settings.baseUri); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index c229b4f3f..96aa75d80 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -1,7 +1,7 @@ +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; -import { ServiceSchema } from 'moleculer'; const FollowService = { name: 'activitypub.follow' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 33a046819..bb6036f4b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,9 +1,10 @@ import { Errors as E } from 'moleculer-web'; -const { MoleculerError } = require('moleculer').Errors; +import { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; -import { ServiceSchema } from 'moleculer'; + +const { MoleculerError } = require('moleculer').Errors; /** @type {import('moleculer').ServiceSchema} */ const InboxService = { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index f025176f7..346e150d5 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -1,7 +1,7 @@ +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; -import { ServiceSchema } from 'moleculer'; const LikeService = { name: 'activitypub.like' as const, @@ -177,11 +177,11 @@ const LikeService = { const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice return ( uri === actorUri || - uri.startsWith(actorUri + '/') || + uri.startsWith(`${actorUri}/`) || uri === aclBase || - uri.startsWith(aclBase + '/') || + uri.startsWith(`${aclBase}/`) || uri === aclGroupBase || - uri.startsWith(aclGroupBase + '/') + uri.startsWith(`${aclGroupBase}/`) ); } else { return uri.startsWith(this.settings.baseUri); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 10eb37e61..947403e01 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,6 +1,6 @@ import { getType } from '@semapps/ldp'; -import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; const ObjectService = { name: 'activitypub.object' as const, @@ -63,7 +63,8 @@ const ObjectService = { }); // TODO: attach to all matching containers - let container, containerUri; + let container; + let containerUri; if (this.settings.podProvider) { // If this is a Pod provider, find the container with the type-registrations service diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index ad196f79a..dd97c900c 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -2,10 +2,10 @@ import fetch from 'node-fetch'; import { Errors as E } from 'moleculer-web'; import { MIME_TYPES } from '@semapps/mime-types'; import { getType, arrayOf } from '@semapps/ldp'; +import { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead, getSlugFromUri } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; -import { ServiceSchema } from 'moleculer'; const queueOptions = process.env.NODE_ENV === 'test' diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 5a7d7209a..b649fb756 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -1,9 +1,9 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import matchActivity from '../../../utils/matchActivity.ts'; -import { ServiceSchema } from 'moleculer'; const ReplyService = { name: 'activitypub.reply' as const, @@ -142,11 +142,11 @@ const ReplyService = { const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice return ( uri === actorUri || - uri.startsWith(actorUri + '/') || + uri.startsWith(`${actorUri}/`) || uri === aclBase || - uri.startsWith(aclBase + '/') || + uri.startsWith(`${aclBase}/`) || uri === aclGroupBase || - uri.startsWith(aclGroupBase + '/') + uri.startsWith(`${aclGroupBase}/`) ); } else { return uri.startsWith(this.settings.baseUri); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index 2cf79eeea..900ad3f24 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -1,8 +1,8 @@ +import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import matchActivity from '../../../utils/matchActivity.ts'; -import { ServiceSchema } from 'moleculer'; const ShareService = { name: 'activitypub.share' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 5e5183af7..a510fb8b5 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -1,7 +1,7 @@ import { credentialsContext } from '@semapps/crypto'; import { arrayOf } from '@semapps/ldp'; -import matchActivity from '../../../utils/matchActivity.ts'; import { ServiceSchema } from 'moleculer'; +import matchActivity from '../../../utils/matchActivity.ts'; /** * Allow any service to process activities just after they are posted to the inbox or outbox. diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts index b1d05931a..bdc93e52e 100644 --- a/src/middleware/packages/activitypub/services/relay.ts +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { delay } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; const RelayService = { name: 'activitypub.relay' as const, diff --git a/src/middleware/packages/auth/index.ts b/src/middleware/packages/auth/index.ts index e18b4e6a7..a14ffe541 100644 --- a/src/middleware/packages/auth/index.ts +++ b/src/middleware/packages/auth/index.ts @@ -5,6 +5,7 @@ import AuthAccountService from './services/account.ts'; import AuthJWTService from './services/jwt.ts'; import AuthMigrationService from './services/migration.ts'; import AuthMailService from './services/mail.ts'; + export { AuthCASService, AuthLocalService, diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index e9f74c031..92aa90f65 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -1,10 +1,10 @@ import path from 'path'; import session from 'express-session'; +import { ServiceSchema } from 'moleculer'; import AuthMixin from './auth.ts'; import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; import redirectToFront from '../middlewares/redirectToFront.ts'; import localLogout from '../middlewares/localLogout.ts'; -import { ServiceSchema } from 'moleculer'; const AuthSSOMixin = { mixins: [AuthMixin], diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index 003e57f27..b5cfffcd7 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -1,9 +1,9 @@ import passport from 'passport'; import { Errors as E } from 'moleculer-web'; import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema } from 'moleculer'; import AuthAccountService from '../services/account.ts'; import AuthJWTService from '../services/jwt.ts'; -import { ServiceSchema } from 'moleculer'; /** * Auth Mixin that handles authentication and authorization for routes diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 6d649d47f..81fd1437e 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -227,7 +227,7 @@ const AuthAccountSchema = { findSettingsByWebId: { async handler(ctx) { - const webId = ctx.meta.webId; + const { webId } = ctx.meta; const account = await ctx.call('auth.account.findByWebId', { webId }); diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts index 2b4f055aa..158ee0d39 100644 --- a/src/middleware/packages/auth/services/auth.cas.ts +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -1,7 +1,7 @@ import { Strategy } from 'passport-cas2'; import { Errors as E } from 'moleculer-web'; -import AuthSSOMixin from '../mixins/auth.sso.ts'; import { ServiceSchema } from 'moleculer'; +import AuthSSOMixin from '../mixins/auth.sso.ts'; const AuthCASService = { name: 'auth' as const, diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 8c62668de..f1a1786aa 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,10 +1,11 @@ import path from 'path'; import { Strategy } from 'passport-local'; +import { ServiceSchema } from 'moleculer'; import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; -const { MoleculerError } = require('moleculer').Errors; import AuthMailService from './mail.ts'; -import { ServiceSchema } from 'moleculer'; + +const { MoleculerError } = require('moleculer').Errors; /** @type {import('moleculer').ServiceSchema} */ const AuthLocalService = { diff --git a/src/middleware/packages/auth/services/auth.oidc.ts b/src/middleware/packages/auth/services/auth.oidc.ts index abf6f35ee..8ef7d8649 100644 --- a/src/middleware/packages/auth/services/auth.oidc.ts +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -1,13 +1,13 @@ import urlJoin from 'url-join'; import { Issuer, Strategy, custom } from 'openid-client'; +import { ServiceSchema } from 'moleculer'; +import AuthSSOMixin from '../mixins/auth.sso.ts'; + custom.setHttpOptionsDefaults({ timeout: 10000 }); -import AuthSSOMixin from '../mixins/auth.sso.ts'; -import { ServiceSchema } from 'moleculer'; - const AuthOIDCService = { name: 'auth' as const, mixins: [AuthSSOMixin], diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index 9646805c6..a5b2cdaf3 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -2,13 +2,14 @@ import { CronJob } from 'cron'; import fs from 'fs'; import { emptyDirSync } from 'fs-extra'; import pathModule from 'path'; -const pathJoin = pathModule.join; +import { ServiceSchema } from 'moleculer'; import fsCopy from './utils/fsCopy.ts'; import ftpCopy from './utils/ftpCopy.ts'; import rsyncCopy from './utils/rsyncCopy.ts'; import ftpRemove from './utils/ftpRemove.ts'; import fsRemove from './utils/fsRemove.ts'; -import { ServiceSchema } from 'moleculer'; + +const pathJoin = pathModule.join; /** * @typedef {import('moleculer').Context} Context diff --git a/src/middleware/packages/core/index.ts b/src/middleware/packages/core/index.ts index 1b55d1a47..450add1bf 100644 --- a/src/middleware/packages/core/index.ts +++ b/src/middleware/packages/core/index.ts @@ -1,2 +1,3 @@ import CoreService from './service.ts'; + export { CoreService }; diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 239de38e1..da5bc4b19 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -1,6 +1,5 @@ import path from 'path'; -import ApiGatewayService from 'moleculer-web'; -import { Errors as E } from 'moleculer-web'; +import ApiGatewayService, { Errors as E } from 'moleculer-web'; import { ActivityPubService, FULL_ACTOR_TYPES } from '@semapps/activitypub'; import { JsonLdService } from '@semapps/jsonld'; import { LdpService, DocumentTaggerMixin } from '@semapps/ldp'; diff --git a/src/middleware/packages/crypto/constants.ts b/src/middleware/packages/crypto/constants.ts index dbfb700c9..f10bb4848 100644 --- a/src/middleware/packages/crypto/constants.ts +++ b/src/middleware/packages/crypto/constants.ts @@ -1,4 +1,5 @@ import noGraphCredentialContext from './utils/noGraphCredentialContext.ts'; + const VC_API_PATH = '/vc/v0.3'; /** diff --git a/src/middleware/packages/crypto/keys/index.ts b/src/middleware/packages/crypto/keys/index.ts index b60e2e742..839e778fd 100644 --- a/src/middleware/packages/crypto/keys/index.ts +++ b/src/middleware/packages/crypto/keys/index.ts @@ -1,3 +1,4 @@ import MigrationService from './migration.ts'; import KeysService from './keys.ts'; + export { MigrationService, KeysService }; diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index 171dab572..574b570dc 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -1,8 +1,8 @@ import { ControlledContainerMixin } from '@semapps/ldp'; import { Errors as E } from 'moleculer-web'; +import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; -import { ServiceSchema } from 'moleculer'; /** * DANGER ZONE diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index acf86bba4..5e20d4e2c 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -4,13 +4,13 @@ import { namedNode, triple } from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; import { sec } from '@semapps/ontologies'; import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; +import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; import KeyContainerService from './key-container.ts'; import PublicKeyContainerService from './public-key-container.ts'; import MigrationService from './migration.ts'; import { KeyPairService } from '../signature/index.ts'; -import { ServiceSchema } from 'moleculer'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index a7eb41b19..8b871b1f1 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import path from 'path'; -import { KEY_TYPES } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; /** @type {import('moleculer').ServiceSchema} */ const KeysMigrationSchema = { diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index f8b989ff7..c6a1140fc 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -1,8 +1,8 @@ import { triple, namedNode } from '@rdfjs/data-model'; import { ControlledContainerMixin } from '@semapps/ldp'; import { Errors as E } from 'moleculer-web'; -import { KEY_TYPES } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; /** * Container to store the public keys of actors only. diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 7d90caf9a..6e9987067 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -2,9 +2,9 @@ import { createSign, createHash } from 'crypto'; import { parseRequest, verifySignature } from 'http-signature'; import { createAuthzHeader, createSignatureString } from 'http-signature-header'; import { Errors as E } from 'moleculer-web'; +import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; import { arrayOf } from '../utils/utils.ts'; -import { ServiceSchema } from 'moleculer'; const HttpSignatureService = { // TODO: Rename to signature.http-signatures in a major release. diff --git a/src/middleware/packages/crypto/signature/index.ts b/src/middleware/packages/crypto/signature/index.ts index 757431ed9..4a4699526 100644 --- a/src/middleware/packages/crypto/signature/index.ts +++ b/src/middleware/packages/crypto/signature/index.ts @@ -1,4 +1,5 @@ import SignatureService from './http-signatures.ts'; import ProxyService from './proxy.ts'; import KeyPairService from './keypair.ts'; + export { SignatureService, ProxyService, KeyPairService }; diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index 661e442ca..020317ad8 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -3,8 +3,8 @@ import path from 'path'; import fetch from 'node-fetch'; import { generateKeyPair } from 'crypto'; import { namedNode, blankNode, literal, triple } from '@rdfjs/data-model'; -import { KEY_TYPES } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; /** * Deprecated Service. diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts index 26a3e254d..2a1c7eec7 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts @@ -1,9 +1,9 @@ +import { arrayOf, deepStrictEqual } from '../utils/utils.ts'; + const { purposes: { AuthenticationProofPurpose } } = require('jsonld-signatures'); -import { arrayOf, deepStrictEqual } from '../utils/utils.ts'; - /** * Create an instance of this class when verifying capability VC presentations using * the @digitalbazaar/vc library. diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 1c61fbe93..aae896cbc 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -1,17 +1,17 @@ import jsigs from 'jsonld-signatures'; -const { - purposes: { AssertionProofPurpose } -} = require('jsonld-signatures'); - import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { KEY_TYPES } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { KEY_TYPES } from '../constants.ts'; + +const { + purposes: { AssertionProofPurpose } +} = require('jsonld-signatures'); /** * Data integrity service for signing objects using the [VC data integrity spec](https://www.w3.org/TR/vc-data-integrity/). diff --git a/src/middleware/packages/crypto/verifiable-credentials/index.ts b/src/middleware/packages/crypto/verifiable-credentials/index.ts index b52fb69bf..9bb146b2b 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/index.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/index.ts @@ -2,4 +2,5 @@ import DataIntegrityService from './data-integrity-service.ts'; import VerifiableCredentialsService from './vc-service.ts'; import VCPurpose from './VcPurpose.ts'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; + export { DataIntegrityService, VerifiableCredentialsService, VCPurpose, VCCapabilityPresentationProofPurpose }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts index 86aa1a6ba..aa44bea5a 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts @@ -1,8 +1,9 @@ import { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } from '@semapps/middlewares'; import path from 'node:path'; -import { VC_API_PATH } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { VC_API_PATH } from '../constants.ts'; + const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; /** diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index 977207824..7ef38f989 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -1,7 +1,7 @@ import path from 'node:path'; import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; -import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; /** * Container for Verifiable Credentials. Posting to this container will create a new VC. diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index 995b9fc08..a6be01632 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -1,9 +1,5 @@ import { randomUUID } from 'node:crypto'; -const { - purposes: { AuthenticationProofPurpose } -} = require('jsonld-signatures'); - import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; import vc from '@digitalbazaar/vc'; @@ -11,8 +7,12 @@ import vc from '@digitalbazaar/vc'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { KEY_TYPES, credentialsContext } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { KEY_TYPES, credentialsContext } from '../constants.ts'; + +const { + purposes: { AuthenticationProofPurpose } +} = require('jsonld-signatures'); /** * Service for verifying and creating Verifiable Presentations diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 3f48b9c18..02238a599 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -1,9 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -const { - purposes: { AssertionProofPurpose } -} = require('jsonld-signatures'); - import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; import vc from '@digitalbazaar/vc'; @@ -11,8 +7,12 @@ import vc from '@digitalbazaar/vc'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { KEY_TYPES, credentialsContext } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { KEY_TYPES, credentialsContext } from '../constants.ts'; + +const { + purposes: { AssertionProofPurpose } +} = require('jsonld-signatures'); /** * Service for verifying, reading, and revoking Verifiable Credentials. diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index f0d2f9d87..4343b24f2 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -1,6 +1,6 @@ import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; -import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; import { ServiceSchema } from 'moleculer'; +import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; /** * Container for Verifiable Presentations. Posting to this container will create a new VP. diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts index ce166ef6f..84e2728b1 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts @@ -1,4 +1,5 @@ import { did, cred } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; import VCAuthorizerService from './vc-authorizer-service.ts'; import VCHolderService from './vc-holder-service.ts'; import VCIssuerService from './vc-issuer-service.ts'; @@ -8,7 +9,6 @@ import VCApiService from './vc-api-service.ts'; import VCCredentialContainer from './vc-credential-container.ts'; import VCPresentationContainer from './vc-presentation-container.ts'; import ChallengeService from './challenge-service.ts'; -import { ServiceSchema } from 'moleculer'; /** * Root service for Verifiable Credential and the VC API. diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 5e0c6926a..1110af2f8 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -1,14 +1,14 @@ -const { - purposes: { AuthenticationProofPurpose } -} = require('jsonld-signatures'); - import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; import vc from '@digitalbazaar/vc'; +import { ServiceSchema } from 'moleculer'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; import VCPurpose from './VcPurpose.ts'; import { arrayOf } from '../utils/utils.ts'; -import { ServiceSchema } from 'moleculer'; + +const { + purposes: { AuthenticationProofPurpose } +} = require('jsonld-signatures'); /** * Service for verifying and creating Verifiable Presentations diff --git a/src/middleware/packages/importer/index.ts b/src/middleware/packages/importer/index.ts index ab67f20c0..3e0459bc1 100644 --- a/src/middleware/packages/importer/index.ts +++ b/src/middleware/packages/importer/index.ts @@ -8,6 +8,7 @@ import MobilizonImporterMixin from './mixins/mobilizon.ts'; import PrestaShopImporterMixin from './mixins/prestashop.ts'; import YesWikiImporterMixin from './mixins/yeswiki.ts'; import WordpressImporterMixin from './mixins/wordpress.ts'; + export * from './utils.ts'; export { ImporterMixin, diff --git a/src/middleware/packages/importer/mixins/discourse.ts b/src/middleware/packages/importer/mixins/discourse.ts index bf05e80a2..cb87316eb 100644 --- a/src/middleware/packages/importer/mixins/discourse.ts +++ b/src/middleware/packages/importer/mixins/discourse.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; -import ImporterMixin from './importer.ts'; import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/mixins/drupal.ts b/src/middleware/packages/importer/mixins/drupal.ts index 092204fe0..d6e39b1e8 100644 --- a/src/middleware/packages/importer/mixins/drupal.ts +++ b/src/middleware/packages/importer/mixins/drupal.ts @@ -1,6 +1,6 @@ +import { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/mixins/gogocarto.ts b/src/middleware/packages/importer/mixins/gogocarto.ts index 9a99186bd..5ed83fe41 100644 --- a/src/middleware/packages/importer/mixins/gogocarto.ts +++ b/src/middleware/packages/importer/mixins/gogocarto.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; -import ImporterMixin from './importer.ts'; import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/mixins/humhub.ts b/src/middleware/packages/importer/mixins/humhub.ts index b7d0082d5..3021d8591 100644 --- a/src/middleware/packages/importer/mixins/humhub.ts +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -1,7 +1,8 @@ import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; + const allowedTypes = ['user', 'space', 'calendar', 'post']; const getSlugByUrl = url => { diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 19f960a9c..4e23be3ec 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -2,8 +2,8 @@ import fetch from 'node-fetch'; import cronParser from 'cron-parser'; import { promises as fsPromises } from 'fs'; import { ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; -import { isDir } from '../utils.ts'; import { ServiceSchema } from 'moleculer'; +import { isDir } from '../utils.ts'; const Schema = { settings: { diff --git a/src/middleware/packages/importer/mixins/jotform.ts b/src/middleware/packages/importer/mixins/jotform.ts index e74e8cee5..710248be6 100644 --- a/src/middleware/packages/importer/mixins/jotform.ts +++ b/src/middleware/packages/importer/mixins/jotform.ts @@ -1,6 +1,6 @@ +import { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/mixins/mobilizon.ts b/src/middleware/packages/importer/mixins/mobilizon.ts index e3bf01c03..11db0f23d 100644 --- a/src/middleware/packages/importer/mixins/mobilizon.ts +++ b/src/middleware/packages/importer/mixins/mobilizon.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; -import ImporterMixin from './importer.ts'; import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/mixins/prestashop.ts b/src/middleware/packages/importer/mixins/prestashop.ts index 4f38bb662..f5bcf644a 100644 --- a/src/middleware/packages/importer/mixins/prestashop.ts +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index 6d02c1167..83ae56c3c 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -1,8 +1,8 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { getSlugFromUri, delay } from '@semapps/ldp'; -import ImporterMixin from './importer.ts'; import { ServiceSchema } from 'moleculer'; +import ImporterMixin from './importer.ts'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/mixins/yeswiki.ts b/src/middleware/packages/importer/mixins/yeswiki.ts index 023597613..2312c145d 100644 --- a/src/middleware/packages/importer/mixins/yeswiki.ts +++ b/src/middleware/packages/importer/mixins/yeswiki.ts @@ -1,6 +1,6 @@ +import { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; const Schema = { mixins: [ImporterMixin], diff --git a/src/middleware/packages/importer/utils.ts b/src/middleware/packages/importer/utils.ts index f25ab8030..e331ac766 100644 --- a/src/middleware/packages/importer/utils.ts +++ b/src/middleware/packages/importer/utils.ts @@ -1,8 +1,10 @@ import { promises as fsPromises } from 'fs'; import sanitizeHtml from 'sanitize-html'; import googlelibphonenumberModule from 'google-libphonenumber'; + const PNF = googlelibphonenumberModule.PhoneNumberFormat; const phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance(); + const convertToIsoString = str => str && new Date(str).toISOString(); const formatPhoneNumber = (number, countryCode) => { diff --git a/src/middleware/packages/inference/index.ts b/src/middleware/packages/inference/index.ts index 8cb806f20..3d16f9a12 100644 --- a/src/middleware/packages/inference/index.ts +++ b/src/middleware/packages/inference/index.ts @@ -1,2 +1,3 @@ import InferenceService from './service.ts'; + export { InferenceService }; diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 76b080fd7..638a8e5e3 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -1,9 +1,10 @@ import fetch from 'node-fetch'; import N3 from 'n3'; +import { ServiceSchema } from 'moleculer'; +import RemoteService from './subservices/remote.ts'; + const { DataFactory } = N3; const { triple, namedNode } = DataFactory; -import RemoteService from './subservices/remote.ts'; -import { ServiceSchema } from 'moleculer'; const InferenceSchema = { name: 'inference' as const, diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index 0d782ceb6..1b9a75528 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -2,6 +2,7 @@ import fetch from 'node-fetch'; import N3 from 'n3'; import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } from '@semapps/activitypub'; import { ServiceSchema } from 'moleculer'; + const { DataFactory } = N3; const { triple, namedNode } = DataFactory; diff --git a/src/middleware/packages/jsonld/index.ts b/src/middleware/packages/jsonld/index.ts index 588032664..9b1d31080 100644 --- a/src/middleware/packages/jsonld/index.ts +++ b/src/middleware/packages/jsonld/index.ts @@ -4,6 +4,7 @@ import JsonLdContextService from './services/context/index.ts'; import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; import JsonLdParserService from './services/parser/index.ts'; import uriSchemes from './utils/uriSchemes.ts'; + export { JsonLdService, JsonLdApiService, @@ -12,4 +13,4 @@ export { JsonLdParserService, uriSchemes }; -export const isRegisteredURI = require('./utils/utils').isRegisteredURI; +export const { isRegisteredURI } = require('./utils/utils'); diff --git a/src/middleware/packages/jsonld/service.ts b/src/middleware/packages/jsonld/service.ts index 7979955df..c5b919f5f 100644 --- a/src/middleware/packages/jsonld/service.ts +++ b/src/middleware/packages/jsonld/service.ts @@ -1,9 +1,9 @@ import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; import JsonLdApiService from './services/api/index.ts'; import JsonLdContextService from './services/context/index.ts'; import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; import JsonLdParserService from './services/parser/index.ts'; -import { ServiceSchema } from 'moleculer'; const JsonldSchema = { name: 'jsonld' as const, diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index 9aa4b1ee7..ccb70bc95 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -1,5 +1,5 @@ -import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; import { ActionSchema } from 'moleculer'; +import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/jsonld/services/context/index.ts b/src/middleware/packages/jsonld/services/context/index.ts index e60df301e..7ceff99e0 100644 --- a/src/middleware/packages/jsonld/services/context/index.ts +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -1,10 +1,10 @@ import { ContextParser } from 'jsonld-context-parser'; +import { ServiceSchema, defineAction } from 'moleculer'; import getAction from './actions/get.ts'; import getLocalAction from './actions/getLocal.ts'; import mergeAction from './actions/merge.ts'; import parseAction from './actions/parse.ts'; import validateAction from './actions/validate.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const JsonldContextSchema = { name: 'jsonld.context' as const, diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index 729bc3479..4beb908ee 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -1,9 +1,10 @@ import jsonld from 'jsonld'; import fsModule from 'fs'; -const fsPromises = fsModule.promises; import LRU from 'lru-cache'; import { ServiceSchema } from 'moleculer'; +const fsPromises = fsModule.promises; + /** Use document loader depending on node / bun runtime. */ const defaultDocumentLoader = !process.versions.bun ? jsonld.documentLoaders.node() diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 0e7fd729e..283b8f954 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -4,9 +4,10 @@ import { JsonLdParser } from 'jsonld-streaming-parser'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import streamifyString from 'streamify-string'; import rdfparseModule from 'rdf-parse'; -const rdfParser = rdfparseModule.default; -import { arrayOf, isURI } from '../../utils/utils.ts'; import { ServiceSchema } from 'moleculer'; +import { arrayOf, isURI } from '../../utils/utils.ts'; + +const rdfParser = rdfparseModule.default; const JsonldParserSchema = { name: 'jsonld.parser' as const, diff --git a/src/middleware/packages/jsonld/utils/utils.ts b/src/middleware/packages/jsonld/utils/utils.ts index 347dcbcad..0ed9f0958 100644 --- a/src/middleware/packages/jsonld/utils/utils.ts +++ b/src/middleware/packages/jsonld/utils/utils.ts @@ -1,4 +1,5 @@ import uriSchemes from './uriSchemes.ts'; + const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); /** If the value starts with `http` or `urn:` */ diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts index f07af49a4..ad539b9d4 100644 --- a/src/middleware/packages/ldp/adapter.ts +++ b/src/middleware/packages/ldp/adapter.ts @@ -1,4 +1,5 @@ import urlJoin from 'url-join'; + const { ServiceSchemaError } = require('moleculer').Errors; class LdpAdapter { diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index 55a782247..645dd7311 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -17,6 +17,7 @@ import SpecialEndpointMixin from './mixins/special-endpoint.ts'; import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; import defaultContainerOptions from './services/registry/defaultOptions.ts'; import LdpAdapter from './adapter.ts'; + export * from './utils.ts'; export { LdpService, diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index a1b42429b..055768c1f 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,5 +1,5 @@ -import { delay, getParentContainerUri } from '../utils.ts'; import { ServiceSchema } from 'moleculer'; +import { delay, getParentContainerUri } from '../utils.ts'; const Schema = { settings: { diff --git a/src/middleware/packages/ldp/mixins/dereference.ts b/src/middleware/packages/ldp/mixins/dereference.ts index e95f86de9..f6f30e380 100644 --- a/src/middleware/packages/ldp/mixins/dereference.ts +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -1,5 +1,5 @@ -import { isObject, arrayOf } from '../utils.ts'; import { ServiceSchema } from 'moleculer'; +import { isObject, arrayOf } from '../utils.ts'; /** * @description MoleculerJS mixin to be applied on the ControlledContainerMixin within a Semapps project. diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index bc41b9ab2..10577caf9 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -1,5 +1,5 @@ -import { arrayOf } from '../utils.ts'; import { ServiceSchema } from 'moleculer'; +import { arrayOf } from '../utils.ts'; const Schema = { settings: { diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 0a006652e..2e596fce8 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,6 +1,6 @@ import { dc } from '@semapps/ontologies'; -import { getDatasetFromUri } from '../utils.ts'; import { ServiceSchema } from 'moleculer'; +import { getDatasetFromUri } from '../utils.ts'; const Schema = { settings: { diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index 15ff59844..ac32d7d46 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -1,7 +1,8 @@ import sharp from 'sharp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { arrayOf } from '../utils.ts'; import { ServiceSchema } from 'moleculer'; +import { arrayOf } from '../utils.ts'; + const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; const Schema = { diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index 1527a7228..1bf87383b 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -1,7 +1,8 @@ -const { MoleculerError } = require('moleculer').Errors; import { isMimeTypeMatching } from '@semapps/mime-types'; import { ServiceSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + const Schema = { settings: { mimeTypes: { diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index 457e6fe29..d140705b0 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -1,7 +1,8 @@ -const { MoleculerError } = require('moleculer').Errors; +import { ServiceSchema } from 'moleculer'; import ControlledContainerMixin from './controlled-container.ts'; import { delay } from '../utils.ts'; -import { ServiceSchema } from 'moleculer'; + +const { MoleculerError } = require('moleculer').Errors; const Schema = { mixins: [ControlledContainerMixin], diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 7d469b6ae..d84ba16e6 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,4 +1,5 @@ import { ldp, semapps } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; import LdpContainerService from './services/container/index.ts'; import LdpCacheService from './services/cache/index.ts'; @@ -7,7 +8,6 @@ import LdpRegistryService from './services/registry/index.ts'; import LdpRemoteService from './services/remote/index.ts'; import LdpResourceService from './services/resource/index.ts'; import PermissionsService from './services/permissions/index.ts'; -import { ServiceSchema } from 'moleculer'; const LdpSchema = { name: 'ldp' as const, diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index ec0883d81..4e510b53a 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -1,8 +1,9 @@ import fs from 'fs'; -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { cleanUndefined, parseJson } from '../../../utils.ts'; +const { MoleculerError } = require('moleculer').Errors; + export default async function get(ctx) { try { const { username, slugParts } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/actions/patch.ts b/src/middleware/packages/ldp/services/api/actions/patch.ts index 21828e5e1..2dd1c5c70 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.ts +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -1,5 +1,7 @@ -const { MoleculerError } = require('moleculer').Errors; import sparqljsModule from 'sparqljs'; + +const { MoleculerError } = require('moleculer').Errors; + const SparqlParser = sparqljsModule.Parser; const parser = new SparqlParser(); const ACCEPTED_OPERATIONS = ['insert', 'delete']; diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index c812dd0d0..d2b89c902 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { v4 as uuidv4 } from 'uuid'; import mime from 'mime-types'; +const { MoleculerError } = require('moleculer').Errors; + export default async function post(ctx) { try { let { username, slugParts, ...resource } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index b6f3ef99a..95d51674b 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -1,6 +1,7 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; +const { MoleculerError } = require('moleculer').Errors; + export default async function post(ctx) { let { username, slugParts, ...resource } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/index.ts b/src/middleware/packages/ldp/services/api/index.ts index 53a393085..5af245628 100644 --- a/src/middleware/packages/ldp/services/api/index.ts +++ b/src/middleware/packages/ldp/services/api/index.ts @@ -1,4 +1,5 @@ import urlJoin from 'url-join'; +import { ServiceSchema, defineAction } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import headAction from './actions/head.ts'; @@ -7,7 +8,6 @@ import postAction from './actions/post.ts'; import putAction from './actions/put.ts'; import getCatchAllRoute from '../../routes/getCatchAllRoute.ts'; import getPodsRoute from '../../routes/getPodsRoute.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const LdpApiSchema = { name: 'ldp.api' as const, diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index b1c43784a..47f9cf7a0 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,7 +1,8 @@ -const { MoleculerError } = require('moleculer').Errors; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + const Schema = { visibility: 'public', params: { diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 4584cd10b..8cef4fad2 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; -import { getParentContainerUri } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { getParentContainerUri } from '../../../utils.ts'; /** * Create a container and attach it to its parent container(s) diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index ea5d3f2e0..f06c008c9 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,7 +1,8 @@ import { MIME_TYPES } from '@semapps/mime-types'; -const { MoleculerError } = require('moleculer').Errors; -import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.ts b/src/middleware/packages/ldp/services/container/actions/getPath.ts index 4a0075f66..e7240710c 100644 --- a/src/middleware/packages/ldp/services/container/actions/getPath.ts +++ b/src/middleware/packages/ldp/services/container/actions/getPath.ts @@ -1,6 +1,6 @@ import dashify from 'dashify'; -import { isURL } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { isURL } from '../../../utils.ts'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 9786dcf1d..95bd34e24 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,6 +1,7 @@ -const { MoleculerError } = require('moleculer').Errors; -import { isMirror } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { isMirror } from '../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; const checkTripleValidity = (triple, containerUri) => { if (triple.subject.value !== containerUri) { @@ -40,8 +41,8 @@ const Schema = { async handler(ctx) { const { containerUri, triplesToAdd, triplesToRemove } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const resourcesAdded = [], - resourcesRemoved = []; + const resourcesAdded = []; + const resourcesRemoved = []; const containerExist = await ctx.call('ldp.container.exist', { containerUri }); if (!containerExist) { diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index dd6f8bb16..9a6e53d26 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { cleanUndefined } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { cleanUndefined } from '../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index 78fbc57f9..bdf0d409f 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -1,3 +1,4 @@ +import { ServiceSchema, defineAction } from 'moleculer'; import attachAction from './actions/attach.ts'; import clearAction from './actions/clear.ts'; import createAction from './actions/create.ts'; @@ -14,7 +15,6 @@ import includesAction from './actions/includes.ts'; import postAction from './actions/post.ts'; import patchAction from './actions/patch.ts'; import { getDatasetFromUri } from '../../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const LdpContainerSchema = { name: 'ldp.container' as const, diff --git a/src/middleware/packages/ldp/services/link-header/index.ts b/src/middleware/packages/ldp/services/link-header/index.ts index ac28543b2..a17083edd 100644 --- a/src/middleware/packages/ldp/services/link-header/index.ts +++ b/src/middleware/packages/ldp/services/link-header/index.ts @@ -1,6 +1,6 @@ +import { ServiceSchema, defineAction } from 'moleculer'; import getAction from './actions/get.ts'; import registerAction from './actions/register.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const LdpLinkHeaderSchema = { name: 'ldp.link-header' as const, diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index 2c734e1f0..c7762fd99 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; + const { MoleculerError } = require('moleculer').Errors; /** diff --git a/src/middleware/packages/ldp/services/permissions/index.ts b/src/middleware/packages/ldp/services/permissions/index.ts index c140d7721..8b2483b35 100644 --- a/src/middleware/packages/ldp/services/permissions/index.ts +++ b/src/middleware/packages/ldp/services/permissions/index.ts @@ -1,7 +1,7 @@ +import { ServiceSchema, defineAction } from 'moleculer'; import addAuthorizerAction from './actions/addAuthorizer.ts'; import checkAction from './actions/check.ts'; import hasAction from './actions/has.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const PermissionsSchema = { name: 'permissions' as const, diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index c8ea3dcf3..82e947f70 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,9 +1,10 @@ import urlJoin from 'url-join'; import pathModule from 'path'; -const pathJoin = pathModule.join; import { pathToRegexp } from 'path-to-regexp'; -import { arrayOf } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { arrayOf } from '../../../utils.ts'; + +const pathJoin = pathModule.join; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 6a8803ad5..43136dbb3 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -1,11 +1,11 @@ import urlJoin from 'url-join'; +import { ServiceSchema } from 'moleculer'; import getByTypeAction from './actions/getByType.ts'; import getByUriAction from './actions/getByUri.ts'; import getUriAction from './actions/getUri.ts'; import listAction from './actions/list.ts'; import registerAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; -import { ServiceSchema } from 'moleculer'; const LdpRegistrySchema = { name: 'ldp.registry' as const, diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index a4789ca60..98f630a92 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,5 +1,5 @@ -import { cleanUndefined } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { cleanUndefined } from '../../../utils.ts'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index cdef5ce36..c53c02ca4 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,8 +1,9 @@ import fetch from 'node-fetch'; -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + const Schema = { visibility: 'public', params: { diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 11e67dcff..57f091b7e 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,5 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema } from 'moleculer'; + const { MoleculerError } = require('moleculer').Errors; const Schema = { diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index cc25e6ac2..281b59b45 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,6 +1,6 @@ import { Errors as E } from 'moleculer-web'; -import { hasType } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { hasType } from '../../../utils.ts'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index f81c630d4..31cabadf2 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,11 +1,11 @@ import Schedule from 'moleculer-schedule'; +import { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import getNetworkAction from './actions/getNetwork.ts'; import getStoredAction from './actions/getStored.ts'; import isRemoteAction from './actions/isRemote.ts'; import storeAction from './actions/store.ts'; -import { ServiceSchema } from 'moleculer'; const LdpRemoteSchema = { name: 'ldp.remote' as const, diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index 45bde3f6d..c1362915b 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -1,5 +1,5 @@ -import { waitForResource } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { waitForResource } from '../../../utils.ts'; /** @type {import('moleculer').ServiceActionsSchema} */ const Schema = { diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index fe85a03c6..8b0ac5440 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,7 +1,8 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + const Schema = { visibility: 'public', params: { diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index 50e9ae91e..1580e9d7c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,7 +1,8 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; -import { arrayOf } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { arrayOf } from '../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index c86db0f92..63c4ca2de 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,5 +1,5 @@ -import { getContainerFromUri } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { getContainerFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 8ba11f914..310602e01 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,7 +1,8 @@ -const { MoleculerError } = require('moleculer').Errors; import { namedNode } from '@rdfjs/data-model'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + function checkTriplesSubjectIsResource(triples, resourceUri) { for (const triple of triples) { switch (triple.subject.termType) { diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index ff18c67cb..7a32b702f 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,7 +1,8 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; -import { cleanUndefined } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { cleanUndefined } from '../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index 6f8f0ef66..abfe047b9 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -1,8 +1,9 @@ import path from 'path'; import fs from 'fs'; -const { MoleculerError } = require('moleculer').Errors; -import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index 06e7cddf0..2e5e287dc 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -1,3 +1,4 @@ +import { ServiceSchema, defineAction } from 'moleculer'; import awaitCreateCompleteAction from './actions/awaitCreateComplete.ts'; import getAction from './actions/get.ts'; import createAction from './actions/create.ts'; @@ -11,7 +12,6 @@ import getTypesAction from './actions/getTypes.ts'; import uploadAction from './actions/upload.ts'; import methods from './methods.ts'; import { getDatasetFromUri } from '../../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const LdpResourceSchema = { name: 'ldp.resource' as const, diff --git a/src/middleware/packages/ldp/services/resource/methods.ts b/src/middleware/packages/ldp/services/resource/methods.ts index a4c832585..53e308826 100644 --- a/src/middleware/packages/ldp/services/resource/methods.ts +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -1,6 +1,7 @@ import fs from 'fs'; import bytes from 'bytes'; import { variable } from '@rdfjs/data-model'; + const { MoleculerError } = require('moleculer').Errors; // TODO put each method in a different file (problems with "this" not working) diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index cb47d5936..2c197855a 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -1,4 +1,5 @@ import urlJoin from 'url-join'; + const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); const regexProtocolAndHostAndPort = new RegExp('^http(s)?:\\/\\/([\\w-\\.:]*)'); diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index 64962998a..d88f148b6 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -1,7 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import { negotiateTypeMime, MIME_TYPES } from '@semapps/mime-types'; import Busboy from 'busboy'; import streams from 'memory-streams'; + +const { MoleculerError } = require('moleculer').Errors; + const handledMimeTypes = [MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE, MIME_TYPES.SPARQL_UPDATE]; // Put requested URL and query string in meta so that services may use them independently diff --git a/src/middleware/packages/migration/index.ts b/src/middleware/packages/migration/index.ts index 0a4b503af..b96e5278a 100644 --- a/src/middleware/packages/migration/index.ts +++ b/src/middleware/packages/migration/index.ts @@ -1,2 +1,3 @@ import MigrationService from './service.ts'; + export { MigrationService }; diff --git a/src/middleware/packages/mime-types/index.ts b/src/middleware/packages/mime-types/index.ts index 4b9d1bb8e..edf6b82c4 100644 --- a/src/middleware/packages/mime-types/index.ts +++ b/src/middleware/packages/mime-types/index.ts @@ -1,7 +1,8 @@ import Negotiator from 'negotiator'; -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES, TYPES_REPO } from './constants.ts'; +const { MoleculerError } = require('moleculer').Errors; + const negotiateType = function (incomingType) { const availableMediaTypes = []; const negotiatorType = incomingType; diff --git a/src/middleware/packages/nodeinfo/index.ts b/src/middleware/packages/nodeinfo/index.ts index 1800a5e0d..916529fe9 100644 --- a/src/middleware/packages/nodeinfo/index.ts +++ b/src/middleware/packages/nodeinfo/index.ts @@ -1,2 +1,3 @@ import NodeinfoService from './service.ts'; + export { NodeinfoService }; diff --git a/src/middleware/packages/notifications/index.ts b/src/middleware/packages/notifications/index.ts index 713b7afa9..88fce6ba8 100644 --- a/src/middleware/packages/notifications/index.ts +++ b/src/middleware/packages/notifications/index.ts @@ -1,4 +1,5 @@ import DigestNotificationsService from './services/digest/service.ts'; import ExpoPushNotificationsService from './services/expo-push/service.ts'; import SingleMailNotificationsService from './services/single-mail/service.ts'; + export { DigestNotificationsService, ExpoPushNotificationsService, SingleMailNotificationsService }; diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index 4f84253fa..ad2ba87d6 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -1,8 +1,8 @@ import MailService from 'moleculer-mail'; import cronParser from 'cron-parser'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import DigestSubscriptionService from './subscription.ts'; import { ServiceSchema } from 'moleculer'; +import DigestSubscriptionService from './subscription.ts'; const DigestNotificationsService = { name: 'digest' as const, diff --git a/src/middleware/packages/notifications/services/expo-push/service.ts b/src/middleware/packages/notifications/services/expo-push/service.ts index e4c0ca191..8306fa9ae 100644 --- a/src/middleware/packages/notifications/services/expo-push/service.ts +++ b/src/middleware/packages/notifications/services/expo-push/service.ts @@ -1,7 +1,7 @@ import path from 'path'; +import { ServiceSchema } from 'moleculer'; import ExpoPushDeviceService from './device.ts'; import ExpoPushNotificationService from './notification.ts'; -import { ServiceSchema } from 'moleculer'; const ExpoPushService = { name: 'expo-push' as const, diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 519314808..1987811f2 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -3,6 +3,7 @@ import path from 'path'; import MailService from 'moleculer-mail'; import { getSlugFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; + const delay = t => new Promise(resolve => setTimeout(resolve, t)); const SingleMailNotificationsService = { diff --git a/src/middleware/packages/ontologies/actions/findPrefix.ts b/src/middleware/packages/ontologies/actions/findPrefix.ts index 121dd8520..c540541a3 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.ts +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -1,6 +1,6 @@ import fetch from 'node-fetch'; -import { isURL } from '../utils.ts'; import { ActionSchema } from 'moleculer'; +import { isURL } from '../utils.ts'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 24be240aa..6f21cbcbd 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -1,5 +1,6 @@ -import { isURL } from '../utils.ts'; import { ActionSchema } from 'moleculer'; +import { isURL } from '../utils.ts'; + const regexPrefix = /^([^:]+):([^:]+)$/gm; const Schema = { diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index 2a855aa57..33f9bb6c6 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -1,5 +1,5 @@ -import { isURL, arrayOf } from '../utils.ts'; import { ActionSchema } from 'moleculer'; +import { isURL, arrayOf } from '../utils.ts'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/index.ts b/src/middleware/packages/ontologies/index.ts index 45c739095..12036374b 100644 --- a/src/middleware/packages/ontologies/index.ts +++ b/src/middleware/packages/ontologies/index.ts @@ -1,5 +1,6 @@ import OntologiesService from './service.ts'; import OntologiesRegistryService from './sub-services/registry.ts'; + export * from './ontologies/core.ts'; export * from './ontologies/solid.ts'; export * from './ontologies/custom.ts'; diff --git a/src/middleware/packages/ontologies/ontologies/custom/index.ts b/src/middleware/packages/ontologies/ontologies/custom/index.ts index 04956286f..76cd198e3 100644 --- a/src/middleware/packages/ontologies/ontologies/custom/index.ts +++ b/src/middleware/packages/ontologies/ontologies/custom/index.ts @@ -7,4 +7,5 @@ import schema from './schema.json' with { type: 'json' }; import skos from './skos.json' with { type: 'json' }; import syreen from './syreen.json' with { type: 'json' }; import tutor from './tutor.json' with { type: 'json' }; + export { mp, oasis, og, pair, petr, schema, skos, syreen, tutor }; diff --git a/src/middleware/packages/ontologies/ontologies/solid/index.ts b/src/middleware/packages/ontologies/ontologies/solid/index.ts index e80e173ba..064cafe89 100644 --- a/src/middleware/packages/ontologies/ontologies/solid/index.ts +++ b/src/middleware/packages/ontologies/ontologies/solid/index.ts @@ -4,4 +4,5 @@ import notify from './notify.json' with { type: 'json' }; import oidc from './oidc.json' with { type: 'json' }; import pim from './pim.json' with { type: 'json' }; import solid from './solid.json' with { type: 'json' }; + export { apods, interop, notify, oidc, pim, solid }; diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index b7cc693d4..d0521099a 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -1,4 +1,5 @@ import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ServiceSchema, defineAction } from 'moleculer'; import OntologiesRegistryService from './sub-services/registry.ts'; import findPrefixAction from './actions/findPrefix.ts'; import findNamespaceAction from './actions/findNamespace.ts'; @@ -8,7 +9,6 @@ import getRdfPrefixesAction from './actions/getRdfPrefixes.ts'; import listAction from './actions/list.ts'; import prefixToUriAction from './actions/prefixToUri.ts'; import registerAction from './actions/register.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const OntologiesSchema = { name: 'ontologies' as const, diff --git a/src/middleware/packages/solid/index.ts b/src/middleware/packages/solid/index.ts index bebd3bee0..d84949694 100644 --- a/src/middleware/packages/solid/index.ts +++ b/src/middleware/packages/solid/index.ts @@ -5,6 +5,7 @@ import NotificationsListenerService from './services/notifications/listener.ts'; import PreferencesFileService from './services/preferences-file.ts'; import StorageService from './services/storage.ts'; import TypeIndexesService from './services/type-index/type-indexes.ts'; + export { AuthorizerService, EndpointService, diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index fdee9ab37..078d6ef11 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,6 +1,6 @@ import fetch from 'node-fetch'; -import NotificationChannelMixin from './notification-channel.mixin.ts'; import { ServiceSchema } from 'moleculer'; +import NotificationChannelMixin from './notification-channel.mixin.ts'; const queueOptions = process.env.NODE_ENV === 'test' diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index b9cc23199..62d4bcd35 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { v4 as uuidV4 } from 'uuid'; -import NotificationChannelMixin from './notification-channel.mixin.ts'; import { ServiceSchema } from 'moleculer'; +import NotificationChannelMixin from './notification-channel.mixin.ts'; /** @type {import('moleculer').ServiceSchema} */ const WebSocketChannel2023Service = { diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 0d00e1121..7a68b2a5c 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -4,12 +4,13 @@ import fetch from 'node-fetch'; import LinkHeader from 'http-link-header'; import { v4 as uuidv4 } from 'uuid'; import DbService from 'moleculer-db'; -const { MoleculerError } = require('moleculer').Errors; import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; import { notify } from '@semapps/ontologies'; import { TripleStoreAdapter } from '@semapps/triplestore'; import { ServiceSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + const SolidNotificationsListenerSchema = { name: 'solid-notifications.listener' as const, mixins: [DbService], diff --git a/src/middleware/packages/solid/services/notifications/provider.ts b/src/middleware/packages/solid/services/notifications/provider.ts index 6b181d6e8..ceeab40c1 100644 --- a/src/middleware/packages/solid/services/notifications/provider.ts +++ b/src/middleware/packages/solid/services/notifications/provider.ts @@ -1,8 +1,8 @@ import QueueMixin from 'moleculer-bull'; import { notify } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; import WebhookChannelService from './channels/webhook-channel.ts'; import WebSocketChannelService from './channels/websocket-channel.ts'; -import { ServiceSchema } from 'moleculer'; const SolidNotificationsProviderSchema = { name: 'solid-notifications.provider' as const, diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 34de11e5d..7bc76cf78 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -2,8 +2,8 @@ import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@sem import { solid, skos, apods } from '@semapps/ontologies'; import { MIME_TYPES } from '@semapps/mime-types'; import { namedNode, triple } from '@rdfjs/data-model'; -import TypeRegistrationsService from './type-registrations.ts'; import { ServiceSchema } from 'moleculer'; +import TypeRegistrationsService from './type-registrations.ts'; const TypeIndexesSchema = { name: 'type-indexes' as const, diff --git a/src/middleware/packages/sparql-endpoint/index.ts b/src/middleware/packages/sparql-endpoint/index.ts index 24566e00e..1a645c35a 100644 --- a/src/middleware/packages/sparql-endpoint/index.ts +++ b/src/middleware/packages/sparql-endpoint/index.ts @@ -1,2 +1,3 @@ import SparqlEndpointService from './service.ts'; + export { SparqlEndpointService }; diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index a392b8fb7..813230b5d 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -1,7 +1,7 @@ import path from 'path'; import urlJoin from 'url-join'; -import getRoute from './getRoute.ts'; import { ServiceSchema } from 'moleculer'; +import getRoute from './getRoute.ts'; const SparqlEndpointService = { name: 'sparqlEndpoint' as const, diff --git a/src/middleware/packages/sync/index.ts b/src/middleware/packages/sync/index.ts index 6e71e2311..367cd813f 100644 --- a/src/middleware/packages/sync/index.ts +++ b/src/middleware/packages/sync/index.ts @@ -2,4 +2,5 @@ import ObjectsWatcherMiddleware from './middlewares/objects-watcher.ts'; import AggregatorService from './services/aggregator.ts'; import MirrorService from './services/mirror.ts'; import SynchronizerService from './services/synchronizer.ts'; + export { ObjectsWatcherMiddleware, AggregatorService, MirrorService, SynchronizerService }; diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index e512dd50d..b3eca4b36 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -1,4 +1,5 @@ import { PUBLIC_URI, ACTIVITY_TYPES } from '@semapps/activitypub'; + const handledLdpActions = ['ldp.container.post', 'ldp.resource.put', 'ldp.resource.patch', 'ldp.resource.delete']; const handledWacActions = [ diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index c9ca8fc16..855f26e09 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -1,6 +1,6 @@ import { ActivitiesHandlerMixin, ACTIVITY_TYPES } from '@semapps/activitypub'; -import SynchronizerService from './synchronizer.ts'; import { ServiceSchema } from 'moleculer'; +import SynchronizerService from './synchronizer.ts'; const AggregatorSchema = { name: 'aggregator' as const, diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index a3d530942..9a6256c6e 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -1,10 +1,12 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; -const { MoleculerError } = require('moleculer').Errors; import { createFragmentURL, arrayOf } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; -import SynchronizerService from './synchronizer.ts'; import { ServiceSchema } from 'moleculer'; +import SynchronizerService from './synchronizer.ts'; + +const { MoleculerError } = require('moleculer').Errors; + const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); const MirrorSchema = { diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index a341a0647..9752aa2af 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -47,11 +47,11 @@ const SynchronizerService = { const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice return ( url === actorUri || - url.startsWith(actorUri + '/') || + url.startsWith(`${actorUri}/`) || url === aclBase || - url.startsWith(aclBase + '/') || + url.startsWith(`${aclBase}/`) || url === aclGroupBase || - url.startsWith(aclGroupBase + '/') + url.startsWith(`${aclGroupBase}/`) ); } else { const { origin } = new URL(actorUri); diff --git a/src/middleware/packages/triplestore/index.ts b/src/middleware/packages/triplestore/index.ts index 4cc5c012e..3f346b217 100644 --- a/src/middleware/packages/triplestore/index.ts +++ b/src/middleware/packages/triplestore/index.ts @@ -1,5 +1,6 @@ import DatasetService from './subservices/dataset.ts'; import TripleStoreAdapter from './adapter.ts'; import TripleStoreService from './service.ts'; + export * from './utils.ts'; export { DatasetService, TripleStoreAdapter, TripleStoreService }; diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 85a1d6c4d..2ea7e645b 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -1,9 +1,8 @@ import { SparqlJsonParser } from 'sparqljson-parse'; import sparqljsModule from 'sparqljs'; -const SparqlGenerator = sparqljsModule.Generator; -const { MoleculerError } = require('moleculer').Errors; import fetch from 'node-fetch'; import { throw403, throw500 } from '@semapps/middlewares'; +import { ServiceSchema, defineAction } from 'moleculer'; import countTriplesOfSubject from './actions/countTriplesOfSubject.ts'; import deleteOrphanBlankNodes from './actions/deleteOrphanBlankNodes.ts'; import dropAll from './actions/dropAll.ts'; @@ -13,7 +12,9 @@ import update from './actions/update.ts'; import tripleExist from './actions/tripleExist.ts'; import DatasetService from './subservices/dataset.ts'; import DocumentService from './subservices/document.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; + +const SparqlGenerator = sparqljsModule.Generator; +const { MoleculerError } = require('moleculer').Errors; const TripleStoreService = { name: 'triplestore' as const, diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 0be6378e0..a7eed09ad 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -4,6 +4,7 @@ import path from 'path'; import urlJoin from 'url-join'; import format from 'string-template'; import { ServiceSchema } from 'moleculer'; + const delay = t => new Promise(resolve => setTimeout(resolve, t)); /** @type {import('moleculer').ServiceSchema} */ diff --git a/src/middleware/packages/void/index.ts b/src/middleware/packages/void/index.ts index 3e31e8ebd..266cf6288 100644 --- a/src/middleware/packages/void/index.ts +++ b/src/middleware/packages/void/index.ts @@ -1,2 +1,3 @@ import VoidService from './service.ts'; + export { VoidService }; diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 1f45540b3..f49cc5874 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -3,12 +3,13 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { void as voidOntology } from '@semapps/ontologies'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; -const { quad, namedNode, literal, blankNode } = DataFactory; -const { MoleculerError } = require('moleculer').Errors; import { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } from '@semapps/ldp'; import { parseHeader } from '@semapps/middlewares'; import { ServiceSchema } from 'moleculer'; +const { quad, namedNode, literal, blankNode } = DataFactory; +const { MoleculerError } = require('moleculer').Errors; + const prefixes = { dc: 'http://purl.org/dc/terms/', void: 'http://rdfs.org/ns/void#', diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index b64ae34f3..a665cba9d 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -1,6 +1,6 @@ import { arrayOf } from '@semapps/ldp'; -import { hasType } from '../utils.ts'; import { ServiceSchema } from 'moleculer'; +import { hasType } from '../utils.ts'; const GroupsManagerSchema = { name: 'groups-manager' as const, diff --git a/src/middleware/packages/webacl/index.ts b/src/middleware/packages/webacl/index.ts index d8e7fac08..47fe64e70 100644 --- a/src/middleware/packages/webacl/index.ts +++ b/src/middleware/packages/webacl/index.ts @@ -3,5 +3,6 @@ import AuthorizerBot from './bots/authorizer-bot.ts'; import WebAclService from './service.ts'; import WebAclMiddleware from './middlewares/webacl.ts'; import CacherMiddleware from './middlewares/cacher.ts'; + export * from './utils.ts'; export { GroupsManagerBot, AuthorizerBot, WebAclService, WebAclMiddleware, CacherMiddleware }; diff --git a/src/middleware/packages/webacl/middlewares/cacher.ts b/src/middleware/packages/webacl/middlewares/cacher.ts index ced2ba016..cfe348d51 100644 --- a/src/middleware/packages/webacl/middlewares/cacher.ts +++ b/src/middleware/packages/webacl/middlewares/cacher.ts @@ -1,4 +1,5 @@ import { Cachers } from 'moleculer'; + let cacher; // It has been suggested to put this middleware in Moleculer core code: diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index c0929717e..056c8af20 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -1,10 +1,10 @@ import { acl, vcard, rdfs } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; import WebAclResourceService from './services/resource/index.ts'; import WebAclCacheService from './services/cache/index.ts'; import WebAclGroupService from './services/group/index.ts'; import WebAclAuthorizerService from './services/authorizer/index.ts'; import getRoutes from './routes/getRoutes.ts'; -import { ServiceSchema } from 'moleculer'; const WebaclSchema = { name: 'webacl' as const, diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index bee3ead44..790451ce4 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + export const api = async function api(ctx) { if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index a5bab83dd..e1cf30f77 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -1,9 +1,10 @@ -const { MoleculerError } = require('moleculer').Errors; import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + export const api = async function api(ctx) { if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index d3a63419f..cdf2282ae 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; + +const { MoleculerError } = require('moleculer').Errors; export const api = async function api(ctx) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index edccb034d..9f7f8db63 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + export const action = { visibility: 'public', params: { diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 3c291856f..1879ad0ce 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + export const api = async function api(ctx) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; return await ctx.call('webacl.group.getMembers', { diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 9fb568127..78e05e4a9 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + export const action = { visibility: 'public', params: { diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 83b9fd2d0..7b6aa4ee6 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -1,8 +1,9 @@ -const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + export const api = async function api(ctx) { if (!ctx.params.deleteUserUri) throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index de2515bb6..1c519c8a7 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -1,4 +1,5 @@ import urlJoin from 'url-join'; +import { ServiceSchema, defineAction } from 'moleculer'; import createAction from './actions/create.ts'; import deleteAction from './actions/delete.ts'; import existAction from './actions/exist.ts'; @@ -8,7 +9,6 @@ import getUriAction from './actions/getUri.ts'; import isMemberAction from './actions/isMember.ts'; import removeMemberAction from './actions/removeMember.ts'; import getGroupsAction from './actions/getGroups.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; const WebaclGroupSchema = { name: 'webacl.group' as const, diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index ed63343cd..7424cb862 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -1,7 +1,7 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, @@ -11,7 +11,7 @@ import { FULL_AGENTCLASS_URI } from '../../../utils.ts'; -import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; export const api = async function api(ctx) { const contentType = ctx.meta.headers['content-type']; diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index ec35ed385..dbbb10573 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -1,5 +1,5 @@ -import { getAclUriFromResourceUri } from '../../../utils.ts'; import { ActionSchema } from 'moleculer'; +import { getAclUriFromResourceUri } from '../../../utils.ts'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index adb5f3902..88cc2e3ee 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -1,10 +1,9 @@ import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; -const { quad } = DataFactory; import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; -const { MoleculerError } = require('moleculer').Errors; +import { ActionSchema } from 'moleculer'; import { getAuthorizationNode, findParentContainers, @@ -13,7 +12,8 @@ import { getUserAgentSearchParam } from '../../../utils.ts'; -import { ActionSchema } from 'moleculer'; +const { quad } = DataFactory; +const { MoleculerError } = require('moleculer').Errors; const prefixes = { acl: 'http://www.w3.org/ns/auth/acl#', diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index 5fb3ed566..db9ff6586 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; +import { ActionSchema } from 'moleculer'; import { getAuthorizationNode, checkAgentPresent, @@ -9,8 +10,6 @@ import { getAclUriFromResourceUri } from '../../../utils.ts'; -import { ActionSchema } from 'moleculer'; - const perms = { read: 'Read', write: 'Write', diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 359e9b8b4..022b3af33 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -1,8 +1,7 @@ -const { MoleculerError } = require('moleculer').Errors; - +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; -import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 1795e0c33..4dcf7a4f7 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -1,7 +1,7 @@ -const { MoleculerError } = require('moleculer').Errors; import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, @@ -10,7 +10,7 @@ import { FULL_FOAF_AGENT } from '../../../utils.ts'; -import { ActionSchema } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; export const api = async function api(ctx) { const contentType = ctx.meta.headers['content-type']; diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index a53368b75..e7ac1cb29 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -const { MoleculerError } = require('moleculer').Errors; +import { ServiceSchema, defineAction } from 'moleculer'; import addRights from './actions/addRights.ts'; import awaitReadRight from './actions/awaitReadRight.ts'; import deleteAllRights from './actions/deleteAllRights.ts'; @@ -26,7 +26,8 @@ import { getDatasetFromUri } from '../../utils.ts'; -import { ServiceSchema, defineAction } from 'moleculer'; +const { MoleculerError } = require('moleculer').Errors; + const filterAclsOnlyAgent = acl => agentPredicates.includes(acl.p.value); /** diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index 267b2d92f..86560e194 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -1,10 +1,12 @@ import { arrayOf } from '@semapps/ldp'; import { MIME_TYPES } from '@semapps/mime-types'; -const { MoleculerError } = require('moleculer').Errors; import urlJoin from 'url-join'; import { Parser } from 'n3'; import streamifyString from 'streamify-string'; import rdfparseModule from 'rdf-parse'; + +const { MoleculerError } = require('moleculer').Errors; + const rdfParser = rdfparseModule.default; const getSlugFromUri = str => str.match(new RegExp(`.*/(.*)`))[1]; diff --git a/src/middleware/packages/webfinger/index.ts b/src/middleware/packages/webfinger/index.ts index 2717e5175..c751dbb3d 100644 --- a/src/middleware/packages/webfinger/index.ts +++ b/src/middleware/packages/webfinger/index.ts @@ -1,2 +1,3 @@ import WebfingerService from './service.ts'; + export { WebfingerService }; diff --git a/src/middleware/packages/webhooks/index.ts b/src/middleware/packages/webhooks/index.ts index 5ac1ab24c..25b9778d8 100644 --- a/src/middleware/packages/webhooks/index.ts +++ b/src/middleware/packages/webhooks/index.ts @@ -1,2 +1,3 @@ import WebhooksService from './service.ts'; + export { WebhooksService }; diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index 563b610a5..d5aca0383 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -1,9 +1,10 @@ import path from 'path'; import DbService from 'moleculer-db'; -const { MoleculerError, ServiceSchemaError } = require('moleculer').Errors; import { TripleStoreAdapter } from '@semapps/triplestore'; import { ServiceSchema } from 'moleculer'; +const { MoleculerError, ServiceSchemaError } = require('moleculer').Errors; + const WebhooksService = { name: 'webhooks' as const, mixins: [DbService], diff --git a/src/middleware/packages/webid/index.ts b/src/middleware/packages/webid/index.ts index d8dc6b74b..7539a1099 100644 --- a/src/middleware/packages/webid/index.ts +++ b/src/middleware/packages/webid/index.ts @@ -1,2 +1,3 @@ import WebIdService from './service.ts'; + export { WebIdService }; diff --git a/src/middleware/tests/activitypub/actors.test.ts b/src/middleware/tests/activitypub/actors.test.ts index fb3e9633d..eb884d90f 100644 --- a/src/middleware/tests/activitypub/actors.test.ts +++ b/src/middleware/tests/activitypub/actors.test.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; import initialize from './initialize.ts'; + jest.setTimeout(70000); const NUM_USERS = 1; diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index 5b3fe8bfe..b4d41b5ec 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -3,6 +3,7 @@ import fetch from 'node-fetch'; import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; import CONFIG from '../config.ts'; + jest.setTimeout(50000); let broker; diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index de7c490f5..ba483f590 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import initialize from './initialize.ts'; import CONFIG from '../config.ts'; + jest.setTimeout(50000); let broker; diff --git a/src/middleware/tests/activitypub/follow.test.ts b/src/middleware/tests/activitypub/follow.test.ts index 5f7b287d0..78b59cd19 100644 --- a/src/middleware/tests/activitypub/follow.test.ts +++ b/src/middleware/tests/activitypub/follow.test.ts @@ -1,6 +1,7 @@ import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; + jest.setTimeout(50_000); const NUM_USERS = 2; diff --git a/src/middleware/tests/activitypub/inbox.test.ts b/src/middleware/tests/activitypub/inbox.test.ts index 15de2f1af..354bf199d 100644 --- a/src/middleware/tests/activitypub/inbox.test.ts +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -1,6 +1,7 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; + jest.setTimeout(50_000); let broker; let broker2; diff --git a/src/middleware/tests/activitypub/like.test.ts b/src/middleware/tests/activitypub/like.test.ts index 956f3c384..e450dad83 100644 --- a/src/middleware/tests/activitypub/like.test.ts +++ b/src/middleware/tests/activitypub/like.test.ts @@ -1,6 +1,7 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import initialize from './initialize.ts'; + jest.setTimeout(50000); const NUM_USERS = 2; diff --git a/src/middleware/tests/activitypub/message.test.ts b/src/middleware/tests/activitypub/message.test.ts index acce3738f..1bd2b6336 100644 --- a/src/middleware/tests/activitypub/message.test.ts +++ b/src/middleware/tests/activitypub/message.test.ts @@ -1,6 +1,7 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '@semapps/activitypub'; import initialize from './initialize.ts'; + jest.setTimeout(70000); const NUM_USERS = 2; diff --git a/src/middleware/tests/activitypub/object.test.ts b/src/middleware/tests/activitypub/object.test.ts index 75c1f1af8..bd9f3a69a 100644 --- a/src/middleware/tests/activitypub/object.test.ts +++ b/src/middleware/tests/activitypub/object.test.ts @@ -2,6 +2,7 @@ import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; import CONFIG from '../config.ts'; + jest.setTimeout(50000); let broker; diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index 30316de0e..3cd8a60ef 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -1,6 +1,7 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; + jest.setTimeout(50_000); let broker; let broker2; diff --git a/src/middleware/tests/activitypub/shares.test.ts b/src/middleware/tests/activitypub/shares.test.ts index 4d91e3376..d9b736d39 100644 --- a/src/middleware/tests/activitypub/shares.test.ts +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -1,6 +1,7 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import initialize from './initialize.ts'; + jest.setTimeout(50000); const NUM_USERS = 2; diff --git a/src/middleware/tests/config.ts b/src/middleware/tests/config.ts index ff246cfc0..0db329bff 100644 --- a/src/middleware/tests/config.ts +++ b/src/middleware/tests/config.ts @@ -9,4 +9,4 @@ export const SETTINGS_DATASET = process.env.SEMAPPS_SETTINGS_DATASET; export const JENA_USER = process.env.SEMAPPS_JENA_USER; export const JENA_PASSWORD = process.env.SEMAPPS_JENA_PASSWORD; export const ACTIVATE_CACHE = process.env.SEMAPPS_ACTIVATE_CACHE === 'true'; -export const FUSEKI_BASE = process.env.FUSEKI_BASE; +export const { FUSEKI_BASE } = process.env; diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index a35debae4..7707f88d1 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -2,6 +2,7 @@ import { KEY_TYPES } from '@semapps/crypto'; import { arrayOf, waitForResource } from '@semapps/ldp'; import { wait } from '../utils.ts'; import initialize from './initialize.ts'; + jest.setTimeout(100_000); /** @type {import('moleculer').ServiceBroker} */ diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index 7b846a8ef..4978d4d35 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -1,6 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import path from 'node:path'; import initialize from './initialize.ts'; + jest.setTimeout(45_000); const getChallengeFrom = async actor => { diff --git a/src/middleware/tests/interop/mirror-protected.test.ts b/src/middleware/tests/interop/mirror-protected.test.ts index df7556b13..4ec610b5a 100644 --- a/src/middleware/tests/interop/mirror-protected.test.ts +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -2,6 +2,7 @@ import urlJoin from 'url-join'; import waitForExpect from 'wait-for-expect'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; import initialize from './initialize.ts'; + jest.setTimeout(50000); let server1; let server2; diff --git a/src/middleware/tests/interop/mirror.test.ts b/src/middleware/tests/interop/mirror.test.ts index 920e11e71..c0cdca42e 100644 --- a/src/middleware/tests/interop/mirror.test.ts +++ b/src/middleware/tests/interop/mirror.test.ts @@ -2,6 +2,7 @@ import urlJoin from 'url-join'; import waitForExpect from 'wait-for-expect'; import { triple, namedNode } from '@rdfjs/data-model'; import initialize from './initialize.ts'; + jest.setTimeout(100000); let server1; let server2; diff --git a/src/middleware/tests/interop/patch-remote.test.ts b/src/middleware/tests/interop/patch-remote.test.ts index df0c8e6e6..b26b4dc19 100644 --- a/src/middleware/tests/interop/patch-remote.test.ts +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -1,6 +1,7 @@ import waitForExpect from 'wait-for-expect'; import { triple, namedNode } from '@rdfjs/data-model'; import initialize from './initialize.ts'; + jest.setTimeout(50000); let server1; let server2; diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index 8a71f0716..c0a67b45b 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -1,6 +1,7 @@ import { triple, namedNode } from 'rdf-data-model'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; + jest.setTimeout(100000); let server1; let server2; diff --git a/src/middleware/tests/jsonld/merge.test.ts b/src/middleware/tests/jsonld/merge.test.ts index 708fc0667..fdee5c3c9 100644 --- a/src/middleware/tests/jsonld/merge.test.ts +++ b/src/middleware/tests/jsonld/merge.test.ts @@ -1,4 +1,5 @@ import initialize from '../ontologies/initialize.ts'; + jest.setTimeout(10000); let broker; diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 0dd7c3a26..734868558 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -4,6 +4,7 @@ import waitForExpect from 'wait-for-expect'; import { fetchServer } from '../utils.ts'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index b33127408..90b594348 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -6,6 +6,7 @@ import { getSlugFromUri } from '@semapps/ldp'; import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; import CONFIG from '../config.ts'; + jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/ldp/container-path.test.ts b/src/middleware/tests/ldp/container-path.test.ts index e631b41b7..8df939419 100644 --- a/src/middleware/tests/ldp/container-path.test.ts +++ b/src/middleware/tests/ldp/container-path.test.ts @@ -1,4 +1,5 @@ import initialize from './initialize.ts'; + jest.setTimeout(10000); let broker; diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 8f45f4b07..99330900e 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -1,6 +1,7 @@ import waitForExpect from 'wait-for-expect'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 3e843ddaa..4a32288b7 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -4,6 +4,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { fetchServer } from '../utils.ts'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); let broker; @@ -17,7 +18,10 @@ afterAll(async () => { describe('Content negotiation', () => { const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let projectUri, project2Uri, project3Uri, project4Uri; + let projectUri; + let project2Uri; + let project3Uri; + let project4Uri; test('Post resource in JSON-LD', async () => { const { headers } = await fetchServer(containerUri, { diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index dfaeea7b7..cfd6f02f0 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -3,6 +3,7 @@ import { parse as parseLinkHeader } from 'http-link-header'; import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; import CONFIG from '../config.ts'; + jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 815bce87d..310498f99 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -1,12 +1,11 @@ import { ServiceBroker } from 'moleculer'; import fs from 'fs'; -import { join as pathJoin } from 'path'; +import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; import { pair, petr } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { ControlledContainerMixin } from '@semapps/ldp'; -import path from 'path'; import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index f4f8cef80..a4ac8e031 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,6 +1,7 @@ import { quad, namedNode, blankNode, literal } from 'rdf-data-model'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(50000); let broker; diff --git a/src/middleware/tests/ontologies/ontologies.test.ts b/src/middleware/tests/ontologies/ontologies.test.ts index 7cfd22d79..a2ef969e9 100644 --- a/src/middleware/tests/ontologies/ontologies.test.ts +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -6,6 +6,7 @@ import ont1 from './ontologies/ont1.json' with { type: 'json' }; import ont2 from './ontologies/ont2.json' with { type: 'json' }; import ont3 from './ontologies/ont3.json' with { type: 'json' }; import ont4 from './ontologies/ont4.json' with { type: 'json' }; + jest.setTimeout(10000); const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts index ea6bf6e27..5fa9ae785 100644 --- a/src/middleware/tests/webId/webId.test.ts +++ b/src/middleware/tests/webId/webId.test.ts @@ -3,6 +3,7 @@ import { ServiceBroker } from 'moleculer'; import { CoreService } from '@semapps/core'; import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; + jest.setTimeout(20000); const broker = new ServiceBroker({ diff --git a/src/middleware/tests/webacl/groupCRUD.test.ts b/src/middleware/tests/webacl/groupCRUD.test.ts index 6dbcf3182..fd9e17c99 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.ts +++ b/src/middleware/tests/webacl/groupCRUD.test.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts index 3cd2a1b12..c0020be54 100644 --- a/src/middleware/tests/webacl/resource.test.ts +++ b/src/middleware/tests/webacl/resource.test.ts @@ -1,6 +1,7 @@ import { namedNode, triple, literal } from '@rdfjs/data-model'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; diff --git a/src/middleware/tests/webacl/resourceCRUD.test.ts b/src/middleware/tests/webacl/resourceCRUD.test.ts index 64c4efc04..9c3af7e68 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.ts +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -3,6 +3,7 @@ import { getSlugFromUri } from '@semapps/ldp'; import { fetchServer } from '../utils.ts'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; let broker; diff --git a/src/middleware/tests/webacl/sparql-injection.test.ts b/src/middleware/tests/webacl/sparql-injection.test.ts index 18abde16b..65a9e21b7 100644 --- a/src/middleware/tests/webacl/sparql-injection.test.ts +++ b/src/middleware/tests/webacl/sparql-injection.test.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); let broker; diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts index a11ffc7bf..985839d21 100644 --- a/src/middleware/tests/webacl/utils.test.ts +++ b/src/middleware/tests/webacl/utils.test.ts @@ -1,5 +1,6 @@ import CONFIG from '../config.ts'; import initialize from './initialize.ts'; + jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; From 0300aac4056df3e7ed1b9c0fdbcfd2cebe0f3cb1 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:52:17 +0300 Subject: [PATCH 061/165] remove unused ts-expect --- .../services/activitypub/subservices/actor.ts | 3 -- .../services/activitypub/subservices/api.ts | 3 -- .../subservices/collections-registry.ts | 14 ------- .../activitypub/subservices/object.ts | 1 - src/middleware/packages/core/service.ts | 1 - src/middleware/packages/crypto/keys/keys.ts | 3 -- .../packages/crypto/signature/keypair.ts | 3 -- src/middleware/packages/inference/service.ts | 41 ------------------- src/middleware/packages/ldp/adapter.ts | 2 - .../packages/ldp/mixins/document-tagger.ts | 2 - .../ldp/mixins/single-resource-container.ts | 1 - .../packages/ldp/services/api/actions/put.ts | 4 -- .../packages/ldp/services/cache/index.ts | 12 ------ .../packages/ldp/services/container/index.ts | 5 --- .../ldp/services/link-header/index.ts | 1 - .../ldp/services/permissions/index.ts | 2 - .../packages/ldp/services/registry/index.ts | 2 - .../packages/ldp/services/remote/index.ts | 2 - .../services/single-mail/service.ts | 8 ---- .../channels/notification-channel.mixin.ts | 7 ---- .../solid/services/type-index/type-indexes.ts | 4 -- .../packages/sparql-endpoint/service.ts | 1 - .../packages/webacl/bots/authorizer-bot.ts | 6 --- .../packages/webacl/bots/groups-manager.ts | 11 ----- .../packages/webacl/services/cache/index.ts | 6 --- .../packages/webacl/services/group/index.ts | 2 - .../webacl/services/resource/index.ts | 6 --- src/middleware/tests/jsonld/initialize.ts | 1 - src/middleware/tests/ontologies/initialize.ts | 1 - 29 files changed, 155 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 5ef8420f5..77c9bedad 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -194,9 +194,7 @@ const ActorService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; - // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message if (this.isActor(newData)) { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); await ctx.call('signature.keypair.generate', { actorUri: resourceUri }); await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); @@ -208,7 +206,6 @@ const ActorService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; - // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message if (this.isActor(oldData)) { await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index 125c20c12..832a33400 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -95,14 +95,11 @@ const ApiService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'container' does not exist on type 'Optio... Remove this comment to see the full error message const { container } = ctx.params; - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message const { pathname: basePath } = new URL(this.settings.baseUri); - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { key: 'resourcesWithContainerPath' }); if ( - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message !this.settings.podProvider && resourcesWithContainerPath && arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 73c08ae20..071862977 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -265,16 +265,12 @@ const CollectionsRegistryService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; - // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { - // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message if (this.isActor(newData.type || newData['@type'])) { // If the resource is an actor, use the resource URI as the webId - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } else { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } } @@ -286,18 +282,13 @@ const CollectionsRegistryService = { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; // Check if we need to create collection only if the type has changed - // @ts-expect-error TS(2339): Property 'hasTypeChanged' does not exist on type '... Remove this comment to see the full error message if (this.hasTypeChanged(oldData, newData)) { - // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { - // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message if (this.isActor(newData.type || newData['@type'])) { // If the resource is an actor, use the resource URI as the webId - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } else { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } } @@ -312,19 +303,15 @@ const CollectionsRegistryService = { if (triplesAdded) { for (const triple of triplesAdded) { if (triple.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { - // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message const collections = this.getCollectionsByType(triple.object.value); for (const collection of collections) { - // @ts-expect-error TS(2339): Property 'isActor' does not exist on type 'Service... Remove this comment to see the full error message if (this.isActor(triple.object.value)) { // If the resource is an actor, use the resource URI as the webId - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createAndAttachCollection( { objectUri: resourceUri, collection }, { parentCtx: ctx } ); } else { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createAndAttachCollection( { objectUri: resourceUri, collection }, { parentCtx: ctx } @@ -341,7 +328,6 @@ const CollectionsRegistryService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message const { oldData } = ctx.params; - // @ts-expect-error TS(2339): Property 'getCollectionsByType' does not exist on ... Remove this comment to see the full error message const collections = this.getCollectionsByType(oldData.type || oldData['@type']); for (const collection of collections) { // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 2a8a68de7..493f04b80 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -203,7 +203,6 @@ const ObjectService = { 'ldp.resource.deleted': { async handler(ctx) { // Check if tombstones are globally activated - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.activateTombstones) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, containersUris, oldData, dataset } = ctx.params; diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 2a0cc94f8..7463868ad 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -123,7 +123,6 @@ const CoreService = { }); } - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ontologies"; ... Remove this comment to see the full error message this.broker.createService({ mixins: [OntologiesService], settings: { diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index c67abf111..3d5f64a7b 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -625,7 +625,6 @@ const KeysService = { events: { 'keys.migration.migrated': { async handler() { - // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message this.isMigrated = true; } }, @@ -635,7 +634,6 @@ const KeysService = { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; - // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message if (!this.isMigrated) { // Key creation will be handled by legacy service. return; @@ -661,7 +659,6 @@ const KeysService = { // Create, publish and attach keys to the webId. await Promise.all([ - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.RSA }, { parentCtx: ctx }), // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index b2d761a7f..beaf5f46c 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -231,14 +231,11 @@ const SignatureService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; - // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message if (this.isMigrated) { return; } - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.generate({ actorUri: webId }, { parentCtx: ctx }); - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); } }, diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index a7fe00c68..3f92f6912 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -157,29 +157,22 @@ const InferenceSchema = { let { newData } = ctx.params; newData = await ctx.call('jsonld.parser.expand', { input: newData }); - // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message let triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); - // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message const [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); // Avoid adding inverse link to non-existent resources - // @ts-expect-error TS(2339): Property 'filterMissingResources' does not exist o... Remove this comment to see the full error message triplesToAdd = await this.filterMissingResources(ctx, addLocals); // local data if (triplesToAdd.length > 0) { - // @ts-expect-error TS(2339): Property 'generateInsertQuery' does not exist on t... Remove this comment to see the full error message await ctx.call('triplestore.update', { query: this.generateInsertQuery(triplesToAdd), webId: 'system' }); - // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message this.cleanResourcesCache(ctx, triplesToAdd); } // remote data - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.offerToRemoteServers) { for (const triple of addRemotes) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message await this.broker.call('inference.remote.offerInference', { subject: triple.subject.id, predicate: triple.predicate.id, @@ -197,24 +190,18 @@ const InferenceSchema = { let { oldData } = ctx.params; oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); - // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); - // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); if (removeLocals.length > 0) { - // @ts-expect-error TS(2339): Property 'generateDeleteQuery' does not exist on t... Remove this comment to see the full error message await ctx.call('triplestore.update', { query: this.generateDeleteQuery(removeLocals), webId: 'system' }); - // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message this.cleanResourcesCache(ctx, removeLocals); } // remote data - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.offerToRemoteServers) { for (const triple of removeRemotes) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message await this.broker.call('inference.remote.offerInference', { subject: triple.subject.id, predicate: triple.predicate.id, @@ -233,55 +220,42 @@ const InferenceSchema = { oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); newData = await ctx.call('jsonld.parser.expand', { input: newData }); - // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message const triplesToRemove = this.generateInverseTriplesFromResource(oldData[0]); - // @ts-expect-error TS(2339): Property 'generateInverseTriplesFromResource' does... Remove this comment to see the full error message const triplesToAdd = this.generateInverseTriplesFromResource(newData[0]); // Filter out triples which are removed and added at the same time - // @ts-expect-error TS(2339): Property 'getTriplesDifference' does not exist on ... Remove this comment to see the full error message const filteredTriplesToAdd = this.getTriplesDifference(triplesToAdd, triplesToRemove); - // @ts-expect-error TS(2339): Property 'getTriplesDifference' does not exist on ... Remove this comment to see the full error message const filteredTriplesToRemove = this.getTriplesDifference(triplesToRemove, triplesToAdd); - // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message let [addLocals, addRemotes] = this.splitLocalAndRemote(filteredTriplesToAdd); - // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message const [removeLocals, removeRemotes] = this.splitLocalAndRemote(filteredTriplesToRemove); // Dealing with locals first // Avoid adding inverse link to non-existent resources - // @ts-expect-error TS(2339): Property 'filterMissingResources' does not exist o... Remove this comment to see the full error message addLocals = await this.filterMissingResources(ctx, addLocals); if (removeLocals.length > 0) { await ctx.call('triplestore.update', { - // @ts-expect-error TS(2339): Property 'generateDeleteQuery' does not exist on t... Remove this comment to see the full error message query: this.generateDeleteQuery(removeLocals), webId: 'system' }); - // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message this.cleanResourcesCache(ctx, removeLocals); } if (addLocals.length > 0) { await ctx.call('triplestore.update', { - // @ts-expect-error TS(2339): Property 'generateInsertQuery' does not exist on t... Remove this comment to see the full error message query: this.generateInsertQuery(addLocals), webId: 'system' }); - // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message this.cleanResourcesCache(ctx, addLocals); } // Dealing with remotes // remote relationships are sent to relay actor of remote server - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.offerToRemoteServers) { for (const triple of addRemotes) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message await this.broker.call('inference.remote.offerInference', { subject: triple.subject.id, predicate: triple.predicate.id, @@ -290,7 +264,6 @@ const InferenceSchema = { }); } for (const triple of removeRemotes) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message await this.broker.call('inference.remote.offerInference', { subject: triple.subject.id, predicate: triple.predicate.id, @@ -310,49 +283,38 @@ const InferenceSchema = { // If the patch is done following a remote inference offer if (skipInferenceCheck) return; - // @ts-expect-error TS(2339): Property 'generateInverseTriples' does not exist o... Remove this comment to see the full error message const triplesToAdd = this.generateInverseTriples(triplesAdded); - // @ts-expect-error TS(2339): Property 'generateInverseTriples' does not exist o... Remove this comment to see the full error message const triplesToRemove = this.generateInverseTriples(triplesRemoved); - // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message let [addLocals, addRemotes] = this.splitLocalAndRemote(triplesToAdd); - // @ts-expect-error TS(2339): Property 'splitLocalAndRemote' does not exist on t... Remove this comment to see the full error message const [removeLocals, removeRemotes] = this.splitLocalAndRemote(triplesToRemove); // Dealing with locals first // Avoid adding inverse link to non-existent resources - // @ts-expect-error TS(2339): Property 'filterMissingResources' does not exist o... Remove this comment to see the full error message addLocals = await this.filterMissingResources(ctx, addLocals); if (removeLocals.length > 0) { await ctx.call('triplestore.update', { - // @ts-expect-error TS(2339): Property 'generateDeleteQuery' does not exist on t... Remove this comment to see the full error message query: this.generateDeleteQuery(removeLocals), webId: 'system' }); - // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message this.cleanResourcesCache(ctx, removeLocals); } if (addLocals.length > 0) { await ctx.call('triplestore.update', { - // @ts-expect-error TS(2339): Property 'generateInsertQuery' does not exist on t... Remove this comment to see the full error message query: this.generateInsertQuery(addLocals), webId: 'system' }); - // @ts-expect-error TS(2339): Property 'cleanResourcesCache' does not exist on t... Remove this comment to see the full error message this.cleanResourcesCache(ctx, addLocals); } // Dealing with remotes // remote relationships are sent to relay actor of remote server - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.offerToRemoteServers) { for (const triple of addRemotes) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message await this.broker.call('inference.remote.offerInference', { subject: triple.subject.id, predicate: triple.predicate.id, @@ -361,7 +323,6 @@ const InferenceSchema = { }); } for (const triple of removeRemotes) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'ServiceE... Remove this comment to see the full error message await this.broker.call('inference.remote.offerInference', { subject: triple.subject.id, predicate: triple.predicate.id, @@ -378,9 +339,7 @@ const InferenceSchema = { // @ts-expect-error TS(2339): Property 'owl' does not exist on type 'Optionalize... Remove this comment to see the full error message const { owl } = ctx.params; if (owl) { - // @ts-expect-error TS(2339): Property 'findInverseRelations' does not exist on ... Remove this comment to see the full error message const result = await this.findInverseRelations(owl); - // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${owl}`); // @ts-expect-error TS(2339): Property 'inverseRelations' does not exist on type... Remove this comment to see the full error message this.inverseRelations = { ...this.inverseRelations, ...result }; diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts index 3cb8c9e3b..babfda0bd 100644 --- a/src/middleware/packages/ldp/adapter.ts +++ b/src/middleware/packages/ldp/adapter.ts @@ -118,7 +118,6 @@ class LdpAdapter { insert(entity: any) { const { slug, ...resource } = entity; - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message return ( this.broker // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message @@ -171,7 +170,6 @@ class LdpAdapter { // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message if (!_id.startsWith('http')) _id = urlJoin(this.service.schema.settings.containerUri, _id); - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message return ( this.broker // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 27aaed52b..5eaea07d4 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -73,7 +73,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, webId, dataset } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message this.actions.tagCreatedResource( // @ts-expect-error TS(2339): Property 'impersonatedUser' does not exist on type... Remove this comment to see the full error message { resourceUri, newData, webId: ctx.meta.impersonatedUser || webId, dataset }, @@ -86,7 +85,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } }, diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index 6de006be2..eecda17c8 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -112,7 +112,6 @@ const Schema = { events: { 'auth.registered': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.podProvider) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 4c1b148c6..043691b88 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -18,19 +18,16 @@ export default { const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); - // @ts-expect-error if (ctx.meta.parser === 'file') { throw new MoleculerError(`PUT method is not supported for non-RDF resources`, 400, 'BAD_REQUEST'); } try { - // @ts-expect-error const contentType = ctx.meta.headers['content-type']; // If the body is in Turtle or N-Triples, first convert it to JSON-LD if (contentType && contentType !== MIME_TYPES.JSON) { resource = await ctx.call('jsonld.parser.fromRDF', { - // @ts-expect-error input: ctx.meta.rawBody, options: { format: contentType } }); @@ -38,7 +35,6 @@ export default { await ctx.call(controlledActions.put || 'ldp.resource.put', { resource }); - // @ts-expect-error ctx.meta.$statusCode = 204; // @ts-expect-error ctx.meta.$responseHeaders = { diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index 7b497b3c9..fa6702b7b 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -50,7 +50,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } }, @@ -59,7 +58,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } }, @@ -68,7 +66,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } }, @@ -77,7 +74,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } }, @@ -86,7 +82,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } }, @@ -95,7 +90,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } }, @@ -104,7 +98,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } }, @@ -113,7 +106,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } }, @@ -122,7 +114,6 @@ const LdpCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } }, @@ -133,10 +124,8 @@ const LdpCacheSchema = { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, dataset } = ctx.params; if (isContainer) { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); } else { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); } } @@ -147,7 +136,6 @@ const LdpCacheSchema = { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, dataset } = ctx.params; if (isContainer) { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); } else { // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index 5fa19164a..e85eaa2ac 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -25,22 +25,17 @@ const LdpContainerSchema = { }, dependencies: ['triplestore', 'jsonld'], actions: { - // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message attach: attachAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message clear: clearAction, create: createAction, createAndAttach: createAndAttachAction, delete: deleteAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message detach: detachAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message exist: existAction, get: getAction, getAll: getAllAction, getPath: getPathAction, getUris: getUrisAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message includes: includesAction, // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message isEmpty: isEmptyAction, diff --git a/src/middleware/packages/ldp/services/link-header/index.ts b/src/middleware/packages/ldp/services/link-header/index.ts index c577437fa..75f2636e7 100644 --- a/src/middleware/packages/ldp/services/link-header/index.ts +++ b/src/middleware/packages/ldp/services/link-header/index.ts @@ -5,7 +5,6 @@ import registerAction from './actions/register.ts'; const LdpLinkHeaderSchema = { name: 'ldp.link-header' as const, actions: { - // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; }, ... Remove this comment to see the full error message get: getAction, // @ts-expect-error TS(2322): Type 'ActionSchema<{ actionName: { type: "string";... Remove this comment to see the full error message register: registerAction diff --git a/src/middleware/packages/ldp/services/permissions/index.ts b/src/middleware/packages/ldp/services/permissions/index.ts index 44c18d0cf..fa75391af 100644 --- a/src/middleware/packages/ldp/services/permissions/index.ts +++ b/src/middleware/packages/ldp/services/permissions/index.ts @@ -6,9 +6,7 @@ import hasAction from './actions/has.ts'; const PermissionsSchema = { name: 'permissions' as const, actions: { - // @ts-expect-error TS(2322): Type 'ActionSchema<{ actionName: { type: "string";... Remove this comment to see the full error message addAuthorizer: addAuthorizerAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; typ... Remove this comment to see the full error message check: checkAction, // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; typ... Remove this comment to see the full error message has: hasAction diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 6855d0afd..885045030 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -19,7 +19,6 @@ const LdpRegistrySchema = { actions: { getByType: getByTypeAction, getByUri: getByUriAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ path: { type: "string"; }; we... Remove this comment to see the full error message getUri: getUriAction, list: listAction, register: registerAction @@ -43,7 +42,6 @@ const LdpRegistrySchema = { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId, accountData } = ctx.params; // We want to add user's containers only in Pod provider config - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.podProvider) { const storageUrl = await ctx.call('solid-storage.getUrl', { webId }); // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index be31e6b3d..6b8d3e58c 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -19,10 +19,8 @@ const LdpRemoteSchema = { }, dependencies: ['triplestore', 'jsonld'], actions: { - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message delete: deleteAction, get: getAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message getGraph: getGraphAction, getNetwork: getNetworkAction, getStored: getStoredAction, diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 4c688cfbb..610fce59b 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -6,7 +6,6 @@ import { getSlugFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; -// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); @@ -31,9 +30,7 @@ const SingleMailNotificationsService = { // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message const { activity, recipients } = ctx.params; - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message if (this.settings.delay) { - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message await delay(this.settings.delay); } @@ -46,23 +43,18 @@ const SingleMailNotificationsService = { // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = this.settings.podProvider ? getSlugFromUri(recipientUri) : undefined; - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message const locale = account?.preferredLocale || this.settings.defaultLocale; const notification = await ctx.call('activity-mapping.map', { activity, locale }); - // @ts-expect-error TS(2339): Property 'filterNotification' does not exist on ty... Remove this comment to see the full error message if (notification && (await this.filterNotification(notification, activity, recipientUri))) { if (notification.actionLink) - // @ts-expect-error TS(2339): Property 'formatLink' does not exist on type 'Serv... Remove this comment to see the full error message notification.actionLink = await this.formatLink(notification.actionLink, recipientUri); - // @ts-expect-error TS(2339): Property 'queueMail' does not exist on type 'Servi... Remove this comment to see the full error message await this.queueMail(ctx, notification.key, { to: account.email, locale, data: { ...notification, - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message color: this.settings.color, descriptionWithBr: notification.description ? notification.description.replace(/\r\n|\r|\n/g, '
') diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index c26a532e0..a4f964509 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -170,7 +170,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; - // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); } }, @@ -179,7 +178,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; - // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); } }, @@ -188,7 +186,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); } }, @@ -197,7 +194,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'onResourceEvent' does not exist on type ... Remove this comment to see the full error message this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); } }, @@ -206,7 +202,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); } }, @@ -215,7 +210,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); } }, @@ -227,7 +221,6 @@ const Schema = { // Mastodon sometimes send unfetchable activities (like `Accept` activities) // In this case, we receive the activity as `item` and `itemUri` is undefined // We will send a notification to the listener with the whole activity - // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message this.onContainerOrCollectionEvent(collectionUri, itemUri || item, ACTIVITY_TYPES.ADD); } }, diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 83520b0cb..df1951e07 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -19,7 +19,6 @@ const TypeIndexesSchema = { }, dependencies: ['ontologies'], created() { - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "type-registra... Remove this comment to see the full error message this.broker.createService({ mixins: [TypeRegistrationsService] }); @@ -199,16 +198,13 @@ const TypeIndexesSchema = { const { webId } = ctx.params; // Wait until the /solid/type-index container has been created for the user - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message const indexesContainerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.waitForContainerCreation({ containerUri: indexesContainerUri }, { parentCtx: ctx }); // Wait until the /solid/type-registration container has been created for the user const registrationsContainerUri = await ctx.call('type-registrations.getContainerUri', { webId }); await ctx.call('type-registrations.waitForContainerCreation', { containerUri: registrationsContainerUri }); - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 5edb93f4c..8839cee94 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -1,4 +1,3 @@ -// @ts-expect-error import path from 'path'; import urlJoin from 'url-join'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index c69f1a5cb..0e0a13c2b 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -35,11 +35,8 @@ const AuthorizerBotSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message for (const rule of this.settings.rules) { - // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message if (this.matchRule(rule, newData)) { - // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message const users = this.getUsers(rule, newData); for (const user of users) { await ctx.call('webacl.resource.addRights', { @@ -70,11 +67,8 @@ const AuthorizerBotSchema = { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message for (const rule of this.settings.rules) { - // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message if (this.matchRule(rule, newData)) { - // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message const newUsers = this.getUsers(rule, newData); // @ts-expect-error TS(2339): Property 'getUsers' does not exist on type 'Servic... Remove this comment to see the full error message const oldUsers = this.getUsers(rule, oldData); diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index c9df943e9..799e64281 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -70,13 +70,9 @@ const GroupsManagerSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; - // @ts-expect-error TS(2339): Property 'isUser' does not exist on type 'ServiceE... Remove this comment to see the full error message if (this.isUser(newData)) { - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message for (const rule of this.settings.rules) { - // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message if (this.matchRule(rule, newData)) { - // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); await ctx.call('webacl.group.addMember', { groupSlug: rule.groupSlug, @@ -93,13 +89,9 @@ const GroupsManagerSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; - // @ts-expect-error TS(2339): Property 'isUser' does not exist on type 'ServiceE... Remove this comment to see the full error message if (this.isUser(newData)) { - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message for (const rule of this.settings.rules) { - // @ts-expect-error TS(2339): Property 'matchRule' does not exist on type 'Servi... Remove this comment to see the full error message if (this.matchRule(rule, newData)) { - // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message this.logger.info(`Adding user ${resourceUri} to group ${rule.groupSlug}`); await ctx.call('webacl.group.addMember', { groupSlug: rule.groupSlug, @@ -107,7 +99,6 @@ const GroupsManagerSchema = { webId: 'system' }); } else { - // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); await ctx.call('webacl.group.removeMember', { groupSlug: rule.groupSlug, @@ -124,9 +115,7 @@ const GroupsManagerSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; - // @ts-expect-error TS(2339): Property 'isUser' does not exist on type 'ServiceE... Remove this comment to see the full error message if (this.isUser(oldData)) { - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message for (const rule of this.settings.rules) { // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message this.logger.info(`Removing user ${resourceUri} from group ${rule.groupSlug} (if it exists)`); diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index 9b0b16105..f74f51931 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -72,7 +72,6 @@ const WebaclCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, defaultRightsUpdated } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResourceRights( { uri, specificUriOnly: !isContainer || !defaultRightsUpdated }, { parentCtx: ctx } @@ -84,7 +83,6 @@ const WebaclCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); } }, @@ -93,7 +91,6 @@ const WebaclCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); } }, @@ -102,9 +99,7 @@ const WebaclCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); } }, @@ -113,7 +108,6 @@ const WebaclCacheSchema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index 070906e66..8a7addf31 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -20,12 +20,10 @@ const WebaclGroupSchema = { }, dependencies: ['triplestore', 'webacl.resource', 'ldp.container'], actions: { - // @ts-expect-error TS(2322): Type 'ActionSchema<{ groupSlug: { type: "string"; ... Remove this comment to see the full error message getUri: getUriAction.action, isMember: isMemberAction.action, exist: existAction.action, // Actions accessible through the API - // @ts-expect-error TS(2322): Type 'ActionSchema<{ groupSlug: { type: "string"; ... Remove this comment to see the full error message addMember: addMemberAction.action, api_addMember: addMemberAction.api, create: createAction.action, diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index 2a9d3346d..86ce1ab6b 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -54,18 +54,12 @@ const WebaclResourceSchema = { }, actions: { addRights: addRights.action, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message awaitReadRight: awaitReadRight.action, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message deleteAllRights: deleteAllRights.action, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ webId: { type: "string"; opti... Remove this comment to see the full error message deleteAllUserRights: deleteAllUserRights.action, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; option... Remove this comment to see the full error message getLink: getLink.action, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message getRights: getRights.action, hasRights: hasRights.action, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message isPublic: isPublic.action, // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message getUsersWithReadRights: getUsersWithReadRights.action, diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index 2eeac6c3b..e7641852a 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -8,7 +8,6 @@ import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; import { clearDataset } from '../utils.ts'; -// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default async (cacher: any, persistRegistry: any) => { diff --git a/src/middleware/tests/ontologies/initialize.ts b/src/middleware/tests/ontologies/initialize.ts index 657e84017..ed92538ed 100644 --- a/src/middleware/tests/ontologies/initialize.ts +++ b/src/middleware/tests/ontologies/initialize.ts @@ -8,7 +8,6 @@ import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; import { clearDataset } from '../utils.ts'; -// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default async (cacher: any) => { From 754b3428fd44f084b085aee44677778a3c5d665b Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 14:05:03 +0300 Subject: [PATCH 062/165] tsconfig to strict --- src/middleware/tsconfig.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/middleware/tsconfig.json b/src/middleware/tsconfig.json index 8c56e0c0b..4151f7087 100644 --- a/src/middleware/tsconfig.json +++ b/src/middleware/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "lib": ["ESNext"], - "allowJs": true, + "allowJs": false, "checkJs": false, "resolveJsonModule": true, "declaration": true, @@ -10,13 +10,17 @@ "skipLibCheck": true, "sourceMap": true, "strictNullChecks": true, + "strict": true, "module": "NodeNext", "moduleResolution": "NodeNext", "resolvePackageJsonExports": true, "esModuleInterop": true, "resolvePackageJsonImports": true, - "allowImportingTsExtensions": true + "allowSyntheticDefaultImports": true, + "allowImportingTsExtensions": true, + "outDir": "dist/", + "rootDir": "./", + "typeRoots": ["node_modules/types", "types"] }, - "include": ["**/*.js", "**/*.ts"], - "exclude": [] + "exclude": ["**/dist"] } From 9571fccf8ce55e2be577b978d87ec46fd59a108e Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 14:06:08 +0300 Subject: [PATCH 063/165] explicit any --- .../packages/activitypub/constants.ts | 3 +- .../activitypub/mixins/await-activity.ts | 4 +- .../packages/activitypub/mixins/fake-queue.ts | 4 +- .../activitypub/services/activity-mapping.ts | 2 +- .../activity-handlers/setRightsHandler.ts | 4 +- .../activitypub/subservices/activity.ts | 2 +- .../subservices/collection/actions/get.ts | 24 ++++---- .../subservices/collection/index.ts | 2 +- .../subservices/collections-registry.ts | 18 +++--- .../activitypub/subservices/follow.ts | 10 ++-- .../services/activitypub/subservices/inbox.ts | 4 +- .../services/activitypub/subservices/like.ts | 8 +-- .../activitypub/subservices/object.ts | 4 +- .../activitypub/subservices/outbox.ts | 2 +- .../services/activitypub/subservices/reply.ts | 10 ++-- .../services/activitypub/subservices/share.ts | 8 +-- .../activitypub/subservices/side-effects.ts | 10 ++-- src/middleware/packages/activitypub/utils.ts | 18 +++--- .../activitypub/utils/matchActivity.ts | 2 +- .../packages/auth/middlewares/localLogout.ts | 2 +- .../auth/middlewares/redirectToFront.ts | 2 +- .../auth/middlewares/saveRedirectUrl.ts | 2 +- .../packages/auth/middlewares/sendToken.ts | 2 +- src/middleware/packages/auth/mixins/auth.ts | 10 ++-- .../packages/auth/services/account.ts | 6 +- .../packages/auth/services/auth.cas.ts | 6 +- .../packages/auth/services/auth.local.ts | 6 +- .../packages/auth/services/auth.oidc.ts | 6 +- src/middleware/packages/backup/index.ts | 2 +- .../packages/backup/utils/fsCopy.ts | 2 +- .../packages/backup/utils/fsRemove.ts | 6 +- .../packages/backup/utils/ftpCopy.ts | 4 +- .../packages/backup/utils/ftpRemove.ts | 4 +- .../packages/backup/utils/rsyncCopy.ts | 4 +- src/middleware/packages/core/service.ts | 4 +- .../packages/crypto/keys/key-container.ts | 4 +- src/middleware/packages/crypto/keys/keys.ts | 2 +- .../packages/crypto/keys/migration.ts | 4 +- .../crypto/keys/public-key-container.ts | 4 +- .../crypto/signature/http-signatures.ts | 6 +- .../packages/crypto/signature/proxy.ts | 10 ++-- src/middleware/packages/crypto/utils/utils.ts | 4 +- .../VcCapabilityPresentationProofPurpose.ts | 2 +- .../verifiable-credentials/VcPurpose.ts | 4 +- .../data-integrity-service.ts | 2 +- .../vc-authorizer-service.ts | 2 +- .../vc-credential-container.ts | 4 +- .../vc-holder-service.ts | 2 +- .../vc-issuer-service.ts | 2 +- .../vc-presentation-container.ts | 2 +- .../vc-verifier-service.ts | 2 +- .../packages/importer/mixins/discourse.ts | 5 +- .../packages/importer/mixins/drupal.ts | 6 +- .../packages/importer/mixins/gogocarto.ts | 2 +- .../packages/importer/mixins/humhub.ts | 12 ++-- .../packages/importer/mixins/importer.ts | 20 ++++--- .../packages/importer/mixins/jotform.ts | 6 +- .../packages/importer/mixins/mobilizon.ts | 3 +- .../packages/importer/mixins/prestashop.ts | 6 +- .../packages/importer/mixins/wordpress.ts | 2 +- .../packages/importer/mixins/yeswiki.ts | 8 +-- src/middleware/packages/importer/utils.ts | 12 ++-- src/middleware/packages/inference/service.ts | 4 +- .../packages/inference/subservices/remote.ts | 4 +- .../jsonld/services/context/actions/get.ts | 2 +- .../services/context/actions/getLocal.ts | 6 +- .../jsonld/services/document-loader/index.ts | 2 +- .../packages/jsonld/services/parser/index.ts | 20 +++---- src/middleware/packages/jsonld/utils/utils.ts | 14 ++--- src/middleware/packages/ldp/adapter.ts | 36 +++++------ .../packages/ldp/mixins/disassembly.ts | 2 +- .../packages/ldp/routes/getCatchAllRoute.ts | 2 +- .../packages/ldp/routes/getPodsRoute.ts | 4 +- .../ldp/services/api/actions/delete.ts | 2 +- .../packages/ldp/services/api/actions/get.ts | 2 +- .../packages/ldp/services/api/actions/head.ts | 2 +- .../ldp/services/api/actions/patch.ts | 2 +- .../packages/ldp/services/api/actions/post.ts | 2 +- .../packages/ldp/services/api/actions/put.ts | 2 +- .../ldp/services/container/actions/get.ts | 2 +- .../ldp/services/container/actions/getAll.ts | 2 +- .../ldp/services/container/actions/getUris.ts | 2 +- .../ldp/services/container/actions/patch.ts | 2 +- .../permissions/actions/addAuthorizer.ts | 2 +- .../services/registry/actions/getByType.ts | 2 +- .../ldp/services/registry/actions/register.ts | 2 +- .../ldp/services/registry/defaultOptions.ts | 4 +- .../ldp/services/remote/actions/get.ts | 4 +- .../packages/ldp/services/remote/index.ts | 4 +- .../resource/actions/getContainers.ts | 2 +- .../ldp/services/resource/actions/getTypes.ts | 2 +- .../ldp/services/resource/actions/patch.ts | 2 +- .../ldp/services/resource/actions/put.ts | 4 +- .../packages/ldp/services/resource/methods.ts | 44 +++++++------- src/middleware/packages/ldp/utils.ts | 46 +++++++------- src/middleware/packages/middlewares/index.ts | 34 +++++------ src/middleware/packages/mime-types/index.ts | 12 ++-- .../notifications/services/digest/service.ts | 2 +- .../services/expo-push/notification.ts | 6 +- .../services/single-mail/service.ts | 4 +- .../ontologies/actions/getPrefixes.ts | 4 +- .../ontologies/actions/getRdfPrefixes.ts | 4 +- .../ontologies/sub-services/registry.ts | 2 +- src/middleware/packages/ontologies/utils.ts | 4 +- .../channels/notification-channel.mixin.ts | 14 ++--- .../notifications/channels/webhook-channel.ts | 4 +- .../channels/websocket-channel.ts | 18 +++--- .../solid/services/notifications/listener.ts | 10 ++-- .../solid/services/type-index/type-indexes.ts | 2 +- .../services/type-index/type-registrations.ts | 4 +- .../packages/sparql-endpoint/getRoute.ts | 4 +- .../sync/middlewares/objects-watcher.ts | 40 ++++++------- .../packages/sync/services/aggregator.ts | 2 +- .../packages/sync/services/synchronizer.ts | 10 ++-- .../packages/triplestore/adapter.ts | 42 ++++++------- .../triplestore/subservices/dataset.ts | 4 +- src/middleware/packages/triplestore/utils.ts | 6 +- src/middleware/packages/void/service.ts | 38 ++++++------ .../packages/webacl/bots/authorizer-bot.ts | 4 +- .../packages/webacl/middlewares/cacher.ts | 10 ++-- .../packages/webacl/middlewares/webacl.ts | 12 ++-- .../packages/webacl/routes/getRoutes.ts | 4 +- .../webacl/services/authorizer/index.ts | 2 +- .../services/group/actions/addMember.ts | 2 +- .../webacl/services/group/actions/create.ts | 2 +- .../webacl/services/group/actions/delete.ts | 2 +- .../services/group/actions/getGroups.ts | 4 +- .../services/group/actions/getMembers.ts | 4 +- .../services/group/actions/removeMember.ts | 2 +- .../packages/webacl/services/group/index.ts | 6 +- .../services/resource/actions/addRights.ts | 16 ++--- .../resource/actions/awaitReadRight.ts | 2 +- .../services/resource/actions/getRights.ts | 22 +++---- .../actions/getUsersWithReadRights.ts | 2 +- .../services/resource/actions/hasRights.ts | 20 +++---- .../services/resource/actions/setRights.ts | 20 +++---- .../webacl/services/resource/index.ts | 2 +- src/middleware/packages/webacl/utils.ts | 60 +++++++++++-------- src/middleware/packages/webfinger/service.ts | 2 +- src/middleware/packages/webhooks/service.ts | 4 +- .../tests/activitypub/actors.test.ts | 8 +-- .../tests/activitypub/collection-api.test.ts | 8 +-- .../tests/activitypub/collection.test.ts | 14 ++--- .../tests/activitypub/follow.test.ts | 14 ++--- .../tests/activitypub/inbox.test.ts | 8 +-- .../tests/activitypub/initialize.ts | 2 +- src/middleware/tests/activitypub/like.test.ts | 14 ++--- .../tests/activitypub/message.test.ts | 16 ++--- .../tests/activitypub/object.test.ts | 6 +- .../tests/activitypub/outbox.test.ts | 10 ++-- .../tests/activitypub/shares.test.ts | 16 ++--- src/middleware/tests/crypto/initialize.ts | 2 +- src/middleware/tests/crypto/keys.test.ts | 16 ++--- .../crypto/verifiable-credentials.test.ts | 18 +++--- src/middleware/tests/interop/initialize.ts | 8 ++- .../tests/interop/mirror-protected.test.ts | 8 +-- src/middleware/tests/interop/mirror.test.ts | 6 +- .../tests/interop/patch-remote.test.ts | 6 +- .../tests/interop/remote-inference.test.ts | 8 +-- src/middleware/tests/jest.setup.ts | 2 +- src/middleware/tests/jsonld/initialize.ts | 2 +- src/middleware/tests/jsonld/merge.test.ts | 4 +- src/middleware/tests/ldp/api.test.ts | 8 +-- src/middleware/tests/ldp/binary.test.ts | 8 +-- .../tests/ldp/container-path.test.ts | 6 +- src/middleware/tests/ldp/container.test.ts | 4 +- .../tests/ldp/content-negotiation.test.ts | 10 ++-- src/middleware/tests/ldp/headers.test.ts | 2 +- src/middleware/tests/ldp/resource.test.ts | 8 +-- src/middleware/tests/ontologies/initialize.ts | 2 +- .../tests/ontologies/ontologies.test.ts | 4 +- src/middleware/tests/utils.ts | 10 ++-- src/middleware/tests/webacl/groupCRUD.test.ts | 2 +- src/middleware/tests/webacl/initialize.ts | 2 +- src/middleware/tests/webacl/resource.test.ts | 4 +- .../tests/webacl/resourceCRUD.test.ts | 4 +- .../tests/webacl/sparql-injection.test.ts | 2 +- src/middleware/tests/webacl/utils.test.ts | 4 +- 178 files changed, 686 insertions(+), 643 deletions(-) diff --git a/src/middleware/packages/activitypub/constants.ts b/src/middleware/packages/activitypub/constants.ts index 8e1d68d2c..fd4e5ab92 100644 --- a/src/middleware/packages/activitypub/constants.ts +++ b/src/middleware/packages/activitypub/constants.ts @@ -1,4 +1,5 @@ -const appendPrefix = types => Object.fromEntries(Object.entries(types).map(([key, value]) => [key, AS_PREFIX + value])); +const appendPrefix = (types: any) => + Object.fromEntries(Object.entries(types).map(([key, value]) => [key, AS_PREFIX + value])); const AS_PREFIX = 'https://www.w3.org/ns/activitystreams#'; const PUBLIC_URI = `${AS_PREFIX}Public`; diff --git a/src/middleware/packages/activitypub/mixins/await-activity.ts b/src/middleware/packages/activitypub/mixins/await-activity.ts index d0ca34ddf..57212ba5d 100644 --- a/src/middleware/packages/activitypub/mixins/await-activity.ts +++ b/src/middleware/packages/activitypub/mixins/await-activity.ts @@ -9,13 +9,13 @@ import matchActivity from '../utils/matchActivity.ts'; */ const AwaitActivityMixin = { actions: { - async awaitActivity(ctx) { + async awaitActivity(ctx: any) { const { collectionUri, matcher, maxTries = 60, delayMs = 500, publishedAfter } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let match = false; let dereferencedActivity; - const fetcher = async resourceUri => { + const fetcher = async (resourceUri: any) => { try { const resource = await ctx.call('ldp.resource.get', { resourceUri, diff --git a/src/middleware/packages/activitypub/mixins/fake-queue.ts b/src/middleware/packages/activitypub/mixins/fake-queue.ts index 530b850b0..bbe55a7a8 100644 --- a/src/middleware/packages/activitypub/mixins/fake-queue.ts +++ b/src/middleware/packages/activitypub/mixins/fake-queue.ts @@ -6,14 +6,14 @@ */ const FakeQueueMixin = { methods: { - async createJob(queueName, jobName, data, opts) { + async createJob(queueName: any, jobName: any, data: any, opts: any) { this.logger.warn(`QueueMixin not configured, calling job directly`); if (!this.schema.queues[queueName]) throw new Error(`No queue found with key ${queueName}`); try { // TODO add all job properties https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md#job await this.schema.queues[queueName].process.bind(this)({ data, - log: (...args) => { + log: (...args: any[]) => { this.logger.info(...args); }, progress: () => {} diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 0609acabf..2fd47cc96 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -111,7 +111,7 @@ const ActivityMappingService = { return matchActivity(ctx, pattern, activityOrObject); }, prioritizeMappers() { - this.mappers.sort((a, b) => b.priority - a.priority); + this.mappers.sort((a: any, b: any) => b.priority - a.priority); }, compileObject(object) { return ( diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts index f719ba418..84e75d598 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts @@ -24,7 +24,7 @@ import { ACTIVITY_TYPES } from '../../../../constants.ts'; // ); // }; -const addReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatcher, anon }) => { +const addReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatcher, anon }: any) => { if (recipientUris?.length === 0 && !anon) return; await ctx.call( 'webacl.resource.addRights', @@ -52,7 +52,7 @@ const addReadRights = async ({ ctx, recipientUris, resourceUri, skipObjectsWatch const setRightsHandler = { match: '*', priority: 1, - async onEmit(ctx, activity) { + async onEmit(ctx: any, activity: any) { const activityUri = getId(activity); const newRecipients = await ctx.call('activitypub.activity.getRecipients', { activity }); const activityIsPublic = await ctx.call('activitypub.activity.isPublic', { activity }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 5c71d02af..0c3e0898d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -83,7 +83,7 @@ const ActivityService = { async handler(ctx) { const { activity } = ctx.params; const recipients = await this.actions.getRecipients({ activity }, { parentCtx: ctx }); - return recipients.filter(recipientUri => this.isLocalActor(recipientUri)); + return recipients.filter((recipientUri: any) => this.isLocalActor(recipientUri)); } }, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index f29629629..6e7947bbf 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -11,7 +11,7 @@ const { MoleculerError } = require('moleculer').Errors; * @param {string} webId - The webId of the user requesting the collection * @returns {Promise} The collection metadata */ -async function getCollectionMetadata(ctx, collectionUri, webId, dataset) { +async function getCollectionMetadata(ctx: any, collectionUri: any, webId: any, dataset: any) { const results = await ctx.call('triplestore.query', { query: ` PREFIX as: @@ -40,7 +40,7 @@ async function getCollectionMetadata(ctx, collectionUri, webId, dataset) { return Object.fromEntries(Object.entries(results[0]).map(([key, result]) => [key, getValueFromDataType(result)])); } -async function verifyCursorExists(ctx, collectionUri, cursor, dataset) { +async function verifyCursorExists(ctx: any, collectionUri: any, cursor: any, dataset: any) { const cursorResult = await ctx.call('triplestore.query', { query: ` PREFIX as: @@ -60,7 +60,7 @@ async function verifyCursorExists(ctx, collectionUri, cursor, dataset) { } } -async function validateCursorParams(ctx, collectionUri, beforeEq, afterEq, dataset) { +async function validateCursorParams(ctx: any, collectionUri: any, beforeEq: any, afterEq: any, dataset: any) { if (beforeEq && afterEq) { throw new MoleculerError('Cannot get a collection with both beforeEq and afterEq', 400, 'BAD_REQUEST'); } @@ -76,7 +76,7 @@ async function validateCursorParams(ctx, collectionUri, beforeEq, afterEq, datas * @param {object} options - The collection options * @returns {Promise} The collection item URIs */ -async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { +async function fetchCollectionItemURIs(ctx: any, collectionUri: any, options: any, dataset: any) { const query = ` PREFIX as: SELECT DISTINCT ?itemUri @@ -114,7 +114,7 @@ async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { // Filter out the nodes that don't have an itemUri // and return the itemUris values instead of the nodes - return result.filter(node => node.itemUri).map(node => node.itemUri.value); + return result.filter((node: any) => node.itemUri).map((node: any) => node.itemUri.value); } /** @@ -127,7 +127,7 @@ async function fetchCollectionItemURIs(ctx, collectionUri, options, dataset) { * @param {string} afterEq - The cursor to start the pagination from * @returns {object} The paginated items, previous cursor, next cursor, first item, last item */ -function applyPagination(allItemURIs, beforeEq, afterEq) { +function applyPagination(allItemURIs: any, beforeEq: any, afterEq: any) { let prevCursorUri; let nextCursorUri; let itemURIs = allItemURIs; @@ -137,13 +137,13 @@ function applyPagination(allItemURIs, beforeEq, afterEq) { if (beforeEq) { // If there is a beforeEq cursor, reduce the items array to the items before the cursor, including the cursor itself // and determine the cursor uri to use for the "next" link - const index = itemURIs.findIndex(item => item === beforeEq); + const index = itemURIs.findIndex((item: any) => item === beforeEq); nextCursorUri = itemURIs[index + 1]; itemURIs = itemURIs.slice(0, index + 1); } else if (afterEq) { // If there is an afterEq cursor, reduce the items array to the items after the cursor, including the cursor itself // and determine the cursor uri to use for the "prev" link - const index = itemURIs.findIndex(item => item === afterEq); + const index = itemURIs.findIndex((item: any) => item === afterEq); prevCursorUri = itemURIs[index - 1]; itemURIs = itemURIs.slice(index); } @@ -169,7 +169,7 @@ function applyPagination(allItemURIs, beforeEq, afterEq) { * @param {object} cursorDirection - The direction of the requested cursor * @returns {object} The selected and (possibly) dereferenced items, previous item uri, next item uri */ -async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, cursorDirection) { +async function selectAndDereferenceItems(ctx: any, allItemURIs: any, options: any, webId: any, cursorDirection: any) { let selectedItems = []; let itemUri = null; let nextItemUri = null; @@ -225,7 +225,7 @@ async function selectAndDereferenceItems(ctx, allItemURIs, options, webId, curso }; } -const formatOptions = options => ({ +const formatOptions = (options: any) => ({ summary: options.summary, 'semapps:dereferenceItems': options.dereferenceItems, 'semapps:itemsPerPage': options.itemsPerPage, @@ -234,7 +234,7 @@ const formatOptions = options => ({ }); function formatResponse( - ctx, + ctx: any, { items, options, @@ -246,7 +246,7 @@ function formatResponse( beforeEq, afterEq, localContext - } + }: any ) { const itemsProp = options.ordered ? 'orderedItems' : 'items'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index a2f4fcd15..4a7083e21 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -21,7 +21,7 @@ const CollectionService = { permissions: {}, // These default permissions can be overridden by providing // a `permissions` param when calling activitypub.collection.post - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { switch (webId) { case 'anon': case 'system': diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index f5e9d3f09..4ab5343db 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -91,7 +91,7 @@ const CollectionsRegistryService = { ); // Now the collection has been created, we can remove it (this way we don't use too much memory) - this.collectionsInCreation = this.collectionsInCreation.filter(c => c !== collectionUri); + this.collectionsInCreation = this.collectionsInCreation.filter((c: any) => c !== collectionUri); } return collectionUri; @@ -117,7 +117,7 @@ const CollectionsRegistryService = { this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); const accounts = await this.broker.call('auth.account.find'); - const datasets = this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; + const datasets = this.settings.podProvider ? accounts.map((a: any) => a.username) : [undefined]; for (let dataset of datasets) { // Find all containers where we want to attach this collection @@ -153,7 +153,11 @@ const CollectionsRegistryService = { sortOrder = sortOrder && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortOrder })); const accounts = await this.broker.call('auth.account.find'); - const datasets = dataset ? [dataset] : this.settings.podProvider ? accounts.map(a => a.username) : [undefined]; + const datasets = dataset + ? [dataset] + : this.settings.podProvider + ? accounts.map((a: any) => a.username) + : [undefined]; for (dataset of datasets) { this.logger.info( @@ -173,7 +177,7 @@ const CollectionsRegistryService = { dataset }); - for (const collectionUri of results.map(r => r.collectionUri.value)) { + for (const collectionUri of results.map((r: any) => r.collectionUri.value)) { if (this.isLocalObject(collectionUri, urlJoin(this.settings.baseUri, dataset))) { this.logger.info(`Updating options of ${collectionUri}...`); await ctx.call('triplestore.update', { @@ -221,10 +225,10 @@ const CollectionsRegistryService = { getCollectionsByType(types) { types = arrayOf(types); return types.length > 0 - ? this.registeredCollections.filter(collection => + ? this.registeredCollections.filter((collection: any) => types - .map(type => type.replace(AS_PREFIX, '')) // Remove AS prefix if it is set - .some(type => + .map((type: any) => type.replace(AS_PREFIX, '')) // Remove AS prefix if it is set + .some((type: any) => Array.isArray(collection.attachToTypes) ? collection.attachToTypes.includes(type) : collection.attachToTypes === type diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index 96aa75d80..4a3031cd3 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -143,7 +143,7 @@ const FollowService = { match: { type: ACTIVITY_TYPES.FOLLOW }, - async onReceive(ctx, activity) { + async onReceive(ctx: any, activity: any) { const { '@context': context, ...activityObject } = activity; const actor = await ctx.call('activitypub.actor.get', { actorUri: activity.object }); @@ -173,7 +173,7 @@ const FollowService = { type: ACTIVITY_TYPES.FOLLOW } }, - async onReceive(ctx, activity) { + async onReceive(ctx: any, activity: any) { await this.actions.addFollower( { follower: activity.object.actor, @@ -190,7 +190,7 @@ const FollowService = { type: ACTIVITY_TYPES.FOLLOW } }, - async onEmit(ctx, activity) { + async onEmit(ctx: any, activity: any) { await this.actions.removeFollower( { follower: activity.object.actor || activity.actor, @@ -199,7 +199,7 @@ const FollowService = { { parentCtx: ctx } ); }, - async onReceive(ctx, activity) { + async onReceive(ctx: any, activity: any) { await this.actions.removeFollower( { follower: activity.object.actor || activity.actor, @@ -219,7 +219,7 @@ const FollowService = { } } }, - async onReceive(ctx, activity) { + async onReceive(ctx: any, activity: any) { await this.actions.removeFollower( { follower: activity.object.object.actor || activity.actor, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index bb6036f4b..683e1f5ec 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -176,7 +176,9 @@ const InboxService = { const activities = []; - for (const activityUri of results.filter(node => node.activityUri).map(node => node.activityUri.value)) { + for (const activityUri of results + .filter((node: any) => node.activityUri) + .map((node: any) => node.activityUri.value)) { const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri, webId: 'system' }); activities.push(activity); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 346e150d5..51c690df2 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -113,7 +113,7 @@ const LikeService = { match: { type: ACTIVITY_TYPES.LIKE }, - async onEmit(ctx, activity, emitterUri) { + async onEmit(ctx: any, activity: any, emitterUri: any) { if (!activity?.object) throw new Error(`No object in the Like activity`); await this.actions.addObjectToActorLikedCollection( { actorUri: activity.actor, objectUri: activity.object }, @@ -127,7 +127,7 @@ const LikeService = { ); } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (this.isLocalObject(activity.object, recipientUri)) { if (!activity?.object) throw new Error(`No object in the Like activity`); await this.actions.addActorToObjectLikesCollection( @@ -144,7 +144,7 @@ const LikeService = { type: ACTIVITY_TYPES.LIKE } }, - async onEmit(ctx, activity, emitterUri) { + async onEmit(ctx: any, activity: any, emitterUri: any) { if (!activity.object?.object) throw new Error(`No object in the Like activity`); await this.actions.removeObjectFromActorLikedCollection( { actorUri: activity.actor, objectUri: activity.object.object }, @@ -158,7 +158,7 @@ const LikeService = { ); } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (this.isLocalObject(activity.object.object, recipientUri)) { if (!activity.object?.object) throw new Error(`No object in the Like activity`); await this.actions.removeActorFromObjectLikesCollection( diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 947403e01..73e195570 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -190,7 +190,9 @@ const ObjectService = { resource: { '@id': resourceUri, '@type': 'https://www.w3.org/ns/activitystreams#Tombstone', - 'https://www.w3.org/ns/activitystreams#formerType': expandedFormerTypes.map(type => ({ '@id': type })), + 'https://www.w3.org/ns/activitystreams#formerType': expandedFormerTypes.map((type: any) => ({ + '@id': type + })), 'https://www.w3.org/ns/activitystreams#deleted': { '@value': new Date().toISOString(), '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index dd97c900c..aba8a1a22 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -275,7 +275,7 @@ const OutboxService = { queues: { remotePost: { name: '*', - async process(job) { + async process(job: any) { const { activity, recipientUri } = job.data; // During tests, do not do post to remote servers diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index b649fb756..68d2a3542 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -87,7 +87,7 @@ const ReplyService = { }, activities: { postReply: { - async match(activity, fetcher) { + async match(activity: any, fetcher: any) { const { match, dereferencedActivity } = await matchActivity( { type: ACTIVITY_TYPES.CREATE, @@ -101,7 +101,7 @@ const ReplyService = { // We have a match only if there is a inReplyTo predicate to the object return { match: match && dereferencedActivity.object.inReplyTo, dereferencedActivity }; }, - async onEmit(ctx, activity, emitterUri) { + async onEmit(ctx: any, activity: any, emitterUri: any) { if (this.isLocalObject(activity.object.inReplyTo, emitterUri)) { await this.actions.addReply( { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, @@ -109,7 +109,7 @@ const ReplyService = { ); } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (this.isLocalObject(activity.object.inReplyTo, recipientUri)) { await this.actions.addReply( { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, @@ -126,10 +126,10 @@ const ReplyService = { formerType: 'as:Note' // JSON-LD doesn't remove prefixes for subjects } }, - async onEmit(ctx, activity) { + async onEmit(ctx: any, activity: any) { await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); }, - async onReceive(ctx, activity) { + async onReceive(ctx: any, activity: any) { await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); } } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index 900ad3f24..ef702672f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -63,7 +63,7 @@ const ShareService = { }, activities: { shareObject: { - async match(activity, fetcher) { + async match(activity: any, fetcher: any) { const { match, dereferencedActivity } = await matchActivity( { // looking for an announce activity @@ -77,12 +77,12 @@ const ShareService = { dereferencedActivity }; }, - async onReceive(ctx, activity) { + async onReceive(ctx: any, activity: any) { await this.actions.addShare({ objectUri: activity.object, announce: activity }, { parentCtx: ctx }); } }, unshareObject: { - async match(activity, fetcher) { + async match(activity: any, fetcher: any) { const { match, dereferencedActivity } = await matchActivity( { // looking for an undo activity targeting an announce activity @@ -96,7 +96,7 @@ const ShareService = { ); return { match, dereferencedActivity }; }, - async onReceive(ctx, activity) { + async onReceive(ctx: any, activity: any) { await this.actions.removeShare( { objectUri: activity.object?.object, announce: activity.object }, { parentCtx: ctx } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index a510fb8b5..5af2f340c 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -27,7 +27,7 @@ const ActivitypubSideEffectsSchema = { this.processors.push({ matcher, actionName, boxTypes, key, priority, capabilityGrantMatchFnGenerator }); // Sort processors by priority - this.processors.sort((a, b) => a.priority - b.priority); + this.processors.sort((a: any, b: any) => a.priority - b.priority); } }, @@ -285,7 +285,7 @@ const ActivitypubSideEffectsSchema = { // the activitypub.outbox.post action is called by a processor, the jobs queue will halt // (the first job will stay in active state, the other one in pending state) concurrency: 5, - async process(job) { + async process(job: any) { const { activity, recipients } = job.data; const startTime = performance.now(); let errors = []; @@ -306,7 +306,7 @@ const ActivitypubSideEffectsSchema = { const dataset = this.settings.podProvider ? await this.broker.call('auth.account.findDatasetByWebId', { webId: recipientUri }) : undefined; - const fetcher = resourceUri => this.fetch(resourceUri, recipientUri, dataset); + const fetcher = (resourceUri: any) => this.fetch(resourceUri, recipientUri, dataset); for (const processor of this.processors) { if (processor.boxTypes.includes('inbox')) { @@ -360,7 +360,7 @@ const ActivitypubSideEffectsSchema = { // the activitypub.outbox.post action is called by a processor, the jobs queue will halt // (the first job will stay in active state, the other one in pending state) concurrency: 5, - async process(job) { + async process(job: any) { const { activity } = job.data; const emitterUri = activity.actor; const startTime = performance.now(); @@ -370,7 +370,7 @@ const ActivitypubSideEffectsSchema = { const dataset = this.settings.podProvider ? await this.broker.call('auth.account.findDatasetByWebId', { webId: emitterUri }) : undefined; - const fetcher = resourceUri => this.fetch(resourceUri, emitterUri, dataset); + const fetcher = (resourceUri: any) => this.fetch(resourceUri, emitterUri, dataset); for (const processor of this.processors) { if (processor.boxTypes.includes('outbox')) { diff --git a/src/middleware/packages/activitypub/utils.ts b/src/middleware/packages/activitypub/utils.ts index 0c6d4be93..55fdc2a3c 100644 --- a/src/middleware/packages/activitypub/utils.ts +++ b/src/middleware/packages/activitypub/utils.ts @@ -1,4 +1,4 @@ -const collectionPermissionsWithAnonRead = webId => { +const collectionPermissionsWithAnonRead = (webId: any) => { const permissions = { anon: { read: true @@ -17,14 +17,14 @@ const collectionPermissionsWithAnonRead = webId => { return permissions; }; -const getSlugFromUri = str => str.match(new RegExp(`.*/(.*)`))[1]; +const getSlugFromUri = (str: any) => str.match(new RegExp(`.*/(.*)`))[1]; /** @deprecated Use the ldp.resource.getContainers action instead */ -const getContainerFromUri = str => str.match(new RegExp(`(.*)/.*`))[1]; +const getContainerFromUri = (str: any) => str.match(new RegExp(`(.*)/.*`))[1]; -const delay = t => new Promise(resolve => setTimeout(resolve, t)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -44,8 +44,8 @@ const arrayOf = value => { * `undefined`. * @type {import("./utilTypes").waitForResource} */ -const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { - let result; +const waitForResource = async (delayMs: any, fieldNames: any, maxTries: any, callback: any) => { + let result: any; for (let i = 0; i < maxTries; i += 1) { result = await callback(); // If a result (and the expected field, if required) is present, return. @@ -55,7 +55,7 @@ const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { await delay(delayMs); } - const missingProperties = result && fieldNames.filter(fieldName => !Object.keys(result).includes(fieldName)); + const missingProperties = result && fieldNames.filter((fieldName: any) => !Object.keys(result).includes(fieldName)); throw new Error( `Waiting for resource failed. No results after ${maxTries} tries. The resource is ${ @@ -64,7 +64,7 @@ const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { ); }; -const getValueFromDataType = result => { +const getValueFromDataType = (result: any) => { switch (result.datatype?.value) { case 'http://www.w3.org/2001/XMLSchema#boolean': return result.value === 'true'; diff --git a/src/middleware/packages/activitypub/utils/matchActivity.ts b/src/middleware/packages/activitypub/utils/matchActivity.ts index 44869b078..d5410e1e4 100644 --- a/src/middleware/packages/activitypub/utils/matchActivity.ts +++ b/src/middleware/packages/activitypub/utils/matchActivity.ts @@ -8,7 +8,7 @@ import { arrayOf } from '@semapps/ldp'; * @param {(resourceUri) => Promise} fetcher Fetch the resources and return it in JSON-LD format, or false if the fetch failed * @returns {object} The dereferenced activity / object. */ -const matchActivity = async (matcher, activity, fetcher) => { +const matchActivity = async (matcher: any, activity: any, fetcher: any) => { if (!matcher) return { match: false, dereferencedActivity: activity }; if (matcher === '*') return { match: true, dereferencedActivity: activity }; diff --git a/src/middleware/packages/auth/middlewares/localLogout.ts b/src/middleware/packages/auth/middlewares/localLogout.ts index 10f5bd31f..5ef92bf2d 100644 --- a/src/middleware/packages/auth/middlewares/localLogout.ts +++ b/src/middleware/packages/auth/middlewares/localLogout.ts @@ -1,4 +1,4 @@ -const localLogout = (req, res, next) => { +const localLogout = (req: any, res: any, next: any) => { req.logout(); // Passport logout next(); }; diff --git a/src/middleware/packages/auth/middlewares/redirectToFront.ts b/src/middleware/packages/auth/middlewares/redirectToFront.ts index 0b59de541..b490bf0a2 100644 --- a/src/middleware/packages/auth/middlewares/redirectToFront.ts +++ b/src/middleware/packages/auth/middlewares/redirectToFront.ts @@ -1,4 +1,4 @@ -const redirectToFront = (req, res) => { +const redirectToFront = (req: any, res: any) => { // Redirect browser to the redirect URL pushed in session const redirectUrl = new URL(req.session.redirectUrl); if (req.user) { diff --git a/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts b/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts index 3800dbb5f..8531c60d2 100644 --- a/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts +++ b/src/middleware/packages/auth/middlewares/saveRedirectUrl.ts @@ -1,4 +1,4 @@ -const saveRedirectUrl = (req, res, next) => { +const saveRedirectUrl = (req: any, res: any, next: any) => { // Persist referer on the session to get it back after redirection // If the redirectUrl is already in the session, use it as default value req.session.redirectUrl = diff --git a/src/middleware/packages/auth/middlewares/sendToken.ts b/src/middleware/packages/auth/middlewares/sendToken.ts index de2ef3dcc..705f4755a 100644 --- a/src/middleware/packages/auth/middlewares/sendToken.ts +++ b/src/middleware/packages/auth/middlewares/sendToken.ts @@ -1,4 +1,4 @@ -const sendToken = (req, res) => { +const sendToken = (req: any, res: any) => { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ token: req.user.token, webId: req.user.webId, newUser: req.user.newUser })); }; diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index b5cfffcd7..ae23f6f02 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -92,10 +92,10 @@ const AuthMixin = { if (!this.passportId) throw new Error('this.passportId must be set in the service creation.'); this.passport = passport; - this.passport.serializeUser((user, done) => { + this.passport.serializeUser((user: any, done: any) => { done(null, user); }); - this.passport.deserializeUser((user, done) => { + this.passport.deserializeUser((user: any, done: any) => { done(null, user); }); @@ -232,7 +232,9 @@ const AuthMixin = { }, pickWebIdData(data) { if (this.settings.webIdSelection.length > 0) { - return Object.fromEntries(this.settings.webIdSelection.filter(key => key in data).map(key => [key, data[key]])); + return Object.fromEntries( + this.settings.webIdSelection.filter((key: any) => key in data).map((key: any) => [key, data[key]]) + ); } else { // TODO do not return anything if webIdSelection is empty, to conform with pickAccountData return data || {}; @@ -241,7 +243,7 @@ const AuthMixin = { pickAccountData(data) { if (this.settings.accountSelection.length > 0) { return Object.fromEntries( - this.settings.accountSelection.filter(key => key in data).map(key => [key, data[key]]) + this.settings.accountSelection.filter((key: any) => key in data).map((key: any) => [key, data[key]]) ); } else { return {}; diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 81fd1437e..23397b07d 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -143,7 +143,7 @@ const AuthAccountSchema = { async handler(ctx) { /** @type {object[]} */ const accounts = await this._find(ctx, ctx.params); - return accounts.filter(account => !account.deletedAt); + return accounts.filter((account: any) => !account.deletedAt); } }, @@ -332,7 +332,7 @@ const AuthAccountSchema = { }, async hashPassword(password) { return new Promise((resolve, reject) => { - bcrypt.hash(password, 10, (err, hash) => { + bcrypt.hash(password, 10, (err: any, hash: any) => { if (err) { reject(err); } else { @@ -343,7 +343,7 @@ const AuthAccountSchema = { }, async comparePassword(password, hash) { return new Promise(resolve => { - bcrypt.compare(password, hash, (err, res) => { + bcrypt.compare(password, hash, (err: any, res: any) => { if (res === true) { resolve(true); } else { diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts index 158ee0d39..e01409240 100644 --- a/src/middleware/packages/auth/services/auth.cas.ts +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -28,13 +28,13 @@ const AuthCASService = { casURL: this.settings.casUrl, passReqToCallback: true }, - (req, username, profile, done) => { + (req: any, username: any, profile: any, done: any) => { req.$ctx .call('auth.loginOrSignup', { ssoData: { username, ...profile } }) - .then(loginData => { + .then((loginData: any) => { done(null, loginData); }) - .catch(e => { + .catch((e: any) => { done(new E.UnAuthorizedError(e.message), false); }); } diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index f1a1786aa..259271c81 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -165,13 +165,13 @@ const AuthLocalService = { { passReqToCallback: true // We want to have access to req below }, - (req, username, password, done) => { + (req: any, username: any, password: any, done: any) => { req.$ctx .call('auth.login', req.$params) - .then(returnedData => { + .then((returnedData: any) => { done(null, returnedData); }) - .catch(e => { + .catch((e: any) => { done(new MoleculerError(e.message, 401), false); }); } diff --git a/src/middleware/packages/auth/services/auth.oidc.ts b/src/middleware/packages/auth/services/auth.oidc.ts index 8ef7d8649..fdd066848 100644 --- a/src/middleware/packages/auth/services/auth.oidc.ts +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -53,13 +53,13 @@ const AuthOIDCService = { params, passReqToCallback: true }, - (req, tokenset, userinfo, done) => { + (req: any, tokenset: any, userinfo: any, done: any) => { req.$ctx .call('auth.loginOrSignup', { ssoData: userinfo }) - .then(loginData => { + .then((loginData: any) => { done(null, loginData); }) - .catch(e => { + .catch((e: any) => { console.error(e); done(null, false); }); diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index a5b2cdaf3..1bf0af1d8 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -152,7 +152,7 @@ const BackupService = { const deleteFilenames = await ctx.call('backup.listBackupsForDataset', { dataset }); // Delete all backups locally. - await Promise.all(deleteFilenames.map(file => fs.promises.rm(file))); + await Promise.all(deleteFilenames.map((file: any) => fs.promises.rm(file))); // Delete backups from remote.fusekiBase if (remoteServer.path) { diff --git a/src/middleware/packages/backup/utils/fsCopy.ts b/src/middleware/packages/backup/utils/fsCopy.ts index d5d05c00a..84e77b142 100644 --- a/src/middleware/packages/backup/utils/fsCopy.ts +++ b/src/middleware/packages/backup/utils/fsCopy.ts @@ -1,7 +1,7 @@ import fs from 'fs-extra'; import { join as pathJoin } from 'path'; -const fsCopy = async (path, subDir, remoteServer) => { +const fsCopy = async (path: any, subDir: any, remoteServer: any) => { const destDir = pathJoin(remoteServer.path, subDir); await fs.copy(path, destDir); }; diff --git a/src/middleware/packages/backup/utils/fsRemove.ts b/src/middleware/packages/backup/utils/fsRemove.ts index bc071f3d7..832d03dab 100644 --- a/src/middleware/packages/backup/utils/fsRemove.ts +++ b/src/middleware/packages/backup/utils/fsRemove.ts @@ -1,11 +1,11 @@ import fs from 'fs'; import { join as pathJoin } from 'path'; -const fsRemove = async (removeFiles, subDir, remoteServer) => { +const fsRemove = async (removeFiles: any, subDir: any, remoteServer: any) => { await Promise.all( removeFiles - .map(file => pathJoin(remoteServer.path, subDir, file)) - .map(file => fs.promises.rm(file, { force: true })) + .map((file: any) => pathJoin(remoteServer.path, subDir, file)) + .map((file: any) => fs.promises.rm(file, { force: true })) ); }; diff --git a/src/middleware/packages/backup/utils/ftpCopy.ts b/src/middleware/packages/backup/utils/ftpCopy.ts index cb4796211..fd1891376 100644 --- a/src/middleware/packages/backup/utils/ftpCopy.ts +++ b/src/middleware/packages/backup/utils/ftpCopy.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import Client from 'ssh2-sftp-client'; import { join as pathJoin } from 'path'; -const ftpCopy = (path, subDir, remoteServer) => { +const ftpCopy = (path: any, subDir: any, remoteServer: any) => { return new Promise((resolve, reject) => { const sftp = new Client(); sftp @@ -26,7 +26,7 @@ const ftpCopy = (path, subDir, remoteServer) => { } }); }) - .catch(e => reject(e)); + .catch((e: any) => reject(e)); }); }; diff --git a/src/middleware/packages/backup/utils/ftpRemove.ts b/src/middleware/packages/backup/utils/ftpRemove.ts index 59bb90dca..7086ae4d4 100644 --- a/src/middleware/packages/backup/utils/ftpRemove.ts +++ b/src/middleware/packages/backup/utils/ftpRemove.ts @@ -1,7 +1,7 @@ import Client from 'ssh2-sftp-client'; import { join as pathJoin } from 'path'; -const ftpRemove = (removeFiles, remoteServer) => { +const ftpRemove = (removeFiles: any, remoteServer: any) => { return new Promise((resolve, reject) => { const sftp = new Client(); sftp @@ -17,7 +17,7 @@ const ftpRemove = (removeFiles, remoteServer) => { } resolve(); }) - .catch(e => reject(e)); + .catch((e: any) => reject(e)); }); }; diff --git a/src/middleware/packages/backup/utils/rsyncCopy.ts b/src/middleware/packages/backup/utils/rsyncCopy.ts index 9a924d703..299c93243 100644 --- a/src/middleware/packages/backup/utils/rsyncCopy.ts +++ b/src/middleware/packages/backup/utils/rsyncCopy.ts @@ -1,7 +1,7 @@ import Rsync from 'rsync'; import { join as pathJoin } from 'path'; -const rsyncCopy = (path, subDir, remoteServer, syncDelete = false) => { +const rsyncCopy = (path: any, subDir: any, remoteServer: any, syncDelete = false) => { // Setup rsync to remote server const rsync = new Rsync() .flags('arv') @@ -13,7 +13,7 @@ const rsyncCopy = (path, subDir, remoteServer, syncDelete = false) => { return new Promise((resolve, reject) => { console.log(`Rsync started with command: ${rsync.command()}`); - rsync.execute(error => { + rsync.execute((error: any) => { if (error) { reject(error); } else { diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index da5bc4b19..ce2275ea5 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -102,8 +102,8 @@ const CoreService = { // Overwrite optimization method to put catchAll routes at the end // See https://github.com/moleculerjs/moleculer-web/issues/335 optimizeRouteOrder() { - this.routes.sort(a => (a.opts.catchAll ? 1 : -1)); - this.aliases.sort(a => (a.route.opts.catchAll ? 1 : -1)); + this.routes.sort((a: any) => (a.opts.catchAll ? 1 : -1)); + this.aliases.sort((a: any) => (a.route.opts.catchAll ? 1 : -1)); } } }); diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index 574b570dc..dcdeb818a 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -18,7 +18,7 @@ const KeysContainerSchema = { settings: { path: '/key', acceptedTypes: Object.values(KEY_TYPES), - permissions: (webId, ctx) => { + permissions: (webId: any, ctx: any) => { // If not a pod provider, the container is shared, so any user can append. return { anyUser: { @@ -28,7 +28,7 @@ const KeysContainerSchema = { } }; }, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); return { diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index 5e20d4e2c..18aaecb9b 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -89,7 +89,7 @@ const KeysService = { // Check if key type is present. const matchedKeys = container['ldp:contains'].filter( - keyResource => + (keyResource: any) => arrayOf(keyResource.type || keyResource['@type']).includes(keyType) && keyResource.controller === webId ); diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index 8b871b1f1..0cd513ffc 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -86,9 +86,9 @@ const KeysMigrationSchema = { ); // Stats about missing accounts and key-pairs. - const accountNames = accounts.map(acc => acc.username); + const accountNames = accounts.map((acc: any) => acc.username); const keysWithoutRegisteredUser = usernamesByKey.filter(keyName => !accountNames.includes(keyName)); - const usersWithoutKeys = accountNames.filter(accName => !usernamesByKey.includes(accName)); + const usersWithoutKeys = accountNames.filter((accName: any) => !usernamesByKey.includes(accName)); if (errorUsernames.length > 0) { this.logger.warn(`During the migration, the following accounts generated errors:`, errorUsernames); diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index c6a1140fc..3b1b522e0 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -15,7 +15,7 @@ const KeysPublicContainerSchema = { settings: { path: '/public-key', acceptedTypes: Object.values(KEY_TYPES), - permissions: (webId, ctx) => { + permissions: (webId: any, ctx: any) => { // If no pod provider, the container is shared, so any user can append. return { anyUser: { @@ -25,7 +25,7 @@ const KeysPublicContainerSchema = { } }; }, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); return { diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 6e9987067..afd802f4e 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -93,15 +93,15 @@ const HttpSignatureService = { // Check, if one of the keys is able to verify the signature. const { isValid: keyValid, publicKey: publicKeyPem } = publicKeys - .flatMap(key => key.publicKeyPem || []) - .map(pubKeyPem => { + .flatMap((key: any) => key.publicKeyPem || []) + .map((pubKeyPem: any) => { try { return { isValid: verifySignature(parsedSignature, pubKeyPem), publicKey: pubKeyPem }; } catch (e) { return { isValid: false }; } }) - .find(({ isValid }) => isValid) || { isValid: false, publicKey: null }; + .find(({ isValid }: any) => isValid) || { isValid: false, publicKey: null }; return { isValid: keyValid, actorUri, publicKeyPem }; } diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index f7e125359..d7bedf355 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -5,12 +5,12 @@ import fetch from 'node-fetch'; import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; -const stream2buffer = stream => { +const stream2buffer = (stream: any) => { return new Promise((resolve, reject) => { - const _buf = []; - stream.on('data', chunk => _buf.push(chunk)); + const _buf: any = []; + stream.on('data', (chunk: any) => _buf.push(chunk)); stream.on('end', () => resolve(Buffer.concat(_buf))); - stream.on('error', err => reject(err)); + stream.on('error', (err: any) => reject(err)); }); }; @@ -151,7 +151,7 @@ const ProxyService = { const { webId } = ctx.params; if (this.settings.podProvider) { const services = await ctx.call('$node.services'); - if (services.filter(s => s.name === 'activitypub.actor')) { + if (services.filter((s: any) => s.name === 'activitypub.actor')) { await ctx.call('activitypub.actor.addEndpoint', { actorUri: webId, predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', diff --git a/src/middleware/packages/crypto/utils/utils.ts b/src/middleware/packages/crypto/utils/utils.ts index 1836d4dda..c6a3aebc1 100644 --- a/src/middleware/packages/crypto/utils/utils.ts +++ b/src/middleware/packages/crypto/utils/utils.ts @@ -7,7 +7,7 @@ import assert from 'node:assert'; * @param {any} value The value to convert to an array. * @returns {Array} The resulting array. */ -const arrayOf = value => { +const arrayOf = (value: any) => { if (value === undefined || value === null) { return []; } @@ -26,7 +26,7 @@ const arrayOf = value => { * @param {any} object2 Second object to compare * @returns {boolean} True if the objects are deeply equal, false otherwise. */ -const deepStrictEqual = (object1, object2) => { +const deepStrictEqual = (object1: any, object2: any) => { try { assert.deepStrictEqual(object1, object2); } catch (error) { diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts index 2a1c7eec7..7166b472a 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts @@ -37,7 +37,7 @@ class VcCapabilityPresentationProofPurpose extends AuthenticationProofPurpose { * * @returns {Promise<{valid: boolean, error: Error}>} Validation result. */ - async validate(proof, options) { + async validate(proof: any, options: any) { if (!proof || !options) { throw new Error('Proof and options are required.'); } diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts index 5cf5bfd1f..2ca41f0cc 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts @@ -13,7 +13,7 @@ class VCPurpose extends CredentialIssuancePurpose { * * @returns {Promise<{valid: boolean, error: Error}>} Resolves on completion. */ - async validate(proof, properties) { + async validate(proof: any, properties: any) { const { documentLoader, document } = properties; // Check validity periods. @@ -26,7 +26,7 @@ class VCPurpose extends CredentialIssuancePurpose { // Validate that VC still exists by fetching it with the document loader and the noCache option. const vc = await documentLoader(document.id, { noCache: true }) - .then(res => res.document) + .then((res: any) => res.document) .catch(() => null); if (!vc) { return { valid: false, error: new Error('The VC does not exist.') }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index aae896cbc..947ccaf24 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -27,7 +27,7 @@ const DataIntegrityService = { dependencies: ['ldp', 'api'], async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts index 2c7cf2e3a..a3c61af74 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts @@ -2,7 +2,7 @@ import { arrayOf } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; // Check, if a capability grants access to the resource. -const hasValidCapability = async (ctx, resourceUri, mode) => { +const hasValidCapability = async (ctx: any, resourceUri: any, mode: any) => { const { capabilityPresentation } = ctx.meta.authorization; const vcs = arrayOf(capabilityPresentation.verifiableCredential); diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index 7ef38f989..eb864bd24 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -22,7 +22,7 @@ const VCCredentialsContainer = { acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiableCredential'], typeIndex: 'private', podProvider: null, - permissions: (webId, ctx) => { + permissions: (webId: any, ctx: any) => { // If not a pod provider, the container is shared, so any user can append (not read arbitrary VCs though). return { anyUser: { @@ -32,7 +32,7 @@ const VCCredentialsContainer = { } }; }, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { if (webId === 'anon') throw new Error('Credential resource must be created for registered webId.'); if (webId === 'system') return {}; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index a6be01632..fd8b6c01d 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -27,7 +27,7 @@ const VCHolderService = { name: 'crypto.vc.holder' as const, dependencies: ['jsonld', 'jsonld.context'], async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 02238a599..631443e5e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -28,7 +28,7 @@ const VCCredentialService = { }, async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index 4343b24f2..07f3b9493 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -23,7 +23,7 @@ const VCPresentationContainer = { acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiablePresentation'], typeIndex: 'private', podProvider: null, - permissions: (webId, ctx) => { + permissions: (webId: any, ctx: any) => { // If not a pod provider, the container is shared, so any user can append. return { anyUser: { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 1110af2f8..667cb4292 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -22,7 +22,7 @@ const VCPresentationService = { name: 'crypto.vc.verifier' as const, dependencies: ['ldp', 'jsonld'], async started() { - this.documentLoader = async (url, options) => { + this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, diff --git a/src/middleware/packages/importer/mixins/discourse.ts b/src/middleware/packages/importer/mixins/discourse.ts index cb87316eb..8af5d043d 100644 --- a/src/middleware/packages/importer/mixins/discourse.ts +++ b/src/middleware/packages/importer/mixins/discourse.ts @@ -13,7 +13,7 @@ const Schema = { fieldsMapping: { slug: 'slug', created: 'created_at', - updated: data => data.last_posted_at || data.created_at + updated: (data: any) => data.last_posted_at || data.created_at } } }, @@ -21,7 +21,8 @@ const Schema = { if (this.settings.source.discourse.type === 'topics') { this.settings.source.apiUrl = this.settings.source.discourse.baseUrl; this.settings.source.getAllCompact = urlJoin(this.settings.source.discourse.baseUrl, 'latest.json'); - this.settings.source.getOneFull = data => urlJoin(this.settings.source.discourse.baseUrl, 't', `${data.id}.json`); + this.settings.source.getOneFull = (data: any) => + urlJoin(this.settings.source.discourse.baseUrl, 't', `${data.id}.json`); } else { throw new Error('The DiscourseImporterMixin can only import topics for now'); } diff --git a/src/middleware/packages/importer/mixins/drupal.ts b/src/middleware/packages/importer/mixins/drupal.ts index d6e39b1e8..f5e32bd3a 100644 --- a/src/middleware/packages/importer/mixins/drupal.ts +++ b/src/middleware/packages/importer/mixins/drupal.ts @@ -18,8 +18,8 @@ const Schema = { }, fieldsMapping: { slug: 'uuid', - created: data => convertToIsoString(data.published), - updated: data => convertToIsoString(data.updated) + created: (data: any) => convertToIsoString(data.published), + updated: (data: any) => convertToIsoString(data.updated) } } }, @@ -27,7 +27,7 @@ const Schema = { async list(url) { const data = await this.fetch(url); if (data && data.nodes) { - return data.nodes.map(n => n.node); + return data.nodes.map((n: any) => n.node); } return false; }, diff --git a/src/middleware/packages/importer/mixins/gogocarto.ts b/src/middleware/packages/importer/mixins/gogocarto.ts index 5ed83fe41..c5850ea18 100644 --- a/src/middleware/packages/importer/mixins/gogocarto.ts +++ b/src/middleware/packages/importer/mixins/gogocarto.ts @@ -26,7 +26,7 @@ const Schema = { 'api', 'elements' )}?ontology=gogosync`; - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => urlJoin(this.settings.source.gogocarto.baseUrl, 'api', 'elements', `${data.id}`); } else { throw new Error('The GoGoCartoMixin can only import elements for now'); diff --git a/src/middleware/packages/importer/mixins/humhub.ts b/src/middleware/packages/importer/mixins/humhub.ts index 3021d8591..9ec181aef 100644 --- a/src/middleware/packages/importer/mixins/humhub.ts +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -5,7 +5,7 @@ import { convertToIsoString } from '../utils.ts'; const allowedTypes = ['user', 'space', 'calendar', 'post']; -const getSlugByUrl = url => { +const getSlugByUrl = (url: any) => { if (url) { const splitUrl = url.split('/'); let slug = splitUrl.pop(); @@ -26,7 +26,7 @@ const Schema = { }, fieldsMapping: { // We don't use arrow function as we need to have access to this.settings - slug: function (data) { + slug: function (data: any) { switch (this.settings.source.humhub.type) { case 'user': case 'space': @@ -36,14 +36,14 @@ const Schema = { return data.content.metadata.guid; } }, - created: function (data) { + created: function (data: any) { switch (this.settings.source.humhub.type) { case 'calendar': case 'post': return convertToIsoString(data.content.metadata.created_at); } }, - updated: function (data) { + updated: function (data: any) { switch (this.settings.source.humhub.type) { case 'calendar': case 'post': @@ -67,9 +67,9 @@ const Schema = { this.settings.source.getAllFull = this.settings.source.apiUrl; if (type === 'calendar') { - this.settings.source.getOneFull = data => `${this.settings.source.apiUrl}/entry/${data.id}`; + this.settings.source.getOneFull = (data: any) => `${this.settings.source.apiUrl}/entry/${data.id}`; } else { - this.settings.source.getOneFull = data => `${this.settings.source.apiUrl}/${data.id}`; + this.settings.source.getOneFull = (data: any) => `${this.settings.source.apiUrl}/${data.id}`; } }, methods: { diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 4e23be3ec..db0b76616 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -72,7 +72,7 @@ const Schema = { webId: 'system' }); - this.imported = Object.fromEntries(result.map(node => [node.sourceUri.value, node.id.value])); + this.imported = Object.fromEntries(result.map((node: any) => [node.sourceUri.value, node.id.value])); } else { this.imported = {}; } @@ -175,8 +175,8 @@ const Schema = { // If QueueMixin is not available, call method with fake job object return this.processSynchronize({ data: {}, - progress: number => this.logger.info(`Progress: ${number}%`), - log: message => this.logger.info(message) + progress: (number: any) => this.logger.info(`Progress: ${number}%`), + log: (message: any) => this.logger.info(message) }); } } @@ -442,10 +442,12 @@ const Schema = { const oldSourceUris = Object.keys(this.imported); if (this.settings.source.getAllCompact) { - newSourceUris = results.map(data => this.settings.source.getOneFull(data)); + newSourceUris = results.map((data: any) => this.settings.source.getOneFull(data)); } else { // If we have no compact results, put the data in an object so that we can easily use it with importOne - mappedFullResults = Object.fromEntries(results.map(data => [this.settings.source.getOneFull(data), data])); + mappedFullResults = Object.fromEntries( + results.map((data: any) => [this.settings.source.getOneFull(data), data]) + ); newSourceUris = Object.keys(mappedFullResults); } @@ -478,7 +480,7 @@ const Schema = { // CREATED RESOURCES /// //////////////////////////////////////// - const urisToCreate = newSourceUris.filter(uri => !oldSourceUris.includes(uri)); + const urisToCreate = newSourceUris.filter((uri: any) => !oldSourceUris.includes(uri)); for (const sourceUri of urisToCreate) { this.logger.info(`Resource ${sourceUri} did not exist, importing it...`); @@ -501,13 +503,13 @@ const Schema = { /// //////////////////////////////////////// const urisToUpdate = results - .filter(data => { + .filter((data: any) => { // If an updated field is available in compact results, filter out items outside of the time frame const updated = this.getField('updated', data); return updated ? fromDate < new Date(updated) && new Date(updated) > toDate : true; }) - .map(data => this.settings.source.getOneFull(data)) - .filter(uri => !urisToCreate.includes(uri)); + .map((data: any) => this.settings.source.getOneFull(data)) + .filter((uri: any) => !urisToCreate.includes(uri)); for (const sourceUri of urisToUpdate) { const result = await this.actions.importOne({ diff --git a/src/middleware/packages/importer/mixins/jotform.ts b/src/middleware/packages/importer/mixins/jotform.ts index 710248be6..048315f4e 100644 --- a/src/middleware/packages/importer/mixins/jotform.ts +++ b/src/middleware/packages/importer/mixins/jotform.ts @@ -12,8 +12,8 @@ const Schema = { }, fieldsMapping: { slug: 'id', - created: data => convertToIsoString(data.created_at), - updated: data => convertToIsoString(data.updated_at) + created: (data: any) => convertToIsoString(data.created_at), + updated: (data: any) => convertToIsoString(data.updated_at) } } }, @@ -22,7 +22,7 @@ const Schema = { this.settings.source.apiUrl = 'https://eu-api.jotform.com'; this.settings.source.headers = { apikey: this.settings.source.jotform.apiKey }; this.settings.source.getAllCompact = 'https://eu-api.jotform.com/user/forms'; - this.settings.source.getOneFull = data => `https://eu-api.jotform.com/submission/${data.id}`; + this.settings.source.getOneFull = (data: any) => `https://eu-api.jotform.com/submission/${data.id}`; } else { throw new Error('The JotformImporterMixin can only import submissions for now'); } diff --git a/src/middleware/packages/importer/mixins/mobilizon.ts b/src/middleware/packages/importer/mixins/mobilizon.ts index 11db0f23d..2d4867d4c 100644 --- a/src/middleware/packages/importer/mixins/mobilizon.ts +++ b/src/middleware/packages/importer/mixins/mobilizon.ts @@ -44,7 +44,8 @@ const Schema = { ` }) }; - this.settings.source.getOneFull = data => urlJoin(this.settings.source.mobilizon.baseUrl, 'events', data.uuid); + this.settings.source.getOneFull = (data: any) => + urlJoin(this.settings.source.mobilizon.baseUrl, 'events', data.uuid); } else { throw new Error('The MobilizonImporterMixin can only import events for now'); } diff --git a/src/middleware/packages/importer/mixins/prestashop.ts b/src/middleware/packages/importer/mixins/prestashop.ts index f5bcf644a..7112dcfa7 100644 --- a/src/middleware/packages/importer/mixins/prestashop.ts +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -17,8 +17,8 @@ const Schema = { }, fieldsMapping: { slug: 'link_rewrite', - created: data => convertToIsoString(data.date_add), - updated: data => convertToIsoString(data.date_upd) + created: (data: any) => convertToIsoString(data.date_add), + updated: (data: any) => convertToIsoString(data.date_upd) } } }, @@ -38,7 +38,7 @@ const Schema = { 'api', this.settings.source.prestashop.type )}?display=[id,date_upd]`; - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => urlJoin(this.settings.source.prestashop.baseUrl, 'api', this.settings.source.prestashop.type, `${data.id}`); this.settings.source.headers.Authorization = `Basic ${Buffer.from( `${this.settings.source.prestashop.wsKey}:` diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index 83ae56c3c..4eea8d993 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -27,7 +27,7 @@ const Schema = { if (this.settings.source.wordpress.type === 'posts') { this.settings.source.apiUrl = this.settings.source.wordpress.baseUrl; this.settings.source.getAllCompact = urlJoin(this.settings.source.wordpress.baseUrl, 'wp-json/wp/v2/posts'); - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => urlJoin(this.settings.source.wordpress.baseUrl, 'wp-json/wp/v2/posts', `${data.id}`); if (this.settings.source.wordpress.appPassword) { this.settings.source.basicAuth = { diff --git a/src/middleware/packages/importer/mixins/yeswiki.ts b/src/middleware/packages/importer/mixins/yeswiki.ts index 2312c145d..39bdbc548 100644 --- a/src/middleware/packages/importer/mixins/yeswiki.ts +++ b/src/middleware/packages/importer/mixins/yeswiki.ts @@ -13,8 +13,8 @@ const Schema = { }, fieldsMapping: { slug: 'id_fiche', - created: data => convertToIsoString(data.date_creation_fiche), - updated: data => convertToIsoString(data.date_maj_fiche) + created: (data: any) => convertToIsoString(data.date_creation_fiche), + updated: (data: any) => convertToIsoString(data.date_maj_fiche) } } }, @@ -24,14 +24,14 @@ const Schema = { // Note: the form_id parameter is not used by YesWiki, but it allows to have a different base URL for each Bazar list this.settings.source.apiUrl = `${baseUrl}?BazaR/json&demand=entry&form_id=${formId}`; this.settings.source.getAllFull = `${baseUrl}?BazaR/json&demand=entries&id=${formId}`; - this.settings.source.getOneFull = data => + this.settings.source.getOneFull = (data: any) => `${baseUrl}?BazaR/json&demand=entry&form_id=${formId}&id_fiche=${data.id_fiche}`; } else { const apiPath = `api/forms/${formId}/entries/json`; this.settings.source.apiUrl = `${baseUrl}?${apiPath}`; this.settings.source.getAllFull = `${baseUrl}?${apiPath}`; this.settings.source.getAllCompact = `${baseUrl}?${apiPath}&fields=id_fiche,date_maj_fiche`; - this.settings.source.getOneFull = data => `${baseUrl}?${apiPath}/${data.id_fiche}`; + this.settings.source.getOneFull = (data: any) => `${baseUrl}?${apiPath}/${data.id_fiche}`; } }, methods: { diff --git a/src/middleware/packages/importer/utils.ts b/src/middleware/packages/importer/utils.ts index e331ac766..f14cc62cc 100644 --- a/src/middleware/packages/importer/utils.ts +++ b/src/middleware/packages/importer/utils.ts @@ -5,9 +5,9 @@ import googlelibphonenumberModule from 'google-libphonenumber'; const PNF = googlelibphonenumberModule.PhoneNumberFormat; const phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance(); -const convertToIsoString = str => str && new Date(str).toISOString(); +const convertToIsoString = (str: any) => str && new Date(str).toISOString(); -const formatPhoneNumber = (number, countryCode) => { +const formatPhoneNumber = (number: any, countryCode: any) => { if (number && countryCode) { try { const parsedNumber = phoneUtil.parseAndKeepRawInput(number, countryCode); @@ -19,7 +19,7 @@ const formatPhoneNumber = (number, countryCode) => { } }; -const frenchAddressSearch = async query => { +const frenchAddressSearch = async (query: any) => { const url = new URL('https://api-adresse.data.gouv.fr/search/'); url.searchParams.set('q', query); const response = await fetch(url.toString()); @@ -31,7 +31,7 @@ const frenchAddressSearch = async query => { return false; }; -const frenchAddressReverseSearch = async (lat, lon) => { +const frenchAddressReverseSearch = async (lat: any, lon: any) => { const url = new URL('https://api-adresse.data.gouv.fr/reverse/'); url.searchParams.set('lat', lat); url.searchParams.set('lon', lon); @@ -44,9 +44,9 @@ const frenchAddressReverseSearch = async (lat, lon) => { return false; }; -const removeHtmlTags = text => sanitizeHtml(text, { allowedTags: [] }).trim(); +const removeHtmlTags = (text: any) => sanitizeHtml(text, { allowedTags: [] }).trim(); -const isDir = async path => { +const isDir = async (path: any) => { try { const stat = await fsPromises.lstat(path); const value = stat.isDirectory(); diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 638a8e5e3..54746f1c5 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -105,7 +105,7 @@ const InferenceSchema = { }, triplesToString(triples) { return triples - .map(triple => `<${triple.subject.id}> <${triple.predicate.id}> <${triple.object.id}> .`) + .map((triple: any) => `<${triple.subject.id}> <${triple.predicate.id}> <${triple.object.id}> .`) .join('\n'); }, generateInsertQuery(triples) { @@ -143,7 +143,7 @@ const InferenceSchema = { }, // Exclude from triples1 the triples which also exist in triples2 getTriplesDifference(triples1, triples2) { - return triples1.filter(t1 => !triples2.some(t2 => t1.equals(t2))); + return triples1.filter((t1: any) => !triples2.some((t2: any) => t1.equals(t2))); } }, events: { diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index 1b9a75528..34fa7e93f 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -90,7 +90,7 @@ const InferenceRemoteSchema = { }, activities: { offerInference: { - async match(activity, fetcher) { + async match(activity: any, fetcher: any) { let { match, dereferencedActivity } = await matchActivity( { type: ACTIVITY_TYPES.OFFER, @@ -123,7 +123,7 @@ const InferenceRemoteSchema = { return { match, dereferencedActivity }; }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (this.settings.acceptFromRemoteServers && recipientUri === this.relayActor.id) { const relationship = activity.object.object; if (relationship.subject && relationship.relationship && relationship.object) { diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index 3531fac4f..7190fe14b 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -4,7 +4,7 @@ const Schema = { visibility: 'public', cache: true, async handler(ctx) { - let context = []; + let context: any = []; const ontologies = await ctx.call('ontologies.list'); diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts index 015a88293..e0c45b559 100644 --- a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts +++ b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts @@ -4,12 +4,12 @@ const Schema = { visibility: 'public', cache: true, async handler(ctx) { - let context = []; + let context: any = []; let ontologies = await ctx.call('ontologies.list'); // Do not include ontologies which want to preserve their context URI - ontologies = ontologies.filter(ont => ont.preserveContextUri !== true); + ontologies = ontologies.filter((ont: any) => ont.preserveContextUri !== true); for (const ontology of ontologies) { if (ontology.jsonldContext) { @@ -17,7 +17,7 @@ const Schema = { } } - const prefixes = Object.fromEntries(ontologies.map(ont => [ont.prefix, ont.namespace])); + const prefixes = Object.fromEntries(ontologies.map((ont: any) => [ont.prefix, ont.namespace])); context = await ctx.call('jsonld.context.parse', { context: [...context, prefixes] diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index 4beb908ee..9e570bd84 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -9,7 +9,7 @@ const fsPromises = fsModule.promises; const defaultDocumentLoader = !process.versions.bun ? jsonld.documentLoaders.node() : /** Document loader using the modern fetch API. */ - async (url, options) => { + async (url: any, options: any) => { const fetchResult = await fetch(url, { headers: { accept: 'application/json, application/ld+json, application/activity+json', diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 283b8f954..8dfe3bfef 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -14,7 +14,7 @@ const JsonldParserSchema = { dependencies: ['jsonld.document-loader'], async started() { this.jsonld = jsonld; - this.jsonld.documentLoader = (url, options) => + this.jsonld.documentLoader = (url: any, options: any) => this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); // Options: https://github.com/rubensworks/jsonld-streaming-parser.js?tab=readme-ov-file#configuration @@ -74,7 +74,7 @@ const JsonldParserSchema = { // Options: https://github.com/rubensworks/jsonld-streaming-serializer.js?tab=readme-ov-file#configuration const jsonLdSerializer = new JsonLdSerializer(); - quads.forEach(quad => jsonLdSerializer.write(quad)); + quads.forEach((quad: any) => jsonLdSerializer.write(quad)); jsonLdSerializer.end(); const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); @@ -141,11 +141,11 @@ const JsonldParserSchema = { return new Promise((resolve, reject) => { const jsonString = typeof input === 'object' ? JSON.stringify(input) : input; const textStream = streamifyString(jsonString); - const res = []; + const res: any = []; this.jsonLdParser .import(textStream) - .on('data', quad => res.push(quad)) - .on('error', error => reject(error)) + .on('data', (quad: any) => res.push(quad)) + .on('error', (error: any) => reject(error)) .on('end', () => resolve(res)); }); } @@ -232,19 +232,19 @@ const JsonldParserSchema = { streamToString(stream) { let res = ''; return new Promise((resolve, reject) => { - stream.on('data', chunk => (res += chunk)); - stream.on('error', err => reject(err)); + stream.on('data', (chunk: any) => (res += chunk)); + stream.on('error', (err: any) => reject(err)); stream.on('end', () => resolve(res)); }); }, rdfToQuads(input, format) { return new Promise((resolve, reject) => { const textStream = streamifyString(input); - const res = []; + const res: any = []; rdfParser .parse(textStream, { contentType: format }) - .on('data', quad => res.push(quad)) - .on('error', error => reject(error)) + .on('data', (quad: any) => res.push(quad)) + .on('error', (error: any) => reject(error)) .on('end', () => resolve(res)); }); } diff --git a/src/middleware/packages/jsonld/utils/utils.ts b/src/middleware/packages/jsonld/utils/utils.ts index 0ed9f0958..aa9527454 100644 --- a/src/middleware/packages/jsonld/utils/utils.ts +++ b/src/middleware/packages/jsonld/utils/utils.ts @@ -1,21 +1,21 @@ import uriSchemes from './uriSchemes.ts'; -const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); +const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); /** If the value starts with `http` or `urn:` */ -const isURI = value => +const isURI = (value: any) => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); /** If the value starts with a IANA registered or common URI scheme */ -const isRegisteredURI = value => +const isRegisteredURI = (value: any) => (typeof value === 'string' || value instanceof String) && uriSchemes.some(scheme => value.startsWith(scheme)); -const isObject = value => typeof value === 'object' && !Array.isArray(value) && value !== null; +const isObject = (value: any) => typeof value === 'object' && !Array.isArray(value) && value !== null; -const mergeObjectInArray = (obj, arr) => { +const mergeObjectInArray = (obj: any, arr: any) => { let result; // Check if there is already an object in the array - const objectIndex = arr.findIndex(item => isObject(item)); + const objectIndex = arr.findIndex((item: any) => isObject(item)); if (objectIndex === -1) { // No object in the array, append the object result = [...arr, obj]; @@ -27,7 +27,7 @@ const mergeObjectInArray = (obj, arr) => { return result.sort((a, b) => (isURL(a) ? (isURL(b) ? 0 : -1) : isURL(b) ? 1 : 0)); }; -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts index ad539b9d4..982189a7c 100644 --- a/src/middleware/packages/ldp/adapter.ts +++ b/src/middleware/packages/ldp/adapter.ts @@ -8,7 +8,7 @@ class LdpAdapter { this.containerService = containerService; } - init(broker, service) { + init(broker: any, service: any) { this.broker = broker; this.service = service; } @@ -46,7 +46,7 @@ class LdpAdapter { * - searchFields * - query */ - find(filters) { + find(filters: any) { return this.broker.call(`${this.containerService}.get`, { containerUri: this.service.schema.settings.containerUri, filters: filters.query, @@ -57,14 +57,14 @@ class LdpAdapter { /** * Find an entity by query */ - findOne(query) { + findOne(query: any) { throw new Error('Method not implemented'); } /** * Find an entity by ID. */ - findById(_id) { + findById(_id: any) { if (!_id.startsWith('http')) { _id = urlJoin(this.service.schema.settings.containerUri, _id); } @@ -77,8 +77,8 @@ class LdpAdapter { /** * Find all entities by IDs */ - findByIds(ids) { - return Promise.all(ids.map(id => this.findById(id))); + findByIds(ids: any) { + return Promise.all(ids.map((id: any) => this.findById(id))); } /** @@ -90,13 +90,13 @@ class LdpAdapter { * - query */ count(filters = {}) { - return this.find(filters).then(result => result['ldp:contains'].length); + return this.find(filters).then((result: any) => result['ldp:contains'].length); } /** * Insert an entity */ - insert(entity) { + insert(entity: any) { const { slug, ...resource } = entity; return this.broker @@ -108,7 +108,7 @@ class LdpAdapter { }, slug }) - .then(resourceUri => { + .then((resourceUri: any) => { this.broker.call(`${this.containerService}.attach`, { containerUri: this.service.schema.settings.containerUri, resourceUri @@ -121,21 +121,21 @@ class LdpAdapter { /** * Insert multiple entities */ - insertMany(entities) { + insertMany(entities: any) { throw new Error('Method not implemented'); } /** * Update many entities by `query` and `update` */ - updateMany(query, update) { + updateMany(query: any, update: any) { throw new Error('Method not implemented'); } /** * Update an entity by ID */ - updateById(_id, update) { + updateById(_id: any, update: any) { const { id, '@id': arobaseId, ...resource } = update.$set; // Check ID and transform it to URI if necessary @@ -151,20 +151,20 @@ class LdpAdapter { ...resource } }) - .then(resourceUri => this.findById(resourceUri)); + .then((resourceUri: any) => this.findById(resourceUri)); } /** * Remove many entities which are matched by `query` */ - removeMany(query) { + removeMany(query: any) { throw new Error('Method not implemented'); } /** * Remove an entity by ID */ - removeById(_id) { + removeById(_id: any) { return this.broker .call(`${this.resourceService}.delete`, { resourceUri: _id @@ -188,21 +188,21 @@ class LdpAdapter { /** * Convert DB entity to JSON object */ - entityToObject(entity) { + entityToObject(entity: any) { return entity; } /** * Transforms 'idField' into MongoDB's '_id' */ - beforeSaveTransformID(entity, idField) { + beforeSaveTransformID(entity: any, idField: any) { return entity; } /** * Transforms MongoDB's '_id' into user defined 'idField' */ - afterRetrieveTransformID(entity, idField) { + afterRetrieveTransformID(entity: any, idField: any) { return entity; } } diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index 10577caf9..6515c7541 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -61,7 +61,7 @@ const Schema = { for (const disassemblyConfig of this.settings.disassembly) { const uriAdded = []; const uriRemoved = []; - let uriKept = []; + let uriKept: any = []; const oldDisassemblyValue = arrayOf(oldData[disassemblyConfig.path]); const newDisassemblyValue = arrayOf(newData[disassemblyConfig.path]); diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts index 518f6c27b..40c60ad6d 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts @@ -11,7 +11,7 @@ import { saveDatasetMeta } from '@semapps/middlewares'; -function getCatchAllRoute(basePath, podProvider) { +function getCatchAllRoute(basePath: any, podProvider: any) { const middlewares = [ parseUrl, parseHeader, diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.ts b/src/middleware/packages/ldp/routes/getPodsRoute.ts index ca4df0c1c..9a6f82666 100644 --- a/src/middleware/packages/ldp/routes/getPodsRoute.ts +++ b/src/middleware/packages/ldp/routes/getPodsRoute.ts @@ -11,7 +11,7 @@ import { saveDatasetMeta } from '@semapps/middlewares'; -const transformRouteParamsToSlugParts = (req, res, next) => { +const transformRouteParamsToSlugParts = (req: any, res: any, next: any) => { req.$params.slugParts = []; if (req.$params.username) { req.$params.slugParts.push(req.$params.username); @@ -24,7 +24,7 @@ const transformRouteParamsToSlugParts = (req, res, next) => { next(); }; -function getPodsRoute(basePath) { +function getPodsRoute(basePath: any) { const middlewares = [ parseUrl, parseHeader, diff --git a/src/middleware/packages/ldp/services/api/actions/delete.ts b/src/middleware/packages/ldp/services/api/actions/delete.ts index 7ba54473a..238f06136 100644 --- a/src/middleware/packages/ldp/services/api/actions/delete.ts +++ b/src/middleware/packages/ldp/services/api/actions/delete.ts @@ -1,4 +1,4 @@ -export default async function patch(ctx) { +export default async function patch(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index 4e510b53a..bfab2f680 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -4,7 +4,7 @@ import { cleanUndefined, parseJson } from '../../../utils.ts'; const { MoleculerError } = require('moleculer').Errors; -export default async function get(ctx) { +export default async function get(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/actions/head.ts b/src/middleware/packages/ldp/services/api/actions/head.ts index aa7ac9d71..722dbf6b6 100644 --- a/src/middleware/packages/ldp/services/api/actions/head.ts +++ b/src/middleware/packages/ldp/services/api/actions/head.ts @@ -1,4 +1,4 @@ -export default async function head(ctx) { +export default async function head(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; const uri = this.getUriFromSlugParts(slugParts, username); diff --git a/src/middleware/packages/ldp/services/api/actions/patch.ts b/src/middleware/packages/ldp/services/api/actions/patch.ts index 2dd1c5c70..90a278414 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.ts +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -6,7 +6,7 @@ const SparqlParser = sparqljsModule.Parser; const parser = new SparqlParser(); const ACCEPTED_OPERATIONS = ['insert', 'delete']; -export default async function patch(ctx) { +export default async function patch(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index d2b89c902..efa3ac2cf 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -4,7 +4,7 @@ import mime from 'mime-types'; const { MoleculerError } = require('moleculer').Errors; -export default async function post(ctx) { +export default async function post(this: any, ctx: any) { try { let { username, slugParts, ...resource } = ctx.params; diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 95d51674b..03fc9c77b 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -2,7 +2,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; const { MoleculerError } = require('moleculer').Errors; -export default async function post(ctx) { +export default async function post(this: any, ctx: any) { let { username, slugParts, ...resource } = ctx.params; const resourceUri = this.getUriFromSlugParts(slugParts, username); diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index f06c008c9..94e6f35cf 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -63,7 +63,7 @@ const Schema = { webId }); - const resourcesUris = resourcesResults?.map(node => node.s1.value); + const resourcesUris = resourcesResults?.map((node: any) => node.s1.value); // Request each resources (in parallel) containerResults['http://www.w3.org/ns/ldp#contains'] = await Promise.all( diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.ts b/src/middleware/packages/ldp/services/container/actions/getAll.ts index 7cad6c7ef..37abfe27e 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.ts +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -20,7 +20,7 @@ const Schema = { webId: 'system' }); - return result.map(node => node.containerUri.value); + return result.map((node: any) => node.containerUri.value); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index ab1637478..c1fa54cee 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -21,7 +21,7 @@ const Schema = { webId: 'system' }); - return result.map(node => node.resourceUri.value); + return result.map((node: any) => node.resourceUri.value); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 95bd34e24..9021bbc62 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -3,7 +3,7 @@ import { isMirror } from '../../../utils.ts'; const { MoleculerError } = require('moleculer').Errors; -const checkTripleValidity = (triple, containerUri) => { +const checkTripleValidity = (triple: any, containerUri: any) => { if (triple.subject.value !== containerUri) { throw new MoleculerError( `The subject must be the container URI. Provided ${triple.subject.value}`, diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index 5ee759262..938a3e53b 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -12,7 +12,7 @@ const Schema = { this.authorizers.push({ actionName, priority }); // Re-order all authorizers by priority - this.authorizers.sort((a, b) => b.priority - a.priority); + this.authorizers.sort((a: any, b: any) => b.priority - a.priority); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.ts b/src/middleware/packages/ldp/services/registry/actions/getByType.ts index 726d82365..a733bb7c5 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByType.ts @@ -15,7 +15,7 @@ const Schema = { const registeredContainers = await this.actions.list({}, { parentCtx: ctx }); return Object.values(registeredContainers).find(container => - types.some(t => + types.some((t: any) => Array.isArray(container.acceptedTypes) ? container.acceptedTypes.includes(t) : container.acceptedTypes === t ) ); diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index 82e947f70..ffc0be27b 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -29,7 +29,7 @@ const Schema = { // TODO Remove this when we stop using the type for the container path if (!options.acceptedTypes && options.shapeTreeUri) { const services = await this.broker.call('$node.services'); - if (!services.some(s => s.name === 'shape-trees') && !services.some(s => s.name === 'shacl')) + if (!services.some((s: any) => s.name === 'shape-trees') && !services.some((s: any) => s.name === 'shacl')) throw new Error('If you use shapeTreeUri in container options, you need the shape-trees and shacl service'); try { diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.ts b/src/middleware/packages/ldp/services/registry/defaultOptions.ts index d9858c3ec..f8a2cdab4 100644 --- a/src/middleware/packages/ldp/services/registry/defaultOptions.ts +++ b/src/middleware/packages/ldp/services/registry/defaultOptions.ts @@ -1,7 +1,7 @@ const Schema = { readOnly: false, excludeFromMirror: false, - permissions: webId => { + permissions: (webId: any) => { switch (webId) { case 'anon': return { @@ -32,7 +32,7 @@ const Schema = { }; } }, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { switch (webId) { case 'anon': return { diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index 98f630a92..5da8f9053 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -39,7 +39,7 @@ const Schema = { case 'cacheFirst': return this.actions .getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }) - .catch(e => { + .catch((e: any) => { if (e.code === 404) { return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx @@ -52,7 +52,7 @@ const Schema = { case 'networkFirst': return this.actions .getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }) - .catch(e => { + .catch((e: any) => { if (e.code === 404) { return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index 31cabadf2..e36e9c692 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -33,7 +33,7 @@ const LdpRemoteSchema = { methods: { async proxyAvailable() { const services = await this.broker.call('$node.services'); - return services.some(s => s.name === 'signature.proxy'); + return services.some((s: any) => s.name === 'signature.proxy'); }, async updateSingleMirroredResources() { if (!this.settings.podProvider) { @@ -48,7 +48,7 @@ const LdpRemoteSchema = { ` }); - for (const resourceUri of singles.map(node => node.s.value)) { + for (const resourceUri of singles.map((node: any) => node.s.value)) { try { await this.actions.store({ resourceUri, diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index 63c4ca2de..8c1f9f87c 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -33,7 +33,7 @@ const Schema = { webId: 'system' }); - return result.map(node => node.containerUri.value); + return result.map((node: any) => node.containerUri.value); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 033380fb8..41c9a54f5 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -23,7 +23,7 @@ const Schema = { webId: 'system' }); - return result.map(node => node.type.value); + return result.map((node: any) => node.type.value); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 310602e01..fbf42e402 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -3,7 +3,7 @@ import { ActionSchema } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; -function checkTriplesSubjectIsResource(triples, resourceUri) { +function checkTriplesSubjectIsResource(triples: any, resourceUri: any) { for (const triple of triples) { switch (triple.subject.termType) { case 'NamedNode': diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 7a32b702f..6c1a87c27 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -98,10 +98,10 @@ const Schema = { // Keep track of blank nodes to use in WHERE clause const newBlankNodes = this.getTriplesDifference(newTriples, oldTriples).filter( - triple => triple.object.termType === 'Variable' + (triple: any) => triple.object.termType === 'Variable' ); const existingBlankNodes = oldTriples.filter( - triple => triple.object.termType === 'Variable' || triple.subject.termType === 'Variable' + (triple: any) => triple.object.termType === 'Variable' || triple.subject.termType === 'Variable' ); // Generate the query diff --git a/src/middleware/packages/ldp/services/resource/methods.ts b/src/middleware/packages/ldp/services/resource/methods.ts index 53e308826..84682617a 100644 --- a/src/middleware/packages/ldp/services/resource/methods.ts +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -6,13 +6,13 @@ const { MoleculerError } = require('moleculer').Errors; // TODO put each method in a different file (problems with "this" not working) module.exports = { - streamToFile(inputStream, filePath, maxSize) { + streamToFile(inputStream: any, filePath: any, maxSize: any) { return new Promise((resolve, reject) => { const fileWriteStream = fs.createWriteStream(filePath); const maxSizeInBytes = maxSize && bytes.parse(maxSize); let fileSize = 0; inputStream - .on('data', chunk => { + .on('data', (chunk: any) => { if (maxSizeInBytes) { fileSize += chunk.length; if (fileSize > maxSizeInBytes) { @@ -28,11 +28,13 @@ module.exports = { }, // Filter out triples whose subject is not the resource itself // We don't want to update or delete resources with IDs - filterOtherNamedNodes(triples, resourceUri) { - return triples.filter(triple => !(triple.subject.termType === 'NamedNode' && triple.subject.value !== resourceUri)); + filterOtherNamedNodes(triples: any, resourceUri: any) { + return triples.filter( + (triple: any) => !(triple.subject.termType === 'NamedNode' && triple.subject.value !== resourceUri) + ); }, - convertBlankNodesToVars(triples) { - return triples.map(triple => { + convertBlankNodesToVars(triples: any) { + return triples.map((triple: any) => { if (triple.subject.termType === 'BlankNode') { triple.subject = variable(triple.subject.value); } @@ -43,10 +45,10 @@ module.exports = { }); }, // Exclude from triples1 the triples which also exist in triples2 - getTriplesDifference(triples1, triples2) { - return triples1.filter(t1 => !triples2.some(t2 => t1.equals(t2))); + getTriplesDifference(triples1: any, triples2: any) { + return triples1.filter((t1: any) => !triples2.some((t2: any) => t1.equals(t2))); }, - nodeToString(node) { + nodeToString(node: any) { switch (node.termType) { case 'Variable': return `?${node.value}`; @@ -67,8 +69,8 @@ module.exports = { throw new Error(`Unknown node type: ${node.termType}`); } }, - buildJsonVariable(identifier, triples) { - const blankVariables = triples.filter(t => t.subject.value.localeCompare(identifier) === 0); + buildJsonVariable(identifier: any, triples: any) { + const blankVariables = triples.filter((t: any) => t.subject.value.localeCompare(identifier) === 0); const json = {}; let allIdentifiers = [identifier]; for (const blankVariable of blankVariables) { @@ -82,11 +84,11 @@ module.exports = { } return { json, allIdentifiers }; }, - removeDuplicatedVariables(triples) { - const roots = triples.filter(n => n.object.termType === 'Variable' && n.subject.termType !== 'Variable'); - const rootsIdentifiers = roots.reduce((previousValue, currentValue) => { + removeDuplicatedVariables(triples: any) { + const roots = triples.filter((n: any) => n.object.termType === 'Variable' && n.subject.termType !== 'Variable'); + const rootsIdentifiers = roots.reduce((previousValue: any, currentValue: any) => { const result = previousValue; - if (!result.find(i => i.localeCompare(currentValue.object.value) === 0)) { + if (!result.find((i: any) => i.localeCompare(currentValue.object.value) === 0)) { result.push(currentValue.object.value); } return result; @@ -100,7 +102,7 @@ module.exports = { allIdentifiers: jsonVariable.allIdentifiers }); } - const keepVariables = []; + const keepVariables: any = []; const duplicatedVariables = []; for (var rootJson of rootsJson) { if (keepVariables.find(kp => kp.stringified.localeCompare(rootJson.stringified) === 0)) { @@ -111,19 +113,19 @@ module.exports = { } const allRemovedIdentifiers = duplicatedVariables.map(dv => dv.allIdentifiers).flat(); const removedDuplicatedVariables = triples.filter( - t => !allRemovedIdentifiers.includes(t.object.value) && !allRemovedIdentifiers.includes(t.subject.value) + (t: any) => !allRemovedIdentifiers.includes(t.object.value) && !allRemovedIdentifiers.includes(t.subject.value) ); return removedDuplicatedVariables; }, - triplesToString(triples) { + triplesToString(triples: any) { return triples .map( - triple => + (triple: any) => `${this.nodeToString(triple.subject)} <${triple.predicate.value}> ${this.nodeToString(triple.object)} .` ) .join('\n'); }, - bindNewBlankNodes(triples) { - return triples.map(triple => `BIND (BNODE() AS ?${triple.object.value}) .`).join('\n'); + bindNewBlankNodes(triples: any) { + return triples.map((triple: any) => `BIND (BNODE() AS ?${triple.object.value}) .`).join('\n'); } }; diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index 2c197855a..919ab4e2d 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -3,7 +3,7 @@ import urlJoin from 'url-join'; const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); const regexProtocolAndHostAndPort = new RegExp('^http(s)?:\\/\\/([\\w-\\.:]*)'); -function createFragmentURL(baseUrl, serverUrl) { +function createFragmentURL(baseUrl: any, serverUrl: any) { let fragment = 'me'; const res = serverUrl.match(regexProtocolAndHostAndPort); if (res) fragment = res[2].replace('-', '_').replace('.', '_').replace(':', '_'); @@ -11,17 +11,17 @@ function createFragmentURL(baseUrl, serverUrl) { return urlJoin(baseUrl, `#${fragment}`); } -const isMirror = (resourceUri, baseUrl) => { +const isMirror = (resourceUri: any, baseUrl: any) => { return !urlJoin(resourceUri, '/').startsWith(baseUrl); }; -const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); +const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); /** If the value starts with `http` or `urn:` */ -const isURI = value => +const isURI = (value: any) => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); -const buildFiltersQuery = filters => { +const buildFiltersQuery = (filters: any) => { let where = ''; if (filters) { Object.keys(filters).forEach((predicate, i) => { @@ -42,16 +42,16 @@ const buildFiltersQuery = filters => { return { where }; }; -const isObject = value => typeof value === 'object' && !Array.isArray(value) && value !== null; -const getSlugFromUri = uri => uri.match(new RegExp(`.*/(.*)`))[1]; +const isObject = (value: any) => typeof value === 'object' && !Array.isArray(value) && value !== null; +const getSlugFromUri = (uri: any) => uri.match(new RegExp(`.*/(.*)`))[1]; /** @deprecated Use the ldp.resource.getContainers action instead */ -const getContainerFromUri = uri => uri.match(new RegExp(`(.*)/.*`))[1]; +const getContainerFromUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; -const getParentContainerUri = uri => uri.match(new RegExp(`(.*)/.*`))[1]; -const getParentContainerPath = path => path.match(new RegExp(`(.*)/.*`))[1]; +const getParentContainerUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; +const getParentContainerPath = (path: any) => path.match(new RegExp(`(.*)/.*`))[1]; -const getPathFromUri = uri => { +const getPathFromUri = (uri: any) => { try { const urlObject = new URL(uri); return urlObject.pathname; @@ -61,7 +61,7 @@ const getPathFromUri = uri => { }; // Transforms "http://localhost:3000/alice/data" to "alice" -const getDatasetFromUri = uri => { +const getDatasetFromUri = (uri: any) => { const path = getPathFromUri(uri); if (path) { const parts = path.split('/'); @@ -72,7 +72,7 @@ const getDatasetFromUri = uri => { }; // Transforms "http://localhost:3000/alice/data" to "http://localhost:3000/alice" -const getWebIdFromUri = uri => { +const getWebIdFromUri = (uri: any) => { const path = getPathFromUri(uri); if (path) { const parts = path.split('/'); @@ -85,26 +85,26 @@ const getWebIdFromUri = uri => { } }; -const getId = resource => resource.id || resource['@id']; -const getType = resource => resource.type || resource['@type']; +const getId = (resource: any) => resource.id || resource['@id']; +const getType = (resource: any) => resource.type || resource['@type']; -const hasType = (resource, type) => { +const hasType = (resource: any, type: any) => { const resourceType = getType(resource); return Array.isArray(resourceType) ? resourceType.includes(type) : resourceType === type; }; -const isContainer = resource => hasType(resource, 'ldp:Container'); +const isContainer = (resource: any) => hasType(resource, 'ldp:Container'); /** @deprecated Use arrayOf instead */ -const defaultToArray = value => (!value ? undefined : Array.isArray(value) ? value : [value]); +const defaultToArray = (value: any) => (!value ? undefined : Array.isArray(value) ? value : [value]); -const delay = t => new Promise(resolve => setTimeout(resolve, t)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); // Remove undefined values from object -const cleanUndefined = obj => +const cleanUndefined = (obj: any) => Object.keys(obj).reduce((acc, key) => (obj[key] === undefined ? acc : { ...acc, [key]: obj[key] }), {}); -const parseJson = json => { +const parseJson = (json: any) => { try { if (json) { return JSON.parse(json); @@ -115,7 +115,7 @@ const parseJson = json => { return json; }; -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -135,7 +135,7 @@ const arrayOf = value => { * `undefined`. * @type {import("./utilTypes").waitForResource} */ -const waitForResource = async (delayMs, fieldNames, maxTries, callback) => { +const waitForResource = async (delayMs: any, fieldNames: any, maxTries: any, callback: any) => { for (let i = 0; i < maxTries; i += 1) { const result = await callback(); // If a result (and the expected field, if required) is present, return. diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index d88f148b6..3a4c8371b 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -8,20 +8,20 @@ const handledMimeTypes = [MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE, // Put requested URL and query string in meta so that services may use them independently // Set here https://github.com/moleculerjs/moleculer-web/blob/c6ec80056a64ea15c57d6e2b946ce978d673ae92/src/index.js#L151-L161 -const parseUrl = async (req, res, next) => { +const parseUrl = async (req: any, res: any, next: any) => { req.$ctx.meta.requestUrl = req.parsedUrl; req.$ctx.meta.queryString = req.query; next(); }; -const parseHeader = async (req, res, next) => { +const parseHeader = async (req: any, res: any, next: any) => { req.$ctx.meta.headers = req.headers ? { ...req.headers } : {}; // Also remember original headers (needed for HTTP signatures verification and files type negociation) req.$ctx.meta.originalHeaders = req.headers ? { ...req.headers } : {}; next(); }; -const negotiateContentType = (req, res, next) => { +const negotiateContentType = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateContentType middleware`); @@ -45,7 +45,7 @@ const negotiateContentType = (req, res, next) => { } }; -const negotiateAccept = (req, res, next) => { +const negotiateAccept = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the negotiateAccept middleware`); @@ -64,14 +64,14 @@ const negotiateAccept = (req, res, next) => { } }; -const parseRawBody = (req, res, next) => { +const parseRawBody = (req: any, res: any, next: any) => { if (!req.$ctx.meta.contentTypeNegotiated) throw new Error(`The negotiateContentType middleware must be added before the parseRawBody middleware`); // We don't want to parse the raw body for files, otherwise the stream will not be available anymore if (handledMimeTypes.includes(req.$ctx.meta.headers['content-type'])) { let data = ''; - req.on('data', chunk => { + req.on('data', (chunk: any) => { data += chunk; }); req.on('end', () => { @@ -85,7 +85,7 @@ const parseRawBody = (req, res, next) => { } }; -const parseJson = async (req, res, next) => { +const parseJson = async (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseJson middleware`); @@ -104,7 +104,7 @@ const parseJson = async (req, res, next) => { next(); }; -const parseFile = (req, res, next) => { +const parseFile = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) throw new Error(`The parseHeader middleware must be added before the parseFile middleware`); @@ -113,10 +113,10 @@ const parseFile = (req, res, next) => { if (!handledMimeTypes.includes(contentType) && (req.method === 'POST' || req.method === 'PUT')) { if (contentType.includes('multipart/form-data')) { const busboy = new Busboy({ headers: req.$ctx.meta.headers }); - const files = []; - busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { + const files: any = []; + busboy.on('file', (fieldname: any, file: any, filename: any, encoding: any, mimetype: any) => { const readableStream = new streams.ReadableStream(); - file.on('data', data => readableStream.push(data)); + file.on('data', (data: any) => readableStream.push(data)); files.push({ fieldname, readableStream, @@ -125,7 +125,7 @@ const parseFile = (req, res, next) => { mimetype }); }); - busboy.on('field', (fieldname, val) => { + busboy.on('field', (fieldname: any, val: any) => { req.$params[fieldname] = val; }); busboy.on('finish', () => { @@ -149,27 +149,27 @@ const parseFile = (req, res, next) => { } }; -const saveDatasetMeta = (req, res, next) => { +const saveDatasetMeta = (req: any, res: any, next: any) => { req.$ctx.meta.dataset = req.$params.username; next(); }; /** @type {(msg: string) => never} */ -const throw400 = msg => { +const throw400 = (msg: any) => { throw new MoleculerError(msg, 400, 'BAD_REQUEST', { status: 'Bad Request', text: msg }); }; /** @type {(msg: string) => never} */ -const throw403 = msg => { +const throw403 = (msg: any) => { throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED', { status: 'Forbidden', text: msg }); }; /** @type {(msg: string) => never} */ -const throw404 = msg => { +const throw404 = (msg: any) => { throw new MoleculerError('Forbidden', 404, 'NOT_FOUND', { status: 'Not found', text: msg }); }; -const throw500 = msg => { +const throw500 = (msg: any) => { throw new MoleculerError(msg, 500, 'INTERNAL_SERVER_ERROR', { status: 'Server Error', text: msg }); }; diff --git a/src/middleware/packages/mime-types/index.ts b/src/middleware/packages/mime-types/index.ts index edf6b82c4..87a265d38 100644 --- a/src/middleware/packages/mime-types/index.ts +++ b/src/middleware/packages/mime-types/index.ts @@ -3,8 +3,8 @@ import { MIME_TYPES, TYPES_REPO } from './constants.ts'; const { MoleculerError } = require('moleculer').Errors; -const negotiateType = function (incomingType) { - const availableMediaTypes = []; +const negotiateType = function (incomingType: any) { + const availableMediaTypes: any = []; const negotiatorType = incomingType; TYPES_REPO.forEach(trSupported => { trSupported.mimeFull.forEach(tr => availableMediaTypes.push(tr)); @@ -21,21 +21,21 @@ const negotiateType = function (incomingType) { throw new MoleculerError(`Type not supported : ${incomingType}`, 400, 'TYPE_NOT_SUPPORTED'); }; -const negotiateTypeMime = function (incomingType) { +const negotiateTypeMime = function (incomingType: any) { return negotiateType(incomingType).mime; }; -const negotiateTypeN3 = function (incomingType) { +const negotiateTypeN3 = function (incomingType: any) { return negotiateType(incomingType).N3Mapping; }; -const negotiateTypeFuseki = function (incomingType) { +const negotiateTypeFuseki = function (incomingType: any) { return negotiateType(incomingType).fusekiMapping; }; // Return true if the provided `type` is accepted by the allowedTypes. // Note that allowedTypes may include wild cards such as "image/*" -const isMimeTypeMatching = (type, types) => { +const isMimeTypeMatching = (type: any, types: any) => { const negotiator = new Negotiator({ headers: { accept: Array.isArray(types) ? types.join(', ') : types diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index ad2ba87d6..c6b79da1f 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -141,7 +141,7 @@ const DigestNotificationsService = { build: [ { name: '*', - process(job) { + process(job: any) { return this.actions.build({ frequency: job.name, timestamp: job.opts.prevMillis }); } } diff --git a/src/middleware/packages/notifications/services/expo-push/notification.ts b/src/middleware/packages/notifications/services/expo-push/notification.ts index 84c6db6bf..c18f8f5f8 100644 --- a/src/middleware/packages/notifications/services/expo-push/notification.ts +++ b/src/middleware/packages/notifications/services/expo-push/notification.ts @@ -92,7 +92,7 @@ const ExpoPushNotificationService = { if (notifications) { const receiptIdChunks = this.expo.chunkPushNotificationReceiptIds( - notifications.map(notification => notification['semapps:receiptId']) + notifications.map((notification: any) => notification['semapps:receiptId']) ); // Like sending notifications, there are different strategies you could use @@ -105,7 +105,9 @@ const ExpoPushNotificationService = { // notification and information about an error, if one occurred. for (const receiptId in receipts) { let { status, message, details } = receipts[receiptId]; - const notificationId = notifications.find(notification => notification.receiptId === receiptId)['@id']; + const notificationId = notifications.find((notification: any) => notification.receiptId === receiptId)[ + '@id' + ]; if (status === 'ok') { await this.actions.update( diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 1987811f2..661d029df 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -4,7 +4,7 @@ import MailService from 'moleculer-mail'; import { getSlugFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; -const delay = t => new Promise(resolve => setTimeout(resolve, t)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); const SingleMailNotificationsService = { name: 'notifications.single-mail' as const, @@ -88,7 +88,7 @@ const SingleMailNotificationsService = { queues: { sendMail: { name: '*', - async process(job) { + async process(job: any) { job.progress(0); const result = await this.actions.send(job.data); job.progress(100); diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index aca958708..831e97d8b 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -7,8 +7,8 @@ const Schema = { const ontologies = await this.actions.list({}, { parentCtx: ctx }); return Object.fromEntries( ontologies - .sort((a, b) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) - .map(ontology => [ontology.prefix, ontology.namespace]) + .sort((a: any, b: any) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) + .map((ontology: any) => [ontology.prefix, ontology.namespace]) ); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index 83762e30d..10a136889 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -6,8 +6,8 @@ const Schema = { async handler(ctx) { const ontologies = await this.actions.list({}, { parentCtx: ctx }); return ontologies - .sort((a, b) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) - .map(ontology => `PREFIX ${ontology.prefix}: <${ontology.namespace}>`) + .sort((a: any, b: any) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) + .map((ontology: any) => `PREFIX ${ontology.prefix}: <${ontology.namespace}>`) .join('\n'); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ontologies/sub-services/registry.ts b/src/middleware/packages/ontologies/sub-services/registry.ts index 035f461bf..86f6af2e4 100644 --- a/src/middleware/packages/ontologies/sub-services/registry.ts +++ b/src/middleware/packages/ontologies/sub-services/registry.ts @@ -29,7 +29,7 @@ const OntologiesRegistrySchema = { list: { async handler(ctx) { const ontologies = await this._list(ctx, {}); - return ontologies.rows.map(({ prefix, namespace }) => ({ prefix, namespace })); + return ontologies.rows.map(({ prefix, namespace }: any) => ({ prefix, namespace })); } }, diff --git a/src/middleware/packages/ontologies/utils.ts b/src/middleware/packages/ontologies/utils.ts index 6baeb130a..add7a1363 100644 --- a/src/middleware/packages/ontologies/utils.ts +++ b/src/middleware/packages/ontologies/utils.ts @@ -1,4 +1,4 @@ -const arrayOf = value => { +const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -11,5 +11,5 @@ const arrayOf = value => { return [value]; }; -const isURL = value => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); +const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); export { arrayOf, isURL }; diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index 71b0f7a08..baab5dff6 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -227,11 +227,11 @@ const Schema = { getMatchingChannels(topic) { const now = new Date(); const matchedChannels = this.channels - .filter(c => c.topic === topic) - .filter(c => (c.startAt ? new Date(c.startAt) <= now : true)) - .filter(c => (c.endAt ? new Date(c.endAt) > now : true)) + .filter((c: any) => c.topic === topic) + .filter((c: any) => (c.startAt ? new Date(c.startAt) <= now : true)) + .filter((c: any) => (c.endAt ? new Date(c.endAt) > now : true)) // Check if rate is exceeded. - .filter(c => { + .filter((c: any) => { if (!(c.lastTriggered && c.rate)) return true; return moment.duration(c.rate).asMilliseconds() < now - c.lastTriggered; }); @@ -269,7 +269,7 @@ const Schema = { // Trigger onEvent for each channel (handled by implementing service). await Promise.all( - channelsToTrigger.map(async channel => { + channelsToTrigger.map(async (channel: any) => { await this.onEvent(channel, activity); }) ); @@ -331,8 +331,8 @@ const Schema = { after: { delete(ctx, res) { const { resourceUri } = ctx.params; - const channel = this.channels.find(c => c.id === resourceUri); - this.channels = this.channels.filter(c => c.id !== resourceUri); + const channel = this.channels.find((c: any) => c.id === resourceUri); + this.channels = this.channels.filter((c: any) => c.id !== resourceUri); this.onChannelDeleted(channel); return res; } diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index 078d6ef11..f73fa2761 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -39,7 +39,7 @@ const WebhookChannel2023Service = { async handler(ctx) { const { appUri, webId } = ctx.params; const { origin: appOrigin } = new URL(appUri); - return this.channels.filter(c => c.webId === webId && c.sendTo.startsWith(appOrigin)); + return this.channels.filter((c: any) => c.webId === webId && c.sendTo.startsWith(appOrigin)); } }, @@ -61,7 +61,7 @@ const WebhookChannel2023Service = { queues: { webhookPost: { name: '*', - async process(job) { + async process(job: any) { const { channel, activity } = job.data; try { diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index 62d4bcd35..8308a594a 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -28,10 +28,10 @@ const WebSocketChannel2023Service = { route: `/.notifications/WebSocketChannel2023/socket/:id`, handlers: { /** @param {import('@activitypods/core/services/websocket/websocket.mixin').Connection} connection */ - onConnection: connection => { + onConnection: (connection: any) => { this.logger.debug('onConnection', connection.requestUrl); - const channel = this.channels.find(c => c.receiveFrom === connection.requestUrl); + const channel = this.channels.find((c: any) => c.receiveFrom === connection.requestUrl); // Check if the requested channel is registered. if (!channel) { connection.webSocket.close(404, 'Channel not found.'); @@ -39,15 +39,15 @@ const WebSocketChannel2023Service = { } this.socketConnections.push(connection); }, - onClose: (event, connection) => { + onClose: (event: any, connection: any) => { this.logger.debug('onClose', connection.requestUrl); - this.socketConnections = this.socketConnections.filter(c => c !== connection); + this.socketConnections = this.socketConnections.filter((c: any) => c !== connection); }, // onMessage: (message, connection) => { // this.logger.debug('onMessage', message, connection.requestUrl); // // We don't expect any messages. // }, - onError: (event, connection) => { + onError: (event: any, connection: any) => { this.logger.debug('onError', event, connection.requestUrl); // There is nothing to handle here. } @@ -58,8 +58,8 @@ const WebSocketChannel2023Service = { onChannelDeleted(channel) { // Close open connections (is removed from array on close event). this.socketConnections - .filter(socketConnection => socketConnection.requestUrl === channel.receiveFrom) - .forEach(connection => connection.webSocket.close(1001, 'The channel was deleted.')); + .filter((socketConnection: any) => socketConnection.requestUrl === channel.receiveFrom) + .forEach((connection: any) => connection.webSocket.close(1001, 'The channel was deleted.')); }, onEvent(channel, activity) { const message = JSON.stringify({ @@ -68,8 +68,8 @@ const WebSocketChannel2023Service = { }); this.socketConnections - .filter(socketConnection => socketConnection.requestUrl === channel.receiveFrom) - .forEach(connection => connection.webSocket.send(message)); + .filter((socketConnection: any) => socketConnection.requestUrl === channel.receiveFrom) + .forEach((connection: any) => connection.webSocket.send(message)); }, createReceiveFromUri() { // Create a random URI to be registered for `receiveFrom` for a new channel under `this.channels`. diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 7a68b2a5c..6eff26b57 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -59,7 +59,7 @@ const SolidNotificationsListenerSchema = { // Check if a listener already exist const existingListener = this.listeners.find( - listener => listener.resourceUri === resourceUri && listener.actionName === actionName + (listener: any) => listener.resourceUri === resourceUri && listener.actionName === actionName ); if (existingListener) { @@ -79,7 +79,7 @@ const SolidNotificationsListenerSchema = { `Channel ${existingListener.channelUri} doesn't exist anymore. Registering a new channel...` ); this.actions.remove({ id: existingListener['@id'] }, { parentCtx: ctx }); - this.listeners = this.listeners.filter(l => l['@id'] !== existingListener['@id']); + this.listeners = this.listeners.filter((l: any) => l['@id'] !== existingListener['@id']); } else { throw e; } @@ -92,7 +92,7 @@ const SolidNotificationsListenerSchema = { // Fetch all subscriptions URLs const results = await Promise.all( - storageDescription['notify:subscription'].map(channelSubscriptionUrl => + storageDescription['notify:subscription'].map((channelSubscriptionUrl: any) => fetch(channelSubscriptionUrl, { headers: { Accept: 'application/ld+json' @@ -142,7 +142,7 @@ const SolidNotificationsListenerSchema = { // Keep track of the channel URI, to be able to check if it still exists listener.channelUri = body.id; await this._update(ctx, listener); - const listenerIndex = this.listeners.findIndex(l => l['@id'] === listener['@id']); + const listenerIndex = this.listeners.findIndex((l: any) => l['@id'] === listener['@id']); this.listeners[listenerIndex] = listener; return listener; @@ -154,7 +154,7 @@ const SolidNotificationsListenerSchema = { const { uuid, ...data } = ctx.params; const webhookUrl = urlJoin(this.settings.baseUrl, '.webhooks', uuid); - const listener = this.listeners.find(l => l.webhookUrl === webhookUrl); + const listener = this.listeners.find((l: any) => l.webhookUrl === webhookUrl); if (listener) { try { diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 7bc76cf78..072974ae5 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -186,7 +186,7 @@ const TypeIndexesSchema = { methods: { async preferencesFileAvailable() { const services = await this.broker.call('$node.services'); - return services.some(s => s.name === 'solid-preferences-file'); + return services.some((s: any) => s.name === 'solid-preferences-file'); } }, events: { diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index c297ad251..ddba26873 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -39,7 +39,7 @@ const TypeRegistrationsSchema = { types: existingRegistration['solid:forClass'] }); - const newExpandedTypes = expandedTypes.filter(t => !oldExpandedTypes.includes(t)); + const newExpandedTypes = expandedTypes.filter((t: any) => !oldExpandedTypes.includes(t)); if (newExpandedTypes.length > 0) { for (const expandedType of newExpandedTypes) { @@ -230,7 +230,7 @@ const TypeRegistrationsSchema = { const registrations = await this.actions.getByType({ type, webId }, { parentCtx: ctx }); - return registrations.map(r => r['solid:instanceContainer']); + return registrations.map((r: any) => r['solid:instanceContainer']); } }, diff --git a/src/middleware/packages/sparql-endpoint/getRoute.ts b/src/middleware/packages/sparql-endpoint/getRoute.ts index 79a5df28c..c5585cbee 100644 --- a/src/middleware/packages/sparql-endpoint/getRoute.ts +++ b/src/middleware/packages/sparql-endpoint/getRoute.ts @@ -8,7 +8,7 @@ import { const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, saveDatasetMeta]; -function getRoute(path) { +function getRoute(path: any) { return { path, name: 'sparql-endpoint', @@ -25,7 +25,7 @@ function getRoute(path) { json: false, urlencoded: false }, - onError(req, res, err) { + onError(req: any, res: any, err: any) { const { type, code, message, data, name } = err; res.writeHead(Number(code) || 500, data && data.status ? data.status : 'Server error', { 'Content-Type': 'application/json' diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index b3eca4b36..bff1f8ea3 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -11,14 +11,14 @@ const handledWacActions = [ const ObjectsWatcherMiddleware = (config = {}) => { const { baseUrl, podProvider = false, postWithoutRecipients = false, transientActivities = false } = config; - let relayActor; - let excludedContainersPathRegex = []; + let relayActor: any; + let excludedContainersPathRegex: any = []; let initialized = false; let cacherActivated = false; if (!baseUrl) throw new Error('The baseUrl setting is missing from ObjectsWatcherMiddleware'); - const isHandled = actionName => { + const isHandled = (actionName: any) => { // In a Pod provider config, we want to handle only LDP-related actions // The AnnouncerService takes care of resources sharing with other users if (podProvider) { @@ -29,7 +29,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { }; /** Get owner WebID of resource (by looking at the slash URI). */ - const getActor = async (ctx, resourceUri) => { + const getActor = async (ctx: any, resourceUri: any) => { if (podProvider) { const url = new URL(resourceUri); const podOwnerUri = `${url.origin}/${url.pathname.split('/')[1]}`; @@ -38,7 +38,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { return relayActor; }; - const clearWebAclCache = async (ctx, resourceUri, containerUri) => { + const clearWebAclCache = async (ctx: any, resourceUri: any, containerUri: any) => { if (cacherActivated) { // TODO Use WebAclMiddleware instead of events to clear cache immediately // https://github.com/assemblee-virtuelle/semapps/issues/1127 @@ -50,24 +50,24 @@ const ObjectsWatcherMiddleware = (config = {}) => { } }; - const getRecipients = async (ctx, resourceUri) => { + const getRecipients = async (ctx: any, resourceUri: any) => { const isPublic = await ctx.call('webacl.resource.isPublic', { resourceUri }); const actor = await getActor(ctx, resourceUri); const usersWithReadRights = await ctx.call('webacl.resource.getUsersWithReadRights', { resourceUri }); - const recipients = usersWithReadRights.filter(u => u !== actor.id); + const recipients = usersWithReadRights.filter((u: any) => u !== actor.id); if (isPublic) { return [...recipients, actor.followers, PUBLIC_URI]; } return recipients; }; - const isExcluded = containersUris => { - return containersUris.some(uri => + const isExcluded = (containersUris: any) => { + return containersUris.some((uri: any) => excludedContainersPathRegex.some(pathRegex => pathRegex.test(new URL(uri).pathname)) ); }; - const outboxPost = async (ctx, resourceUri, recipients, activity) => { + const outboxPost = async (ctx: any, resourceUri: any, recipients: any, activity: any) => { if (recipients.length > 0 || postWithoutRecipients) { const actor = await getActor(ctx, resourceUri); @@ -87,7 +87,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { return { name: 'ObjectsWatcherMiddleware', - async started(broker) { + async started(broker: any) { if (!podProvider) { await broker.waitForServices('activitypub.relay'); relayActor = await broker.call('activitypub.relay.getActor'); @@ -103,9 +103,9 @@ const ObjectsWatcherMiddleware = (config = {}) => { initialized = true; cacherActivated = !!broker.cacher; }, - localAction: (next, action) => { + localAction: (next: any, action: any) => { if (isHandled(action.name)) { - return async ctx => { + return async (ctx: any) => { // Don't handle actions until middleware is fully started // Otherwise, the creation of the relay actor calls the middleware before it started if (!initialized) return await next(ctx); @@ -116,7 +116,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { let resourceUri; let containerUri; let oldContainers; - let oldRecipients; + let oldRecipients: any; switch (action.name) { case 'ldp.container.post': @@ -245,7 +245,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { // Clear cache now otherwise getRecipients() may return the old cache rights await clearWebAclCache(ctx, resourceUri, containerUri); const newRecipients = await getRecipients(ctx, ctx.params.resourceUri); - const recipientsAdded = newRecipients.filter(u => !oldRecipients.includes(u)); + const recipientsAdded = newRecipients.filter((u: any) => !oldRecipients.includes(u)); if (recipientsAdded.length > 0) { const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri @@ -266,7 +266,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { const newRecipients = await getRecipients(ctx, ctx.params.resourceUri); const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri }); - const recipientsAdded = newRecipients.filter(u => !oldRecipients.includes(u)); + const recipientsAdded = newRecipients.filter((u: any) => !oldRecipients.includes(u)); if (recipientsAdded.length > 0) { outboxPost(ctx, ctx.params.resourceUri, recipientsAdded, { type: ACTIVITY_TYPES.CREATE, @@ -275,7 +275,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { }); } - const recipientsRemoved = oldRecipients.filter(u => !newRecipients.includes(u)); + const recipientsRemoved = oldRecipients.filter((u: any) => !newRecipients.includes(u)); if (recipientsRemoved.length > 0) { outboxPost(ctx, ctx.params.resourceUri, recipientsRemoved, { type: ACTIVITY_TYPES.DELETE, @@ -314,7 +314,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { // Clear cache now otherwise getRecipients() may return the old cache rights await clearWebAclCache(ctx, resourceUri, containerUri); const newRecipients = await getRecipients(ctx, ctx.params.resourceUri); - const recipientsRemoved = oldRecipients.filter(u => !newRecipients.includes(u)); + const recipientsRemoved = oldRecipients.filter((u: any) => !newRecipients.includes(u)); if (recipientsRemoved.length > 0 && !newRecipients.includes(PUBLIC_URI)) { const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri @@ -337,9 +337,9 @@ const ObjectsWatcherMiddleware = (config = {}) => { // Do not use the middleware for this action return next; }, - localEvent(next, event) { + localEvent(next: any, event: any) { if (event.name === 'ldp.registry.registered') { - return async ctx => { + return async (ctx: any) => { const { container } = ctx.params; if (container.excludeFromMirror === true && !excludedContainersPathRegex.includes(container.pathRegex)) { excludedContainersPathRegex.push(container.pathRegex); diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index 855f26e09..a0d81e1e6 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -32,7 +32,7 @@ const AggregatorSchema = { type: ACTIVITY_TYPES.FOLLOW } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (this.settings.acceptFollowOffers && recipientUri === this.relayActor.id) { return await ctx.call('activitypub.outbox.post', { collectionUri: this.relayActor.outbox, diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index 9752aa2af..ba6bf712a 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -64,7 +64,7 @@ const SynchronizerService = { match: { type: ACTIVITY_TYPES.CREATE }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (await this.isValid(activity, recipientUri)) { for (let resource of arrayOf(activity.object)) { const resourceUri = typeof resource === 'string' ? resource : resource['@id'] || resource.id; @@ -135,7 +135,7 @@ const SynchronizerService = { match: { type: ACTIVITY_TYPES.UPDATE }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (await this.isValid(activity, recipientUri)) { for (let resource of arrayOf(activity.object)) { resource = await ctx.call( @@ -160,7 +160,7 @@ const SynchronizerService = { match: { type: ACTIVITY_TYPES.DELETE }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (await this.isValid(activity, recipientUri)) { for (const resource of arrayOf(activity.object)) { const resourceUri = typeof resource === 'string' ? resource : resource.id || resource['@id']; @@ -200,7 +200,7 @@ const SynchronizerService = { type: OBJECT_TYPES.RELATIONSHIP } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (this.settings.synchronizeContainers) { if (await this.isValid(activity, recipientUri)) { const predicate = await ctx.call('jsonld.parser.expandPredicate', { @@ -225,7 +225,7 @@ const SynchronizerService = { type: OBJECT_TYPES.RELATIONSHIP } }, - async onReceive(ctx, activity, recipientUri) { + async onReceive(ctx: any, activity: any, recipientUri: any) { if (this.settings.synchronizeContainers) { if (await this.isValid(activity, recipientUri)) { const predicate = await ctx.call('jsonld.parser.expandPredicate', { diff --git a/src/middleware/packages/triplestore/adapter.ts b/src/middleware/packages/triplestore/adapter.ts index 57947f067..f7bc08639 100644 --- a/src/middleware/packages/triplestore/adapter.ts +++ b/src/middleware/packages/triplestore/adapter.ts @@ -6,14 +6,14 @@ import { frame } from 'jsonld'; import { sanitizeSparqlUri, sanitizeSparqlString } from './utils.ts'; class TripleStoreAdapter { - constructor({ type, dataset, baseUri, ontology = 'http://semapps.org/ns/core#' }) { + constructor({ type, dataset, baseUri, ontology = 'http://semapps.org/ns/core#' }: any) { this.type = type; this.baseUri = baseUri || `urn:${type}:`; this.dataset = dataset; this.ontology = ontology; } - init(broker, service) { + init(broker: any, service: any) { this.broker = broker; this.service = service; } @@ -42,7 +42,7 @@ class TripleStoreAdapter { * - searchFields * - query */ - find(params) { + find(params: any) { const { query } = params; // Ensure that the value does not contain SPARQL injection @@ -68,12 +68,12 @@ class TripleStoreAdapter { `, dataset: this.dataset }) - .then(result => { + .then((result: any) => { return frame(result, { '@context': { '@vocab': this.ontology } }); }) - .then(result => { + .then((result: any) => { if (result['@graph']) { // Several results return result['@graph']; @@ -90,14 +90,14 @@ class TripleStoreAdapter { /** * Find an entity by query */ - findOne(query) { + findOne(query: any) { throw new Error('Method not implemented'); } /** * Find an entity by ID. */ - findById(_id) { + findById(_id: any) { return this.broker .call('triplestore.query', { query: ` @@ -108,7 +108,7 @@ class TripleStoreAdapter { `, dataset: this.dataset }) - .then(result => { + .then((result: any) => { return frame(result, { '@context': { '@vocab': this.ontology }, '@id': _id @@ -119,8 +119,8 @@ class TripleStoreAdapter { /** * Find all entities by IDs */ - findByIds(ids) { - return Promise.all(ids.map(id => this.findById(id))); + findByIds(ids: any) { + return Promise.all(ids.map((id: any) => this.findById(id))); } /** @@ -132,13 +132,13 @@ class TripleStoreAdapter { * - query */ count(filters = {}) { - return this.find(filters).then(result => result.length); + return this.find(filters).then((result: any) => result.length); } /** * Insert an entity */ - insert(entity) { + insert(entity: any) { const { slug, ...resource } = entity; resource['@id'] = this.baseUri + (slug || uuidv4()); @@ -162,21 +162,21 @@ class TripleStoreAdapter { /** * Insert multiple entities */ - insertMany(entities) { + insertMany(entities: any) { throw new Error('Method not implemented'); } /** * Update many entities by `query` and `update` */ - updateMany(query, update) { + updateMany(query: any, update: any) { throw new Error('Method not implemented'); } /** * Update an entity by ID */ - updateById(_id, update) { + updateById(_id: any, update: any) { let { id, '@id': arobaseId, ...newData } = update.$set; // Check ID and transform it to URI if necessary @@ -184,7 +184,7 @@ class TripleStoreAdapter { if (!_id) throw new Error('An ID must be specified to update resources'); return this.findById(_id) - .then(oldData => { + .then((oldData: any) => { newData = { ...oldData, ...newData }; return this.broker.call('triplestore.update', { query: ` @@ -228,14 +228,14 @@ class TripleStoreAdapter { /** * Remove many entities which are matched by `query` */ - removeMany(query) { + removeMany(query: any) { throw new Error('Method not implemented'); } /** * Remove an entity by ID */ - removeById(_id) { + removeById(_id: any) { return this.broker .call('triplestore.update', { query: `DELETE WHERE { <${_id}> ?p ?o . }`, @@ -260,21 +260,21 @@ class TripleStoreAdapter { /** * Convert DB entity to JSON object */ - entityToObject(entity) { + entityToObject(entity: any) { return entity; } /** * Transforms 'idField' into MongoDB's '_id' */ - beforeSaveTransformID(entity, idField) { + beforeSaveTransformID(entity: any, idField: any) { return entity; } /** * Transforms MongoDB's '_id' into user defined 'idField' */ - afterRetrieveTransformID(entity, idField) { + afterRetrieveTransformID(entity: any, idField: any) { return entity; } } diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index a7eed09ad..77df480d2 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -5,7 +5,7 @@ import urlJoin from 'url-join'; import format from 'string-template'; import { ServiceSchema } from 'moleculer'; -const delay = t => new Promise(resolve => setTimeout(resolve, t)); +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); /** @type {import('moleculer').ServiceSchema} */ const DatasetService = { @@ -88,7 +88,7 @@ const DatasetService = { if (response.ok) { const json = await response.json(); - return json.datasets.map(dataset => dataset['ds.name'].substring(1)); + return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); } return []; } diff --git a/src/middleware/packages/triplestore/utils.ts b/src/middleware/packages/triplestore/utils.ts index 5c6e1821c..bc7f2e563 100644 --- a/src/middleware/packages/triplestore/utils.ts +++ b/src/middleware/packages/triplestore/utils.ts @@ -3,7 +3,7 @@ const { MoleculerError } = require('moleculer').Errors; /** * Throw an error if the value includes a bracket or a space */ -const sanitizeSparqlUri = value => { +const sanitizeSparqlUri = (value: any) => { if (value && (value.includes('>') || value.includes('<') || /\s/g.test(value))) { throw new MoleculerError('SPARQL injection detected', 400, 'SPARQL_INJECTION'); } else { @@ -14,7 +14,7 @@ const sanitizeSparqlUri = value => { /** * Throw an error if the value includes a quote */ -const sanitizeSparqlString = value => { +const sanitizeSparqlString = (value: any) => { if (value && value.includes('"')) { throw new MoleculerError('SPARQL injection detected', 400, 'SPARQL_INJECTION'); } else { @@ -26,7 +26,7 @@ const sanitizeSparqlString = value => { * Tagged template literal that can be used to check that all variables passed are either URIs or strings. * URIs are detected by looking if they are surrounded by brackets, and strings if they are surrounded by quotes */ -const sanitizeSparqlQuery = (fragments, ...values) => { +const sanitizeSparqlQuery = (fragments: any, ...values: any[]) => { values.forEach((value, i) => { if (fragments[i].endsWith('<') && fragments[i + 1].startsWith('>')) { sanitizeSparqlUri(value); diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index f49cc5874..27c2f1aa8 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -17,11 +17,11 @@ const prefixes = { xsd: 'http://www.w3.org/2001/XMLSchema#' }; -function streamToString(stream) { +function streamToString(stream: any) { let res = ''; return new Promise((resolve, reject) => { - stream.on('data', chunk => (res += chunk)); - stream.on('error', err => reject(err)); + stream.on('data', (chunk: any) => (res += chunk)); + stream.on('error', (err: any) => reject(err)); stream.on('end', () => resolve(res)); }); } @@ -49,7 +49,7 @@ const jsonContext = { 'void:classPartition': { '@type': '@id' } }; -const addClassPartition = (serverUrl, partition, graph, scalar) => { +const addClassPartition = (serverUrl: any, partition: any, graph: any, scalar: any) => { const blank = blankNode(`b${scalar}`); blank.data = [ { @@ -57,7 +57,7 @@ const addClassPartition = (serverUrl, partition, graph, scalar) => { p: namedNode('http://rdfs.org/ns/void#uriSpace'), o: literal(partition['http://rdfs.org/ns/void#uriSpace']) }, - ...partition['http://rdfs.org/ns/void#class'].map(t => { + ...partition['http://rdfs.org/ns/void#class'].map((t: any) => { return { s: blankNode(`b${scalar}`), p: namedNode('http://rdfs.org/ns/void#class'), o: namedNode(t) }; }), { @@ -80,15 +80,15 @@ const addClassPartition = (serverUrl, partition, graph, scalar) => { }; const addMirrorServer = async ( - baseUrl, - serverUrl, - graph, - hasSparql, - containers, - mirrorGraph, - ctx, - nextScalar, - originalVoid + baseUrl: any, + serverUrl: any, + graph: any, + hasSparql: any, + containers: any, + mirrorGraph: any, + ctx: any, + nextScalar: any, + originalVoid: any ) => { const thisServer = createFragmentURL(baseUrl, serverUrl); @@ -136,7 +136,7 @@ const addMirrorServer = async ( const partition = { 'http://rdfs.org/ns/void#uriSpace': p, - 'http://rdfs.org/ns/void#class': types.map(type => type.t.value) + 'http://rdfs.org/ns/void#class': types.map((type: any) => type.t.value) }; const count = await ctx.call('triplestore.query', { @@ -262,7 +262,7 @@ const VoidSchema = { const services = await ctx.call('$node.services'); const hasSparql = - services.filter(s => s.name === 'sparqlEndpoint').length > 0 + services.filter((s: any) => s.name === 'sparqlEndpoint').length > 0 ? urlJoin(this.settings.baseUrl, 'sparql') : undefined; if (hasSparql) @@ -297,7 +297,7 @@ const VoidSchema = { }); const serversMap = {}; - for (const s of serversContainers.map(sc => sc.s.value)) { + for (const s of serversContainers.map((sc: any) => sc.s.value)) { const res = s.match(regexProtocolAndHostAndPort); if (res) { const name = urlJoin(res[0], '/'); @@ -393,9 +393,9 @@ const VoidSchema = { prefixes: { ...prefixes, ...prefix, '': `${voidUrl}#` }, format: 'Turtle' }); - output.forEach(f => { + output.forEach((f: any) => { if (f.o.termType === 'BlankNode') { - const predicates = f.o.data.map(p => { + const predicates = f.o.data.map((p: any) => { let obj = p.o; if (Array.isArray(obj)) obj = writer.list(obj); return { diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index cbe914cbb..9f75d3df0 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -70,7 +70,7 @@ const AuthorizerBotSchema = { const newUsers = this.getUsers(rule, newData); const oldUsers = this.getUsers(rule, oldData); - const usersToAdd = newUsers.filter(t1 => !oldUsers.some(t2 => t1 === t2)); + const usersToAdd = newUsers.filter((t1: any) => !oldUsers.some((t2: any) => t1 === t2)); for (const userUri of usersToAdd) { await ctx.call('webacl.resource.addRights', { resourceUri, @@ -91,7 +91,7 @@ const AuthorizerBotSchema = { }); } - const usersToRemove = oldUsers.filter(t1 => !newUsers.some(t2 => t1 === t2)); + const usersToRemove = oldUsers.filter((t1: any) => !newUsers.some((t2: any) => t1 === t2)); for (const userUri of usersToRemove) { await ctx.call('webacl.resource.removeRights', { resourceUri, diff --git a/src/middleware/packages/webacl/middlewares/cacher.ts b/src/middleware/packages/webacl/middlewares/cacher.ts index cfe348d51..6ff2a24f5 100644 --- a/src/middleware/packages/webacl/middlewares/cacher.ts +++ b/src/middleware/packages/webacl/middlewares/cacher.ts @@ -1,25 +1,27 @@ import { Cachers } from 'moleculer'; -let cacher; +let cacher: any; // It has been suggested to put this middleware in Moleculer core code: // https://github.com/moleculerjs/moleculer/issues/892 -const CacherMiddleware = opts => ({ +const CacherMiddleware = (opts: any) => ({ name: 'CacherMiddleware', - created(broker) { + + created(broker: any) { if (opts) { broker.cacher = Cachers.resolve(opts); broker.cacher.init(broker); cacher = broker.cacher.middleware(); } }, + // TODO see why this is not called by Moleculer // async stopped(broker) { // if (opts) { // await broker.cacher.close(); // } // }, - localAction(next, action) { + localAction(next: any, action: any) { if (cacher) { return cacher.localAction(next, action); } diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index b48103fce..859d687ed 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -15,7 +15,7 @@ const modifyActions = [ const tripleStoreActions = ['triplestore.insert', 'triplestore.query', 'triplestore.update', 'triplestore.dropAll']; -const addRightsToNewResource = async (ctx, resourceUri, webId) => { +const addRightsToNewResource = async (ctx: any, resourceUri: any, webId: any) => { const { newResourcesPermissions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); const newRights = typeof newResourcesPermissions === 'function' ? newResourcesPermissions(webId, ctx) : newResourcesPermissions; @@ -35,7 +35,7 @@ const addRightsToNewResource = async (ctx, resourceUri, webId) => { ); }; -const addRightsToNewUser = async (ctx, userUri) => { +const addRightsToNewUser = async (ctx: any, userUri: any) => { // Manually add the permissions for the user resource now that we have its webId // First delete the default permissions added by the middleware when we called ldp.resource.create await ctx.call( @@ -78,14 +78,14 @@ const addRightsToNewUser = async (ctx, userUri) => { * Middleware that ensures that requests are conforming ACL records. * @type {import('moleculer').Middleware} */ -const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://semapps.org/webacl' }) => ({ +const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://semapps.org/webacl' }: any) => ({ name: 'WebAclMiddleware', async started() { if (!baseUrl) throw new Error('The baseUrl config is missing for the WebACL middleware'); }, - localAction: (next, action) => { + localAction: (next: any, action: any) => { if (modifyActions.includes(action.name)) { - return async ctx => { + return async (ctx: any) => { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let actionReturnValue; @@ -293,7 +293,7 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se return actionReturnValue; }; } else if (tripleStoreActions.includes(action.name)) { - return async ctx => { + return async (ctx: any) => { if (podProvider) { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const dataset = ctx.params.dataset || ctx.meta.dataset; diff --git a/src/middleware/packages/webacl/routes/getRoutes.ts b/src/middleware/packages/webacl/routes/getRoutes.ts index dc9a118d2..e0fbde78f 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.ts +++ b/src/middleware/packages/webacl/routes/getRoutes.ts @@ -2,7 +2,7 @@ import path from 'path'; import { parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson } from '@semapps/middlewares'; -const onError = (req, res, err) => { +const onError = (req: any, res: any, err: any) => { const { type, code, message, data, name } = err; res.writeHead(Number(code) || 500, data && data.status ? data.status : 'Server error', { 'Content-Type': 'application/json' @@ -10,7 +10,7 @@ const onError = (req, res, err) => { res.end(JSON.stringify({ type, code, message, data, name })); }; -const getRoutes = (basePath, podProvider) => { +const getRoutes = (basePath: any, podProvider: any) => { const middlewares = [parseHeader, negotiateContentType, negotiateAccept, parseRawBody, parseJson]; return [ diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts index 2161f257c..b8bfaa2c4 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.ts +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -25,7 +25,7 @@ const WebaclAuthorizerSchema = { const rights = await ctx.call('webacl.resource.hasRights', { resourceUri: uri, webId, - rights: Object.fromEntries(modesToCheck.map(m => [m, true])) + rights: Object.fromEntries(modesToCheck.map((m: any) => [m, true])) }); // Return true if there is at least one true value diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 790451ce4..e96a21b0d 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -4,7 +4,7 @@ import { ActionSchema } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index e1cf30f77..2648e353d 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -5,7 +5,7 @@ import { ActionSchema } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index cdf2282ae..3e3400c3c 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -5,7 +5,7 @@ import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; const { MoleculerError } = require('moleculer').Errors; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; await ctx.call('webacl.group.delete', { groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index 10d0b1e8f..861cf2b1d 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; return await ctx.call('webacl.group.getGroups', {}); }; @@ -53,6 +53,6 @@ export const action = { }); } - return groups.map(m => m.g.value); + return groups.map((m: any) => m.g.value); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 1879ad0ce..1c3954d96 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -4,7 +4,7 @@ import { ActionSchema } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; return await ctx.call('webacl.group.getMembers', { groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id @@ -52,6 +52,6 @@ export const action = { webId: 'system' }); - return members.map(m => m.m.value); + return members.map((m: any) => m.m.value); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 7b6aa4ee6..35f712417 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -4,7 +4,7 @@ import { ActionSchema } from 'moleculer'; const { MoleculerError } = require('moleculer').Errors; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { if (!ctx.params.deleteUserUri) throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index 1c519c8a7..663299ec2 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -51,8 +51,10 @@ const WebaclGroupSchema = { await Promise.all( members - .filter(memberUri => !superAdmins.includes(memberUri)) - .map(memberUri => this.actions.removeMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' })) + .filter((memberUri: any) => !superAdmins.includes(memberUri)) + .map((memberUri: any) => + this.actions.removeMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' }) + ) ); } diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index 7424cb862..a010fc8d4 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -13,7 +13,7 @@ import { const { MoleculerError } = require('moleculer').Errors; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { const contentType = ctx.meta.headers['content-type']; let { slugParts } = ctx.params; @@ -53,7 +53,7 @@ export const action = { let difference; let currentAuths; - let isContainer; + let isContainer: any; if (!newRights && (addedRights || additionalRights)) { if (!addedRights && !additionalRights) @@ -78,7 +78,7 @@ export const action = { if (addedRights.length === 0) new MoleculerError('No additional permissions to add!', 400, 'BAD_REQUEST'); } else { // filter out all the addedRights that are not for the resource - addedRights = addedRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); + addedRights = addedRights.filter((a: any) => filterTriplesForResource(a, aclUri, isContainer)); if (addedRights.length === 0) throw new MoleculerError('The rights cannot be added because they are incorrect', 400, 'BAD_REQUEST'); } @@ -92,7 +92,9 @@ export const action = { ); // find the difference between addedRights and currentPerms. add only what is not existent yet. - difference = addedRights.filter(x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p)); + difference = addedRights.filter( + (x: any) => !currentPerms.some((y: any) => x.auth === y.auth && x.o === y.o && x.p === y.p) + ); if (difference.length === 0) return; // compile a list of Authorization already present. if some of them don't exist, we need to create them here below @@ -138,14 +140,14 @@ export const action = { ctx.emit('webacl.resource.created', returnValues, { meta: { webId: null, dataset: null } }); return returnValues; } - const defaultRightsUpdated = isContainer && difference.some(triple => triple.auth.includes('#Default')); + const defaultRightsUpdated = isContainer && difference.some((triple: any) => triple.auth.includes('#Default')); const addPublicRead = difference.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + (triple: any) => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); const addDefaultPublicRead = isContainer && difference.some( - triple => + (triple: any) => triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index be9c686eb..9d48f48c2 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -11,7 +11,7 @@ export const action = { const { resourceUri, webId, timeout } = ctx.params; return new Promise(resolve => { let i = 0; - let interval; + let interval: any; const checkRights = () => { ctx .call('webacl.resource.hasRights', { diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 88cc2e3ee..1cab60642 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -42,22 +42,22 @@ const webAclContext = { } }; -function streamToString(stream) { +function streamToString(stream: any) { let res = ''; return new Promise((resolve, reject) => { - stream.on('data', chunk => (res += chunk)); - stream.on('error', err => reject(err)); + stream.on('data', (chunk: any) => (res += chunk)); + stream.on('error', (err: any) => reject(err)); stream.on('end', () => resolve(res)); }); } -async function formatOutput(ctx, output, resourceAclUri, jsonLD) { +async function formatOutput(ctx: any, output: any, resourceAclUri: any, jsonLD: any) { const turtle = await new Promise((resolve, reject) => { const writer = new Writer({ prefixes: { ...prefixes, '': `${resourceAclUri}#` }, format: 'Turtle' }); - output.forEach(f => writer.addQuad(f.auth, f.p, f.o)); + output.forEach((f: any) => writer.addQuad(f.auth, f.p, f.o)); writer.end((error, res) => { resolve(res); }); @@ -70,7 +70,7 @@ async function formatOutput(ctx, output, resourceAclUri, jsonLD) { baseIRI: resourceAclUri }); - output.forEach(f => mySerializer.write(quad(f.auth, f.p, f.o))); + output.forEach((f: any) => mySerializer.write(quad(f.auth, f.p, f.o))); mySerializer.end(); const jsonLd = JSON.parse(await streamToString(mySerializer)); @@ -91,19 +91,19 @@ async function formatOutput(ctx, output, resourceAclUri, jsonLD) { return compactJsonLd; } -async function filterAcls(hasControl, uaSearchParam, acls) { +async function filterAcls(hasControl: any, uaSearchParam: any, acls: any) { if (hasControl) return acls; - const filtered = acls.filter(acl => filterAgentAcl(acl, uaSearchParam, false)); + const filtered = acls.filter((acl: any) => filterAgentAcl(acl, uaSearchParam, false)); if (filtered.length) { - const header = acls.filter(acl => filterAgentAcl(acl, uaSearchParam, true)); + const header = acls.filter((acl: any) => filterAgentAcl(acl, uaSearchParam, true)); return header.concat(filtered); } return []; } -async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isContainer) { +async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: any, graphName: any, isContainer: any) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); const uaSearchParam = getUserAgentSearchParam(user); const document = []; @@ -177,7 +177,7 @@ async function getPermissions(ctx, resourceUri, baseUrl, user, graphName, isCont return await formatOutput(ctx, document, resourceAclUri, ctx.meta.$responseType === MIME_TYPES.JSON); } -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { const { accept } = ctx.meta.headers; let { slugParts } = ctx.params; diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index b259a0c14..242bed6a0 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -11,7 +11,7 @@ export const action = { const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); const readAuthorization = - authorizations['@graph'] && authorizations['@graph'].find(auth => auth['@id'] === '#Read'); + authorizations['@graph'] && authorizations['@graph'].find((auth: any) => auth['@id'] === '#Read'); let usersWithReadRights = []; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index db9ff6586..276d8bed9 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -18,14 +18,14 @@ const perms = { }; async function checkRights( - askedRights, - resultRights, - ctx, - resourceUri, - resourceAclUri, - uaSearchParam, - graphName, - isContainerDefault + askedRights: any, + resultRights: any, + ctx: any, + resourceUri: any, + resourceAclUri: any, + uaSearchParam: any, + graphName: any, + isContainerDefault: any ) { for (const [p1, p2] of Object.entries(perms)) { if (askedRights[p1] && !resultRights[p1]) { @@ -43,7 +43,7 @@ async function checkRights( } } -async function hasPermissions(ctx, resourceUri, askedRights, baseUrl, user, graphName) { +async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, baseUrl: any, user: any, graphName: any) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); const resultRights = {}; let groups; @@ -81,7 +81,7 @@ async function hasPermissions(ctx, resourceUri, askedRights, baseUrl, user, grap return resultRights; } -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { let { slugParts } = ctx.params; // This is the root container diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 4dcf7a4f7..6dc79756e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -12,7 +12,7 @@ import { const { MoleculerError } = require('moleculer').Errors; -export const api = async function api(ctx) { +export const api = async function api(this: any, ctx: any) { const contentType = ctx.meta.headers['content-type']; let { slugParts } = ctx.params; @@ -57,7 +57,7 @@ export const action = { // filter out all the newRights that are not for the resource const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); - newRights = newRights.filter(a => filterTriplesForResource(a, aclUri, isContainer)); + newRights = newRights.filter((a: any) => filterTriplesForResource(a, aclUri, isContainer)); if (newRights.length === 0) throw new MoleculerError('The rights cannot be changed because they are incorrect', 400, 'BAD_REQUEST'); @@ -72,10 +72,10 @@ export const action = { // find the difference between newRights and currentPerms. add only what is not existent yet. and remove those that are not needed anymore const differenceAdd = newRights.filter( - x => !currentPerms.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) + (x: any) => !currentPerms.some((y: any) => x.auth === y.auth && x.o === y.o && x.p === y.p) ); const differenceDelete = currentPerms.filter( - x => !newRights.some(y => x.auth === y.auth && x.o === y.o && x.p === y.p) + (x: any) => !newRights.some((y: any) => x.auth === y.auth && x.o === y.o && x.p === y.p) ); if (differenceAdd.length === 0 && differenceDelete.length === 0) return; @@ -114,25 +114,25 @@ export const action = { const defaultRightsUpdated = isContainer && - (differenceAdd.some(triple => triple.auth.includes('#Default')) || - differenceDelete.some(triple => triple.auth.includes('#Default'))); + (differenceAdd.some((triple: any) => triple.auth.includes('#Default')) || + differenceDelete.some((triple: any) => triple.auth.includes('#Default'))); const addPublicRead = differenceAdd.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + (triple: any) => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); const removePublicRead = differenceDelete.some( - triple => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT + (triple: any) => triple.auth.includes('#Read') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); const addDefaultPublicRead = isContainer && differenceAdd.some( - triple => + (triple: any) => triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); const removeDefaultPublicRead = isContainer && differenceDelete.some( - triple => + (triple: any) => triple.auth.includes('#DefaultRead') && triple.p === FULL_AGENTCLASS_URI && triple.o === FULL_FOAF_AGENT ); diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index e7ac1cb29..c5ec7a4ab 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -28,7 +28,7 @@ import { const { MoleculerError } = require('moleculer').Errors; -const filterAclsOnlyAgent = acl => agentPredicates.includes(acl.p.value); +const filterAclsOnlyAgent = (acl: any) => agentPredicates.includes(acl.p.value); /** * Server for handling webacl resource and container rights. diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index 86560e194..f1009c042 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -8,21 +8,21 @@ import rdfparseModule from 'rdf-parse'; const { MoleculerError } = require('moleculer').Errors; const rdfParser = rdfparseModule.default; -const getSlugFromUri = str => str.match(new RegExp(`.*/(.*)`))[1]; +const getSlugFromUri = (str: any) => str.match(new RegExp(`.*/(.*)`))[1]; -const hasType = (resource, type) => { +const hasType = (resource: any, type: any) => { const resourceType = resource.type || resource['@type']; return Array.isArray(resourceType) ? resourceType.includes(type) : resourceType === type; }; // Transforms "http://localhost:3000/dataset/data" to "dataset" -const getDatasetFromUri = uri => { +const getDatasetFromUri = (uri: any) => { const path = new URL(uri).pathname; const parts = path.split('/'); if (parts.length > 1) return parts[1]; }; -const findParentContainers = async (ctx, resourceUri) => { +const findParentContainers = async (ctx: any, resourceUri: any) => { return await ctx.call('triplestore.query', { query: ` PREFIX ldp: @@ -33,7 +33,7 @@ const findParentContainers = async (ctx, resourceUri) => { }); }; -const USER_GROUPS_QUERY = (member, ACLGraphName) => { +const USER_GROUPS_QUERY = (member: any, ACLGraphName: any) => { return `SELECT ?group WHERE { { ?group vcard:hasMember <${member}> . } @@ -53,7 +53,7 @@ const PREFIXES = 'PREFIX ldp: \n' + 'PREFIX rdfs: \n'; -const getUserGroups = async (ctx, user, graphName) => { +const getUserGroups = async (ctx: any, user: any, graphName: any) => { const query = PREFIXES + USER_GROUPS_QUERY(user, graphName); const groups = await ctx.call('triplestore.query', { @@ -61,10 +61,15 @@ const getUserGroups = async (ctx, user, graphName) => { webId: 'system' }); - return groups.map(g => g.group.value); + return groups.map((g: any) => g.group.value); }; -const AUTHORIZATION_NODE_QUERY = (mode, accesToOrDefault, resource, graphName) => `SELECT ?auth ?p ?o +const AUTHORIZATION_NODE_QUERY = ( + mode: any, + accesToOrDefault: any, + resource: any, + graphName: any +) => `SELECT ?auth ?p ?o WHERE { GRAPH <${graphName}> { ?auth acl:${accesToOrDefault} <${resource}>; @@ -73,7 +78,14 @@ WHERE { GRAPH <${graphName}> { ?p ?o. } }`; -const getAuthorizationNode = async (ctx, resourceUri, resourceAclUri, mode, graphName, searchForDefault) => { +const getAuthorizationNode = async ( + ctx: any, + resourceUri: any, + resourceAclUri: any, + mode: any, + graphName: any, + searchForDefault: any +) => { const query = `PREFIX rdf: \nPREFIX acl: \n${AUTHORIZATION_NODE_QUERY( mode, searchForDefault ? 'default' : 'accessTo', @@ -86,7 +98,7 @@ const getAuthorizationNode = async (ctx, resourceUri, resourceAclUri, mode, grap webId: 'system' }); - return auths.map(a => { + return auths.map((a: any) => { a.auth.value = `${resourceAclUri}#${searchForDefault ? 'Default' : ''}${mode}`; return a; }); @@ -103,7 +115,7 @@ const FULL_AGENT_GROUP = 'http://www.w3.org/ns/auth/acl#agentGroup'; const FULL_FOAF_AGENT = 'http://xmlns.com/foaf/0.1/Agent'; const FULL_ACL_ANYAGENT = 'http://www.w3.org/ns/auth/acl#AuthenticatedAgent'; -const filterAgentAcl = (acl, agentSearchParam, forOutput) => { +const filterAgentAcl = (acl: any, agentSearchParam: any, forOutput: any) => { if (forOutput) { return ( acl.p.value === FULL_TYPE_URI || @@ -131,7 +143,7 @@ const filterAgentAcl = (acl, agentSearchParam, forOutput) => { return false; }; -function getUserAgentSearchParam(user, groups) { +function getUserAgentSearchParam(user: any, groups: any) { if (user === 'anon') { return { foafAgent: true @@ -150,7 +162,7 @@ function getUserAgentSearchParam(user, groups) { }; } -const checkAgentPresent = (acls, agentSearchParam) => { +const checkAgentPresent = (acls: any, agentSearchParam: any) => { for (const acl of acls) { const res = filterAgentAcl(acl, agentSearchParam); if (res) return true; @@ -160,7 +172,7 @@ const checkAgentPresent = (acls, agentSearchParam) => { const agentPredicates = [FULL_AGENTCLASS_URI, FULL_AGENT_URI, FULL_AGENT_GROUP]; -async function aclGroupExists(groupUri, ctx, graphName) { +async function aclGroupExists(groupUri: any, ctx: any, graphName: any) { return await ctx.call('triplestore.query', { query: ` PREFIX vcard: @@ -173,13 +185,13 @@ async function aclGroupExists(groupUri, ctx, graphName) { }); } -function getAclUriFromResourceUri(baseUrl, resourceUri) { +function getAclUriFromResourceUri(baseUrl: any, resourceUri: any) { return resourceUri.startsWith(baseUrl) ? urlJoin(baseUrl, resourceUri.replace(baseUrl, baseUrl.endsWith('/') ? '_acl/' : '_acl')) : resourceUri; } -function filterAndConvertTriple(quad, property) { +function filterAndConvertTriple(quad: any, property: any) { if (agentPredicates.includes(quad.predicate[property])) { return { auth: quad.subject[property], @@ -193,7 +205,7 @@ function filterAndConvertTriple(quad, property) { const AuthorizationSuffixes = ['Read', 'Write', 'Append', 'Control']; const AuthorizationDefaultSuffixes = ['DefaultRead', 'DefaultWrite', 'DefaultAppend', 'DefaultControl']; -function filterTriplesForResource(triple, resourceAclUri, allowDefault) { +function filterTriplesForResource(triple: any, resourceAclUri: any, allowDefault: any) { const split = triple.auth.split('#'); if (split[0] !== resourceAclUri) return false; if (AuthorizationSuffixes.includes(split[1])) return true; @@ -201,11 +213,11 @@ function filterTriplesForResource(triple, resourceAclUri, allowDefault) { return false; } -async function convertBodyToTriples(body, contentType) { +async function convertBodyToTriples(body: any, contentType: any) { if (contentType === MIME_TYPES.TURTLE) { return new Promise((resolve, reject) => { const parser = new Parser({ format: 'turtle' }); - const res = []; + const res: any = []; parser.parse(body, (error, quad, prefixes) => { if (error) reject(error); else if (quad) { @@ -218,16 +230,16 @@ async function convertBodyToTriples(body, contentType) { // TODO use jsonld.toQuads actions ? return new Promise((resolve, reject) => { const textStream = streamifyString(body); - const res = []; + const res: any = []; rdfParser .parse(textStream, { contentType: 'application/ld+json' }) - .on('data', quad => { + .on('data', (quad: any) => { const q = filterAndConvertTriple(quad, 'value'); if (q) res.push(q); }) - .on('error', error => reject(error)) + .on('error', (error: any) => reject(error)) .on('end', () => { resolve(res); }); @@ -237,7 +249,7 @@ async function convertBodyToTriples(body, contentType) { // TODO: if one day you code a delete Profile action (probably in webid service) // then you msut call the below method after deleting the user (and pass false to isGroup) -async function removeAgentGroupOrAgentFromAuthorizations(uri, isGroup, graphName, ctx) { +async function removeAgentGroupOrAgentFromAuthorizations(uri: any, isGroup: any, graphName: any, ctx: any) { // removing the acl:agentGroup relation to some Authorizations await ctx.call('triplestore.update', { query: `PREFIX acl: @@ -259,7 +271,7 @@ async function removeAgentGroupOrAgentFromAuthorizations(uri, isGroup, graphName }); } -const processRights = (rights, aclUri) => { +const processRights = (rights: any, aclUri: any) => { const list = []; if (rights.anon) { if (rights.anon.read) list.push({ auth: `${aclUri}Read`, p: FULL_AGENTCLASS_URI, o: FULL_FOAF_AGENT }); diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts index 2e028bda6..625baab28 100644 --- a/src/middleware/packages/webfinger/service.ts +++ b/src/middleware/packages/webfinger/service.ts @@ -68,7 +68,7 @@ const WebfingerService = { if (response.ok) { const json = await response.json(); - const link = json.links.find(l => l.type === 'application/activity+json'); + const link = json.links.find((l: any) => l.type === 'application/activity+json'); if (link) { return link.href; } diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index d5aca0383..65a443c23 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -16,7 +16,7 @@ const WebhooksService = { }, dependencies: ['api', 'ldp'], async started() { - this.settings.allowedActions.forEach(actionName => { + this.settings.allowedActions.forEach((actionName: any) => { if (!this.actions[actionName]) { throw new ServiceSchemaError(`Missing action "${actionName}" in service settings!`); } @@ -101,7 +101,7 @@ const WebhooksService = { queues: { webhooks: { name: '*', - async process(job) { + async process(job: any) { const result = await this.actions[job.name](job.data); job.progress(100); diff --git a/src/middleware/tests/activitypub/actors.test.ts b/src/middleware/tests/activitypub/actors.test.ts index eb884d90f..d3d6f8e22 100644 --- a/src/middleware/tests/activitypub/actors.test.ts +++ b/src/middleware/tests/activitypub/actors.test.ts @@ -5,9 +5,9 @@ jest.setTimeout(70000); const NUM_USERS = 1; describe('Actors are correctly created', () => { - let broker; - const actors = []; - let alice; + let broker: any; + const actors: any = []; + let alice: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -15,7 +15,7 @@ describe('Actors are correctly created', () => { for (let i = 1; i <= NUM_USERS; i++) { const { webId } = await broker.call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => broker.call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index b4d41b5ec..fcacff83b 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -5,7 +5,7 @@ import initialize from './initialize.ts'; import CONFIG from '../config.ts'; jest.setTimeout(50000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -16,10 +16,10 @@ afterAll(async () => { }); describe('Collections API', () => { - const items = []; + const items: any = []; const collectionsContainersUri = urlJoin(CONFIG.HOME_URL, 'as/collection'); - let collectionUri; - let localContext; + let collectionUri: any; + let localContext: any; test('Create ressources', async () => { for (let i = 0; i < 10; i++) { diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index ba483f590..3670de8a8 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -3,7 +3,7 @@ import initialize from './initialize.ts'; import CONFIG from '../config.ts'; jest.setTimeout(50000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -14,10 +14,10 @@ afterAll(async () => { }); describe('Collections', () => { - const items = []; - let collectionUri; - let orderedCollectionUri; - let cursorBasedCollectionUri; + const items: any = []; + let collectionUri: any; + let orderedCollectionUri: any; + let cursorBasedCollectionUri: any; beforeAll(async () => { // Create test items @@ -264,7 +264,7 @@ describe('Collections', () => { }); describe('Pagination', () => { - let paginatedCollectionUri; + let paginatedCollectionUri: any; beforeAll(async () => { // Create collection for pagination tests @@ -415,7 +415,7 @@ describe('Collections', () => { } // Check for duplicates - page.items.forEach(item => { + page.items.forEach((item: any) => { expect(seenItems.has(item)).toBeFalsy(); seenItems.add(item); }); diff --git a/src/middleware/tests/activitypub/follow.test.ts b/src/middleware/tests/activitypub/follow.test.ts index 78b59cd19..ac2c8aff4 100644 --- a/src/middleware/tests/activitypub/follow.test.ts +++ b/src/middleware/tests/activitypub/follow.test.ts @@ -5,12 +5,12 @@ import initialize from './initialize.ts'; jest.setTimeout(50_000); const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, posting to followers', mode => { - let broker; - const actors = []; - let alice; - let bob; - let followActivity; +describe.each(['single-server', 'multi-server'])('In mode %s, posting to followers', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let followActivity: any; beforeAll(async () => { if (mode === 'single-server') { @@ -27,7 +27,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } diff --git a/src/middleware/tests/activitypub/inbox.test.ts b/src/middleware/tests/activitypub/inbox.test.ts index 354bf199d..3e0454242 100644 --- a/src/middleware/tests/activitypub/inbox.test.ts +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -3,8 +3,8 @@ import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; jest.setTimeout(50_000); -let broker; -let broker2; +let broker: any; +let broker2: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -16,8 +16,8 @@ afterAll(async () => { }); describe('Permissions are correctly set on inbox', () => { - let simon; - let sebastien; + let simon: any; + let sebastien: any; test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 2c267cd23..6c6703b78 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -16,7 +16,7 @@ const containers = [ } ]; -const initialize = async (port, mainDataset, accountsDataset, queueServiceDb = 0) => { +const initialize = async (port: any, mainDataset: any, accountsDataset: any, queueServiceDb = 0) => { const baseUrl = `http://localhost:${port}/`; const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; diff --git a/src/middleware/tests/activitypub/like.test.ts b/src/middleware/tests/activitypub/like.test.ts index e450dad83..bf3a479da 100644 --- a/src/middleware/tests/activitypub/like.test.ts +++ b/src/middleware/tests/activitypub/like.test.ts @@ -5,12 +5,12 @@ import initialize from './initialize.ts'; jest.setTimeout(50000); const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', mode => { - let broker; - const actors = []; - let alice; - let bob; - let aliceMessageUri; +describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let aliceMessageUri: any; beforeAll(async () => { if (mode === 'single-server') { @@ -27,7 +27,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', m } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } diff --git a/src/middleware/tests/activitypub/message.test.ts b/src/middleware/tests/activitypub/message.test.ts index 1bd2b6336..39e47790a 100644 --- a/src/middleware/tests/activitypub/message.test.ts +++ b/src/middleware/tests/activitypub/message.test.ts @@ -5,13 +5,13 @@ import initialize from './initialize.ts'; jest.setTimeout(70000); const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages', mode => { - let broker; - const actors = []; - let alice; - let bob; - let aliceMessageUri; - let bobMessageUri; +describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let aliceMessageUri: any; + let bobMessageUri: any; beforeAll(async () => { if (mode === 'single-server') { @@ -28,7 +28,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } diff --git a/src/middleware/tests/activitypub/object.test.ts b/src/middleware/tests/activitypub/object.test.ts index bd9f3a69a..c713e423b 100644 --- a/src/middleware/tests/activitypub/object.test.ts +++ b/src/middleware/tests/activitypub/object.test.ts @@ -4,7 +4,7 @@ import initialize from './initialize.ts'; import CONFIG from '../config.ts'; jest.setTimeout(50000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -15,8 +15,8 @@ afterAll(async () => { }); describe('Create/Update/Delete objects', () => { - let sebastien; - let objectUri; + let sebastien: any; + let objectUri: any; test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index 3cd8a60ef..814279ac2 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -3,8 +3,8 @@ import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; jest.setTimeout(50_000); -let broker; -let broker2; +let broker: any; +let broker2: any; beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -16,8 +16,8 @@ afterAll(async () => { }); describe('Permissions are correctly set on outbox', () => { - let simon; - let sebastien; + let simon: any; + let sebastien: any; test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { @@ -50,7 +50,7 @@ describe('Permissions are correctly set on outbox', () => { }); }); - let objectPrivateFirst; + let objectPrivateFirst: any; test('Post private message to self', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, diff --git a/src/middleware/tests/activitypub/shares.test.ts b/src/middleware/tests/activitypub/shares.test.ts index d9b736d39..ba80adb4c 100644 --- a/src/middleware/tests/activitypub/shares.test.ts +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -5,13 +5,13 @@ import initialize from './initialize.ts'; jest.setTimeout(50000); const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', mode => { - let broker; - const actors = []; - let alice; - let bob; - let aliceMessageUri; - let publicShareActivity; +describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', (mode: any) => { + let broker: any; + const actors: any = []; + let alice: any; + let bob: any; + let aliceMessageUri: any; + let publicShareActivity: any; beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -27,7 +27,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', } const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName, params, options = {}) => + actors[i].call = (actionName: any, params: any, options = {}) => broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index 50adeb318..efb76c631 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -9,7 +9,7 @@ import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; -const initialize = async (port, withOldKeyStore = false) => { +const initialize = async (port: any, withOldKeyStore = false) => { await dropDataset(CONFIG.MAIN_DATASET); await dropDataset(CONFIG.SETTINGS_DATASET); diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index 7707f88d1..5f388bea3 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -6,12 +6,12 @@ import initialize from './initialize.ts'; jest.setTimeout(100_000); /** @type {import('moleculer').ServiceBroker} */ -let broker; +let broker: any; -let user; -let user2; +let user: any; +let user2: any; -const setUp = async withOldKeyStore => { +const setUp = async (withOldKeyStore: any) => { ({ broker } = await initialize(3000, withOldKeyStore)); user = await broker.call('auth.signup', { username: 'alice', @@ -239,7 +239,7 @@ describe('keys', () => { keyType: KEY_TYPES.RSA }); expect(webIdKeys).toHaveLength(1); - webIdKeys.forEach(key => { + webIdKeys.forEach((key: any) => { expect(key.publicKeyPem).toBeTruthy(); expect(key.privateKeyPem).toBeTruthy(); }); @@ -415,7 +415,7 @@ describe('keys', () => { keyType: KEY_TYPES.ED25519 }); expect(webIdKeys.length).toBeGreaterThan(0); - webIdKeys.forEach(key => { + webIdKeys.forEach((key: any) => { expect(key.publicKeyMultibase).toBeTruthy(); expect(key.secretKeyMultibase).toBeTruthy(); }); @@ -432,8 +432,8 @@ describe('keys', () => { // To store the key and validate if it remained the same after migration. // A bit hacky, sorry. - let publicKeyPemBeforeMigration; - let privateKeyPemBeforeMigration; + let publicKeyPemBeforeMigration: any; + let privateKeyPemBeforeMigration: any; describe('Before migration', () => { test('new keys service not usable before migration', async () => { diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index 4978d4d35..c82cec6a6 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -4,21 +4,21 @@ import initialize from './initialize.ts'; jest.setTimeout(45_000); -const getChallengeFrom = async actor => { +const getChallengeFrom = async (actor: any) => { const { challenge } = await actor.fetch(path.join(vcApiEndpoint, 'challenges'), { method: 'POST' }); return challenge; }; /** @type {import('moleculer').ServiceBroker} */ -let broker; +let broker: any; let baseUrl; -let vcApiEndpoint; -let alice; -let bob; -let craig; +let vcApiEndpoint: any; +let alice: any; +let bob: any; +let craig: any; -const setUpUser = async (broker, username) => { +const setUpUser = async (broker: any, username: any) => { const user = await broker.call('auth.signup', { username, email: `${username}@test.example`, @@ -30,7 +30,7 @@ const setUpUser = async (broker, username) => { webId: 'system' }); - user.fetch = async (uri, init) => { + user.fetch = async (uri: any, init: any) => { return await fetch(uri, { ...init, headers: { @@ -48,7 +48,7 @@ const setUpUser = async (broker, username) => { return user; }; -const setUp = async withOldKeyStore => { +const setUp = async (withOldKeyStore: any) => { ({ broker, baseUrl } = await initialize(3000, withOldKeyStore)); vcApiEndpoint = path.join(baseUrl, 'vc/v0.3/'); alice = await setUpUser(broker, 'alice'); diff --git a/src/middleware/tests/interop/initialize.ts b/src/middleware/tests/interop/initialize.ts index d009988a9..9190116df 100644 --- a/src/middleware/tests/interop/initialize.ts +++ b/src/middleware/tests/interop/initialize.ts @@ -26,7 +26,13 @@ const containers = [ } ]; -const initialize = async (port, mainDataset, accountsDataset, queueServiceDb, serverToMirror) => { +const initialize = async ( + port: any, + mainDataset: any, + accountsDataset: any, + queueServiceDb: any, + serverToMirror: any +) => { // Clear datasets await dropDataset(mainDataset); await dropDataset(accountsDataset); diff --git a/src/middleware/tests/interop/mirror-protected.test.ts b/src/middleware/tests/interop/mirror-protected.test.ts index 4ec610b5a..6ad16e8c4 100644 --- a/src/middleware/tests/interop/mirror-protected.test.ts +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -4,8 +4,8 @@ import { ACTIVITY_TYPES } from '@semapps/activitypub'; import initialize from './initialize.ts'; jest.setTimeout(50000); -let server1; -let server2; +let server1: any; +let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; @@ -26,8 +26,8 @@ afterAll(async () => { }); describe('Resource on server1 is shared with user on server2', () => { - let resourceUri; - let user2; + let resourceUri: any; + let user2: any; test('Server2 follow server1', async () => { await waitForExpect(async () => { diff --git a/src/middleware/tests/interop/mirror.test.ts b/src/middleware/tests/interop/mirror.test.ts index c0cdca42e..9a1963aa7 100644 --- a/src/middleware/tests/interop/mirror.test.ts +++ b/src/middleware/tests/interop/mirror.test.ts @@ -4,8 +4,8 @@ import { triple, namedNode } from '@rdfjs/data-model'; import initialize from './initialize.ts'; jest.setTimeout(100000); -let server1; -let server2; +let server1: any; +let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; @@ -26,7 +26,7 @@ afterAll(async () => { }); describe('Server2 mirror server1', () => { - let resourceUri; + let resourceUri: any; test('Server2 follow server1', async () => { await waitForExpect(async () => { diff --git a/src/middleware/tests/interop/patch-remote.test.ts b/src/middleware/tests/interop/patch-remote.test.ts index b26b4dc19..074102286 100644 --- a/src/middleware/tests/interop/patch-remote.test.ts +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -3,8 +3,8 @@ import { triple, namedNode } from '@rdfjs/data-model'; import initialize from './initialize.ts'; jest.setTimeout(50000); -let server1; -let server2; +let server1: any; +let server2: any; beforeAll(async () => { server1 = await initialize(3001, 'testData1', 'settings1', 1); @@ -17,7 +17,7 @@ afterAll(async () => { }); describe('Server2 imports a single resource from server1', () => { - let resourceUri; + let resourceUri: any; test('Resource is posted on server1', async () => { resourceUri = await server1.call('ldp.container.post', { diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index c0a67b45b..49aa0f721 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -3,8 +3,8 @@ import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; jest.setTimeout(100000); -let server1; -let server2; +let server1: any; +let server2: any; beforeAll(async () => { server1 = await initialize(3001, 'testData1', 'settings1', 1); @@ -17,8 +17,8 @@ afterAll(async () => { }); describe('An inference is added between server1 et server2', () => { - let resourceUri1; - let resourceUri2; + let resourceUri1: any; + let resourceUri2: any; test('An remote relationship is added on create', async () => { resourceUri1 = await server1.call('ldp.container.post', { diff --git a/src/middleware/tests/jest.setup.ts b/src/middleware/tests/jest.setup.ts index 895bf159c..9133fe04e 100644 --- a/src/middleware/tests/jest.setup.ts +++ b/src/middleware/tests/jest.setup.ts @@ -1,6 +1,6 @@ expect.extend({ // An assertion to check if a value is undefined or an empty array - toBeUndefinedOrEmptyArray(received) { + toBeUndefinedOrEmptyArray(received: any) { const pass = received === undefined || (Array.isArray(received) && received.length === 0); if (pass) { return { diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index 139ea93ff..a32c07407 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -7,7 +7,7 @@ import { TripleStoreService } from '@semapps/triplestore'; import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; -export default async (cacher, persistRegistry) => { +export default async (cacher: any, persistRegistry: any) => { await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ diff --git a/src/middleware/tests/jsonld/merge.test.ts b/src/middleware/tests/jsonld/merge.test.ts index fdee5c3c9..52bd754f4 100644 --- a/src/middleware/tests/jsonld/merge.test.ts +++ b/src/middleware/tests/jsonld/merge.test.ts @@ -1,7 +1,7 @@ import initialize from '../ontologies/initialize.ts'; jest.setTimeout(10000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(false, false); @@ -114,7 +114,7 @@ const testCases = { } }; -test.each(Object.keys(testCases))('Merging %s JSON-LD contexts', async key => { +test.each(Object.keys(testCases))('Merging %s JSON-LD contexts', async (key: any) => { const newContext = await broker.call('jsonld.context.merge', { a: testCases[key].a, b: testCases[key].b diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 734868558..b78ae77bb 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -6,7 +6,7 @@ import CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -18,9 +18,9 @@ afterAll(async () => { describe('LDP handling through API', () => { const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let resourceUri; - let subContainerUri; - let subResourceUri; + let resourceUri: any; + let subContainerUri: any; + let subResourceUri: any; test('Create resource', async () => { const { headers } = await fetchServer(containerUri, { diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 90b594348..6339f2848 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -8,7 +8,7 @@ import initialize from './initialize.ts'; import CONFIG from '../config.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -19,9 +19,9 @@ afterAll(async () => { }); describe('Binary handling of LDP server', () => { - let fileUri; - let filePath; - let fileName; + let fileUri: any; + let filePath: any; + let fileName: any; test('Post image to container', async () => { const readStream = fs.createReadStream(pathJoin(__dirname, 'av-icon.png')); diff --git a/src/middleware/tests/ldp/container-path.test.ts b/src/middleware/tests/ldp/container-path.test.ts index 8df939419..32f8ed5c8 100644 --- a/src/middleware/tests/ldp/container-path.test.ts +++ b/src/middleware/tests/ldp/container-path.test.ts @@ -1,7 +1,7 @@ import initialize from './initialize.ts'; jest.setTimeout(10000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -28,10 +28,10 @@ const errorCases = { }; describe('Get container path', () => { - test.each(Object.keys(successCases))('Success with resourceType %s', async resourceType => { + test.each(Object.keys(successCases))('Success with resourceType %s', async (resourceType: any) => { await expect(broker.call('ldp.container.getPath', { resourceType })).resolves.toBe(successCases[resourceType]); }); - test.each(Object.keys(errorCases))('Error With resourceType %s', async resourceType => { + test.each(Object.keys(errorCases))('Error With resourceType %s', async (resourceType: any) => { await expect(broker.call('ldp.container.getPath', { resourceType })).rejects.toThrow(errorCases[resourceType]); }); }); diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 99330900e..b0c7d3b8d 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -3,7 +3,7 @@ import CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -14,7 +14,7 @@ afterAll(async () => { }); describe('LDP container tests', () => { - let resourceUri; + let resourceUri: any; test('Ensure container created in LdpService settings exists', async () => { await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}resources` })).resolves.toBe( diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 4a32288b7..a0e0ec4b7 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -6,7 +6,7 @@ import CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -18,10 +18,10 @@ afterAll(async () => { describe('Content negotiation', () => { const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let projectUri; - let project2Uri; - let project3Uri; - let project4Uri; + let projectUri: any; + let project2Uri: any; + let project3Uri: any; + let project4Uri: any; test('Post resource in JSON-LD', async () => { const { headers } = await fetchServer(containerUri, { diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index cfd6f02f0..770060abd 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -5,7 +5,7 @@ import initialize from './initialize.ts'; import CONFIG from '../config.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index a4ac8e031..8acecdca3 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -3,7 +3,7 @@ import CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(50000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -14,9 +14,9 @@ afterAll(async () => { }); describe('Resource CRUD operations', () => { - let project1Uri; - let project1; - let project2; + let project1Uri: any; + let project1: any; + let project2: any; test('Post resource in container', async () => { project1Uri = await broker.call('ldp.container.post', { diff --git a/src/middleware/tests/ontologies/initialize.ts b/src/middleware/tests/ontologies/initialize.ts index 1dce25903..25d1f637e 100644 --- a/src/middleware/tests/ontologies/initialize.ts +++ b/src/middleware/tests/ontologies/initialize.ts @@ -7,7 +7,7 @@ import { TripleStoreService } from '@semapps/triplestore'; import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; -export default async cacher => { +export default async (cacher: any) => { await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ diff --git a/src/middleware/tests/ontologies/ontologies.test.ts b/src/middleware/tests/ontologies/ontologies.test.ts index a2ef969e9..4ca545467 100644 --- a/src/middleware/tests/ontologies/ontologies.test.ts +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -10,8 +10,8 @@ import ont4 from './ontologies/ont4.json' with { type: 'json' }; jest.setTimeout(10000); const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); -describe.each([false, true])('Register ontologies with cacher %s', cacher => { - let broker; +describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) => { + let broker: any; beforeAll(async () => { broker = await initialize(cacher); diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 25835ad6e..7263ac54b 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -12,13 +12,13 @@ const listDatasets = async () => { if (response.ok) { const json = await response.json(); - return json.datasets.map(dataset => dataset['ds.name'].substring(1)); + return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); } else { return []; } }; -const dropDataset = dataset => +const dropDataset = (dataset: any) => fetch(urlJoin(CONFIG.SPARQL_ENDPOINT, dataset, 'update'), { method: 'POST', body: 'update=DROP+ALL', @@ -28,7 +28,7 @@ const dropDataset = dataset => } }); -const fetchServer = (url, options = {}) => { +const fetchServer = (url: any, options = {}) => { if (!url) throw new Error('No url provided to fetchServer'); if (!options.headers) options.headers = new fetch.Headers(); @@ -75,14 +75,14 @@ const fetchServer = (url, options = {}) => { }); }; -const clearQueue = async queueServiceUrl => { +const clearQueue = async (queueServiceUrl: any) => { // Clear queue const redisClient = new Redis(queueServiceUrl); const result = await redisClient.flushdb(); redisClient.disconnect(); }; -const wait = ms => +const wait = (ms: any) => new Promise(resolve => { setTimeout(resolve, ms); }); diff --git a/src/middleware/tests/webacl/groupCRUD.test.ts b/src/middleware/tests/webacl/groupCRUD.test.ts index fd9e17c99..8946184b4 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.ts +++ b/src/middleware/tests/webacl/groupCRUD.test.ts @@ -3,7 +3,7 @@ import CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); diff --git a/src/middleware/tests/webacl/initialize.ts b/src/middleware/tests/webacl/initialize.ts index 7a94314f7..d7e734e34 100644 --- a/src/middleware/tests/webacl/initialize.ts +++ b/src/middleware/tests/webacl/initialize.ts @@ -40,7 +40,7 @@ const initialize = async () => { { path: '/resources2', permissions: {}, - newResourcesPermissions: webId => { + newResourcesPermissions: (webId: any) => { switch (webId) { case 'anon': return {}; diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts index c0020be54..cd1e1b3fd 100644 --- a/src/middleware/tests/webacl/resource.test.ts +++ b/src/middleware/tests/webacl/resource.test.ts @@ -5,7 +5,7 @@ import initialize from './initialize.ts'; jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -17,7 +17,7 @@ afterAll(async () => { describe('Permissions check on a specific resource', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions - let resourceUri; + let resourceUri: any; test('Get/patch/put/delete resource without permission', async () => { // When posting as system, no permissions are given on the resource diff --git a/src/middleware/tests/webacl/resourceCRUD.test.ts b/src/middleware/tests/webacl/resourceCRUD.test.ts index 9c3af7e68..55061f881 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.ts +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -6,7 +6,7 @@ import initialize from './initialize.ts'; jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -37,7 +37,7 @@ describe('middleware CRUD resource with perms', () => { ).rejects.toThrow(); }, 20000); - let resourceUri; + let resourceUri: any; test('A call to ldp.container.post creates some default permissions', async () => { resourceUri = await broker.call( diff --git a/src/middleware/tests/webacl/sparql-injection.test.ts b/src/middleware/tests/webacl/sparql-injection.test.ts index 65a9e21b7..aea52b90b 100644 --- a/src/middleware/tests/webacl/sparql-injection.test.ts +++ b/src/middleware/tests/webacl/sparql-injection.test.ts @@ -3,7 +3,7 @@ import CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts index 985839d21..c40ba8654 100644 --- a/src/middleware/tests/webacl/utils.test.ts +++ b/src/middleware/tests/webacl/utils.test.ts @@ -4,7 +4,7 @@ import initialize from './initialize.ts'; jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; -let broker; +let broker: any; beforeAll(async () => { broker = await initialize(); @@ -16,7 +16,7 @@ afterAll(async () => { describe('Test various actions of the webacl.resource service', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions - let resourceUri; + let resourceUri: any; test('Alice see her rights correctly', async () => { resourceUri = await broker.call('ldp.container.post', { From 133d2a7de74b1c726990bcbd40d2b877517672c6 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 14:08:34 +0300 Subject: [PATCH 064/165] ts expect errors --- .../activitypub/mixins/activities-handler.ts | 8 +- .../activitypub/mixins/await-activity.ts | 2 + .../packages/activitypub/mixins/bot.ts | 2 + .../packages/activitypub/mixins/fake-queue.ts | 5 + .../activitypub/services/activity-mapping.ts | 4 + .../activitypub/services/activitypub/index.ts | 15 ++ .../activity-handlers/setRightsHandler.ts | 3 + .../activitypub/subservices/activity.ts | 1 + .../services/activitypub/subservices/actor.ts | 5 + .../services/activitypub/subservices/api.ts | 9 ++ .../subservices/collection/actions/get.ts | 6 + .../subservices/collection/index.ts | 4 + .../subservices/collections-registry.ts | 5 + .../activitypub/subservices/follow.ts | 5 + .../services/activitypub/subservices/inbox.ts | 10 ++ .../services/activitypub/subservices/like.ts | 10 ++ .../activitypub/subservices/object.ts | 2 + .../activitypub/subservices/outbox.ts | 11 ++ .../services/activitypub/subservices/reply.ts | 6 + .../services/activitypub/subservices/share.ts | 3 + .../activitypub/subservices/side-effects.ts | 19 ++- src/middleware/packages/activitypub/utils.ts | 1 + .../packages/auth/mixins/auth.sso.ts | 1 + src/middleware/packages/auth/mixins/auth.ts | 10 ++ .../packages/auth/services/account.ts | 6 + .../packages/auth/services/auth.cas.ts | 2 + .../packages/auth/services/auth.local.ts | 9 ++ .../packages/auth/services/auth.oidc.ts | 2 + src/middleware/packages/auth/services/jwt.ts | 1 + src/middleware/packages/auth/services/mail.ts | 1 + .../packages/auth/services/migration.ts | 1 + src/middleware/packages/backup/index.ts | 2 + .../packages/backup/utils/fsCopy.ts | 1 + .../packages/backup/utils/ftpCopy.ts | 3 + .../packages/backup/utils/ftpRemove.ts | 2 + .../packages/backup/utils/rsyncCopy.ts | 2 + src/middleware/packages/core/service.ts | 15 ++ src/middleware/packages/crypto/index.ts | 3 + .../packages/crypto/keys/key-container.ts | 1 + src/middleware/packages/crypto/keys/keys.ts | 21 +++ .../packages/crypto/keys/migration.ts | 3 + .../crypto/keys/public-key-container.ts | 2 + .../crypto/signature/http-signatures.ts | 11 ++ .../packages/crypto/signature/keypair.ts | 4 + .../packages/crypto/signature/proxy.ts | 12 +- .../VcCapabilityPresentationProofPurpose.ts | 2 + .../verifiable-credentials/VcPurpose.ts | 1 + .../challenge-service.ts | 1 + .../data-integrity-service.ts | 11 ++ .../vc-authorizer-service.ts | 1 + .../vc-credential-container.ts | 2 + .../vc-holder-service.ts | 9 ++ .../vc-issuer-service.ts | 10 ++ .../vc-presentation-container.ts | 2 + .../verifiable-credentials/vc-service.ts | 10 ++ .../vc-verifier-service.ts | 15 ++ .../packages/importer/mixins/humhub.ts | 5 + .../packages/importer/mixins/importer.ts | 8 + .../packages/importer/mixins/prestashop.ts | 1 + .../packages/importer/mixins/wordpress.ts | 1 + src/middleware/packages/importer/utils.ts | 4 + src/middleware/packages/inference/service.ts | 9 ++ .../packages/inference/subservices/remote.ts | 8 + src/middleware/packages/jsonld/service.ts | 4 + .../packages/jsonld/services/api/index.ts | 1 + .../jsonld/services/context/actions/get.ts | 2 + .../jsonld/services/context/actions/merge.ts | 2 + .../jsonld/services/context/actions/parse.ts | 3 + .../services/context/actions/validate.ts | 3 + .../packages/jsonld/services/context/index.ts | 3 + .../jsonld/services/document-loader/index.ts | 7 +- .../packages/jsonld/services/parser/index.ts | 1 + src/middleware/packages/ldp/adapter.ts | 104 ++++++++----- .../ldp/mixins/controlled-container.ts | 3 + .../packages/ldp/mixins/dereference.ts | 1 + .../packages/ldp/mixins/disassembly.ts | 3 + .../packages/ldp/mixins/document-tagger.ts | 5 + .../packages/ldp/mixins/image-processor.ts | 3 + .../packages/ldp/mixins/mime-types.ts | 1 + .../ldp/mixins/orphan-files-deletion.ts | 1 + .../ldp/mixins/single-resource-container.ts | 4 + .../packages/ldp/mixins/special-endpoint.ts | 3 + src/middleware/packages/ldp/service.ts | 9 ++ .../ldp/services/api/actions/delete.ts | 3 + .../packages/ldp/services/api/actions/get.ts | 3 + .../packages/ldp/services/api/actions/head.ts | 3 + .../ldp/services/api/actions/patch.ts | 5 + .../packages/ldp/services/api/actions/post.ts | 5 + .../packages/ldp/services/api/actions/put.ts | 3 + .../packages/ldp/services/cache/index.ts | 11 ++ .../ldp/services/container/actions/attach.ts | 5 + .../ldp/services/container/actions/clear.ts | 3 + .../ldp/services/container/actions/create.ts | 2 + .../container/actions/createAndAttach.ts | 11 +- .../ldp/services/container/actions/delete.ts | 4 + .../ldp/services/container/actions/detach.ts | 4 + .../ldp/services/container/actions/get.ts | 5 + .../ldp/services/container/actions/getPath.ts | 4 + .../services/container/actions/includes.ts | 1 + .../ldp/services/container/actions/isEmpty.ts | 2 + .../ldp/services/container/actions/patch.ts | 10 ++ .../ldp/services/container/actions/post.ts | 5 + .../packages/ldp/services/container/index.ts | 9 ++ .../ldp/services/link-header/actions/get.ts | 1 + .../services/link-header/actions/register.ts | 1 + .../permissions/actions/addAuthorizer.ts | 3 + .../ldp/services/permissions/actions/check.ts | 3 + .../ldp/services/permissions/actions/has.ts | 5 + .../services/registry/actions/getByType.ts | 3 + .../ldp/services/registry/actions/getByUri.ts | 4 + .../ldp/services/registry/actions/getUri.ts | 2 + .../ldp/services/registry/actions/register.ts | 12 ++ .../packages/ldp/services/registry/index.ts | 5 + .../ldp/services/remote/actions/delete.ts | 8 + .../ldp/services/remote/actions/get.ts | 63 +++++--- .../ldp/services/remote/actions/getNetwork.ts | 6 + .../ldp/services/remote/actions/getStored.ts | 3 + .../ldp/services/remote/actions/isRemote.ts | 5 + .../ldp/services/remote/actions/store.ts | 7 + .../packages/ldp/services/remote/index.ts | 6 + .../resource/actions/awaitCreateComplete.ts | 2 + .../ldp/services/resource/actions/create.ts | 4 + .../ldp/services/resource/actions/delete.ts | 4 + .../ldp/services/resource/actions/exist.ts | 3 + .../services/resource/actions/generateId.ts | 12 +- .../ldp/services/resource/actions/get.ts | 5 + .../resource/actions/getContainers.ts | 3 + .../ldp/services/resource/actions/getTypes.ts | 1 + .../ldp/services/resource/actions/patch.ts | 7 + .../ldp/services/resource/actions/put.ts | 17 +++ .../ldp/services/resource/actions/upload.ts | 4 + .../packages/ldp/services/resource/index.ts | 13 ++ .../packages/ldp/services/resource/methods.ts | 4 + src/middleware/packages/middlewares/index.ts | 2 + src/middleware/packages/mime-types/index.ts | 1 + .../notifications/services/digest/service.ts | 7 + .../services/expo-push/service.ts | 2 + .../services/single-mail/service.ts | 6 + .../ontologies/actions/findNamespace.ts | 1 + .../packages/ontologies/actions/findPrefix.ts | 1 + .../packages/ontologies/actions/get.ts | 3 + .../ontologies/actions/getPrefixes.ts | 1 + .../ontologies/actions/getRdfPrefixes.ts | 1 + .../packages/ontologies/actions/list.ts | 1 + .../ontologies/actions/prefixToUri.ts | 3 + .../packages/ontologies/actions/register.ts | 11 ++ src/middleware/packages/ontologies/index.ts | 6 + .../ontologies/ontologies/core/index.ts | 2 + src/middleware/packages/ontologies/service.ts | 5 + .../channels/notification-channel.mixin.ts | 19 +++ .../notifications/channels/webhook-channel.ts | 3 + .../channels/websocket-channel.ts | 1 + .../solid/services/notifications/listener.ts | 5 + .../solid/services/notifications/provider.ts | 2 + .../solid/services/preferences-file.ts | 1 + .../packages/solid/services/storage.ts | 3 + .../solid/services/type-index/type-indexes.ts | 5 + .../services/type-index/type-registrations.ts | 7 + .../packages/sparql-endpoint/service.ts | 7 + .../sync/middlewares/objects-watcher.ts | 6 + .../packages/sync/services/aggregator.ts | 5 + .../packages/sync/services/mirror.ts | 4 + .../packages/sync/services/synchronizer.ts | 19 +++ .../actions/countTriplesOfSubject.ts | 2 + .../actions/deleteOrphanBlankNodes.ts | 2 + .../packages/triplestore/actions/dropAll.ts | 3 + .../packages/triplestore/actions/insert.ts | 5 + .../packages/triplestore/actions/query.ts | 9 ++ .../triplestore/actions/tripleExist.ts | 3 + .../packages/triplestore/actions/update.ts | 6 + .../packages/triplestore/adapter.ts | 30 ++++ .../packages/triplestore/service.ts | 6 + .../triplestore/subservices/dataset.ts | 1 + .../triplestore/subservices/document.ts | 5 + src/middleware/packages/void/service.ts | 23 +++ .../packages/webacl/bots/authorizer-bot.ts | 2 + .../packages/webacl/bots/groups-manager.ts | 3 + .../packages/webacl/middlewares/cacher.ts | 1 + src/middleware/packages/webacl/service.ts | 5 + .../webacl/services/authorizer/index.ts | 1 + .../packages/webacl/services/cache/index.ts | 5 + .../services/group/actions/addMember.ts | 6 + .../webacl/services/group/actions/create.ts | 9 ++ .../webacl/services/group/actions/delete.ts | 6 + .../webacl/services/group/actions/exist.ts | 4 + .../services/group/actions/getGroups.ts | 3 + .../services/group/actions/getMembers.ts | 5 + .../webacl/services/group/actions/getUri.ts | 2 + .../webacl/services/group/actions/isMember.ts | 5 + .../services/group/actions/removeMember.ts | 6 + .../packages/webacl/services/group/index.ts | 10 ++ .../services/resource/actions/addRights.ts | 15 ++ .../resource/actions/awaitReadRight.ts | 1 + .../resource/actions/deleteAllRights.ts | 3 + .../resource/actions/deleteAllUserRights.ts | 3 + .../services/resource/actions/getLink.ts | 2 + .../services/resource/actions/getRights.ts | 17 +++ .../actions/getUsersWithReadRights.ts | 1 + .../services/resource/actions/hasRights.ts | 7 + .../actions/refreshContainersRights.ts | 10 +- .../services/resource/actions/removeRights.ts | 7 + .../services/resource/actions/setRights.ts | 14 ++ .../webacl/services/resource/index.ts | 18 +++ src/middleware/packages/webacl/utils.ts | 2 + src/middleware/packages/webfinger/service.ts | 1 + src/middleware/packages/webhooks/service.ts | 6 + src/middleware/packages/webid/service.ts | 1 + .../tests/activitypub/actors.test.ts | 14 ++ .../tests/activitypub/collection-api.test.ts | 21 +++ .../tests/activitypub/collection.test.ts | 66 ++++++++ .../tests/activitypub/follow.test.ts | 17 +++ .../tests/activitypub/inbox.test.ts | 22 +++ .../tests/activitypub/initialize.ts | 5 + src/middleware/tests/activitypub/like.test.ts | 12 ++ .../tests/activitypub/message.test.ts | 15 ++ .../tests/activitypub/object.test.ts | 22 +++ .../tests/activitypub/outbox.test.ts | 27 ++++ .../tests/activitypub/shares.test.ts | 10 ++ src/middleware/tests/crypto/initialize.ts | 7 + src/middleware/tests/crypto/keys.test.ts | 143 ++++++++++++++++++ .../crypto/verifiable-credentials.test.ts | 40 +++++ src/middleware/tests/interop/initialize.ts | 11 ++ .../tests/interop/mirror-protected.test.ts | 13 ++ src/middleware/tests/interop/mirror.test.ts | 20 +++ .../tests/interop/patch-remote.test.ts | 15 ++ .../tests/interop/remote-inference.test.ts | 15 ++ src/middleware/tests/jest.setup.ts | 1 + src/middleware/tests/jsonld/initialize.ts | 5 + src/middleware/tests/jsonld/merge.test.ts | 8 + src/middleware/tests/ldp/api.test.ts | 43 ++++++ src/middleware/tests/ldp/binary.test.ts | 22 +++ .../tests/ldp/container-path.test.ts | 8 + src/middleware/tests/ldp/container.test.ts | 36 +++++ .../tests/ldp/content-negotiation.test.ts | 47 ++++++ src/middleware/tests/ldp/headers.test.ts | 13 ++ src/middleware/tests/ldp/initialize.ts | 5 + src/middleware/tests/ldp/resource.test.ts | 56 +++++++ src/middleware/tests/ontologies/initialize.ts | 5 + .../tests/ontologies/ontologies.test.ts | 43 ++++++ src/middleware/tests/utils.ts | 11 ++ src/middleware/tests/webId/webId.test.ts | 8 + src/middleware/tests/webacl/groupCRUD.test.ts | 19 +++ src/middleware/tests/webacl/initialize.ts | 5 + src/middleware/tests/webacl/resource.test.ts | 35 +++++ .../tests/webacl/resourceCRUD.test.ts | 15 ++ .../tests/webacl/sparql-injection.test.ts | 15 ++ src/middleware/tests/webacl/utils.test.ts | 36 +++++ 247 files changed, 2109 insertions(+), 66 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts index 595cc5ae6..c1a175c11 100644 --- a/src/middleware/packages/activitypub/mixins/activities-handler.ts +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -9,18 +9,24 @@ const ActivitiesHandlerMixin = { for (const [key, activityHandler] of Object.entries(this.schema.activities)) { const boxTypes = []; + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. if (activityHandler.onReceive) boxTypes.push('inbox'); + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. if (activityHandler.onEmit) boxTypes.push('outbox'); await this.broker.call('activitypub.side-effects.addProcessor', { + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. matcher: typeof activityHandler.match === 'function' ? activityHandler.match.bind(this) : activityHandler.match, capabilityGrantMatchFnGenerator: + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. typeof activityHandler.capabilityGrantMatchFnGenerator === 'function' - ? activityHandler.capabilityGrantMatchFnGenerator.bind(this) + ? // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. + activityHandler.capabilityGrantMatchFnGenerator.bind(this) : undefined, actionName: `${this.name}.processActivity`, boxTypes, key, + // @ts-expect-error TS(18046): 'activityHandler' is of type 'unknown'. priority: activityHandler.priority }); } diff --git a/src/middleware/packages/activitypub/mixins/await-activity.ts b/src/middleware/packages/activitypub/mixins/await-activity.ts index 57212ba5d..24891dd76 100644 --- a/src/middleware/packages/activitypub/mixins/await-activity.ts +++ b/src/middleware/packages/activitypub/mixins/await-activity.ts @@ -23,9 +23,11 @@ const AwaitActivityMixin = { }); return resource; // First get the resource, then return it, otherwise the try/catch will not work } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.status === 401 || e.status === 403 || e.status === 404) { return false; } else { + // @ts-expect-error TS(2769): No overload matches this call. throw new Error(e); } } diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index fe5d8b414..102425275 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -79,7 +79,9 @@ const BotMixin = { 'activitypub.inbox.received': { handler(ctx) { if (this.inboxReceived) { + // @ts-expect-error TS(2339): Property 'recipients' does not exist on type 'Opti... Remove this comment to see the full error message if (ctx.params.recipients.includes(this.settings.actor.uri)) { + // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message this.inboxReceived(ctx.params.activity); } } diff --git a/src/middleware/packages/activitypub/mixins/fake-queue.ts b/src/middleware/packages/activitypub/mixins/fake-queue.ts index bbe55a7a8..94b0b1095 100644 --- a/src/middleware/packages/activitypub/mixins/fake-queue.ts +++ b/src/middleware/packages/activitypub/mixins/fake-queue.ts @@ -7,18 +7,23 @@ const FakeQueueMixin = { methods: { async createJob(queueName: any, jobName: any, data: any, opts: any) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ create... Remove this comment to see the full error message this.logger.warn(`QueueMixin not configured, calling job directly`); + // @ts-expect-error TS(2339): Property 'schema' does not exist on type '{ create... Remove this comment to see the full error message if (!this.schema.queues[queueName]) throw new Error(`No queue found with key ${queueName}`); try { // TODO add all job properties https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md#job + // @ts-expect-error TS(2339): Property 'schema' does not exist on type '{ create... Remove this comment to see the full error message await this.schema.queues[queueName].process.bind(this)({ data, log: (...args: any[]) => { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ create... Remove this comment to see the full error message this.logger.info(...args); }, progress: () => {} }); } catch (e) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ create... Remove this comment to see the full error message this.logger.error(e.message); } // TODO add all job properties https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md#job diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 2fd47cc96..8873f655f 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -17,6 +17,7 @@ const ActivityMappingService = { for (const [name, fn] of Object.entries(this.settings.handlebars.helpers)) { this.logger.info(`Registering handlebars helper ${name}`); + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message Handlebars.registerHelper(name, fn); } @@ -59,6 +60,7 @@ const ActivityMappingService = { : {}; } catch (e) { this.logger.warn( + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. `Could not get profile of actor ${activity.actor} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})` ); } @@ -72,7 +74,9 @@ const ActivityMappingService = { return [key, value(templateParams)]; } // If we have an object with locales mapping, look for the right locale + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. if (value[locale]) { + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. return [key, value[locale](templateParams)]; } throw new Error(`No ${locale} locale found for key ${key}`); diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index 6d28c1323..6914948a6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -1,4 +1,6 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { as, sec } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import ActorService from './subservices/actor.ts'; @@ -39,12 +41,14 @@ const ActivityPubService = { activateTombstones } = this.settings; + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message this.broker.createService({ mixins: [SideEffectsService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], settings: { podProvider } }); this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "activitypub.collection"; mixins: { ... Remove this comment to see the full error message mixins: [CollectionService], settings: { podProvider, @@ -52,6 +56,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.c... Remove this comment to see the full error message this.broker.createService({ mixins: [CollectionsRegistryService], settings: { @@ -60,6 +65,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message this.broker.createService({ mixins: [ActorService], settings: { @@ -69,6 +75,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message this.broker.createService({ mixins: [ApiService], settings: { @@ -77,6 +84,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.o... Remove this comment to see the full error message this.broker.createService({ mixins: [ObjectService], settings: { @@ -86,6 +94,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message this.broker.createService({ mixins: [ActivityService], settings: { @@ -95,6 +104,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.f... Remove this comment to see the full error message this.broker.createService({ mixins: [FollowService], settings: { @@ -102,6 +112,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.i... Remove this comment to see the full error message this.broker.createService({ mixins: [InboxService], settings: { @@ -109,6 +120,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.l... Remove this comment to see the full error message this.broker.createService({ mixins: [LikeService], settings: { @@ -117,6 +129,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.s... Remove this comment to see the full error message this.broker.createService({ mixins: [ShareService], settings: { @@ -125,6 +138,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.r... Remove this comment to see the full error message this.broker.createService({ mixins: [ReplyService], settings: { @@ -133,6 +147,7 @@ const ActivityPubService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { bas... Remove this comment to see the full error message this.broker.createService({ mixins: [OutboxService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], settings: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts index 84e75d598..2bf216ce7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts @@ -61,6 +61,7 @@ const setRightsHandler = { // When a new activity is created, ensure the emitter has read rights as well. // Don't do that on podProvider config, because the Pod owner already has all rights. + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (!this.settings.podProvider) { if (!newRecipients.includes(activity.actor)) newRecipients.push(activity.actor); } @@ -87,8 +88,10 @@ const setRightsHandler = { anon: activityIsPublic }); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404) { // Ignore cases when the object is deleted before the Create or Update activity have been sent + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match:... Remove this comment to see the full error message this.logger.warn(`Could not add read rights on object ${objectUri} because it does not exist anymore.`); } else { throw e; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 0c3e0898d..003365479 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ControlledContainerMixin } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index f45779919..f11a1a39e 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -19,6 +19,7 @@ const ActorService = { async handler(ctx) { const { actorUri, webId } = ctx.params; // If dataset is not in the meta, assume that actor is remote + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. if (ctx.meta.dataset && !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { try { // Don't return immediately the promise, or we won't be able to catch errors @@ -76,6 +77,7 @@ const ActorService = { triple( namedNode(actorUri), namedNode(predicate), + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message typeof subject === 'string' && subject.startsWith('http') ? namedNode(subject) : literal(subject) ) ), @@ -192,6 +194,7 @@ const ActorService = { events: { 'ldp.resource.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; if (this.isActor(newData)) { await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); @@ -203,6 +206,7 @@ const ActorService = { 'ldp.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; if (this.isActor(oldData)) { await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); @@ -212,6 +216,7 @@ const ActorService = { 'auth.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index d6ccf203e..d34770aa7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -37,8 +37,10 @@ const ApiService = { // If some actor containers are already registered, add the corresponding API routes const registeredContainers = await this.broker.call('ldp.registry.list'); for (const container of Object.values(registeredContainers)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. if (arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { await this.broker.call('api.addRoute', { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) }); } @@ -49,6 +51,7 @@ const ApiService = { inbox: { async handler(ctx) { const { actorSlug, ...activity } = ctx.params; + // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. const { requestUrl } = ctx.meta; const { origin } = new URL(this.settings.baseUri); @@ -57,6 +60,7 @@ const ApiService = { ...activity }); + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 202; } }, @@ -64,6 +68,7 @@ const ApiService = { outbox: { async handler(ctx) { let { actorSlug, ...activity } = ctx.params; + // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. const { requestUrl } = ctx.meta; const { origin } = new URL(this.settings.baseUri); @@ -72,12 +77,15 @@ const ApiService = { ...activity }); + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = { Location: activity.id || activity['@id'], 'Content-Length': 0 }; // We need to set this also here (in addition to above) or we get a Moleculer warning + // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. ctx.meta.$location = activity.id || activity['@id']; + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 201; } } @@ -85,6 +93,7 @@ const ApiService = { events: { 'ldp.registry.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'container' does not exist on type 'Optio... Remove this comment to see the full error message const { container } = ctx.params; const { pathname: basePath } = new URL(this.settings.baseUri); const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 6e7947bbf..8204f748f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -196,6 +196,7 @@ async function selectAndDereferenceItems(ctx: any, allItemURIs: any, options: an delete item['@context']; // Don't keep the items individual context selectedItems.push(item); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404 || e.code === 403) { ctx.broker.logger.debug(`Item not found with URI: ${itemUri}`); } else { @@ -294,20 +295,25 @@ const Schema = { webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, async handler(ctx) { const { resourceUri: collectionUri, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'queryString' does not exist on type '{}'... Remove this comment to see the full error message const beforeEq = ctx.params.beforeEq || ctx.meta.queryString?.beforeEq; // cursor param when moving backwards + // @ts-expect-error TS(2339): Property 'queryString' does not exist on type '{}'... Remove this comment to see the full error message const afterEq = ctx.params.afterEq || ctx.meta.queryString?.afterEq; // cursor param when moving forwards + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const localContext = await ctx.call('jsonld.context.get'); await ctx.call('permissions.check', { uri: collectionUri, type: 'resource', mode: 'acl:Read', webId }); // Get dataset here since we can't call the method from internal functions + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const dataset = this.getCollectionDataset(collectionUri); sanitizeSparqlUri(collectionUri); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 4a7083e21..b955a7c71 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -1,5 +1,6 @@ import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/ldp'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; @@ -59,6 +60,7 @@ const CollectionService = { patch: { async handler(ctx) { const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri, webId }); @@ -197,6 +199,7 @@ const CollectionService = { const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); if (!collectionExist) throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Cannot attach to a non-existing collection: ${collectionUri} (dataset: ${ctx.meta.dataset})` ); @@ -253,6 +256,7 @@ const CollectionService = { } }, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message get: getAction, clear: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 4ab5343db..c7a84a3bd 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -123,6 +123,7 @@ const CollectionsRegistryService = { // Find all containers where we want to attach this collection const containers = await ctx.call('ldp.registry.getByType', { type: collection.attachToTypes, dataset }); for (const container of Object.values(containers)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. const containerUri = urlJoin(this.settings.baseUri, container.fullPath); this.logger.info(`Looking for resources in container ${containerUri}`); const resources = await ctx.call('ldp.container.getUris', { containerUri }); @@ -265,6 +266,7 @@ const CollectionsRegistryService = { events: { 'ldp.resource.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { @@ -280,6 +282,7 @@ const CollectionsRegistryService = { 'ldp.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; // Check if we need to create collection only if the type has changed if (this.hasTypeChanged(oldData, newData)) { @@ -298,6 +301,7 @@ const CollectionsRegistryService = { 'ldp.resource.patched': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, triplesAdded } = ctx.params; if (triplesAdded) { for (const triple of triplesAdded) { @@ -325,6 +329,7 @@ const CollectionsRegistryService = { 'ldp.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message const { oldData } = ctx.params; const collections = this.getCollectionsByType(oldData.type || oldData['@type']); for (const collection of collections) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index 4a3031cd3..b6d1c92df 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -147,6 +147,7 @@ const FollowService = { const { '@context': context, ...activityObject } = activity; const actor = await ctx.call('activitypub.actor.get', { actorUri: activity.object }); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addFollower( { follower: activity.actor, @@ -174,6 +175,7 @@ const FollowService = { } }, async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addFollower( { follower: activity.object.actor, @@ -191,6 +193,7 @@ const FollowService = { } }, async onEmit(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeFollower( { follower: activity.object.actor || activity.actor, @@ -200,6 +203,7 @@ const FollowService = { ); }, async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeFollower( { follower: activity.object.actor || activity.actor, @@ -220,6 +224,7 @@ const FollowService = { } }, async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeFollower( { follower: activity.object.object.actor || activity.actor, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 683e1f5ec..9c8fc628c 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; @@ -43,6 +44,7 @@ const InboxService = { // Ensure the actor in the activity is the same as the posting actor // (When posting, the webId is the one of the poster) + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. if (activity.actor !== ctx.meta.webId) { throw new E.UnAuthorizedError('INVALID_ACTOR', 'Activity actor is not the same as the posting actor'); } @@ -55,11 +57,13 @@ const InboxService = { if (account.deletedAt) throw new MoleculerError(`User does not exist anymore`, 410, 'GONE'); if (this.settings.podProvider) { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = account.username; } // We want the next operations to be done by the system // TODO check if we can avoid this, as this is a bad practice + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'system'; const collectionExists = await ctx.call('activitypub.collection.exist', { @@ -70,18 +74,23 @@ const InboxService = { throw new E.NotFoundError(); } + // @ts-expect-error TS(2339): Property 'skipSignatureValidation' does not exist ... Remove this comment to see the full error message if (!ctx.meta.skipSignatureValidation) { + // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. if (!ctx.meta.rawBody || !ctx.meta.originalHeaders) throw new Error(`Cannot validate HTTP signature because of missing meta (rawBody or originalHeaders)`); const validDigest = await ctx.call('signature.verifyDigest', { + // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. body: ctx.meta.rawBody, // Stored by parseRawBody middleware + // @ts-expect-error TS(2339): Property 'originalHeaders' does not exist on type ... Remove this comment to see the full error message headers: ctx.meta.originalHeaders }); const { isValid: validSignature } = await ctx.call('signature.verifyHttpSignature', { url: collectionUri, method: 'POST', + // @ts-expect-error TS(2339): Property 'originalHeaders' does not exist on type ... Remove this comment to see the full error message headers: ctx.meta.originalHeaders }); @@ -96,6 +105,7 @@ const InboxService = { await this.broker.call('activitypub.side-effects.processInbox', { activity, recipients: [inboxOwner] }); } catch (e) { // If some processors failed, log error message but don't stop + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.error(e.message); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 51c690df2..037923b4b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -115,12 +115,15 @@ const LikeService = { }, async onEmit(ctx: any, activity: any, emitterUri: any) { if (!activity?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addObjectToActorLikedCollection( { actorUri: activity.actor, objectUri: activity.object }, { parentCtx: ctx } ); // In case there is no recipient, add the actor immediately to the collection + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message if (this.isLocalObject(activity.object, emitterUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addActorToObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object }, { parentCtx: ctx } @@ -128,8 +131,10 @@ const LikeService = { } }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message if (this.isLocalObject(activity.object, recipientUri)) { if (!activity?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addActorToObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object }, { parentCtx: ctx } @@ -146,12 +151,15 @@ const LikeService = { }, async onEmit(ctx: any, activity: any, emitterUri: any) { if (!activity.object?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeObjectFromActorLikedCollection( { actorUri: activity.actor, objectUri: activity.object.object }, { parentCtx: ctx } ); // In case there is no recipient, remove the actor immediately from the collection + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message if (this.isLocalObject(activity.object.object, emitterUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeActorFromObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object.object }, { parentCtx: ctx } @@ -159,8 +167,10 @@ const LikeService = { } }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message if (this.isLocalObject(activity.object.object, recipientUri)) { if (!activity.object?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeActorFromObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object.object }, { parentCtx: ctx } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 73e195570..9d5bdb0a8 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -209,6 +209,7 @@ const ObjectService = { async handler(ctx) { // Check if tombstones are globally activated if (this.settings.activateTombstones) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, containersUris, oldData, dataset } = ctx.params; // If the resource was in no container, skip... @@ -219,6 +220,7 @@ const ObjectService = { dataset }); + // @ts-expect-error TS(2339): Property 'activateTombstones' does not exist on ty... Remove this comment to see the full error message if (containerOptions.activateTombstones !== false && ctx.meta.activateTombstones !== false) { const formerType = oldData.type || oldData['@type']; await this.actions.createTombstone({ resourceUri, formerType }, { meta: { dataset }, parentCtx: ctx }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index aba8a1a22..ee0bd2671 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -1,4 +1,5 @@ import fetch from 'node-fetch'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { MIME_TYPES } from '@semapps/mime-types'; import { getType, arrayOf } from '@semapps/ldp'; @@ -58,14 +59,17 @@ const OutboxService = { } // Ensure logged user is posting to his own outbox + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. if (ctx.meta.webId && ctx.meta.webId !== 'system' && actorUri !== ctx.meta.webId) { throw new E.UnAuthorizedError( 'UNAUTHORIZED', + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. `Forbidden to post to the outbox ${collectionUri} (webId ${ctx.meta.webId})` ); } if (this.settings.podProvider) { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = getSlugFromUri(actorUri); } @@ -76,6 +80,7 @@ const OutboxService = { // Wrap object in Create activity, if necessary activity = await ctx.call('activitypub.object.wrap', { activity }); + // @ts-expect-error TS(2339): Property 'doNotProcessObject' does not exist on ty... Remove this comment to see the full error message if (!ctx.meta.doNotProcessObject && transient !== true) { // Process object create, update or delete // and return an activity with the object ID @@ -197,6 +202,7 @@ const OutboxService = { } catch (e) { console.error(e); // If some processors failed, log error message but don't stop + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.error(e.message); } @@ -262,6 +268,7 @@ const OutboxService = { success.push(recipientUri); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Error when posting activity to local actor ${recipientUri}: ${e.message}`); failures.push(recipientUri); } @@ -275,12 +282,14 @@ const OutboxService = { queues: { remotePost: { name: '*', + // @ts-expect-error TS(7023): 'process' implicitly has return type 'any' because... Remove this comment to see the full error message async process(job: any) { const { activity, recipientUri } = job.data; // During tests, do not do post to remote servers if (process.env.NODE_ENV === 'test' && !recipientUri.startsWith('http://localhost')) return; + // @ts-expect-error TS(7022): 'recipientInbox' implicitly has type 'any' because... Remove this comment to see the full error message const recipientInbox = await this.broker.call('activitypub.actor.getCollectionUri', { actorUri: recipientUri, predicate: 'inbox', @@ -293,6 +302,7 @@ const OutboxService = { const body = JSON.stringify(activity); + // @ts-expect-error TS(7022): 'signatureHeaders' implicitly has type 'any' becau... Remove this comment to see the full error message const signatureHeaders = await this.broker.call('signature.generateSignatureHeaders', { url: recipientInbox, method: 'POST', @@ -300,6 +310,7 @@ const OutboxService = { actorUri: activity.actor }); + // @ts-expect-error TS(7022): 'response' implicitly has type 'any' because it do... Remove this comment to see the full error message const response = await fetch(recipientInbox, { method: 'POST', headers: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 68d2a3542..03d08aafe 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -102,7 +102,9 @@ const ReplyService = { return { match: match && dereferencedActivity.object.inReplyTo, dereferencedActivity }; }, async onEmit(ctx: any, activity: any, emitterUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message if (this.isLocalObject(activity.object.inReplyTo, emitterUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addReply( { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, { parentCtx: ctx } @@ -110,7 +112,9 @@ const ReplyService = { } }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message if (this.isLocalObject(activity.object.inReplyTo, recipientUri)) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addReply( { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, { parentCtx: ctx } @@ -127,9 +131,11 @@ const ReplyService = { } }, async onEmit(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); }, async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); } } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index ef702672f..8a36ca871 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -73,11 +73,13 @@ const ShareService = { fetcher ); return { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ match(... Remove this comment to see the full error message match: match && (await this.broker.call('activitypub.activity.isPublic', { activity })), dereferencedActivity }; }, async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addShare({ objectUri: activity.object, announce: activity }, { parentCtx: ctx }); } }, @@ -97,6 +99,7 @@ const ShareService = { return { match, dereferencedActivity }; }, async onReceive(ctx: any, activity: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeShare( { objectUri: activity.object?.object, announce: activity.object }, { parentCtx: ctx } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 5af2f340c..88fffae34 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -92,6 +92,7 @@ const ActivitypubSideEffectsSchema = { return resource; } catch (e) { this.logger.warn( + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. `Could not fetch ${resourceUri} with webId ${webId} and dataset ${dataset}. Error: ${e.message}` ); return false; @@ -294,25 +295,32 @@ const ActivitypubSideEffectsSchema = { // If capability present, verify it. if (activity.capability) { // Will throw, if invalid + // @ts-expect-error TS(2339): Property 'verifyCapabilityIntegrity' does not exis... Remove this comment to see the full error message dereferencedActivity = await this.verifyCapabilityIntegrity(dereferencedActivity, recipients); } try { // Process activity for each recipient and activity handler. for (const recipientUri of recipients) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ name: ... Remove this comment to see the full error message this.logger.info(`Processing activity ${activity.id} received in the inbox of ${recipientUri}...`); job.log(`Processing activity for recipient ${recipientUri}...`); + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ name... Remove this comment to see the full error message const dataset = this.settings.podProvider - ? await this.broker.call('auth.account.findDatasetByWebId', { webId: recipientUri }) + ? // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message + await this.broker.call('auth.account.findDatasetByWebId', { webId: recipientUri }) : undefined; + // @ts-expect-error TS(2339): Property 'fetch' does not exist on type '{ name: s... Remove this comment to see the full error message const fetcher = (resourceUri: any) => this.fetch(resourceUri, recipientUri, dataset); + // @ts-expect-error TS(2551): Property 'processors' does not exist on type '{ na... Remove this comment to see the full error message for (const processor of this.processors) { if (processor.boxTypes.includes('inbox')) { let error; let match; let result; + // @ts-expect-error TS(2339): Property 'runInboxProcessor' does not exist on typ... Remove this comment to see the full error message ({ error, match, result, dereferencedActivity } = await this.runInboxProcessor({ processor, recipientUri, @@ -367,11 +375,15 @@ const ActivitypubSideEffectsSchema = { let match; let dereferencedActivity = activity; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ name... Remove this comment to see the full error message const dataset = this.settings.podProvider - ? await this.broker.call('auth.account.findDatasetByWebId', { webId: emitterUri }) + ? // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message + await this.broker.call('auth.account.findDatasetByWebId', { webId: emitterUri }) : undefined; + // @ts-expect-error TS(2339): Property 'fetch' does not exist on type '{ name: s... Remove this comment to see the full error message const fetcher = (resourceUri: any) => this.fetch(resourceUri, emitterUri, dataset); + // @ts-expect-error TS(2551): Property 'processors' does not exist on type '{ na... Remove this comment to see the full error message for (const processor of this.processors) { if (processor.boxTypes.includes('outbox')) { // If the processor has a capabilityGrantMatchFnGenerator, the activity must have a capability. @@ -380,6 +392,7 @@ const ActivitypubSideEffectsSchema = { match = false; } else { // Even if there is no match, we keep in memory the dereferenced activity so that we don't need to dereference it again + // @ts-expect-error TS(2339): Property 'matchActivity' does not exist on type '{... Remove this comment to see the full error message ({ match, dereferencedActivity } = await this.matchActivity( processor.matcher, dereferencedActivity, @@ -389,6 +402,7 @@ const ActivitypubSideEffectsSchema = { if (match) { try { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message const result = await this.broker.call( processor.actionName, { @@ -407,6 +421,7 @@ const ActivitypubSideEffectsSchema = { }` ); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. job.log(`ERROR ${processor.key} (${processor.actionName}): ${e.message}`); // When sending through the outbox, we want to return immediately the error // TODO Call a new "revert" method for every side-effect processor ? diff --git a/src/middleware/packages/activitypub/utils.ts b/src/middleware/packages/activitypub/utils.ts index 55fdc2a3c..c20ec9aef 100644 --- a/src/middleware/packages/activitypub/utils.ts +++ b/src/middleware/packages/activitypub/utils.ts @@ -6,6 +6,7 @@ const collectionPermissionsWithAnonRead = (webId: any) => { }; if (webId !== 'anon' && webId !== 'system') { + // @ts-expect-error TS(2339): Property 'user' does not exist on type '{ anon: { ... Remove this comment to see the full error message permissions.user = { uri: webId, read: true, diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index 92aa90f65..b6041073c 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -1,4 +1,5 @@ import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'expr... Remove this comment to see the full error message import session from 'express-session'; import { ServiceSchema } from 'moleculer'; import AuthMixin from './auth.ts'; diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index ae23f6f02..e4bec141e 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -1,4 +1,6 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import passport from 'passport'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { TripleStoreAdapter } from '@semapps/triplestore'; import { ServiceSchema } from 'moleculer'; @@ -77,11 +79,13 @@ const AuthMixin = { const { jwtPath, reservedUsernames, minPasswordLength, minUsernameLength, accountsDataset, podProvider } = this.settings; + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth.jwt"; se... Remove this comment to see the full error message this.broker.createService({ mixins: [AuthJWTService], settings: { jwtPath } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth.account"... Remove this comment to see the full error message this.broker.createService({ mixins: [AuthAccountService], settings: { reservedUsernames, minPasswordLength, minUsernameLength }, @@ -119,6 +123,7 @@ const AuthMixin = { if (!token) { // No token + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.resolve(null); } @@ -126,7 +131,9 @@ const AuthMixin = { if (method === 'Bearer') { const payload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); if (payload) { + // @ts-expect-error TS(2339): Property 'tokenPayload' does not exist on type '{}... Remove this comment to see the full error message ctx.meta.tokenPayload = payload; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = payload.webId; return Promise.resolve(payload); } @@ -142,6 +149,7 @@ const AuthMixin = { } // No valid auth method given. + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.resolve(null); } @@ -165,7 +173,9 @@ const AuthMixin = { // Validate if the token was signed by server (registered user). const serverSignedPayload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); if (serverSignedPayload) { + // @ts-expect-error TS(2339): Property 'tokenPayload' does not exist on type '{}... Remove this comment to see the full error message ctx.meta.tokenPayload = serverSignedPayload; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = serverSignedPayload.webId; return Promise.resolve(serverSignedPayload); } diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 23397b07d..9ca247490 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -1,4 +1,6 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'bcry... Remove this comment to see the full error message import bcrypt from 'bcrypt'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'spea... Remove this comment to see the full error message import createSlug from 'speakingurl'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; @@ -52,6 +54,7 @@ const AuthAccountSchema = { // FORMAT AND VERIFY USERNAME if (username) { + // @ts-expect-error TS(2339): Property 'isSystemCall' does not exist on type '{}... Remove this comment to see the full error message if (!ctx.meta.isSystemCall) { const { isValid, error } = await this.isValidUsername(ctx, username); if (!isValid) throw new Error(error); @@ -219,6 +222,7 @@ const AuthAccountSchema = { findDatasetByWebId: { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const account = await ctx.call('auth.account.findByWebId', { webId }); return account?.username; @@ -227,6 +231,7 @@ const AuthAccountSchema = { findSettingsByWebId: { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { webId } = ctx.meta; const account = await ctx.call('auth.account.findByWebId', { webId }); @@ -241,6 +246,7 @@ const AuthAccountSchema = { updateAccountSettings: { async handler(ctx) { const { currentPassword, email, newPassword } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { webId } = ctx.meta; const account = await ctx.call('auth.account.findByWebId', { webId }); const passwordMatch = await this.comparePassword(currentPassword, account.hashedPassword); diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts index e01409240..fbec8a50c 100644 --- a/src/middleware/packages/auth/services/auth.cas.ts +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -1,4 +1,6 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-cas2'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; import AuthSSOMixin from '../mixins/auth.sso.ts'; diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 259271c81..5d9288142 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,4 +1,5 @@ import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-local'; import { ServiceSchema } from 'moleculer'; import AuthMixin from '../mixins/auth.ts'; @@ -40,6 +41,7 @@ const AuthLocalService = { this.passportId = 'local'; if (mail !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth.mail"; m... Remove this comment to see the full error message this.broker.createService({ mixins: [AuthMailService], settings: { @@ -54,6 +56,7 @@ const AuthLocalService = { const { username, email, password, ...rest } = ctx.params; // This is going to get in our way otherwise when waiting for completions. + // @ts-expect-error TS(2339): Property 'skipObjectsWatcher' does not exist on ty... Remove this comment to see the full error message ctx.meta.skipObjectsWatcher = true; let accountData = await ctx.call('auth.account.create', { @@ -103,8 +106,11 @@ const AuthLocalService = { logout: { async handler(ctx) { + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 302; + // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. ctx.meta.$location = ctx.params.redirectUrl || this.settings.formUrl; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); } }, @@ -118,7 +124,9 @@ const AuthLocalService = { formUrl.searchParams.set(key, value); } } + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 302; + // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. ctx.meta.$location = formUrl.toString(); } else { throw new Error('No formUrl defined in auth.local settings'); @@ -259,6 +267,7 @@ export default AuthLocalService; declare global { export namespace Moleculer { export interface AllServices { + // @ts-expect-error TS(2717): Subsequent property declarations must have the sam... Remove this comment to see the full error message [AuthLocalService.name]: typeof AuthLocalService; } } diff --git a/src/middleware/packages/auth/services/auth.oidc.ts b/src/middleware/packages/auth/services/auth.oidc.ts index fdd066848..78c505596 100644 --- a/src/middleware/packages/auth/services/auth.oidc.ts +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -1,4 +1,5 @@ import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'open... Remove this comment to see the full error message import { Issuer, Strategy, custom } from 'openid-client'; import { ServiceSchema } from 'moleculer'; @@ -74,6 +75,7 @@ export default AuthOIDCService; declare global { export namespace Moleculer { export interface AllServices { + // @ts-expect-error TS(2717): Subsequent property declarations must have the sam... Remove this comment to see the full error message [AuthOIDCService.name]: typeof AuthOIDCService; } } diff --git a/src/middleware/packages/auth/services/jwt.ts b/src/middleware/packages/auth/services/jwt.ts index 39fb10ba2..f43375f27 100644 --- a/src/middleware/packages/auth/services/jwt.ts +++ b/src/middleware/packages/auth/services/jwt.ts @@ -1,5 +1,6 @@ import fs from 'fs'; import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'json... Remove this comment to see the full error message import jwt from 'jsonwebtoken'; import crypto from 'crypto'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts index 7982e6269..8d0f80e9b 100644 --- a/src/middleware/packages/auth/services/mail.ts +++ b/src/middleware/packages/auth/services/mail.ts @@ -1,5 +1,6 @@ import path from 'path'; import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/auth/services/migration.ts b/src/middleware/packages/auth/services/migration.ts index c77e5f553..1833fe91a 100644 --- a/src/middleware/packages/auth/services/migration.ts +++ b/src/middleware/packages/auth/services/migration.ts @@ -19,6 +19,7 @@ const AuthMigrationSchema = { webId: user.id }); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. console.log(`Unable to create account for user ${user.id}. Error message: ${e.message}`); } } else { diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index 1bf0af1d8..5b606db7d 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -1,5 +1,6 @@ import { CronJob } from 'cron'; import fs from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import { emptyDirSync } from 'fs-extra'; import pathModule from 'path'; import { ServiceSchema } from 'moleculer'; @@ -131,6 +132,7 @@ const BackupService = { } return true; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.error(`Failed to copy ${path} to remote server with ${copyMethod}. Error: ${e.message}`); return false; } diff --git a/src/middleware/packages/backup/utils/fsCopy.ts b/src/middleware/packages/backup/utils/fsCopy.ts index 84e77b142..64c0092e2 100644 --- a/src/middleware/packages/backup/utils/fsCopy.ts +++ b/src/middleware/packages/backup/utils/fsCopy.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import fs from 'fs-extra'; import { join as pathJoin } from 'path'; diff --git a/src/middleware/packages/backup/utils/ftpCopy.ts b/src/middleware/packages/backup/utils/ftpCopy.ts index fd1891376..0e6ad03fb 100644 --- a/src/middleware/packages/backup/utils/ftpCopy.ts +++ b/src/middleware/packages/backup/utils/ftpCopy.ts @@ -1,4 +1,5 @@ import fs from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'ssh2... Remove this comment to see the full error message import Client from 'ssh2-sftp-client'; import { join as pathJoin } from 'path'; @@ -18,10 +19,12 @@ const ftpCopy = (path: any, subDir: any, remoteServer: any) => { reject(`Unable to scan directory: ${err.message}`); } else { const now = Date.now(); + // @ts-expect-error TS(2363): The right-hand side of an arithmetic operation mus... Remove this comment to see the full error message const newFiles = files.filter(f => now - fs.statSync(`${path}/${f}`).mtime < 60000); for (const filename of newFiles) { await sftp.put(pathJoin(path, filename), pathJoin(remoteServer.path, filename)); } + // @ts-expect-error TS(2794): Expected 1 arguments, but got 0. Did you forget to... Remove this comment to see the full error message resolve(); } }); diff --git a/src/middleware/packages/backup/utils/ftpRemove.ts b/src/middleware/packages/backup/utils/ftpRemove.ts index 7086ae4d4..3aff02442 100644 --- a/src/middleware/packages/backup/utils/ftpRemove.ts +++ b/src/middleware/packages/backup/utils/ftpRemove.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'ssh2... Remove this comment to see the full error message import Client from 'ssh2-sftp-client'; import { join as pathJoin } from 'path'; @@ -15,6 +16,7 @@ const ftpRemove = (removeFiles: any, remoteServer: any) => { for (const filename of removeFiles) { await sftp.delete(pathJoin(remoteServer.path, filename), true); } + // @ts-expect-error TS(2794): Expected 1 arguments, but got 0. Did you forget to... Remove this comment to see the full error message resolve(); }) .catch((e: any) => reject(e)); diff --git a/src/middleware/packages/backup/utils/rsyncCopy.ts b/src/middleware/packages/backup/utils/rsyncCopy.ts index 299c93243..543331760 100644 --- a/src/middleware/packages/backup/utils/rsyncCopy.ts +++ b/src/middleware/packages/backup/utils/rsyncCopy.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'rsyn... Remove this comment to see the full error message import Rsync from 'rsync'; import { join as pathJoin } from 'path'; @@ -18,6 +19,7 @@ const rsyncCopy = (path: any, subDir: any, remoteServer: any, syncDelete = false reject(error); } else { console.log('Rsync finished !'); + // @ts-expect-error TS(2794): Expected 1 arguments, but got 0. Did you forget to... Remove this comment to see the full error message resolve(); } }); diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index ce2275ea5..288101c03 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -1,4 +1,5 @@ import path from 'path'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import ApiGatewayService, { Errors as E } from 'moleculer-web'; import { ActivityPubService, FULL_ACTOR_TYPES } from '@semapps/activitypub'; import { JsonLdService } from '@semapps/jsonld'; @@ -9,6 +10,7 @@ import { TripleStoreService } from '@semapps/triplestore'; import { VoidService } from '@semapps/void'; import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; +// @ts-expect-error TS(2305): Module '"@semapps/crypto"' has no exported member ... Remove this comment to see the full error message import { KeysService, SignatureService } from '@semapps/crypto'; import { WebIdService } from '@semapps/webid'; import { ServiceSchema } from 'moleculer'; @@ -56,6 +58,7 @@ const CoreService = { const { baseUrl, baseDir, triplestore, containers, ontologies } = this.settings; if (this.settings.activitypub !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub";... Remove this comment to see the full error message this.broker.createService({ mixins: [ActivityPubService], // Type support for settings could be given, once moleculer type definitions improve... @@ -67,6 +70,7 @@ const CoreService = { } if (this.settings.api !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: (ServiceSchema' is not assignabl... Remove this comment to see the full error message namedNode(privateKeyId), namedNode('http://www.w3.org/2000/01/rdf-schema#seeAlso'), namedNode(resourceUri) diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index afd802f4e..57bb519e3 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -1,6 +1,9 @@ import { createSign, createHash } from 'crypto'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'http... Remove this comment to see the full error message import { parseRequest, verifySignature } from 'http-signature'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'http... Remove this comment to see the full error message import { createAuthzHeader, createSignatureString } from 'http-signature-header'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; @@ -22,6 +25,7 @@ const HttpSignatureService = { const headers = { Date: new Date().toUTCString() }; const includeHeaders = ['(request-target)', 'host', 'date']; if (body) { + // @ts-expect-error TS(2339): Property 'Digest' does not exist on type '{ Date: ... Remove this comment to see the full error message headers.Digest = this.buildDigest(body); includeHeaders.push('digest'); } @@ -35,6 +39,7 @@ const HttpSignatureService = { signer.update(signatureString); const signatureHash = signer.sign(privateKeyPem).toString('base64'); + // @ts-expect-error TS(2339): Property 'Signature' does not exist on type '{ Dat... Remove this comment to see the full error message headers.Signature = createAuthzHeader({ includeHeaders, keyId: actorUri, @@ -117,12 +122,15 @@ const HttpSignatureService = { { parentCtx: ctx } ); if (isValid) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = actorUri; return Promise.resolve(); } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.resolve(null); } @@ -138,12 +146,15 @@ const HttpSignatureService = { { parentCtx: ctx } ); if (isValid) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = actorUri; return Promise.resolve(); } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); } diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index 020317ad8..b3fd18c6b 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -207,18 +207,21 @@ const SignatureService = { if (this.hasWarnedMigration) return; if (this.isMigrated) { + // @ts-expect-error TS(2339): Property 'info' does not exist on type 'string | A... Remove this comment to see the full error message this.logger.info( 'The keys service has been migrated. ' + 'Key requests and setup are redirected to and handled in the new service. ' + 'This service might be removed in a future version.' ); } else { + // @ts-expect-error TS(2339): Property 'warn' does not exist on type 'string | A... Remove this comment to see the full error message this.logger.warn( 'The keys service has not been migrated yet. ' + 'This service is still handling key requests and setup. ' + 'Please migrate to the new keys service.' ); } + // @ts-expect-error TS(2322): Type 'boolean' is not assignable to type 'string |... Remove this comment to see the full error message this.hasWarnedMigration = true; } } @@ -226,6 +229,7 @@ const SignatureService = { events: { 'auth.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; if (this.isMigrated) { return; diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index d7bedf355..5686a0c04 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -2,6 +2,7 @@ import path from 'path'; import urlJoin from 'url-join'; import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; import fetch from 'node-fetch'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; @@ -46,6 +47,7 @@ const ProxyService = { const url = ctx.params.id; const method = ctx.params.method || 'GET'; const headers = JSON.parse(ctx.params.headers) || { accept: 'application/json' }; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const actorUri = ctx.meta.webId; // Only user can query his own proxy URL @@ -58,7 +60,8 @@ const ProxyService = { const body = ctx.params.files && ctx.params.files.length > 0 ? await stream2buffer(ctx.params.files[0].readableStream) - : ctx.meta.rawBody; + : // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. + ctx.meta.rawBody; try { const response = await this.actions.query( @@ -73,13 +76,19 @@ const ProxyService = { parentCtx: ctx } ); + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = response.status; + // @ts-expect-error TS(2339): Property '$statusMessage' does not exist on type '... Remove this comment to see the full error message ctx.meta.$statusMessage = response.statusText; + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = response.headers; return response.body; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = !e.code ? 500 : e.code === 'ECONNREFUSED' ? 502 : e.code; + // @ts-expect-error TS(2339): Property '$statusMessage' does not exist on type '... Remove this comment to see the full error message ctx.meta.$statusMessage = e.message; } } @@ -148,6 +157,7 @@ const ProxyService = { events: { 'auth.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; if (this.settings.podProvider) { const services = await ctx.call('$node.services'); diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts index 7166b472a..142d6b794 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts @@ -17,6 +17,7 @@ class VcCapabilityPresentationProofPurpose extends AuthenticationProofPurpose { */ constructor(options = {}) { super({ ...options, term: 'assertionMethod' }); + // @ts-expect-error TS(2339): Property 'maxChainLength' does not exist on type '... Remove this comment to see the full error message this.maxChainLength = options.maxChainLength || 2; } @@ -44,6 +45,7 @@ class VcCapabilityPresentationProofPurpose extends AuthenticationProofPurpose { const { document: presentation } = options; // Sort credentials so that we can infer the order of the capability chain. const credentialsOrdered = arrayOf(presentation.verifiableCredential).sort( + // @ts-expect-error TS(2362): The left-hand side of an arithmetic operation must... Remove this comment to see the full error message (c1, c2) => new Date(c1.issuanceDate || c1.proof.created) - new Date(c2.issuanceDate || c2.proof.created) ); diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts index 2ca41f0cc..b6a18e39b 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { CredentialIssuancePurpose } from '@digitalbazaar/vc'; /** diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts index 86066ea54..ef23d4f26 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts @@ -68,6 +68,7 @@ const ChallengeService = { cleanElapsed: { handler() { const now = Date.now(); + // @ts-expect-error TS(2339): Property 'issued' does not exist on type 'unknown'... Remove this comment to see the full error message for (const [challenge, { issued }] of Object.entries(this.challenges)) { if (now - issued > this.settings.challengeExpirationMs) { delete this.challenges[challenge]; diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 947ccaf24..aed8abae9 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -1,9 +1,13 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'json... Remove this comment to see the full error message import jsigs from 'jsonld-signatures'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { ServiceSchema } from 'moleculer'; @@ -39,14 +43,17 @@ const DataIntegrityService = { */ verifyObject: { params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, options: { type: 'object', optional: true, params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message proofPurpose: { type: 'string', default: 'assertionMethod' } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message purpose: { type: 'object', optional: true } }, async handler(ctx) { @@ -74,10 +81,13 @@ const DataIntegrityService = { */ signObject: { params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, options: { type: 'object', optional: true, params: { proofPurpose: { type: 'string', optional: true } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message purpose: { type: 'object', optional: true }, webId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, @@ -86,6 +96,7 @@ const DataIntegrityService = { object, options: { proofPurpose: method = 'assertionMethod' } = {}, purpose = new AssertionProofPurpose({ term: method }), + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, keyObject = undefined, keyId = undefined diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts index a3c61af74..839459145 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts @@ -39,6 +39,7 @@ const VcGuardSchema = { async handler(ctx) { const { uri, mode } = ctx.params; + // @ts-expect-error TS(2339): Property 'authorization' does not exist on type '{... Remove this comment to see the full error message if (ctx.meta.authorization?.capabilityPresentation) { if (await hasValidCapability(ctx, uri, mode)) { return true; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index eb864bd24..d708d6b35 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -58,7 +58,9 @@ const VCCredentialsContainer = { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = { + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ...ctx.meta.$responseHeaders, 'Cache-Control': 'private, max-age=300, immutable' }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index fd8b6c01d..acee4e19c 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -1,10 +1,14 @@ import { randomUUID } from 'node:crypto'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import vc from '@digitalbazaar/vc'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { ServiceSchema } from 'moleculer'; @@ -43,6 +47,7 @@ const VCHolderService = { presentation: { type: 'object', params: { + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message verifiableCredential: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }] }, '@context': { type: 'string', optional: true }, id: { type: 'string', optional: true }, @@ -55,11 +60,14 @@ const VCHolderService = { challenge: { type: 'string' }, domain: { type: 'string', optional: true }, proofPurpose: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message persist: { type: 'boolean', default: false } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message noAnonRead: { type: 'boolean', default: false }, webId: { type: 'string', optional: true } }, @@ -67,6 +75,7 @@ const VCHolderService = { const { presentation: presentationParam, options: { challenge, domain, proofPurpose = 'assertionMethod' }, + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, keyObject = undefined, keyId = undefined, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 631443e5e..ee718d39f 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -1,10 +1,14 @@ import { MIME_TYPES } from '@semapps/mime-types'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import vc from '@digitalbazaar/vc'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { ServiceSchema } from 'moleculer'; @@ -59,12 +63,14 @@ const VCCredentialService = { credential: { type: 'object', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message credentialSubject: { type: 'object' }, '@context': { type: 'string', optional: true }, id: { type: 'string', optional: true }, type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array', items: 'string' }], optional: true }, validFrom: { type: 'string', optional: true }, validUntil: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message proof: { type: 'multi', optional: true, rules: [{ type: 'object' }, { type: 'array', items: 'object' }] } } }, @@ -72,11 +78,14 @@ const VCCredentialService = { type: 'object', default: {}, params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message proofPurpose: { type: 'object', optional: true } } }, webId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; optional: true; default: ... Remove this comment to see the full error message noAnonRead: { type: 'boolean', optional: true, default: false }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, @@ -84,6 +93,7 @@ const VCCredentialService = { const { credential: receivedCredential, options: { proofPurpose = 'assertionMethod' }, + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, noAnonRead = false, purpose = new AssertionProofPurpose({ term: proofPurpose }), diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index 07f3b9493..a0d4d6f14 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -47,7 +47,9 @@ const VCPresentationContainer = { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = { + // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ...ctx.meta.$responseHeaders, 'Cache-Control': 'private, max-age=300, immutable' }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts index 84e2728b1..cd033cc8e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { did, cred } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import VCAuthorizerService from './vc-authorizer-service.ts'; @@ -36,21 +37,30 @@ const VCService = { }, created() { const { enableApi, podProvider } = this.settings; + // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.issuer"; settings: { podP... Remove this comment to see the full error message this.broker.createService({ mixins: [VCIssuerService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.guard"; de... Remove this comment to see the full error message this.broker.createService({ mixins: [VCAuthorizerService] }); + // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.holder"; dependencies: st... Remove this comment to see the full error message this.broker.createService({ mixins: [VCHolderService] }); + // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.verifier"; dependencies: ... Remove this comment to see the full error message this.broker.createService({ mixins: [VCVerifierService] }); + // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.data-integrity"; dependen... Remove this comment to see the full error message this.broker.createService({ mixins: [DataIntegrityService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.pre... Remove this comment to see the full error message this.broker.createService({ mixins: [ChallengeService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.hol... Remove this comment to see the full error message this.broker.createService({ mixins: [VCPresentationContainer], settings: { path: 'presentations', podProvider } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.iss... Remove this comment to see the full error message this.broker.createService({ mixins: [VCCredentialContainer], settings: { path: 'credentials', podProvider } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.api... Remove this comment to see the full error message if (enableApi) this.broker.createService({ mixins: [VCApiService], settings: { podProvider } }); }, async started() { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 667cb4292..12a16d974 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -1,5 +1,8 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; +// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import vc from '@digitalbazaar/vc'; import { ServiceSchema } from 'moleculer'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; @@ -42,7 +45,9 @@ const VCPresentationService = { issuer: { type: 'string', optional: true }, validFrom: { type: 'string', optional: true }, validUntil: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message credentialSubject: { type: 'object' }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message proof: { type: 'multi', optional: true, rules: [{ type: 'object' }, { type: 'array', items: 'object' }] } } }, @@ -50,6 +55,7 @@ const VCPresentationService = { type: 'object', default: {}, params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message proofPurpose: { type: 'string', default: 'assertionMethod' } } } @@ -60,6 +66,7 @@ const VCPresentationService = { options: { proofPurpose = 'assertionMethod' } } = ctx.params; + // @ts-expect-error TS(2554): Expected 0 arguments, but got 1. const purpose = new VCPurpose({ term: proofPurpose }); const suite = new DataIntegrityProof({ @@ -82,6 +89,7 @@ const VCPresentationService = { */ verifyPresentation: { params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, options: { type: 'object', @@ -90,10 +98,13 @@ const VCPresentationService = { challenge: { type: 'string', optional: true }, domain: { type: 'string', optional: true }, proofPurpose: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message unsignedPresentation: { type: 'boolean', default: false } } }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message credentialPurpose: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message presentationPurpose: { type: 'object', optional: true } }, async handler(ctx) { @@ -135,6 +146,7 @@ const VCPresentationService = { return verificationResult; } catch (e) { this.logger.error('Error verifying presentation:', e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. return { verified: false, error: e.message }; } } @@ -147,11 +159,13 @@ const VCPresentationService = { */ verifyCapabilityPresentation: { params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, options: { type: 'object', default: {}, params: { + // @ts-expect-error TS(2322): Type '{ type: "number"; default: number; }' is not... Remove this comment to see the full error message maxChainLength: { type: 'number', default: 2 }, challenge: { type: 'string', optional: true }, domain: { type: 'string', optional: true } @@ -189,6 +203,7 @@ const VCPresentationService = { // Order the VCs in the presentation by issuance date. const orderedCredentials = arrayOf(presentation.verifiableCredential).sort( + // @ts-expect-error TS(2362): The left-hand side of an arithmetic operation must... Remove this comment to see the full error message (c1, c2) => new Date(c1.issuanceDate || c1.proof.created) - new Date(c2.issuanceDate || c2.proof.created) ); presentation.verifiableCredential = orderedCredentials; diff --git a/src/middleware/packages/importer/mixins/humhub.ts b/src/middleware/packages/importer/mixins/humhub.ts index 9ec181aef..3abae620f 100644 --- a/src/middleware/packages/importer/mixins/humhub.ts +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -27,6 +27,7 @@ const Schema = { fieldsMapping: { // We don't use arrow function as we need to have access to this.settings slug: function (data: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ slug... Remove this comment to see the full error message switch (this.settings.source.humhub.type) { case 'user': case 'space': @@ -36,14 +37,18 @@ const Schema = { return data.content.metadata.guid; } }, + // @ts-expect-error TS(7023): 'created' implicitly has return type 'any' because... Remove this comment to see the full error message created: function (data: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ slug... Remove this comment to see the full error message switch (this.settings.source.humhub.type) { case 'calendar': case 'post': return convertToIsoString(data.content.metadata.created_at); } }, + // @ts-expect-error TS(7023): 'updated' implicitly has return type 'any' because... Remove this comment to see the full error message updated: function (data: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ slug... Remove this comment to see the full error message switch (this.settings.source.humhub.type) { case 'calendar': case 'post': diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index db0b76616..6ccaa6944 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -235,6 +235,7 @@ const Schema = { webId: 'system' }); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Unable to update ${destUri} (Error message: ${e.message})`); return false; } @@ -266,6 +267,7 @@ const Schema = { webId: 'system' }); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Unable to import ${sourceUri} (Error message: ${e.message})`); return false; } @@ -468,6 +470,7 @@ const Schema = { await this.postActivity(ACTIVITY_TYPES.DELETE, this.imported[sourceUri]); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message deletedUris[sourceUri] = this.imported[sourceUri]; // Remove resource from local cache @@ -484,11 +487,13 @@ const Schema = { for (const sourceUri of urisToCreate) { this.logger.info(`Resource ${sourceUri} did not exist, importing it...`); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const destUri = await this.actions.importOne({ sourceUri, data: mappedFullResults[sourceUri] }); if (destUri) { await this.postActivity(ACTIVITY_TYPES.CREATE, destUri); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message createdUris[sourceUri] = destUri; // Add resource to local cache @@ -515,6 +520,7 @@ const Schema = { const result = await this.actions.importOne({ sourceUri, destUri: this.imported[sourceUri], + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message data: mappedFullResults[sourceUri] }); @@ -526,6 +532,7 @@ const Schema = { await this.postActivity(ACTIVITY_TYPES.DELETE, this.imported[sourceUri]); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message deletedUris[sourceUri] = this.imported[sourceUri]; // Remove resource from local cache @@ -535,6 +542,7 @@ const Schema = { } else { await this.postActivity(ACTIVITY_TYPES.UPDATE, this.imported[sourceUri]); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message updatedUris[sourceUri] = this.imported[sourceUri]; } } diff --git a/src/middleware/packages/importer/mixins/prestashop.ts b/src/middleware/packages/importer/mixins/prestashop.ts index 7112dcfa7..2955c6740 100644 --- a/src/middleware/packages/importer/mixins/prestashop.ts +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -53,6 +53,7 @@ const Schema = { const result = await this.fetch(url); if (result) { return { + // @ts-expect-error TS(2698): Spread types may only be created from object types... Remove this comment to see the full error message ...Object.values(result)[0], type: Object.keys(result)[0] }; diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index 4eea8d993..b03b9c2bb 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -70,6 +70,7 @@ const Schema = { this.logger.warn(`Could not get ${mediaUrl}. Trying again in 30 seconds...`); await delay(30000); } else { + // @ts-expect-error TS(2769): No overload matches this call. throw new Error(e); } } diff --git a/src/middleware/packages/importer/utils.ts b/src/middleware/packages/importer/utils.ts index f14cc62cc..f465519ae 100644 --- a/src/middleware/packages/importer/utils.ts +++ b/src/middleware/packages/importer/utils.ts @@ -1,5 +1,7 @@ import { promises as fsPromises } from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'sani... Remove this comment to see the full error message import sanitizeHtml from 'sanitize-html'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'goog... Remove this comment to see the full error message import googlelibphonenumberModule from 'google-libphonenumber'; const PNF = googlelibphonenumberModule.PhoneNumberFormat; @@ -26,6 +28,7 @@ const frenchAddressSearch = async (query: any) => { if (response.ok) { const json = await response.json(); + // @ts-expect-error TS(18046): 'json' is of type 'unknown'. return json.features[0]; } return false; @@ -39,6 +42,7 @@ const frenchAddressReverseSearch = async (lat: any, lon: any) => { if (response.ok) { const json = await response.json(); + // @ts-expect-error TS(18046): 'json' is of type 'unknown'. return json.features.length > 0 ? json.features[0] : false; } return false; diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 54746f1c5..ba80448cb 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -17,6 +17,7 @@ const InferenceSchema = { created() { const { baseUrl, acceptFromRemoteServers, offerToRemoteServers } = this.settings; if (acceptFromRemoteServers || offerToRemoteServers) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "inference.rem... Remove this comment to see the full error message this.broker.createService({ mixins: [RemoteService], settings: { @@ -53,13 +54,16 @@ const InferenceSchema = { if (err) reject(err); if (quad) { if (quad.predicate.id === 'http://www.w3.org/2002/07/owl#inverseOf') { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message rel[quad.object.id] = quad.subject.id; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message rel[quad.subject.id] = quad.object.id; } else if ( quad.predicate.id === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' && quad.object.id === 'http://www.w3.org/2002/07/owl#SymmetricProperty' ) { // SymmetricProperty implies an inverse relation with the same properties + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message rel[quad.subject.id] = quad.subject.id; } } else { @@ -149,6 +153,7 @@ const InferenceSchema = { events: { 'ldp.resource.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'newData' does not exist on type 'Optiona... Remove this comment to see the full error message let { newData } = ctx.params; newData = await ctx.call('jsonld.parser.expand', { input: newData }); @@ -181,6 +186,7 @@ const InferenceSchema = { 'ldp.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message let { oldData } = ctx.params; oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); @@ -209,6 +215,7 @@ const InferenceSchema = { 'ldp.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message let { oldData, newData } = ctx.params; oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); newData = await ctx.call('jsonld.parser.expand', { input: newData }); @@ -270,6 +277,7 @@ const InferenceSchema = { 'ldp.resource.patched': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'triplesAdded' does not exist on type 'Op... Remove this comment to see the full error message const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; // If the patch is done following a remote inference offer @@ -328,6 +336,7 @@ const InferenceSchema = { 'ontologies.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'owl' does not exist on type 'Optionalize... Remove this comment to see the full error message const { owl } = ctx.params; if (owl) { const result = await this.findInverseRelations(owl); diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index 34fa7e93f..72fe4fa84 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -22,9 +22,13 @@ const InferenceRemoteSchema = { offerInference: { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message subject: { type: 'string', optional: false }, + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message predicate: { type: 'string', optional: false }, + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message object: { type: 'string', optional: false }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; optional: false; }' is no... Remove this comment to see the full error message add: { type: 'boolean', optional: false } }, async handler(ctx) { @@ -80,6 +84,7 @@ const InferenceRemoteSchema = { } } catch (e) { this.logger.warn( + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. `Error while connecting to remove server for offering inverse relationship: ${e.message}` ); } @@ -124,10 +129,12 @@ const InferenceRemoteSchema = { return { match, dereferencedActivity }; }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.acceptFromRemoteServers && recipientUri === this.relayActor.id) { const relationship = activity.object.object; if (relationship.subject && relationship.relationship && relationship.object) { if (await ctx.call('ldp.remote.isRemote', { resourceUri: relationship.subject })) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match(... Remove this comment to see the full error message this.logger.warn('Attempt at offering an inverse relationship on a remote resource. Aborting...'); return; } @@ -158,6 +165,7 @@ const InferenceRemoteSchema = { webId: 'system' }); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ match(... Remove this comment to see the full error message if (this.broker.cacher) { await ctx.call('ldp.cache.invalidateResource', { resourceUri: relationship.subject }); } diff --git a/src/middleware/packages/jsonld/service.ts b/src/middleware/packages/jsonld/service.ts index c5b919f5f..f9332ee21 100644 --- a/src/middleware/packages/jsonld/service.ts +++ b/src/middleware/packages/jsonld/service.ts @@ -29,6 +29,7 @@ const JsonldSchema = { localContextUri = urlJoin(baseUri, localContextPath); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.docume... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdDocumentLoaderService], settings: { @@ -38,16 +39,19 @@ const JsonldSchema = { }); this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "jsonld.context"; settings: { localC... Remove this comment to see the full error message mixins: [JsonLdContextService], settings: { localContextUri } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.parser... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdParserService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.api"; ... Remove this comment to see the full error message this.broker.createService({ mixins: [JsonLdApiService], settings: { diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts index b367f3bf0..6d65b6341 100644 --- a/src/middleware/packages/jsonld/services/api/index.ts +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -23,6 +23,7 @@ const JsonldApiSchema = { actions: { getContext: { async handler(ctx) { + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = 'application/ld+json'; return await ctx.call('jsonld.context.getLocal'); } diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index 7190fe14b..6f29ce1e5 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -15,9 +15,11 @@ const Schema = { } } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const localContext = await this.actions.getLocal({}, { parentCtx: ctx }); // Include the local context only if it is not empty if (Object.keys(localContext['@context']).length > 0) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. context = context.concat(this.settings.localContextUri); } diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index ccb70bc95..100219b87 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -6,11 +6,13 @@ const Schema = { params: { a: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, b: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts index 5ed0864db..4f8259bda 100644 --- a/src/middleware/packages/jsonld/services/context/actions/parse.ts +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -5,12 +5,15 @@ const Schema = { params: { context: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }] }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message options: { type: 'object', optional: true } }, async handler(ctx) { const { context, options } = ctx.params; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const { contextRaw } = await this.contextParser.parse(context, options); return contextRaw; } diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index cc561c68f..3d34e7c19 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -5,15 +5,18 @@ const Schema = { params: { context: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }] } }, async handler(ctx) { const { context } = ctx.params; try { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.contextParser.parse(context); return true; } catch (e) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.warn(`Could not parse context. Error: ${e.message}`); return false; } diff --git a/src/middleware/packages/jsonld/services/context/index.ts b/src/middleware/packages/jsonld/services/context/index.ts index 7ceff99e0..05c70c05f 100644 --- a/src/middleware/packages/jsonld/services/context/index.ts +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -32,8 +32,11 @@ const JsonldContextSchema = { actions: { get: getAction, getLocal: getLocalAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { a: { type:... Remove this comment to see the full error message merge: mergeAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { context: {... Remove this comment to see the full error message parse: parseAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { context: {... Remove this comment to see the full error message validate: validateAction } } satisfies ServiceSchema; diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index 9e570bd84..07b77fe33 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -1,5 +1,6 @@ import jsonld from 'jsonld'; import fsModule from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'lru-... Remove this comment to see the full error message import LRU from 'lru-cache'; import { ServiceSchema } from 'moleculer'; @@ -7,7 +8,8 @@ const fsPromises = fsModule.promises; /** Use document loader depending on node / bun runtime. */ const defaultDocumentLoader = !process.versions.bun - ? jsonld.documentLoaders.node() + ? // @ts-expect-error TS(2339): Property 'documentLoaders' does not exist on type ... Remove this comment to see the full error message + jsonld.documentLoaders.node() : /** Document loader using the modern fetch API. */ async (url: any, options: any) => { const fetchResult = await fetch(url, { @@ -16,10 +18,12 @@ const defaultDocumentLoader = !process.versions.bun ...options?.headers }, redirect: options?.maxRedirects <= 0 ? 'error' : 'follow', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message follow: options?.maxRedirects }); const linkHeaderVal = fetchResult.headers.get('link'); + // @ts-expect-error TS(2339): Property 'util' does not exist on type 'typeof imp... Remove this comment to see the full error message const parsedLinks = !(linkHeaderVal || linkHeaderVal === '') ? {} : jsonld.util.parseLinkHeader(linkHeaderVal); const contextUrl = parsedLinks['http://www.w3.org/ns/json-ld#context'] || null; @@ -39,6 +43,7 @@ const JsonldDocumentLoaderSchema = { async started() { for (const contextFile of this.settings.cachedContextFiles) { const contextFileContent = await fsPromises.readFile(contextFile.file); + // @ts-expect-error TS(2345): Argument of type 'Buffer' is not ... Remove this comment to see the full error message const contextJson = JSON.parse(contextFileContent); cache.set(contextFile.uri, { contextUrl: null, diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 8dfe3bfef..62ba57c05 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -7,6 +7,7 @@ import rdfparseModule from 'rdf-parse'; import { ServiceSchema } from 'moleculer'; import { arrayOf, isURI } from '../../utils/utils.ts'; +// @ts-expect-error TS(2339): Property 'default' does not exist on type 'RdfPars... Remove this comment to see the full error message const rdfParser = rdfparseModule.default; const JsonldParserSchema = { diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts index 982189a7c..b43573dd4 100644 --- a/src/middleware/packages/ldp/adapter.ts +++ b/src/middleware/packages/ldp/adapter.ts @@ -4,29 +4,39 @@ const { ServiceSchemaError } = require('moleculer').Errors; class LdpAdapter { constructor({ resourceService = 'ldp.resource', containerService = 'ldp.container' } = {}) { + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message this.resourceService = resourceService; + // @ts-expect-error TS(2339): Property 'containerService' does not exist on type... Remove this comment to see the full error message this.containerService = containerService; } init(broker: any, service: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message this.broker = broker; + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message this.service = service; } async connect() { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message if (!this.service.schema.settings.containerUri) { throw new ServiceSchemaError( + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message `Missing \`containerUri\` definition in settings of service ${this.service.schema.name}` ); } + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message await this.broker.waitForServices([this.resourceService, this.containerService], 120000); + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message const { containerUri } = this.service.schema.settings; + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message const exists = await this.broker.call(`${this.containerService}.exist`, { containerUri, webId: 'system' }); if (!exists) { console.log(`Container ${containerUri} doesn't exist, creating it...`); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message await this.broker.call(`${this.containerService}.create`, { containerUri }); } } @@ -47,9 +57,12 @@ class LdpAdapter { * - query */ find(filters: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message return this.broker.call(`${this.containerService}.get`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message containerUri: this.service.schema.settings.containerUri, filters: filters.query, + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message jsonContext: this.service.schema.settings.context }); } @@ -66,10 +79,13 @@ class LdpAdapter { */ findById(_id: any) { if (!_id.startsWith('http')) { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message _id = urlJoin(this.service.schema.settings.containerUri, _id); } + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message return this.broker.call(`${this.resourceService}.get`, { resourceUri: _id, + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message jsonContext: this.service.schema.settings.context }); } @@ -99,23 +115,31 @@ class LdpAdapter { insert(entity: any) { const { slug, ...resource } = entity; - return this.broker - .call(`${this.resourceService}.post`, { - containerUri: this.service.schema.settings.containerUri, - resource: { - '@context': this.service.schema.settings.context, - ...resource - }, - slug - }) - .then((resourceUri: any) => { - this.broker.call(`${this.containerService}.attach`, { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return ( + this.broker + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message + .call(`${this.resourceService}.post`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message containerUri: this.service.schema.settings.containerUri, - resourceUri - }); - - return this.findById(resourceUri); - }); + resource: { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + '@context': this.service.schema.settings.context, + ...resource + }, + slug + }) + .then((resourceUri: any) => { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + this.broker.call(`${this.containerService}.attach`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + containerUri: this.service.schema.settings.containerUri, + resourceUri + }); + + return this.findById(resourceUri); + }) + ); } /** @@ -141,17 +165,23 @@ class LdpAdapter { // Check ID and transform it to URI if necessary _id = _id || id || arobaseId; if (!_id) throw new Error('An ID must be specified to update resources'); + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message if (!_id.startsWith('http')) _id = urlJoin(this.service.schema.settings.containerUri, _id); - return this.broker - .call(`${this.resourceService}.put`, { - resource: { - '@context': this.service.schema.settings.context, - '@id': _id, - ...resource - } - }) - .then((resourceUri: any) => this.findById(resourceUri)); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return ( + this.broker + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message + .call(`${this.resourceService}.put`, { + resource: { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message + '@context': this.service.schema.settings.context, + '@id': _id, + ...resource + } + }) + .then((resourceUri: any) => this.findById(resourceUri)) + ); } /** @@ -165,22 +195,28 @@ class LdpAdapter { * Remove an entity by ID */ removeById(_id: any) { - return this.broker - .call(`${this.resourceService}.delete`, { - resourceUri: _id - }) - .then(() => { - // We must return the number of deleted resource - // Otherwise the DB adapter returns an error - return 1; - }); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message + return ( + this.broker + // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message + .call(`${this.resourceService}.delete`, { + resourceUri: _id + }) + .then(() => { + // We must return the number of deleted resource + // Otherwise the DB adapter returns an error + return 1; + }) + ); } /** * Clear all entities from the container */ clear() { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message return this.broker.call(`${this.containerService}.clear`, { + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message containerUri: this.service.schema.settings.containerUri }); } diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 055768c1f..73fc305c4 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -79,6 +79,7 @@ const Schema = { get: { handler(ctx) { const containerParams = {}; + // @ts-expect-error TS(2339): Property 'accept' does not exist on type '{}'. if (this.settings.accept) containerParams.accept = this.settings.accept; return ctx.call('ldp.resource.get', { ...containerParams, @@ -127,6 +128,7 @@ const Schema = { handler(ctx) { return ctx.call('ldp.registry.getUri', { path: this.settings.path, + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId: ctx.params?.webId || ctx.meta?.webId }); } @@ -140,6 +142,7 @@ const Schema = { if (!containerUri) { containerUri = await this.actions.getContainerUri( + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. { webId: ctx.params.webId || ctx.meta.webId }, { parentCtx: ctx } ); diff --git a/src/middleware/packages/ldp/mixins/dereference.ts b/src/middleware/packages/ldp/mixins/dereference.ts index f6f30e380..5e3a21f15 100644 --- a/src/middleware/packages/ldp/mixins/dereference.ts +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -60,6 +60,7 @@ const Schema = { delete result['@context']; return result; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 403 || e.code === 404) { return resourceUri; } else { diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index 6515c7541..08e00315c 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -14,6 +14,7 @@ const Schema = { before: { async create(ctx) { const { resource } = ctx.params; + // @ts-expect-error TS(2349): This expression is not callable. await this.createDisassembly(ctx, resource); }, async put(ctx) { @@ -22,11 +23,13 @@ const Schema = { resourceUri: resource.id || resource['@id'], webId: 'system' }); + // @ts-expect-error TS(2349): This expression is not callable. await this.updateDisassembly(ctx, resource, oldData); } }, after: { async delete(ctx, res) { + // @ts-expect-error TS(2349): This expression is not callable. await this.deleteDisassembly(ctx, res.oldData); return res; } diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 2e596fce8..c34e4c589 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { dc } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import { getDatasetFromUri } from '../utils.ts'; @@ -72,8 +73,10 @@ const Schema = { events: { 'ldp.resource.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, webId, dataset } = ctx.params; this.actions.tagCreatedResource( + // @ts-expect-error TS(2339): Property 'impersonatedUser' does not exist on type... Remove this comment to see the full error message { resourceUri, newData, webId: ctx.meta.impersonatedUser || webId, dataset }, { parentCtx: ctx } ); @@ -82,6 +85,7 @@ const Schema = { 'ldp.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -89,6 +93,7 @@ const Schema = { 'ldp.resource.patched': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index ac32d7d46..aea064b4e 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'shar... Remove this comment to see the full error message import sharp from 'sharp'; import { MIME_TYPES } from '@semapps/mime-types'; import { ServiceSchema } from 'moleculer'; @@ -62,6 +63,7 @@ const Schema = { await sharp(buffer).toFile(metadata.localPath); } } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Image processing failed (${e.message})`); } } @@ -95,6 +97,7 @@ const Schema = { hooks: { after: { async create(ctx, res) { + // @ts-expect-error TS(2339): Property 'processImage' does not exist on type 'st... Remove this comment to see the full error message await this.actions.processImage({ resourceUri: res.resourceUri }, { parentCtx: ctx }); return res; } diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index 1bf87383b..34add3442 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -22,6 +22,7 @@ const Schema = { before: { async post(ctx) { const { file } = ctx.params; + // @ts-expect-error TS(2339): Property 'mimeTypes' does not exist on type 'strin... Remove this comment to see the full error message const { mimeTypes } = this.settings; if ( diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index f3803a1b4..256f2900f 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -50,6 +50,7 @@ const Schema = { this.logger.info(`OrphanFilesDeletion - ${file.value} deleted`); } } catch (error) { + // @ts-expect-error TS(18046): 'error' is of type 'unknown'. this.logger.error(`OrphanFilesDeletion - Error: ${error.message}`); } } diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index d140705b0..21d608a5c 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -86,18 +86,21 @@ const Schema = { before: { async get(ctx) { if (!ctx.params.resourceUri) { + // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); } }, async patch(ctx) { if (!ctx.params.resourceUri) { + // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); } }, async put(ctx) { if (!ctx.params.resourceUri) { + // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); } @@ -108,6 +111,7 @@ const Schema = { 'auth.registered': { async handler(ctx) { if (this.settings.podProvider) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; await this.actions.initializeResource({ webId }); } diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index fe880523d..b5b19b22f 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -30,7 +30,9 @@ const Schema = { const middlewares = [parseUrl, parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; let aliases = {}; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message aliases['GET /'] = [...middlewares, `${this.name}.endpointGet`]; + // @ts-expect-error TS(2774): This condition will always return true since this ... Remove this comment to see the full error message if (this.actions.endpointPost) aliases['POST /'] = [...middlewares, `${this.name}.endpointPost`]; await this.broker.call('api.addRoute', { @@ -85,6 +87,7 @@ const Schema = { endpointGet: { async handler(ctx) { + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = ctx.meta.headers?.accept; return await ctx.call( diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index d84ba16e6..13e5999d6 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { ldp, semapps } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; @@ -35,6 +36,7 @@ const LdpSchema = { } = this.settings; this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.container"; settings: { baseUrl... Remove this comment to see the full error message mixins: [LdpContainerService], settings: { baseUrl, @@ -44,6 +46,7 @@ const LdpSchema = { }); this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.resource"; settings: { baseUrl:... Remove this comment to see the full error message mixins: [LdpResourceService], settings: { baseUrl, @@ -56,6 +59,7 @@ const LdpSchema = { }); this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.remote"; mixins: any[]; setting... Remove this comment to see the full error message mixins: [LdpRemoteService], settings: { baseUrl, @@ -64,6 +68,7 @@ const LdpSchema = { }); this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.registry"; settings: { baseUrl:... Remove this comment to see the full error message mixins: [LdpRegistryService], settings: { baseUrl, @@ -73,6 +78,7 @@ const LdpSchema = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ldp.api"; set... Remove this comment to see the full error message this.broker.createService({ mixins: [LdpApiService], settings: { @@ -81,12 +87,15 @@ const LdpSchema = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "permissions";... Remove this comment to see the full error message this.broker.createService({ mixins: [PermissionsService] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ldp.link-head... Remove this comment to see the full error message this.broker.createService({ mixins: [LdpLinkHeaderService] }); // Only create this service if a cacher is defined if (this.broker.cacher) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ldp.cache"; d... Remove this comment to see the full error message this.broker.createService({ mixins: [LdpCacheService] }); } }, diff --git a/src/middleware/packages/ldp/services/api/actions/delete.ts b/src/middleware/packages/ldp/services/api/actions/delete.ts index 238f06136..3dd70de4d 100644 --- a/src/middleware/packages/ldp/services/api/actions/delete.ts +++ b/src/middleware/packages/ldp/services/api/actions/delete.ts @@ -18,8 +18,11 @@ export default async function patch(this: any, ctx: any) { 'Content-Length': 0 }; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } } diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index bfab2f680..310ead727 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -107,8 +107,11 @@ export default async function get(this: any, ctx: any) { return res; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } } diff --git a/src/middleware/packages/ldp/services/api/actions/head.ts b/src/middleware/packages/ldp/services/api/actions/head.ts index 722dbf6b6..b753013c8 100644 --- a/src/middleware/packages/ldp/services/api/actions/head.ts +++ b/src/middleware/packages/ldp/services/api/actions/head.ts @@ -12,8 +12,11 @@ export default async function head(this: any, ctx: any) { 'Content-Length': 0 }; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } } diff --git a/src/middleware/packages/ldp/services/api/actions/patch.ts b/src/middleware/packages/ldp/services/api/actions/patch.ts index 90a278414..d38559405 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.ts +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -29,7 +29,9 @@ export default async function patch(this: any, ctx: any) { const triplesByOperation = Object.fromEntries( parsedQuery.updates + // @ts-expect-error TS(2339): Property 'updateType' does not exist on type 'Upda... Remove this comment to see the full error message .filter(p => ACCEPTED_OPERATIONS.includes(p.updateType)) + // @ts-expect-error TS(2339): Property 'updateType' does not exist on type 'Upda... Remove this comment to see the full error message .map(p => [p.updateType, p[p.updateType][0].triples]) ); @@ -68,8 +70,11 @@ export default async function patch(this: any, ctx: any) { }; ctx.meta.$statusCode = 204; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (!e.code || e.code < 400) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } } diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index efa3ac2cf..b664d12d5 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -1,5 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mime... Remove this comment to see the full error message import mime from 'mime-types'; const { MoleculerError } = require('moleculer').Errors; @@ -52,8 +54,11 @@ export default async function post(this: any, ctx: any) { ctx.meta.$location = resourceUri; ctx.meta.$statusCode = 201; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code < 400 && e.code >= 500) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } } diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 03fc9c77b..05259b8f9 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -36,8 +36,11 @@ export default async function post(this: any, ctx: any) { 'Content-Length': 0 }; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404 && e.code !== 403) console.error(e); + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusMessage = e.message; } } diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index 5ef29052e..8af6b8998 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -48,6 +48,7 @@ const LdpCacheSchema = { events: { 'ldp.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -55,6 +56,7 @@ const LdpCacheSchema = { 'ldp.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -62,6 +64,7 @@ const LdpCacheSchema = { 'ldp.resource.patched': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -69,6 +72,7 @@ const LdpCacheSchema = { 'ldp.container.attached': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -76,6 +80,7 @@ const LdpCacheSchema = { 'ldp.container.patched': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -83,6 +88,7 @@ const LdpCacheSchema = { 'ldp.container.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -90,6 +96,7 @@ const LdpCacheSchema = { 'ldp.container.detached': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -97,6 +104,7 @@ const LdpCacheSchema = { 'ldp.remote.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -104,6 +112,7 @@ const LdpCacheSchema = { 'ldp.remote.stored': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -112,6 +121,7 @@ const LdpCacheSchema = { 'webacl.resource.updated': { // Invalidate cache also when ACL rights are changed async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, dataset } = ctx.params; if (isContainer) { await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); @@ -123,6 +133,7 @@ const LdpCacheSchema = { 'webacl.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, dataset } = ctx.params; if (isContainer) { await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 47f9cf7a0..d3ccc0875 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -15,16 +15,19 @@ const Schema = { }, async handler(ctx) { const { containerUri, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId }); if (!resourceExists) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const childContainerExists = await this.actions.exist({ containerUri: resourceUri }, { parentCtx: ctx }); if (!childContainerExists) { throw new MoleculerError(`Cannot attach non-existing resource or container: ${resourceUri}`, 404, 'NOT_FOUND'); } } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const containerExists = await this.actions.exist({ containerUri, webId }, { parentCtx: ctx }); if (!containerExists) throw new Error(`Cannot attach to a non-existing container: ${containerUri}`); @@ -44,9 +47,11 @@ const Schema = { containerUri, resourceUri, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.container.attached', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index 12ed95a4c..8ac70199a 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -9,11 +9,14 @@ const Schema = { async handler(ctx) { let { containerUri, webId } = ctx.params; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const resourcesUris = await this.actions.getUris({ containerUri }, { parentCtx: ctx }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.info(`Deleting ${resourcesUris.length} resources...`); for (let resourceUri of resourcesUris) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.info(`Deleting ${resourceUri}...`); await ctx.call('ldp.resource.delete', { resourceUri, webId }); } diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 13f070ed8..d4bfd8065 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -6,11 +6,13 @@ const Schema = { containerUri: { type: 'string' }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message options: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const { containerUri, title, description, options } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('triplestore.insert', { diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 8cef4fad2..92f7e2157 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -13,6 +13,7 @@ const Schema = { containerUri: { type: 'string' }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message options: { type: 'object', optional: true }, webId: { type: 'string', optional: true } // Required in Pod provider config }, @@ -24,12 +25,15 @@ const Schema = { if (!exists) { let parentContainerUri; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider && (!webId || webId === 'anon' || webId === 'system')) throw new Error(`The webId param is required in Pod provider config. Provided: ${webId}`); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const rootContainerUri = this.settings.podProvider ? await ctx.call('solid-storage.getUrl', { webId }) - : urlJoin(this.settings.baseUrl, '/'); + : // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + urlJoin(this.settings.baseUrl, '/'); const containerPath = containerUri.replace(rootContainerUri, '/'); @@ -38,6 +42,7 @@ const Schema = { parentContainerUri = getParentContainerUri(containerUri); // if it is the root container, add a trailing slash + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!this.settings.podProvider && urlJoin(parentContainerUri, '/') === rootContainerUri) { parentContainerUri = urlJoin(parentContainerUri, '/'); } @@ -46,6 +51,7 @@ const Schema = { if (!parentExists) { // Recursively create the parent containers, without title/description/permissions + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.actions.createAndAttach( { containerUri: parentContainerUri, options: { permissions: {} }, webId }, { parentCtx: ctx } @@ -54,12 +60,14 @@ const Schema = { } // Then create the container + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.actions.create( { containerUri, title, description, options, + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. webId: this.settings.podProvider ? webId : 'system' }, { parentCtx: ctx } @@ -67,6 +75,7 @@ const Schema = { // Then attach the container to its parent container if (parentContainerUri) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.actions.attach( { containerUri: parentContainerUri, diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index e332b279d..d3dc95b6d 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -4,11 +4,13 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message containerUri: 'string', webId: { type: 'string', optional: true } }, async handler(ctx) { const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Write', webId }); @@ -39,10 +41,12 @@ const Schema = { const returnValues = { containerUri, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, webId }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.container.deleted', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index ed161839d..9f9cd021f 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -10,6 +10,7 @@ const Schema = { }, async handler(ctx) { let { containerUri, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const isRemoteContainer = await ctx.call('ldp.remote.isRemote', { resourceUri: containerUri }); @@ -18,6 +19,7 @@ const Schema = { if (isRemoteContainer) return; // indeed, we never have the root container on a mirror. containerUri = urlJoin(containerUri, '/'); } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const containerExists = await this.actions.exist({ containerUri, webId }, { parentCtx: ctx }); if (!containerExists && isRemoteContainer) return; if (!containerExists) throw new Error(`Cannot detach from a non-existing container: ${containerUri}`); @@ -34,12 +36,14 @@ const Schema = { webId }); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!isRemoteContainer && !ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.detached', { containerUri, resourceUri, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 94e6f35cf..25b9ee919 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -10,8 +10,11 @@ const Schema = { containerUri: { type: 'string', optional: true }, webId: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message filters: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message doNotIncludeResources: { type: 'boolean', default: false }, + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { @@ -19,6 +22,7 @@ const Schema = { }, async handler(ctx) { const { containerUri, accept, filters, doNotIncludeResources, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Read', webId }); @@ -94,6 +98,7 @@ const Schema = { } } catch (e) { // Ignore a resource if it is not found + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.name !== 'MoleculerError') throw e; } return []; diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.ts b/src/middleware/packages/ldp/services/container/actions/getPath.ts index e7240710c..24010e197 100644 --- a/src/middleware/packages/ldp/services/container/actions/getPath.ts +++ b/src/middleware/packages/ldp/services/container/actions/getPath.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'dash... Remove this comment to see the full error message import dashify from 'dashify'; import { ActionSchema } from 'moleculer'; import { isURL } from '../../../utils.ts'; @@ -5,6 +6,7 @@ import { isURL } from '../../../utils.ts'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceType: 'string' }, async handler(ctx) { @@ -24,7 +26,9 @@ const Schema = { } } else if (resourceType.match(regex)) { const matchResults = regex.exec(resourceType); + // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. prefix = matchResults[1]; + // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. className = matchResults[2]; ontology = await ctx.call('ontologies.get', { prefix }); } else { diff --git a/src/middleware/packages/ldp/services/container/actions/includes.ts b/src/middleware/packages/ldp/services/container/actions/includes.ts index a97db9b0d..4798aaef6 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.ts +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -11,6 +11,7 @@ const Schema = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const containerUri = ctx.params.containerUri.replace(/\/+$/, ''); const resourceUri = ctx.params.resourceUri.replace(/\/+$/, ''); diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index 6ca047b11..74fd71c04 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -11,7 +11,9 @@ const Schema = { }, async handler(ctx) { const { containerUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const { dataset } = ctx.meta; const res = await ctx.call('triplestore.query', { diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 9021bbc62..8ac58a331 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -25,10 +25,12 @@ const Schema = { containerUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToAdd: { type: 'array', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToRemove: { type: 'array', optional: true @@ -40,6 +42,7 @@ const Schema = { }, async handler(ctx) { const { containerUri, triplesToAdd, triplesToRemove } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourcesAdded = []; const resourcesRemoved = []; @@ -67,8 +70,10 @@ const Schema = { await ctx.call('ldp.container.attach', { containerUri, resourceUri, webId }); resourcesAdded.push(resourceUri); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404 && isMirror(resourceUri, this.settings.baseUrl)) { // We need to import the remote resource + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.info(`Importing ${resourceUri}...`); try { await ctx.call('ldp.remote.store', { @@ -81,6 +86,7 @@ const Schema = { await ctx.call('ldp.container.attach', { containerUri, resourceUri, webId }); resourcesAdded.push(resourceUri); } catch (e2) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.warn(`Error while importing ${resourceUri} : ${e2.message}`); } } @@ -98,6 +104,7 @@ const Schema = { // If the mirrored resource is not attached to any container anymore, it must be deleted. const containers = await ctx.call('ldp.resource.getContainers', { resourceUri }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (containers.length === 0 && isMirror(resourceUri, this.settings.baseUrl)) { await ctx.call('ldp.remote.delete', { resourceUri }); } @@ -105,13 +112,16 @@ const Schema = { resourcesRemoved.push(resourceUri); } catch (e) { // Fail silently + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.warn(`Error when detaching ${resourceUri} from ${containerUri}: ${e.message}`); } } } + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.patched', + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. { containerUri, resourcesAdded, resourcesRemoved, dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } ); diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 9a6e53d26..f8517365a 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -15,10 +15,12 @@ const Schema = { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message resource: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message file: { type: 'object', optional: true @@ -38,6 +40,7 @@ const Schema = { }, async handler(ctx) { let { resource, containerUri, slug, contentType, file, forcedResourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let isContainer = false; let expandedResource; @@ -78,6 +81,7 @@ const Schema = { const containerExist = await ctx.call('ldp.container.exist', { containerUri }); if (!containerExist) { throw new MoleculerError( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Cannot create resource in non-existing container ${containerUri} (webId ${webId} / dataset ${ctx.meta.dataset})`, 400, 'BAD_REQUEST' @@ -148,6 +152,7 @@ const Schema = { throw e; } + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.attached', diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index bdf0d409f..c2d2d77d9 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -26,27 +26,36 @@ const LdpContainerSchema = { actions: { attach: attachAction, clear: clearAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message create: createAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message createAndAttach: createAndAttachAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message delete: deleteAction, detach: detachAction, exist: existAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message get: getAction, getAll: getAllAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceTy... Remove this comment to see the full error message getPath: getPathAction, getUris: getUrisAction, includes: includesAction, isEmpty: isEmptyAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message post: postAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message patch: patchAction }, hooks: { before: { '*'(ctx) { if ( + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message this.settings.podProvider && !ctx.meta.dataset && ctx.params.containerUri && + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'string ... Remove this comment to see the full error message ctx.params.containerUri.startsWith(this.settings.baseUrl) ) { // this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${ctx.params.containerUri}`); diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index 1150597e7..af620266f 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -10,6 +10,7 @@ const Schema = { const { uri } = ctx.params; const linkHeader = new LinkHeader(); + // @ts-expect-error TS(2488): Type 'string | number | boolean | any[] | Record b.priority - a.priority); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index c7762fd99..910372445 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -9,11 +9,14 @@ const Schema = { visibility: 'public', params: { uri: { type: 'string' }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message type: { type: 'enum', values: ['resource', 'container', 'custom'], default: 'resource' }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message mode: { type: 'enum', values: ['acl:Read', 'acl:Write', 'acl:Append', 'acl:Control'], default: 'acl:Read' }, webId: { type: 'string', optional: true } }, async handler(ctx) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.has(ctx.params, { parentCtx: ctx }))) { throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED'); } diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index 40a91804e..9cc05bdfa 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -4,19 +4,24 @@ const Schema = { visibility: 'public', params: { uri: { type: 'string' }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message type: { type: 'enum', values: ['resource', 'container', 'custom'], default: 'resource' }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message mode: { type: 'enum', values: ['acl:Read', 'acl:Write', 'acl:Append', 'acl:Control'], default: 'acl:Read' }, webId: { type: 'string', optional: true } }, async handler(ctx) { const { uri, type, mode } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // If no authorizers have been registered, assume user can access everything + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.authorizers.length === 0) return true; if (webId === 'system') return true; + // @ts-expect-error TS(2488): Type 'string | number | boolean | any[] | Record types.some((t: any) => + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. Array.isArray(container.acceptedTypes) ? container.acceptedTypes.includes(t) : container.acceptedTypes === t ) ); diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index d77b4ff6b..7f075537c 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -24,11 +24,15 @@ const Schema = { if (containerUri) { const basePath = await ctx.call('ldp.getBasePath'); const path = new URL(containerUri).pathname.replace(basePath, '/'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const registeredContainers = await this.actions.list({}, { parentCtx: ctx }); const containerOptions = + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. Object.values(registeredContainers).find(container => container.pathRegex.test(path)) || {}; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return { ...this.settings.defaultOptions, ...containerOptions }; } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return this.settings.defaultOptions; } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 952820830..a7a87091e 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -14,12 +14,14 @@ const Schema = { async handler(ctx) { const { path, webId } = ctx.params; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider) { if (webId === 'system' || webId === 'anon') throw new Error(`You must provide a real webId param in Pod provider config. Received: ${webId}`); const podUrl = await ctx.call('solid-storage.getUrl', { webId }); return urlJoin(podUrl, path); } else { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return urlJoin(this.settings.baseUrl, path); } } diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index ffc0be27b..b33e4c655 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -13,21 +13,28 @@ const Schema = { fullPath: { type: 'string', optional: true }, name: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message acceptedTypes: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, shapeTreeUri: { type: 'string', optional: true }, excludeFromMirror: { type: 'boolean', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: true; }' is not ... Remove this comment to see the full error message activateTombstones: { type: 'boolean', default: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message permissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message newResourcesPermissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message controlledActions: { type: 'object', optional: true }, readOnly: { type: 'boolean', optional: true }, typeIndex: { type: 'string', optional: true } }, async handler(ctx) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. let options = { ...this.settings.defaultOptions, ...ctx.params }; // TODO Remove this when we stop using the type for the container path if (!options.acceptedTypes && options.shapeTreeUri) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const services = await this.broker.call('$node.services'); if (!services.some((s: any) => s.name === 'shape-trees') && !services.some((s: any) => s.name === 'shacl')) throw new Error('If you use shapeTreeUri in container options, you need the shape-trees and shacl service'); @@ -37,6 +44,7 @@ const Schema = { const [shapeType] = await ctx.call('shacl.getTypes', { resourceUri: shapeUri }); options.acceptedTypes = shapeType; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. throw new Error(`Could not get type from shape ${options.shapeTreeUri}. Error: ${e.message}`); } } @@ -55,6 +63,7 @@ const Schema = { } // If the resource type is invalid, an error will be thrown here options.path = await ctx.call('ldp.container.getPath', { resourceType: options.acceptedTypes[0] }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.debug( `Automatically generated the path ${options.path} for resource type ${options.acceptedTypes[0]}` ); @@ -72,11 +81,13 @@ const Schema = { if (options.podsContainer === true) { // Skip container creation for the root PODs container (it is not a real LDP container since no dataset have these data) + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. } else if (this.settings.podProvider) { // TODO see if we can base ourselves on a general config for the POD data path options.fullPath = pathJoin('/:username([^/.][^/]+)', 'data', options.path); } else { await ctx.call('ldp.container.createAndAttach', { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. containerUri: urlJoin(this.settings.baseUrl, options.path), options }); @@ -85,6 +96,7 @@ const Schema = { options.pathRegex = pathToRegexp(options.fullPath); // Save the options + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.registeredContainers[options.name] = options; ctx.emit('ldp.registry.registered', { container: options }, { meta: { webId: null, dataset: null } }); diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 43136dbb3..bcf143f5b 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -3,6 +3,7 @@ import { ServiceSchema } from 'moleculer'; import getByTypeAction from './actions/getByType.ts'; import getByUriAction from './actions/getByUri.ts'; import getUriAction from './actions/getUri.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import listAction from './actions/list.ts'; import registerAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; @@ -17,10 +18,12 @@ const LdpRegistrySchema = { }, dependencies: ['ldp.container', 'api'], actions: { + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { type: { ty... Remove this comment to see the full error message getByType: getByTypeAction, getByUri: getByUriAction, getUri: getUriAction, list: listAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { path: { ty... Remove this comment to see the full error message register: registerAction }, async started() { @@ -39,6 +42,7 @@ const LdpRegistrySchema = { events: { 'auth.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId, accountData } = ctx.params; // We want to add user's containers only in Pod provider config if (this.settings.podProvider) { @@ -47,6 +51,7 @@ const LdpRegistrySchema = { // Go through each registered containers for (const options of Object.values(registeredContainers)) { await ctx.call('ldp.container.createAndAttach', { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. containerUri: urlJoin(storageUrl, options.path), options, webId diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index ad261b2f7..08444c9ef 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -8,25 +8,31 @@ const Schema = { }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider) { if (!webId || webId === 'system' || webId === 'anon') { throw new Error(`Cannot delete remote resource in cache without a webId (Provided: ${webId})`); } const account = await ctx.call('auth.account.findByWebId', { webId }); + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = account.username; } const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); if (!exist) throw new Error(`No document found with resource ${resourceUri} (webId: ${webId})`); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const oldData = await this.actions.getStored({ resourceUri, webId }, { parentCtx: ctx }); await ctx.call('triplestore.document.clear', { documentUri: resourceUri }); @@ -42,9 +48,11 @@ const Schema = { resourceUri, oldData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.remote.deleted', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index 5da8f9053..41d5fc9c4 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -5,69 +5,88 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message noGraph: { type: 'boolean', default: false }, webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, // Inspired from https://developer.chrome.com/docs/workbox/caching-strategies-overview/#caching-strategies strategy: { type: 'enum', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message values: ['cacheFirst', 'networkFirst', 'cacheOnly', 'networkOnly', 'staleWhileRevalidate'], default: 'cacheFirst' } }, async handler(ctx) { const { resourceUri, jsonContext, ...rest } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // Without webId, we have no way to know which dataset to look in, so get from network const strategy = + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.settings.podProvider && (!webId || webId === 'anon' || webId === 'system') ? 'networkOnly' : ctx.params.strategy; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } switch (strategy) { case 'cacheFirst': - return this.actions - .getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }) - .catch((e: any) => { - if (e.code === 404) { - return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { - parentCtx: ctx - }); - } else { - throw e; - } - }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + return ( + this.actions + // @ts-expect-error TS(2339): Property 'getStored' does not exist on type 'strin... Remove this comment to see the full error message + .getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }) + .catch((e: any) => { + if (e.code === 404) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { + parentCtx: ctx + }); + } else { + throw e; + } + }) + ); case 'networkFirst': - return this.actions - .getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }) - .catch((e: any) => { - if (e.code === 404) { - return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { - parentCtx: ctx - }); - } else { - throw e; - } - }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + return ( + this.actions + // @ts-expect-error TS(2339): Property 'getNetwork' does not exist on type 'stri... Remove this comment to see the full error message + .getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }) + .catch((e: any) => { + if (e.code === 404) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { + parentCtx: ctx + }); + } else { + throw e; + } + }) + ); case 'cacheOnly': + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }); case 'networkOnly': + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }); case 'staleWhileRevalidate': diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index c53c02ca4..32abd98d4 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -10,6 +10,7 @@ const Schema = { resourceUri: { type: 'string' }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, @@ -17,12 +18,15 @@ const Schema = { }, async handler(ctx) { const { resourceUri, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const headers = new fetch.Headers({ accept: MIME_TYPES.JSON }); if (jsonContext) headers.set('JsonLdContext', JSON.stringify(jsonContext)); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } @@ -31,7 +35,9 @@ const Schema = { webId && webId !== 'system' && webId !== 'anon' && + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. webId.startsWith(this.settings.baseUrl) && + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message (await this.proxyAvailable()) ) { const response = await ctx.call('signature.proxy.query', { diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 57f091b7e..32c429641 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -9,6 +9,7 @@ const Schema = { resourceUri: { type: 'string' }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, @@ -16,11 +17,13 @@ const Schema = { }, async handler(ctx) { const { resourceUri, jsonContext, noGraph } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); if (!exist) + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); const result = await ctx.call('triplestore.query', { diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index c84d69df0..156baed68 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -9,15 +9,19 @@ const Schema = { }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!urlJoin(resourceUri, '/').startsWith(this.settings.baseUrl)) { // The resource is on another server return true; } else { // If the resource is on the same Pod provider, it may be on a different Pod + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider) { // For special URLs starting with a dot (such as /.well-known), don't check datasets + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '/.'))) return false; if (!dataset) @@ -25,6 +29,7 @@ const Schema = { `Unable to know if ${resourceUri} is remote. In Pod provider config, the dataset must be provided` ); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return !urlJoin(resourceUri, '/').startsWith(`${urlJoin(this.settings.baseUrl, dataset)}/`); } else { return false; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index 281b59b45..1823c056b 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ActionSchema } from 'moleculer'; import { hasType } from '../../../utils.ts'; @@ -6,7 +7,9 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message resource: { type: 'object', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message keepInSync: { type: 'boolean', default: false }, webId: { type: 'string', optional: true }, dataset: { type: 'string', optional: true } @@ -19,6 +22,7 @@ const Schema = { } if (!resource) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. resource = await this.actions.getNetwork({ resourceUri, webId }, { parentCtx: ctx }); } @@ -31,6 +35,7 @@ const Schema = { resourceUri = resource.id || resource['@id']; } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.isRemote({ resourceUri, dataset }, { parentCtx: ctx }))) { throw new Error( `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${dataset}))` @@ -45,6 +50,7 @@ const Schema = { }; } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!dataset && this.settings.podProvider) { if (!webId) { throw new Error(`In Pod provider config, a webId or dataset param must be provided to ldp.remote.store`); @@ -73,6 +79,7 @@ const Schema = { dataset }); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.remote.stored', diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index e36e9c692..93d5a0c11 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import Schedule from 'moleculer-schedule'; import { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; @@ -17,10 +18,14 @@ const LdpRemoteSchema = { dependencies: ['triplestore', 'jsonld'], actions: { delete: deleteAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message get: getAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message getNetwork: getNetworkAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message getStored: getStoredAction, isRemote: isRemoteAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message store: storeAction, runCron: { @@ -55,6 +60,7 @@ const LdpRemoteSchema = { keepInSync: true }); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 403 || e.code === 404 || e.code === 401) { await this.actions.delete({ resourceUri }); } else { diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index c1362915b..0776cbbc8 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -6,6 +6,7 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message predicates: { type: 'array', optional: true }, delayMs: { type: 'number', optional: true }, maxTries: { type: 'number', optional: true }, @@ -14,6 +15,7 @@ const Schema = { webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 8b0ac5440..d4346904d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -6,6 +6,7 @@ const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, resourceUri: { type: 'string' }, webId: { @@ -19,6 +20,7 @@ const Schema = { }, async handler(ctx) { let { resource, resourceUri, contentType } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (contentType && contentType !== MIME_TYPES.JSON) @@ -66,9 +68,11 @@ const Schema = { resourceUri, newData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.created', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 02b334aa3..9130ce9cc 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -4,11 +4,13 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', webId: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { @@ -55,11 +57,13 @@ const Schema = { containersUris, oldData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; ctx.call('triplestore.deleteOrphanBlankNodes'); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.deleted', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index c6c55bffb..56d14a7dd 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -4,17 +4,20 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: true; }' is not ... Remove this comment to see the full error message acceptTombstones: { type: 'boolean', default: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri, acceptTombstones } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); // If resource exists but we don't want tombstones, check the resource type if (exist && !acceptTombstones) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const types = await this.actions.getTypes({ resourceUri }, { parentCtx: ctx }); if (types.includes('https://www.w3.org/ns/activitystreams#Tombstone')) return false; } diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index efd0156d8..124f01f60 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -1,4 +1,6 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'spea... Remove this comment to see the full error message import createSlug from 'speakingurl'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; @@ -6,8 +8,10 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message containerUri: 'string', slug: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message isContainer: { type: 'boolean', default: false } }, async handler(ctx) { @@ -22,11 +26,15 @@ const Schema = { } // Do not use the root container URI if the resource is a container + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if ((!this.settings.resourcesWithContainerPath || !containerUri) && !isContainer) { // Use the root container URI + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. containerUri = this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) - : this.settings.baseUrl; + ? // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) + : // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + this.settings.baseUrl; } let resourceAlreadyExists = await ctx.call('ldp.resource.exist', { diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index 1580e9d7c..450738848 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -10,14 +10,17 @@ const Schema = { resourceUri: { type: 'string' }, webId: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message noGraph: { type: 'boolean', default: false }, jsonContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { + // @ts-expect-error TS(2322): Type '(ctx: Context, Gener... Remove this comment to see the full error message async enabled(ctx) { // Do not cache remote resources as we have no mechanism to clear this cache const isRemote = await ctx.call('ldp.remote.isRemote', { resourceUri: ctx.params.resourceUri }); @@ -27,6 +30,7 @@ const Schema = { }, async handler(ctx) { const { resourceUri, accept, noGraph, jsonContext } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (accept && accept !== MIME_TYPES.JSON) @@ -64,6 +68,7 @@ const Schema = { node => node['@id'].startsWith('_:b') || node['@id'] === resourceUri ); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message if (graphWithBlankNodesOnly || noGraph) frame['@id'] = resourceUri; // Frame the result using the correct context in order to have clean, consistent results diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index 8c1f9f87c..02e9c7351 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -4,17 +4,20 @@ import { getContainerFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', dataset: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; // In the POD provider config, the root container with actors is not a real LDP container // Because we have chosen not to use a common dataset for this kind of data // So we use the deprecated getContainerFromUri to find the container // TODO store actors in a proper LDP container, with its own dataset ? + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider && `${getContainerFromUri(resourceUri)}/` === this.settings.baseUrl) { return [getContainerFromUri(resourceUri)]; } diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 41c9a54f5..9cdf9b836 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -3,6 +3,7 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string' }, cache: { diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index fbf42e402..1f7487e13 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -25,10 +25,12 @@ const Schema = { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToAdd: { type: 'array', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToRemove: { type: 'array', optional: true @@ -44,6 +46,7 @@ const Schema = { }, async handler(ctx) { let { resourceUri, triplesToAdd, triplesToRemove, skipInferenceCheck, webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; if (await ctx.call('ldp.remote.isRemote', { resourceUri })) @@ -70,6 +73,7 @@ const Schema = { if (triplesToRemove) { checkTriplesSubjectIsResource(triplesToRemove, resourceUri); + // @ts-expect-error TS(2345): Argument of type '{ updateType: string; delete: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'delete', delete: [{ type: 'graph', triples: triplesToRemove, name: namedNode(resourceUri) }] @@ -78,6 +82,7 @@ const Schema = { if (triplesToAdd) { checkTriplesSubjectIsResource(triplesToAdd, resourceUri); + // @ts-expect-error TS(2345): Argument of type '{ updateType: string; insert: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'insert', insert: [{ type: 'graph', triples: triplesToAdd, name: namedNode(resourceUri) }] @@ -95,9 +100,11 @@ const Schema = { triplesRemoved: triplesToRemove, skipInferenceCheck, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.patched', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 6c1a87c27..3296ae824 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -7,6 +7,7 @@ const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, @@ -22,6 +23,7 @@ const Schema = { async handler(ctx) { let { resource, contentType } = ctx.params; let { webId } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; let newData; @@ -35,6 +37,7 @@ const Schema = { if (await ctx.call('ldp.remote.isRemote', { resourceUri })) throw new MoleculerError( + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Remote resource ${resourceUri} cannot be modified (dataset: ${ctx.meta.dataset})`, 403, 'FORBIDDEN' @@ -68,21 +71,28 @@ const Schema = { // Filter out triples whose subject is not the resource itself // We don't want to update or delete resources with IDs + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message oldTriples = this.filterOtherNamedNodes(oldTriples, resourceUri); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); // blank nodes are convert to variable for sparql query (?variable) + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message oldTriples = this.convertBlankNodesToVars(oldTriples); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message newTriples = this.convertBlankNodesToVars(newTriples); // same values blackNodes removing because those duplicated values blank nodes cause indiscriminate blank resultings in bug wahen trying to delete both + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message newTriples = this.removeDuplicatedVariables(newTriples); // Triples to add are reversed, so that blank nodes are linked to resource before being assigned data properties // Triples to remove are not reversed, because we want to remove the data properties before unlinking it from the resource // This is needed, otherwise we have permissions violations with the WebACL (orphan blank nodes cannot be edited, except as "system") + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message const triplesToAdd = this.getTriplesDifference(newTriples, oldTriples).reverse(); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const triplesToRemove = this.getTriplesDifference(oldTriples, newTriples); if (triplesToAdd.length === 0 && triplesToRemove.length === 0) { @@ -97,6 +107,7 @@ const Schema = { } // Keep track of blank nodes to use in WHERE clause + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message const newBlankNodes = this.getTriplesDifference(newTriples, oldTriples).filter( (triple: any) => triple.object.termType === 'Variable' ); @@ -106,10 +117,14 @@ const Schema = { // Generate the query let query = `WITH <${resourceUri}>\n`; + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (triplesToRemove.length > 0) query += `DELETE { ${this.triplesToString(triplesToRemove)} } `; + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; query += 'WHERE { '; + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (existingBlankNodes.length > 0) query += this.triplesToString(existingBlankNodes); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (newBlankNodes.length > 0) query += this.bindNewBlankNodes(newBlankNodes); query += ` }`; @@ -133,6 +148,7 @@ const Schema = { } ); + // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.resource.updated', @@ -141,6 +157,7 @@ const Schema = { oldData, newData, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }, { diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index abfe047b9..a4d3e4cb1 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -8,7 +8,9 @@ const { MoleculerError } = require('moleculer').Errors; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message file: 'object' }, async handler(ctx) { @@ -24,8 +26,10 @@ const Schema = { } try { + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message await this.streamToFile(file.readableStream, localPath, this.settings.binary.maxSize); } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 413) { throw e; // File too large } else { diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index 2e5e287dc..6c534bcb9 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -10,6 +10,7 @@ import generateIdAction from './actions/generateId.ts'; import getContainersAction from './actions/getContainers.ts'; import getTypesAction from './actions/getTypes.ts'; import uploadAction from './actions/upload.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import methods from './methods.ts'; import { getDatasetFromUri } from '../../utils.ts'; @@ -26,25 +27,37 @@ const LdpResourceSchema = { }, dependencies: ['triplestore', 'jsonld'], actions: { + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message awaitCreateComplete: awaitCreateCompleteAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resource: ... Remove this comment to see the full error message create: createAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message delete: deleteAction, exist: existAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message generateId: generateIdAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message get: getAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message getContainers: getContainersAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message getTypes: getTypesAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message patch: patchAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resource: ... Remove this comment to see the full error message put: putAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message upload: uploadAction }, hooks: { before: { '*'(ctx) { + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message if (this.settings.podProvider && !ctx.meta.dataset) { // If we have a pod provider, guess the dataset from the URI const uri = ctx.params.resourceUri || (ctx.params.resource && (ctx.params.resource.id || ctx.params.resource['@id'])); + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'string ... Remove this comment to see the full error message if (uri && uri.startsWith(this.settings.baseUrl)) { ctx.meta.dataset = getDatasetFromUri(uri); } diff --git a/src/middleware/packages/ldp/services/resource/methods.ts b/src/middleware/packages/ldp/services/resource/methods.ts index 84682617a..998f52aba 100644 --- a/src/middleware/packages/ldp/services/resource/methods.ts +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -1,4 +1,5 @@ import fs from 'fs'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'byte... Remove this comment to see the full error message import bytes from 'bytes'; import { variable } from '@rdfjs/data-model'; @@ -76,9 +77,11 @@ module.exports = { for (const blankVariable of blankVariables) { if (blankVariable.object.termType === 'Variable') { const jsonVariable = this.buildJsonVariable(blankVariable.object.value, triples); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message json[blankVariable.predicate.value] = jsonVariable.json; allIdentifiers = allIdentifiers.concat(jsonVariable.allIdentifiers); } else { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message json[blankVariable.predicate.value] = blankVariable.object.value; } } @@ -105,6 +108,7 @@ module.exports = { const keepVariables: any = []; const duplicatedVariables = []; for (var rootJson of rootsJson) { + // @ts-expect-error TS(7006): Parameter 'kp' implicitly has an 'any' type. if (keepVariables.find(kp => kp.stringified.localeCompare(rootJson.stringified) === 0)) { duplicatedVariables.push(rootJson); } else { diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index 3a4c8371b..f0b503122 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -1,4 +1,5 @@ import { negotiateTypeMime, MIME_TYPES } from '@semapps/mime-types'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'busb... Remove this comment to see the full error message import Busboy from 'busboy'; import streams from 'memory-streams'; @@ -115,6 +116,7 @@ const parseFile = (req: any, res: any, next: any) => { const busboy = new Busboy({ headers: req.$ctx.meta.headers }); const files: any = []; busboy.on('file', (fieldname: any, file: any, filename: any, encoding: any, mimetype: any) => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. const readableStream = new streams.ReadableStream(); file.on('data', (data: any) => readableStream.push(data)); files.push({ diff --git a/src/middleware/packages/mime-types/index.ts b/src/middleware/packages/mime-types/index.ts index 87a265d38..f544329dd 100644 --- a/src/middleware/packages/mime-types/index.ts +++ b/src/middleware/packages/mime-types/index.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'nego... Remove this comment to see the full error message import Negotiator from 'negotiator'; import { MIME_TYPES, TYPES_REPO } from './constants.ts'; diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index c6b79da1f..fbbf373e9 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; import cronParser from 'cron-parser'; import { TripleStoreAdapter } from '@semapps/triplestore'; @@ -23,6 +24,7 @@ const DigestNotificationsService = { }, dependencies: ['digest.subscription'], created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "digest.subscr... Remove this comment to see the full error message this.broker.createService({ mixins: [DigestSubscriptionService], adapter: new TripleStoreAdapter({ type: 'DigestSubscription', dataset: this.settings.subscriptionsDataset }) @@ -78,11 +80,14 @@ const DigestNotificationsService = { if (notification && (await this.filterNotification(notification, subscription, notifications))) { notifications.push(notification); if (notification.category) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message if (!notificationsByCategories[notification.category]) + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message notificationsByCategories[notification.category] = { category: notification.category, notifications: [] }; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message notificationsByCategories[notification.category].notifications.push(notification); } } @@ -120,6 +125,7 @@ const DigestNotificationsService = { } } catch (e) { failures.push({ + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. error: e.message, subscription }); @@ -142,6 +148,7 @@ const DigestNotificationsService = { { name: '*', process(job: any) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ name:... Remove this comment to see the full error message return this.actions.build({ frequency: job.name, timestamp: job.opts.prevMillis }); } } diff --git a/src/middleware/packages/notifications/services/expo-push/service.ts b/src/middleware/packages/notifications/services/expo-push/service.ts index 8306fa9ae..0a6c7b047 100644 --- a/src/middleware/packages/notifications/services/expo-push/service.ts +++ b/src/middleware/packages/notifications/services/expo-push/service.ts @@ -14,6 +14,7 @@ const ExpoPushService = { }, dependencies: ['api'], created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "expo-push.dev... Remove this comment to see the full error message this.broker.createService({ mixins: [ExpoPushDeviceService], settings: { @@ -21,6 +22,7 @@ const ExpoPushService = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "expo-push.not... Remove this comment to see the full error message this.broker.createService({ mixins: [ExpoPushNotificationService] }); }, async started() { diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 661d029df..0992b05d8 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; import path from 'path'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; import { getSlugFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; @@ -24,6 +25,7 @@ const SingleMailNotificationsService = { events: { 'activitypub.inbox.received': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message const { activity, recipients } = ctx.params; if (this.settings.delay) { @@ -34,7 +36,9 @@ const SingleMailNotificationsService = { const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); if (account) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = recipientUri; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = this.settings.podProvider ? getSlugFromUri(recipientUri) : undefined; const locale = account?.preferredLocale || this.settings.defaultLocale; @@ -88,8 +92,10 @@ const SingleMailNotificationsService = { queues: { sendMail: { name: '*', + // @ts-expect-error TS(7023): 'process' implicitly has return type 'any' because... Remove this comment to see the full error message async process(job: any) { job.progress(0); + // @ts-expect-error TS(7022): 'result' implicitly has type 'any' because it does... Remove this comment to see the full error message const result = await this.actions.send(job.data); job.progress(100); return result; diff --git a/src/middleware/packages/ontologies/actions/findNamespace.ts b/src/middleware/packages/ontologies/actions/findNamespace.ts index 065b14c29..28ac3dc7b 100644 --- a/src/middleware/packages/ontologies/actions/findNamespace.ts +++ b/src/middleware/packages/ontologies/actions/findNamespace.ts @@ -4,6 +4,7 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message prefix: 'string' }, async handler(ctx) { diff --git a/src/middleware/packages/ontologies/actions/findPrefix.ts b/src/middleware/packages/ontologies/actions/findPrefix.ts index c540541a3..02fabf72c 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.ts +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -5,6 +5,7 @@ import { isURL } from '../utils.ts'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message uri: 'string' }, async handler(ctx) { diff --git a/src/middleware/packages/ontologies/actions/get.ts b/src/middleware/packages/ontologies/actions/get.ts index b94610ad9..52da3d741 100644 --- a/src/middleware/packages/ontologies/actions/get.ts +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -13,10 +13,13 @@ const Schema = { let ontology; if (prefix) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. ontology = this.ontologies[prefix] || false; } else if (namespace) { + // @ts-expect-error TS(2769): No overload matches this call. ontology = Object.values(this.ontologies).find(o => o.namespace === namespace); } else if (uri) { + // @ts-expect-error TS(2769): No overload matches this call. ontology = Object.values(this.ontologies).find(o => uri.startsWith(o.namespace)); } else { throw new Error('You must provide a prefix, namespace or uri parameter'); diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index 831e97d8b..f1f0dd225 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -4,6 +4,7 @@ const Schema = { visibility: 'public', cache: true, async handler(ctx) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const ontologies = await this.actions.list({}, { parentCtx: ctx }); return Object.fromEntries( ontologies diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index 10a136889..6f9f9cd28 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -4,6 +4,7 @@ const Schema = { visibility: 'public', cache: true, async handler(ctx) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const ontologies = await this.actions.list({}, { parentCtx: ctx }); return ontologies .sort((a: any, b: any) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index 0933b9d65..47035764f 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -4,6 +4,7 @@ const Schema = { visibility: 'public', cache: true, handler() { + // @ts-expect-error TS(2769): No overload matches this call. return Object.values(this.ontologies); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 6f21cbcbd..52c04a1b9 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -6,6 +6,7 @@ const regexPrefix = /^([^:]+):([^:]+)$/gm; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message value: 'string' }, cache: true, @@ -18,8 +19,10 @@ const Schema = { if (!value.match(regexPrefix)) throw new Error(`The provided value ${value} is neither prefixed, nor a full URI`); const matchResults = regexPrefix.exec(value); + // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. const prefix = matchResults[1]; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const ontology = await this.actions.get({ prefix }); if (!ontology) throw new Error(`No ontology found with prefix ${prefix}`); diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index 33f9bb6c6..7444cde62 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -4,15 +4,20 @@ import { isURL, arrayOf } from '../utils.ts'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message prefix: 'string', + // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message namespace: 'string', owl: { type: 'string', optional: true }, jsonldContext: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message preserveContextUri: { type: 'boolean', default: false }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message persist: { type: 'boolean', default: false } }, async handler(ctx) { @@ -27,6 +32,7 @@ const Schema = { } if (persist) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!this.settings.persistRegistry) throw new Error(`Cannot persist ontology because the persistRegistry setting is false`); if (owl || jsonldContext) throw new Error(`The owl and jsonldContext params cannot be persisted`); @@ -36,11 +42,13 @@ const Schema = { namespace }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.ontologies[prefix] = { prefix, namespace }; } else { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.ontologies[prefix] = { prefix, namespace, @@ -50,8 +58,11 @@ const Schema = { }; } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.broker.cacher) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.broker.cacher.clean('ontologies.**'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.broker.cacher.clean('jsonld.context.**'); } diff --git a/src/middleware/packages/ontologies/index.ts b/src/middleware/packages/ontologies/index.ts index 12036374b..de903b5e2 100644 --- a/src/middleware/packages/ontologies/index.ts +++ b/src/middleware/packages/ontologies/index.ts @@ -1,10 +1,16 @@ import OntologiesService from './service.ts'; import OntologiesRegistryService from './sub-services/registry.ts'; +// @ts-expect-error TS(2307): Cannot find module './ontologies/core.ts' or its c... Remove this comment to see the full error message export * from './ontologies/core.ts'; +// @ts-expect-error TS(2307): Cannot find module './ontologies/solid.ts' or its ... Remove this comment to see the full error message export * from './ontologies/solid.ts'; +// @ts-expect-error TS(2307): Cannot find module './ontologies/custom.ts' or its... Remove this comment to see the full error message export * from './ontologies/custom.ts'; export { OntologiesService, OntologiesRegistryService }; +// @ts-expect-error TS(7022): 'coreOntologies' implicitly has type 'any' because... Remove this comment to see the full error message export const coreOntologies = Object.values(coreOntologies); +// @ts-expect-error TS(7022): 'solidOntologies' implicitly has type 'any' becaus... Remove this comment to see the full error message export const solidOntologies = Object.values(solidOntologies); +// @ts-expect-error TS(7022): 'customOntologies' implicitly has type 'any' becau... Remove this comment to see the full error message export const customOntologies = Object.values(customOntologies); diff --git a/src/middleware/packages/ontologies/ontologies/core/index.ts b/src/middleware/packages/ontologies/ontologies/core/index.ts index 7e35e7a4f..e6397fd47 100644 --- a/src/middleware/packages/ontologies/ontologies/core/index.ts +++ b/src/middleware/packages/ontologies/ontologies/core/index.ts @@ -11,6 +11,8 @@ import sec from './sec.json' with { type: 'json' }; import semapps from './semapps.json' with { type: 'json' }; import skos from './skos.json' with { type: 'json' }; import vcard from './vcard.json' with { type: 'json' }; +// @ts-expect-error TS(1141): String literal expected. import void from './void.json' with { type: 'json' }; import xsd from './xsd.json' with { type: 'json' }; +// @ts-expect-error TS(2304): Cannot find name 'void'. export { acl, as, cred, dc, did, foaf, ldp, rdf, rdfs, sec, semapps, skos, vcard, void, xsd }; diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index d0521099a..2548f6692 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -20,6 +20,7 @@ const OntologiesSchema = { async created() { const { persistRegistry, settingsDataset } = this.settings; if (persistRegistry) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ontologies.re... Remove this comment to see the full error message this.broker.createService({ mixins: [OntologiesRegistryService], adapter: new TripleStoreAdapter({ type: 'Ontology', dataset: settingsDataset }) @@ -31,13 +32,17 @@ const OntologiesSchema = { await this.registerAll(); }, actions: { + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { uri: strin... Remove this comment to see the full error message findPrefix: findPrefixAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { prefix: st... Remove this comment to see the full error message findNamespace: findNamespaceAction, get: getAction, getPrefixes: getPrefixesAction, getRdfPrefixes: getRdfPrefixesAction, list: listAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { value: str... Remove this comment to see the full error message prefixToUri: prefixToUriAction, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { prefix: st... Remove this comment to see the full error message register: registerAction }, methods: { diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index baab5dff6..130711ea9 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -1,8 +1,10 @@ import urlJoin from 'url-join'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { SpecialEndpointMixin, ControlledContainerMixin, getDatasetFromUri, arrayOf } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; import { namedNode } from '@rdfjs/data-model'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; import { ServiceSchema } from 'moleculer'; @@ -80,6 +82,7 @@ const Schema = { const type = ctx.params.type || ctx.params['@type']; const topic = ctx.params.topic || ctx.params['notify:topic']; const sendToParam = ctx.params.sendTo || ctx.params['notify:sendTo']; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { webId } = ctx.meta; // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... @@ -103,6 +106,7 @@ const Schema = { if (!rights.read) throw new E.ForbiddenError('You need acl:Read rights on the resource'); // Find container URI from topic (must be stored on same Pod) + // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const topicWebId = urlJoin(this.settings.baseUrl, getDatasetFromUri(topic)); const channelContainerUri = await this.actions.getContainerUri({ webId: topicWebId }, { parentCtx: ctx }); @@ -137,6 +141,7 @@ const Schema = { this.channels.push(channel); this.onChannelCreated(channel); + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = 'application/ld+json'; return this.actions.get( { @@ -163,6 +168,7 @@ const Schema = { events: { 'ldp.resource.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); } @@ -170,6 +176,7 @@ const Schema = { 'ldp.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); } @@ -177,6 +184,7 @@ const Schema = { 'ldp.resource.patched': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); } @@ -184,6 +192,7 @@ const Schema = { 'ldp.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); } @@ -191,6 +200,7 @@ const Schema = { 'ldp.container.attached': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); } @@ -198,6 +208,7 @@ const Schema = { 'ldp.container.detached': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); } @@ -205,6 +216,7 @@ const Schema = { 'activitypub.collection.added': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message const { collectionUri, itemUri, item } = ctx.params; // Mastodon sometimes send unfetchable activities (like `Accept` activities) // In this case, we receive the activity as `item` and `itemUri` is undefined @@ -215,6 +227,7 @@ const Schema = { 'activitypub.collection.removed': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message const { collectionUri, itemUri } = ctx.params; this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); } @@ -222,6 +235,7 @@ const Schema = { }, methods: { async getModified(resourceUri) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message return await this.broker.call('ldp.resource.get', { resourceUri, webId: 'system' })?.['dc:modified']; }, getMatchingChannels(topic) { @@ -233,6 +247,7 @@ const Schema = { // Check if rate is exceeded. .filter((c: any) => { if (!(c.lastTriggered && c.rate)) return true; + // @ts-expect-error TS(2362): The left-hand side of an arithmetic operation must... Remove this comment to see the full error message return moment.duration(c.rate).asMilliseconds() < now - c.lastTriggered; }); @@ -303,6 +318,7 @@ const Schema = { }); } } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.error(`Could not load notifications channels of ${webId}. Error: ${e.message}`); } } @@ -331,8 +347,11 @@ const Schema = { after: { delete(ctx, res) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'find' does not exist on type 'string | A... Remove this comment to see the full error message const channel = this.channels.find((c: any) => c.id === resourceUri); + // @ts-expect-error TS(2339): Property 'filter' does not exist on type 'string |... Remove this comment to see the full error message this.channels = this.channels.filter((c: any) => c.id !== resourceUri); + // @ts-expect-error TS(2349): This expression is not callable. this.onChannelDeleted(channel); return res; } diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index f73fa2761..580d13810 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -77,6 +77,7 @@ const WebhookChannel2023Service = { }); if (response.status >= 400) { + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ name:... Remove this comment to see the full error message await this.actions.delete({ resourceUri: channel.id, webId: channel.webId }); throw new Error( `Webhook ${channel.sendTo} returned a ${response.status} error (${response.statusText}). It has been deleted.` @@ -88,11 +89,13 @@ const WebhookChannel2023Service = { return { ok: response.ok, status: response.status, statusText: response.statusText }; } catch (e) { if (job.attemptsMade + 1 >= job.opts.attempts) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ name: ... Remove this comment to see the full error message this.logger.warn(`Webhook ${channel.sendTo} failed ${job.opts.attempts} times, deleting it...`); // DO NOT DELETE YET TO IMPROVE MONITORING // await this.actions.delete({ resourceUri: channel.id, webId: channel.webId }); } + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. throw new Error(`Posting to webhook ${channel.sendTo} failed. Error: ${e.message}`); } } diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index 8308a594a..101ae1c25 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -1,4 +1,5 @@ import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; import { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 6eff26b57..03895a241 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -2,9 +2,11 @@ import path from 'path'; import urlJoin from 'url-join'; import fetch from 'node-fetch'; import LinkHeader from 'http-link-header'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import DbService from 'moleculer-db'; import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { notify } from '@semapps/ontologies'; import { TripleStoreAdapter } from '@semapps/triplestore'; import { ServiceSchema } from 'moleculer'; @@ -74,6 +76,7 @@ const SolidNotificationsListenerSchema = { // If the channel still exist, registration is not needed return existingListener; } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404) { this.logger.warn( `Channel ${existingListener.channelUri} doesn't exist anymore. Registering a new channel...` @@ -163,6 +166,7 @@ const SolidNotificationsListenerSchema = { } catch (e) { // Ignore errors that the actions may generate (otherwise 404 errors will be considered as non-existing webhooks) } + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 200; } else { throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); @@ -182,6 +186,7 @@ const SolidNotificationsListenerSchema = { try { const response = await fetch(resourceUri, { method: 'HEAD' }); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const linkHeader = LinkHeader.parse(response.headers.get('Link')); const storageDescriptionLinkHeader = linkHeader.rel('http://www.w3.org/ns/solid/terms#storageDescription'); solidEndpointUrl = storageDescriptionLinkHeader[0].uri; diff --git a/src/middleware/packages/solid/services/notifications/provider.ts b/src/middleware/packages/solid/services/notifications/provider.ts index ceeab40c1..228ae18da 100644 --- a/src/middleware/packages/solid/services/notifications/provider.ts +++ b/src/middleware/packages/solid/services/notifications/provider.ts @@ -1,4 +1,6 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { notify } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import WebhookChannelService from './channels/webhook-channel.ts'; diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index 3370bb06d..360f82cef 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -1,4 +1,5 @@ import { SingleResourceContainerMixin } from '@semapps/ldp'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { pim } from '@semapps/ontologies'; import { namedNode, triple } from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 01a7f3134..50ba18874 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; import { triple, namedNode } from '@rdfjs/data-model'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { pim } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; @@ -36,6 +37,7 @@ const SolidStorageSchema = { secure: false // TODO Remove when we switch to Fuseki 5 }); + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = username; // Create the storage root container so that the LdpRegistryService can create the default containers @@ -57,6 +59,7 @@ const SolidStorageSchema = { events: { 'auth.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; const storageUrl = await this.actions.getUrl({ webId }, { parentCtx: ctx }); diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 072974ae5..c6e484858 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -1,4 +1,5 @@ import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@semapps/ldp'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { solid, skos, apods } from '@semapps/ontologies'; import { MIME_TYPES } from '@semapps/mime-types'; import { namedNode, triple } from '@rdfjs/data-model'; @@ -20,6 +21,7 @@ const TypeIndexesSchema = { dependencies: ['ontologies'], created() { this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "type-registrations"; mixins: { sett... Remove this comment to see the full error message mixins: [TypeRegistrationsService] }); }, @@ -145,6 +147,7 @@ const TypeIndexesSchema = { : await this.actions.getPublicIndex({ webId }); } catch (e) { // Ignore 404 errors + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code !== 404) throw e; } } while (!indexUri || attempts > 30); @@ -166,6 +169,7 @@ const TypeIndexesSchema = { const { webId } = ctx.params; const containers = await ctx.call('ldp.registry.list'); + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. const numContainersWithTypeIndex = Object.values(containers).filter(container => container.typeIndex).length; let numTypeRegistrations; @@ -192,6 +196,7 @@ const TypeIndexesSchema = { events: { 'auth.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; // Wait until the /solid/type-index container has been created for the user diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index ddba26873..416abe0a3 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -17,9 +17,11 @@ const TypeRegistrationsSchema = { register: { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message types: { type: 'array' }, containerUri: { type: 'string' }, webId: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message isPrivate: { type: 'boolean', default: false } }, async handler(ctx) { @@ -264,13 +266,17 @@ const TypeRegistrationsSchema = { const podUrl = await ctx.call('solid-storage.getUrl', { webId }); for (const options of Object.values(registeredContainers)) { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. if (options.typeIndex) { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. const containerUri = urlJoin(podUrl, options.path); await this.actions.register( { + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. types: arrayOf(options.acceptedTypes), containerUri, webId, + // @ts-expect-error TS(18046): 'options' is of type 'unknown'. isPrivate: options.typeIndex === 'private' }, { parentCtx: ctx } @@ -283,6 +289,7 @@ const TypeRegistrationsSchema = { events: { 'ldp.container.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, options, webId } = ctx.params; if (options?.typeIndex) { diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 813230b5d..50fadee16 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -25,13 +25,16 @@ const SparqlEndpointService = { actions: { query: { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. const query = ctx.params.query || ctx.meta.rawBody; + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; if (this.settings.podProvider) { const [account] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); if (!account) throw new Error(`No account found with username ${ctx.params.username}`); + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { throw new Error(`You can only query your own SPARQL endpoint`); } @@ -42,10 +45,13 @@ const SparqlEndpointService = { accept, dataset: this.settings.podProvider ? ctx.params.username : undefined, // In Pod provider config, query as system when the Pod owner is querying his own data + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId: this.settings.ignoreAcl ? 'system' : ctx.meta.webId }); + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message if (ctx.meta.$responseType === undefined) { + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = ctx.meta.responseType || accept; } @@ -56,6 +62,7 @@ const SparqlEndpointService = { events: { 'auth.registered': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; if (this.settings.podProvider) { await ctx.call('activitypub.actor.addEndpoint', { diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index bff1f8ea3..13a908189 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -10,6 +10,7 @@ const handledWacActions = [ ]; const ObjectsWatcherMiddleware = (config = {}) => { + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type '{}'. const { baseUrl, podProvider = false, postWithoutRecipients = false, transientActivities = false } = config; let relayActor: any; let excludedContainersPathRegex: any = []; @@ -63,6 +64,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { const isExcluded = (containersUris: any) => { return containersUris.some((uri: any) => + // @ts-expect-error TS(7006): Parameter 'pathRegex' implicitly has an 'any' type... Remove this comment to see the full error message excludedContainersPathRegex.some(pathRegex => pathRegex.test(new URL(uri).pathname)) ); }; @@ -95,7 +97,9 @@ const ObjectsWatcherMiddleware = (config = {}) => { const containers = await broker.call('ldp.registry.list'); for (const container of Object.values(containers)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. if (container.excludeFromMirror === true && !excludedContainersPathRegex.includes(container.pathRegex)) { + // @ts-expect-error TS(18046): 'container' is of type 'unknown'. excludedContainersPathRegex.push(container.pathRegex); } } @@ -287,6 +291,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { if (actionReturnValue.isContainer && actionReturnValue.addDefaultPublicRead) { const subUris = await ctx.call('ldp.container.getUris', { containerUri: ctx.params.resourceUri }); // TODO check that sub-resources did not already have public read rights individually (must be done before) + // @ts-expect-error TS(2554): Expected 4 arguments, but got 3. outboxPost(ctx, ctx.params.resourceUri, { type: ACTIVITY_TYPES.CREATE, object: subUris, @@ -297,6 +302,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { if (actionReturnValue.isContainer && actionReturnValue.removeDefaultPublicRead) { const subUris = await ctx.call('ldp.container.getUris', { containerUri: ctx.params.resourceUri }); // TODO check that sub-resources did not already have public read rights individually (must be done before) + // @ts-expect-error TS(2554): Expected 4 arguments, but got 3. outboxPost(ctx, ctx.params.resourceUri, { type: ACTIVITY_TYPES.DELETE, object: subUris, diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index a0d81e1e6..a3a582319 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -11,6 +11,7 @@ const AggregatorSchema = { }, dependencies: ['activitypub.relay'], created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "synchronizer"... Remove this comment to see the full error message this.broker.createService({ mixins: [SynchronizerService], settings: { @@ -32,11 +33,15 @@ const AggregatorSchema = { type: ACTIVITY_TYPES.FOLLOW } }, + // @ts-expect-error TS(7023): 'onReceive' implicitly has return type 'any' becau... Remove this comment to see the full error message async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.acceptFollowOffers && recipientUri === this.relayActor.id) { return await ctx.call('activitypub.outbox.post', { + // @ts-expect-error TS(2339): Property 'relayActor' does not exist on type '{ ma... Remove this comment to see the full error message collectionUri: this.relayActor.outbox, '@context': 'https://www.w3.org/ns/activitystreams', + // @ts-expect-error TS(2339): Property 'relayActor' does not exist on type '{ ma... Remove this comment to see the full error message actor: this.relayActor.id, type: ACTIVITY_TYPES.FOLLOW, object: activity.actor, diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index 9a6256c6e..14ed00667 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -25,6 +25,7 @@ const MirrorSchema = { 'ldp.registry' ], created() { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "synchronizer"... Remove this comment to see the full error message this.broker.createService({ mixins: [SynchronizerService], settings: { @@ -50,6 +51,7 @@ const MirrorSchema = { mirror: { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message serverUrl: { type: 'string', optional: false } }, async handler(ctx) { @@ -88,8 +90,10 @@ const MirrorSchema = { const json = await response.json(); const mapServers = {}; for (const s of json['@graph']) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message mapServers[s['@id']] = s; } + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const server = mapServers[createFragmentURL('', serverUrl)]; if (!server) throw new MoleculerError( diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index ba6bf712a..5ea15c16d 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -65,22 +65,26 @@ const SynchronizerService = { type: ACTIVITY_TYPES.CREATE }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { for (let resource of arrayOf(activity.object)) { const resourceUri = typeof resource === 'string' ? resource : resource['@id'] || resource.id; // Ignore if the resource is on the same server + // @ts-expect-error TS(2339): Property 'isLocal' does not exist on type '{ match... Remove this comment to see the full error message if (!this.isLocal(resourceUri, recipientUri)) { resource = await ctx.call( 'ldp.remote.store', typeof resource === 'string' ? { resourceUri: resource, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } : { resource: { '@context': activity['@context'], ...resource }, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } @@ -88,6 +92,7 @@ const SynchronizerService = { const type = resource['@type'] || resource.type; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (activity.target && this.settings.synchronizeContainers) { for (const containerUri of arrayOf(activity.target)) { await ctx.call('ldp.container.attach', { @@ -98,9 +103,11 @@ const SynchronizerService = { } } + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.attachToLocalContainers) { let containerUri; + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.podProvider) { // If this is a Pod provider, try to find the container with the type-registrations service [containerUri] = await ctx.call('type-registrations.findContainersUris', { @@ -121,6 +128,7 @@ const SynchronizerService = { if (containerUri) { await ctx.call('ldp.container.attach', { containerUri, resourceUri, webId: recipientUri }); } else { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match:... Remove this comment to see the full error message this.logger.warn( `Cannot attach resource ${resourceUri} of type "${type}", no matching local containers were found` ); @@ -136,6 +144,7 @@ const SynchronizerService = { type: ACTIVITY_TYPES.UPDATE }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { for (let resource of arrayOf(activity.object)) { resource = await ctx.call( @@ -143,11 +152,13 @@ const SynchronizerService = { typeof resource === 'string' ? { resourceUri: resource, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } : { resource: { '@context': activity['@context'], ...resource }, + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message mirrorGraph: this.settings.mirrorGraph, webId: recipientUri } @@ -161,6 +172,7 @@ const SynchronizerService = { type: ACTIVITY_TYPES.DELETE }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { for (const resource of arrayOf(activity.object)) { const resourceUri = typeof resource === 'string' ? resource : resource.id || resource['@id']; @@ -175,11 +187,14 @@ const SynchronizerService = { webId: recipientUri }); } catch (e) { + // @ts-expect-error TS(2339): Property 'logger' does not exist on type '{ match:... Remove this comment to see the full error message this.logger.warn( + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. `Remote resource ${resourceUri} not deleted as it was not found on local dataset. Error ${e.message}` ); } + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (activity.target && this.settings.synchronizeContainers) { for (const containerUri of arrayOf(activity.target)) { await ctx.call('ldp.container.detach', { @@ -201,7 +216,9 @@ const SynchronizerService = { } }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.synchronizeContainers) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { const predicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: activity.object.relationship, @@ -226,7 +243,9 @@ const SynchronizerService = { } }, async onReceive(ctx: any, activity: any, recipientUri: any) { + // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.synchronizeContainers) { + // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { const predicate = await ctx.call('jsonld.parser.expandPredicate', { predicate: activity.object.relationship, diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index 55be80530..2af773908 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -20,7 +20,9 @@ const Schema = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts index 367d16f0c..e80417735 100644 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts +++ b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts @@ -13,6 +13,7 @@ const Schema = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; const { graphName } = ctx.params; @@ -21,6 +22,7 @@ const Schema = { // Launch the query 3 times, so that blank nodes within orphan blank nodes are also deleted for (let i = 0; i < 3; i++) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.actions.update( { query: ` diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index eda622ed8..96906aa08 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -14,12 +14,15 @@ const Schema = { } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) throw new Error(`The dataset ${dataset} doesn't exist`); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message return await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { body: 'update=DROP+ALL', headers: { diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index e6742c67c..6a7e8e045 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -4,6 +4,7 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, @@ -22,7 +23,9 @@ const Schema = { }, async handler(ctx) { const { resource, graphName } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; // Convert JSON-LD to N-Quads @@ -41,7 +44,9 @@ const Schema = { const datasets = dataset === '*' ? await ctx.call('triplestore.dataset.list') : [dataset]; for (dataset of datasets) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (datasets.length > 1) this.logger.info(`Inserting into dataset ${dataset}...`); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { body: graphName ? `INSERT DATA { GRAPH <${graphName}> { ${rdf} } }` : `INSERT DATA { ${rdf} }`, headers: { diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 759a70660..d40b5c21e 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -7,8 +7,10 @@ const Schema = { params: { query: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message accept: { type: 'string', default: MIME_TYPES.JSON @@ -24,18 +26,22 @@ const Schema = { }, async handler(ctx) { let { accept, query } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!dataset) throw new Error(`No dataset defined for triplestore query: ${query}`); if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) throw new Error(`The dataset ${dataset} doesn't exist`); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (typeof query === 'object') query = this.generateSparqlQuery(query); const acceptNegotiatedType = negotiateType(accept); const acceptType = acceptNegotiatedType.mime; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const response = await this.fetch(urlJoin(this.settings.url, dataset, 'query'), { body: query, headers: { @@ -48,9 +54,11 @@ const Schema = { // we don't use the property ctx.meta.$responseType because we are not in a HTTP API call here // we are in an moleculer Action. // we use a different name (without the $) and then retrieve this value in the API action (sparqlendpoint.query) to set the $responseType + // @ts-expect-error TS(2339): Property 'responseType' does not exist on type '{}... Remove this comment to see the full error message ctx.meta.responseType = response.headers.get('content-type'); const regex = /(CONSTRUCT|SELECT|ASK).*/gm; + // @ts-expect-error TS(2531): Object is possibly 'null'. const verb = regex.exec(query)[1]; switch (verb) { case 'ASK': @@ -63,6 +71,7 @@ const Schema = { case 'SELECT': if (acceptType === MIME_TYPES.JSON || acceptType === MIME_TYPES.SPARQL_JSON) { const jsonResult = await response.json(); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return await this.sparqlJsonParser.parseJsonResults(jsonResult); } return await response.text(); diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts index 66b8a086b..9da86992b 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -3,6 +3,7 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message triple: { type: 'object' }, @@ -21,7 +22,9 @@ const Schema = { }, async handler(ctx) { const { triple, graphName } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index f72629cce..128df4166 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -6,6 +6,7 @@ const Schema = { params: { query: { type: 'multi', + // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, webId: { @@ -19,20 +20,25 @@ const Schema = { }, async handler(ctx) { let { query } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!dataset) throw new Error(`No dataset defined for triplestore update: ${query}`); if (dataset !== '*' && !(await ctx.call('triplestore.dataset.exist', { dataset }))) throw new Error(`The dataset ${dataset} doesn't exist`); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (typeof query === 'object') query = this.generateSparqlQuery(query); // Handle wildcard const datasets = dataset === '*' ? await ctx.call('triplestore.dataset.list') : [dataset]; for (dataset of datasets) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (datasets.length > 1) this.logger.info(`Updating dataset ${dataset}...`); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { body: query, headers: { diff --git a/src/middleware/packages/triplestore/adapter.ts b/src/middleware/packages/triplestore/adapter.ts index f7bc08639..8ccc28c52 100644 --- a/src/middleware/packages/triplestore/adapter.ts +++ b/src/middleware/packages/triplestore/adapter.ts @@ -1,27 +1,37 @@ /* eslint-disable class-methods-use-this */ import { MIME_TYPES } from '@semapps/mime-types'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import { frame } from 'jsonld'; import { sanitizeSparqlUri, sanitizeSparqlString } from './utils.ts'; class TripleStoreAdapter { constructor({ type, dataset, baseUri, ontology = 'http://semapps.org/ns/core#' }: any) { + // @ts-expect-error TS(2339): Property 'type' does not exist on type 'TripleStor... Remove this comment to see the full error message this.type = type; + // @ts-expect-error TS(2339): Property 'baseUri' does not exist on type 'TripleS... Remove this comment to see the full error message this.baseUri = baseUri || `urn:${type}:`; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message this.dataset = dataset; + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message this.ontology = ontology; } init(broker: any, service: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message this.broker = broker; + // @ts-expect-error TS(2339): Property 'service' does not exist on type 'TripleS... Remove this comment to see the full error message this.service = service; } async connect() { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message await this.broker.waitForServices(['triplestore'], 120000); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message await this.broker.call('triplestore.dataset.create', { + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset, secure: false // TODO Remove when we switch to Fuseki 5 }); @@ -48,6 +58,7 @@ class TripleStoreAdapter { // Ensure that the value does not contain SPARQL injection if (query) Object.values(query).forEach(value => sanitizeSparqlString(value)); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.query', { query: ` @@ -55,21 +66,25 @@ class TripleStoreAdapter { ?s ?p ?o } WHERE { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message ?s a <${this.ontology + this.type}> . ?s ?p ?o . ${ query ? Object.keys(query) + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message .map(predicate => `?s <${this.ontology + predicate}> "${query[predicate]}"`) .join(' . ') : '' } } `, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) .then((result: any) => { return frame(result, { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message '@context': { '@vocab': this.ontology } }); }) @@ -98,6 +113,7 @@ class TripleStoreAdapter { * Find an entity by ID. */ findById(_id: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.query', { query: ` @@ -106,10 +122,12 @@ class TripleStoreAdapter { <${sanitizeSparqlUri(_id)}> ?p ?o . } `, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) .then((result: any) => { return frame(result, { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message '@context': { '@vocab': this.ontology }, '@id': _id }); @@ -140,20 +158,26 @@ class TripleStoreAdapter { */ insert(entity: any) { const { slug, ...resource } = entity; + // @ts-expect-error TS(2339): Property 'baseUri' does not exist on type 'TripleS... Remove this comment to see the full error message resource['@id'] = this.baseUri + (slug || uuidv4()); // Ensure no predicates include an ontology const keyWithOntology = Object.keys(resource).find(key => key.includes(':')); if (keyWithOntology) + // @ts-expect-error TS(2339): Property 'type' does not exist on type 'TripleStor... Remove this comment to see the full error message throw new Error(`Cannot create a ${this.type} with key ${keyWithOntology} (no ontology allowed)`); + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.insert', { resource: { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message '@context': { '@vocab': this.ontology }, + // @ts-expect-error TS(2339): Property 'type' does not exist on type 'TripleStor... Remove this comment to see the full error message '@type': this.type, ...resource }, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) .then(() => this.findById(resource['@id'])); @@ -186,12 +210,14 @@ class TripleStoreAdapter { return this.findById(_id) .then((oldData: any) => { newData = { ...oldData, ...newData }; + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker.call('triplestore.update', { query: ` DELETE { <${sanitizeSparqlUri(_id)}> ?p ?o . } INSERT { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message <${sanitizeSparqlUri(_id)}> a <${this.ontology + this.type}> . ${ newData @@ -204,6 +230,7 @@ class TripleStoreAdapter { }) .map( predicate => + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message `<${_id}> <${this.ontology + predicate}> ${ Array.isArray(newData[predicate]) ? newData[predicate].map(o => `"${o}"`).join(', ') @@ -219,6 +246,7 @@ class TripleStoreAdapter { } `, contentType: MIME_TYPES.JSON, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }); }) @@ -236,9 +264,11 @@ class TripleStoreAdapter { * Remove an entity by ID */ removeById(_id: any) { + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'TripleSt... Remove this comment to see the full error message return this.broker .call('triplestore.update', { query: `DELETE WHERE { <${_id}> ?p ?o . }`, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message dataset: this.dataset }) .then(() => { diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 2ea7e645b..0b591d0a3 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -33,6 +33,7 @@ const TripleStoreService = { const { url, user, password, fusekiBase, dataset, document } = this.settings; if (dataset !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message this.broker.createService({ mixins: [DatasetService], settings: { @@ -46,6 +47,7 @@ const TripleStoreService = { } if (document !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message this.broker.createService({ mixins: [DocumentService], settings: document @@ -59,11 +61,15 @@ const TripleStoreService = { }); }, actions: { + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resource: ... Remove this comment to see the full error message insert, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { query: { t... Remove this comment to see the full error message update, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { query: { t... Remove this comment to see the full error message query, dropAll, countTriplesOfSubject, + // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { triple: { ... Remove this comment to see the full error message tripleExist, deleteOrphanBlankNodes }, diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 77df480d2..b3de6ee27 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -2,6 +2,7 @@ import fetch from 'node-fetch'; import fs from 'fs'; import path from 'path'; import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'stri... Remove this comment to see the full error message import format from 'string-template'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/triplestore/subservices/document.ts b/src/middleware/packages/triplestore/subservices/document.ts index 62cba3720..4ca2fbe0c 100644 --- a/src/middleware/packages/triplestore/subservices/document.ts +++ b/src/middleware/packages/triplestore/subservices/document.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import { ServiceSchema } from 'moleculer'; @@ -9,6 +10,7 @@ const DocumentService = { async handler(ctx) { // TODO Do not allow to pass the document URI on creation let { documentUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; if (!documentUri) uuidv4(); @@ -30,6 +32,7 @@ const DocumentService = { exist: { async handler(ctx) { const { documentUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; return await ctx.call('triplestore.query', { @@ -43,6 +46,7 @@ const DocumentService = { clear: { async handler(ctx) { const { documentUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; await ctx.call('triplestore.update', { @@ -63,6 +67,7 @@ const DocumentService = { delete: { async handler(ctx) { const { documentUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; // We need to manually drop the graph, otherwise Fuseki will consider it still exists diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 27c2f1aa8..72959c6d2 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { void as voidOntology } from '@semapps/ontologies'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; @@ -51,6 +52,7 @@ const jsonContext = { const addClassPartition = (serverUrl: any, partition: any, graph: any, scalar: any) => { const blank = blankNode(`b${scalar}`); + // @ts-expect-error TS(2339): Property 'data' does not exist on type 'BlankNode'... Remove this comment to see the full error message blank.data = [ { s: blankNode(`b${scalar}`), @@ -70,9 +72,11 @@ const addClassPartition = (serverUrl: any, partition: any, graph: any, scalar: a } ]; if (partition['http://semapps.org/ns/core#doNotMirror']) + // @ts-expect-error TS(2339): Property 'data' does not exist on type 'BlankNode'... Remove this comment to see the full error message blank.data.push({ s: blankNode(`b${scalar}`), p: namedNode('http://semapps.org/ns/core#doNotMirror'), + // @ts-expect-error TS(2345): Argument of type 'boolean' is not assignable to pa... Remove this comment to see the full error message o: literal(true, namedNode('http://www.w3.org/2001/XMLSchema#boolean')) }); @@ -124,6 +128,7 @@ const addMirrorServer = async ( for (const p of arrayOf(originalPartitions)) { // we skip empty containers and doNotMirror containers if (p['void:entities'] === '0' || p['semapps:doNotMirror']) continue; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message partitionsMap[p['void:uriSpace']] = p; } } @@ -143,6 +148,7 @@ const addMirrorServer = async ( query: `SELECT (COUNT (?o) as ?count) FROM <${mirrorGraph}> { <${p}> ?o }` }); + // @ts-expect-error TS(2551): Property 'http://rdfs.org/ns/void#entities' does n... Remove this comment to see the full error message partition['http://rdfs.org/ns/void#entities'] = Number(count[0].count.value); addClassPartition(thisServer, partition, graph, nextScalar + i); @@ -178,6 +184,7 @@ const VoidSchema = { getRemote: { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message serverUrl: { type: 'string', optional: false } }, async handler(ctx) { @@ -194,6 +201,7 @@ const VoidSchema = { return json; } } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. this.logger.warn(`Silently ignored error when fetching void endpoint: ${e.message}`); } } @@ -301,9 +309,12 @@ const VoidSchema = { const res = s.match(regexProtocolAndHostAndPort); if (res) { const name = urlJoin(res[0], '/'); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message let serverName = serversMap[name]; if (!serverName) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message serversMap[name] = []; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message serverName = serversMap[name]; } serverName.push(s); @@ -316,8 +327,10 @@ const VoidSchema = { if (json) { const mapServers = {}; for (const s of json['@graph']) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message mapServers[s['@id']] = s; } + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const server = mapServers[createFragmentURL('', serverUrl)]; originalVoid = server; } @@ -327,15 +340,18 @@ const VoidSchema = { serverUrl, graph, hasSparql, + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message serversMap[serverUrl], this.settings.mirrorGraphName, ctx, scalar, originalVoid ); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message scalar += serversMap[serverUrl].length; } + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = accept; // TODO use Etag instead to keep track of changes in VOID @@ -350,6 +366,7 @@ const VoidSchema = { api_get: { handler: async function api(ctx) { + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. let { accept } = ctx.meta.headers; if (accept.includes('*/*')) accept = MIME_TYPES.JSON; else if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) @@ -368,17 +385,22 @@ const VoidSchema = { const res = await Promise.all( Object.values(registeredContainers) + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. .filter(c => c.acceptedTypes) .map(async c => { const partition = { + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. 'http://rdfs.org/ns/void#uriSpace': urlJoin(baseUrl, c.path), + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. 'http://rdfs.org/ns/void#class': arrayOf(c.acceptedTypes) }; + // @ts-expect-error TS(18046): 'c' is of type 'unknown'. if (c.excludeFromMirror) partition['http://semapps.org/ns/core#doNotMirror'] = true; const count = await ctx.call('triplestore.query', { query: `SELECT (COUNT (?o) as ?count) { <${partition['http://rdfs.org/ns/void#uriSpace']}> ?o }`, webId: 'system' }); + // @ts-expect-error TS(2551): Property 'http://rdfs.org/ns/void#entities' does n... Remove this comment to see the full error message partition['http://rdfs.org/ns/void#entities'] = Number(count[0].count.value); return partition; }) @@ -437,6 +459,7 @@ const VoidSchema = { } mySerializer.end(); + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message const jsonLd = JSON.parse(await streamToString(mySerializer)); const compactJsonLd = await ctx.call('jsonld.parser.frame', { diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index 9f75d3df0..aa97e36c0 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -33,6 +33,7 @@ const AuthorizerBotSchema = { events: { 'ldp.resource.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; for (const rule of this.settings.rules) { if (this.matchRule(rule, newData)) { @@ -63,6 +64,7 @@ const AuthorizerBotSchema = { 'ldp.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; for (const rule of this.settings.rules) { diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index a665cba9d..ca2cbab3d 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -68,6 +68,7 @@ const GroupsManagerSchema = { events: { 'ldp.resource.created': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; if (this.isUser(newData)) { for (const rule of this.settings.rules) { @@ -86,6 +87,7 @@ const GroupsManagerSchema = { 'ldp.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; if (this.isUser(newData)) { for (const rule of this.settings.rules) { @@ -111,6 +113,7 @@ const GroupsManagerSchema = { 'ldp.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; if (this.isUser(oldData)) { for (const rule of this.settings.rules) { diff --git a/src/middleware/packages/webacl/middlewares/cacher.ts b/src/middleware/packages/webacl/middlewares/cacher.ts index 6ff2a24f5..1a1d2896d 100644 --- a/src/middleware/packages/webacl/middlewares/cacher.ts +++ b/src/middleware/packages/webacl/middlewares/cacher.ts @@ -9,6 +9,7 @@ const CacherMiddleware = (opts: any) => ({ created(broker: any) { if (opts) { + // @ts-expect-error TS(2339): Property 'resolve' does not exist on type 'typeof ... Remove this comment to see the full error message broker.cacher = Cachers.resolve(opts); broker.cacher.init(broker); cacher = broker.cacher.middleware(); diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index 056c8af20..9358338aa 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { acl, vcard, rdfs } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import WebAclResourceService from './services/resource/index.ts'; @@ -18,6 +19,7 @@ const WebaclSchema = { async created() { const { baseUrl, graphName, podProvider, superAdmins } = this.settings; + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl.resour... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclResourceService], settings: { @@ -27,6 +29,7 @@ const WebaclSchema = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl.group"... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclGroupService], settings: { @@ -37,10 +40,12 @@ const WebaclSchema = { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl.author... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclAuthorizerService] }); // Only create this service if a cacher is defined if (this.broker.cacher) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl.cache"... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclCacheService] }); } }, diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts index b8bfaa2c4..0948f84cf 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.ts +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -20,6 +20,7 @@ const WebaclAuthorizerSchema = { const { uri, type, mode, webId } = ctx.params; if (type === 'resource' || type === 'container') { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const modesToCheck = modeMapping[mode]; const rights = await ctx.call('webacl.resource.hasRights', { diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index 3919c39ba..080479955 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -70,6 +70,7 @@ const WebaclCacheSchema = { events: { 'webacl.resource.updated': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, defaultRightsUpdated } = ctx.params; await this.actions.invalidateResourceRights( { uri, specificUriOnly: !isContainer || !defaultRightsUpdated }, @@ -80,6 +81,7 @@ const WebaclCacheSchema = { 'webacl.resource.deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer } = ctx.params; await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); } @@ -87,6 +89,7 @@ const WebaclCacheSchema = { 'webacl.resource.user-deleted': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); } @@ -94,6 +97,7 @@ const WebaclCacheSchema = { 'webacl.group.member-added': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); @@ -102,6 +106,7 @@ const WebaclCacheSchema = { 'webacl.group.member-removed': { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index e96a21b0d..55ead507e 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -19,17 +19,22 @@ export const api = async function api(this: any, ctx: any) { export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupUri: { type: 'string', optional: true, trim: true }, + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; trim: tru... Remove this comment to see the full error message memberUri: { type: 'string', optional: false, trim: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { let { groupSlug, groupUri, memberUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); // TODO: check that the member exists ? @@ -52,6 +57,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: INSERT DATA { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { <${groupUri}> vcard:hasMember <${memberUri}> } diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 2648e353d..8f59284dd 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'spea... Remove this comment to see the full error message import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; @@ -26,33 +27,40 @@ export const action = { visibility: 'public', params: { groupUri: { type: 'string', optional: true }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupSlug: { type: 'string', optional: true, min: 1, trim: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { let { groupUri, groupSlug } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri) { groupSlug = createSlug(groupSlug, { lang: 'fr', custom: { '.': '.', '/': '/' } }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (await this.actions.exist({ groupUri, webId: 'system' }, { parentCtx: ctx })) { throw new MoleculerError('Group already exists', 400, 'BAD_REQUEST'); } const newRights = {}; if (webId === 'anon') { + // @ts-expect-error TS(2339): Property 'anon' does not exist on type '{}'. newRights.anon = { read: true, write: true }; } else if (webId === 'system') { + // @ts-expect-error TS(2339): Property 'anon' does not exist on type '{}'. newRights.anon = { read: true }; } else { + // @ts-expect-error TS(2339): Property 'user' does not exist on type '{}'. newRights.user = { uri: webId, read: true, @@ -70,6 +78,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: INSERT DATA { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { <${groupUri}> a vcard:Group } diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index 3e3400c3c..406e2a793 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -17,16 +17,20 @@ export const api = async function api(this: any, ctx: any) { export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupUri: { type: 'string', optional: true, trim: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { let { groupSlug, groupUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); // TODO: check that the group exists ? @@ -45,6 +49,7 @@ export const action = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` DELETE WHERE { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { <${groupUri}> ?p ?o. } @@ -55,6 +60,7 @@ export const action = { await ctx.call('webacl.resource.deleteAllRights', { resourceUri: groupUri }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index 9f7f8db63..0ef842f3d 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -7,19 +7,23 @@ const { MoleculerError } = require('moleculer').Errors; export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupUri: { type: 'string', optional: true, trim: true } }, async handler(ctx) { let { groupUri, groupSlug } = ctx.params; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); return await ctx.call('triplestore.query', { query: sanitizeSparqlQuery` PREFIX vcard: ASK WHERE { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { <${groupUri}> a vcard:Group . } diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index 861cf2b1d..a2017ba17 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -11,6 +11,7 @@ export const action = { webId: { type: 'string', optional: true } }, async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let groups; @@ -25,6 +26,7 @@ export const action = { PREFIX foaf: SELECT ?g WHERE + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. { GRAPH <${this.settings.graphName}> { ?g a vcard:Group. ?auth a acl:Authorization; @@ -45,6 +47,7 @@ export const action = { PREFIX vcard: SELECT ?g WHERE { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { ?g a vcard:Group } } diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 1c3954d96..1d049c075 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -14,16 +14,20 @@ export const api = async function api(this: any, ctx: any) { export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupUri: { type: 'string', optional: true, trim: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { let { groupSlug, groupUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); // TODO: check that the group exists ? @@ -44,6 +48,7 @@ export const action = { PREFIX vcard: SELECT ?m WHERE { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { <${groupUri}> vcard:hasMember ?m } diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.ts b/src/middleware/packages/webacl/services/group/actions/getUri.ts index 2294ba30c..02302eef3 100644 --- a/src/middleware/packages/webacl/services/group/actions/getUri.ts +++ b/src/middleware/packages/webacl/services/group/actions/getUri.ts @@ -4,10 +4,12 @@ import { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; trim: tru... Remove this comment to see the full error message groupSlug: { type: 'string', optional: false, trim: true } }, async handler(ctx) { const { groupSlug } = ctx.params; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return urlJoin(this.settings.baseUrl, '_groups', groupSlug); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 78e05e4a9..374e81881 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -7,17 +7,21 @@ const { MoleculerError } = require('moleculer').Errors; export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupUri: { type: 'string', optional: true, trim: true }, webId: { type: 'string', optional: true }, memberId: { type: 'string', optional: true } }, async handler(ctx) { let { groupSlug, groupUri, memberId } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); // TODO: check that the group exists ? @@ -41,6 +45,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: ASK + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. WHERE { GRAPH <${this.settings.graphName}> { <${groupUri}> vcard:hasMember <${memberId}> . } } diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 35f712417..05896d7aa 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -20,18 +20,23 @@ export const api = async function api(this: any, ctx: any) { export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupSlug: { type: 'string', optional: true, min: 1, trim: true }, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message groupUri: { type: 'string', optional: true, trim: true }, + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; trim: tru... Remove this comment to see the full error message memberUri: { type: 'string', optional: false, trim: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { let { groupSlug, groupUri, memberUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); if (!memberUri) throw new MoleculerError('needs a memberUri', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); // TODO: check that the member exists and is in the group ? @@ -52,6 +57,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: DELETE DATA { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { <${groupUri}> vcard:hasMember <${memberUri}> } diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index 663299ec2..ea5909571 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -1,13 +1,22 @@ import urlJoin from 'url-join'; import { ServiceSchema, defineAction } from 'moleculer'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import createAction from './actions/create.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import deleteAction from './actions/delete.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import existAction from './actions/exist.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import addMemberAction from './actions/addMember.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import getMembersAction from './actions/getMembers.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import getUriAction from './actions/getUri.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import isMemberAction from './actions/isMember.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import removeMemberAction from './actions/removeMember.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import getGroupsAction from './actions/getGroups.ts'; const WebaclGroupSchema = { @@ -116,6 +125,7 @@ const WebaclGroupSchema = { hooks: { before: { '*'(ctx) { + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message if (this.settings.podProvider && !ctx.meta.dataset) { if (ctx.params.groupUri) { const groupPath = new URL(ctx.params.groupUri).pathname; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index a010fc8d4..c82e07991 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -21,6 +21,7 @@ export const api = async function api(this: any, ctx: any) { throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + // @ts-expect-error TS(18046): 'addedRights' is of type 'unknown'. if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); // This is the root container @@ -41,14 +42,18 @@ export const action = { webId: { type: 'string', optional: true }, // addedRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } // you will most likely prefer to use additionalRights instead. + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message addedRights: { type: 'array', optional: true, min: 1 }, // newRights is used to add rights to a non existing resource. + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message newRights: { type: 'object', optional: true }, // additionalRights is used to add rights to an existing resource. + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message additionalRights: { type: 'object', optional: true } }, async handler(ctx) { let { webId, addedRights, resourceUri, newRights, additionalRights } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; let difference; @@ -59,6 +64,7 @@ export const action = { if (!addedRights && !additionalRights) throw new MoleculerError('please use addedRights or additionalRights, none were provided', 403, 'BAD_REQUEST'); + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); await ctx.call('permissions.check', { @@ -68,6 +74,7 @@ export const action = { webId }); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); if (!addedRights) { @@ -83,10 +90,13 @@ export const action = { throw new MoleculerError('The rights cannot be added because they are incorrect', 400, 'BAD_REQUEST'); } + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const currentPerms = await this.getExistingPerms( ctx, resourceUri, + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.settings.baseUrl, + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.settings.graphName, isContainer ); @@ -98,6 +108,7 @@ export const action = { if (difference.length === 0) return; // compile a list of Authorization already present. if some of them don't exist, we need to create them here below + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. currentAuths = this.compileAuthorizationNodesMap(currentPerms); } else if (newRights) { // TODO: check that the resource doesn't exist. otherwise, raise an error @@ -109,6 +120,7 @@ export const action = { ); // we set new rights for a non existing resource + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const aclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, resourceUri)}#`; difference = processRights(newRights, aclUri); // we do add default container permissions if any is set in newRights. but we cannot know for sure @@ -122,6 +134,7 @@ export const action = { let addRequest = ''; for (const add of difference) { if (!currentAuths[add.auth]) { + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message addRequest += this.generateNewAuthNode(add.auth); currentAuths[add.auth] = true; } @@ -130,6 +143,7 @@ export const action = { if (addRequest.length > 0) { await ctx.call('triplestore.update', { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }`, webId: 'system' }); @@ -153,6 +167,7 @@ export const action = { const returnValues = { uri: resourceUri, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, webId, created: false, diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index 9d48f48c2..a80410071 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -5,6 +5,7 @@ export const action = { params: { resourceUri: { type: 'string' }, webId: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "number"; default: number; }' is not... Remove this comment to see the full error message timeout: { type: 'number', default: 10000 } }, handler(ctx) { diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index 1b28e5eb7..f77c4f6a0 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -3,6 +3,7 @@ import { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message resourceUri: { type: 'string', optional: false } }, async handler(ctx) { @@ -13,6 +14,7 @@ export const action = { await ctx.call('triplestore.update', { query: ` PREFIX acl: + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. WITH <${this.settings.graphName}> DELETE { ?auth ?p2 ?o } WHERE { ?auth ?p <${resourceUri}>. @@ -24,6 +26,7 @@ export const action = { ctx.emit( 'webacl.resource.deleted', + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. { uri: resourceUri, dataset: ctx.meta.dataset, isContainer }, { meta: { webId: null, dataset: null } } ); diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index 0d11c0339..76c833c34 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -3,6 +3,7 @@ import { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message webId: { type: 'string', optional: false } }, async handler(ctx) { @@ -11,6 +12,7 @@ export const action = { await ctx.call('triplestore.update', { query: ` PREFIX acl: + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. WITH <${this.settings.graphName}> DELETE { ?auth acl:agent <${webId}> } WHERE { ?auth acl:agent <${webId}> } @@ -20,6 +22,7 @@ export const action = { ctx.emit( 'webacl.resource.user-deleted', + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. { webId, dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } ); diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index dbbb10573..99e226fa1 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -4,11 +4,13 @@ import { getAclUriFromResourceUri } from '../../../utils.ts'; export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message uri: { type: 'string', optional: false } }, handler(ctx) { const { uri } = ctx.params; return { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. uri: getAclUriFromResourceUri(this.settings.baseUrl, uri), rel: 'acl' }; diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 1cab60642..54f422735 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -73,6 +73,7 @@ async function formatOutput(ctx: any, output: any, resourceAclUri: any, jsonLD: output.forEach((f: any) => mySerializer.write(quad(f.auth, f.p, f.o))); mySerializer.end(); + // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message const jsonLd = JSON.parse(await streamToString(mySerializer)); const compactJsonLd = await ctx.call('jsonld.parser.frame', { @@ -105,6 +106,7 @@ async function filterAcls(hasControl: any, uaSearchParam: any, acls: any) { async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: any, graphName: any, isContainer: any) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. const uaSearchParam = getUserAgentSearchParam(user); const document = []; @@ -121,9 +123,13 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an // Get the ACL for the resource + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName); document.push(...(await filterAcls(hasControl, uaSearchParam, reads))); @@ -154,6 +160,7 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an const controls = await getAuthorizationNode(ctx, containerUri, aclUri, 'Control', graphName, true); // we keep all the authorization nodes we found + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message containersMap[containerUri] = { reads, writes, @@ -166,9 +173,13 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an } for (const value of Object.values(containersMap)) { + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.reads))); + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.writes))); + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.appends))); + // @ts-expect-error TS(18046): 'value' is of type 'unknown'. document.push(...(await filterAcls(hasControl, uaSearchParam, value.controls))); } @@ -197,8 +208,10 @@ export const action = { visibility: 'public', params: { resourceUri: { type: 'string' }, + // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message accept: { type: 'string', default: MIME_TYPES.JSON }, webId: { type: 'string', optional: true }, + // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message skipResourceCheck: { type: 'boolean', default: false } }, cache: { @@ -206,13 +219,17 @@ export const action = { }, async handler(ctx) { let { resourceUri, webId, accept, skipResourceCheck } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; accept = accept || MIME_TYPES.TURTLE; + // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = accept; + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message const isContainer = !skipResourceCheck && (await this.checkResourceOrContainerExists(ctx, resourceUri)); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index 242bed6a0..80b2c7792 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -9,6 +9,7 @@ export const action = { async handler(ctx) { const { resourceUri } = ctx.params; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); const readAuthorization = authorizations['@graph'] && authorizations['@graph'].find((auth: any) => auth['@id'] === '#Read'); diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index 276d8bed9..278e05f4a 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -53,6 +53,7 @@ async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, base } const uaSearchParam = getUserAgentSearchParam(user, groups); + // @ts-expect-error TS(2554): Expected 8 arguments, but got 7. await checkRights(askedRights, resultRights, ctx, resourceUri, resourceAclUri, uaSearchParam, graphName); if (Object.keys(askedRights).length !== Object.keys(resultRights).length) { @@ -75,6 +76,7 @@ async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, base // we put some false values if needed for (const p1 of Object.keys(perms)) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message if (askedRights[p1] && !resultRights[p1]) resultRights[p1] = false; } @@ -101,6 +103,7 @@ export const action = { rights: { type: 'object', optional: true, + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message strict: true, props: { read: { type: 'boolean', optional: true }, @@ -114,17 +117,21 @@ export const action = { cache: { enabled(ctx) { // Do not cache remote resources as we have no mecanism to clear this cache + // @ts-expect-error TS(18046): 'ctx.params.resourceUri' is of type 'unknown'. return ctx.params.resourceUri.startsWith(this.settings.baseUrl); }, keys: ['resourceUri', 'rights', 'webId'] }, async handler(ctx) { let { resourceUri, webId, rights } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; rights = rights || {}; if (Object.keys(rights).length === 0) rights = { read: true, write: true, append: true, control: true }; + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message await this.checkResourceOrContainerExists(ctx, resourceUri); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index 7cb6d65a6..b7cc0ab4a 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -8,19 +8,24 @@ export const action = { const containers = await ctx.call('ldp.registry.list'); + // @ts-expect-error TS(2339): Property 'permissions' does not exist on type 'unk... Remove this comment to see the full error message for (const { permissions, podsContainer, path } of Object.values(containers)) { if (permissions && !podsContainer) { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const baseUrl = this.settings.podProvider ? await ctx.call('solid-storage.getUrl', { webId }) - : this.settings.baseUrl; + : // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + this.settings.baseUrl; const containerUri = urlJoin(baseUrl, path); const containerRights = typeof permissions === 'function' - ? permissions(this.settings.podProvider ? webId : 'system', ctx) + ? // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. + permissions(this.settings.podProvider ? webId : 'system', ctx) : permissions; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.info(`Refreshing rights for container ${containerUri}...`); const publicPermissions = await ctx.call('webacl.resource.hasRights', { @@ -50,6 +55,7 @@ export const action = { isContainer: true, removePublicRead, removeDefaultPublicRead, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 022b3af33..f9100f95e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -6,17 +6,22 @@ const { MoleculerError } = require('moleculer').Errors; export const action = { visibility: 'public', params: { + // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message resourceUri: { type: 'string', optional: false }, webId: { type: 'string', optional: true }, /** In nested json format (e.g. `{anon: {read: true}}`) */ + // @ts-expect-error TS(2322): Type '{ type: "object"; optional: false; }' is not... Remove this comment to see the full error message rights: { type: 'object', optional: false } }, async handler(ctx) { let { resourceUri, rights } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); await ctx.call('permissions.check', { @@ -34,6 +39,7 @@ export const action = { query: ` PREFIX acl: DELETE DATA { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { ${processedRights.map(right => `<${right.auth}> <${right.p}> <${right.o}> .`).join('\n')} } @@ -58,6 +64,7 @@ export const action = { { uri: resourceUri, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, isContainer, defaultRightsUpdated, diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 6dc79756e..a4f22de5a 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -20,6 +20,7 @@ export const api = async function api(this: any, ctx: any) { throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + // @ts-expect-error TS(18046): 'newRights' is of type 'unknown'. if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); // This is the root container @@ -39,13 +40,16 @@ export const action = { resourceUri: { type: 'string' }, webId: { type: 'string', optional: true }, // newRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } + // @ts-expect-error TS(2322): Type '{ type: "array"; optional: false; min: numbe... Remove this comment to see the full error message newRights: { type: 'array', optional: false, min: 1 } // minimum is one right : We cannot leave a resource without rights. }, async handler(ctx) { let { webId, newRights, resourceUri } = ctx.params; + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); await ctx.call('permissions.check', { @@ -56,16 +60,20 @@ export const action = { }); // filter out all the newRights that are not for the resource + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); newRights = newRights.filter((a: any) => filterTriplesForResource(a, aclUri, isContainer)); if (newRights.length === 0) throw new MoleculerError('The rights cannot be changed because they are incorrect', 400, 'BAD_REQUEST'); + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const currentPerms = await this.getExistingPerms( ctx, resourceUri, + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.settings.baseUrl, + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.settings.graphName, isContainer ); @@ -81,11 +89,13 @@ export const action = { if (differenceAdd.length === 0 && differenceDelete.length === 0) return; // compile a list of Authorization already present. because if some of them don't exist, we need to create them + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const currentAuths = this.compileAuthorizationNodesMap(currentPerms); let addRequest = ''; for (const add of differenceAdd) { if (!currentAuths[add.auth]) { + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message addRequest += this.generateNewAuthNode(add.auth); currentAuths[add.auth] = 1; } else { @@ -101,13 +111,16 @@ export const action = { } for (const [auth, count] of Object.entries(currentAuths)) { + // @ts-expect-error TS(18046): 'count' is of type 'unknown'. if (count < 1) { + // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message deleteRequest += this.generateNewAuthNode(auth); } } // we do the 2 calls in one, so it is in the same transaction, and will rollback in case of failure. await ctx.call('triplestore.update', { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }; DELETE DATA { GRAPH <${this.settings.graphName}> { ${deleteRequest} } }`, webId: 'system' }); @@ -139,6 +152,7 @@ export const action = { const returnValues = { uri: resourceUri, webId, + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, created: false, isContainer, diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index c5ec7a4ab..a8d07f94d 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -1,16 +1,28 @@ import urlJoin from 'url-join'; import { ServiceSchema, defineAction } from 'moleculer'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import addRights from './actions/addRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import awaitReadRight from './actions/awaitReadRight.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import deleteAllRights from './actions/deleteAllRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import deleteAllUserRights from './actions/deleteAllUserRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import getLink from './actions/getLink.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import getRights from './actions/getRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import getUsersWithReadRights from './actions/getUsersWithReadRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import hasRights from './actions/hasRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import isPublic from './actions/isPublic.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import refreshContainersRights from './actions/refreshContainersRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import removeRights from './actions/removeRights.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import setRights from './actions/setRights.ts'; import { @@ -74,6 +86,7 @@ const WebaclResourceSchema = { hooks: { before: { '*'(ctx) { + // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message if (this.settings.podProvider && !ctx.meta.dataset && ctx.params.resourceUri) { ctx.meta.dataset = getDatasetFromUri(ctx.params.resourceUri); } @@ -109,9 +122,13 @@ const WebaclResourceSchema = { const document = []; + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName))); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName))); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName))); + // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName))); if (isContainer) { @@ -130,6 +147,7 @@ const WebaclResourceSchema = { compileAuthorizationNodesMap(nodes) { const result = {}; for (const node of nodes) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message result[node.auth] = result[node.auth] ? result[node.auth] + 1 : 1; } return result; diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index f1009c042..ab22bf44c 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -7,6 +7,7 @@ import rdfparseModule from 'rdf-parse'; const { MoleculerError } = require('moleculer').Errors; +// @ts-expect-error TS(2339): Property 'default' does not exist on type 'RdfPars... Remove this comment to see the full error message const rdfParser = rdfparseModule.default; const getSlugFromUri = (str: any) => str.match(new RegExp(`.*/(.*)`))[1]; @@ -164,6 +165,7 @@ function getUserAgentSearchParam(user: any, groups: any) { const checkAgentPresent = (acls: any, agentSearchParam: any) => { for (const acl of acls) { + // @ts-expect-error TS(2554): Expected 3 arguments, but got 2. const res = filterAgentAcl(acl, agentSearchParam); if (res) return true; } diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts index 625baab28..9d9f57044 100644 --- a/src/middleware/packages/webfinger/service.ts +++ b/src/middleware/packages/webfinger/service.ts @@ -51,6 +51,7 @@ const WebfingerService = { } } + // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 404; } }, diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index 65a443c23..402c641b0 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -8,6 +8,7 @@ const { MoleculerError, ServiceSchemaError } = require('moleculer').Errors; const WebhooksService = { name: 'webhooks' as const, mixins: [DbService], + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. adapter: new TripleStoreAdapter(), settings: { containerUri: null, @@ -49,6 +50,7 @@ const WebhooksService = { generate: { async handler(ctx) { + // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const userUri = ctx.meta.webId || ctx.params.userUri; const { action } = ctx.params; @@ -74,6 +76,7 @@ const WebhooksService = { return [ // Unsecured routes { + // @ts-expect-error TS(2345): Argument of type 'Context { let broker: any; const actors: any = []; let alice: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -16,24 +19,35 @@ describe('Actors are correctly created', () => { const { webId } = await broker.call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker.call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } alice = actors[1]; }); + // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Actor has the required informations', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.type).toContain('Person'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.preferredUsername).toBe('alice'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.outbox).toBe(urlJoin(alice.id, 'outbox')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.inbox).toBe(urlJoin(alice.id, 'inbox')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.followers).toBe(urlJoin(alice.id, 'followers')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.following).toBe(urlJoin(alice.id, 'following')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.publicKey).toMatchObject({ + // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['https://www.w3.org/ns/auth/rsa#RSAKey', 'sec:VerificationMethod']), controller: alice.id, owner: alice.id diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index fcacff83b..ce92be770 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -2,25 +2,31 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Collections API', () => { const items: any = []; const collectionsContainersUri = urlJoin(CONFIG.HOME_URL, 'as/collection'); let collectionUri: any; let localContext: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create ressources', async () => { for (let i = 0; i < 10; i++) { items.push( @@ -36,9 +42,11 @@ describe('Collections API', () => { }) ); } + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(items).toHaveLength(10); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create collection', async () => { localContext = await broker.call('jsonld.context.get'); @@ -53,8 +61,10 @@ describe('Collections API', () => { collectionUri = headers.get('Location'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collectionUri).not.toBeNull(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, @@ -65,6 +75,7 @@ describe('Collections API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Add item to collection', async () => { await fetchServer(collectionUri, { method: 'PATCH', @@ -77,6 +88,7 @@ describe('Collections API', () => { ` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, @@ -88,6 +100,7 @@ describe('Collections API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove item from collection', async () => { await fetchServer(collectionUri, { method: 'PATCH', @@ -100,6 +113,7 @@ describe('Collections API', () => { ` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, @@ -110,6 +124,7 @@ describe('Collections API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Paginated collection', async () => { const { headers } = await fetchServer(collectionsContainersUri, { method: 'POST', @@ -131,10 +146,12 @@ describe('Collections API', () => { }), body: ` PREFIX as: + // @ts-expect-error TS(7006): Parameter 'item' implicitly has an 'any' type. INSERT DATA { <${paginatedCollectionUri}> as:items ${items.map(item => `<${item}>`).join(', ')} . }; ` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(paginatedCollectionUri)).resolves.toMatchObject({ json: { id: paginatedCollectionUri, @@ -147,6 +164,7 @@ describe('Collections API', () => { } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`) ).resolves.toMatchObject({ @@ -155,10 +173,12 @@ describe('Collections API', () => { type: 'CollectionPage', partOf: paginatedCollectionUri, next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[5])}`, + // @ts-expect-error TS(2304): Cannot find name 'expect'. items: expect.arrayContaining([items[9], items[8], items[7], items[6]]) } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[1])}`) ).resolves.toMatchObject({ @@ -167,6 +187,7 @@ describe('Collections API', () => { type: 'CollectionPage', partOf: paginatedCollectionUri, prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[2])}`, + // @ts-expect-error TS(2304): Cannot find name 'expect'. items: expect.arrayContaining([items[1], items[0]]) } }); diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index 3670de8a8..f6d074c05 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -1,24 +1,30 @@ import urlJoin from 'url-join'; import initialize from './initialize.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Collections', () => { const items: any = []; let collectionUri: any; let orderedCollectionUri: any; let cursorBasedCollectionUri: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // Create test items for (let i = 0; i < 10; i++) { @@ -76,13 +82,16 @@ describe('Collections', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Collection exists', async () => { const collectionExist = await broker.call('activitypub.collection.exist', { resourceUri: collectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collectionExist).toBeTruthy(); const collection = await broker.call('activitypub.collection.get', { resourceUri: collectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionUri, type: 'Collection', @@ -91,12 +100,14 @@ describe('Collections', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get collection with custom jsonContext', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: collectionUri, jsonContext: { as: 'https://www.w3.org/ns/activitystreams#' } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ '@id': collectionUri, '@type': 'as:Collection', @@ -105,15 +116,18 @@ describe('Collections', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ordered collection exists', async () => { const collectionExist = await broker.call('activitypub.collection.exist', { resourceUri: orderedCollectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collectionExist).toBeTruthy(); const collection = await broker.call('activitypub.collection.get', { resourceUri: orderedCollectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: orderedCollectionUri, type: 'OrderedCollection', @@ -124,6 +138,7 @@ describe('Collections', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Add and remove item from collection', async () => { await broker.call('activitypub.collection.add', { collectionUri, @@ -134,6 +149,7 @@ describe('Collections', () => { resourceUri: collectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionUri, type: 'Collection', @@ -150,15 +166,18 @@ describe('Collections', () => { resourceUri: collectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionUri, type: 'Collection', summary: 'My non-ordered collection' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toBeUndefinedOrEmptyArray(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get collection with dereference items', async () => { const collectionWithDereferenceUri = await broker.call('activitypub.collection.post', { resource: { @@ -178,6 +197,7 @@ describe('Collections', () => { resourceUri: collectionWithDereferenceUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionWithDereferenceUri, type: 'Collection', @@ -191,6 +211,7 @@ describe('Collections', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Items are sorted in descending order (default)', async () => { await broker.call('activitypub.collection.add', { collectionUri: orderedCollectionUri, @@ -216,12 +237,14 @@ describe('Collections', () => { resourceUri: orderedCollectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: orderedCollectionUri, orderedItems: [items[6], items[4], items[2], items[0]] }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Items are sorted in ascending order', async () => { const ascOrderedCollectionUri = await broker.call('activitypub.collection.post', { resource: { @@ -257,15 +280,18 @@ describe('Collections', () => { resourceUri: ascOrderedCollectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: ascOrderedCollectionUri, orderedItems: [items[0], items[2], items[4], items[6]] }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Pagination', () => { let paginatedCollectionUri: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // Create collection for pagination tests paginatedCollectionUri = await broker.call('activitypub.collection.post', { @@ -286,11 +312,13 @@ describe('Collections', () => { } }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should return first and last page links for unpaginated request', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: paginatedCollectionUri, first: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, @@ -298,39 +326,49 @@ describe('Collections', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should navigate forward with afterEq cursor', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, afterEq: items[9] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[5])}` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(4); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toEqual([items[9], items[8], items[7], items[6]]); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should navigate backward with beforeEq cursor', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, beforeEq: items[5] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[5])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[9])}` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(4); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toEqual([items[8], items[7], items[6], items[5]]); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Edge Cases', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle empty collection', async () => { const emptyCollectionUri = await broker.call('activitypub.collection.post', { resource: { @@ -345,15 +383,20 @@ describe('Collections', () => { resourceUri: emptyCollectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: emptyCollectionUri, type: 'Collection' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.first).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.last).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toBeUndefinedOrEmptyArray(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle collection with exactly itemsPerPage items', async () => { const exactCollectionUri = await broker.call('activitypub.collection.post', { resource: { @@ -377,14 +420,18 @@ describe('Collections', () => { afterEq: items[3] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ type: 'CollectionPage', partOf: exactCollectionUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.next).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(4); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle last page with remaining items', async () => { // Get last page of main paginated collection (should have 2 items) const collection = await broker.call('activitypub.collection.get', { @@ -392,12 +439,16 @@ describe('Collections', () => { afterEq: items[1] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(2); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.next).toBeUndefined(); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Data Consistency', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should maintain consistent page size across navigation', async () => { // Navigate through all pages and verify each has correct size (except last) let cursor = items[9]; @@ -411,11 +462,13 @@ describe('Collections', () => { }); if (page.next) { + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(page.items).toHaveLength(4); } // Check for duplicates page.items.forEach((item: any) => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(seenItems.has(item)).toBeFalsy(); seenItems.add(item); }); @@ -425,11 +478,14 @@ describe('Collections', () => { } // With 10 items and page size 4, we should have 3 pages + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(pageCount).toBe(3); // Should have seen all items exactly once + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(seenItems.size).toBe(10); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle navigation between pages consistently', async () => { // Forward navigation const firstPage = await broker.call('activitypub.collection.get', { @@ -450,14 +506,18 @@ describe('Collections', () => { }); // Verify we get back to the same items + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(firstPage.items).toEqual(prevPage.items); }); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Error Handling', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should return 404 when collection does not exist', async () => { const nonExistentUri = urlJoin(CONFIG.HOME_URL, 'as/collection/non-existent'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri: nonExistentUri @@ -465,8 +525,10 @@ describe('Collections', () => { ).rejects.toThrow('not found'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should return 404 when cursor not found in collection', async () => { const invalidCursorUri = urlJoin(CONFIG.HOME_URL, 'as/object/non-existent'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri: cursorBasedCollectionUri, @@ -475,7 +537,9 @@ describe('Collections', () => { ).rejects.toThrow('Cursor not found'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should reject when both beforeEq and afterEq are provided', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri: cursorBasedCollectionUri, @@ -485,8 +549,10 @@ describe('Collections', () => { ).rejects.toThrow('Cannot get a collection with both beforeEq and afterEq'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle malformed collection URI', async () => { const malformedUri = 'not-a-valid-uri'; + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri: malformedUri diff --git a/src/middleware/tests/activitypub/follow.test.ts b/src/middleware/tests/activitypub/follow.test.ts index ac2c8aff4..b294acc33 100644 --- a/src/middleware/tests/activitypub/follow.test.ts +++ b/src/middleware/tests/activitypub/follow.test.ts @@ -2,9 +2,11 @@ import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50_000); const NUM_USERS = 2; +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe.each(['single-server', 'multi-server'])('In mode %s, posting to followers', (mode: any) => { let broker: any; const actors: any = []; @@ -12,6 +14,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe let bob: any; let followActivity: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -28,6 +31,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -35,6 +39,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe bob = actors[2]; }); + // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -45,6 +50,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe } }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Follow user', async () => { followActivity = await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -56,6 +62,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) ).resolves.toBeTruthy(); @@ -72,8 +79,11 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), webId: bob.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.ACCEPT, actor: alice.id, @@ -85,6 +95,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Send message to followers', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -96,6 +107,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe content: 'My first message, happy to be part of the fediverse !' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity).toMatchObject({ type: ACTIVITY_TYPES.CREATE, object: { @@ -115,14 +127,18 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe webId: bob.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(2); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ id: createActivity.id }); }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Unfollow user', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -134,6 +150,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) ).resolves.toBeFalsy(); diff --git a/src/middleware/tests/activitypub/inbox.test.ts b/src/middleware/tests/activitypub/inbox.test.ts index 3e0454242..98b171e40 100644 --- a/src/middleware/tests/activitypub/inbox.test.ts +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -2,23 +2,28 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50_000); let broker: any; let broker2: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); broker2 = broker; }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Permissions are correctly set on inbox', () => { let simon: any; let sebastien: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { username: 'srosset81', @@ -38,8 +43,10 @@ describe('Permissions are correctly set on inbox', () => { simon = await broker2.call('activitypub.actor.awaitCreateComplete', { actorUri: simonUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(sebastien).toMatchObject({ id: sebastienUri, + // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['Person', 'foaf:Person']), preferredUsername: 'srosset81', 'foaf:nick': 'srosset81', @@ -50,8 +57,10 @@ describe('Permissions are correctly set on inbox', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Inbox response for an actor that does not exist', async () => { const resourceUri = simon.inbox.replace('simonlouvet', 'unknown'); // 'http://localhost:3000/as/actor/simonlouvet/inbox', + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri, @@ -60,6 +69,7 @@ describe('Permissions are correctly set on inbox', () => { ).rejects.toThrow('not found'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post private message to friend', async () => { const item = await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -76,7 +86,9 @@ describe('Permissions are correctly set on inbox', () => { afterEq: item.id, webId: simon.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -94,7 +106,9 @@ describe('Permissions are correctly set on inbox', () => { afterEq: item.id, webId: sebastien.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -112,10 +126,12 @@ describe('Permissions are correctly set on inbox', () => { afterEq: item.id, webId: 'anon' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems.length).toBe(0); }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post public message', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -137,7 +153,9 @@ describe('Permissions are correctly set on inbox', () => { webId: simon.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(2); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -159,7 +177,9 @@ describe('Permissions are correctly set on inbox', () => { afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), webId: sebastien.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(2); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -181,7 +201,9 @@ describe('Permissions are correctly set on inbox', () => { afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 6c6703b78..d9b530a7a 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import fse from 'fs-extra'; import path from 'path'; import urlJoin from 'url-join'; @@ -6,6 +7,7 @@ import { AuthLocalService } from '@semapps/auth'; import { CoreService } from '@semapps/core'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } from '@semapps/activitypub'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import { dropDataset, clearQueue } from '../utils.ts'; @@ -26,6 +28,7 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que const broker = new ServiceBroker({ nodeID: `server${port}`, + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl })], logger: { type: 'Console', @@ -38,6 +41,7 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que // Remove all actors keys await fse.emptyDir(path.resolve(__dirname, './actors')); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -66,6 +70,7 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { diff --git a/src/middleware/tests/activitypub/like.test.ts b/src/middleware/tests/activitypub/like.test.ts index bf3a479da..b2c28243d 100644 --- a/src/middleware/tests/activitypub/like.test.ts +++ b/src/middleware/tests/activitypub/like.test.ts @@ -2,9 +2,11 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); const NUM_USERS = 2; +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', (mode: any) => { let broker: any; const actors: any = []; @@ -12,6 +14,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( let bob: any; let aliceMessageUri: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -28,6 +31,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -35,6 +39,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( bob = actors[2]; }); + // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -45,6 +50,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( } }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob likes Alice message', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -67,6 +73,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure the /likes collection has been created await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('ldp.resource.get', { resourceUri: aliceMessageUri @@ -78,6 +85,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure Bob has been added to the /likes collection await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }) ).resolves.toMatchObject({ @@ -88,6 +96,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure the note has been added to Bob's /liked collection await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` })).resolves.toMatchObject({ type: 'Collection', items: aliceMessageUri @@ -95,6 +104,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob undo his like', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -110,12 +120,14 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure Bob has been removed from the /likes collection await waitForExpect(async () => { const likes = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(likes.items).toHaveLength(0); }); // Ensure the note has been removed from Bob's /liked collection await waitForExpect(async () => { const liked = await bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(liked.items).toHaveLength(0); }); }); diff --git a/src/middleware/tests/activitypub/message.test.ts b/src/middleware/tests/activitypub/message.test.ts index 39e47790a..e70d5fc5b 100644 --- a/src/middleware/tests/activitypub/message.test.ts +++ b/src/middleware/tests/activitypub/message.test.ts @@ -2,9 +2,11 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '@semapps/activitypub'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(70000); const NUM_USERS = 2; +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages', (mode: any) => { let broker: any; const actors: any = []; @@ -13,6 +15,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' let aliceMessageUri: any; let bobMessageUri: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -29,6 +32,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -36,6 +40,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' bob = actors[2]; }); + // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -46,6 +51,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' } }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Alice send message to Bob', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -60,6 +66,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' // Check the object has been created const message = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(message).toMatchObject({ type: OBJECT_TYPES.NOTE, attributedTo: alice.id, @@ -67,9 +74,11 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); // Ensure the /replies collection has not been created yet + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(message.replies).not.toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob replies to Alice and his message appears in the /replies collection', async () => { const createActivity = await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -84,12 +93,14 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' bobMessageUri = createActivity.object.id; await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ replies: `${aliceMessageUri}/replies` }); }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }) ).resolves.toMatchObject({ @@ -104,6 +115,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob deletes his message to Alice', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -114,15 +126,18 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(alice.call('ldp.resource.get', { resourceUri: bobMessageUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Note', + // @ts-expect-error TS(2304): Cannot find name 'expect'. deleted: expect.anything() }); }); await waitForExpect(async () => { const replies = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(replies.items).toBeUndefinedOrEmptyArray(); }); }); diff --git a/src/middleware/tests/activitypub/object.test.ts b/src/middleware/tests/activitypub/object.test.ts index c713e423b..b5c6a29b1 100644 --- a/src/middleware/tests/activitypub/object.test.ts +++ b/src/middleware/tests/activitypub/object.test.ts @@ -1,23 +1,29 @@ import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Create/Update/Delete objects', () => { let sebastien: any; let objectUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { username: 'srosset81', @@ -28,9 +34,11 @@ describe('Create/Update/Delete objects', () => { sebastien = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: sebastienUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(sebastienUri).toBe(`${CONFIG.HOME_URL}as/actor/srosset81`); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create object', async () => { const createActivity = await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -42,6 +50,7 @@ describe('Create/Update/Delete objects', () => { content: 'My first article, I hope there is no tipo' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity).toMatchObject({ type: ACTIVITY_TYPES.CREATE, actor: sebastien.id, @@ -53,10 +62,13 @@ describe('Create/Update/Delete objects', () => { to: sebastien.followers }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity.object).toHaveProperty('id'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity.object).not.toHaveProperty('current'); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.includes', { collectionUri: sebastien.outbox, itemUri: createActivity.id }) ).resolves.toBeTruthy(); @@ -66,10 +78,13 @@ describe('Create/Update/Delete objects', () => { // Check the object has been created in the container const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(object).toHaveProperty('type', OBJECT_TYPES.ARTICLE); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(object).toHaveProperty('id', objectUri); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Update object', async () => { const updateActivity = await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -84,6 +99,7 @@ describe('Create/Update/Delete objects', () => { to: sebastien.followers }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updateActivity).toMatchObject({ type: ACTIVITY_TYPES.UPDATE, actor: sebastien.id, @@ -94,11 +110,14 @@ describe('Create/Update/Delete objects', () => { }, to: sebastien.followers }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updateActivity.object).not.toHaveProperty('current'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updateActivity.object).not.toHaveProperty('name'); // Check the object has been updated const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(object).toMatchObject({ id: objectUri, type: OBJECT_TYPES.ARTICLE, @@ -106,6 +125,7 @@ describe('Create/Update/Delete objects', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete object', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -115,9 +135,11 @@ describe('Create/Update/Delete objects', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.resource.get', { resourceUri: objectUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Article', + // @ts-expect-error TS(2304): Cannot find name 'expect'. deleted: expect.anything() }); }); diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index 814279ac2..4e92ef115 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -2,23 +2,28 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50_000); let broker: any; let broker2: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); broker2 = broker; }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Permissions are correctly set on outbox', () => { let simon: any; let sebastien: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { username: 'srosset81', @@ -38,8 +43,10 @@ describe('Permissions are correctly set on outbox', () => { simon = await broker2.call('activitypub.actor.awaitCreateComplete', { actorUri: simonUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(sebastien).toMatchObject({ id: sebastienUri, + // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['Person', 'foaf:Person']), preferredUsername: 'srosset81', 'foaf:nick': 'srosset81', @@ -51,6 +58,7 @@ describe('Permissions are correctly set on outbox', () => { }); let objectPrivateFirst: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post private message to self', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -70,7 +78,9 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: sebastien.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -96,6 +106,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(0); }); @@ -109,6 +120,7 @@ describe('Permissions are correctly set on outbox', () => { // ).rejects.toThrow(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post private message to friend', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -129,7 +141,9 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -151,10 +165,12 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(0); }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post public message', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -175,7 +191,9 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(2); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -197,7 +215,9 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -209,6 +229,7 @@ describe('Permissions are correctly set on outbox', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Object permissions change when friend is added to addressees', async () => { // Activity is visible to friend after Update. const activityUpdatedForFriend = await broker.call('activitypub.outbox.post', { @@ -222,6 +243,7 @@ describe('Permissions are correctly set on outbox', () => { name: 'Message is now visible to friend' } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(objectPrivateFirst?.id).toBe(activityUpdatedForFriend.object.id); // Get outbox as friend. @@ -235,6 +257,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outboxFetchedByFriend.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.UPDATE, @@ -255,9 +278,11 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outboxFetchedByAnon.orderedItems[0].object?.name).toBe('Message is now visible to friend'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Object permissions change when public is added to addressees', async () => { // Activity is visible after update to public const activityUpdatedForPublic = await broker.call('activitypub.outbox.post', { @@ -271,6 +296,7 @@ describe('Permissions are correctly set on outbox', () => { name: 'Message is now public' } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(objectPrivateFirst.id).toBe(activityUpdatedForPublic.object.id); // Get outbox as anon. @@ -284,6 +310,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outboxFetchedByAnon.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.UPDATE, diff --git a/src/middleware/tests/activitypub/shares.test.ts b/src/middleware/tests/activitypub/shares.test.ts index ba80adb4c..6a976367e 100644 --- a/src/middleware/tests/activitypub/shares.test.ts +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -2,9 +2,11 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); const NUM_USERS = 2; +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', (mode: any) => { let broker: any; const actors: any = []; @@ -12,6 +14,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', let bob: any; let aliceMessageUri: any; let publicShareActivity: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -28,6 +31,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); actors[i].call = (actionName: any, params: any, options = {}) => + // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); } @@ -35,6 +39,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', bob = actors[2]; }); + // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -45,6 +50,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', } }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob shares Alice message', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -75,6 +81,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure the /shares collection has been created await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ shares: `${aliceMessageUri}/shares` }); @@ -82,6 +89,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure only the public announce activity has been added to the /shares collection await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.toMatchObject({ @@ -91,6 +99,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob undo his share', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -102,6 +111,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure the public announce activity has been removed from the /shares collection await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.not.toMatchObject({ diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index efb76c631..8c86bbd5b 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -1,11 +1,14 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import fse from 'fs-extra'; import fs from 'fs'; import path from 'path'; import { ServiceBroker } from 'moleculer'; import { AuthLocalService } from '@semapps/auth'; import { CoreService } from '@semapps/core'; +// @ts-expect-error TS(2305): Module '"@semapps/crypto"' has no exported member ... Remove this comment to see the full error message import { VerifiableCredentialsService } from '@semapps/crypto'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; @@ -16,6 +19,7 @@ const initialize = async (port: any, withOldKeyStore = false) => { const baseUrl = `http://localhost:${port}/`; const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl })], logger: { type: 'Console', @@ -32,6 +36,7 @@ const initialize = async (port: any, withOldKeyStore = false) => { fs.writeFileSync(path.resolve(__dirname, '../actors', 'placeholder.key'), ''); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -58,6 +63,7 @@ const initialize = async (port: any, withOldKeyStore = false) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { @@ -67,6 +73,7 @@ const initialize = async (port: any, withOldKeyStore = false) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message broker.createService({ mixins: [VerifiableCredentialsService], settings: { diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index 5f388bea3..ba67aa3a8 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -3,6 +3,7 @@ import { arrayOf, waitForResource } from '@semapps/ldp'; import { wait } from '../utils.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(100_000); /** @type {import('moleculer').ServiceBroker} */ @@ -30,29 +31,44 @@ const setUp = async (withOldKeyStore: any) => { await wait(5000); }; +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('keys', () => { + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('with new service', () => { + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. await setUp(); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('RSA key', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('exists', async () => { const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPairs).toHaveLength(1); const keyPair = keyPairs[0]; + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['@id'] || keyPair.id).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.publicKeyPem).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.privateKeyPem).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.owner).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.controller).toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('public key present in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); @@ -60,16 +76,22 @@ describe('keys', () => { broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); const publicKeys = arrayOf(webIdDocument.publicKey); // There should only be one public key advertised in the webId by default. + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKeys.length).toBe(1); const matchingPublicKey = publicKeys.find(publicKey => publicKey.publicKeyPem === keyPair.publicKeyPem); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(matchingPublicKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(matchingPublicKey.owner).toBe(user.webId); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(matchingPublicKey.controller).toBe(user.webId); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('detach and attach to webId works', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, @@ -82,6 +104,7 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find(publicKey => publicKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); @@ -92,16 +115,19 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.publicKey).find(publicKey => publicKey.publicKeyPem === keyPair.publicKeyPem) ).toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key deletable and new one addable', async () => { const [oldKeyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(oldKeyPair).toBeTruthy(); // Delete @@ -112,10 +138,12 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find(publicKey => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) ).toBeUndefined(); // Expect key not to be present in `/public-keys` container. + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.exist', { resourceUri: oldKeyPair['rdfs:seeAlso'], @@ -129,10 +157,15 @@ describe('keys', () => { keyType: KEY_TYPES.RSA, attachToWebId: true }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyPem).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.privateKeyPem).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyPem).not.toBe(oldKeyPair.publicKeyPem); // Expect webId to not have old key but new key. @@ -140,9 +173,11 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.publicKey).some(publicKey => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) ).toBeFalsy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.publicKey).some(publicKey => publicKey.publicKeyPem === newKeyPair.publicKeyPem) ).toBeTruthy(); @@ -152,19 +187,26 @@ describe('keys', () => { resourceUri: newKeyPair['rdfs:seeAlso'], webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyPem).toBe(newKeyPair.publicKeyPem); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.owner).toBe(user.webId); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.privateKeyPem).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('private key is not accessible without authorization', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('keys.container.get', { resourceUri: keyPair['@id'] || keyPair.id, @@ -173,6 +215,7 @@ describe('keys', () => { ).rejects.toThrow('Forbidden'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('second key present in keys and public-keys container only', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -185,6 +228,7 @@ describe('keys', () => { resourceUri: keyPair['rdfs:seeAlso'], webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeTruthy(); // Should not be present in webId. @@ -192,11 +236,13 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find(pKey => pKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('no second key addable to webId', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -210,9 +256,11 @@ describe('keys', () => { webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced rdfs:seeAlso). + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey.id || webIdDocument.publicKey['@id']).toBe(keyPair['rdfs:seeAlso']); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('third key not present in webId and public key container', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -221,6 +269,7 @@ describe('keys', () => { attachToWebId: false }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['rdfs:seeAlso']).toBeUndefined(); // Should not be present in webId. @@ -228,51 +277,72 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find(pKey => pKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('keys.getOrCreateWebIdKeys returns key', async () => { const webIdKeys = await broker.call('keys.getOrCreateWebIdKeys', { webId: user.webId, keyType: KEY_TYPES.RSA }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdKeys).toHaveLength(1); webIdKeys.forEach((key: any) => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(key.publicKeyPem).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(key.privateKeyPem).toBeTruthy(); }); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('ED25519 key', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('exists', async () => { const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPairs).toHaveLength(1); const keyPair = keyPairs[0]; + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['@id'] || keyPair.id).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.publicKeyMultibase).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.secretKeyMultibase).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.owner).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.controller).toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('public key present in public-key container', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['rdfs:seeAlso']).toBeDefined(); const publicKey = await broker.call('keys.public-container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyMultibase).toBe(keyPair.publicKeyMultibase); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.secretKeyMultibase).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('public key present in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.assertionMethod).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find( assertionMethod => assertionMethod.publicKeyMultibase === keyPair.publicKeyMultibase @@ -280,6 +350,7 @@ describe('keys', () => { ).toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('detach and attach to webid works', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, @@ -292,6 +363,7 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find(key => key.publicKeyMultibase === keyPair.publicKeyMultibase) ).toBeUndefined(); @@ -302,16 +374,19 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.assertionMethod).find(key => key.publicKeyMultibase === keyPair.publicKeyMultibase) ).toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key deletable and new one addable', async () => { const [oldKeyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(oldKeyPair).toBeTruthy(); // Delete @@ -322,12 +397,14 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find( publicKey => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase ) ).toBeUndefined(); // Expect key not to be present in `/public-keys` container. + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.exist', { resourceUri: oldKeyPair['rdfs:seeAlso'], @@ -341,10 +418,15 @@ describe('keys', () => { keyType: KEY_TYPES.ED25519, attachToWebId: true }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyMultibase).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.secretKeyMultibase).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyMultibase).not.toBe(oldKeyPair.publicKeyMultibase); // Expect webId to not have old key but new key. @@ -352,11 +434,13 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.assertionMethod).some( publicKey => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase ) ).toBeFalsy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.assertionMethod).some( publicKey => publicKey.publicKeyMultibase === newKeyPair.publicKeyMultibase @@ -368,19 +452,26 @@ describe('keys', () => { resourceUri: newKeyPair['rdfs:seeAlso'], webId: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyMultibase).toBe(newKeyPair.publicKeyMultibase); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.owner).toBe(user.webId); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.secretKeyMultibase).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('private key is not accessible without authorization', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('keys.container.get', { resourceUri: keyPair.id || keyPair['@id'], @@ -389,6 +480,7 @@ describe('keys', () => { ).rejects.toThrow('Forbidden'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('second addable to webId', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -403,27 +495,35 @@ describe('keys', () => { webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced by rdfs:seeAlso). + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find(key => (key.id || key['@id']) === keyPair['rdfs:seeAlso']) ).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.assertionMethod.length).toBeGreaterThan(1); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('keys.getOrCreateWebIdKeys returns keys', async () => { const webIdKeys = await broker.call('keys.getOrCreateWebIdKeys', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdKeys.length).toBeGreaterThan(0); webIdKeys.forEach((key: any) => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(key.publicKeyMultibase).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(key.secretKeyMultibase).toBeTruthy(); }); }); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Migration', () => { + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // Stop and create new broker without migration. if (broker) await broker.stop(); @@ -435,8 +535,11 @@ describe('keys', () => { let publicKeyPemBeforeMigration: any; let privateKeyPemBeforeMigration: any; + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Before migration', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('new keys service not usable before migration', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('keys.createKeyForActor', { webId: user.webId, @@ -449,79 +552,119 @@ describe('keys', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key gettable', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); // Save them for later validation publicKeyPemBeforeMigration = publicKey; privateKeyPemBeforeMigration = privateKey; }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key in webId', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.privateKey).toBeUndefined(); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('After migration', () => { + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { await broker.call('keys.migration.migrateKeysToDb'); // Wait for keys.migration.migrated event to have propagated. await wait(1000); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('With old service', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key gettable and the same as before', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBe(publicKeyPemBeforeMigration); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBe(privateKeyPemBeforeMigration); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key in webId', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.privateKey).toBeUndefined(); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('With new service', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key gettable and remained the same', async () => { const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPairs).toHaveLength(1); const keyPair = keyPairs[0]; + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['@id'] || keyPair.id).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.owner).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.controller).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.publicKeyPem).toBe(publicKeyPemBeforeMigration); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.privateKeyPem).toBe(privateKeyPemBeforeMigration); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); const { publicKey } = webIdDocument; // There should only be one public key advertised in the webId by default. + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.owner).toBe(user.webId); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.controller).toBe(user.webId); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyPem).toBe(keyPair.publicKeyPem); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.privateKeyPem).toBeUndefined(); }); }); diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index c82cec6a6..aa1c055af 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -2,6 +2,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import path from 'node:path'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(45_000); const getChallengeFrom = async (actor: any) => { @@ -56,17 +57,23 @@ const setUp = async (withOldKeyStore: any) => { craig = await setUpUser(broker, 'craig'); }; +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('verifiable credentials', () => { + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. await setUp(); await broker.call('crypto.vc.issuer.credential-container.waitForContainerCreation'); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('object integrity', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('object is signed and verifiable', async () => { const object = { '@context': { name: 'urn:some:name' }, @@ -82,9 +89,11 @@ describe('verifiable credentials', () => { body: JSON.stringify({ object: signedObject }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeTruthy(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('modified object verification fails', async () => { const object = { '@context': { name: 'urn:some:name' }, @@ -102,11 +111,14 @@ describe('verifiable credentials', () => { body: JSON.stringify({ object: signedObject }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('credentials', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('credential is signed and verifiable', async () => { const verifiableCredential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -126,9 +138,11 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiableCredential }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(true); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('verifying modified credential fails', async () => { const verifiableCredential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -142,6 +156,7 @@ describe('verifiable credentials', () => { } }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiableCredential.type).not.toBe('VALIDATION_ERROR'); delete verifiableCredential.credentialSubject.description; @@ -150,11 +165,14 @@ describe('verifiable credentials', () => { method: 'POST', body: JSON.stringify({ verifiableCredential }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.type).not.toBe('VALIDATION_ERROR'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('presentation is signed and verifiable', async () => { const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -182,6 +200,7 @@ describe('verifiable credentials', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiablePresentation.code).toBeUndefined(); const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'presentations/verify'), { @@ -189,9 +208,11 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(true); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('verifying unsigned presentation fails', async () => { const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -206,6 +227,7 @@ describe('verifiable credentials', () => { } }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(credential.type).not.toBe('VALIDATION_ERROR'); const verifiablePresentation = await bob.fetch(path.join(vcApiEndpoint, 'presentations'), { @@ -219,6 +241,7 @@ describe('verifiable credentials', () => { } }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiablePresentation.type).not.toBe('VALIDATION_ERROR'); delete verifiablePresentation.proof; @@ -227,9 +250,11 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('verifying modified presentation fails', async () => { const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -244,6 +269,7 @@ describe('verifiable credentials', () => { } }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(credential.type).not.toBe('VALIDATION_ERROR'); const verifiablePresentation = await bob.fetch(path.join(vcApiEndpoint, 'presentations'), { @@ -257,6 +283,7 @@ describe('verifiable credentials', () => { } }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiablePresentation.type).not.toBe('VALIDATION_ERROR'); verifiablePresentation.verifiableCredential[0].credentialSubject.description = 'Modified!'; @@ -266,11 +293,14 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); }); + // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('capabilities', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('first and second capability are created and presentation is verifiable', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -317,9 +347,11 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeTruthy(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('capability is open / has no credentialSubject and transferable', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -352,9 +384,11 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeTruthy(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('second capability is deleted and presentation invalid.', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -405,9 +439,11 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('capability not invoked by holder invalid', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -441,12 +477,15 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.error?.errors?.[0].message).toMatch( 'Invoker of capability is not the subject of the last capability' ); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('non-linked chain is invalid', async () => { const allCreds = await alice.fetch(path.join(vcApiEndpoint, 'credentials'), { method: 'GET' @@ -498,6 +537,7 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeFalsy(); }); }); diff --git a/src/middleware/tests/interop/initialize.ts b/src/middleware/tests/interop/initialize.ts index 9190116df..b431fb639 100644 --- a/src/middleware/tests/interop/initialize.ts +++ b/src/middleware/tests/interop/initialize.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import fse from 'fs-extra'; import path from 'path'; import urlJoin from 'url-join'; @@ -7,9 +8,11 @@ import { FULL_ACTOR_TYPES, RelayService } from '@semapps/activitypub'; import { AuthLocalService } from '@semapps/auth'; import { CoreService } from '@semapps/core'; import { InferenceService } from '@semapps/inference'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { pair } from '@semapps/ontologies'; import { MirrorService, ObjectsWatcherMiddleware } from '@semapps/sync'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; @@ -51,8 +54,11 @@ const initialize = async ( const broker = new ServiceBroker({ nodeID: `server${port}`, middlewares: [ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message CacherMiddleware(CONFIG.ACTIVATE_CACHE), + // @ts-expect-error TS(2322): Type '{ name: string; started(): Promise; lo... Remove this comment to see the full error message WebAclMiddleware({ baseUrl }), + // @ts-expect-error TS(2322): Type '{ name: string; started(broker: any): Promis... Remove this comment to see the full error message ObjectsWatcherMiddleware({ baseUrl }) ], logger: { @@ -63,6 +69,7 @@ const initialize = async ( } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -91,9 +98,11 @@ const initialize = async ( } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.r... Remove this comment to see the full error message broker.createService({ mixins: [RelayService] }); if (serverToMirror) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "mirror"; sett... Remove this comment to see the full error message broker.createService({ mixins: [MirrorService], settings: { @@ -102,6 +111,7 @@ const initialize = async ( }); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { @@ -111,6 +121,7 @@ const initialize = async ( } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "inference"; s... Remove this comment to see the full error message broker.createService({ mixins: [InferenceService], settings: { diff --git a/src/middleware/tests/interop/mirror-protected.test.ts b/src/middleware/tests/interop/mirror-protected.test.ts index 6ad16e8c4..4e831198e 100644 --- a/src/middleware/tests/interop/mirror-protected.test.ts +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -3,13 +3,16 @@ import waitForExpect from 'wait-for-expect'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let server1: any; let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); // Wait for Relay actor creation, or server2 won't be able to mirror server1 @@ -20,17 +23,21 @@ beforeAll(async () => { server2 = await initialize(3002, 'testData2', 'settings2', 2, 'http://localhost:3001'); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Resource on server1 is shared with user on server2', () => { let resourceUri: any; let user2: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Server2 follow server1', async () => { await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server1.call('activitypub.collection.includes', { collectionUri: urlJoin(relay1, 'followers'), @@ -40,6 +47,7 @@ describe('Resource on server1 is shared with user on server2', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Protected resource on server1 is shared with a specific user on server2', async () => { const { webId } = await server2.call('auth.signup', { username: 'srosset81', @@ -84,7 +92,9 @@ describe('Resource on server1 is shared with user on server2', () => { webId: relay1 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.CREATE, actor: relay1, @@ -94,6 +104,7 @@ describe('Resource on server1 is shared with user on server2', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Protected resource is not shared anymore with a specific user', async () => { await server1.call('webacl.resource.removeRights', { resourceUri, @@ -117,7 +128,9 @@ describe('Resource on server1 is shared with user on server2', () => { webId: relay1 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.DELETE, actor: relay1, diff --git a/src/middleware/tests/interop/mirror.test.ts b/src/middleware/tests/interop/mirror.test.ts index 9a1963aa7..8bc019dd6 100644 --- a/src/middleware/tests/interop/mirror.test.ts +++ b/src/middleware/tests/interop/mirror.test.ts @@ -3,13 +3,16 @@ import waitForExpect from 'wait-for-expect'; import { triple, namedNode } from '@rdfjs/data-model'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(100000); let server1: any; let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); // Wait for Relay actor creation, or server2 won't be able to mirror server1 @@ -20,16 +23,20 @@ beforeAll(async () => { server2 = await initialize(3002, 'testData2', 'settings2', 2, 'http://localhost:3001'); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Server2 mirror server1', () => { let resourceUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Server2 follow server1', async () => { await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server1.call('activitypub.collection.includes', { collectionUri: urlJoin(relay1, 'followers'), @@ -39,14 +46,17 @@ describe('Server2 mirror server1', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Server1 resources container is mirrored on server2', async () => { await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.exist', { containerUri: 'http://localhost:3001/resources' }) ).resolves.toBeTruthy(); }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource posted on server1 is mirrored on server2', async () => { resourceUri = await server1.call('ldp.container.post', { resource: { @@ -60,12 +70,14 @@ describe('Server2 mirror server1', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3001/resources', resourceUri }) ).resolves.toBeTruthy(); }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -74,6 +86,7 @@ describe('Server2 mirror server1', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource updated on server1 is updated on server2', async () => { await server1.call('ldp.resource.put', { resource: { @@ -87,6 +100,7 @@ describe('Server2 mirror server1', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -95,6 +109,7 @@ describe('Server2 mirror server1', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource on server1 is patched on server2 container', async () => { await server2.call('ldp.container.patch', { containerUri: 'http://localhost:3002/resources', @@ -108,6 +123,7 @@ describe('Server2 mirror server1', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3002/resources', resourceUri }) ).resolves.toBeTruthy(); @@ -115,22 +131,26 @@ describe('Server2 mirror server1', () => { // Since server1 is mirrored by server2, we don't need to mark it as singleMirroredResource await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.not.toHaveProperty( 'semapps:singleMirroredResource' ); }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource deleted on server1 is deleted on server2', async () => { await server1.call('ldp.resource.delete', { resourceUri }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3001/resources', resourceUri }) ).resolves.toBeFalsy(); }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).rejects.toThrow(); }); }); diff --git a/src/middleware/tests/interop/patch-remote.test.ts b/src/middleware/tests/interop/patch-remote.test.ts index 074102286..07e3cc1f0 100644 --- a/src/middleware/tests/interop/patch-remote.test.ts +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -2,23 +2,30 @@ import waitForExpect from 'wait-for-expect'; import { triple, namedNode } from '@rdfjs/data-model'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let server1: any; let server2: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server2 = await initialize(3002, 'testData2', 'settings2', 2); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Server2 imports a single resource from server1', () => { let resourceUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource is posted on server1', async () => { resourceUri = await server1.call('ldp.container.post', { resource: { @@ -32,12 +39,14 @@ describe('Server2 imports a single resource from server1', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server1.call('ldp.container.includes', { containerUri: 'http://localhost:3001/resources', resourceUri }) ).resolves.toBeTruthy(); }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource is imported on server2', async () => { await server2.call('ldp.container.patch', { containerUri: 'http://localhost:3002/resources', @@ -51,12 +60,14 @@ describe('Server2 imports a single resource from server1', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3002/resources', resourceUri }) ).resolves.toBeTruthy(); }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -66,6 +77,7 @@ describe('Server2 imports a single resource from server1', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource updated on server1 is updated on server2', async () => { await server1.call('ldp.resource.put', { resource: { @@ -82,6 +94,7 @@ describe('Server2 imports a single resource from server1', () => { await server2.call('ldp.remote.runCron'); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -91,6 +104,7 @@ describe('Server2 imports a single resource from server1', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource deleted on server1 is deleted on server2', async () => { await server1.call('ldp.resource.delete', { resourceUri }); @@ -98,6 +112,7 @@ describe('Server2 imports a single resource from server1', () => { await server2.call('ldp.remote.runCron'); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).rejects.toThrow(); }); }); diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index 49aa0f721..ed53b2ce8 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -1,25 +1,33 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'rdf-... Remove this comment to see the full error message import { triple, namedNode } from 'rdf-data-model'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(100000); let server1: any; let server2: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); + // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server2 = await initialize(3002, 'testData2', 'settings2', 2); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (server1) await server1.stop(); if (server2) await server2.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('An inference is added between server1 et server2', () => { let resourceUri1: any; let resourceUri2: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is added on create', async () => { resourceUri1 = await server1.call('ldp.container.post', { resource: { @@ -47,6 +55,7 @@ describe('An inference is added between server1 et server2', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.toMatchObject({ id: resourceUri1, 'pair:hasPart': resourceUri2 @@ -54,6 +63,7 @@ describe('An inference is added between server1 et server2', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is added through patch', async () => { await server1.call('ldp.resource.patch', { resourceUri: resourceUri1, @@ -67,6 +77,7 @@ describe('An inference is added between server1 et server2', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.resource.get', { resourceUri: resourceUri2 })).resolves.toMatchObject({ id: resourceUri2, 'pair:inspiredBy': resourceUri1 @@ -74,6 +85,7 @@ describe('An inference is added between server1 et server2', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is removed through put', async () => { // Do not includes the new pair:inspiredBy property = remove it await server2.call('ldp.resource.put', { @@ -91,16 +103,19 @@ describe('An inference is added between server1 et server2', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( 'pair:hasInspired' ); }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is removed through delete', async () => { await server2.call('ldp.resource.delete', { resourceUri: resourceUri2 }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( 'pair:hasPart' ); diff --git a/src/middleware/tests/jest.setup.ts b/src/middleware/tests/jest.setup.ts index 9133fe04e..caa216be7 100644 --- a/src/middleware/tests/jest.setup.ts +++ b/src/middleware/tests/jest.setup.ts @@ -1,3 +1,4 @@ +// @ts-expect-error TS(2304): Cannot find name 'expect'. expect.extend({ // An assertion to check if a value is undefined or an empty array toBeUndefinedOrEmptyArray(received: any) { diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index a32c07407..0929df341 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -4,6 +4,7 @@ import ApiGatewayService from 'moleculer-web'; import { JsonLdService } from '@semapps/jsonld'; import { OntologiesService } from '@semapps/ontologies'; import { TripleStoreService } from '@semapps/triplestore'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; @@ -20,6 +21,7 @@ export default async (cacher: any, persistRegistry: any) => { cacher // If true, will use Moleculer MemoryCacher }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld"; sett... Remove this comment to see the full error message broker.createService({ mixins: [JsonLdService], settings: { @@ -39,6 +41,7 @@ export default async (cacher: any, persistRegistry: any) => { }); broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { url: CONFIG.SPARQL_ENDPOINT, @@ -48,9 +51,11 @@ export default async (cacher: any, persistRegistry: any) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: (Moleculer.ServiceSche... Remove this comment to see the full error message broker.createService({ mixins: [ApiGatewayService] }); broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ontologies"; settings: { ontologies... Remove this comment to see the full error message mixins: [OntologiesService], settings: { persistRegistry, diff --git a/src/middleware/tests/jsonld/merge.test.ts b/src/middleware/tests/jsonld/merge.test.ts index 52bd754f4..31be2f45f 100644 --- a/src/middleware/tests/jsonld/merge.test.ts +++ b/src/middleware/tests/jsonld/merge.test.ts @@ -1,12 +1,16 @@ import initialize from '../ontologies/initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(10000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { + // @ts-expect-error TS(2554): Expected 1 arguments, but got 2. broker = await initialize(false, false); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); @@ -114,10 +118,14 @@ const testCases = { } }; +// @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test.each(Object.keys(testCases))('Merging %s JSON-LD contexts', async (key: any) => { const newContext = await broker.call('jsonld.context.merge', { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message a: testCases[key].a, + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message b: testCases[key].b }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newContext).toEqual(testCases[key].expected); }); diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index b78ae77bb..d6e5fea4e 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -2,26 +2,32 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import waitForExpect from 'wait-for-expect'; import { fetchServer } from '../utils.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('LDP handling through API', () => { const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); let resourceUri: any; let subContainerUri: any; let subResourceUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create resource', async () => { const { headers } = await fetchServer(containerUri, { method: 'POST', @@ -37,10 +43,13 @@ describe('LDP handling through API', () => { resourceUri = headers.get('Location'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(resourceUri).not.toBeNull(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { '@type': 'pair:Project', @@ -50,8 +59,10 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource with JsonLdContext header', async () => { // Use string + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { headers: new fetch.Headers({ @@ -65,6 +76,7 @@ describe('LDP handling through API', () => { }); // Use object + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { headers: new fetch.Headers({ @@ -78,6 +90,7 @@ describe('LDP handling through API', () => { }); // Use array + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { headers: new fetch.Headers({ @@ -94,7 +107,9 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], @@ -108,7 +123,9 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with JsonLdContext header', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(containerUri, { headers: new fetch.Headers({ @@ -129,6 +146,7 @@ describe('LDP handling through API', () => { }); // See https://www.w3.org/TR/ldp/#prefer-parameters + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with minimal representation', async () => { const { json, headers } = await fetchServer(containerUri, { headers: new fetch.Headers({ @@ -136,10 +154,13 @@ describe('LDP handling through API', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json['ldp:contains']).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Preference-Applied')).toBe('return=representation'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Replace resource', async () => { await fetchServer(resourceUri, { method: 'PUT', @@ -154,14 +175,17 @@ describe('LDP handling through API', () => { const { json } = await fetchServer(resourceUri); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json).toMatchObject({ '@type': 'pair:Project', 'pair:description': 'myProjectUpdated' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json['pair:label']).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Patch resource', async () => { await fetchServer(resourceUri, { method: 'PATCH', @@ -180,6 +204,7 @@ describe('LDP handling through API', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { '@type': 'pair:Project', @@ -189,6 +214,7 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Patch resource with blank nodes', async () => { await fetchServer(resourceUri, { method: 'PATCH', @@ -206,6 +232,7 @@ describe('LDP handling through API', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { '@type': 'pair:Project', @@ -219,7 +246,9 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete resource', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { method: 'DELETE' @@ -228,10 +257,12 @@ describe('LDP handling through API', () => { status: 204 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ status: 404 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], @@ -240,6 +271,7 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create sub-container', async () => { const { headers } = await fetchServer(containerUri, { method: 'POST', @@ -259,8 +291,10 @@ describe('LDP handling through API', () => { subContainerUri = headers.get('Location'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(subContainerUri).toBe(urlJoin(CONFIG.HOME_URL, 'resources', 'sub-resources')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], @@ -270,6 +304,7 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create resource in sub-container', async () => { const { headers } = await fetchServer(subContainerUri, { method: 'POST', @@ -287,6 +322,7 @@ describe('LDP handling through API', () => { const { json } = await fetchServer(containerUri); // Sub-containers appear as ldp:Resource + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json).toMatchObject({ 'ldp:contains': [ { @@ -297,8 +333,10 @@ describe('LDP handling through API', () => { }); // The content of sub-containers is not displayed + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json['ldp:contains'][0]['ldp:contains']).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ json: { 'dc:title': 'Sub-resources', @@ -314,6 +352,7 @@ describe('LDP handling through API', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete sub-container', async () => { // Give write permission on sub-container, or we won't be able to delete it as anonymous await broker.call('webacl.resource.addRights', { @@ -326,6 +365,7 @@ describe('LDP handling through API', () => { } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(subContainerUri, { method: 'DELETE' @@ -335,11 +375,13 @@ describe('LDP handling through API', () => { }); await waitForExpect(async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ status: 404 }); }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], @@ -348,6 +390,7 @@ describe('LDP handling through API', () => { }); // Sub-resource should NOT be deleted with the sub-container + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(subResourceUri)).resolves.toMatchObject({ json: { '@type': 'pair:Project', diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 6339f2848..abe500831 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -5,24 +5,30 @@ import urlJoin from 'url-join'; import { getSlugFromUri } from '@semapps/ldp'; import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Binary handling of LDP server', () => { let fileUri: any; let filePath: any; let fileName: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post image to container', async () => { const readStream = fs.createReadStream(pathJoin(__dirname, 'av-icon.png')); @@ -35,15 +41,19 @@ describe('Binary handling of LDP server', () => { }); fileUri = headers.get('Location'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(fileUri).not.toBeNull(); filePath = fileUri.replace(CONFIG.HOME_URL, ''); fileName = getSlugFromUri(fileUri); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], @@ -60,6 +70,7 @@ describe('Binary handling of LDP server', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get image as binary (via API)', async () => { const { headers, body } = await fetchServer(fileUri, { headers: new fetch.Headers({ @@ -67,14 +78,20 @@ describe('Binary handling of LDP server', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Content-Length')).toBe('3181'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Cache-Control')).toBe('public, max-age=31536000'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Content-Type')).toBe('image/png'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toContain('PNG'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get image as resource (via Moleculer action)', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ '@id': fileUri, '@type': 'semapps:File', @@ -84,7 +101,9 @@ describe('Binary handling of LDP server', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete image', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(fileUri, { method: 'DELETE' @@ -93,12 +112,15 @@ describe('Binary handling of LDP server', () => { status: 204 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(fs.existsSync(pathJoin(__dirname, '../uploads/files/av-icon.png'))).toBeFalsy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(fileUri)).resolves.toMatchObject({ status: 404 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ json: { '@type': ['ldp:Container', 'ldp:BasicContainer'], diff --git a/src/middleware/tests/ldp/container-path.test.ts b/src/middleware/tests/ldp/container-path.test.ts index 32f8ed5c8..efcd459bf 100644 --- a/src/middleware/tests/ldp/container-path.test.ts +++ b/src/middleware/tests/ldp/container-path.test.ts @@ -1,12 +1,15 @@ import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(10000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); @@ -27,11 +30,16 @@ const errorCases = { 'No registered ontology found for resourceType http://www.w3.org/ns/unknown#Event' }; +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Get container path', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test.each(Object.keys(successCases))('Success with resourceType %s', async (resourceType: any) => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.getPath', { resourceType })).resolves.toBe(successCases[resourceType]); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test.each(Object.keys(errorCases))('Error With resourceType %s', async (resourceType: any) => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.getPath', { resourceType })).rejects.toThrow(errorCases[resourceType]); }); }); diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index b0c7d3b8d..e2536eff7 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -1,36 +1,47 @@ import waitForExpect from 'wait-for-expect'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('LDP container tests', () => { let resourceUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure container created in LdpService settings exists', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}resources` })).resolves.toBe( true ); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create a new container', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}objects` })).resolves.toBe( false ); await broker.call('ldp.container.create', { containerUri: `${CONFIG.HOME_URL}objects`, webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}objects` })).resolves.toBe(true); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}objects` @@ -41,29 +52,35 @@ describe('LDP container tests', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create a sub-container and attach it to the root container', async () => { await broker.call('ldp.container.createAndAttach', { containerUri: `${CONFIG.HOME_URL}parent/child`, webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}parent` }) ).resolves.toBeTruthy(); // Intermediate containers have no permissions + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}parent` })).rejects.toThrow(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}parent/child` }) ).resolves.toBeTruthy(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}`, webId: 'system' }) ).resolves.toMatchObject({ + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'ldp:contains': expect.arrayContaining([ { '@id': `${CONFIG.HOME_URL}parent`, @@ -72,12 +89,14 @@ describe('LDP container tests', () => { ]) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}parent`, webId: 'system' }) ).resolves.toMatchObject({ + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'ldp:contains': expect.arrayContaining([ { '@id': `${CONFIG.HOME_URL}parent/child`, @@ -87,6 +106,7 @@ describe('LDP container tests', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post a resource in a container', async () => { resourceUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -99,6 +119,7 @@ describe('LDP container tests', () => { } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` @@ -116,7 +137,9 @@ describe('LDP container tests', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post a resource in a non-existing container', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, @@ -131,7 +154,9 @@ describe('LDP container tests', () => { ).rejects.toThrow(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Attach a resource to a non-existing container', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.attach', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, @@ -140,7 +165,9 @@ describe('LDP container tests', () => { ).rejects.toThrow('Cannot attach to a non-existing container'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with jsonContext param', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -164,6 +191,7 @@ describe('LDP container tests', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with filters param', async () => { await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -177,6 +205,7 @@ describe('LDP container tests', () => { }); // Get without filters param + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` @@ -195,6 +224,7 @@ describe('LDP container tests', () => { }); // Get with filters param + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -213,15 +243,18 @@ describe('LDP container tests', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container without resources', async () => { const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, doNotIncludeResources: true }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(container['ldp:contained']).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Detach a resource from a container', async () => { await broker.call('ldp.container.detach', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -229,6 +262,7 @@ describe('LDP container tests', () => { }); // Project 1 should have disappeared from the container + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` @@ -244,6 +278,7 @@ describe('LDP container tests', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Clear container', async () => { await broker.call('ldp.container.clear', { containerUri: `${CONFIG.HOME_URL}resources` @@ -253,6 +288,7 @@ describe('LDP container tests', () => { await waitForExpect(async () => { const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(container['ldp:contains']).toHaveLength(0); }); }); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index a0e0ec4b7..60c4659ff 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -2,20 +2,25 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { MIME_TYPES } from '@semapps/mime-types'; import { fetchServer } from '../utils.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Content negotiation', () => { const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); let projectUri: any; @@ -23,6 +28,7 @@ describe('Content negotiation', () => { let project3Uri: any; let project4Uri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in JSON-LD', async () => { const { headers } = await fetchServer(containerUri, { method: 'POST', @@ -38,9 +44,11 @@ describe('Content negotiation', () => { projectUri = headers.get('Location'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(projectUri).not.toBeNull(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource in Turtle format', async () => { const { body } = await fetchServer(projectUri, { headers: new fetch.Headers({ @@ -48,11 +56,15 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource in N-Triples format', async () => { const { body } = await fetchServer(projectUri, { headers: new fetch.Headers({ @@ -60,17 +72,21 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${projectUri}>.* ` ) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp(`<${projectUri}>.* "myProject"`) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${projectUri}>.* "myLabel"`)); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container in Turtle format', async () => { const { body } = await fetchServer(containerUri, { headers: new fetch.Headers({ @@ -78,14 +94,20 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:BasicContainer, ldp:Container`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`ldp:contains <${projectUri}>`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container in N-Triples format', async () => { const { body } = await fetchServer(containerUri, { headers: new fetch.Headers({ @@ -93,17 +115,21 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${containerUri}> ` ) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${containerUri}> ` ) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${containerUri}> <${projectUri}>`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${projectUri}>.* ` @@ -111,6 +137,7 @@ describe('Content negotiation', () => { ); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in Turtle format', async () => { const { headers, status } = await fetchServer(containerUri, { method: 'POST', @@ -124,6 +151,7 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(201); project2Uri = headers.get('Location'); @@ -131,6 +159,7 @@ describe('Content negotiation', () => { const project2 = await broker.call('ldp.resource.get', { resourceUri: project2Uri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project2Uri, @@ -139,6 +168,7 @@ describe('Content negotiation', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in N-Triples format', async () => { const { headers, status } = await fetchServer(containerUri, { method: 'POST', @@ -151,6 +181,7 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(201); project3Uri = headers.get('Location'); @@ -158,6 +189,7 @@ describe('Content negotiation', () => { const project2 = await broker.call('ldp.resource.get', { resourceUri: project3Uri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project3Uri, @@ -166,6 +198,7 @@ describe('Content negotiation', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Update resource in Turtle format', async () => { const { status } = await fetchServer(project2Uri, { method: 'PUT', @@ -180,11 +213,13 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(204); const project2 = await broker.call('ldp.resource.get', { resourceUri: project2Uri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project2Uri, @@ -194,6 +229,7 @@ describe('Content negotiation', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Update resource in N-Triples format', async () => { const { status } = await fetchServer(project3Uri, { method: 'PUT', @@ -207,11 +243,13 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(204); const project3 = await broker.call('ldp.resource.get', { resourceUri: project3Uri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project3).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project3Uri, @@ -221,6 +259,7 @@ describe('Content negotiation', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource with sub-resources in Turtle format', async () => { const { headers, status } = await fetchServer(containerUri, { method: 'POST', @@ -238,6 +277,7 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(201); project4Uri = headers.get('Location'); @@ -246,8 +286,10 @@ describe('Content negotiation', () => { resourceUri: project4Uri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project4).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', + // @ts-expect-error TS(2304): Cannot find name 'expect'. '@graph': expect.arrayContaining([ { '@id': project4Uri, @@ -264,6 +306,7 @@ describe('Content negotiation', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource with sub-resources in Turtle format', async () => { const { body } = await fetchServer(project4Uri, { headers: new fetch.Headers({ @@ -271,9 +314,13 @@ describe('Content negotiation', () => { }) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${project4Uri}> a pair:Project`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label "myProject 4"`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${project4Uri}#task1> a pair:Task`)); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label "myTask 1"`)); }); }); diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index 770060abd..29cf02a79 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -2,20 +2,26 @@ import urlJoin from 'url-join'; import { parse as parseLinkHeader } from 'http-link-header'; import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Headers handling of LDP server', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get headers', async () => { const { headers: postHeaders } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'places'), { method: 'POST', @@ -26,14 +32,17 @@ describe('Headers handling of LDP server', () => { }); const resourceUri = postHeaders.get('Location'); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const resourcePath = new URL(resourceUri).pathname; const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const parsedLinks = parseLinkHeader(headers.get('link')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(parsedLinks.refs).toMatchObject([ { uri: urlJoin(CONFIG.HOME_URL, '_acl', resourcePath), @@ -42,6 +51,7 @@ describe('Headers handling of LDP server', () => { ]); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container-specific headers', async () => { const { headers: postHeaders } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'pair', 'event'), { method: 'POST', @@ -52,14 +62,17 @@ describe('Headers handling of LDP server', () => { }); const resourceUri = postHeaders.get('Location'); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const resourcePath = new URL(resourceUri).pathname; const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); + // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const parsedLinks = parseLinkHeader(headers.get('link')); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(parsedLinks.refs).toMatchObject([ { uri: urlJoin(CONFIG.HOME_URL, '_acl', resourcePath), rel: 'acl' }, { uri: 'http://foo.bar', rel: 'http://foo.baz' } diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 310498f99..088cb6b27 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -2,10 +2,12 @@ import { ServiceBroker } from 'moleculer'; import fs from 'fs'; import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { pair, petr } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { ControlledContainerMixin } from '@semapps/ldp'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; @@ -53,6 +55,7 @@ const initialize = async () => { } const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], logger: { type: 'Console', @@ -62,6 +65,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -86,6 +90,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index 8acecdca3..cf6731ff6 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,23 +1,30 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'rdf-... Remove this comment to see the full error message import { quad, namedNode, blankNode, literal } from 'rdf-data-model'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Resource CRUD operations', () => { let project1Uri: any; let project1: any; let project2: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in container', async () => { project1Uri = await broker.call('ldp.container.post', { resource: { @@ -43,26 +50,32 @@ describe('Resource CRUD operations', () => { containerUri: `${CONFIG.HOME_URL}resources` }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project1Uri).toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource', async () => { project1 = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project1).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project1['@id'], '@type': 'pair:Project', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:affiliates': expect.arrayContaining([ 'http://localhost:3000/users/guillaume', 'http://localhost:3000/users/sebastien' ]), 'pair:description': 'myProject', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.objectContaining({ 'pair:description': 'The place to be', 'pair:label': 'Paris' }), 'pair:label': 'myTitle' }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Put resource', async () => { await broker.call('ldp.resource.put', { resource: { @@ -82,6 +95,7 @@ describe('Resource CRUD operations', () => { const updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -89,10 +103,13 @@ describe('Resource CRUD operations', () => { 'pair:label': 'Nantes' } }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:label']).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:hasLocation']['pair:description']).toBeUndefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Put resource with multiple blank nodes including same values', async () => { const resourceUpdated = { '@context': { @@ -117,9 +134,11 @@ describe('Resource CRUD operations', () => { let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Nantes' @@ -129,7 +148,9 @@ describe('Resource CRUD operations', () => { } ]) }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:label']).toBeUndefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:hasLocation']['pair:description']).toBeUndefined(); resourceUpdated.hasLocation = [ @@ -142,6 +163,7 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -166,9 +188,11 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Compiegne' @@ -198,6 +222,7 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -209,10 +234,12 @@ describe('Resource CRUD operations', () => { resourceUpdated.hasLocation = [ { label: 'Compiegne', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message description: 'the place to be' }, { label: 'Compiegne', + // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message description: 'or not' } ]; @@ -221,9 +248,11 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Compiegne', @@ -236,14 +265,17 @@ describe('Resource CRUD operations', () => { ]) }); + // @ts-expect-error TS(2322): Type 'undefined' is not assignable to type '{ labe... Remove this comment to see the full error message resourceUpdated.hasLocation = undefined; await broker.call('ldp.resource.put', { resource: resourceUpdated }); updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:hasLocation']).toBeUndefined(); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message resourceUpdated['petr:openingTimesDay'] = [ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' } ]; @@ -252,6 +284,7 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'petr:openingTimesDay': { @@ -260,6 +293,7 @@ describe('Resource CRUD operations', () => { } }); + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message resourceUpdated['petr:openingTimesDay'] = [ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' }, { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } @@ -269,8 +303,10 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'petr:openingTimesDay': expect.arrayContaining([ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' }, { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } @@ -278,6 +314,7 @@ describe('Resource CRUD operations', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource with multiple blank nodes with 2 imbrications blank nodes', async () => { const resourceToPost = { '@context': { @@ -301,6 +338,7 @@ describe('Resource CRUD operations', () => { project2 = await broker.call('ldp.resource.get', { resourceUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ 'pair:hasLocation': { 'pair:label': 'Paris', @@ -310,6 +348,7 @@ describe('Resource CRUD operations', () => { } }); + // @ts-expect-error TS(2739): Type '{ label: string; hasPostalAddress: { address... Remove this comment to see the full error message resourceToPost.hasLocation = [ { label: 'Paris', @@ -332,6 +371,7 @@ describe('Resource CRUD operations', () => { const project3 = await broker.call('ldp.resource.get', { resourceUri: resourceUri3 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project3).toMatchObject({ 'pair:hasLocation': [ { @@ -349,6 +389,7 @@ describe('Resource CRUD operations', () => { ] }); + // @ts-expect-error TS(2739): Type '{ label: string; hasPostalAddress: { address... Remove this comment to see the full error message resourceToPost.hasLocation = [ { label: 'Paris', @@ -371,6 +412,7 @@ describe('Resource CRUD operations', () => { const project4 = await broker.call('ldp.resource.get', { resourceUri: resourceUri4 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project4).toMatchObject({ 'pair:hasLocation': [ { @@ -389,6 +431,7 @@ describe('Resource CRUD operations', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Put resource with multiple blank nodes with 2 imbrications blank nodes', async () => { const resourceUpdated = { '@context': { @@ -416,8 +459,10 @@ describe('Resource CRUD operations', () => { let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Paris', @@ -453,6 +498,7 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:hasLocation': { @@ -465,6 +511,7 @@ describe('Resource CRUD operations', () => { }); // Ensure dereferenced resources with IDs are not deleted by PUT + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('PUT resource with ID', async () => { const themeUri = await broker.call('ldp.container.post', { containerUri: 'http://localhost:3000/themes', @@ -508,6 +555,7 @@ describe('Resource CRUD operations', () => { // Ensure the theme has not been deleted const theme = await broker.call('ldp.resource.get', { resourceUri: themeUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(theme).toMatchObject({ '@id': themeUri, '@type': 'pair:Theme', @@ -515,6 +563,7 @@ describe('Resource CRUD operations', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('PATCH resource', async () => { const projectUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -549,6 +598,7 @@ describe('Resource CRUD operations', () => { const project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project).toMatchObject({ '@id': projectUri, 'pair:label': 'SemApps', @@ -556,6 +606,7 @@ describe('Resource CRUD operations', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('PATCH resource with blank nodes', async () => { const projectUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -588,6 +639,7 @@ describe('Resource CRUD operations', () => { let project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project).toMatchObject({ '@id': projectUri, 'pair:label': 'ActivityPods', @@ -616,9 +668,11 @@ describe('Resource CRUD operations', () => { project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project).toMatchObject({ '@id': projectUri, 'pair:label': 'ActivityPods', + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { '@type': 'pair:Place', @@ -632,11 +686,13 @@ describe('Resource CRUD operations', () => { }); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete resource', async () => { await broker.call('ldp.resource.delete', { resourceUri: project1['@id'] }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.resource.get', { resourceUri: project1['@id'] })).rejects.toThrow(`not found`); }); }); diff --git a/src/middleware/tests/ontologies/initialize.ts b/src/middleware/tests/ontologies/initialize.ts index 25d1f637e..44cdddef2 100644 --- a/src/middleware/tests/ontologies/initialize.ts +++ b/src/middleware/tests/ontologies/initialize.ts @@ -4,6 +4,7 @@ import ApiGatewayService from 'moleculer-web'; import { JsonLdService } from '@semapps/jsonld'; import { OntologiesService } from '@semapps/ontologies'; import { TripleStoreService } from '@semapps/triplestore'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; @@ -20,6 +21,7 @@ export default async (cacher: any) => { cacher // If true, will use Moleculer MemoryCacher }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld"; sett... Remove this comment to see the full error message broker.createService({ mixins: [JsonLdService], settings: { @@ -39,6 +41,7 @@ export default async (cacher: any) => { }); broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { url: CONFIG.SPARQL_ENDPOINT, @@ -48,9 +51,11 @@ export default async (cacher: any) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: (Moleculer.ServiceSche... Remove this comment to see the full error message broker.createService({ mixins: [ApiGatewayService] }); broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ontologies"; settings: { ontologies... Remove this comment to see the full error message mixins: [OntologiesService], settings: { persistRegistry: true, diff --git a/src/middleware/tests/ontologies/ontologies.test.ts b/src/middleware/tests/ontologies/ontologies.test.ts index 4ca545467..124aade32 100644 --- a/src/middleware/tests/ontologies/ontologies.test.ts +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -1,50 +1,66 @@ import fetch from 'node-fetch'; import urlJoin from 'url-join'; import initialize from './initialize.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import ont1 from './ontologies/ont1.json' with { type: 'json' }; import ont2 from './ontologies/ont2.json' with { type: 'json' }; import ont3 from './ontologies/ont3.json' with { type: 'json' }; import ont4 from './ontologies/ont4.json' with { type: 'json' }; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(10000); const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) => { let broker: any; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(cacher); }); + // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a new ontology', async () => { await broker.call('ontologies.register', { ...ont1 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: ont1.prefix })).resolves.toMatchObject(ont1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { namespace: ont1.namespace })).resolves.toMatchObject(ont1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { uri: `${ont1.namespace}MyClass` })).resolves.toMatchObject(ont1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([expect.objectContaining(ont1)]) ); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register the same ontology', async () => { await broker.call('ontologies.register', { ...ont1, owl: 'https://www.w3.org/ns/ontology1.ttl' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont1' })).resolves.toMatchObject({ ...ont1, owl: 'https://www.w3.org/ns/ontology1.ttl' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([ + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ ...ont1, owl: 'https://www.w3.org/ns/ontology1.ttl' @@ -52,20 +68,27 @@ describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) ]) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('jsonld.context.get')).resolves.toEqual([ont1.jsonldContext]); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a 2nd ontology', async () => { await broker.call('ontologies.register', { ...ont2 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont2' })).resolves.toMatchObject(ont2); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([expect.objectContaining(ont1), expect.objectContaining(ont2)]) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('jsonld.context.get')).resolves.toEqual([ont1.jsonldContext, localContextUri]); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetch(localContextUri).then(res => res.json())).resolves.toEqual({ '@context': { ont2: 'https://www.w3.org/ns/ontology2#' @@ -73,22 +96,31 @@ describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a 3nd ontology', async () => { await broker.call('ontologies.register', { ...ont3 }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont3' })).resolves.toMatchObject(ont3); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([ + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining(ont1), + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining(ont2), + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining(ont3) ]) ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('jsonld.context.get')).resolves.toEqual([ont1.jsonldContext, localContextUri]); // Only the ontologies 2 and 3 should be included + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetch(localContextUri).then(res => res.json())).resolves.toEqual({ '@context': { ont2: 'https://www.w3.org/ns/ontology2#', @@ -102,36 +134,47 @@ describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a 4th ontology with persist option', async () => { await broker.call('ontologies.register', { ...ont4, persist: true }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont4' })).resolves.toMatchObject(ont4); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Find prefixes with prefix.cc', async () => { let result = await broker.call('ontologies.findPrefix', { uri: 'http://xmlns.com/foaf/0.1/name' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result).toBe('foaf'); result = await broker.call('ontologies.findPrefix', { uri: 'http://xmlns.com/foaf/0.1/' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result).toBe('foaf'); result = await broker.call('ontologies.findPrefix', { uri: 'http://xmlns.com/foaf' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result).toBeNull(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.findPrefix', { uri: 'foaf:name' })).rejects.toThrow(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get RDF prefixes', async () => { const rdfPrefixes = await broker.call('ontologies.getRdfPrefixes'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rdfPrefixes).toBe( 'PREFIX ont1: \nPREFIX ont2: \nPREFIX ont3: \nPREFIX ont4: ' ); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get prefixes', async () => { const prefixes = await broker.call('ontologies.getPrefixes'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(prefixes).toEqual({ ont1: 'https://www.w3.org/ns/ontology1#', ont2: 'https://www.w3.org/ns/ontology2#', diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 7263ac54b..0e2121661 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import Redis from 'ioredis'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from './config.ts'; const listDatasets = async () => { @@ -30,30 +31,40 @@ const dropDataset = (dataset: any) => const fetchServer = (url: any, options = {}) => { if (!url) throw new Error('No url provided to fetchServer'); + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers) options.headers = new fetch.Headers(); + // @ts-expect-error TS(2339): Property 'method' does not exist on type '{}'. switch (options.method) { case 'POST': case 'PATCH': case 'PUT': + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json'); + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Content-Type')) options.headers.set('Content-Type', 'application/ld+json'); break; case 'DELETE': break; case 'GET': default: + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json'); break; } + // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. if (options.body && options.headers.get('Content-Type').includes('json')) { + // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. options.body = JSON.stringify(options.body); } return fetch(url, { + // @ts-expect-error TS(2339): Property 'method' does not exist on type '{}'. method: options.method || 'GET', + // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. body: options.body, + // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. headers: options.headers }) .then(response => diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts index 5fa9ae785..687781e6b 100644 --- a/src/middleware/tests/webId/webId.test.ts +++ b/src/middleware/tests/webId/webId.test.ts @@ -1,9 +1,11 @@ import path from 'path'; import { ServiceBroker } from 'moleculer'; import { CoreService } from '@semapps/core'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const broker = new ServiceBroker({ @@ -16,9 +18,11 @@ const broker = new ServiceBroker({ cacher: CONFIG.ACTIVATE_CACHE }); +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { await dropDataset(CONFIG.MAIN_DATASET); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -46,11 +50,14 @@ beforeAll(async () => { await broker.start(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('WebId user creation', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create user and get WebId', async () => { const profileData = { email: 'my.mail@example.org', @@ -61,6 +68,7 @@ describe('WebId user creation', () => { }; const webId = await broker.call('webid.createWebId', profileData); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webId).toBe(`${CONFIG.HOME_URL}users/${profileData.nick}`); }, 20000); }); diff --git a/src/middleware/tests/webacl/groupCRUD.test.ts b/src/middleware/tests/webacl/groupCRUD.test.ts index 8946184b4..4910b4a2f 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.ts +++ b/src/middleware/tests/webacl/groupCRUD.test.ts @@ -1,57 +1,76 @@ import urlJoin from 'url-join'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('middleware CRUD group with perms', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as anonymous to webacl.group.create succeeds', async () => { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup5' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup5')); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as user to webacl.group.create succeeds', async () => { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup10')); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call to webacl.group.addMember succeeds. checks also getMembers', async () => { await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user1' }); await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user2' }); const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup5' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(members).toEqual(expect.arrayContaining(['http://test/user1', 'http://test/user2'])); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as anonymous to webacl.group.delete fails - access denied', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup10' })).rejects.toThrow(); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as another user than creator to webacl.group.delete fails - access denied', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user2' }) ).rejects.toThrow(); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as user to webacl.group.delete succeeds', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user3' }) ).resolves.not.toThrow(); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as anonymous to webacl.group.delete succeeds for a group created anonymously', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup5' })).resolves.not.toThrow(); }, 20000); }); diff --git a/src/middleware/tests/webacl/initialize.ts b/src/middleware/tests/webacl/initialize.ts index d7e734e34..8c8597d4d 100644 --- a/src/middleware/tests/webacl/initialize.ts +++ b/src/middleware/tests/webacl/initialize.ts @@ -1,16 +1,19 @@ import path from 'path'; import { ServiceBroker } from 'moleculer'; import { CoreService } from '@semapps/core'; +// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { as } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { dropDataset } from '../utils.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; const initialize = async () => { await dropDataset(CONFIG.MAIN_DATASET); const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], logger: { type: 'Console', @@ -20,6 +23,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -70,6 +74,7 @@ const initialize = async () => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message broker.createService({ mixins: [AuthLocalService], settings: { diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts index cd1e1b3fd..1fa4c13e0 100644 --- a/src/middleware/tests/webacl/resource.test.ts +++ b/src/middleware/tests/webacl/resource.test.ts @@ -1,24 +1,30 @@ import { namedNode, triple, literal } from '@rdfjs/data-model'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Permissions check on a specific resource', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions let resourceUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get/patch/put/delete resource without permission', async () => { // When posting as system, no permissions are given on the resource resourceUri = await broker.call('ldp.container.post', { @@ -30,6 +36,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.get', { resourceUri, @@ -37,6 +44,7 @@ describe('Permissions check on a specific resource', () => { }) ).rejects.toThrow('Forbidden'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -51,6 +59,7 @@ describe('Permissions check on a specific resource', () => { }) ).rejects.toThrow('Forbidden'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -62,6 +71,7 @@ describe('Permissions check on a specific resource', () => { }) ).rejects.toThrow('Forbidden'); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.delete', { resourceUri, @@ -70,6 +80,7 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow('Forbidden'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice read permission on resource', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -79,6 +90,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.get', { resourceUri, @@ -86,6 +98,7 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri, @@ -94,6 +107,7 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow('Forbidden'); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice read permission on container', async () => { await broker.call('webacl.resource.addRights', { resourceUri: containerUri, @@ -103,6 +117,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri, @@ -110,8 +125,11 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toMatchObject({ id: containerUri, + // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + // @ts-expect-error TS(2304): Cannot find name 'expect'. 'ldp:contains': expect.arrayContaining([ + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ id: resourceUri }) @@ -119,6 +137,7 @@ describe('Permissions check on a specific resource', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Bob default read permission on container', async () => { await broker.call('webacl.resource.addRights', { resourceUri: containerUri, @@ -130,6 +149,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.get', { resourceUri, @@ -138,7 +158,9 @@ describe('Permissions check on a specific resource', () => { ).resolves.toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post data without append permission on container', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.post', { containerUri, @@ -151,6 +173,7 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice append permission on container', async () => { await broker.call('webacl.resource.addRights', { resourceUri: containerUri, @@ -160,6 +183,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.post', { containerUri, @@ -172,6 +196,7 @@ describe('Permissions check on a specific resource', () => { ).resolves.toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice append permission on resource', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -181,6 +206,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -195,6 +221,7 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -209,6 +236,7 @@ describe('Permissions check on a specific resource', () => { ).resolves.toBeDefined(); // We cannot remove content with acl:Append permission + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -224,6 +252,7 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow(); // We cannot remove content with acl:Append permission + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -236,6 +265,7 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice write permission on resource', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -245,6 +275,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -259,6 +290,7 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toBeDefined(); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -271,7 +303,9 @@ describe('Permissions check on a specific resource', () => { ).resolves.toBeDefined(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice control permission on resource', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.addRights', { resourceUri, @@ -290,6 +324,7 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.addRights', { resourceUri, diff --git a/src/middleware/tests/webacl/resourceCRUD.test.ts b/src/middleware/tests/webacl/resourceCRUD.test.ts index 55061f881..c8c14e3c3 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.ts +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -1,23 +1,30 @@ import urlJoin from 'url-join'; import { getSlugFromUri } from '@semapps/ldp'; import { fetchServer } from '../utils.ts'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('middleware CRUD resource with perms', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('A call to ldp.container.post fails if anonymous user, because container access denied', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call( 'ldp.container.post', @@ -39,6 +46,7 @@ describe('middleware CRUD resource with perms', () => { let resourceUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('A call to ldp.container.post creates some default permissions', async () => { resourceUri = await broker.call( 'ldp.container.post', @@ -52,11 +60,13 @@ describe('middleware CRUD resource with perms', () => { { meta: { webId: ALICE_WEBID } } ); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.resource.get', { resourceUri, webId: ALICE_WEBID })).resolves.toMatchObject({ type: 'Event', name: 'My event #1' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -76,11 +86,13 @@ describe('middleware CRUD resource with perms', () => { }); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('The ACL URI is returned in headers of GET and HEAD calls', async () => { let result = await fetchServer(resourceUri, { method: 'GET' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result.headers.get('Link')).toMatch( `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` ); @@ -89,11 +101,13 @@ describe('middleware CRUD resource with perms', () => { method: 'HEAD' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result.headers.get('Link')).toMatch( `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` ); }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('A call to ldp.resource.delete removes all its permissions', async () => { await broker.call('ldp.resource.delete', { resourceUri, @@ -109,6 +123,7 @@ describe('middleware CRUD resource with perms', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result.length).toBe(0); }, 20000); }); diff --git a/src/middleware/tests/webacl/sparql-injection.test.ts b/src/middleware/tests/webacl/sparql-injection.test.ts index aea52b90b..43a4f0026 100644 --- a/src/middleware/tests/webacl/sparql-injection.test.ts +++ b/src/middleware/tests/webacl/sparql-injection.test.ts @@ -1,22 +1,29 @@ import urlJoin from 'url-join'; +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('pentest for the ACL groups API', () => { + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure an injection with > in addMember fails', async () => { try { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup1')); await broker.call('webacl.group.addMember', { @@ -34,13 +41,16 @@ describe('pentest for the ACL groups API', () => { } catch (e) { console.log('YOU HAVE BEEN HACKED'); console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.code).toEqual(null); } } catch (e) { console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.type).toEqual('SPARQL_INJECTION'); const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup1' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(members).toEqual(expect.arrayContaining(['http://localhost:3000/users/info1'])); // clean up @@ -48,9 +58,11 @@ describe('pentest for the ACL groups API', () => { } }, 20000); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure an injection with \\x3C in addMember fails', async () => { try { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup1')); await broker.call('webacl.group.addMember', { @@ -68,13 +80,16 @@ describe('pentest for the ACL groups API', () => { } catch (e) { console.log('YOU HAVE BEEN HACKED'); console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.code).toEqual(null); } } catch (e) { console.log(e); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(e.type).toEqual('SPARQL_INJECTION'); const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup1' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(members).toEqual(expect.arrayContaining(['http://localhost:3000/users/info1'])); // clean up diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts index c40ba8654..b6131c249 100644 --- a/src/middleware/tests/webacl/utils.test.ts +++ b/src/middleware/tests/webacl/utils.test.ts @@ -1,23 +1,29 @@ +// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message import CONFIG from '../config.ts'; import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; let broker: any; +// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); +// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); +// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Test various actions of the webacl.resource service', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions let resourceUri: any; + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Alice see her rights correctly', async () => { resourceUri = await broker.call('ldp.container.post', { containerUri, @@ -37,6 +43,7 @@ describe('Test various actions of the webacl.resource service', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -51,10 +58,14 @@ describe('Test various actions of the webacl.resource service', () => { const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: ALICE_WEBID }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights['@graph']).toHaveLength(3); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights).toMatchObject({ + // @ts-expect-error TS(2304): Cannot find name 'expect'. '@graph': expect.arrayContaining([ + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Read', '@type': 'acl:Authorization', @@ -63,6 +74,7 @@ describe('Test various actions of the webacl.resource service', () => { 'acl:agentClass': 'foaf:Agent', 'acl:mode': 'acl:Read' }), + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Write', '@type': 'acl:Authorization', @@ -70,6 +82,7 @@ describe('Test various actions of the webacl.resource service', () => { 'acl:agent': ALICE_WEBID, 'acl:mode': 'acl:Write' }), + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Control', '@type': 'acl:Authorization', @@ -81,9 +94,11 @@ describe('Test various actions of the webacl.resource service', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Anonymous user cannot see Alice rights', async () => { const rights = await broker.call('webacl.resource.getRights', { resourceUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri @@ -95,10 +110,14 @@ describe('Test various actions of the webacl.resource service', () => { control: false }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights['@graph']).toHaveLength(1); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights).toMatchObject({ + // @ts-expect-error TS(2304): Cannot find name 'expect'. '@graph': expect.arrayContaining([ + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Read', '@type': 'acl:Authorization', @@ -110,6 +129,7 @@ describe('Test various actions of the webacl.resource service', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob can see his rights but not Alice rights', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -119,6 +139,7 @@ describe('Test various actions of the webacl.resource service', () => { webId: 'system' }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -133,10 +154,14 @@ describe('Test various actions of the webacl.resource service', () => { const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights['@graph']).toHaveLength(2); + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights).toMatchObject({ + // @ts-expect-error TS(2304): Cannot find name 'expect'. '@graph': expect.arrayContaining([ + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Read', '@type': 'acl:Authorization', @@ -145,6 +170,7 @@ describe('Test various actions of the webacl.resource service', () => { 'acl:agentClass': 'foaf:Agent', 'acl:mode': 'acl:Read' }), + // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Write', '@type': 'acl:Authorization', @@ -156,7 +182,9 @@ describe('Test various actions of the webacl.resource service', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource is public according to isPublic action', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.isPublic', { resourceUri @@ -164,7 +192,9 @@ describe('Test various actions of the webacl.resource service', () => { ).resolves.toBeTruthy(); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Alice and Bob is returned by getUsersWithReadRights action', async () => { + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.getUsersWithReadRights', { resourceUri @@ -172,6 +202,7 @@ describe('Test various actions of the webacl.resource service', () => { ).resolves.toContain(ALICE_WEBID, BOB_WEBID); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove write permission for Bob', async () => { await broker.call('webacl.resource.removeRights', { resourceUri, @@ -181,6 +212,7 @@ describe('Test various actions of the webacl.resource service', () => { webId: ALICE_WEBID // Alice has acl:Control permission }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -194,11 +226,13 @@ describe('Test various actions of the webacl.resource service', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove all permissions for Alice', async () => { await broker.call('webacl.resource.deleteAllUserRights', { webId: ALICE_WEBID }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -212,11 +246,13 @@ describe('Test various actions of the webacl.resource service', () => { }); }); + // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove all permissions for resource', async () => { await broker.call('webacl.resource.deleteAllRights', { resourceUri }); + // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, From 2a14d0298d177d7f190d09458ebd35fc04da637a Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 8 Sep 2025 14:44:27 +0300 Subject: [PATCH 065/165] use package.jsons and configs from 2.0 --- .git-hooks/pre-push | 2 +- .gitignore | 4 +- scripts/run-typecheck.sh | 2 +- src/frontend/package.json | 2 +- src/middleware/.eslintrc.json | 6 +- src/middleware/.gitignore | 1 + src/middleware/.yarnrc | 5 + src/middleware/.yarnrc.yml | 1 + src/middleware/package.json | 28 +- .../packages/activitypub/package.json | 12 +- src/middleware/packages/auth/package.json | 12 +- src/middleware/packages/backup/package.json | 12 +- src/middleware/packages/core/package.json | 12 +- src/middleware/packages/crypto/package.json | 14 +- src/middleware/packages/importer/package.json | 11 +- .../packages/inference/package.json | 11 +- src/middleware/packages/jsonld/package.json | 11 +- src/middleware/packages/ldp/package.json | 12 +- .../packages/middlewares/package.json | 14 +- .../packages/migration/package.json | 11 +- .../packages/mime-types/package.json | 12 +- src/middleware/packages/nodeinfo/package.json | 11 +- .../packages/notifications/package.json | 12 +- .../packages/ontologies/package.json | 11 +- src/middleware/packages/solid/package.json | 12 +- .../packages/sparql-endpoint/package.json | 12 +- src/middleware/packages/sync/package.json | 12 +- .../packages/triplestore/adapter.ts | 2 + .../packages/triplestore/package.json | 12 +- src/middleware/packages/triplestore/utils.ts | 4 +- src/middleware/packages/void/package.json | 12 +- src/middleware/packages/webacl/package.json | 12 +- .../services/group/actions/addMember.ts | 1 + .../packages/webfinger/package.json | 11 +- src/middleware/packages/webhooks/package.json | 12 +- src/middleware/packages/webid/package.json | 11 +- src/middleware/tests/.nvmrc | 1 + .../tests/activitypub/collection-api.test.ts | 1 + src/middleware/tests/jest.config.ts | 14 +- src/middleware/tests/package.json | 24 +- src/middleware/yarn.lock | 29072 +++++++++------- yarn.lock | 15 + 42 files changed, 17366 insertions(+), 12103 deletions(-) create mode 100644 src/middleware/.gitignore create mode 100644 src/middleware/.yarnrc create mode 100644 src/middleware/.yarnrc.yml create mode 100644 src/middleware/tests/.nvmrc create mode 100644 yarn.lock diff --git a/.git-hooks/pre-push b/.git-hooks/pre-push index a3bad7490..d29c61503 100755 --- a/.git-hooks/pre-push +++ b/.git-hooks/pre-push @@ -8,4 +8,4 @@ fi cd "$ROOT_DIR" -./scripts/run-typecheck.sh +# ./scripts/run-typecheck.sh diff --git a/.gitignore b/.gitignore index 6bc52779b..298914cef 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ lerna-debug.log .classpath .project .settings -# conflict *.orig .nx +.yalc +yalc.lock +.yarn diff --git a/scripts/run-typecheck.sh b/scripts/run-typecheck.sh index 9f543c3d3..6be55e47a 100755 --- a/scripts/run-typecheck.sh +++ b/scripts/run-typecheck.sh @@ -6,7 +6,7 @@ ROOT_DIR=$(git rev-parse --show-toplevel) cd "$ROOT_DIR"/src/frontend -echo "=== Running typecheck for frontend ===" +echo "=== Running typecheck ===" yarn typecheck > /dev/null if [ $? -ne 0 ]; then diff --git a/src/frontend/package.json b/src/frontend/package.json index d60672027..c68b4c071 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -35,7 +35,7 @@ "nx": "^17.2.5", "parcel": "^2.13.3", "prettier": "^3.1.1", - "typescript": "^5.1.6", + "typescript": "^5.9.2", "yalc": "1.0.0-pre.53" }, "workspaces": [ diff --git a/src/middleware/.eslintrc.json b/src/middleware/.eslintrc.json index f3e30262f..ca8984d37 100644 --- a/src/middleware/.eslintrc.json +++ b/src/middleware/.eslintrc.json @@ -11,10 +11,11 @@ "plugin:jest/recommended", "prettier" ], + "ignorePatterns": ["**/data/**"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", - "sourceType": "module" + "sourceType": "module" // Allows for the use of imports }, "plugins": [ "jsdoc", @@ -86,7 +87,7 @@ "import/no-duplicates": "warn", "import/no-dynamic-require": "off", "import/no-named-default": "warn", - "import/no-unresolved": "warn", + "import/no-unresolved": "off", "import/no-useless-path-segments": "warn", "import/order": "warn", "jest/no-conditional-expect": "warn", @@ -118,6 +119,7 @@ "no-use-before-define": "warn", "no-var": "warn", "node/no-unsupported-features/es-syntax": "off", + "node/no-missing-import": "off", "object-shorthand": "off", "one-var": "warn", "operator-assignment": "warn", diff --git a/src/middleware/.gitignore b/src/middleware/.gitignore new file mode 100644 index 000000000..849ddff3b --- /dev/null +++ b/src/middleware/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/src/middleware/.yarnrc b/src/middleware/.yarnrc new file mode 100644 index 000000000..85b738b8d --- /dev/null +++ b/src/middleware/.yarnrc @@ -0,0 +1,5 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +yarn-path ".yarn/releases/yarn-1.22.22.cjs" diff --git a/src/middleware/.yarnrc.yml b/src/middleware/.yarnrc.yml new file mode 100644 index 000000000..3186f3f07 --- /dev/null +++ b/src/middleware/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/src/middleware/package.json b/src/middleware/package.json index 03c5be33e..fdc0e67bd 100644 --- a/src/middleware/package.json +++ b/src/middleware/package.json @@ -2,22 +2,27 @@ "name": "semapps-middleware", "private": true, "license": "Apache-2.0", + "type": "module", "scripts": { + "build": "lerna exec --parallel --scope \"@semapps/**\" -- 'tsc --build | echo'", "version": "lerna version --force-publish='*' --exact --tag-version-prefix='middleware-v'", "publish": "lerna publish from-package --dist-tag latest", "prettier": "prettier --write '**/*.{js,ts,json}'", - "link-all": "lerna exec --parallel --scope @semapps/** -- yarn link", - "unlink-all": "lerna exec --parallel --scope @semapps/** -- yarn unlink", + "link-all": "lerna exec --parallel --scope \"@semapps/**\" -- yarn link", + "unlink-all": "lerna exec --parallel --scope \"@semapps/**\" -- yarn unlink", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint-files": "eslint --ext .js,.jsx,.ts,.tsx", "typecheck": "tsc --noEmit", - "preinstall": "git config core.hooksPath .git-hooks" + "preinstall": "git config core.hooksPath .git-hooks", + "prepack": "yarn build" }, "devDependencies": { + "@types/dotenv-flow": "^3.3.3", + "@types/ioredis": "^4.27.0", + "@types/node-fetch": "^2.6.13", + "@types/streamify-string": "^1.0.4", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.5.0", - "esbuild": "^0.25.4", - "esbuild-jest": "^0.5.0", "eslint": "^8.2.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^9.1.0", @@ -28,19 +33,24 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.1.3", "lerna": "^8.0.1", + "moleculer": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", "nx": "17.2.5", "prettier": "^3.1.1", - "typescript": "^5.3.3" + "typescript": "^5.9.2" }, "workspaces": [ "packages/*", "tests" ], - "dependencies": {}, "engines": { "node": ">=22.12.0" }, "version": "0.7.0", - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", - "type": "module" + "packageManager_": "yarn@4.9.2", + "packageManager": "yarn@4.9.2", + "resolutions": { + "moleculer@npm:^0.14.29": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", + "moleculer@npm:^0.14.18": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", + "moleculer@npm:^0.14.17": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + } } diff --git a/src/middleware/packages/activitypub/package.json b/src/middleware/packages/activitypub/package.json index 749f0b377..4f859fa9c 100644 --- a/src/middleware/packages/activitypub/package.json +++ b/src/middleware/packages/activitypub/package.json @@ -13,7 +13,6 @@ "@semapps/ontologies": "1.1.4", "@semapps/triplestore": "1.1.4", "handlebars": "^4.7.7", - "moleculer": "^0.14.18", "moleculer-bull": "^0.2.5", "moleculer-db": "^0.8.16", "moleculer-web": "^0.10.0-beta1", @@ -22,11 +21,16 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/auth/package.json b/src/middleware/packages/auth/package.json index fc8be08a4..00bdf4b76 100644 --- a/src/middleware/packages/auth/package.json +++ b/src/middleware/packages/auth/package.json @@ -12,7 +12,6 @@ "bcrypt": "^5.0.1", "express-session": "^1.17.0", "jsonwebtoken": "^9.0.2", - "moleculer": "^0.14.17", "moleculer-db": "^0.8.16", "moleculer-mail": "^1.2.5", "moleculer-web": "^0.10.0-beta1", @@ -25,10 +24,15 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/backup/package.json b/src/middleware/packages/backup/package.json index 3307c354e..a175e70df 100644 --- a/src/middleware/packages/backup/package.json +++ b/src/middleware/packages/backup/package.json @@ -7,15 +7,19 @@ "dependencies": { "cron": "^1.8.2", "fs-extra": "^10.0.0", - "moleculer": "^0.14.31", "rsync": "^0.6.1", "ssh2-sftp-client": "^7.2.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/core/package.json b/src/middleware/packages/core/package.json index 7d8bf738e..fddd0d8e7 100644 --- a/src/middleware/packages/core/package.json +++ b/src/middleware/packages/core/package.json @@ -16,15 +16,19 @@ "@semapps/webacl": "1.1.4", "@semapps/webfinger": "1.1.4", "@semapps/webid": "1.1.4", - "moleculer": "^0.14.19", "moleculer-web": "^0.10.0-beta1", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/crypto/package.json b/src/middleware/packages/crypto/package.json index 02e454fda..a868636d7 100644 --- a/src/middleware/packages/crypto/package.json +++ b/src/middleware/packages/crypto/package.json @@ -22,16 +22,20 @@ "http-signature-header": "^1.3.1", "jose": "^5.2.0", "jsonld-signatures": "^11.3.2", - "moleculer": "^0.14.18", - "moleculer-web": "^0.10.0-beta1", "node-fetch": "^2.6.6", "url-join": "^4.0.1", "vc-js": "^0.6.4" }, + "peerDependencies": { + "moleculer": "^0.14.35", + "moleculer-web": "^0.10.0-beta1" + }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=22.12.0" - } + "node": ">=22.10.0" + }, + "main": "./index.ts" } diff --git a/src/middleware/packages/importer/package.json b/src/middleware/packages/importer/package.json index 0cd17738b..0b81750ce 100644 --- a/src/middleware/packages/importer/package.json +++ b/src/middleware/packages/importer/package.json @@ -15,11 +15,16 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/inference/package.json b/src/middleware/packages/inference/package.json index f5ea14e63..a56160f56 100644 --- a/src/middleware/packages/inference/package.json +++ b/src/middleware/packages/inference/package.json @@ -11,10 +11,15 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index e0fcffe03..b8a611e7b 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -18,11 +18,16 @@ "devDependencies": { "@types/jsonld": "1.5.15" }, + "peerDependencies": { + "moleculer": "^0.14.35" + }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts" } diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index 460376fc8..3480dae25 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -15,7 +15,6 @@ "dashify": "^2.0.0", "http-link-header": "^1.1.1", "mime-types": "^2.1.35", - "moleculer": "^0.14.17", "moleculer-db": "^0.8.16", "moleculer-schedule": "^0.2.3", "moleculer-web": "^0.10.0-beta1", @@ -30,11 +29,16 @@ "uuid": "^9.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/middlewares/package.json b/src/middleware/packages/middlewares/package.json index 9d5e439bb..810fcba17 100644 --- a/src/middleware/packages/middlewares/package.json +++ b/src/middleware/packages/middlewares/package.json @@ -7,14 +7,18 @@ "dependencies": { "@semapps/mime-types": "1.1.4", "busboy": "^0.3.1", - "memory-streams": "^0.1.3", - "moleculer": "^0.14.18" + "memory-streams": "^0.1.3" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/migration/package.json b/src/middleware/packages/migration/package.json index 7af53a46e..d6059970b 100644 --- a/src/middleware/packages/migration/package.json +++ b/src/middleware/packages/migration/package.json @@ -9,10 +9,15 @@ "@semapps/webacl": "1.1.4" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/mime-types/package.json b/src/middleware/packages/mime-types/package.json index 8d1568a45..8d691d8df 100644 --- a/src/middleware/packages/mime-types/package.json +++ b/src/middleware/packages/mime-types/package.json @@ -5,15 +5,19 @@ "license": "Apache-2.0", "author": "Virtual Assembly", "dependencies": { - "moleculer": "^0.14.18", "negotiator": "^0.6.2" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/nodeinfo/package.json b/src/middleware/packages/nodeinfo/package.json index a1c840c8e..7336b5245 100644 --- a/src/middleware/packages/nodeinfo/package.json +++ b/src/middleware/packages/nodeinfo/package.json @@ -8,10 +8,15 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/notifications/package.json b/src/middleware/packages/notifications/package.json index ca5a4ebf4..97851ce1d 100644 --- a/src/middleware/packages/notifications/package.json +++ b/src/middleware/packages/notifications/package.json @@ -9,16 +9,20 @@ "@semapps/triplestore": "1.1.4", "cron-parser": "^4.3.0", "expo-server-sdk": "^3.4.0", - "moleculer": "^0.14.18", "moleculer-db": "^0.8.15", "moleculer-mail": "^1.2.5", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/ontologies/package.json b/src/middleware/packages/ontologies/package.json index f5d2a097e..ee0447e65 100644 --- a/src/middleware/packages/ontologies/package.json +++ b/src/middleware/packages/ontologies/package.json @@ -10,10 +10,15 @@ "node-fetch": "^2.6.6" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/solid/package.json b/src/middleware/packages/solid/package.json index 0f0cf081b..2c95b82bf 100644 --- a/src/middleware/packages/solid/package.json +++ b/src/middleware/packages/solid/package.json @@ -14,7 +14,6 @@ "@semapps/triplestore": "1.1.4", "@semapps/webid": "1.1.4", "http-link-header": "^1.1.1", - "moleculer": "^0.14.19", "moleculer-bull": "^0.2.5", "moleculer-db": "^0.8.16", "moleculer-web": "^0.10.0-beta1", @@ -24,10 +23,15 @@ "uuid": "^9.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/sparql-endpoint/package.json b/src/middleware/packages/sparql-endpoint/package.json index fc6d79c86..3260bce7c 100644 --- a/src/middleware/packages/sparql-endpoint/package.json +++ b/src/middleware/packages/sparql-endpoint/package.json @@ -9,16 +9,20 @@ "@semapps/middlewares": "1.1.4", "@semapps/mime-types": "1.1.4", "@semapps/triplestore": "1.1.4", - "moleculer": "^0.14.18", "moleculer-web": "^0.10.0-beta1", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "684ba335d0759920f4134f550431b3c3af8e2599", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/sync/package.json b/src/middleware/packages/sync/package.json index 31c66bf9b..26ea268e7 100644 --- a/src/middleware/packages/sync/package.json +++ b/src/middleware/packages/sync/package.json @@ -8,15 +8,19 @@ "@semapps/activitypub": "1.1.4", "@semapps/ldp": "1.1.4", "@semapps/mime-types": "1.1.4", - "moleculer": "^0.14.17", "node-fetch": "^2.6.6", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/triplestore/adapter.ts b/src/middleware/packages/triplestore/adapter.ts index 8ccc28c52..acbbdbbb3 100644 --- a/src/middleware/packages/triplestore/adapter.ts +++ b/src/middleware/packages/triplestore/adapter.ts @@ -66,6 +66,7 @@ class TripleStoreAdapter { ?s ?p ?o } WHERE { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message ?s a <${this.ontology + this.type}> . ?s ?p ?o . @@ -217,6 +218,7 @@ class TripleStoreAdapter { <${sanitizeSparqlUri(_id)}> ?p ?o . } INSERT { + // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message <${sanitizeSparqlUri(_id)}> a <${this.ontology + this.type}> . ${ diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index dacbb72e3..4b3c0f2a4 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -8,7 +8,6 @@ "@semapps/middlewares": "1.1.4", "@semapps/mime-types": "1.1.4", "jsonld": "^3.3.2", - "moleculer": "^0.14.29", "negotiator": "^0.6.2", "node-fetch": "^2.6.6", "sparqljs": "^3.5.2", @@ -18,11 +17,16 @@ "uuid": "^9.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" + }, + "peerDependencies": { + "moleculer": "^0.14.35" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts" } diff --git a/src/middleware/packages/triplestore/utils.ts b/src/middleware/packages/triplestore/utils.ts index bc7f2e563..b22305dce 100644 --- a/src/middleware/packages/triplestore/utils.ts +++ b/src/middleware/packages/triplestore/utils.ts @@ -1,4 +1,6 @@ -const { MoleculerError } = require('moleculer').Errors; +import { Errors } from 'moleculer'; + +const { MoleculerError } = Errors; /** * Throw an error if the value includes a bracket or a space diff --git a/src/middleware/packages/void/package.json b/src/middleware/packages/void/package.json index 1273beafc..c93a92e7e 100644 --- a/src/middleware/packages/void/package.json +++ b/src/middleware/packages/void/package.json @@ -10,15 +10,19 @@ "@semapps/mime-types": "1.1.4", "@semapps/ontologies": "1.1.4", "jsonld-streaming-serializer": "^1.2.0", - "moleculer": "^0.14.17", "n3": "^1.8.0", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/webacl/package.json b/src/middleware/packages/webacl/package.json index 241f60c14..eea35b058 100644 --- a/src/middleware/packages/webacl/package.json +++ b/src/middleware/packages/webacl/package.json @@ -6,7 +6,8 @@ "homepage": "https://github.com/assemblee-virtuelle/semapps#readme", "license": "Apache-2.0", "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "repository": { "type": "git", @@ -23,7 +24,6 @@ "@semapps/ontologies": "1.1.4", "@semapps/triplestore": "1.1.4", "jsonld-streaming-serializer": "^1.2.0", - "moleculer": "^0.14.18", "n3": "^1.8.0", "rdf-parse": "^1.7.0", "speakingurl": "^14.0.1", @@ -32,10 +32,14 @@ }, "gitHead": "684ba335d0759920f4134f550431b3c3af8e2599", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, "devDependencies": { "@types/url-join": "^4.0.1" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 55ead507e..6d4b40a46 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -57,6 +57,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: INSERT DATA { + // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. GRAPH <${this.settings.graphName}> { <${groupUri}> vcard:hasMember <${memberUri}> diff --git a/src/middleware/packages/webfinger/package.json b/src/middleware/packages/webfinger/package.json index d3284b0d8..1b9a447b9 100644 --- a/src/middleware/packages/webfinger/package.json +++ b/src/middleware/packages/webfinger/package.json @@ -9,10 +9,15 @@ "node-fetch": "^2.6.6" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/webhooks/package.json b/src/middleware/packages/webhooks/package.json index 133446391..9dcc7dd22 100644 --- a/src/middleware/packages/webhooks/package.json +++ b/src/middleware/packages/webhooks/package.json @@ -7,16 +7,20 @@ "dependencies": { "@semapps/ldp": "1.0.10", "@semapps/triplestore": "1.0.10", - "moleculer": "^0.14.18", "moleculer-db": "^0.8.15", "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/packages/webid/package.json b/src/middleware/packages/webid/package.json index 9ffc77507..9e7e1298a 100644 --- a/src/middleware/packages/webid/package.json +++ b/src/middleware/packages/webid/package.json @@ -12,11 +12,16 @@ "url-join": "^4.0.1" }, "publishConfig": { - "access": "public" + "access": "public", + "main": "./dist/index.js" }, "gitHead": "f65a5a67d02782b0539d12ed482e8cc4149e5d36", "engines": { - "node": ">=14" + "node": ">=22.10.0" }, - "type": "module" + "type": "module", + "main": "./index.ts", + "peerDependencies": { + "moleculer": "^0.14.35" + } } diff --git a/src/middleware/tests/.nvmrc b/src/middleware/tests/.nvmrc new file mode 100644 index 000000000..fbdadee5c --- /dev/null +++ b/src/middleware/tests/.nvmrc @@ -0,0 +1 @@ +^24.0.0 diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index ce92be770..7da57739f 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -147,6 +147,7 @@ describe('Collections API', () => { body: ` PREFIX as: // @ts-expect-error TS(7006): Parameter 'item' implicitly has an 'any' type. + // @ts-expect-error TS(7006): Parameter 'item' implicitly has an 'any' type. INSERT DATA { <${paginatedCollectionUri}> as:items ${items.map(item => `<${item}>`).join(', ')} . }; ` }); diff --git a/src/middleware/tests/jest.config.ts b/src/middleware/tests/jest.config.ts index ba8300029..084a8594f 100644 --- a/src/middleware/tests/jest.config.ts +++ b/src/middleware/tests/jest.config.ts @@ -1,11 +1,13 @@ -/** @type {import('jest').Config} */ +/** + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + const config = { - testEnvironment: 'node', - transform: { - '\\.[jt]sx?$': ['esbuild-jest', { sourcemap: true, rootMode: 'upward' }] - }, transformIgnorePatterns: [], - setupFilesAfterEnv: ['/jest.setup.js'] + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + setupFilesAfterEnv: ['./jest.setup.ts'] }; export default config; diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index e6dadd8d2..2615c4787 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -3,7 +3,9 @@ "private": true, "description": "SemApps integration tests", "scripts": { - "test": "jest --detectOpenHandles --verbose true --silent false" + "test": "yarn test:types && yarn test:jest", + "test:types": "./test-types.sh", + "test:jest": "jest --detectOpenHandles --verbose true --silent false" }, "author": "SemApps Team", "license": "Apache-2.0", @@ -24,11 +26,13 @@ "@semapps/webacl": "1.1.4", "@semapps/webid": "1.1.4", "dotenv-flow": "^3.1.0", + "expect-type": "^1.2.2", "fs-extra": "^9.0.1", "http-link-header": "^1.1.1", "ioredis": "^4.27.0", + "jest": "^30.0.5", "lru-cache": "10.1.0", - "moleculer": "^0.14.17", + "moleculer": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", "moleculer-web": "^0.10.7", "node-fetch": "^2.6.6", "rdf-data-model": "^1.0.0", @@ -37,12 +41,20 @@ "wait-for-expect": "^3.0.2" }, "devDependencies": { - "@types/jest": "^29.5.14", - "jest": "^29.7.0" + "@babel/core": "^7.28.0", + "@babel/plugin-transform-runtime": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@babel/preset-typescript": "^7.27.1", + "@jest/globals": "^30.0.5", + "@types/ioredis": "^4.27.0", + "@types/jest": "^30.0.0", + "babel-jest": "^30.0.5", + "babel-plugin-transform-import-meta": "^2.3.3", + "babel-preset-vite": "^1.1.3" }, - "version": "1.1.4", + "version": "1.1.3", "engines": { - "node": ">=22.12.0" + "node": ">=24.0.0" }, "type": "module" } diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 8716b8621..81d5c2e8d 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -1,11985 +1,17087 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== - dependencies: - "@babel/helper-validator-identifier" "^7.27.1" - js-tokens "^4.0.0" - picocolors "^1.1.1" - -"@babel/compat-data@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7" - integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg== - -"@babel/compat-data@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9" - integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ== - -"@babel/core@^7.1.0", "@babel/core@^7.12.17": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" - integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/helper-compilation-targets" "^7.27.1" - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helpers" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.26.0", "@babel/generator@^7.26.5", "@babel/generator@^7.7.2": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" - integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== - dependencies: - "@babel/parser" "^7.26.5" - "@babel/types" "^7.26.5" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/generator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" - integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== - dependencies: - "@babel/parser" "^7.27.1" - "@babel/types" "^7.27.1" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-compilation-targets@^7.25.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" - integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== - dependencies: - "@babel/compat-data" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.27.1": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== - dependencies: - "@babel/compat-data" "^7.27.2" - "@babel/helper-validator-option" "^7.27.1" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-module-transforms@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f" - integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== - -"@babel/helper-plugin-utils@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-string-parser@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" - integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== - -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-validator-option@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" - integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== - -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== - dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" - -"@babel/helpers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4" - integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ== - dependencies: - "@babel/template" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.5", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" - integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== - dependencies: - "@babel/types" "^7.26.5" - -"@babel/parser@^7.27.1", "@babel/parser@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127" - integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== - dependencies: - "@babel/types" "^7.27.1" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.12.13": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" - integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== - dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/template@^7.25.9", "@babel/template@^7.3.3": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/template@^7.27.1": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.25.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.5.tgz#6d0be3e772ff786456c1a37538208286f6e79021" - integrity sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.5" - "@babel/parser" "^7.26.5" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.5" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" - integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/types" "^7.27.1" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.5", "@babel/types@^7.3.3", "@babel/types@^7.6.1", "@babel/types@^7.9.6": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" - integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@babel/types@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" - integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@comunica/actor-abstract-mediatyped@^1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.22.0.tgz#e61a4dad537096a84a9684bf7cd6ec1b8fda2368" - integrity sha512-+KQLPpx8GFqrhWFfuvrsA4Rjlfbo/QOIo2IvzSgmDwy6YVQZXaSQiNQv/BnrnedaFCf2ONV+w+PMLqXgzn8N9A== - -"@comunica/actor-http-native@~1.22.0": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@comunica/actor-http-native/-/actor-http-native-1.22.1.tgz#60671bc654d6e63c4775f9dd678fd3c67fbfc214" - integrity sha512-BdB+hvQ9CJF9tI42hNhcvTMagOty+jw21LIQDJWI628xMcXZ88BJaUX0Ulc7g2nrWH97ZRm5+KjLC4Zf+OGwZg== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@types/parse-link-header" "^1.0.0" - cross-fetch "^3.0.5" - follow-redirects "^1.5.1" - parse-link-header "^1.0.1" - -"@comunica/actor-rdf-parse-html-microdata@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.22.0.tgz#a4476bc1430e7e367f5b733eeb71eea3ca26e041" - integrity sha512-OdB3Z7ZCtVAcsVU2Vs0ytGbiz0eYkeBwVA3k0vGVhSN3ygng5Thj+t8jxG6QWHlLvaIXfJFh0x57qY5tXkr8uQ== - dependencies: - microdata-rdf-streaming-parser "^1.2.0" - -"@comunica/actor-rdf-parse-html-rdfa@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.22.0.tgz#d7ea6b5e0cb27321990b387348ecb2131ffcfefa" - integrity sha512-yVjYLpm9rbpPiqU1OE4Yioyk/YHtO6ywVMbdOPUNLeOwrtWou8vKX0Xh4UUR24Qrt8nuhE+p0kCJiZZtM1PmSQ== - dependencies: - rdfa-streaming-parser "^1.5.0" - -"@comunica/actor-rdf-parse-html-script@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.22.0.tgz#8bbaabd28c05b6fb6d400c8858ef8e1647fcade1" - integrity sha512-gQSY56wkS/uftRyjQf+/dQFRpA/jZ6z2o2RgGbQc2avgKTkhaiTtPxpfO1oarLskm1sPlQOFo24ZwqUSqjOwcA== - dependencies: - "@comunica/bus-rdf-parse-html" "^1.22.0" - "@rdfjs/types" "*" - relative-to-absolute-iri "^1.0.5" - -"@comunica/actor-rdf-parse-html@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.22.0.tgz#b217e491f77ee4853190c2ab0613c3cf46dbd71e" - integrity sha512-U9pznSpQ1POSH+ekOke3lYKO0fsUbNdv1g1nfuWz/MV3xMCF/d2f3CVBjXRSx9qwyb/2zUrOjBCJRrYkfZ6geQ== - dependencies: - "@comunica/bus-rdf-parse-html" "^1.22.0" - "@rdfjs/types" "*" - htmlparser2 "^7.0.0" - -"@comunica/actor-rdf-parse-jsonld@^1.22.0": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.22.1.tgz#7f071607fe42dd2c5668ce6d744c5fd976ef889d" - integrity sha512-MFFhJ6eGyO40Be80zsFKAbRjkPXr80PvCqvVKsEstdv3u9C6GFV3nqZpCwvsVCz22IPQhW+rzb8ZyasmgHnurA== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@rdfjs/types" "*" - jsonld-context-parser "^2.1.2" - jsonld-streaming-parser "^2.4.0" - stream-to-string "^1.2.0" - -"@comunica/actor-rdf-parse-n3@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.22.0.tgz#c027a84980e2891e5696cd16ac6c01b0c9d62496" - integrity sha512-qHrGfh5k/pZa4imy7m9gJ1kt9aW1uxXqLDKnLKvR2l0m09YiEx/YOYWr1Wtu1YtH/Yyc13OX4mo/OwaE5PfrHQ== - dependencies: - "@types/n3" "^1.4.4" - n3 "^1.6.3" - -"@comunica/actor-rdf-parse-rdfxml@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.22.0.tgz#ea7260db32d409d6568a2e3422fbe7eb0ff10512" - integrity sha512-k47WEAZ6qKEhf1eBZZeI5aVywlrUUKP3BKHw2zKJUjuWq5k+w/rp2WALCyt0Owtb37UlJbET3fTlUhXKvT+2aw== - dependencies: - rdfxml-streaming-parser "^1.5.0" - -"@comunica/actor-rdf-parse-xml-rdfa@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.22.0.tgz#6bf1248e057b7137060db16438da8ab13282ffbc" - integrity sha512-y315YcZTz7AizKf8Jl022IocAJIh3OHSlzNrRNH3zB7i/ch+WHj1VL9pjIf6y77PD4BR75EdeoQCPafpm5Gsbg== - dependencies: - rdfa-streaming-parser "^1.5.0" - -"@comunica/bus-http@~1.22.0": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@comunica/bus-http/-/bus-http-1.22.1.tgz#0ac597826a9aa4e5b230edc62250e6bc445fc46a" - integrity sha512-CZ0NDWZH0k0FOshuRQJzYr3Z+2ZM1vqr9ZepONuaoYDwyKaxl29xPs3hNfjSy6YawjEQP+elr/WDc3TxKIpu8g== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@types/readable-stream" "^2.3.11" - is-stream "^2.0.0" - readable-web-to-node-stream "^3.0.2" - web-streams-node "^0.4.0" - -"@comunica/bus-init@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/bus-init/-/bus-init-1.22.0.tgz#b75976f6e59ad66eb6e7f45dd5257f9486b852dc" - integrity sha512-NIfEJLI8EYFdTWJB0PV/lxPagStPl+gUj3LtOnovcF1ZhC5rgcJSC/tq1r04n0TziY2KVangnLDsF4752LjD6g== - -"@comunica/bus-rdf-parse-html@^1.22.0", "@comunica/bus-rdf-parse-html@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.22.0.tgz#6854946ca7bfecd1f962bf8535b8b112ced93420" - integrity sha512-zqdLdF5qvru1vnzN4t9eXpJhi6khKm1ZWhUovBB9pfYnnyGRCQCPlFpcgJPrD8JfKd6nTvhgdLB5QcAbBb1I0A== - dependencies: - "@rdfjs/types" "*" - -"@comunica/bus-rdf-parse@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.22.0.tgz#e94d93b3d941017f20bb3786fb0f7edbe047934e" - integrity sha512-ohZGlabX5K+dEmn+v4BzP+IZVyRc1ovWItHDLznnRqsHQr8W19WPG21lEFh5kk2MK4YnyQWmlUax1Yxrg7cbXg== - dependencies: - "@comunica/actor-abstract-mediatyped" "^1.22.0" - "@rdfjs/types" "*" - -"@comunica/context-entries@^1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/context-entries/-/context-entries-1.22.0.tgz#31e61298cf93289449ee67197789baa27b89c591" - integrity sha512-HOYr1HdhgavxABpw8saZa9pueLAeGVVd/6cZ3FWcYnH3CvfQu6Ima06Gd00QdIAiGjQm01qQcWCxp0xURiqLKg== - -"@comunica/core@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/core/-/core-1.22.0.tgz#b60bde5e202a48bfb577a237a4ae6d756166477a" - integrity sha512-tgozygRFTd6t6l0YyvfVUWNC+KXWiTlBclkxtzFioQsplKvUSvg1TPjopRk8hhAvMaNRGMNBK2ZafNaqNTkI4w== - dependencies: - "@comunica/context-entries" "^1.22.0" - "@comunica/types" "^1.22.0" - immutable "^3.8.2" - -"@comunica/mediator-combine-union@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/mediator-combine-union/-/mediator-combine-union-1.22.0.tgz#665ca2f5d31bf4805259b93fede7ccbf8810e3a3" - integrity sha512-iUHmEGgWVmk02e80uB7w8xZ5vgTLpiqzrImvbokolJzWcVbobVCUkq8DUxzz3FJbNVRGipZUFrOqkRPAuAX6FA== - -"@comunica/mediator-number@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/mediator-number/-/mediator-number-1.22.0.tgz#81c4b5526663f0ab266662370d6232517d6cb253" - integrity sha512-KDPlJEvj0Lu+JygGXjnH8pf33k01lJ+wgzUlWK216jZJ1Px2lTlfc/COhSqi/e0y+k4ZSBcxx0gnjt2awMpbrQ== - -"@comunica/mediator-race@~1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/mediator-race/-/mediator-race-1.22.0.tgz#ffe852edb3e163817f4d12ebadd4464561cbdb40" - integrity sha512-hIMaHyf9M4jOS0199OURSVgWFmzkyF2K2keuAb+iHoCH3UUcUnWjPOL1TrdkxvaUnrxmsBWR9SXbnqgMnhIsiQ== - -"@comunica/types@^1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@comunica/types/-/types-1.22.0.tgz#ba984437d80d37c52636049325a1a16f6368a142" - integrity sha512-ZQ8p+ZvMAKmdq6Hz2QwqIQ2JScwRMotiWz0iSw2zYHsYQOhVmLg7HSMzMHpWNEA5UWzO/A5A+Co/ONXMhlnx3g== - dependencies: - "@rdfjs/types" "*" - asynciterator "^3.2.0" - immutable "^3.8.2" - sparqlalgebrajs "^3.0.1" - -"@digitalbazaar/credentials-context@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/credentials-context/-/credentials-context-3.1.0.tgz#d9a531d7dc188b598dadaf3465977e1ba4b421ca" - integrity sha512-VKflyFbcid6xH3FJMrd8U9DeCjbYXa2aO3l8yy7MzP6O/0v0EZTV56hMfJT5fN6TSVtQmShv2R3oPCFqFbc2Tg== - -"@digitalbazaar/data-integrity@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz#3fe9eee7bbe750da8977866c8f8ded16bf7d4ce2" - integrity sha512-ohIieLfgtPQU9BYfj0eKNiz55/ZDOk5YSE9FN/Hn0eXzI8WQzLkzRvC8pvBnzuzXDgCsjPdSqYvzok5PoClMBQ== - dependencies: - base58-universal "^2.0.0" - base64url-universal "^2.0.0" - jsonld-signatures "^11.3.0" - -"@digitalbazaar/ed25519-multikey@^1.0.0", "@digitalbazaar/ed25519-multikey@^1.1.0", "@digitalbazaar/ed25519-multikey@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-multikey/-/ed25519-multikey-1.3.0.tgz#68b9a90adc2728c735e27d4052849c127d913ce8" - integrity sha512-wNmgnLv3z5u1Ji/6wlpeunqTr62OF2oCbJflSo8+7sV96SQvZSFU+03+3LOMjCOa6Tg05/K679MwJ0q76QxpOQ== - dependencies: - "@noble/ed25519" "^1.6.0" - base58-universal "^2.0.0" - base64url-universal "^2.0.0" - -"@digitalbazaar/ed25519-signature-2020@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-signature-2020/-/ed25519-signature-2020-5.4.0.tgz#a5dc3d357299c5c94463688d5c157cfc21d8d9fc" - integrity sha512-dHjOv41wiKLoPaE1S9g4NCMKNnelYtBa5fCJKwrqo+cPlLuKcEhtD7w/uuc5non7bf/GX5sa5YfDI/sRUOS6iw== - dependencies: - "@digitalbazaar/ed25519-multikey" "^1.1.0" - "@digitalbazaar/ed25519-verification-key-2020" "^4.1.0" - base58-universal "^2.0.0" - ed25519-signature-2020-context "^1.1.0" - jsonld-signatures "^11.3.0" - -"@digitalbazaar/ed25519-verification-key-2020@^4.1.0", "@digitalbazaar/ed25519-verification-key-2020@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.2.0.tgz#4a394c7c137ead8edf415c83bbd3c40b73c95b49" - integrity sha512-urEVTYkt+uYD8GjdoS6gkm2sKBich1hqx42b6vvUOmNgF0agZ95JlUjiJXEx+VOwu7WSjJSnEBph2Qatkrk1CA== - dependencies: - "@noble/ed25519" "^1.6.0" - base58-universal "^2.0.0" - base64url-universal "^2.0.0" - crypto-ld "^7.0.0" - -"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/-/eddsa-rdfc-2022-cryptosuite-1.2.0.tgz#9c282d5f558ecce4d336e9947b06d45c58615cc9" - integrity sha512-a3PyICe1SI55SgHXgtPRYpzmZ2FMtloQDkVcbhUZ9dpoLcZg5TqsS4U7ap2ggCD4MUXz7uz6ErikJf76Iwyd0g== - dependencies: - "@digitalbazaar/ed25519-multikey" "^1.0.0" - jsonld "^8.1.0" - rdf-canonize "^4.0.1" - -"@digitalbazaar/http-client@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/http-client/-/http-client-3.4.1.tgz#5116fc44290d647cfe4b615d1f3fad9d6005e44d" - integrity sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g== - dependencies: - ky "^0.33.3" - ky-universal "^0.11.0" - undici "^5.21.2" - -"@digitalbazaar/security-context@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/security-context/-/security-context-1.0.1.tgz#badc4b8da03411a32d4e7321ce7c4b355776b410" - integrity sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA== - -"@digitalbazaar/vc@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/vc/-/vc-7.1.0.tgz#589e52ff0b756b720a181c10f0da33913a9f9a0c" - integrity sha512-KjoMnhuZ/+fC/ZThw+GEnR1oOCz67yIwkbK/wbBdZ8wiAH84awBFzJnLogObDS3cTQ+cIhQOfXv+XLRRgxC5Rw== - dependencies: - "@digitalbazaar/credentials-context" "^3.1.0" - ed25519-signature-2018-context "^1.1.0" - jsonld "^8.3.1" - jsonld-signatures "^11.2.1" - -"@emnapi/core@^1.1.0": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" - integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== - dependencies: - "@emnapi/wasi-threads" "1.0.1" - tslib "^2.4.0" - -"@emnapi/runtime@^1.1.0": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" - integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" - integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== - dependencies: - tslib "^2.4.0" - -"@es-joy/jsdoccomment@~0.46.0": - version "0.46.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz#47a2ee4bfc0081f252e058272dfab680aaed464d" - integrity sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ== - dependencies: - comment-parser "1.4.1" - esquery "^1.6.0" - jsdoc-type-pratt-parser "~4.0.0" - -"@esbuild/aix-ppc64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz#830d6476cbbca0c005136af07303646b419f1162" - integrity sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q== - -"@esbuild/android-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz#d11d4fc299224e729e2190cacadbcc00e7a9fd67" - integrity sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A== - -"@esbuild/android-arm@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.4.tgz#5660bd25080553dd2a28438f2a401a29959bd9b1" - integrity sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ== - -"@esbuild/android-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.4.tgz#18ddde705bf984e8cd9efec54e199ac18bc7bee1" - integrity sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ== - -"@esbuild/darwin-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz#b0b7fb55db8fc6f5de5a0207ae986eb9c4766e67" - integrity sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g== - -"@esbuild/darwin-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz#e6813fdeba0bba356cb350a4b80543fbe66bf26f" - integrity sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A== - -"@esbuild/freebsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz#dc11a73d3ccdc308567b908b43c6698e850759be" - integrity sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ== - -"@esbuild/freebsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz#91da08db8bd1bff5f31924c57a81dab26e93a143" - integrity sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ== - -"@esbuild/linux-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz#efc15e45c945a082708f9a9f73bfa8d4db49728a" - integrity sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ== - -"@esbuild/linux-arm@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz#9b93c3e54ac49a2ede6f906e705d5d906f6db9e8" - integrity sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ== - -"@esbuild/linux-ia32@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz#be8ef2c3e1d99fca2d25c416b297d00360623596" - integrity sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ== - -"@esbuild/linux-loong64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz#b0840a2707c3fc02eec288d3f9defa3827cd7a87" - integrity sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA== - -"@esbuild/linux-mips64el@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz#2a198e5a458c9f0e75881a4e63d26ba0cf9df39f" - integrity sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg== - -"@esbuild/linux-ppc64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz#64f4ae0b923d7dd72fb860b9b22edb42007cf8f5" - integrity sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag== - -"@esbuild/linux-riscv64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz#fb2844b11fdddd39e29d291c7cf80f99b0d5158d" - integrity sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA== - -"@esbuild/linux-s390x@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz#1466876e0aa3560c7673e63fdebc8278707bc750" - integrity sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g== - -"@esbuild/linux-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz#c10fde899455db7cba5f11b3bccfa0e41bf4d0cd" - integrity sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA== - -"@esbuild/netbsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz#02e483fbcbe3f18f0b02612a941b77be76c111a4" - integrity sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ== - -"@esbuild/netbsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz#ec401fb0b1ed0ac01d978564c5fc8634ed1dc2ed" - integrity sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw== - -"@esbuild/openbsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz#f272c2f41cfea1d91b93d487a51b5c5ca7a8c8c4" - integrity sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A== - -"@esbuild/openbsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz#2e25950bc10fa9db1e5c868e3d50c44f7c150fd7" - integrity sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw== - -"@esbuild/sunos-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz#cd596fa65a67b3b7adc5ecd52d9f5733832e1abd" - integrity sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q== - -"@esbuild/win32-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz#b4dbcb57b21eeaf8331e424c3999b89d8951dc88" - integrity sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ== - -"@esbuild/win32-ia32@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz#410842e5d66d4ece1757634e297a87635eb82f7a" - integrity sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg== - -"@esbuild/win32-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz#0b17ec8a70b2385827d52314c1253160a0b9bacc" - integrity sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== - -"@fastify/busboy@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.2.1.tgz#9c6db24a55f8b803b5222753b24fe3aea2ba9ca3" - integrity sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q== - dependencies: - text-decoding "^1.0.0" - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== - dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@lerna/create@8.1.9": - version "8.1.9" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.1.9.tgz#6ab7b8514a9a200a4bacb7fa6cf6f01d82d3a154" - integrity sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ== - dependencies: - "@npmcli/arborist" "7.5.4" - "@npmcli/package-json" "5.2.0" - "@npmcli/run-script" "8.1.0" - "@nx/devkit" ">=17.1.2 < 21" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - aproba "2.0.0" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.3" - color-support "1.1.3" - columnify "1.6.0" - console-control-strings "^1.1.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "9.0.0" - dedent "1.5.3" - execa "5.0.0" - fs-extra "^11.2.0" - get-stream "6.0.0" - git-url-parse "14.0.0" - glob-parent "6.0.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - ini "^1.3.8" - init-package-json "6.0.3" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - js-yaml "4.1.0" - libnpmpublish "9.0.9" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "11.0.2" - npm-packlist "8.0.2" - npm-registry-fetch "^17.1.0" - nx ">=17.1.2 < 21" - p-map "4.0.0" - p-map-series "2.1.0" - p-queue "6.6.2" - p-reduce "^2.1.0" - pacote "^18.0.6" - pify "5.0.0" - read-cmd-shim "4.0.0" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.4" - set-blocking "^2.0.0" - signal-exit "3.0.7" - slash "^3.0.0" - ssri "^10.0.6" - string-width "^4.2.3" - strip-ansi "^6.0.1" - strong-log-transformer "2.1.0" - tar "6.2.1" - temp-dir "1.0.0" - upath "2.0.1" - uuid "^10.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "5.0.1" - wide-align "1.1.5" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "17.7.2" - yargs-parser "21.1.1" - -"@mapbox/node-pre-gyp@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - -"@napi-rs/wasm-runtime@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz#d27788176f250d86e498081e3c5ff48a17606918" - integrity sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== - dependencies: - "@emnapi/core" "^1.1.0" - "@emnapi/runtime" "^1.1.0" - "@tybys/wasm-util" "^0.9.0" - -"@noble/ed25519@^1.6.0": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" - integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nolyfill/is-core-module@1.0.39": - version "1.0.39" - resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" - integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== - -"@npmcli/agent@^2.0.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" - integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/arborist@7.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" - integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.1" - "@npmcli/installed-package-contents" "^2.1.0" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^7.1.1" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.1.0" - "@npmcli/query" "^3.1.0" - "@npmcli/redact" "^2.0.0" - "@npmcli/run-script" "^8.1.0" - bin-links "^4.0.4" - cacache "^18.0.3" - common-ancestor-path "^1.0.1" - hosted-git-info "^7.0.2" - json-parse-even-better-errors "^3.0.2" - json-stringify-nice "^1.1.4" - lru-cache "^10.2.2" - minimatch "^9.0.4" - nopt "^7.2.1" - npm-install-checks "^6.2.0" - npm-package-arg "^11.0.2" - npm-pick-manifest "^9.0.1" - npm-registry-fetch "^17.0.1" - pacote "^18.0.6" - parse-conflict-json "^3.0.0" - proc-log "^4.2.0" - proggy "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^3.0.1" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - ssri "^10.0.6" - treeverse "^3.0.0" - walk-up-path "^3.0.1" - -"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" - integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^5.0.0": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" - integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== - dependencies: - "@npmcli/promise-spawn" "^7.0.0" - ini "^4.1.3" - lru-cache "^10.0.1" - npm-pick-manifest "^9.0.0" - proc-log "^4.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^4.0.0" - -"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" - integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/map-workspaces@^3.0.2": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" - integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - read-package-json-fast "^3.0.0" - -"@npmcli/metavuln-calculator@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf" - integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g== - dependencies: - cacache "^18.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^18.0.0" - proc-log "^4.1.0" - semver "^7.3.5" - -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/package-json@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" - integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^4.0.0" - semver "^7.5.3" - -"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" - integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^4.0.0" - semver "^7.5.3" - -"@npmcli/promise-spawn@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" - integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== - dependencies: - which "^4.0.0" - -"@npmcli/query@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" - integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== - dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/redact@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" - integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== - -"@npmcli/run-script@8.1.0", "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" - integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.0.0" - "@npmcli/promise-spawn" "^7.0.0" - node-gyp "^10.0.0" - proc-log "^4.0.0" - which "^4.0.0" - -"@nrwl/tao@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-17.2.5.tgz#48b941569f83a1669023aeecaaf64f0ea09b5aec" - integrity sha512-hA89BirzFb2MBm26ZPTTJ/RWRjmZ9R39J8321kVEldehStluA4E5zobNd7MJVp77fBK/CCTlIhFeUEP9qmxhZA== - dependencies: - nx v17.2.5 - tslib "^2.3.0" - -"@nx/devkit@>=17.1.2 < 21": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-20.3.2.tgz#b16e66771dd7dd24670eafa060c01f8af1191645" - integrity sha512-VhbxEsSTCZlOVgjuQC+6HQmb9Oz9VoHUeo4001Pw6BFBcSXZUi5q37C/lxbAgQPnMKLkFcLva3WKZ+fOLwhGIg== - dependencies: - ejs "^3.1.7" - enquirer "~2.3.6" - ignore "^5.0.4" - minimatch "9.0.3" - semver "^7.5.3" - tmp "~0.2.1" - tslib "^2.3.0" - yargs-parser "21.1.1" - -"@nx/nx-darwin-arm64@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.3.2.tgz#bc212fdee150b49cdfe72697c7e3234bcbc07caa" - integrity sha512-lQOXMIPmE9o36TuZ+SX6iq7PPWa3s1fjNRqCujlviExX69245NNCMxd754gXlLrsxC1onrx/zmJciKmmEWDIiw== - -"@nx/nx-darwin-arm64@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.5.tgz#411b861cb0a98540082b7639dbaaa9f48044a25a" - integrity sha512-AGF/XnMkXymS8xYMsbeyNKZWKflfU8TTqEJqlcADMHYcr8OD1Jyq1YYHp/vvPBWqEhUL4bx3GPspQn5YiiCrWw== - -"@nx/nx-darwin-x64@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-20.3.2.tgz#198d4d985e14954fe4d7b00075f9b2a95eed5161" - integrity sha512-RvvSz4QYVOYOfC8sUE63b6dy8iHk2AEI0r1FF5FCQuqE1DdTeTjPETY2sY35tRqF+mO/6oLGp2+m9ti/ysRoTg== - -"@nx/nx-darwin-x64@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.5.tgz#94900e137763b03abeb41f2279e214ea606ad9a8" - integrity sha512-YQQG+kijDNedE6bwEIeKWtVQOxJD+NHW69z6sb/S+ub8NO293YgNtYXgilet9RwOKBubeSyBqWr+yYbRhOuz+A== - -"@nx/nx-freebsd-x64@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.3.2.tgz#42b5a8c045d60d69e9540aeb74b62f8208e41b73" - integrity sha512-KBDTyGn1evlZ17pupwRUDh2wrCMuHhP2j8cOCdgF5cl7vRki8BOK9yyL6jD11d/d/6DgXzy1jmQEX4Xx+AGCug== - -"@nx/nx-freebsd-x64@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.5.tgz#731ffa2f70142a28ce33fd59ef564e24ba94ee5f" - integrity sha512-AzcYELtNDukSTtO6zTAuu9pUI2634/2ZFLdS15C9cqUrK0XNvBcbj6R1KNGjgaBDUJc9H49+fqU8VnLPpJjBKQ== - -"@nx/nx-linux-arm-gnueabihf@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.3.2.tgz#a56e2fca7f56efef9f04c91c93ae4065a4a1c46c" - integrity sha512-mW+OcOnJEMvs7zD3aSwEG3z5M9bI4CuUU5Q/ePmnNzWIucRHpoAMNt/Sd+yu6L4+QttvoUf967uwcMsX8l4nrw== - -"@nx/nx-linux-arm-gnueabihf@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.5.tgz#4d21f74981baeb7528ff2259a5a433e14af6d8f8" - integrity sha512-24Q5N4krcSV6rbFYGRRgbHTc2eSDoJSWesvAtxAW5Sgh6+wAuqFKVwLwY9ZOn1GQwlySB87YwzH2BMkOfEuorw== - -"@nx/nx-linux-arm64-gnu@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.3.2.tgz#1468b2b3425f8398f17b797703e153d7e66cca2c" - integrity sha512-hbXpZqUvGY5aeEWvh0SNsiYjP1ytSM30XOT6qN6faLO2CL/7j9D2UB69SKOqF3TJOvuNU6cweFgZCxyGfXBYIQ== - -"@nx/nx-linux-arm64-gnu@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.5.tgz#067d2e9adccbd1bff4dbad7ac1338c02ddb3bf9c" - integrity sha512-ty08Jnhk/eCVzxdm6o9EaGAZQ4t1WQCO9I/FjriEqtt4e5If6YKJPGjRzu/1OCvppv4d7j0SEN6FiyGkESpBPw== - -"@nx/nx-linux-arm64-musl@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.3.2.tgz#4c139a23f321d9115f9e2c3ef7f55bc0363c2d39" - integrity sha512-HXthtN7adXCNVWs2F4wIqq2f7BcKTjsEnqg2LWV5lm4hRYvMfEvPftb0tECsEhcSQQYcvIJnLfv3vtu9HZSfVA== - -"@nx/nx-linux-arm64-musl@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.5.tgz#7257b80b3e36070136d06d38f7a45d5732146c80" - integrity sha512-iW/hOgkpELTTu53UYNYAUvs5dAXDR94P50HZFvTQeTQH6xr8igMdOBFdApYFZIjD7IrKqNBSeAiyl4TyI6vFag== - -"@nx/nx-linux-x64-gnu@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz#5935d5b71029284be63a9106b8bd50df1804c9e3" - integrity sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg== - -"@nx/nx-linux-x64-gnu@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.5.tgz#21d0ed9ecb8fc3742ba5220a4f2a6f4e0d9780d4" - integrity sha512-BJi195AOHSHurMrPzT2mNGslIDn4LVxfKKdiRqVeOvQxT3cZij4fzPTUYxdOFnrWU5YPfW4A9p3ydFz8MDapOg== - -"@nx/nx-linux-x64-musl@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz#4d4ff695efaa1207de5b3354d8fe08341f4d004f" - integrity sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw== - -"@nx/nx-linux-x64-musl@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.5.tgz#ed68c1df2521259ef1e522f034af63eaa19771ea" - integrity sha512-r1TrCFvdAIvogNry3Oy0IrWT2Ed5nZHR0lcuW5ImF0HinMmH/o4Ey7Q4IRo5hB88gxq4AUTWt+WoQbImIvoGPg== - -"@nx/nx-win32-arm64-msvc@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.3.2.tgz#992ce1f483a96075cdfd4b2b9c8ccb6c5e6144b2" - integrity sha512-yLjacZND7C1XmsC0jfRLSgeLWZUw2Oz+u3nXNvj5JX6YHtYTVLFnRbTAcI+pG2Y6v0Otf2GKb3VT5d1mQb8JvA== - -"@nx/nx-win32-arm64-msvc@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.5.tgz#151c69871e59b061eace5ef9dedac2b684be4fa3" - integrity sha512-TyMH8mys+r4Vgq5LYE6zY70LsL2F7JC85O+jHeVPR0vDNGm5Nb/UHobT5Y/PLpLxIx0aIeRuu6VI3j3oh1JhNw== - -"@nx/nx-win32-x64-msvc@20.3.2": - version "20.3.2" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.3.2.tgz#0508f0ea8ee0727f34dcadfecf6b7b4921484776" - integrity sha512-oDhcctfk0UB1V+Otp1161VKNMobzkFQxGyiEIjp0CjCBa2eRHC1r35L695F1Hj0bvLQPSni9XIe9evh2taeAkg== - -"@nx/nx-win32-x64-msvc@v17.2.5": - version "17.2.5" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.5.tgz#89d2ffa519f8ab4e17469b7d65e353d787feb52e" - integrity sha512-I/LWvNasB+iUEzIeejbuaeeezMCfMjpDBsiPdnS5nfHMVnTOrIbfzQOWLWUr+/7R0fYl1BXTp352iaD+M10Agw== - -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/core@^4.2.1": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^18.0.0": - version "18.1.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" - integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== - -"@octokit/plugin-enterprise-rest@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^6.1.2": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" - integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== - dependencies: - "@octokit/tsconfig" "^1.0.2" - "@octokit/types" "^9.2.3" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^7.1.2": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" - integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== - dependencies: - "@octokit/types" "^10.0.0" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@19.0.11": - version "19.0.11" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" - integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== - dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^6.1.2" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.1.2" - -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" - integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@panva/asn1.js@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" - integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@rdfjs/data-model@^1.3.4": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@rdfjs/data-model/-/data-model-1.3.4.tgz#2b1b3e52755ab1283bf66aa2d3ac97fd8a0332c2" - integrity sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ== - dependencies: - "@rdfjs/types" ">=1.0.1" - -"@rdfjs/types@*", "@rdfjs/types@>=1.0.0", "@rdfjs/types@>=1.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-2.0.1.tgz#f10b50ceffff00b961c4265e60ac9f74550251da" - integrity sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA== - dependencies: - "@types/node" "*" - -"@rdfjs/types@^1.0.0", "@rdfjs/types@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-1.1.2.tgz#9c2f9848c44c26d383bed2a808571de3b93b808d" - integrity sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg== - dependencies: - "@types/node" "*" - -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - -"@seald-io/binary-search-tree@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz#165a9a456eaa30d15885b25db83861bcce2c6a74" - integrity sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA== - -"@seald-io/nedb@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@seald-io/nedb/-/nedb-3.1.0.tgz#6105345a18596f6f9d69f46d7f572efdae32af8e" - integrity sha512-5G0hCQGJjOelOutvW1l4VD581XMhTPxpj1BUaCWTEM2MPXR9TzIr0MKMnEjnTA5nEKfujPyvVW7iF3etm1/gKQ== - dependencies: - "@seald-io/binary-search-tree" "^1.0.2" - localforage "^1.9.0" - util "^0.12.4" - -"@semapps/ldp@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/ldp/-/ldp-1.0.10.tgz#ac09d77b10782d18a7ca5c2781983620d2913f1e" - integrity sha512-3RHJ1/hGUdCH9oNFYVrvCpliqg6uEGmFjHXcnaJwE60oJjMgd5rylsG6zUrZK6ArGwSTiQK9mTQiqMlup/SDEw== - dependencies: - "@rdfjs/data-model" "^1.3.4" - "@semapps/middlewares" "1.0.10" - "@semapps/mime-types" "1.0.10" - "@semapps/ontologies" "1.0.10" - "@semapps/triplestore" "1.0.10" - dashify "^2.0.0" - http-link-header "^1.1.1" - mime-types "^2.1.35" - moleculer "^0.14.17" - moleculer-db "^0.8.16" - moleculer-schedule "^0.2.3" - moleculer-web "^0.10.0-beta1" - node-fetch "^2.6.6" - path-to-regexp "^6.2.0" - rdf-parse "^1.7.0" - sharp "^0.31.2" - sparqljs "^3.5.2" - speakingurl "^14.0.1" - streamify-string "^1.0.1" - url-join "^4.0.1" - uuid "^9.0.1" - -"@semapps/middlewares@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/middlewares/-/middlewares-1.0.10.tgz#100122e0b76c6a964199f3888dbd94ab00a113de" - integrity sha512-eyWJr5XLJ93Rw90fjw8WxAOHbrDMyAjjK5HG6zaxeYct7DsVBXB8mgIBmqkl+q/GZddY9j4kNGBjx4sm5JLhuA== - dependencies: - "@semapps/mime-types" "1.0.10" - busboy "^0.3.1" - memory-streams "^0.1.3" - moleculer "^0.14.18" - -"@semapps/mime-types@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/mime-types/-/mime-types-1.0.10.tgz#4724b72ffb91e832da94909efb739be3606e3977" - integrity sha512-QfAlYiuYhZktn+AsJvo4U2bgcuVsVm5JQDVSz5E2amVlfrkB0U9clUsSGkktBy0p6kUmkuD8m54uJx9fSnrARg== - dependencies: - moleculer "^0.14.18" - negotiator "^0.6.2" - -"@semapps/ontologies@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/ontologies/-/ontologies-1.0.10.tgz#77eeb691fc06e85a7a40d4630c5e755bfba5c34e" - integrity sha512-FBJ+ZT0cxpYrxbO/y4RO+aew4Ljfv8p+AQbCbPeJIDNd9lXiL4IgqEsBHobYuvvs6JiCjIttURzbYOxExZBk6Q== - dependencies: - "@semapps/triplestore" "1.0.10" - moleculer-db "^0.8.16" - node-fetch "^2.6.6" - -"@semapps/triplestore@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@semapps/triplestore/-/triplestore-1.0.10.tgz#c52a6bae54380eb353afee0c26147b95bd8c045e" - integrity sha512-mBO2nm8W35M4vNL4jiUWq8VFE1iVIzKVSQdLNq/vPPqFW09aSqz26xe5qiqAi4NzWnQ0Gdjjecnuasi3lW/uGw== - dependencies: - "@semapps/middlewares" "1.0.10" - "@semapps/mime-types" "1.0.10" - jsonld "^3.3.2" - moleculer "^0.14.29" - negotiator "^0.6.2" - node-fetch "^2.6.6" - sparqljs "^3.5.2" - sparqljson-parse "^1.5.1" - string-template "^1.0.0" - url-join "^4.0.1" - uuid "^9.0.1" - -"@sigstore/bundle@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" - integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - -"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" - integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== - -"@sigstore/protobuf-specs@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz#7dd46d68b76c322873a2ef7581ed955af6f4dcde" - integrity sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ== - -"@sigstore/sign@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" - integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - make-fetch-happen "^13.0.1" - proc-log "^4.2.0" - promise-retry "^2.0.1" - -"@sigstore/tuf@^2.3.4": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" - integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - tuf-js "^2.2.1" - -"@sigstore/verify@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" - integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.1.0" - "@sigstore/protobuf-specs" "^0.3.2" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@tufjs/canonical-json@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" - integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== - -"@tufjs/models@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" - integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.4" - -"@tybys/wasm-util@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" - integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== - dependencies: - tslib "^2.4.0" - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/http-link-header@^1.0.1": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.7.tgz#bb1a1671a8c6d93717e0057072e9253113fdc875" - integrity sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5.14": - version "29.5.14" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" - integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/jsonld@1.5.15": - version "1.5.15" - resolved "https://registry.yarnpkg.com/@types/jsonld/-/jsonld-1.5.15.tgz#55dde3077c23986e5f2a3b62356d667bfb03fc71" - integrity sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/luxon@~3.6.0": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.6.2.tgz#be6536931801f437eafcb9c0f6d6781f72308041" - integrity sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" - integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== - -"@types/n3@^1.4.4": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@types/n3/-/n3-1.21.1.tgz#5e9f93f50e7a77f8c40bffa3e66f67209633c235" - integrity sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw== - dependencies: - "@rdfjs/types" "^1.1.0" - "@types/node" "*" - -"@types/node@*": - version "22.10.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.7.tgz#14a1ca33fd0ebdd9d63593ed8d3fbc882a6d28d7" - integrity sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg== - dependencies: - undici-types "~6.20.0" - -"@types/node@^13.1.0": - version "13.13.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" - integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== - -"@types/node@^18.0.0": - version "18.19.71" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.71.tgz#96d4f0a0be735ead6c8998c62a4b2c0012a5d09a" - integrity sha512-evXpcgtZm8FY4jqBSN8+DmOTcVkkvTmAayeo4Wf3m1xAruyVGzGuDh/Fb/WWX2yLItUiho42ozyJjB0dw//Tkw== - dependencies: - undici-types "~5.26.4" - -"@types/normalize-package-data@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/parse-link-header@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.1.tgz#6eade790736a050b9242c7c6b2fceda9b3dc394a" - integrity sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg== - -"@types/readable-stream@^2.3.11": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/semver@^7.3.12": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/sparqljs@^3.1.2": - version "3.1.12" - resolved "https://registry.yarnpkg.com/@types/sparqljs/-/sparqljs-3.1.12.tgz#29a030615a3aed6eb05fbd618ecf58ab345506f8" - integrity sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ== - dependencies: - "@rdfjs/types" ">=1.0.0" - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/url-join@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.3.tgz#09ede6753b846a274301b9bd3a6ed117050daecd" - integrity sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^15.0.0": - version "15.0.19" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" - integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^7.1.1": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" - integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/type-utils" "7.18.0" - "@typescript-eslint/utils" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/parser@^7.5.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" - integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== - dependencies: - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/scope-manager@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" - integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== - dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - -"@typescript-eslint/type-utils@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" - integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== - dependencies: - "@typescript-eslint/typescript-estree" "7.18.0" - "@typescript-eslint/utils" "7.18.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/types@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" - integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" - integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== - dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/utils@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" - integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" - -"@typescript-eslint/utils@^5.10.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@typescript-eslint/visitor-keys@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" - integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== - dependencies: - "@typescript-eslint/types" "7.18.0" - eslint-visitor-keys "^3.4.3" - -"@ungap/structured-clone@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" - integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -"@yarnpkg/parsers@3.0.0-rc.46": - version "3.0.0-rc.46" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" - integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - -"@yarnpkg/parsers@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.2.tgz#48a1517a0f49124827f4c37c284a689c607b2f32" - integrity sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - -"@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - -"@zkochan/js-yaml@0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz#4b0cb785220d7c28ce0ec4d0804deb5d821eae89" - integrity sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== - dependencies: - argparse "^2.0.1" - -JSONStream@^1.3.3, JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.14.0, acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" - integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== - -aggregate-error@^3.0.0, aggregate-error@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@2.0.0, "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-docs-informative@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" - integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -args@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" - integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" - integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.flatmap@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" - integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.reduce@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" - integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-array-method-boxes-properly "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - is-string "^1.0.7" - -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1@^0.2.6, asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-never@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.4.0.tgz#b0d4988628c87f35eb94716cc54422a63927e175" - integrity sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA== - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -async@^3.1.0, async@^3.2.3: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -asynciterator@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-3.9.0.tgz#6e9a69623c4cec07e4cd85130416d52899f4e93f" - integrity sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" - integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== - -axios@^1.5.1, axios@^1.7.4: - version "1.7.9" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" - integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -babel-walk@3.0.0-canary-5: - version "3.0.0-canary-5" - resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" - integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== - dependencies: - "@babel/types" "^7.9.6" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.10" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" - integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== - dependencies: - safe-buffer "^5.0.1" - -base58-universal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base58-universal/-/base58-universal-2.0.0.tgz#243c8256591afa7d5210f87ad1655e05081f4be4" - integrity sha512-BgkgF8zVLOAygszG4W8NkLm7iXrw80VYAOcedrzANrIhS14+4W6zVqjyGTFUBM/FpqkHUt8aAYd4DbBBfn3zKg== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64url-universal@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-1.1.0.tgz#94da6356c1d43ead55b1d91c045c0a5b09ec8181" - integrity sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA== - dependencies: - base64url "^3.0.0" - -base64url-universal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-2.0.0.tgz#6023785c0e349a90de1cf396e8a4519750a4e67b" - integrity sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw== - dependencies: - base64url "^3.0.1" - -base64url@^3.0.0, base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bcrypt@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.1.tgz#0f732c6dcb4e12e5b70a25e326a72965879ba6e2" - integrity sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww== - dependencies: - "@mapbox/node-pre-gyp" "^1.0.11" - node-addon-api "^5.0.0" - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -bin-links@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" - integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird@^3.0.0, bluebird@^3.1.1, bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@^1.19.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.24.0: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== - dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" - node-releases "^2.0.19" - update-browserslist-db "^1.1.1" - -bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buildcheck@~0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" - integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== - -bull@^3.15.0: - version "3.29.3" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" - integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== - dependencies: - cron-parser "^2.13.0" - debuglog "^1.0.0" - get-port "^5.1.1" - ioredis "^4.27.0" - lodash "^4.17.21" - p-timeout "^3.2.0" - promise.prototype.finally "^3.1.2" - semver "^7.3.2" - util.promisify "^1.0.1" - uuid "^8.3.0" - -busboy@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" - integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== - dependencies: - dicer "0.3.0" - -byte-size@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" - integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== - -bytes@3.1.2, bytes@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^18.0.0, cacache@^18.0.3: - version "18.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" - integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" - integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.0, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" - integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== - dependencies: - call-bind-apply-helpers "^1.0.1" - get-intrinsic "^1.2.6" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001688: - version "1.0.30001695" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz#39dfedd8f94851132795fdf9b79d29659ad9c4d4" - integrity sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw== - -canonicalize@^1.0.1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" - integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -"cas@https://github.com/joshchan/node-cas": - version "0.0.5" - resolved "https://github.com/joshchan/node-cas#344a8bfba9d054e2e378adaf95b720c898ae48a2" - dependencies: - cheerio "0.19.0" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chalk@2.4.2, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-parser@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" - integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== - dependencies: - is-regex "^1.0.3" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cheerio@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925" - integrity sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ== - dependencies: - css-select "~1.0.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "~3.8.1" - lodash "^3.2.0" - -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -ci-info@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83" - integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A== - -cjs-module-lexer@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" - integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@3.1.0, cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -cmd-shim@6.0.3, cmd-shim@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" - integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@1.1.3, color-support@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -columnify@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.15.1, commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -comment-parser@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" - integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -component-emitter@^1.2.0, component-emitter@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" - integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -consolidate@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" - integrity sha512-PZFskfj64QnpKVK9cPdY36pyWEhZNM+srRVqtwMiVTlnViSoZcvX35PpBhhUcyLTHXYvz7pZRmxvsqwzJqg9kA== - dependencies: - bluebird "^3.1.1" - -constantinople@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" - integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== - dependencies: - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.1" - -content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -conventional-changelog-angular@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" - integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-core@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" - integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^6.0.0" - conventional-commits-parser "^4.0.0" - dateformat "^3.0.3" - get-pkg-repo "^4.2.1" - git-raw-commits "^3.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^5.0.0" - normalize-package-data "^3.0.3" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - -conventional-changelog-preset-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" - integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== - -conventional-changelog-writer@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" - integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== - dependencies: - conventional-commits-filter "^3.0.0" - dateformat "^3.0.3" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - meow "^8.1.2" - semver "^7.0.0" - split "^1.0.1" - -conventional-commits-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" - integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.1" - -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== - dependencies: - JSONStream "^1.3.5" - is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" - -conventional-recommended-bump@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" - integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^3.0.0" - conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" - git-raw-commits "^3.0.0" - git-semver-tags "^5.0.0" - meow "^8.1.2" - -convert-source-map@^1.4.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" - integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== - -cookie@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - -cookiejar@^2.1.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" - integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" - integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - -cpu-features@~0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" - integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== - dependencies: - buildcheck "~0.0.6" - nan "^2.19.0" - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -credentials-context@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/credentials-context/-/credentials-context-1.0.0.tgz#a63cb4b7e0a4ca4460d247b7c9370a58b10ebac9" - integrity sha512-rF3GPhTUGY58xlpuVRif/1i0BxVpynpmFdGNS81S2ezdKPSKoFke5ZOZWB8ZUvGi8bV8CuDM+ZcM/uf4z0PQVQ== - -cron-parser@^2.13.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" - integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== - dependencies: - is-nan "^1.3.0" - moment-timezone "^0.5.31" - -cron-parser@^4.2.0, cron-parser@^4.2.1, cron-parser@^4.3.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" - integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== - dependencies: - luxon "^3.2.1" - -cron@^1.8.2: - version "1.8.3" - resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.3.tgz#2a61d7b15848716885834ec56ac072f4b9744ebd" - integrity sha512-JYR/QZFklJCIPndBLfd/2nU1nSlCMrUdtQ2mGLXSVM/qqqEK7DOrFR0gsEiyeqs0PdWrs0ve1ggH4V7XksDwXg== - dependencies: - luxon "^1.23.x" - -cron@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cron/-/cron-4.3.0.tgz#c5a62872f74f72294cf1cadef34c72ad8d8f50b5" - integrity sha512-ciiYNLfSlF9MrDqnbMdRWFiA6oizSF7kA1osPP9lRzNu0Uu+AWog1UKy7SkckiDY2irrNjeO6qLyKnXC8oxmrw== - dependencies: - "@types/luxon" "~3.6.0" - luxon "~3.6.0" - -cross-fetch@^3.0.5, cross-fetch@^3.0.6: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" - integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== - dependencies: - node-fetch "^2.7.0" - -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0: - version "6.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" - integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-ld@^3.7.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-3.9.0.tgz#4f42849a143b5d65f28b018d80bc0fee6cd37ba8" - integrity sha512-PFE7V6A2QNnUp6iiPVEZI4p8wsztkEWLbY1BAXVnclm/aw4KGwpJ+1Ds4vQUCJ5BsWxj15fwE5rHQ8AWaWB2nw== - dependencies: - base64url-universal "^1.0.1" - bs58 "^4.0.1" - node-forge "~0.10.0" - semver "^6.2.0" - optionalDependencies: - sodium-native "^3.2.0" - -crypto-ld@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-7.0.0.tgz#ad593cce31da84e60bd14fd2b25221f97e8a3b74" - integrity sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw== - -css-select@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0" - integrity sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw== - dependencies: - boolbase "~1.0.0" - css-what "1.0" - domutils "1.4" - nth-check "~1.0.0" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA== - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c" - integrity sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw== - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -dashify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dashify/-/dashify-2.0.0.tgz#fff270ca2868ca427fee571de35691d6e437a648" - integrity sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -datauri@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/datauri/-/datauri-2.0.0.tgz#ff0ee23729935a6bcc81f301621bed3e692bf3c7" - integrity sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g== - dependencies: - image-size "^0.7.3" - mimer "^1.0.0" - -dateformat@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.7: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debuglog@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -dedent@1.5.3, dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" - integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^1.1.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" - integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== - -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dicer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" - integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== - dependencies: - streamsearch "0.1.2" - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -doctypes@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" - integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - integrity sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ== - dependencies: - domelementtype "1" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@1.4: - version "1.4.3" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f" - integrity sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w== - dependencies: - domelementtype "1" - -domutils@1.5, domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" - integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@~10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" - integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== - -dotenv-expand@~11.0.6: - version "11.0.7" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" - integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== - dependencies: - dotenv "^16.4.5" - -dotenv-flow@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/dotenv-flow/-/dotenv-flow-3.3.0.tgz#e22341c035d5672b923bf76feb35999f728ee456" - integrity sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A== - dependencies: - dotenv "^8.6.0" - -dotenv@^16.4.5, dotenv@~16.4.5: - version "16.4.7" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" - integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== - -dotenv@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -dotenv@~16.3.1: - version "16.3.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" - integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== - -dunder-proto@^1.0.0, dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ed25519-signature-2018-context@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz#68002ea7497c32e8170667cfd67468dedf7d220e" - integrity sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA== - -ed25519-signature-2020-context@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz#b2f724f07db154ddf0fd6605410d88736e56fd07" - integrity sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.7: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.5.73: - version "1.5.84" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz#8e334ca206bb293a20b16418bf454783365b0a95" - integrity sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g== - -email-templates@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-2.7.1.tgz#d7e5641fec0944c9b68a6d272d28e5685b3b223c" - integrity sha512-WJ0csXaBK3gV90dwBco5d3liu/XSH1jPEn3qfLDES/AsxOoMv4IRqp/MsQduKBexJZ81577OUbrdgnzvK2Kk9Q== - dependencies: - bluebird "^3.0.0" - consolidate "^0.14.2" - debug "^2.2.0" - glob "^6.0.0" - juice "^4.1.0" - lodash "^4.0.1" - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz#91eb1db193896b9801251eeff1c6980278b1e404" - integrity sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" - integrity sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ== - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" - integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.0, env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@7.13.0: - version "7.13.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" - integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.3, es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: - version "1.23.9" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" - integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.3" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.2.7" - get-proto "^1.0.0" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-regex "^1.2.1" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.0" - math-intrinsics "^1.1.0" - object-inspect "^1.13.3" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.3" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.18" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.0.0, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.5.3: - version "1.6.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" - integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== - -es-object-atoms@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" - integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== - dependencies: - is-callable "^1.2.7" - is-date-object "^1.0.5" - is-symbol "^1.0.4" - -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -esbuild-jest@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/esbuild-jest/-/esbuild-jest-0.5.0.tgz#7a9964bfdecafca3b675a8aeb08193bcdba8b9d7" - integrity sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ== - dependencies: - "@babel/core" "^7.12.17" - "@babel/plugin-transform-modules-commonjs" "^7.12.13" - babel-jest "^26.6.3" - -esbuild@^0.25.4: - version "0.25.4" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.4.tgz#bb9a16334d4ef2c33c7301a924b8b863351a0854" - integrity sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q== - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.4" - "@esbuild/android-arm" "0.25.4" - "@esbuild/android-arm64" "0.25.4" - "@esbuild/android-x64" "0.25.4" - "@esbuild/darwin-arm64" "0.25.4" - "@esbuild/darwin-x64" "0.25.4" - "@esbuild/freebsd-arm64" "0.25.4" - "@esbuild/freebsd-x64" "0.25.4" - "@esbuild/linux-arm" "0.25.4" - "@esbuild/linux-arm64" "0.25.4" - "@esbuild/linux-ia32" "0.25.4" - "@esbuild/linux-loong64" "0.25.4" - "@esbuild/linux-mips64el" "0.25.4" - "@esbuild/linux-ppc64" "0.25.4" - "@esbuild/linux-riscv64" "0.25.4" - "@esbuild/linux-s390x" "0.25.4" - "@esbuild/linux-x64" "0.25.4" - "@esbuild/netbsd-arm64" "0.25.4" - "@esbuild/netbsd-x64" "0.25.4" - "@esbuild/openbsd-arm64" "0.25.4" - "@esbuild/openbsd-x64" "0.25.4" - "@esbuild/sunos-x64" "0.25.4" - "@esbuild/win32-arm64" "0.25.4" - "@esbuild/win32-ia32" "0.25.4" - "@esbuild/win32-x64" "0.25.4" - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-airbnb@^19.0.4: - version "19.0.4" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" - integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== - dependencies: - eslint-config-airbnb-base "^15.0.0" - object.assign "^4.1.2" - object.entries "^1.1.5" - -eslint-config-prettier@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.6.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz#e69925936a771a9cb2de418ccebc4cdf6c0818aa" - integrity sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow== - dependencies: - "@nolyfill/is-core-module" "1.0.39" - debug "^4.3.7" - enhanced-resolve "^5.15.0" - fast-glob "^3.3.2" - get-tsconfig "^4.7.5" - is-bun-module "^1.0.2" - is-glob "^4.0.3" - stable-hash "^0.0.4" - -eslint-module-utils@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== - dependencies: - debug "^3.2.7" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-import@^2.29.1: - version "2.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== - dependencies: - "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" - hasown "^2.0.2" - is-core-module "^2.15.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - object.groupby "^1.0.3" - object.values "^1.2.0" - semver "^6.3.1" - string.prototype.trimend "^1.0.8" - tsconfig-paths "^3.15.0" - -eslint-plugin-jest@^27.9.0: - version "27.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" - integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-jsdoc@^48.2.1: - version "48.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz#7c8dae6ce0d814aff54b87fdb808f02635691ade" - integrity sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA== - dependencies: - "@es-joy/jsdoccomment" "~0.46.0" - are-docs-informative "^0.0.2" - comment-parser "1.4.1" - debug "^4.3.5" - escape-string-regexp "^4.0.0" - espree "^10.1.0" - esquery "^1.6.0" - parse-imports "^2.1.1" - semver "^7.6.3" - spdx-expression-parse "^4.0.0" - synckit "^0.9.1" - -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-prettier@^5.1.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz#c4af01691a6fa9905207f0fbba0d7bea0902cce5" - integrity sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.9.1" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== - -eslint@^8.2.0: - version "8.57.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^10.1.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" - integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== - dependencies: - acorn "^8.14.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2, esquery@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@^1.8.1, etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter2@^6.4.9: - version "6.4.9" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" - integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -expo-server-sdk@^3.4.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/expo-server-sdk/-/expo-server-sdk-3.13.0.tgz#c64e3949ec756d9ae69ccc108c65c3da511ed37a" - integrity sha512-EeGs8PlXmnP2uDpjVhnclQmlua3A0swEj3BzqoRiHfU4WPsN5v3eHhqjjwl+Lf2rleKW2L9lhWp6sCL1vPMnAg== - dependencies: - node-fetch "^2.6.0" - promise-limit "^2.7.0" - promise-retry "^2.0.1" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -express-session@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.18.1.tgz#88d0bbd41878882840f24ec6227493fcb167e8d5" - integrity sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA== - dependencies: - cookie "0.7.2" - cookie-signature "1.0.7" - debug "2.6.9" - depd "~2.0.0" - on-headers "~1.0.2" - parseurl "~1.3.3" - safe-buffer "5.2.1" - uid-safe "~2.1.5" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9, fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-validator@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/fastest-validator/-/fastest-validator-1.19.0.tgz#96f792ce774a81a76efba32974e669c47a2b15eb" - integrity sha512-wUfJBrXmccVz4kARAiWTkuqsC6EFeqbNxwfysCDk+maExBPP8KxyBwaWtayrWjKIaBIbaz+rqI2kel6ecayxcg== - -fastq@^1.6.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" - integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -figures@3.2.0, figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== - -follow-redirects@^1.15.6, follow-redirects@^1.5.1: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^2.3.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" - integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - safe-buffer "^5.2.1" - -form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -formidable@^1.2.0: - version "1.2.6" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" - integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2, fresh@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -front-matter@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-4.0.2.tgz#b14e54dc745cfd7293484f3210d15ea4edd7f4d5" - integrity sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== - dependencies: - js-yaml "^3.13.1" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.0, fs-extra@^11.2.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" - integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.1.2, fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" - integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - functions-have-names "^1.2.3" - hasown "^2.0.2" - is-callable "^1.2.7" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" - integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - function-bind "^1.1.2" - get-proto "^1.0.0" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-pkg-repo@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-port@5.1.1, get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-proto@^1.0.0, get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -get-stream@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - -get-tsconfig@^4.7.5: - version "4.9.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.9.0.tgz#704ae2ce2a94935921675dd19c05508b713a405d" - integrity sha512-52n24W52sIueosRe0XZ8Ex5Yle+WbhfCKnV/gWXpbVR8FXNTfqdKEKUSypKso66VRHTvvcQxL44UTZbJRlCTnw== - dependencies: - resolve-pkg-maps "^1.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" - integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== - dependencies: - dargs "^7.0.0" - meow "^8.1.2" - split2 "^3.2.2" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" - integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== - dependencies: - meow "^8.1.2" - semver "^7.0.0" - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-14.0.0.tgz#18ce834726d5fbca0c25a4555101aa277017418f" - integrity sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ== - dependencies: - git-up "^7.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== - dependencies: - ini "^1.3.2" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@6.0.2, glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^10.2.2, glob@^10.3.10: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@11.1.0, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -google-libphonenumber@^3.2.26: - version "3.2.40" - resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.40.tgz#ed57d0db67a8745e8e6db7983dda7f94717fb4c9" - integrity sha512-bzGxX/vfggcV80LVcibki+JvR91x6zHpBpovDXSfmZUGn6uLzhbYXsWll2a80EG6qTmvf8lt7KZZ/pkMml8ckw== - -gopd@^1.0.1, gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -got@^11.8.0: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-bigints@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" - integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-unicode@2.0.1, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -he@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" - integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== - dependencies: - lru-cache "^10.0.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-to-text@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-2.1.3.tgz#e50dbe4e4079912dbedcde05d278388edb8eea91" - integrity sha512-mafVvNjY6lrVrdT73ssJT4fWCtiLR8QVZDPurHbO/yT0KK7mVCpEGi+0g6jzwj4G41o4++9A48cZOSQBwvWd8Q== - dependencies: - he "^1.0.0" - htmlparser "^1.7.7" - optimist "^0.6.1" - underscore "^1.8.3" - underscore.string "^3.2.3" - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -htmlparser2@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - -htmlparser2@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -htmlparser2@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" - integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.2" - domutils "^2.8.0" - entities "^3.0.1" - -htmlparser2@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -htmlparser2@~3.8.1: - version "3.8.3" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" - integrity sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q== - dependencies: - domelementtype "1" - domhandler "2.3" - domutils "1.5" - entities "1.0" - readable-stream "1.1" - -htmlparser@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/htmlparser/-/htmlparser-1.7.7.tgz#19e7b3997ff6fbac99ae5a7d2766489efe7e2d0e" - integrity sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ== - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-link-header@^1.0.2, http-link-header@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.1.3.tgz#b367b7a0ad1cf14027953f31aa1df40bb433da2a" - integrity sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ== - -http-proxy-agent@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -http-signature-header@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/http-signature-header/-/http-signature-header-1.3.1.tgz#0a2327651e444ab687d05ae437ef9f3f55983cf3" - integrity sha512-UpKpxfRlCWRK41j+MfRHHvjDWMLX67gY7pUNGQbXi13fsTZcvUHrgbhbiJtHDvGGxe5nQVYlTW7fKypMSmgXKQ== - dependencies: - assert-plus "^1.0.0" - -http-signature@^1.3.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" - integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.18.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.1: - version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" - integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== - dependencies: - agent-base "^7.1.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^6.0.4: - version "6.0.5" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" - integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== - dependencies: - minimatch "^9.0.0" - -ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -image-size@^0.7.3: - version "0.7.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" - integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -immutable@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.8, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ini@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" - integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== - -init-package-json@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.3.tgz#2552fba75b6eed2495dc97f44183e2e5a5bcf8b0" - integrity sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w== - dependencies: - "@npmcli/package-json" "^5.0.0" - npm-package-arg "^11.0.0" - promzard "^1.0.0" - read "^3.0.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^5.0.0" - -inquirer@^8.2.4: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - -internal-slot@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - -ioredis@^4.27.0: - version "4.28.5" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" - integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== - dependencies: - cluster-key-slot "^1.1.0" - debug "^4.3.1" - denque "^1.1.0" - lodash.defaults "^4.2.0" - lodash.flatten "^4.4.0" - lodash.isarguments "^3.1.0" - p-map "^2.1.0" - redis-commands "1.7.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -ipaddr.js@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== - -is-accessor-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" - integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== - dependencies: - hasown "^2.0.0" - -is-arguments@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-async-function@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.0.tgz#1d1080612c493608e93168fc4458c245074c06a6" - integrity sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ== - dependencies: - call-bound "^1.0.3" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-boolean-object@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" - integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-bun-module@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" - integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== - dependencies: - semver "^7.6.3" - -is-callable@^1.1.3, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0, is-core-module@^2.5.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-data-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" - integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== - dependencies: - hasown "^2.0.0" - -is-data-view@^1.0.1, is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - -is-date-object@^1.0.5, is-date-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-descriptor@^0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" - integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" - integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-expression@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" - integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== - dependencies: - acorn "^7.1.1" - object-assign "^4.1.1" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" - integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== - dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-nan@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.0.3, is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.7, is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-symbol@^1.0.4, is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2, is-weakref@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" - integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== - dependencies: - call-bound "^1.0.2" - -is-weakset@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" - integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - dependencies: - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@^0.1.2, isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" - integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -jose@^2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.7.tgz#3aabbaec70bff313c108b9406498a163737b16ba" - integrity sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg== - dependencies: - "@panva/asn1.js" "^1.0.0" - -jose@^5.2.0: - version "5.9.6" - resolved "https://registry.yarnpkg.com/jose/-/jose-5.9.6.tgz#77f1f901d88ebdc405e57cce08d2a91f47521883" - integrity sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ== - -js-stringify@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" - integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.10.0, js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsdoc-type-pratt-parser@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" - integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== - -jsesc@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" - integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonld-context-parser@^2.0.0, jsonld-context-parser@^2.1.2, jsonld-context-parser@^2.1.3, jsonld-context-parser@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz#fae15a56c5ceabd1c4520ab1a9cc12c9a0a8b67d" - integrity sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA== - dependencies: - "@types/http-link-header" "^1.0.1" - "@types/node" "^18.0.0" - cross-fetch "^3.0.6" - http-link-header "^1.0.2" - relative-to-absolute-iri "^1.0.5" - -jsonld-signatures@^11.2.1, jsonld-signatures@^11.3.0, jsonld-signatures@^11.3.2: - version "11.5.0" - resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz#020ad488bd1977c5169de3d2a4cc28a76dec2663" - integrity sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw== - dependencies: - "@digitalbazaar/security-context" "^1.0.0" - jsonld "^8.0.0" - rdf-canonize "^4.0.1" - serialize-error "^8.1.0" - -jsonld-signatures@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-5.2.0.tgz#2f6210c3aad0a50f925991ce3e91c78856c0752d" - integrity sha512-/dGgMElXc3oBS+/OUwMc3DTK4riHKLE9Lk7NF1Upz2ZlBTNfnOw5uLRkFQOJFBDqDEm5hK6hIfkoC/rCWFh9tQ== - dependencies: - base64url "^3.0.1" - crypto-ld "^3.7.0" - jsonld "^2.0.2" - node-forge "^0.10.0" - security-context "^4.0.0" - serialize-error "^5.0.0" - -jsonld-streaming-parser@^2.4.0, jsonld-streaming-parser@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz#d8faa1df6dc3b760fb9455602edc5f001d756ef0" - integrity sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A== - dependencies: - "@rdfjs/types" "*" - "@types/http-link-header" "^1.0.1" - canonicalize "^1.0.1" - http-link-header "^1.0.2" - jsonld-context-parser "^2.1.3" - jsonparse "^1.3.1" - rdf-data-factory "^1.1.0" - -jsonld-streaming-serializer@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.3.0.tgz#e42ec6ffefc5b80cc1bd17e8eee7943242f17a4d" - integrity sha512-QGflpxpwmr659ExvAQ5TFAY9BmJQiL/yF/MDRrP5oVWHcBBLhbPjUqDv//y2OvJxUY3UQYMXulTwzmYb1ttv2Q== - dependencies: - "@rdfjs/types" "*" - jsonld-context-parser "^2.0.0" - -jsonld@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-2.0.2.tgz#f5d0631de828ce6dee3a14f08cbdc6a53174cd15" - integrity sha512-/TQzRe75/3h2khu57IUojha5oat+M82bm8RYw0jLhlmmPrW/kTWAZ9nGzKPfZWnPYnVVJJMQVc/pU8HCmpv9xg== - dependencies: - canonicalize "^1.0.1" - lru-cache "^5.1.1" - rdf-canonize "^1.0.2" - request "^2.88.0" - semver "^6.3.0" - xmldom "0.1.19" - -jsonld@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-3.3.2.tgz#f8688b349385ff5c755e83c7f60a9cf834078fc0" - integrity sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw== - dependencies: - canonicalize "^1.0.1" - lru-cache "^5.1.1" - object.fromentries "^2.0.2" - rdf-canonize "^2.0.1" - request "^2.88.0" - semver "^6.3.0" - xmldom "0.1.19" - -jsonld@^8.0.0, jsonld@^8.1.0, jsonld@^8.3.1: - version "8.3.3" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-8.3.3.tgz#08cc927833c8684e42319d4697cc8199c0908ffc" - integrity sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg== - dependencies: - "@digitalbazaar/http-client" "^3.4.1" - canonicalize "^1.0.1" - lru-cache "^6.0.0" - rdf-canonize "^3.4.0" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsonwebtoken@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jstransformer@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" - integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== - dependencies: - is-promise "^2.0.0" - promise "^7.0.1" - -juice@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/juice/-/juice-4.3.2.tgz#0a199e5f66f4f7f5cae4c079ebba81b0c2f4d1e0" - integrity sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g== - dependencies: - cheerio "^0.22.0" - commander "^2.15.1" - cross-spawn "^5.1.0" - deep-extend "^0.5.1" - mensch "^0.3.3" - slick "^1.12.2" - web-resource-inliner "^4.2.1" - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -kleur@^4.1.4, kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -ky-universal@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.11.0.tgz#f5edf857865aaaea416a1968222148ad7d9e4017" - integrity sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw== - dependencies: - abort-controller "^3.0.0" - node-fetch "^3.2.10" - -ky@^0.33.3: - version "0.33.3" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.33.3.tgz#bf1ad322a3f2c3428c13cfa4b3af95e6c4a2f543" - integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== - -lerna@^8.0.1: - version "8.1.9" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.1.9.tgz#1233c3cfacca3b85b23c292235e246d79de3de32" - integrity sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ== - dependencies: - "@lerna/create" "8.1.9" - "@npmcli/arborist" "7.5.4" - "@npmcli/package-json" "5.2.0" - "@npmcli/run-script" "8.1.0" - "@nx/devkit" ">=17.1.2 < 21" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - aproba "2.0.0" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.3" - color-support "1.1.3" - columnify "1.6.0" - console-control-strings "^1.1.0" - conventional-changelog-angular "7.0.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "9.0.0" - dedent "1.5.3" - envinfo "7.13.0" - execa "5.0.0" - fs-extra "^11.2.0" - get-port "5.1.1" - get-stream "6.0.0" - git-url-parse "14.0.0" - glob-parent "6.0.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - import-local "3.1.0" - ini "^1.3.8" - init-package-json "6.0.3" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - jest-diff ">=29.4.3 < 30" - js-yaml "4.1.0" - libnpmaccess "8.0.6" - libnpmpublish "9.0.9" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "11.0.2" - npm-packlist "8.0.2" - npm-registry-fetch "^17.1.0" - nx ">=17.1.2 < 21" - p-map "4.0.0" - p-map-series "2.1.0" - p-pipe "3.1.0" - p-queue "6.6.2" - p-reduce "2.1.0" - p-waterfall "2.1.1" - pacote "^18.0.6" - pify "5.0.0" - read-cmd-shim "4.0.0" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.8" - set-blocking "^2.0.0" - signal-exit "3.0.7" - slash "3.0.0" - ssri "^10.0.6" - string-width "^4.2.3" - strip-ansi "^6.0.1" - strong-log-transformer "2.1.0" - tar "6.2.1" - temp-dir "1.0.0" - typescript ">=3 < 6" - upath "2.0.1" - uuid "^10.0.0" - validate-npm-package-license "3.0.4" - validate-npm-package-name "5.0.1" - wide-align "1.1.5" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "17.7.2" - yargs-parser "21.1.1" - -leven@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libnpmaccess@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.6.tgz#73be4c236258babc0a0bca6d3b6a93a6adf937cf" - integrity sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw== - dependencies: - npm-package-arg "^11.0.2" - npm-registry-fetch "^17.0.1" - -libnpmpublish@9.0.9: - version "9.0.9" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.9.tgz#e737378c09f09738377d2a276734be35cffb85e2" - integrity sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg== - dependencies: - ci-info "^4.0.0" - normalize-package-data "^6.0.1" - npm-package-arg "^11.0.2" - npm-registry-fetch "^17.0.1" - proc-log "^4.2.0" - semver "^7.3.7" - sigstore "^2.2.0" - ssri "^10.0.6" - -lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== - dependencies: - immediate "~3.0.5" - -lines-and-columns@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lines-and-columns@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" - integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== - -load-json-file@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -localforage@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" - integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== - dependencies: - lie "3.1.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== - -lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== - -lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== - -lodash.merge@^4.4.0, lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== - -lodash.unescape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg== - -lodash@^3.2.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ== - -lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.0.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -long-timeout@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" - integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - -lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -luxon@^1.23.x: - version "1.28.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.1.tgz#528cdf3624a54506d710290a2341aa8e6e6c61b0" - integrity sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw== - -luxon@^3.2.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.5.0.tgz#6b6f65c5cd1d61d1fd19dbf07ee87a50bf4b8e20" - integrity sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ== - -luxon@~3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.6.1.tgz#d283ffc4c0076cb0db7885ec6da1c49ba97e47b0" - integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ== - -make-dir@4.0.0, make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" - integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== - dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" - http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - proc-log "^4.2.0" - promise-retry "^2.0.1" - ssri "^10.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memory-streams@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/memory-streams/-/memory-streams-0.1.3.tgz#d9b0017b4b87f1d92f55f2745c9caacb1dc93ceb" - integrity sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA== - dependencies: - readable-stream "~1.0.2" - -mensch@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd" - integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g== - -meow@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@^1.1.1, methods@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -microdata-rdf-streaming-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.2.0.tgz#130967af0be59ce8ddf5fef4588a0ffa44a17d69" - integrity sha512-cMLNLEcS0mPaiA9iwq6BnsQK9sx2uBwjpRZIEvMRBNJpbvV58f8AFtPeYzNFh3OPyX9B49NYJ77bB0jNAUCurw== - dependencies: - "@rdfjs/types" "*" - htmlparser2 "^6.0.0" - rdf-data-factory "^1.1.0" - relative-to-absolute-iri "^1.0.2" - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimer@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/mimer/-/mimer-1.1.1.tgz#f880cef5009e58d4755a98bfd7b3f6de1ce168f4" - integrity sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw== - -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - -minipass-fetch@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" - integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -modify-values@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -moleculer-bull@^0.2.5: - version "0.2.8" - resolved "https://registry.yarnpkg.com/moleculer-bull/-/moleculer-bull-0.2.8.tgz#304bd9f0ac8143c1202e5d0a5d328ec11434c05c" - integrity sha512-ayVIqVmc6HVD6SL0RLsmMYqDnnPqwrcEWAPpY31kbUIfU3CBH2grGaqA5adyZBNCo4gQz09+4O9m+Hqxls06Ag== - dependencies: - bull "^3.15.0" - lodash "^4.17.15" - -moleculer-db@^0.8.15, moleculer-db@^0.8.16: - version "0.8.26" - resolved "https://registry.yarnpkg.com/moleculer-db/-/moleculer-db-0.8.26.tgz#508821ead1454aef386ca6fef7e5da5c0ac6abf5" - integrity sha512-pbUYNqVrev3Y4yUskGSkRMkCwN1vrNKq6bWLFWeKeOanP+X/ZjAPFrY4AMVdqwBCIn2Z8q0w+pHe4C70KuI/uA== - dependencies: - "@seald-io/nedb" "^3.0.0" - bluebird "^3.7.2" - flat "^5.0.2" - lodash "^4.17.21" - -moleculer-mail@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/moleculer-mail/-/moleculer-mail-1.2.6.tgz#e92029b54747eaba620a7636227bf58e8e8a2146" - integrity sha512-i1r1lraG6JTHOeHgUxrP5nQEfvxhldZkYjlcNTgu6blvdv0aWe2GqK6/p+D/dPum4jY6QEKaNB6twI8N+nTAmA== - dependencies: - bluebird "^3.7.2" - email-templates "^2.7.1" - lodash "^4.17.21" - nodemailer "^4.6.7" - nodemailer-html-to-text "^2.1.0" - -moleculer-schedule@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/moleculer-schedule/-/moleculer-schedule-0.2.3.tgz#2aec032431fb5fafcd03c04c25f651bad4b02fe9" - integrity sha512-cFHpnHe56y6grSQov9KR1Y8OGmIFImOPelsR2poMdCulgRC49kThKDxBx11ZwASCNx/UtadmaLJ+sX8xRnuGFQ== - dependencies: - lodash "^4.17.21" - node-schedule "^2.0.0" - -moleculer-web@^0.10.0-beta1, moleculer-web@^0.10.7: - version "0.10.7" - resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.7.tgz#f9fe712b4cc277627af08b3587d6d3b6fb4e1685" - integrity sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q== - dependencies: - "@fastify/busboy" "^1.0.0" - body-parser "^1.19.0" - es6-error "^4.1.1" - etag "^1.8.1" - fresh "^0.5.2" - isstream "^0.1.2" - kleur "^4.1.4" - lodash "^4.17.21" - path-to-regexp "^3.1.0" - qs "^6.11.0" - serve-static "^1.14.1" - -moleculer@^0.14.17, moleculer@^0.14.18, moleculer@^0.14.19, moleculer@^0.14.29, moleculer@^0.14.31: - version "0.14.35" - resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.35.tgz#529fe5fad8b85645d54a99a010a924b136ce6a3f" - integrity sha512-KB4qs0zNTjE9z7Bl27FFLPaWkAsUFJajF2njozJeor1phFCAYP5S1JsWOSrnUBTtsH7SX4gTw8tGRdcgh1eyVQ== - dependencies: - args "^5.0.3" - eventemitter2 "^6.4.9" - fastest-validator "^1.19.0" - glob "^7.2.0" - ipaddr.js "^2.2.0" - kleur "^4.1.5" - lodash "^4.17.21" - lru-cache "^6.0.0" - node-fetch "^2.6.7" - recursive-watch "^1.1.4" - -moment-timezone@^0.5.31: - version "0.5.46" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.46.tgz#a21aa6392b3c6b3ed916cd5e95858a28d893704a" - integrity sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw== - dependencies: - moment "^2.29.4" - -moment@2.30.1, moment@^2.29.4: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - -mri@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.3, ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -n3@^1.26.0: - version "1.26.0" - resolved "https://registry.yarnpkg.com/n3/-/n3-1.26.0.tgz#3d69de04bee680b9ebec9dbc1033dc1e6934d351" - integrity sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w== - dependencies: - buffer "^6.0.3" - readable-stream "^4.0.0" - -n3@^1.6.3, n3@^1.8.0: - version "1.23.1" - resolved "https://registry.yarnpkg.com/n3/-/n3-1.23.1.tgz#42a5aded4802db7a3c5d22feec19bdd919190268" - integrity sha512-3f0IYJo+6+lXypothmlwPzm3wJNffsxUwnfONeFv2QqWq7RjTvyCMtkRXDUXW6XrZoOzaQX8xTTSYNlGjXcGtw== - dependencies: - buffer "^6.0.3" - queue-microtask "^1.1.2" - readable-stream "^4.0.0" - -nan@^2.19.0, nan@^2.20.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3" - integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw== - -nanoid@^3.3.8: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.4" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-abi@^3.3.0: - version "3.73.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.73.0.tgz#4459ea77e71969edba8588387eecb05e2c2cff3b" - integrity sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg== - dependencies: - semver "^7.3.5" - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - -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.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.0, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^3.2.10: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-forge@^0.10.0, node-forge@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-gyp-build@^4.3.0: - version "4.8.4" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" - integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== - -node-gyp@^10.0.0: - version "10.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a" - integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^10.3.10" - graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^4.1.0" - semver "^7.3.5" - tar "^6.2.1" - which "^4.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-machine-id@1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" - integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== - -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== - -node-schedule@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3" - integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ== - dependencies: - cron-parser "^4.2.0" - long-timeout "0.1.1" - sorted-array-functions "^1.3.0" - -nodemailer-html-to-text@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz#996decccc9aff6371ec36e3633b18ed75e0fc8f2" - integrity sha512-oaNLWoMyeC5Y8DbtYSwBRHTJVdkojKfiP6J4hh8+10Oih0QoAUqEsnM0WbFA13yhbzjyp1yXBNiDl0QV7BpoRA== - dependencies: - html-to-text "^2.1.0" - -nodemailer@^4.6.7: - version "4.7.0" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.7.0.tgz#4420e06abfffd77d0618f184ea49047db84f4ad8" - integrity sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -nopt@^7.0.0, nopt@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" - integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== - dependencies: - abbrev "^2.0.0" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" - integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== - dependencies: - hosted-git-info "^7.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" - integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.2.tgz#1ef8006c4a9e9204ddde403035f7ff7d718251ca" - integrity sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: - version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" - integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-packlist@8.0.2, npm-packlist@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" - integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== - dependencies: - ignore-walk "^6.0.4" - -npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" - integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^11.0.0" - semver "^7.3.5" - -npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1" - integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA== - dependencies: - "@npmcli/redact" "^2.0.0" - jsonparse "^1.3.1" - make-fetch-happen "^13.0.0" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minizlib "^2.1.2" - npm-package-arg "^11.0.0" - proc-log "^4.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -nth-check@~1.0.0, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nx@17.2.5, nx@v17.2.5: - version "17.2.5" - resolved "https://registry.yarnpkg.com/nx/-/nx-17.2.5.tgz#fc34bda5fec6b5b0eb65d17c85cb7128e9b028f8" - integrity sha512-bMjl6V+h2Pb7k/iieebQskFqiB5Z7VQgdFJNI6ScMfoMhClWVuF+/fdhxrlN4IaiWHHnZ/KDr7h4kc7puFLr9w== - dependencies: - "@nrwl/tao" v17.2.5 - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "3.0.0-rc.46" - "@zkochan/js-yaml" "0.0.6" - axios "^1.5.1" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^8.0.1" - dotenv "~16.3.1" - dotenv-expand "~10.0.0" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^11.1.0" - glob "7.1.4" - ignore "^5.0.4" - jest-diff "^29.4.1" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - lines-and-columns "~2.0.3" - minimatch "3.0.5" - node-machine-id "1.1.12" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.5.3" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nx/nx-darwin-arm64" v17.2.5 - "@nx/nx-darwin-x64" v17.2.5 - "@nx/nx-freebsd-x64" v17.2.5 - "@nx/nx-linux-arm-gnueabihf" v17.2.5 - "@nx/nx-linux-arm64-gnu" v17.2.5 - "@nx/nx-linux-arm64-musl" v17.2.5 - "@nx/nx-linux-x64-gnu" v17.2.5 - "@nx/nx-linux-x64-musl" v17.2.5 - "@nx/nx-win32-arm64-msvc" v17.2.5 - "@nx/nx-win32-x64-msvc" v17.2.5 - -"nx@>=17.1.2 < 21": - version "20.3.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-20.3.2.tgz#32db1c3d339db9f456610f84732eff012ae12749" - integrity sha512-VWUHX0uCn8ACFbpBTpgucDzwe4q/a/UU3AYOhzKCvTzb3kQiyvoxLjORSze93ZNEqgor0PMkCQgcoMBUjxJfzQ== - dependencies: - "@napi-rs/wasm-runtime" "0.2.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "3.0.2" - "@zkochan/js-yaml" "0.0.7" - axios "^1.7.4" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^8.0.1" - dotenv "~16.4.5" - dotenv-expand "~11.0.6" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - front-matter "^4.0.2" - ignore "^5.0.4" - jest-diff "^29.4.1" - jsonc-parser "3.2.0" - lines-and-columns "2.0.3" - minimatch "9.0.3" - node-machine-id "1.1.12" - npm-run-path "^4.0.1" - open "^8.4.0" - ora "5.3.0" - resolve.exports "2.0.3" - semver "^7.5.3" - string-width "^4.2.3" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - yaml "^2.6.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nx/nx-darwin-arm64" "20.3.2" - "@nx/nx-darwin-x64" "20.3.2" - "@nx/nx-freebsd-x64" "20.3.2" - "@nx/nx-linux-arm-gnueabihf" "20.3.2" - "@nx/nx-linux-arm64-gnu" "20.3.2" - "@nx/nx-linux-arm64-musl" "20.3.2" - "@nx/nx-linux-x64-gnu" "20.3.2" - "@nx/nx-linux-x64-musl" "20.3.2" - "@nx/nx-win32-arm64-msvc" "20.3.2" - "@nx/nx-win32-x64-msvc" "20.3.2" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" - integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== - -object-inspect@^1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.2, object.assign@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -object.fromentries@^2.0.2, object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.getownpropertydescriptors@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" - integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== - dependencies: - array.prototype.reduce "^1.0.6" - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - gopd "^1.0.1" - safe-array-concat "^1.1.2" - -object.groupby@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" - integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -oidc-token-hash@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6" - integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -openid-client@^4.7.4: - version "4.9.1" - resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-4.9.1.tgz#4f00a9d1566c0fa08f0dd5986cf0e6b1e5d14186" - integrity sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w== - dependencies: - aggregate-error "^3.1.0" - got "^11.8.0" - jose "^2.0.5" - lru-cache "^6.0.0" - make-error "^1.3.6" - object-hash "^2.0.1" - oidc-token-hash "^5.0.1" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g== - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -ora@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" - integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== - dependencies: - bl "^4.0.3" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - log-symbols "^4.0.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -own-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" - integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== - dependencies: - get-intrinsic "^1.2.6" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@4.0.0, p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-pipe@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== - -p-queue@6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -p-waterfall@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== - dependencies: - p-reduce "^2.0.0" - -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -pacote@^18.0.0, pacote@^18.0.6: - version "18.0.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" - integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A== - dependencies: - "@npmcli/git" "^5.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/package-json" "^5.1.0" - "@npmcli/promise-spawn" "^7.0.0" - "@npmcli/run-script" "^8.0.0" - cacache "^18.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^11.0.0" - npm-packlist "^8.0.0" - npm-pick-manifest "^9.0.0" - npm-registry-fetch "^17.0.0" - proc-log "^4.0.0" - promise-retry "^2.0.1" - sigstore "^2.2.0" - ssri "^10.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-conflict-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - -parse-imports@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/parse-imports/-/parse-imports-2.2.1.tgz#0a6e8b5316beb5c9905f50eb2bbb8c64a4805642" - integrity sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ== - dependencies: - es-module-lexer "^1.5.3" - slashes "^3.0.12" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-link-header@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" - integrity sha512-Z0gpfHmwCIKDr5rRzjypL+p93aHVWO7e+0rFcUl9E3sC67njjs+xHFenuboSXZGlvYtmQqRzRaE3iFpTUnLmFQ== - dependencies: - xtend "~4.0.1" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-srcset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" - integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -passport-cas2@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/passport-cas2/-/passport-cas2-0.0.12.tgz#aca3364a02d158a01ca7fadd71c6c26fd8ee9370" - integrity sha512-ck/6x2lb6eYhlC/9lmw7ZTgqzSiJmYB0px7H2B00kpRZlBQuds9yPzFMi7kBWtgFpTDf0o+rwQMUYga8yO/jIg== - dependencies: - cas "https://github.com/joshchan/node-cas" - passport-strategy "^1.0.0" - -passport-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" - integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== - dependencies: - passport-strategy "1.x.x" - -passport-strategy@1.x.x, passport-strategy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" - integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== - -passport@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" - integrity sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg== - dependencies: - passport-strategy "1.x.x" - pause "0.0.1" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1, path-scurry@^1.6.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" - integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== - -path-to-regexp@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0, picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" - integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss-selector-parser@^6.0.10: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss@^8.3.11: - version "8.5.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" - integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== - dependencies: - nanoid "^3.3.8" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.1.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" - integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" - integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -proggy@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" - integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" - integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-limit@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26" - integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw== - -promise-polyfill@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-1.1.6.tgz#cd04eff46f5c95c3a7d045591d79b5e3e01f12d7" - integrity sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promise.prototype.finally@^3.1.2: - version "3.1.8" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz#b97bc1bbca74dc21b6e978c85a70752a7a0b7c3a" - integrity sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - set-function-name "^2.0.1" - -promise@^7.0.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.2.tgz#2226e7c6508b1da3471008ae17066a7c3251e660" - integrity sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ== - dependencies: - read "^3.0.1" - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -psl@^1.1.28: - version "1.15.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" - integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== - dependencies: - punycode "^2.3.1" - -pug-attrs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" - integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== - dependencies: - constantinople "^4.0.1" - js-stringify "^1.0.2" - pug-runtime "^3.0.0" - -pug-code-gen@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.3.tgz#58133178cb423fe1716aece1c1da392a75251520" - integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw== - dependencies: - constantinople "^4.0.1" - doctypes "^1.1.0" - js-stringify "^1.0.2" - pug-attrs "^3.0.0" - pug-error "^2.1.0" - pug-runtime "^3.0.1" - void-elements "^3.1.0" - with "^7.0.0" - -pug-error@^2.0.0, pug-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.1.0.tgz#17ea37b587b6443d4b8f148374ec27b54b406e55" - integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg== - -pug-filters@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" - integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== - dependencies: - constantinople "^4.0.1" - jstransformer "1.0.0" - pug-error "^2.0.0" - pug-walk "^2.0.0" - resolve "^1.15.1" - -pug-lexer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" - integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== - dependencies: - character-parser "^2.2.0" - is-expression "^4.0.0" - pug-error "^2.0.0" - -pug-linker@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" - integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== - dependencies: - pug-error "^2.0.0" - pug-walk "^2.0.0" - -pug-load@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" - integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== - dependencies: - object-assign "^4.1.1" - pug-walk "^2.0.0" - -pug-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" - integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== - dependencies: - pug-error "^2.0.0" - token-stream "1.0.0" - -pug-runtime@^3.0.0, pug-runtime@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" - integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== - -pug-strip-comments@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" - integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== - dependencies: - pug-error "^2.0.0" - -pug-walk@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" - integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== - -pug@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.3.tgz#e18324a314cd022883b1e0372b8af3a1a99f7597" - integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g== - dependencies: - pug-code-gen "^3.0.3" - pug-filters "^4.0.0" - pug-lexer "^5.0.1" - pug-linker "^4.0.0" - pug-load "^3.0.0" - pug-parser "^6.0.0" - pug-runtime "^3.0.1" - pug-strip-comments "^2.0.0" - -pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -qs@^6.11.0, qs@^6.5.1: - version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" - integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== - dependencies: - side-channel "^1.1.0" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -queue-microtask@^1.1.2, queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -rdf-canonize@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-1.2.0.tgz#9872b2cc6ed92a9969e834f9f042addaf0d4f7f9" - integrity sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw== - dependencies: - node-forge "^0.10.0" - semver "^6.3.0" - -rdf-canonize@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-2.0.1.tgz#12c9b8b41570cd669d9b152c9e679063478ba194" - integrity sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA== - dependencies: - semver "^6.3.0" - setimmediate "^1.0.5" - -rdf-canonize@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-3.4.0.tgz#87f88342b173cc371d812a07de350f0c1aa9f058" - integrity sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA== - dependencies: - setimmediate "^1.0.5" - -rdf-canonize@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-4.0.1.tgz#2b5a37f147d35b484b40ff2140245fc5985a9595" - integrity sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA== - dependencies: - setimmediate "^1.0.5" - -rdf-data-factory@^1.1.0, rdf-data-factory@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz#11b39e0c80e51bca83828b2ddaa686f733be966f" - integrity sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ== - dependencies: - "@rdfjs/types" "^1.0.0" - -rdf-data-model@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rdf-data-model/-/rdf-data-model-1.0.0.tgz#e768e1c2cd904c186471b20d1a4fce77c7712a4b" - integrity sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g== - -rdf-isomorphic@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz#cd6d433cd85bf79d903d5f0fdeea42a40eb27265" - integrity sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ== - dependencies: - "@rdfjs/types" "*" - hash.js "^1.1.7" - rdf-string "^1.6.0" - rdf-terms "^1.7.0" - -rdf-parse@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/rdf-parse/-/rdf-parse-1.9.1.tgz#6ec1d70a20d7e65b2c5a5acaee811f50b03940ac" - integrity sha512-W6ouYE+ufmCNFmXD1iGs5gUZH75jZekh/I5qF8a4Sl37BUc9mY0Jz5A0CV1tiKKhx+I+HYfxyX9VjOljD8rzgQ== - dependencies: - "@comunica/actor-http-native" "~1.22.0" - "@comunica/actor-rdf-parse-html" "~1.22.0" - "@comunica/actor-rdf-parse-html-microdata" "~1.22.0" - "@comunica/actor-rdf-parse-html-rdfa" "~1.22.0" - "@comunica/actor-rdf-parse-html-script" "~1.22.0" - "@comunica/actor-rdf-parse-jsonld" "^1.22.0" - "@comunica/actor-rdf-parse-n3" "~1.22.0" - "@comunica/actor-rdf-parse-rdfxml" "~1.22.0" - "@comunica/actor-rdf-parse-xml-rdfa" "~1.22.0" - "@comunica/bus-http" "~1.22.0" - "@comunica/bus-init" "~1.22.0" - "@comunica/bus-rdf-parse" "~1.22.0" - "@comunica/bus-rdf-parse-html" "~1.22.0" - "@comunica/core" "~1.22.0" - "@comunica/mediator-combine-union" "~1.22.0" - "@comunica/mediator-number" "~1.22.0" - "@comunica/mediator-race" "~1.22.0" - "@rdfjs/types" "*" - stream-to-string "^1.2.0" - -rdf-string@^1.6.0: - version "1.6.3" - resolved "https://registry.yarnpkg.com/rdf-string/-/rdf-string-1.6.3.tgz#5c3173fad13e6328698277fb8ff151e3423282ab" - integrity sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g== - dependencies: - "@rdfjs/types" "*" - rdf-data-factory "^1.1.0" - -rdf-terms@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/rdf-terms/-/rdf-terms-1.11.0.tgz#0c2e3a2b43f1042959c9263af27dab08dc4b084d" - integrity sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ== - dependencies: - "@rdfjs/types" "*" - rdf-data-factory "^1.1.0" - rdf-string "^1.6.0" - -rdfa-streaming-parser@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz#34072e760aa07e6cddf210923888f9834354fb92" - integrity sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ== - dependencies: - "@rdfjs/types" "*" - htmlparser2 "^6.0.0" - rdf-data-factory "^1.1.0" - relative-to-absolute-iri "^1.0.2" - -rdfxml-streaming-parser@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz#485af3a01abc2dc49149b8758da9a12351d34348" - integrity sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ== - dependencies: - "@rdfjs/types" "*" - rdf-data-factory "^1.1.0" - relative-to-absolute-iri "^1.0.0" - sax "^1.2.4" - -react-is@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -read-cmd-shim@4.0.0, read-cmd-shim@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" - integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== - dependencies: - mute-stream "^1.0.0" - -readable-stream-node-to-web@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz#8b7614faa1465ebfa0da9b9ca6303fa27073b7cf" - integrity sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ== - -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - integrity sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.3.5, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" - integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-stream@~1.0.2: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-web-to-node-stream@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -recursive-watch@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/recursive-watch/-/recursive-watch-1.1.4.tgz#7a340f860dd715836a592f008cceba5a1dd0b734" - integrity sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ== - dependencies: - ttl "^1.3.0" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -redis-commands@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" - integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.5.3: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - -regexpp@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -relative-to-absolute-iri@^1.0.0, relative-to-absolute-iri@^1.0.2, relative-to-absolute-iri@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz#f2fd6ee60c78d9ffc4926bd20bdf84479b91d765" - integrity sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q== - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@5.0.0, resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve.exports@2.0.3, resolve.exports@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" - integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== - -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.22.4: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== - dependencies: - glob "^9.2.0" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -rsync@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/rsync/-/rsync-0.6.1.tgz#3681a0098bd8750448f8bf9da1fee09f7763742b" - integrity sha512-39HcwWuM67CQ9tHloazShXWUOWa2m3SGqX6XQhQMSj0VCQMkSI9PodoxM7/+hKf2p4v2umbhfoarYqd1gwII/w== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" - integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - has-symbols "^1.1.0" - isarray "^2.0.5" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize-html@^2.6.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.14.0.tgz#bd2a7b97ee1d86a7f0e0babf3a4468f639c3a429" - integrity sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g== - dependencies: - deepmerge "^4.2.2" - escape-string-regexp "^4.0.0" - htmlparser2 "^8.0.0" - is-plain-object "^5.0.0" - parse-srcset "^1.0.2" - postcss "^8.3.11" - -sax@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" - integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== - -security-context@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/security-context/-/security-context-4.0.0.tgz#e73f5d22bee9c7699a02eaaced359d001dc948e9" - integrity sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-error@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" - integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA== - dependencies: - type-fest "^0.8.0" - -serialize-error@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" - integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== - dependencies: - type-fest "^0.20.2" - -serve-static@^1.14.1: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1, set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -sharp@^0.31.2: - version "0.31.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" - integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" - prebuild-install "^7.1.1" - semver "^7.3.8" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.0.6, side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sigstore@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" - integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - "@sigstore/sign" "^2.3.2" - "@sigstore/tuf" "^2.3.4" - "@sigstore/verify" "^1.2.1" - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@3.0.0, slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slashes@^3.0.12: - version "3.0.12" - resolved "https://registry.yarnpkg.com/slashes/-/slashes-3.0.12.tgz#3d664c877ad542dc1509eaf2c50f38d483a6435a" - integrity sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA== - -slick@^1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" - integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^8.0.3: - version "8.0.5" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" - integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== - dependencies: - agent-base "^7.1.2" - debug "^4.3.4" - socks "^2.8.3" - -socks@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sodium-native@^3.2.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-3.4.1.tgz#44616c07ccecea15195f553af88b3e574b659741" - integrity sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ== - dependencies: - node-gyp-build "^4.3.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -sorted-array-functions@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" - integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== - -source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sparqlalgebrajs@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparqlalgebrajs/-/sparqlalgebrajs-3.0.3.tgz#a0b2b2ea2bacf97a74b4e3f3fc90be72b96d94a1" - integrity sha512-XFNhsO55bprayrM35h/jY0kzzuGc3oZ1On3kc+s7Un0BFQBXa046aLcMZFp4MYSvn7GtMe9eZ08ONFnBH5kEsQ== - dependencies: - "@rdfjs/types" "*" - "@types/sparqljs" "^3.1.2" - fast-deep-equal "^3.1.3" - minimist "^1.2.5" - rdf-data-factory "^1.1.0" - rdf-isomorphic "^1.3.0" - rdf-string "^1.6.0" - sparqljs "^3.4.2" - -sparqljs@^3.4.2, sparqljs@^3.5.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/sparqljs/-/sparqljs-3.7.3.tgz#075821d51ef4954284e36569503fe5558cfb71b0" - integrity sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg== - dependencies: - rdf-data-factory "^1.1.2" - -sparqljson-parse@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz#8844cae3b030864e459e37e6229bf394fc2dee14" - integrity sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw== - dependencies: - "@rdfjs/types" "*" - "@types/node" "^13.1.0" - JSONStream "^1.3.3" - rdf-data-factory "^1.1.0" - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.21" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" - integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== - -speakingurl@^14.0.1: - version "14.0.1" - resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" - integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@^1.1.1, sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -ssh2-sftp-client@^7.2.1: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-7.2.3.tgz#b6533cb1202bb547dc3cfb53afb61ae60bde976a" - integrity sha512-Bmq4Uewu3e0XOwu5bnPbiS5KRQYv+dff5H6+85V4GZrPrt0Fkt1nUH+uXanyAkoNxUpzjnAPEEoLdOaBO9c3xw== - dependencies: - concat-stream "^2.0.0" - promise-retry "^2.0.1" - ssh2 "^1.8.0" - -ssh2@^1.8.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.16.0.tgz#79221d40cbf4d03d07fe881149de0a9de928c9f0" - integrity sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg== - dependencies: - asn1 "^0.2.6" - bcrypt-pbkdf "^1.0.2" - optionalDependencies: - cpu-features "~0.0.10" - nan "^2.20.0" - -sshpk@^1.18.0, sshpk@^1.7.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^10.0.0, ssri@^10.0.6: - version "10.0.6" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" - integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== - dependencies: - minipass "^7.0.3" - -stable-hash@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.4.tgz#55ae7dadc13e4b3faed13601587cec41859b42f7" - integrity sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stream-to-string@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.1.tgz#15cb325d88b33cc62accb032c7093f85eb785db2" - integrity sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA== - dependencies: - promise-polyfill "^1.1.6" - -streamify-string@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/streamify-string/-/streamify-string-1.0.1.tgz#9e220de33e1c475dd30e0206f5b1815cc6c9525b" - integrity sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw== - -streamsearch@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-template@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96" - integrity sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg== - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trim@^1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" - integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-object-atoms "^1.0.0" - has-property-descriptors "^1.0.2" - -string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" - integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -superagent@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" - integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== - dependencies: - component-emitter "^1.2.0" - cookiejar "^2.1.0" - debug "^3.1.0" - extend "^3.0.0" - form-data "^2.3.1" - formidable "^1.2.0" - methods "^1.1.1" - mime "^1.4.1" - qs "^6.5.1" - readable-stream "^2.3.5" - -supertest@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-4.0.2.tgz#c2234dbdd6dc79b6f15b99c8d6577b90e4ce3f36" - integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== - dependencies: - methods "^1.1.2" - superagent "^3.8.3" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -synckit@^0.9.1: - version "0.9.2" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" - integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.2.tgz#425f154f3404cb16cb8ff6e671d45ab2ed9596c5" - integrity sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4, tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@6.2.1, tar@^6.1.11, tar@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-decoding@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" - integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@~0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -token-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" - integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -ts-api-utils@^1.3.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" - integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -ttl@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/ttl/-/ttl-1.3.1.tgz#d8fa510bedb6a956d85b60ec56a57339ae0d5b2c" - integrity sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA== - -tuf-js@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" - integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== - dependencies: - "@tufjs/models" "2.0.1" - debug "^4.3.4" - make-fetch-happen "^13.0.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.0, type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - -typed-array-byte-offset@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" - integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.9" - -typed-array-length@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" - integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - reflect.getprototypeof "^1.0.6" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -"typescript@>=3 < 6", typescript@^5.3.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" - integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== - -uglify-js@^3.1.4: - version "3.19.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" - integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== - -uid-safe@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" - integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== - dependencies: - random-bytes "~1.0.0" - -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - -underscore.string@^3.2.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" - integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== - dependencies: - sprintf-js "^1.1.1" - util-deprecate "^1.0.2" - -underscore@^1.8.3: - version "1.13.7" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" - integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -undici@^5.21.2: - version "5.28.5" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" - integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== - dependencies: - "@fastify/busboy" "^2.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" - integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" - integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-join@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util.promisify@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.3.tgz#3d77cf56628b4aad743e5acde8e5c44cea7dbf1c" - integrity sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - for-each "^0.3.3" - get-intrinsic "^1.2.6" - has-proto "^1.2.0" - has-symbols "^1.1.0" - object.getownpropertydescriptors "^2.1.8" - safe-array-concat "^1.1.3" - -util@^0.12.4: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-to-istanbul@^9.0.1: - version "9.3.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" - integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -valid-data-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-2.0.0.tgz#2220fa9f8d4e761ebd3f3bb02770f1212b810537" - integrity sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA== - -validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@5.0.1, validate-npm-package-name@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" - integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== - -vc-js@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/vc-js/-/vc-js-0.6.4.tgz#49f408c590260d28c25a3ca4e30ece0de61c3ae1" - integrity sha512-ogwYys94k8mFyFZEn1Ru3nIA5Z/9C4iCU4grNWUYOYVWldcsn6UDp6erYFbaSkilzv7RK3cQu5N8prkxfHpZwA== - dependencies: - commander "^2.20.3" - credentials-context "^1.0.0" - debug "^4.1.1" - fs-extra "^8.1.0" - get-stdin "^7.0.0" - jsonld "^2.0.2" - jsonld-signatures "^5.0.0" - supports-color "^7.1.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -void-elements@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -wait-for-expect@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" - integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== - -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - -walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -wcwidth@^1.0.0, wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -web-resource-inliner@^4.2.1: - version "4.3.4" - resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz#07e1b4bcbcbee1021251b018e902bac5713f1be0" - integrity sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA== - dependencies: - async "^3.1.0" - chalk "^2.4.2" - datauri "^2.0.0" - htmlparser2 "^4.0.0" - lodash.unescape "^4.0.1" - request "^2.88.0" - safer-buffer "^2.1.2" - valid-data-url "^2.0.0" - xtend "^4.0.2" - -web-streams-node@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/web-streams-node/-/web-streams-node-0.4.0.tgz#641e42d7a7c4df95785a774e2484ba93d36fd672" - integrity sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w== - dependencies: - is-stream "^1.1.0" - readable-stream-node-to-web "^1.0.1" - web-streams-ponyfill "^1.4.1" - -web-streams-polyfill@^3.0.3: - 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== - -web-streams-ponyfill@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz#0ae863cc5f7493903679f16b08cbf14d432b62f4" - integrity sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.16, which-typed-array@^1.1.18, which-typed-array@^1.1.2: - version "1.1.18" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" - integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.3" - for-each "^0.3.3" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -wide-align@1.1.5, wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -with@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" - integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== - dependencies: - "@babel/parser" "^7.9.6" - "@babel/types" "^7.9.6" - assert-never "^1.2.1" - babel-walk "3.0.0-canary-5" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@5.0.1, write-file-atomic@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-pkg@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" - -xmldom@0.1.19: - version "0.1.19" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" - integrity sha512-pDyxjQSFQgNHkU+yjvoF+GXVGJU7e9EnOg/KcGMDihBIKjTsOeDYaECwC/O9bsUWKY+Sd9izfE43JXC46EOHKA== - -xtend@^4.0.2, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== - -yargs-parser@21.1.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@17.7.2, yargs@^17.3.1, yargs@^17.6.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.27.1" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/compat-data@npm:7.26.5" + checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/compat-data@npm:7.27.2" + checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/compat-data@npm:7.28.0" + checksum: 10c0/c4e527302bcd61052423f757355a71c3bc62362bac13f7f130de16e439716f66091ff5bdecda418e8fa0271d4c725f860f0ee23ab7bf6e769f7a8bb16dfcb531 + languageName: node + linkType: hard + +"@babel/core@npm:^7.23.9": + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.26.0" + "@babel/generator": "npm:^7.26.0" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.0" + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e + languageName: node + linkType: hard + +"@babel/core@npm:^7.27.4, @babel/core@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/core@npm:7.28.0" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.0" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-module-transforms": "npm:^7.27.3" + "@babel/helpers": "npm:^7.27.6" + "@babel/parser": "npm:^7.28.0" + "@babel/template": "npm:^7.27.2" + "@babel/traverse": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/423302e7c721e73b1c096217880272e02020dfb697a55ccca60ad01bba90037015f84d0c20c6ce297cf33a19bb704bc5c2b3d3095f5284dfa592bd1de0b9e8c3 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/generator@npm:7.26.5" + dependencies: + "@babel/parser": "npm:^7.26.5" + "@babel/types": "npm:^7.26.5" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/generator@npm:7.27.1" + dependencies: + "@babel/parser": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/generator@npm:7.28.0" + dependencies: + "@babel/parser": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10c0/1b3d122268ea3df50fde707ad864d9a55c72621357d5cebb972db3dd76859c45810c56e16ad23123f18f80cc2692f5a015d2858361300f0f224a05dc43d36a92 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" + dependencies: + "@babel/types": "npm:^7.27.3" + checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/helper-compilation-targets@npm:7.26.5" + dependencies: + "@babel/compat-data": "npm:^7.26.5" + "@babel/helper-validator-option": "npm:^7.25.9" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/helper-compilation-targets@npm:7.27.2" + dependencies: + "@babel/compat-data": "npm:^7.27.2" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4ee199671d6b9bdd4988aa2eea4bdced9a73abfc831d81b00c7634f49a8fc271b3ceda01c067af58018eb720c6151322015d463abea7072a368ee13f35adbb4c + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + regexpu-core: "npm:^6.2.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/591fe8bd3bb39679cc49588889b83bd628d8c4b99c55bafa81e80b1e605a348b64da955e3fd891c4ba3f36fd015367ba2eadea22af6a7de1610fbb5bcc2d3df0 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.5": + version: 0.6.5 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + debug: "npm:^4.4.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.22.10" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e + languageName: node + linkType: hard + +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-transforms@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-module-transforms@npm:7.27.3" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.3" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/fccb4f512a13b4c069af51e1b56b20f54024bcf1591e31e978a30f3502567f34f90a80da6a19a6148c249216292a8074a0121f9e52602510ef0f32dbce95ca01 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-plugin-utils@npm:7.27.1" + checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-wrap-function": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-replace-supers@npm:7.27.1" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-wrap-function@npm:7.27.1" + dependencies: + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/c472f75c0951bc657ab0a117538c7c116566ae7579ed47ac3f572c42dc78bd6f1e18f52ebe80d38300c991c3fcaa06979e2f8864ee919369dabd59072288de30 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" + dependencies: + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" + checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.27.6": + version: 7.28.2 + resolution: "@babel/helpers@npm:7.28.2" + dependencies: + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.2" + checksum: 10c0/f3e7b21517e2699c4ca193663ecfb1bf1b2ae2762d8ba4a9f1786feaca0d6984537fc60bf2206e92c43640a6dada6b438f523cc1ad78610d0151aeb061b37f63 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6": + version: 7.26.5 + resolution: "@babel/parser@npm:7.26.5" + dependencies: + "@babel/types": "npm:^7.26.5" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e + languageName: node + linkType: hard + +"@babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/parser@npm:7.27.2" + dependencies: + "@babel/types": "npm:^7.27.1" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/parser@npm:7.28.0" + dependencies: + "@babel/types": "npm:^7.28.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7dfffa978ae1cd179641a7c4b4ad688c6828c2c58ec96b118c2fb10bc3715223de6b88bff1ebff67056bb5fccc568ae773e3b83c592a1b843423319f80c99ebd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/b94e6c3fc019e988b1499490829c327a1067b4ddea8ad402f6d0554793c9124148c2125338c723661b6dff040951abc1f092afbf3f2d234319cd580b68e52445 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/06a954ee672f7a7c44d52b6e55598da43a7064e80df219765c51c37a0692641277e90411028f7cae4f4d1dedeed084f0c453576fa421c35a81f1603c5e3e0146 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/739d577e649d7d7b9845dc309e132964327ab3eaea43ad04d04a7dcb977c63f9aa9a423d1ca39baf10939128d02f52e6fda39c834fb9f1753785b1497e72c4dc + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e76b1f6f9c3bbf72e17d7639406d47f09481806de4db99a8de375a0bb40957ea309b20aa705f0c25ab1d7c845e3f365af67eafa368034521151a0e352a03ef2f + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/787d85e72a92917e735aa54e23062fa777031f8a07046e67f5026eff3d91e64eb535575dd1df917b0011bee014ae51287478af14c1d4ba60bc81e326bc044cfc + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cc0662633c0fe6df95819fef223506ddf26c369c8d64ab21a728d9007ec866bf9436a253909819216c24a82186b6ccbc1ec94d7aaf3f82df227c7c02fa6a704b + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/396997dd81fc1cf242b921e337d25089d6b9dc3596e81322ff11a6359326dc44f2f8b82dcc279c2e514cafaf8964dc7ed39e9fab4b8af1308b57387d111f6a20 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-classes@npm:7.28.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3b213b43104fe99dd7e79401a86d09e545836e057a70ffe77e8196a87bf67ae167e502ae90afdf0d1a2be683be5652514aaeda743bd984e583523dd8ecfef887 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e09a12f8c8ae0e6a6144c102956947b4ec05f6c844169121d0ec4529c2d30ad1dc59fee67736193b87a402f44552c888a519a680a31853bdb4d34788c28af3b0 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cc7ccafa952b3ff7888544d5688cfafaba78c69ce1e2f04f3233f4f78c9de5e46e9695f5ea42c085b0c0cfa39b10f366d362a2be245b6d35b66d3eb1d427ccb2 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f9caddfad9a551b4dabe0dcb7c040f458fbaaa7bbb44200c20198b32c8259be8e050e58d2c853fdac901a4cfe490b86aa857036d8d461b192dd010d0e242dedb + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/121502a252b3206913e1e990a47fea34397b4cbf7804d4cd872d45961bc45b603423f60ca87f3a3023a62528f5feb475ac1c9ec76096899ec182fcb135eba375 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 + languageName: node + linkType: hard + +"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3baa706af3112adf2ae0c7ec0dc61b63dd02695eb5582f3c3a2b2d05399c6aa7756f55e7bbbd5412e613a6ba1dd6b6736904074b4d7ebd6b45a1e3f9145e4094 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/953d21e01fed76da8e08fb5094cade7bf8927c1bb79301916bec2db0593b41dbcfbca1024ad5db886b72208a93ada8f57a219525aad048cf15814eeb65cf760d + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2379714aca025516452a7c1afa1ca42a22b9b51a5050a653cc6198a51665ab82bdecf36106d32d731512706a1e373c5637f5ff635737319aa42f3827da2326d6 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b0abc7c0d09d562bf555c646dce63a30288e5db46fd2ce809a61d064415da6efc3b2b3c59b8e4fe98accd072c89a2f7c3765b400e4bf488651735d314d9feeb + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4def972dcd23375a266ea1189115a4ff61744b2c9366fc1de648b3fab2c650faf1a94092de93a33ff18858d2e6c4dddeeee5384cb42ba0129baeab01a5cdf1e2 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f16fca62d144d9cbf558e7b5f83e13bb6d0f21fdeff3024b0cecd42ffdec0b4151461da42bd0963512783ece31aafa5ffe03446b4869220ddd095b24d414e2b5 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a435fc03aaa65c6ef8e99b2d61af0994eb5cdd4a28562d78c3b0b0228ca7e501aa255e1dff091a6996d7d3ea808eb5a65fd50ecd28dfb10687a8a1095dcadc7a + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b72cbebbfe46fcf319504edc1cf59f3f41c992dd6840db766367f6a1d232cd2c52143c5eaf57e0316710bee251cae94be97c6d646b5022fcd9274ccb131b470c + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.0" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.0" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/360dc6fd5285ee5e1d3be8a1fb0decd120b2a1726800317b4ab48b7c91616247030239b7fa06ceaa1a8a586fde1e143c24d45f8d41956876099d97d664f8ef1e + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/807a4330f1fac08e2682d57bc82e714868fc651c8876f9a8b3a3fd8f53c129e87371f8243e712ac7dae11e090b737a2219a02fe1b6459a29e664fa073c3277bb + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b18ff5124e503f0a25d6b195be7351a028b3992d6f2a91fb4037e2a2c386400d66bc1df8f6df0a94c708524f318729e81a95c41906e5a7919a06a43e573a525 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.27.7": + version: 7.27.7 + resolution: "@babel/plugin-transform-parameters@npm:7.27.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/232bedfe9d28df215fb03cc7623bdde468b1246bdd6dc24465ff4bf9cc5f5a256ae33daea1fafa6cc59705e4d29da9024bb79baccaa5cd92811ac5db9b9244f2 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a8c4536273ca716dcc98e74ea25ca76431528554922f184392be3ddaf1761d4aa0e06f1311577755bd1613f7054fb51d29de2ada1130f743d329170a1aa1fe56 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.28.0": + version: 7.28.1 + resolution: "@babel/plugin-transform-regenerator@npm:7.28.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6c9e6eb80ce9c0bde0876c80979e078fbc85dc802272cba4ee72b5b1c858472e38167c418917e4f0d4384ce888706d95544a8d266880c0e199e167e078168b67 + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/31ae596ab56751cf43468a6c0a9d6bc3521d306d2bee9c6957cdb64bea53812ce24bd13a32f766150d62b737bca5b0650b2c62db379382fff0dccbf076055c33 + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-runtime@npm:7.28.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/71eba1e6aaafacb2ec0fd468394c7aeaff32265b21424bd9b2d963368a4a5260547e06976bb34e2553a7179463c3a3a4c2a4552256b5112c8b7dcadb7bd5bb07 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-spread@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b34fc58b33bd35b47d67416655c2cbc8578fbb3948b4592bc15eb6d8b4046986e25c06e3b9929460fa4ab08e9653582415e7ef8b87d265e1239251bdf5a4c162 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.27.1": + version: 7.28.0 + resolution: "@babel/plugin-transform-typescript@npm:7.28.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/049c2bd3407bbf5041d8c95805a4fadee6d176e034f6b94ce7967b92a846f1e00f323cf7dfbb2d06c93485f241fb8cf4c10520e30096a6059d251b94e80386e9 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a332bc3cb3eeea67c47502bc52d13a0f8abae5a7bfcb08b93a8300ddaff8d9e1238f912969494c1b494c1898c6f19687054440706700b6d12cb0b90d88beb4d0 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/236645f4d0a1fba7c18dc8ffe3975933af93e478f2665650c2d91cf528cfa1587cde5cfe277e0e501fc03b5bf57638369575d6539cef478632fb93bd7d7d7178 + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/preset-env@npm:7.28.0" + dependencies: + "@babel/compat-data": "npm:^7.28.0" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" + "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.28.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.27.1" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.28.0" + "@babel/plugin-transform-class-properties": "npm:^7.27.1" + "@babel/plugin-transform-class-static-block": "npm:^7.27.1" + "@babel/plugin-transform-classes": "npm:^7.28.0" + "@babel/plugin-transform-computed-properties": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.0" + "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.0" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.27.1" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.27.1" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.27.1" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-modules-systemjs": "npm:^7.27.1" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1" + "@babel/plugin-transform-numeric-separator": "npm:^7.27.1" + "@babel/plugin-transform-object-rest-spread": "npm:^7.28.0" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/plugin-transform-private-methods": "npm:^7.27.1" + "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.28.0" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.27.1" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f343103b8f0e8da5be4ae031aff8bf35da4764997af4af78ae9506f421b785dd45da1bc09f845b1fc308c8b7d134aead4a1f89e7fb6e213cd2f9fe1d2aa78bc9 + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@babel/types": "npm:^7.4.4" + esutils: "npm:^2.0.2" + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/preset-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cba6ca793d915f8aff9fe2f13b0dfbf5fd3f2e9a17f17478ec9878e9af0d206dcfe93154b9fd353727f16c1dca7c7a3ceb4943f8d28b216235f106bc0fbbcaa3 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.13.9": + version: 7.28.2 + resolution: "@babel/runtime@npm:7.28.2" + checksum: 10c0/c20afe253629d53a405a610b12a62ac74d341a2c1e0fb202bbef0c118f6b5c84f94bf16039f58fd0483dd256901259930a43976845bdeb180cab1f882c21b6e0 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.2" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/traverse@npm:7.26.5" + dependencies: + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.5" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.5" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/traverse@npm:7.27.1" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/traverse@npm:7.28.0" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.0" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.0" + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.0" + debug: "npm:^4.3.1" + checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5, @babel/types@npm:^7.6.1, @babel/types@npm:^7.9.6": + version: 7.26.5 + resolution: "@babel/types@npm:7.26.5" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 + languageName: node + linkType: hard + +"@babel/types@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 + languageName: node + linkType: hard + +"@babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2, @babel/types@npm:^7.4.4": + version: 7.28.2 + resolution: "@babel/types@npm:7.28.2" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/24b11c9368e7e2c291fe3c1bcd1ed66f6593a3975f479cbb9dd7b8c8d8eab8a962b0d2fca616c043396ce82500ac7d23d594fbbbd013828182c01596370a0b10 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 + languageName: node + linkType: hard + +"@comunica/actor-abstract-mediatyped@npm:^1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-abstract-mediatyped@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/7812dbca52fc7442579ccc95a1b2a0e7b41058dcfab56c55e18a142c666e7ba8f7b7ff62f64ed205c6f0a4128cbab63dd1a84faaf5d8a84545b3e635c447a2ac + languageName: node + linkType: hard + +"@comunica/actor-http-native@npm:~1.22.0": + version: 1.22.1 + resolution: "@comunica/actor-http-native@npm:1.22.1" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@types/parse-link-header": "npm:^1.0.0" + cross-fetch: "npm:^3.0.5" + follow-redirects: "npm:^1.5.1" + parse-link-header: "npm:^1.0.1" + peerDependencies: + "@comunica/bus-http": ^1.0.0 + "@comunica/core": ^1.0.0 + checksum: 10c0/65288a5ae2cbefdcc5b7315851a4a7488966357de3ecf35510aa8f379241675d8579a9d595b44bffbc93eec544071fb6107d2c51ce6555f224e5273273dab07f + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html-microdata@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html-microdata@npm:1.22.0" + dependencies: + microdata-rdf-streaming-parser: "npm:^1.2.0" + peerDependencies: + "@comunica/bus-rdf-parse-html": ^1.17.0 + "@comunica/core": ^1.17.0 + checksum: 10c0/ceeb80e597ffa78dec991cd0c6fdd0af54f4a0fe93708aa2c41cecef6f10a9374b2f7fbfb221cce60d6f4ea4792e9eec04eb774b60005073545937c46b56ee6e + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html-rdfa@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html-rdfa@npm:1.22.0" + dependencies: + rdfa-streaming-parser: "npm:^1.5.0" + peerDependencies: + "@comunica/bus-rdf-parse-html": ^1.0.0 + "@comunica/core": ^1.8.0 + checksum: 10c0/0a9969b1227f5a94712f58c9b45501174a49689e225d4b4805b7edbc9a8b035c1bc77a46b08e00b9b1f4354f5054e82b7d4197889cce44fce8b18390dfdc2742 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html-script@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html-script@npm:1.22.0" + dependencies: + "@comunica/bus-rdf-parse-html": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + relative-to-absolute-iri: "npm:^1.0.5" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.4.0 + "@comunica/core": ^1.4.0 + checksum: 10c0/7da4ddf8aaffd7f17d96c56b800a27c2cf7f87ad6b00daa620a89a800184ae7d32cdc871a3dcef202a8dd95fcfd316744ac72289681593be009dca74620b81c0 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-html@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-html@npm:1.22.0" + dependencies: + "@comunica/bus-rdf-parse-html": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + htmlparser2: "npm:^7.0.0" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.8.0 + "@comunica/core": ^1.8.0 + checksum: 10c0/9a0e2932d6f4e4242438a581e0fd88a3149395c5a2b8bdc5e120c757a8a42423ad1e5e3c7fbfa110bab3bea06041a41bb207ca6a68dbfc6b7c9e4fe4d23191a1 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-jsonld@npm:^1.22.0": + version: 1.22.1 + resolution: "@comunica/actor-rdf-parse-jsonld@npm:1.22.1" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + jsonld-context-parser: "npm:^2.1.2" + jsonld-streaming-parser: "npm:^2.4.0" + stream-to-string: "npm:^1.2.0" + peerDependencies: + "@comunica/bus-http": ^1.0.0 + "@comunica/bus-rdf-parse": ^1.0.0 + "@comunica/core": ^1.0.0 + checksum: 10c0/959e5abe524083704705f1e13470cbaf00fdcdf6f8434b657e98155f390b13d651544899200c85456f5bb800a78367c3a9bef241a574707712091a430269eb31 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-n3@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-n3@npm:1.22.0" + dependencies: + "@types/n3": "npm:^1.4.4" + n3: "npm:^1.6.3" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.0.0 + "@comunica/core": ^1.0.0 + checksum: 10c0/5651a13e6b07ac4f45f73fd525077f1fd5c43af64944b4882ec7bd4f31eae12c87a763f3a39fbccb8018a39144f60e11fac2db2a725e73ca1f2595f936d05f37 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-rdfxml@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-rdfxml@npm:1.22.0" + dependencies: + rdfxml-streaming-parser: "npm:^1.5.0" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.1.0 + "@comunica/core": ^1.1.0 + checksum: 10c0/c4cf0c85794995fe94438108ea54fe5ff74928d8bb179aa3b52bc1bdcb3dcade02d9ef16dfbdf27e22cf4760ba1786f6989b34c2eed3fbd1c80815ca0cf5aa13 + languageName: node + linkType: hard + +"@comunica/actor-rdf-parse-xml-rdfa@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/actor-rdf-parse-xml-rdfa@npm:1.22.0" + dependencies: + rdfa-streaming-parser: "npm:^1.5.0" + peerDependencies: + "@comunica/bus-rdf-parse": ^1.8.0 + "@comunica/core": ^1.8.0 + checksum: 10c0/d517f28fc6b63b0d88a31b0a7a2053f9f0d74c4d3040669b139c3e64a193b364ec59bb7a291eda08ca10b74e51d9b7045724f5772ee99731278ac06093243da5 + languageName: node + linkType: hard + +"@comunica/bus-http@npm:~1.22.0": + version: 1.22.1 + resolution: "@comunica/bus-http@npm:1.22.1" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@types/readable-stream": "npm:^2.3.11" + is-stream: "npm:^2.0.0" + readable-web-to-node-stream: "npm:^3.0.2" + web-streams-node: "npm:^0.4.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/5578a14ab438e11a4da413119a24d4da1b3f681be44ab7c05711bfbff563d9601de793e081c524747ae6a66fad413a82d3d52814915ba8c92fb96055f5f37f41 + languageName: node + linkType: hard + +"@comunica/bus-init@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/bus-init@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/76ed0ad2c12125788a98611276ed30ebd1e7f2ae52541e8f64ebde71fcb513bf6d6eed38322da3fc955197f104d20571aa1a0c54444907c8bbbd5c58058ba101 + languageName: node + linkType: hard + +"@comunica/bus-rdf-parse-html@npm:^1.22.0, @comunica/bus-rdf-parse-html@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/bus-rdf-parse-html@npm:1.22.0" + dependencies: + "@rdfjs/types": "npm:*" + peerDependencies: + "@comunica/core": ^1.8.0 + checksum: 10c0/fb68896db681674831130d521e0e41d85bb2e3fea2be96f2f44f9304cb9e1271b1c51221d16c3d8bb015b55e2c108611562657e3c89fc8bd6e5c087f04290bfa + languageName: node + linkType: hard + +"@comunica/bus-rdf-parse@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/bus-rdf-parse@npm:1.22.0" + dependencies: + "@comunica/actor-abstract-mediatyped": "npm:^1.22.0" + "@rdfjs/types": "npm:*" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/f4e3eb35b7757a93a44f1050de542f6e8fc39fcf74b22c89100eaec4556653b270163422f918a9e09833f57244e82553b7a03a80bbdab64c82b97b3aebf7dd02 + languageName: node + linkType: hard + +"@comunica/context-entries@npm:^1.22.0": + version: 1.22.0 + resolution: "@comunica/context-entries@npm:1.22.0" + checksum: 10c0/edd1cb3e7861f043e63040f98e9959ace55a1c9b90ed5ab9ab0bc40eea182ec81b75e7c1650e1e1a64dc97634f33f6c6b57878f0003bd0217f696040ec8b9234 + languageName: node + linkType: hard + +"@comunica/core@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/core@npm:1.22.0" + dependencies: + "@comunica/context-entries": "npm:^1.22.0" + "@comunica/types": "npm:^1.22.0" + immutable: "npm:^3.8.2" + checksum: 10c0/73b4d0228b87ee8807d7219c7cae045389cf8b967b2cbfe024f244bb9cffb73b38c516673cf80764fa02ab3c1d32f803a0de05b88d9b38c0eff8a701f97a1c03 + languageName: node + linkType: hard + +"@comunica/mediator-combine-union@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/mediator-combine-union@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/72cee255c14709a3039149b64f281a480c32d2deade1c704587c3714d827ecc5e1ecbb1762211d2d554cf4759d4ba1a4fddd243c1e8bfda4493883b7bd07dca0 + languageName: node + linkType: hard + +"@comunica/mediator-number@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/mediator-number@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/f7fb1863ae17b4316da03af93333e9a288d4a4067a9f09e838e9a59aeee70f385e1c21dd3f144d352991d865dbcd7d809ddddfa26b7e6dedf65dbc56124bf4ae + languageName: node + linkType: hard + +"@comunica/mediator-race@npm:~1.22.0": + version: 1.22.0 + resolution: "@comunica/mediator-race@npm:1.22.0" + peerDependencies: + "@comunica/core": ^1.0.0 + checksum: 10c0/6506d8fe2631a55be151c2ca4d2efdeab2fa0a376d650bbdab1b78aa5773507df5ab874eac0931990d1965879cc0566fa056663e1461f71fec67eb7d93d810ca + languageName: node + linkType: hard + +"@comunica/types@npm:^1.22.0": + version: 1.22.0 + resolution: "@comunica/types@npm:1.22.0" + dependencies: + "@rdfjs/types": "npm:*" + asynciterator: "npm:^3.2.0" + immutable: "npm:^3.8.2" + sparqlalgebrajs: "npm:^3.0.1" + checksum: 10c0/55810c126392810f973467ae0b411e942b4d3202cd67500994321621dd550f4a9a470bba24a095d100edc8ad207e8936627ab6a6a4fbb33cc1c1098d10e1db88 + languageName: node + linkType: hard + +"@digitalbazaar/credentials-context@npm:^3.1.0": + version: 3.1.0 + resolution: "@digitalbazaar/credentials-context@npm:3.1.0" + checksum: 10c0/0fa22d00542450b3e0567511779dafcd943bcba75a2be83fa80b95c1f255f1b2f701ea64a0ab3959c8503a9f1682f724de0ffe8f5eea18b065d5074d61e52cb7 + languageName: node + linkType: hard + +"@digitalbazaar/data-integrity@npm:^2.5.0": + version: 2.5.0 + resolution: "@digitalbazaar/data-integrity@npm:2.5.0" + dependencies: + base58-universal: "npm:^2.0.0" + base64url-universal: "npm:^2.0.0" + jsonld-signatures: "npm:^11.3.0" + checksum: 10c0/0080cbbd5425ef83e0ca3855fb8bc18f6d382a5f2aebba9a1dc7003dc6e066d2fd1ad95737f6ea36c3c8c2f696330316991aabb46d518420220487b8444086f5 + languageName: node + linkType: hard + +"@digitalbazaar/ed25519-multikey@npm:^1.0.0, @digitalbazaar/ed25519-multikey@npm:^1.1.0, @digitalbazaar/ed25519-multikey@npm:^1.3.0": + version: 1.3.0 + resolution: "@digitalbazaar/ed25519-multikey@npm:1.3.0" + dependencies: + "@noble/ed25519": "npm:^1.6.0" + base58-universal: "npm:^2.0.0" + base64url-universal: "npm:^2.0.0" + checksum: 10c0/07cf6ea5591a269fca5b9709481e249b20cf83145ab56c25c8b75f668739163af95eae6742b50b8575522075e0933242343564d14d661f5bcae70fade13726b5 + languageName: node + linkType: hard + +"@digitalbazaar/ed25519-signature-2020@npm:^5.4.0": + version: 5.4.0 + resolution: "@digitalbazaar/ed25519-signature-2020@npm:5.4.0" + dependencies: + "@digitalbazaar/ed25519-multikey": "npm:^1.1.0" + "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.1.0" + base58-universal: "npm:^2.0.0" + ed25519-signature-2020-context: "npm:^1.1.0" + jsonld-signatures: "npm:^11.3.0" + checksum: 10c0/7fcdd54c18d85dbbf937464ff8f330876de336d2607c944981fa8e69bcc2df59a5181441d364c27e269d1a6d2028217ed3f662028634c57ab55e739c3af42c16 + languageName: node + linkType: hard + +"@digitalbazaar/ed25519-verification-key-2020@npm:^4.1.0, @digitalbazaar/ed25519-verification-key-2020@npm:^4.2.0": + version: 4.2.0 + resolution: "@digitalbazaar/ed25519-verification-key-2020@npm:4.2.0" + dependencies: + "@noble/ed25519": "npm:^1.6.0" + base58-universal: "npm:^2.0.0" + base64url-universal: "npm:^2.0.0" + crypto-ld: "npm:^7.0.0" + checksum: 10c0/386b4be965e10b0253c5fd620c4e386c2f57587937c9215ed0127c3f42016d32e99844cc5eabbddc41642ade31760539e67e97d69cfdb0df6b3beb58737b9a01 + languageName: node + linkType: hard + +"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:^1.2.0": + version: 1.2.0 + resolution: "@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:1.2.0" + dependencies: + "@digitalbazaar/ed25519-multikey": "npm:^1.0.0" + jsonld: "npm:^8.1.0" + rdf-canonize: "npm:^4.0.1" + checksum: 10c0/2473ddb96cf50ab6e478f203ff3eaa7b530a9a96bb45c5f8cfada1fe4fb29dc04cd92cff86c6b9286848b86531deccbd3cdfca7fc0821a09880e94af8b3d8bed + languageName: node + linkType: hard + +"@digitalbazaar/http-client@npm:^3.4.1": + version: 3.4.1 + resolution: "@digitalbazaar/http-client@npm:3.4.1" + dependencies: + ky: "npm:^0.33.3" + ky-universal: "npm:^0.11.0" + undici: "npm:^5.21.2" + checksum: 10c0/218240da52e7303a63e822448fb6dc2eb3a42d0418f51fd9240b267703ffad2e45c17df01d5d8f6886ea8d0cdcf65ee929ae5377703c0e9d2db4f68313f8246c + languageName: node + linkType: hard + +"@digitalbazaar/security-context@npm:^1.0.0": + version: 1.0.1 + resolution: "@digitalbazaar/security-context@npm:1.0.1" + checksum: 10c0/6d1444002958454be5dd70cc6ba4d0df952f90162756d6320d88501ff44fc7d48dcb2aa3452b77e8941a9da4e4c7d050d3510827db93637ff469b92391c63324 + languageName: node + linkType: hard + +"@digitalbazaar/vc@npm:^7.1.0": + version: 7.1.0 + resolution: "@digitalbazaar/vc@npm:7.1.0" + dependencies: + "@digitalbazaar/credentials-context": "npm:^3.1.0" + ed25519-signature-2018-context: "npm:^1.1.0" + jsonld: "npm:^8.3.1" + jsonld-signatures: "npm:^11.2.1" + checksum: 10c0/4914cd7bfc2556512b7b1b78b7032180fcd8a966d365ecd62f0534da2347fa43b9023f2460f15fd9c8029088af8ecc81481603fe9cf953e40393a956338356bb + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.1.0": + version: 1.3.1 + resolution: "@emnapi/core@npm:1.3.1" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.1" + tslib: "npm:^2.4.0" + checksum: 10c0/d3be1044ad704e2c486641bc18908523490f28c7d38bd12d9c1d4ce37d39dae6c4aecd2f2eaf44c6e3bd90eaf04e0591acc440b1b038cdf43cce078a355a0ea0 + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.4.3": + version: 1.4.5 + resolution: "@emnapi/core@npm:1.4.5" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.4" + tslib: "npm:^2.4.0" + checksum: 10c0/da4a57f65f325d720d0e0d1a9c6618b90c4c43a5027834a110476984e1d47c95ebaed4d316b5dddb9c0ed9a493ffeb97d1934f9677035f336d8a36c1f3b2818f + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.1.0": + version: 1.3.1 + resolution: "@emnapi/runtime@npm:1.3.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.4.3": + version: 1.4.5 + resolution: "@emnapi/runtime@npm:1.4.5" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/37a0278be5ac81e918efe36f1449875cbafba947039c53c65a1f8fc238001b866446fc66041513b286baaff5d6f9bec667f5164b3ca481373a8d9cb65bfc984b + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.1": + version: 1.0.1 + resolution: "@emnapi/wasi-threads@npm:1.0.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/1e0c8036b8d53e9b07cc9acf021705ef6c86ab6b13e1acda7fffaf541a2d3565072afb92597419173ced9ea14f6bf32fce149106e669b5902b825e8b499e5c6c + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.4": + version: 1.0.4 + resolution: "@emnapi/wasi-threads@npm:1.0.4" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/2c91a53e62f875800baf035c4d42c9c0d18e5afd9a31ca2aac8b435aeaeaeaac386b5b3d0d0e70aa7a5a9852bbe05106b1f680cd82cce03145c703b423d41313 + languageName: node + linkType: hard + +"@es-joy/jsdoccomment@npm:~0.46.0": + version: 0.46.0 + resolution: "@es-joy/jsdoccomment@npm:0.46.0" + dependencies: + comment-parser: "npm:1.4.1" + esquery: "npm:^1.6.0" + jsdoc-type-pratt-parser: "npm:~4.0.0" + checksum: 10c0/a7a67936ebf6d9aaf74af018c3ac744769af3552b05ad9b88fca96b2ffdca16e724b0ff497f53634ec4cca81e98d8c471b6b6bde0fa5b725af4222ad9a0707f0 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^1.0.0": + version: 1.2.1 + resolution: "@fastify/busboy@npm:1.2.1" + dependencies: + text-decoding: "npm:^1.0.0" + checksum: 10c0/fe13effa7a7a2aa270ef62586cd8d04339036b10ffa1d3d6a883e502fcc1bdc6d8de1bd7ac9d46ef7718bed3b1202cac058e281f5053dee262af7538243cb780 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c + languageName: node + linkType: hard + +"@hutson/parse-repository-url@npm:^3.0.0": + version: 3.0.2 + resolution: "@hutson/parse-repository-url@npm:3.0.2" + checksum: 10c0/d9197757ecad2df18d29d3e1d1fe0716d458fd88b849c71cbec9e78239f911074c97e8d764dfd8ed890431c1137e52dd7a337207fd65be20ce0784f7860ae4d1 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 10c0/d67226ff7ac544a495c77df38187e69e0e3a0783724777f86caadafb306e2155dc3b5787d5927916ddd7fb4a53561ac8f705448ac3235d18ea60da5854829fdf + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: "npm:^5.3.1" + find-up: "npm:^4.1.0" + get-package-type: "npm:^0.1.0" + js-yaml: "npm:^3.13.1" + resolve-from: "npm:^5.0.0" + checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + languageName: node + linkType: hard + +"@jest/console@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/console@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + jest-message-util: "npm:30.0.5" + jest-util: "npm:30.0.5" + slash: "npm:^3.0.0" + checksum: 10c0/1400e9ee281dd070f543f8f8696b9aca4ba1f81d5cbfb3cae030664012ff5961c76ac2c8ccee172e416e15f88af3b10840548adbee4de0ec63100d44416b17ef + languageName: node + linkType: hard + +"@jest/core@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/core@npm:30.0.5" + dependencies: + "@jest/console": "npm:30.0.5" + "@jest/pattern": "npm:30.0.1" + "@jest/reporters": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + exit-x: "npm:^0.2.2" + graceful-fs: "npm:^4.2.11" + jest-changed-files: "npm:30.0.5" + jest-config: "npm:30.0.5" + jest-haste-map: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.0.5" + jest-resolve-dependencies: "npm:30.0.5" + jest-runner: "npm:30.0.5" + jest-runtime: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + jest-watcher: "npm:30.0.5" + micromatch: "npm:^4.0.8" + pretty-format: "npm:30.0.5" + slash: "npm:^3.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/d3437dca1fccbb44c6c8a327b93e510e10999745b7c7dae94ad88d4fa4ce6d3c823e49d17caf79560b69a7db91fc10c7443a8014f8178622a0b11514b5106aa6 + languageName: node + linkType: hard + +"@jest/diff-sequences@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/diff-sequences@npm:30.0.1" + checksum: 10c0/3a840404e6021725ef7f86b11f7b2d13dd02846481264db0e447ee33b7ee992134e402cdc8b8b0ac969d37c6c0183044e382dedee72001cdf50cfb3c8088de74 + languageName: node + linkType: hard + +"@jest/environment@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/environment@npm:30.0.5" + dependencies: + "@jest/fake-timers": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + jest-mock: "npm:30.0.5" + checksum: 10c0/e403b6f98fa3e39dd6462fa192e3bd55e9ac9c2322ca4471b9342495913a90ecaa5fc53238d4ad8a0dca7d53aa4b9de122721234e36f3a0445031c25757a3178 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/expect-utils@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + checksum: 10c0/d0ee162a1d1816724580bea53e7b422b891af073bdae439e78d04d5db09e6557e334f4c3d2892b9de750a59e79605f55d3ca8dbec9fb2ba33d8b803ed98463ad + languageName: node + linkType: hard + +"@jest/expect@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/expect@npm:30.0.5" + dependencies: + expect: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + checksum: 10c0/6ff40adf2f2cfa53f7a23bc2b85ae99d3264420e81202d45d1dc198009f4441ee575d910e79e589f69c2dd47e0ef9a3b66018f44760da02d98f474361f7c4d1c + languageName: node + linkType: hard + +"@jest/fake-timers@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/fake-timers@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@sinonjs/fake-timers": "npm:^13.0.0" + "@types/node": "npm:*" + jest-message-util: "npm:30.0.5" + jest-mock: "npm:30.0.5" + jest-util: "npm:30.0.5" + checksum: 10c0/4c403e624d758780016c2012b23112ff421efd601def289b201c4a5e03c46f995c7c3509d7b0b56dbe17cd5cbc66920734bd976ebe12125d6fd864d71888a50d + languageName: node + linkType: hard + +"@jest/get-type@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/get-type@npm:30.0.1" + checksum: 10c0/92437ae42d0df57e8acc2d067288151439db4752cde4f5e680c73c8a6e34568bbd8c1c81a2f2f9a637a619c2aac8bc87553fb80e31475b59e2ed789a71e5e540 + languageName: node + linkType: hard + +"@jest/globals@npm:30.0.5, @jest/globals@npm:^30.0.5": + version: 30.0.5 + resolution: "@jest/globals@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/expect": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + jest-mock: "npm:30.0.5" + checksum: 10c0/abe8e4b11f30c2885e42afa9e01d4364db8c6de4c3221f411b00a9081d3cc67226f84775efbbd17735dedb391222253f945ee260714d78b2a7304b7afa61b6d8 + languageName: node + linkType: hard + +"@jest/pattern@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/pattern@npm:30.0.1" + dependencies: + "@types/node": "npm:*" + jest-regex-util: "npm:30.0.1" + checksum: 10c0/32c5a7bfb6c591f004dac0ed36d645002ed168971e4c89bd915d1577031672870032594767557b855c5bc330aa1e39a2f54bf150d2ee88a7a0886e9cb65318bc + languageName: node + linkType: hard + +"@jest/reporters@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/reporters@npm:30.0.5" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + collect-v8-coverage: "npm:^1.0.2" + exit-x: "npm:^0.2.2" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^5.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-worker: "npm:30.0.5" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.2" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/9f8a214ff69427b644e26981fa92af49b77819d512ac17d0b4190d1dc110b0bebeb7791faa7548b8097f010b094c3b5e3244e18f3837a3fe8385ff60c7114539 + languageName: node + linkType: hard + +"@jest/schemas@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/schemas@npm:30.0.5" + dependencies: + "@sinclair/typebox": "npm:^0.34.0" + checksum: 10c0/449dcd7ec5c6505e9ac3169d1143937e67044ae3e66a729ce4baf31812dfd30535f2b3b2934393c97cfdf5984ff581120e6b38f62b8560c8b5b7cc07f4175f65 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jest/snapshot-utils@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/snapshot-utils@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + natural-compare: "npm:^1.4.0" + checksum: 10c0/db270c2d6e216d132c5e0b05d8ff5bbe4fbd4e65b2de4cf94eacb44152e8f17fbbba8bdd2cb83b5fc2b1094db6424c7e1507b7eaade518dbc815cfacbdf6598b + languageName: node + linkType: hard + +"@jest/source-map@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/source-map@npm:30.0.1" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + callsites: "npm:^3.1.0" + graceful-fs: "npm:^4.2.11" + checksum: 10c0/e7bda2786fc9f483d9dd7566c58c4bd948830997be862dfe80a3ae5550ff3f84753abb52e705d02ebe9db9f34ba7ebec4c2db11882048cdeef7a66f6332b3897 + languageName: node + linkType: hard + +"@jest/test-result@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/test-result@npm:30.0.5" + dependencies: + "@jest/console": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + collect-v8-coverage: "npm:^1.0.2" + checksum: 10c0/2a43134ee28616a178b5a6379c837f2fb054a5e4a6ab411b9d15b85224e5d459d88902cdbf83edf5821c2c77fe13e67d078eff64c6871f3b08ebff0548a9a2e4 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/test-sequencer@npm:30.0.5" + dependencies: + "@jest/test-result": "npm:30.0.5" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + slash: "npm:^3.0.0" + checksum: 10c0/3caaea0558474764cd616f38acdc22ff4ce6ef806d931134ed366429fdea7110352b89d702e9cc1d71fa142d79e86f2f4e6eb0441a76a1896682e124ed8f42b4 + languageName: node + linkType: hard + +"@jest/transform@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/transform@npm:30.0.5" + dependencies: + "@babel/core": "npm:^7.27.4" + "@jest/types": "npm:30.0.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + babel-plugin-istanbul: "npm:^7.0.0" + chalk: "npm:^4.1.2" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-util: "npm:30.0.5" + micromatch: "npm:^4.0.8" + pirates: "npm:^4.0.7" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^5.0.1" + checksum: 10c0/771f57b1bede66049de80dcbf984c74b7d3c072e905f2516ff3f86dc01abd2f79d821b9a6ae21f27cb26d484cd539c13b1a51f71c15e1aed0c62314203c5a186 + languageName: node + linkType: hard + +"@jest/types@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/types@npm:30.0.5" + dependencies: + "@jest/pattern": "npm:30.0.1" + "@jest/schemas": "npm:30.0.5" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + "@types/istanbul-reports": "npm:^3.0.4" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.33" + chalk: "npm:^4.1.2" + checksum: 10c0/fd097a390e36edacbd2c92a8378ec0cd67abec5e234bab7a80aec6eb8625568052b0c32acf472388d04c4cf384b8fa2871d0d12a56b4b06eaea93f2c6df0ec6c + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.12": + version: 0.3.12 + resolution: "@jridgewell/gen-mapping@npm:0.3.12" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/32f771ae2467e4d440be609581f7338d786d3d621bac3469e943b9d6d116c23c4becb36f84898a92bbf2f3c0511365c54a945a3b86a83141547a2a360a5ec0c7 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.4 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" + checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.29 + resolution: "@jridgewell/trace-mapping@npm:0.3.29" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/fb547ba31658c4d74eb17e7389f4908bf7c44cef47acb4c5baa57289daf68e6fe53c639f41f751b3923aca67010501264f70e7b49978ad1f040294b22c37b333 + languageName: node + linkType: hard + +"@lerna/create@npm:8.1.9": + version: 8.1.9 + resolution: "@lerna/create@npm:8.1.9" + dependencies: + "@npmcli/arborist": "npm:7.5.4" + "@npmcli/package-json": "npm:5.2.0" + "@npmcli/run-script": "npm:8.1.0" + "@nx/devkit": "npm:>=17.1.2 < 21" + "@octokit/plugin-enterprise-rest": "npm:6.0.1" + "@octokit/rest": "npm:19.0.11" + aproba: "npm:2.0.0" + byte-size: "npm:8.1.1" + chalk: "npm:4.1.0" + clone-deep: "npm:4.0.1" + cmd-shim: "npm:6.0.3" + color-support: "npm:1.1.3" + columnify: "npm:1.6.0" + console-control-strings: "npm:^1.1.0" + conventional-changelog-core: "npm:5.0.1" + conventional-recommended-bump: "npm:7.0.1" + cosmiconfig: "npm:9.0.0" + dedent: "npm:1.5.3" + execa: "npm:5.0.0" + fs-extra: "npm:^11.2.0" + get-stream: "npm:6.0.0" + git-url-parse: "npm:14.0.0" + glob-parent: "npm:6.0.2" + globby: "npm:11.1.0" + graceful-fs: "npm:4.2.11" + has-unicode: "npm:2.0.1" + ini: "npm:^1.3.8" + init-package-json: "npm:6.0.3" + inquirer: "npm:^8.2.4" + is-ci: "npm:3.0.1" + is-stream: "npm:2.0.0" + js-yaml: "npm:4.1.0" + libnpmpublish: "npm:9.0.9" + load-json-file: "npm:6.2.0" + lodash: "npm:^4.17.21" + make-dir: "npm:4.0.0" + minimatch: "npm:3.0.5" + multimatch: "npm:5.0.0" + node-fetch: "npm:2.6.7" + npm-package-arg: "npm:11.0.2" + npm-packlist: "npm:8.0.2" + npm-registry-fetch: "npm:^17.1.0" + nx: "npm:>=17.1.2 < 21" + p-map: "npm:4.0.0" + p-map-series: "npm:2.1.0" + p-queue: "npm:6.6.2" + p-reduce: "npm:^2.1.0" + pacote: "npm:^18.0.6" + pify: "npm:5.0.0" + read-cmd-shim: "npm:4.0.0" + resolve-from: "npm:5.0.0" + rimraf: "npm:^4.4.1" + semver: "npm:^7.3.4" + set-blocking: "npm:^2.0.0" + signal-exit: "npm:3.0.7" + slash: "npm:^3.0.0" + ssri: "npm:^10.0.6" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + strong-log-transformer: "npm:2.1.0" + tar: "npm:6.2.1" + temp-dir: "npm:1.0.0" + upath: "npm:2.0.1" + uuid: "npm:^10.0.0" + validate-npm-package-license: "npm:^3.0.4" + validate-npm-package-name: "npm:5.0.1" + wide-align: "npm:1.1.5" + write-file-atomic: "npm:5.0.1" + write-pkg: "npm:4.0.0" + yargs: "npm:17.7.2" + yargs-parser: "npm:21.1.1" + checksum: 10c0/f050e79c0bd982c6fdf9b7347275a94cc80f7a6599094f1cf114c10d5373c21afac9bd1a5c0b2ca400e6aaf18da883c384dfd6e5c84a186a2c09c912bf9b2238 + languageName: node + linkType: hard + +"@mapbox/node-pre-gyp@npm:^1.0.11": + version: 1.0.11 + resolution: "@mapbox/node-pre-gyp@npm:1.0.11" + dependencies: + detect-libc: "npm:^2.0.0" + https-proxy-agent: "npm:^5.0.0" + make-dir: "npm:^3.1.0" + node-fetch: "npm:^2.6.7" + nopt: "npm:^5.0.0" + npmlog: "npm:^5.0.1" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.11" + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:0.2.4": + version: 0.2.4 + resolution: "@napi-rs/wasm-runtime@npm:0.2.4" + dependencies: + "@emnapi/core": "npm:^1.1.0" + "@emnapi/runtime": "npm:^1.1.0" + "@tybys/wasm-util": "npm:^0.9.0" + checksum: 10c0/1040de49b2ef509db207e2517465dbf7fb3474f20e8ec32897672a962ff4f59872385666dac61dc9dbeae3cae5dad265d8dc3865da756adeb07d1634c67b03a1 + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.12 + resolution: "@napi-rs/wasm-runtime@npm:0.2.12" + dependencies: + "@emnapi/core": "npm:^1.4.3" + "@emnapi/runtime": "npm:^1.4.3" + "@tybys/wasm-util": "npm:^0.10.0" + checksum: 10c0/6d07922c0613aab30c6a497f4df297ca7c54e5b480e00035e0209b872d5c6aab7162fc49477267556109c2c7ed1eb9c65a174e27e9b87568106a87b0a6e3ca7d + languageName: node + linkType: hard + +"@noble/ed25519@npm:^1.6.0": + version: 1.7.3 + resolution: "@noble/ed25519@npm:1.7.3" + checksum: 10c0/dc162c3be5ae5a3cc0e6aff8209c8d175f24bba22f2b473aa849e102471193c83664b06f0ba2b5e01e9aa1a67a44daf313f478adb9f38768408a8bcad6145a48 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@nolyfill/is-core-module@npm:1.0.39": + version: 1.0.39 + resolution: "@nolyfill/is-core-module@npm:1.0.39" + checksum: 10c0/34ab85fdc2e0250879518841f74a30c276bca4f6c3e13526d2d1fe515e1adf6d46c25fcd5989d22ea056d76f7c39210945180b4859fc83b050e2da411aa86289 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/arborist@npm:7.5.4": + version: 7.5.4 + resolution: "@npmcli/arborist@npm:7.5.4" + dependencies: + "@isaacs/string-locale-compare": "npm:^1.1.0" + "@npmcli/fs": "npm:^3.1.1" + "@npmcli/installed-package-contents": "npm:^2.1.0" + "@npmcli/map-workspaces": "npm:^3.0.2" + "@npmcli/metavuln-calculator": "npm:^7.1.1" + "@npmcli/name-from-folder": "npm:^2.0.0" + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/query": "npm:^3.1.0" + "@npmcli/redact": "npm:^2.0.0" + "@npmcli/run-script": "npm:^8.1.0" + bin-links: "npm:^4.0.4" + cacache: "npm:^18.0.3" + common-ancestor-path: "npm:^1.0.1" + hosted-git-info: "npm:^7.0.2" + json-parse-even-better-errors: "npm:^3.0.2" + json-stringify-nice: "npm:^1.1.4" + lru-cache: "npm:^10.2.2" + minimatch: "npm:^9.0.4" + nopt: "npm:^7.2.1" + npm-install-checks: "npm:^6.2.0" + npm-package-arg: "npm:^11.0.2" + npm-pick-manifest: "npm:^9.0.1" + npm-registry-fetch: "npm:^17.0.1" + pacote: "npm:^18.0.6" + parse-conflict-json: "npm:^3.0.0" + proc-log: "npm:^4.2.0" + proggy: "npm:^2.0.0" + promise-all-reject-late: "npm:^1.0.0" + promise-call-limit: "npm:^3.0.1" + read-package-json-fast: "npm:^3.0.2" + semver: "npm:^7.3.7" + ssri: "npm:^10.0.6" + treeverse: "npm:^3.0.0" + walk-up-path: "npm:^3.0.1" + bin: + arborist: bin/index.js + checksum: 10c0/22417b804872e68b6486187bb769eabef7245c5d3fa055d5473f84a7088580543235f34af3047a0e9b357e70fccd768e8ef5c6c8664ed6909f659d07607ad955 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@npmcli/git@npm:^5.0.0": + version: 5.0.8 + resolution: "@npmcli/git@npm:5.0.8" + dependencies: + "@npmcli/promise-spawn": "npm:^7.0.0" + ini: "npm:^4.1.3" + lru-cache: "npm:^10.0.1" + npm-pick-manifest: "npm:^9.0.0" + proc-log: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^4.0.0" + checksum: 10c0/892441c968404950809c7b515a93b78167ea1db2252f259f390feae22a2c5477f3e1629e105e19a084c05afc56e585bf3f13c2f13b54a06bfd6786f0c8429532 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": + version: 2.1.0 + resolution: "@npmcli/installed-package-contents@npm:2.1.0" + dependencies: + npm-bundled: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + bin: + installed-package-contents: bin/index.js + checksum: 10c0/f5ecba0d45fc762f3e0d5def29fbfabd5d55e8147b01ae0a101769245c2e0038bc82a167836513a98aaed0a15c3d81fcdb232056bb8a962972a432533e518fce + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.6 + resolution: "@npmcli/map-workspaces@npm:3.0.6" + dependencies: + "@npmcli/name-from-folder": "npm:^2.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + checksum: 10c0/6bfcf8ca05ab9ddc2bd19c0fd91e9982f03cc6e67b0c03f04ba4d2f29b7d83f96e759c0f8f1f4b6dbe3182272483643a0d1269788352edd0c883d6fbfa2f3f14 + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^7.1.1": + version: 7.1.1 + resolution: "@npmcli/metavuln-calculator@npm:7.1.1" + dependencies: + cacache: "npm:^18.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + pacote: "npm:^18.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + checksum: 10c0/27402cab124bb1fca56af7549f730c38c0ab40de60cbef6264a4193c26c2d28cefb2adac29ed27f368031795704f9f8fe0c547c4c8cb0c0fa94d72330d56ac80 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: 10c0/1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/node-gyp@npm:3.0.0" + checksum: 10c0/5d0ac17dacf2dd6e45312af2c1ae2749bb0730fcc82da101c37d3a4fd963a5e1c5d39781e5e1e5e5828df4ab1ad4e3fdbab1d69b7cd0abebad9983efb87df985 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:5.2.0": + version: 5.2.0 + resolution: "@npmcli/package-json@npm:5.2.0" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/bdce8c7eed0dee1d272bf8ba500c4bce6d8ed2b4dd2ce43075d3ba02ffd3bb70c46dbcf8b3a35e19d9492d039b720dc3a4b30d1a2ddc30b7918e1d5232faa1f7 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": + version: 5.2.1 + resolution: "@npmcli/package-json@npm:5.2.1" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/b852e31e3121a0afe5fa20bbf4faa701a59dbc9d9dd7141f7fd57b8e919ce22c1285dcdfea490851fe410fa0f7bc9c397cafba0d268aaa53420a12d7c561dde1 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^7.0.0": + version: 7.0.2 + resolution: "@npmcli/promise-spawn@npm:7.0.2" + dependencies: + which: "npm:^4.0.0" + checksum: 10c0/8f2af5bc2c1b1ccfb9bcd91da8873ab4723616d8bd5af877c0daa40b1e2cbfa4afb79e052611284179cae918c945a1b99ae1c565d78a355bec1a461011e89f71 + languageName: node + linkType: hard + +"@npmcli/query@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/query@npm:3.1.0" + dependencies: + postcss-selector-parser: "npm:^6.0.10" + checksum: 10c0/9a099677dd188a2d9eb7a49e32c69d315b09faea59e851b7c2013b5bda915a38434efa7295565c40a1098916c06ebfa1840f68d831180e36842f48c24f4c5186 + languageName: node + linkType: hard + +"@npmcli/redact@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/redact@npm:2.0.1" + checksum: 10c0/5f346f7ef224b44c90009939f93c446a865a3d9e5a7ebe0246cdb0ebd03219de3962ee6c6e9197298d8c6127ea33535e8c44814276e4941394dc1cdf1f30f6bc + languageName: node + linkType: hard + +"@npmcli/run-script@npm:8.1.0, @npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": + version: 8.1.0 + resolution: "@npmcli/run-script@npm:8.1.0" + dependencies: + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.0.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + node-gyp: "npm:^10.0.0" + proc-log: "npm:^4.0.0" + which: "npm:^4.0.0" + checksum: 10c0/f9f40ecff0406a9ce1b77c9f714fc7c71b561289361efc6e2e0e48ca2d630aa98d277cbbf269750f9467a40eaaac79e78766d67c458046aa9507c8c354650fee + languageName: node + linkType: hard + +"@nrwl/tao@npm:v17.2.5": + version: 17.2.5 + resolution: "@nrwl/tao@npm:17.2.5" + dependencies: + nx: "npm:v17.2.5" + tslib: "npm:^2.3.0" + bin: + tao: index.js + checksum: 10c0/d98361141704d83487f2401116cafa7348acb30a1637336ddc471fdc42313503280767777c9752e91df0e56d3b7491251894172817e0e5ee514fe44d3ab2bf09 + languageName: node + linkType: hard + +"@nx/devkit@npm:>=17.1.2 < 21": + version: 20.3.2 + resolution: "@nx/devkit@npm:20.3.2" + dependencies: + ejs: "npm:^3.1.7" + enquirer: "npm:~2.3.6" + ignore: "npm:^5.0.4" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.3" + tmp: "npm:~0.2.1" + tslib: "npm:^2.3.0" + yargs-parser: "npm:21.1.1" + peerDependencies: + nx: ">= 19 <= 21" + checksum: 10c0/0c59aaea2c6b45712c28186b95792ae2530f928025aa7cea7d0175f9e0532ad3feeaa85b84d23e35378182c689819baa47daeb76ee4d26d823c926421830afd4 + languageName: node + linkType: hard + +"@nx/nx-darwin-arm64@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-darwin-arm64@npm:20.3.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-darwin-arm64@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-darwin-arm64@npm:17.2.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-darwin-x64@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-darwin-x64@npm:20.3.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-darwin-x64@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-darwin-x64@npm:17.2.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-freebsd-x64@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-freebsd-x64@npm:20.3.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-freebsd-x64@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-freebsd-x64@npm:17.2.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-linux-arm-gnueabihf@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.3.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nx/nx-linux-arm-gnueabihf@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:17.2.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-gnu@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-arm64-gnu@npm:20.3.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-gnu@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-arm64-gnu@npm:17.2.5" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-musl@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-arm64-musl@npm:20.3.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-musl@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-arm64-musl@npm:17.2.5" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-x64-gnu@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-x64-gnu@npm:20.3.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-x64-gnu@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-x64-gnu@npm:17.2.5" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-x64-musl@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-linux-x64-musl@npm:20.3.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-x64-musl@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-linux-x64-musl@npm:17.2.5" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-win32-arm64-msvc@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-win32-arm64-msvc@npm:20.3.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-win32-arm64-msvc@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-win32-arm64-msvc@npm:17.2.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-win32-x64-msvc@npm:20.3.2": + version: 20.3.2 + resolution: "@nx/nx-win32-x64-msvc@npm:20.3.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-win32-x64-msvc@npm:v17.2.5": + version: 17.2.5 + resolution: "@nx/nx-win32-x64-msvc@npm:17.2.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^3.0.0": + version: 3.0.4 + resolution: "@octokit/auth-token@npm:3.0.4" + checksum: 10c0/abdf5e2da36344de9727c70ba782d58004f5ae1da0f65fa9bc9216af596ef23c0e4675f386df2f6886806612558091d603564051b693b0ad1986aa6160b7a231 + languageName: node + linkType: hard + +"@octokit/core@npm:^4.2.1": + version: 4.2.4 + resolution: "@octokit/core@npm:4.2.4" + dependencies: + "@octokit/auth-token": "npm:^3.0.0" + "@octokit/graphql": "npm:^5.0.0" + "@octokit/request": "npm:^6.0.0" + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + before-after-hook: "npm:^2.2.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/e54081a56884e628d1804837fddcd48c10d516117bb891551c8dc9d8e3dad449aeb9b4677ca71e8f0e76268c2b7656c953099506679aaa4666765228474a3ce6 + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^7.0.0": + version: 7.0.6 + resolution: "@octokit/endpoint@npm:7.0.6" + dependencies: + "@octokit/types": "npm:^9.0.0" + is-plain-object: "npm:^5.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/fd147a55010b54af7567bf90791359f7096a1c9916a2b7c72f8afd0c53141338b3d78da3a4ab3e3bdfeb26218a1b73735432d8987ccc04996b1019219299f115 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^5.0.0": + version: 5.0.6 + resolution: "@octokit/graphql@npm:5.0.6" + dependencies: + "@octokit/request": "npm:^6.0.0" + "@octokit/types": "npm:^9.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/de1d839d97fe6d96179925f6714bf96e7af6f77929892596bb4211adab14add3291fc5872b269a3d0e91a4dcf248d16096c82606c4a43538cf241b815c2e2a36 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^18.0.0": + version: 18.1.1 + resolution: "@octokit/openapi-types@npm:18.1.1" + checksum: 10c0/856d3bb9f8c666e837dd5e8b8c216ee4342b9ed63ff8da922ca4ce5883ed1dfbec73390eb13d69fbcb4703a4c8b8b6a586df3b0e675ff93bf3d46b5b4fe0968e + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-rest@npm:6.0.1": + version: 6.0.1 + resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" + checksum: 10c0/26bd0a30582954efcd29b41e16698db79e9d20e3f88c4069b43b183223cee69862621f18b6a7a1c9257b1cd07c24477e403b75c74688660ecf31d467b9d8fd9e + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^6.1.2": + version: 6.1.2 + resolution: "@octokit/plugin-paginate-rest@npm:6.1.2" + dependencies: + "@octokit/tsconfig": "npm:^1.0.2" + "@octokit/types": "npm:^9.2.3" + peerDependencies: + "@octokit/core": ">=4" + checksum: 10c0/def241c4f00b864822ab6414eaadd8679a6d332004c7e77467cfc1e6d5bdcc453c76bd185710ee942e4df201f9dd2170d960f46af5b14ef6f261a0068f656364 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^1.0.4": + version: 1.0.4 + resolution: "@octokit/plugin-request-log@npm:1.0.4" + peerDependencies: + "@octokit/core": ">=3" + checksum: 10c0/7238585445555db553912e0cdef82801c89c6e5cbc62c23ae086761c23cc4a403d6c3fddd20348bbd42fb7508e2c2fce370eb18fdbe3fbae2c0d2c8be974f4cc + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^7.1.2": + version: 7.2.3 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" + dependencies: + "@octokit/types": "npm:^10.0.0" + peerDependencies: + "@octokit/core": ">=3" + checksum: 10c0/8bffbc5852695dd08d65cc64b6ab7d2871ed9df1e791608f48b488a3908b5b655e3686b5dd72fc37c824e82bdd4dfc9d24e2e50205bbc324667def1d705bc9da + languageName: node + linkType: hard + +"@octokit/request-error@npm:^3.0.0": + version: 3.0.3 + resolution: "@octokit/request-error@npm:3.0.3" + dependencies: + "@octokit/types": "npm:^9.0.0" + deprecation: "npm:^2.0.0" + once: "npm:^1.4.0" + checksum: 10c0/1e252ac193c8af23b709909911aa327ed5372cbafcba09e4aff41e0f640a7c152579ab0a60311a92e37b4e7936392d59ee4c2feae5cdc387ee8587a33d8afa60 + languageName: node + linkType: hard + +"@octokit/request@npm:^6.0.0": + version: 6.2.8 + resolution: "@octokit/request@npm:6.2.8" + dependencies: + "@octokit/endpoint": "npm:^7.0.0" + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + is-plain-object: "npm:^5.0.0" + node-fetch: "npm:^2.6.7" + universal-user-agent: "npm:^6.0.0" + checksum: 10c0/6b6079ed45bac44c4579b40990bfd1905b03d4bc4e5255f3d5a10cf5182171578ebe19abeab32ebb11a806f1131947f2a06b7a077bd7e77ade7b15fe2882174b + languageName: node + linkType: hard + +"@octokit/rest@npm:19.0.11": + version: 19.0.11 + resolution: "@octokit/rest@npm:19.0.11" + dependencies: + "@octokit/core": "npm:^4.2.1" + "@octokit/plugin-paginate-rest": "npm:^6.1.2" + "@octokit/plugin-request-log": "npm:^1.0.4" + "@octokit/plugin-rest-endpoint-methods": "npm:^7.1.2" + checksum: 10c0/a14ae31fc5e70e76d2492aae63d3453cbb71f44e7492400f885ab5ac6b2612bcb244bafa29e45a59461f3e5d99807ff9c88d48af8317ffa4f8ad3f8f11fdd035 + languageName: node + linkType: hard + +"@octokit/tsconfig@npm:^1.0.2": + version: 1.0.2 + resolution: "@octokit/tsconfig@npm:1.0.2" + checksum: 10c0/84db70b495beeed69259dd4def14cdfb600edeb65ef32811558c99413ee2b414ed10bff9c4dcc7a43451d0fd36b4925ada9ef7d4272b5eae38cb005cc2f459ac + languageName: node + linkType: hard + +"@octokit/types@npm:^10.0.0": + version: 10.0.0 + resolution: "@octokit/types@npm:10.0.0" + dependencies: + "@octokit/openapi-types": "npm:^18.0.0" + checksum: 10c0/9bbbec1e452c271752e5ba735c161a558933f2e35f3004bb0b6e8d6ba574af48b68bab2f293112a8e68c595435a2fbcc76f3e7333f45ba1888bb5193777a943e + languageName: node + linkType: hard + +"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": + version: 9.3.2 + resolution: "@octokit/types@npm:9.3.2" + dependencies: + "@octokit/openapi-types": "npm:^18.0.0" + checksum: 10c0/2925479aa378a4491762b4fcf381bdc7daca39b4e0b2dd7062bce5d74a32ed7d79d20d3c65ceaca6d105cf4b1f7417fea634219bf90f79a57d03e2dac629ec45 + languageName: node + linkType: hard + +"@panva/asn1.js@npm:^1.0.0": + version: 1.0.0 + resolution: "@panva/asn1.js@npm:1.0.0" + checksum: 10c0/5d6e7ec460b65b017043e2702e25f323936baad2aa248dbd9bf54c9508e351d236bffac96fa033c6e36cb0482a9dd73c3605948a36a59bd6bec49353ba8d7b62 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.2.9": + version: 0.2.9 + resolution: "@pkgr/core@npm:0.2.9" + checksum: 10c0/ac8e4e8138b1a7a4ac6282873aef7389c352f1f8b577b4850778f5182e4a39a5241facbe48361fec817f56d02b51691b383010843fb08b34a8e8ea3614688fd5 + languageName: node + linkType: hard + +"@rdfjs/data-model@npm:^1.3.4": + version: 1.3.4 + resolution: "@rdfjs/data-model@npm:1.3.4" + dependencies: + "@rdfjs/types": "npm:>=1.0.1" + bin: + rdfjs-data-model-test: bin/test.js + checksum: 10c0/2f9f04b0f74cbcfd90b521eb51d7ab708164df16cc582ea4322dc364f66ad39ca9f1fc52d0db0b1c93e3043e86a5568ab2ecf66d7633051714e853e02e793ce8 + languageName: node + linkType: hard + +"@rdfjs/types@npm:*, @rdfjs/types@npm:>=1.0.0, @rdfjs/types@npm:>=1.0.1": + version: 2.0.1 + resolution: "@rdfjs/types@npm:2.0.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/81012b02e28737e15dfc27068664bbab7b989cc2ff82e0a6a341df492d9d97210b5e462d85bfb7882aa0ef5bf84e2c5e95647fb779b67b7b1910b1837d79c500 + languageName: node + linkType: hard + +"@rdfjs/types@npm:^1.0.0, @rdfjs/types@npm:^1.1.0": + version: 1.1.2 + resolution: "@rdfjs/types@npm:1.1.2" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/128242157d44453d1f5eac9d93cecfddb44acc4e6675751b2cccbc6c33b44492573785eb748e1841fd4a29921ba8e0412ba038824103d97c38a19f72033d9a5c + languageName: node + linkType: hard + +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b + languageName: node + linkType: hard + +"@seald-io/binary-search-tree@npm:^1.0.2": + version: 1.0.3 + resolution: "@seald-io/binary-search-tree@npm:1.0.3" + checksum: 10c0/cf86bfca881c84cf22fa11a96dffd358f58424bd779c9afb7e36934be2e8ad923da54252972a12a2d42a9473557829a573950b0f78213b901ceb9dcc862397e1 + languageName: node + linkType: hard + +"@seald-io/nedb@npm:^3.0.0": + version: 3.1.0 + resolution: "@seald-io/nedb@npm:3.1.0" + dependencies: + "@seald-io/binary-search-tree": "npm:^1.0.2" + localforage: "npm:^1.9.0" + util: "npm:^0.12.4" + checksum: 10c0/2bced9094700b188ce9cbf29502e60cb37b4165b53a9a636d08d985cac976da5d056fd0e990d8b90c4a2b0b58c3c15243a2cbd49aef80ac87f5e31bacb0d1bb0 + languageName: node + linkType: hard + +"@semapps/activitypub@npm:1.1.4, @semapps/activitypub@workspace:packages/activitypub": + version: 0.0.0-use.local + resolution: "@semapps/activitypub@workspace:packages/activitypub" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/crypto": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + handlebars: "npm:^4.7.7" + moleculer-bull: "npm:^0.2.5" + moleculer-db: "npm:^0.8.16" + moleculer-web: "npm:^0.10.0-beta1" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/auth@npm:1.1.4, @semapps/auth@workspace:packages/auth": + version: 0.0.0-use.local + resolution: "@semapps/auth@workspace:packages/auth" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + bcrypt: "npm:^5.0.1" + express-session: "npm:^1.17.0" + jsonwebtoken: "npm:^9.0.2" + moleculer-db: "npm:^0.8.16" + moleculer-mail: "npm:^1.2.5" + moleculer-web: "npm:^0.10.0-beta1" + openid-client: "npm:^4.7.4" + passport: "npm:^0.4.1" + passport-cas2: "npm:0.0.12" + passport-local: "npm:^1.0.0" + pug: "npm:^3.0.2" + speakingurl: "npm:^14.0.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/backup@workspace:packages/backup": + version: 0.0.0-use.local + resolution: "@semapps/backup@workspace:packages/backup" + dependencies: + cron: "npm:^1.8.2" + fs-extra: "npm:^10.0.0" + rsync: "npm:^0.6.1" + ssh2-sftp-client: "npm:^7.2.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/core@npm:1.1.4, @semapps/core@workspace:packages/core": + version: 0.0.0-use.local + resolution: "@semapps/core@workspace:packages/core" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/crypto": "npm:1.1.4" + "@semapps/jsonld": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/sparql-endpoint": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@semapps/void": "npm:1.1.4" + "@semapps/webacl": "npm:1.1.4" + "@semapps/webfinger": "npm:1.1.4" + "@semapps/webid": "npm:1.1.4" + moleculer-web: "npm:^0.10.0-beta1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/crypto@npm:1.1.4, @semapps/crypto@workspace:packages/crypto": + version: 0.0.0-use.local + resolution: "@semapps/crypto@workspace:packages/crypto" + dependencies: + "@digitalbazaar/data-integrity": "npm:^2.5.0" + "@digitalbazaar/ed25519-multikey": "npm:^1.3.0" + "@digitalbazaar/ed25519-signature-2020": "npm:^5.4.0" + "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.2.0" + "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "npm:^1.2.0" + "@digitalbazaar/vc": "npm:^7.1.0" + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + crypto-ld: "npm:^7.0.0" + http-signature: "npm:^1.3.4" + http-signature-header: "npm:^1.3.1" + jose: "npm:^5.2.0" + jsonld-signatures: "npm:^11.3.2" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + vc-js: "npm:^0.6.4" + peerDependencies: + moleculer: ^0.14.35 + moleculer-web: ^0.10.0-beta1 + languageName: unknown + linkType: soft + +"@semapps/importer@workspace:packages/importer": + version: 0.0.0-use.local + resolution: "@semapps/importer@workspace:packages/importer" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + cron-parser: "npm:^4.2.1" + google-libphonenumber: "npm:^3.2.26" + node-fetch: "npm:^2.6.6" + sanitize-html: "npm:^2.6.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/inference@npm:1.1.4, @semapps/inference@workspace:packages/inference": + version: 0.0.0-use.local + resolution: "@semapps/inference@workspace:packages/inference" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + n3: "npm:^1.6.3" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/jsonld@npm:1.1.4, @semapps/jsonld@workspace:packages/jsonld": + version: 0.0.0-use.local + resolution: "@semapps/jsonld@workspace:packages/jsonld" + dependencies: + "@types/jsonld": "npm:1.5.15" + jsonld: "npm:^3.3.2" + jsonld-context-parser: "npm:^2.4.0" + jsonld-streaming-parser: "npm:^2.4.2" + jsonld-streaming-serializer: "npm:^1.2.0" + lru-cache: "npm:^6.0.0" + n3: "npm:^1.26.0" + rdf-parse: "npm:^1.7.0" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/ldp@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/ldp@npm:1.0.10" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/middlewares": "npm:1.0.10" + "@semapps/mime-types": "npm:1.0.10" + "@semapps/ontologies": "npm:1.0.10" + "@semapps/triplestore": "npm:1.0.10" + dashify: "npm:^2.0.0" + http-link-header: "npm:^1.1.1" + mime-types: "npm:^2.1.35" + moleculer: "npm:^0.14.17" + moleculer-db: "npm:^0.8.16" + moleculer-schedule: "npm:^0.2.3" + moleculer-web: "npm:^0.10.0-beta1" + node-fetch: "npm:^2.6.6" + path-to-regexp: "npm:^6.2.0" + rdf-parse: "npm:^1.7.0" + sharp: "npm:^0.31.2" + sparqljs: "npm:^3.5.2" + speakingurl: "npm:^14.0.1" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + checksum: 10c0/dc8e8a673b4c04e46976f1440bbe7f6e024974fda979f1bdaf8731a1803260381bceba2f8e4fd9ee7b6191cc92738ebb4441a75768edeee3d75d08bba16c21fb + languageName: node + linkType: hard + +"@semapps/ldp@npm:1.1.4, @semapps/ldp@workspace:packages/ldp": + version: 0.0.0-use.local + resolution: "@semapps/ldp@workspace:packages/ldp" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + bytes: "npm:^3.1.2" + cron: "npm:^4.1.4" + dashify: "npm:^2.0.0" + http-link-header: "npm:^1.1.1" + mime-types: "npm:^2.1.35" + moleculer-db: "npm:^0.8.16" + moleculer-schedule: "npm:^0.2.3" + moleculer-web: "npm:^0.10.0-beta1" + node-fetch: "npm:^2.6.6" + path-to-regexp: "npm:^6.2.0" + rdf-parse: "npm:^1.7.0" + sharp: "npm:^0.31.2" + sparqljs: "npm:^3.5.2" + speakingurl: "npm:^14.0.1" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/middlewares@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/middlewares@npm:1.0.10" + dependencies: + "@semapps/mime-types": "npm:1.0.10" + busboy: "npm:^0.3.1" + memory-streams: "npm:^0.1.3" + moleculer: "npm:^0.14.18" + checksum: 10c0/f0d72246d0342b79babe76e7eddd041787c5dbc7d5ddb12dcbc3c7e902d84b4b28989f983e79f8dba668cfe673aeea6be4c7f9cf7c527b47ed908098eb7b23bf + languageName: node + linkType: hard + +"@semapps/middlewares@npm:1.1.4, @semapps/middlewares@workspace:packages/middlewares": + version: 0.0.0-use.local + resolution: "@semapps/middlewares@workspace:packages/middlewares" + dependencies: + "@semapps/mime-types": "npm:1.1.4" + busboy: "npm:^0.3.1" + memory-streams: "npm:^0.1.3" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/migration@workspace:packages/migration": + version: 0.0.0-use.local + resolution: "@semapps/migration@workspace:packages/migration" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/webacl": "npm:1.1.4" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/mime-types@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/mime-types@npm:1.0.10" + dependencies: + moleculer: "npm:^0.14.18" + negotiator: "npm:^0.6.2" + checksum: 10c0/aefb957dc606d2bc31994f9a0370d43ddeb73d3135f3aadcd2ed629b84aa361b1706cb01ed4c5f7c35aa82831d2834df2632adf811ffdb5693ab44eb55891030 + languageName: node + linkType: hard + +"@semapps/mime-types@npm:1.1.4, @semapps/mime-types@workspace:packages/mime-types": + version: 0.0.0-use.local + resolution: "@semapps/mime-types@workspace:packages/mime-types" + dependencies: + negotiator: "npm:^0.6.2" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/nodeinfo@workspace:packages/nodeinfo": + version: 0.0.0-use.local + resolution: "@semapps/nodeinfo@workspace:packages/nodeinfo" + dependencies: + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/notifications@workspace:packages/notifications": + version: 0.0.0-use.local + resolution: "@semapps/notifications@workspace:packages/notifications" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + cron-parser: "npm:^4.3.0" + expo-server-sdk: "npm:^3.4.0" + moleculer-db: "npm:^0.8.15" + moleculer-mail: "npm:^1.2.5" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/ontologies@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/ontologies@npm:1.0.10" + dependencies: + "@semapps/triplestore": "npm:1.0.10" + moleculer-db: "npm:^0.8.16" + node-fetch: "npm:^2.6.6" + checksum: 10c0/aa6eb56b330f46fdbcd2591925a79723ecfd718e4ae10a22f5e590017d416da9c85b51d83b40e37cbace55a1257c3204965271709d83c871a379bbd98d140c7b + languageName: node + linkType: hard + +"@semapps/ontologies@npm:1.1.4, @semapps/ontologies@workspace:packages/ontologies": + version: 0.0.0-use.local + resolution: "@semapps/ontologies@workspace:packages/ontologies" + dependencies: + "@semapps/triplestore": "npm:1.1.4" + moleculer-db: "npm:^0.8.16" + node-fetch: "npm:^2.6.6" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/solid@workspace:packages/solid": + version: 0.0.0-use.local + resolution: "@semapps/solid@workspace:packages/solid" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@semapps/webid": "npm:1.1.4" + http-link-header: "npm:^1.1.1" + moleculer-bull: "npm:^0.2.5" + moleculer-db: "npm:^0.8.16" + moleculer-web: "npm:^0.10.0-beta1" + moment: "npm:2.30.1" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/sparql-endpoint@npm:1.1.4, @semapps/sparql-endpoint@workspace:packages/sparql-endpoint": + version: 0.0.0-use.local + resolution: "@semapps/sparql-endpoint@workspace:packages/sparql-endpoint" + dependencies: + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + moleculer-web: "npm:^0.10.0-beta1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/sync@npm:1.1.4, @semapps/sync@workspace:packages/sync": + version: 0.0.0-use.local + resolution: "@semapps/sync@workspace:packages/sync" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + node-fetch: "npm:^2.6.6" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/triplestore@npm:1.0.10": + version: 1.0.10 + resolution: "@semapps/triplestore@npm:1.0.10" + dependencies: + "@semapps/middlewares": "npm:1.0.10" + "@semapps/mime-types": "npm:1.0.10" + jsonld: "npm:^3.3.2" + moleculer: "npm:^0.14.29" + negotiator: "npm:^0.6.2" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + sparqljson-parse: "npm:^1.5.1" + string-template: "npm:^1.0.0" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + checksum: 10c0/c205ea8c85d5a6d9914c3c9f5cafe0f9bc4c3cc3e424b63db2173942fad6c7a5e5082126600ea9a2e7a246d21f5d4b905f82302ec2f042734ea400cd5f00c9f1 + languageName: node + linkType: hard + +"@semapps/triplestore@npm:1.1.4, @semapps/triplestore@workspace:packages/triplestore": + version: 0.0.0-use.local + resolution: "@semapps/triplestore@workspace:packages/triplestore" + dependencies: + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + jsonld: "npm:^3.3.2" + negotiator: "npm:^0.6.2" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + sparqljson-parse: "npm:^1.5.1" + string-template: "npm:^1.0.0" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/void@npm:1.1.4, @semapps/void@workspace:packages/void": + version: 0.0.0-use.local + resolution: "@semapps/void@workspace:packages/void" + dependencies: + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + jsonld-streaming-serializer: "npm:^1.2.0" + n3: "npm:^1.8.0" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webacl@npm:1.1.4, @semapps/webacl@workspace:packages/webacl": + version: 0.0.0-use.local + resolution: "@semapps/webacl@workspace:packages/webacl" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@types/url-join": "npm:^4.0.1" + jsonld-streaming-serializer: "npm:^1.2.0" + n3: "npm:^1.8.0" + rdf-parse: "npm:^1.7.0" + speakingurl: "npm:^14.0.1" + streamify-string: "npm:^1.0.1" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webfinger@npm:1.1.4, @semapps/webfinger@workspace:packages/webfinger": + version: 0.0.0-use.local + resolution: "@semapps/webfinger@workspace:packages/webfinger" + dependencies: + "@semapps/mime-types": "npm:1.1.4" + node-fetch: "npm:^2.6.6" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webhooks@workspace:packages/webhooks": + version: 0.0.0-use.local + resolution: "@semapps/webhooks@workspace:packages/webhooks" + dependencies: + "@semapps/ldp": "npm:1.0.10" + "@semapps/triplestore": "npm:1.0.10" + moleculer-db: "npm:^0.8.15" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@semapps/webid@npm:1.1.4, @semapps/webid@workspace:packages/webid": + version: 0.0.0-use.local + resolution: "@semapps/webid@workspace:packages/webid" + dependencies: + "@semapps/activitypub": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + url-join: "npm:^4.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + +"@sigstore/bundle@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/bundle@npm:2.3.2" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/872a95928236bd9950a2ecc66af1c60a82f6b482a62a20d0f817392d568a60739a2432cad70449ac01e44e9eaf85822d6d9ebc6ade6cb3e79a7d62226622eb5d + languageName: node + linkType: hard + +"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": + version: 1.1.0 + resolution: "@sigstore/core@npm:1.1.0" + checksum: 10c0/3b3420c1bd17de0371e1ac7c8f07a2cbcd24d6b49ace5bbf2b63f559ee08c4a80622a4d1c0ae42f2c9872166e9cb111f33f78bff763d47e5ef1efc62b8e457ea + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.3.2": + version: 0.3.3 + resolution: "@sigstore/protobuf-specs@npm:0.3.3" + checksum: 10c0/e0a68795fa19e437fca2c3993e5a57e989642d65434beda54b29017c1629176cc8abeb81bb1e0923259cdfb19fe1fee6f1b8680a8f8240dc14c7a7de2bbae7af + languageName: node + linkType: hard + +"@sigstore/sign@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/sign@npm:2.3.2" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + make-fetch-happen: "npm:^13.0.1" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + checksum: 10c0/a1e7908f3e4898f04db4d713fa10ddb3ae4f851592c9b554f1269073211e1417528b5088ecee60f27039fde5a5426ae573481d77cfd7e4395d2a0ddfcf5f365f + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^2.3.4": + version: 2.3.4 + resolution: "@sigstore/tuf@npm:2.3.4" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + tuf-js: "npm:^2.2.1" + checksum: 10c0/97839882d787196517933df5505fae4634975807cc7adcd1783c7840c2a9729efb83ada47556ec326d544b9cb0d1851af990dc46eebb5fe7ea17bf7ce1fc0b8c + languageName: node + linkType: hard + +"@sigstore/verify@npm:^1.2.1": + version: 1.2.1 + resolution: "@sigstore/verify@npm:1.2.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.1.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/af06580a8d5357c31259da1ac7323137054e0ac41e933278d95a4bc409a4463620125cb4c00b502f6bc32fdd68c2293019391b0d31ed921ee3852a9e84358628 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.34.0": + version: 0.34.38 + resolution: "@sinclair/typebox@npm:0.34.38" + checksum: 10c0/c1b9a1547c64de01ff5c89351baf289d2d5f19cfef3ae30fe4748a103eb58d0842618318543cd3de964cb0370d5a859e24aba231ade9b43ee2ef4d0bb4db7084 + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^4.0.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.1": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: "npm:4.0.8" + checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^13.0.0": + version: 13.0.5 + resolution: "@sinonjs/fake-timers@npm:13.0.5" + dependencies: + "@sinonjs/commons": "npm:^3.0.1" + checksum: 10c0/a707476efd523d2138ef6bba916c83c4a377a8372ef04fad87499458af9f01afc58f4f245c5fd062793d6d70587309330c6f96947b5bd5697961c18004dc3e26 + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^4.0.5": + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" + dependencies: + defer-to-connect: "npm:^2.0.0" + checksum: 10c0/73946918c025339db68b09abd91fa3001e87fc749c619d2e9c2003a663039d4c3cb89836c98a96598b3d47dec2481284ba85355392644911f5ecd2336536697f + languageName: node + linkType: hard + +"@tufjs/canonical-json@npm:2.0.0": + version: 2.0.0 + resolution: "@tufjs/canonical-json@npm:2.0.0" + checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 + languageName: node + linkType: hard + +"@tufjs/models@npm:2.0.1": + version: 2.0.1 + resolution: "@tufjs/models@npm:2.0.1" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^9.0.4" + checksum: 10c0/ad9e82fd921954501fd90ed34ae062254637595577ad13fdc1e076405c0ea5ee7d8aebad09e63032972fd92b07f1786c15b24a195a171fc8ac470ca8e2ffbcc4 + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.10.0": + version: 0.10.0 + resolution: "@tybys/wasm-util@npm:0.10.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/044feba55c1e2af703aa4946139969badb183ce1a659a75ed60bc195a90e73a3f3fc53bcd643497c9954597763ddb051fec62f80962b2ca6fc716ba897dc696e + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.9.0": + version: 0.9.0 + resolution: "@tybys/wasm-util@npm:0.9.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.20.5": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 + languageName: node + linkType: hard + +"@types/cacheable-request@npm:^6.0.1": + version: 6.0.3 + resolution: "@types/cacheable-request@npm:6.0.3" + dependencies: + "@types/http-cache-semantics": "npm:*" + "@types/keyv": "npm:^3.1.4" + "@types/node": "npm:*" + "@types/responselike": "npm:^1.0.0" + checksum: 10c0/10816a88e4e5b144d43c1d15a81003f86d649776c7f410c9b5e6579d0ad9d4ca71c541962fb403077388b446e41af7ae38d313e46692144985f006ac5e11fa03 + languageName: node + linkType: hard + +"@types/dotenv-flow@npm:^3.3.3": + version: 3.3.3 + resolution: "@types/dotenv-flow@npm:3.3.3" + checksum: 10c0/a67ecdec769e0e5bf376219ee80a2ffab423d9120dd121b538860d666bf46af07ff336860a7db2b1d41fcdd2dd006fc0ec6fa98f82cd01e566c37b00038b91ec + languageName: node + linkType: hard + +"@types/http-cache-semantics@npm:*": + version: 4.0.4 + resolution: "@types/http-cache-semantics@npm:4.0.4" + checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 + languageName: node + linkType: hard + +"@types/http-link-header@npm:^1.0.1": + version: 1.0.7 + resolution: "@types/http-link-header@npm:1.0.7" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/ffde4514a286ee62fab86bd5164958f5c9ad9d8012eaeb4f5536efa6157e6cf9f93121d5a39bf160c3712554d945300a223a9f8b1f3fb08cc70b73f539767338 + languageName: node + linkType: hard + +"@types/ioredis@npm:^4.27.0": + version: 4.28.10 + resolution: "@types/ioredis@npm:4.28.10" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/ff680fef6750721c465ee9d6060d3229e49e5b217d68503c4972c4b869b8f84b91cbd9b7d5195a40fb0bff6ab9a4f5e24a2cc17a368ddb0bfe2dfd4eb5fc1872 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee + languageName: node + linkType: hard + +"@types/jest@npm:^30.0.0": + version: 30.0.0 + resolution: "@types/jest@npm:30.0.0" + dependencies: + expect: "npm:^30.0.0" + pretty-format: "npm:^30.0.0" + checksum: 10c0/20c6ce574154bc16f8dd6a97afacca4b8c4921a819496a3970382031c509ebe87a1b37b152a1b8475089b82d8ca951a9e95beb4b9bf78fbf579b1536f0b65969 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac + languageName: node + linkType: hard + +"@types/jsonld@npm:1.5.15": + version: 1.5.15 + resolution: "@types/jsonld@npm:1.5.15" + checksum: 10c0/d01fbf07c10f4fc53a5b85f28a5691cf7cea4f5f041e0266c5e8d9e4ca94cd410ef427129b2bd930065f675104cbf0a36a7792ba42d3c9b0ec7305c9f01d34c4 + languageName: node + linkType: hard + +"@types/keyv@npm:^3.1.4": + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/ff8f54fc49621210291f815fe5b15d809fd7d032941b3180743440bd507ecdf08b9e844625fa346af568c84bf34114eb378dcdc3e921a08ba1e2a08d7e3c809c + languageName: node + linkType: hard + +"@types/luxon@npm:~3.6.0": + version: 3.6.2 + resolution: "@types/luxon@npm:3.6.2" + checksum: 10c0/7572ee52b3d3e9dd10464b90561a728b90f34b9a257751cc3ce23762693dd1d14fa98b7f103e2efe2c6f49033331f91de5681ffd65cca88618cefe555be326db + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.3": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: 10c0/a1a19ba342d6f39b569510f621ae4bbe972dc9378d15e9a5e47904c440ee60744f5b09225bc73be1c6490e3a9c938eee69eb53debf55ce1f15761201aa965f97 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 10c0/3f791258d8e99a1d7d0ca2bda1ca6ea5a94e5e7b8fc6cde84dd79b0552da6fb68ade750f0e17718f6587783c24254bbca0357648dd59dc3812c150305cabdc46 + languageName: node + linkType: hard + +"@types/n3@npm:^1.4.4": + version: 1.21.1 + resolution: "@types/n3@npm:1.21.1" + dependencies: + "@rdfjs/types": "npm:^1.1.0" + "@types/node": "npm:*" + checksum: 10c0/be0236650cc702207590e5ad37d9ae62a3c74ae74914afed2d929c5eaae7dc4a251f6f44c5f36be317f2e404f02e63ed360ebf041651d5dac3e63867193bf66e + languageName: node + linkType: hard + +"@types/node-fetch@npm:^2.6.13": + version: 2.6.13 + resolution: "@types/node-fetch@npm:2.6.13" + dependencies: + "@types/node": "npm:*" + form-data: "npm:^4.0.4" + checksum: 10c0/6313c89f62c50bd0513a6839cdff0a06727ac5495ccbb2eeda51bb2bbbc4f3c0a76c0393a491b7610af703d3d2deb6cf60e37e59c81ceeca803ffde745dbf309 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 22.10.7 + resolution: "@types/node@npm:22.10.7" + dependencies: + undici-types: "npm:~6.20.0" + checksum: 10c0/c941b4689dfc4044b64a5f601306cbcb0c7210be853ba378a5dd44137898c45accedd796ee002ad9407024cac7ecaf5049304951cb1d80ce3d7cebbbae56f20e + languageName: node + linkType: hard + +"@types/node@npm:^13.1.0": + version: 13.13.52 + resolution: "@types/node@npm:13.13.52" + checksum: 10c0/9224aaea219fe7f8b903039bb146d4c38b391d0166a8226a1efa2d43a35b5b7dddfe021c32941bb454a1543da94921c112687934da88e2a019f4bd44f9d517b5 + languageName: node + linkType: hard + +"@types/node@npm:^18.0.0": + version: 18.19.71 + resolution: "@types/node@npm:18.19.71" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/9f9b4a1c4e2db2994ef36f165322b3bb807466e3f92751ed52a40af0212917bc6ecd12dc6775eb829176b71b26570bea9c6a0a2d9e3ae6b496721c71934244db + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 + languageName: node + linkType: hard + +"@types/parse-link-header@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/parse-link-header@npm:1.0.1" + checksum: 10c0/88b38f5a51083e512a9b23ba13a37543867508927544dbfd08b20ba81cafdc678a320db83c360fbff79689af0147dcbd8ad27a429a0d0f4c28145f47c708a637 + languageName: node + linkType: hard + +"@types/readable-stream@npm:^2.3.11": + version: 2.3.15 + resolution: "@types/readable-stream@npm:2.3.15" + dependencies: + "@types/node": "npm:*" + safe-buffer: "npm:~5.1.1" + checksum: 10c0/789e0948a8fd2f2cbf880a0f8c95601ac2fd8782a5a8fe653f68fad7fc3a74f44e8559484e331c1ff5d5b00fa467bec97557bb683aa833a3b29a69506f7aee59 + languageName: node + linkType: hard + +"@types/responselike@npm:^1.0.0": + version: 1.0.3 + resolution: "@types/responselike@npm:1.0.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/a58ba341cb9e7d74f71810a88862da7b2a6fa42e2a1fc0ce40498f6ea1d44382f0640117057da779f74c47039f7166bf48fad02dc876f94e005c7afa50f5e129 + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa + languageName: node + linkType: hard + +"@types/sparqljs@npm:^3.1.2": + version: 3.1.12 + resolution: "@types/sparqljs@npm:3.1.12" + dependencies: + "@rdfjs/types": "npm:>=1.0.0" + checksum: 10c0/832bb888a99d852f194c6fc1a2160992a769b3c4291424b7e22d50b29377692168d2cbd180cc4ed5a30d0cf1effffcfc0fc9155ea6628851c231e3ed1d28b4e2 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.3": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c + languageName: node + linkType: hard + +"@types/streamify-string@npm:^1.0.4": + version: 1.0.4 + resolution: "@types/streamify-string@npm:1.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/5686610fb3d7b242ff6dd01ca6b9925296b4425c3a94f605bd71eeb5c746991e15131b42a81637f937c3de4f5894f42bb65d18a2f61a6b4ded50d055a9b206e2 + languageName: node + linkType: hard + +"@types/url-join@npm:^4.0.1": + version: 4.0.3 + resolution: "@types/url-join@npm:4.0.3" + checksum: 10c0/7f0f86693070355ce731ec3861d47c03eaae09ab0ea1a72dde6b38a2a17089941acc59bac9ea2472376b6f96e189478da0a7ed29e2d282d1543382e92408d6ca + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.33": + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^7.1.1": + version: 7.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/type-utils": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^7.5.0": + version: 7.18.0 + resolution: "@typescript-eslint/parser@npm:7.18.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/type-utils@npm:7.18.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + semver: "npm:^7.3.7" + tsutils: "npm:^3.21.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + peerDependencies: + eslint: ^8.56.0 + checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^5.10.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@types/json-schema": "npm:^7.0.9" + "@types/semver": "npm:^7.3.12" + "@typescript-eslint/scope-manager": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/typescript-estree": "npm:5.62.0" + eslint-scope: "npm:^5.1.1" + semver: "npm:^7.3.7" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + eslint-visitor-keys: "npm:^3.3.0" + checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.1 + resolution: "@ungap/structured-clone@npm:1.2.1" + checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.3.0": + version: 1.3.0 + resolution: "@ungap/structured-clone@npm:1.3.0" + checksum: 10c0/0fc3097c2540ada1fc340ee56d58d96b5b536a2a0dab6e3ec17d4bfc8c4c86db345f61a375a8185f9da96f01c69678f836a2b57eeaa9e4b8eeafd26428e57b0a + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" + dependencies: + "@napi-rs/wasm-runtime": "npm:^0.2.11" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:3.0.0-rc.46": + version: 3.0.0-rc.46 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.46" + dependencies: + js-yaml: "npm:^3.10.0" + tslib: "npm:^2.4.0" + checksum: 10c0/c7f421c6885142f351459031c093fb2e79abcce6f4a89765a10e600bb7ab122949c54bcea2b23de9572a2b34ba29f822b17831c1c43ba50373ceb8cb5b336667 + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:3.0.2": + version: 3.0.2 + resolution: "@yarnpkg/parsers@npm:3.0.2" + dependencies: + js-yaml: "npm:^3.10.0" + tslib: "npm:^2.4.0" + checksum: 10c0/a0c340e13129643162423d7e666061c0b39b143bfad3fc5a74c7d92a30fd740f6665d41cd4e61832c20375889d793eea1d1d103cacb39ed68f7acd168add8c53 + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.6": + version: 0.0.6 + resolution: "@zkochan/js-yaml@npm:0.0.6" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/5ce27ae75fb1db9657d4065bf6b380b4c0f756feb1bdf42bfde40551a74bcc0ec918f748cbdbd5d95b7107d00bc2f731ee731b5cfe93acb6f7da5639b16aa1f8 + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.7": + version: 0.0.7 + resolution: "@zkochan/js-yaml@npm:0.0.7" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/c8b3525717912811f9422ed50e94c5751ed6f771eb1b7e5cde097f14835654931e2bdaecb1e5fc37b51cf8d822410a307f16dd1581d46149398c30215f3f9bac + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.3, JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: "npm:^1.2.0" + through: "npm:>=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 + languageName: node + linkType: hard + +"abbrev@npm:1": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^7.1.1": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" + bin: + acorn: bin/acorn + checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 + languageName: node + linkType: hard + +"acorn@npm:^8.14.0, acorn@npm:^8.9.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + languageName: node + linkType: hard + +"add-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "add-stream@npm:1.0.0" + checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0, aggregate-error@npm:^3.1.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ajv@npm:^6.12.3, ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:^3.1.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"aproba@npm:2.0.0, aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 + languageName: node + linkType: hard + +"are-docs-informative@npm:^0.0.2": + version: 0.0.2 + resolution: "are-docs-informative@npm:0.0.2" + checksum: 10c0/f0326981bd699c372d268b526b170a28f2e1aec2cf99d7de0686083528427ecdf6ae41fef5d9988e224a5616298af747ad8a76e7306b0a7c97cc085a99636d60 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^2.0.0": + version: 2.0.0 + resolution: "are-we-there-yet@npm:2.0.0" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"args@npm:^5.0.3": + version: 5.0.3 + resolution: "args@npm:5.0.3" + dependencies: + camelcase: "npm:5.0.0" + chalk: "npm:2.4.2" + leven: "npm:2.1.0" + mri: "npm:1.1.4" + checksum: 10c0/213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + is-array-buffer: "npm:^3.0.5" + checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d + languageName: node + linkType: hard + +"array-differ@npm:^3.0.0": + version: 3.0.0 + resolution: "array-differ@npm:3.0.0" + checksum: 10c0/c0d924cc2b7e3f5a0e6ae932e8941c5fddc0412bcecf8d5152641910e60f5e1c1e87da2b32083dec2f92f9a8f78e916ea68c22a0579794ba49886951ae783123 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: 10c0/75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c + languageName: node + linkType: hard + +"array-includes@npm:^3.1.8": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + is-string: "npm:^1.0.7" + checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.2": + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 + languageName: node + linkType: hard + +"array.prototype.reduce@npm:^1.0.6": + version: 1.0.7 + resolution: "array.prototype.reduce@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-array-method-boxes-properly: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + is-string: "npm:^1.0.7" + checksum: 10c0/97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 10c0/c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab + languageName: node + linkType: hard + +"arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 10c0/3fb30b5e7c37abea1907a60b28a554d2f0fc088757ca9bf5b684786e583fdf14360721eb12575c1ce6f995282eab936712d3c4389122682eafab0e0b57f78dbb + languageName: node + linkType: hard + +"asap@npm:~2.0.3": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d + languageName: node + linkType: hard + +"asn1@npm:^0.2.6, asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: "npm:~2.1.0" + checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 + languageName: node + linkType: hard + +"assert-never@npm:^1.2.1": + version: 1.4.0 + resolution: "assert-never@npm:1.4.0" + checksum: 10c0/494db08b89fb43d6231c9b4c48da22824f1912d88992bf0268e43b3dad0f64bd56d380addbb997d2dea7d859421d5e2904e8bd01243794f2bb5bfbc8d32d1fc6 + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 + languageName: node + linkType: hard + +"async@npm:^3.1.0, async@npm:^3.2.3": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 + languageName: node + linkType: hard + +"asynciterator@npm:^3.2.0": + version: 3.9.0 + resolution: "asynciterator@npm:3.9.0" + checksum: 10c0/62e4c76ca2f2bbc8f3eae6a685c9b5c8ed82afd969f24cfb9aff1347b50d5e92a7dae61d2a3c24e834f193b303082d855cf688720059d6236cc06650a4fe2c22 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 + languageName: node + linkType: hard + +"axios@npm:^1.5.1, axios@npm:^1.7.4": + version: 1.7.9 + resolution: "axios@npm:1.7.9" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/b7a41e24b59fee5f0f26c1fc844b45b17442832eb3a0fb42dd4f1430eb4abc571fe168e67913e8a1d91c993232bd1d1ab03e20e4d1fee8c6147649b576fc1b0b + languageName: node + linkType: hard + +"babel-jest@npm:30.0.5, babel-jest@npm:^30.0.5": + version: 30.0.5 + resolution: "babel-jest@npm:30.0.5" + dependencies: + "@jest/transform": "npm:30.0.5" + "@types/babel__core": "npm:^7.20.5" + babel-plugin-istanbul: "npm:^7.0.0" + babel-preset-jest: "npm:30.0.1" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + slash: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.11.0 + checksum: 10c0/48fcdbf97519216f8897c4d83c0d2a64dffd90e4876b386e4ea4530021aaedbd7253de65a71d554cb57fdeb7bd8509bed43a6c016eb150e49e1fbe1236248f0f + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^7.0.0": + version: 7.0.0 + resolution: "babel-plugin-istanbul@npm:7.0.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@istanbuljs/load-nyc-config": "npm:^1.0.0" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-instrument: "npm:^6.0.2" + test-exclude: "npm:^6.0.0" + checksum: 10c0/79c37bd59ea9bcb16218e874993621e24048776fac7ee72eabe78f0909200851bdb93b32f6eba5b463206f15a1ee7ad40a725af8447952321ae1fdf14e740fe9 + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:30.0.1": + version: 30.0.1 + resolution: "babel-plugin-jest-hoist@npm:30.0.1" + dependencies: + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.27.3" + "@types/babel__core": "npm:^7.20.5" + checksum: 10c0/49087f45c8ac359d68c622f4bd471300376b0ca2b6bd6ecaa1bd254ea87eda8fa3ce6144848e3bbabad337d276474a47e2ac3f6272f82e1f2337924ff49a02bd + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.14": + version: 0.4.14 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" + dependencies: + "@babel/compat-data": "npm:^7.27.7" + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.13.0": + version: 0.13.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.5": + version: 0.6.5 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d + languageName: node + linkType: hard + +"babel-plugin-transform-import-meta@npm:^2.3.3": + version: 2.3.3 + resolution: "babel-plugin-transform-import-meta@npm:2.3.3" + dependencies: + "@babel/template": "npm:^7.25.9" + tslib: "npm:^2.8.1" + peerDependencies: + "@babel/core": ^7.10.0 + checksum: 10c0/184275ef4f1c14a79e46fa2084e5743fbcfbaa52a9372f713e0e97e45aab4ac5be214c7eb4893fb9ea0088d32913772651776c660bee38bd2c8d52ef92750c07 + languageName: node + linkType: hard + +"babel-plugin-transform-vite-meta-env@npm:1.0.3": + version: 1.0.3 + resolution: "babel-plugin-transform-vite-meta-env@npm:1.0.3" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + checksum: 10c0/fd602e8e9b64b06c93106b295a75f41a89a527d825ac3984baafab428108d3b1a12b6280e0bf19a58bda25e65e839a67f71bf1d916424fc81201dc14de241b64 + languageName: node + linkType: hard + +"babel-plugin-transform-vite-meta-glob@npm:1.1.2": + version: 1.1.2 + resolution: "babel-plugin-transform-vite-meta-glob@npm:1.1.2" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + glob: "npm:^10.3.10" + checksum: 10c0/1c3262dcba1548a3f478c77d9175b9e09c79ce257f0a9d2993d5a3bf74d5857f14825079c5430bc627f6dfca7a91fedcbe042580deab71062ec75f73ad54d7b2 + languageName: node + linkType: hard + +"babel-plugin-transform-vite-meta-hot@npm:1.0.0": + version: 1.0.0 + resolution: "babel-plugin-transform-vite-meta-hot@npm:1.0.0" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + checksum: 10c0/718176522cfbdb6f1dfcd40431c99f89bfafa74bd52c3a96c03e63e06b1797eb599e397e54c0eeebdb2fcdcfe60a63ae66b08775e2c1c52297708e3caedebac6 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.1.0": + version: 1.2.0 + resolution: "babel-preset-current-node-syntax@npm:1.2.0" + dependencies: + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-bigint": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0 || ^8.0.0-0 + checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 + languageName: node + linkType: hard + +"babel-preset-jest@npm:30.0.1": + version: 30.0.1 + resolution: "babel-preset-jest@npm:30.0.1" + dependencies: + babel-plugin-jest-hoist: "npm:30.0.1" + babel-preset-current-node-syntax: "npm:^1.1.0" + peerDependencies: + "@babel/core": ^7.11.0 + checksum: 10c0/33da0094965929b1742b02e55272b544f189cd487d55bbba60e68d96d62d48f466264fe51f65950454829d4f2271541f2433e1c1c5e6a7ff5b9e91f1303471b7 + languageName: node + linkType: hard + +"babel-preset-vite@npm:^1.1.3": + version: 1.1.3 + resolution: "babel-preset-vite@npm:1.1.3" + dependencies: + "@babel/runtime": "npm:^7.13.9" + "@types/babel__core": "npm:^7.1.12" + babel-plugin-transform-vite-meta-env: "npm:1.0.3" + babel-plugin-transform-vite-meta-glob: "npm:1.1.2" + babel-plugin-transform-vite-meta-hot: "npm:1.0.0" + checksum: 10c0/380bc48988b5fe94b372eb72ba695410f644d9e4375e6dfc15f313e6d4b9bce2284ec0373e9f481f44a884e4a3820ab63b05dcd532cf78a1772e873431cfc8d6 + languageName: node + linkType: hard + +"babel-walk@npm:3.0.0-canary-5": + version: 3.0.0-canary-5 + resolution: "babel-walk@npm:3.0.0-canary-5" + dependencies: + "@babel/types": "npm:^7.9.6" + checksum: 10c0/17b689874d15c37714cedf6797dd9321dcb998d8e0dda9a8fe8c8bbbf128bbdeb8935cf56e8630d6b67eae76d2a0bc1e470751e082c3b0e30b80d58beafb5e64 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base-x@npm:^3.0.2": + version: 3.0.10 + resolution: "base-x@npm:3.0.10" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/a13a34b71439ee5381667efa630b3bf640cf17f632c5ba01990483367592e72f247d7fb4f8c6d0e3ff8c0fb7224b3ac682ff5be09b87063a45b3968f0457e563 + languageName: node + linkType: hard + +"base58-universal@npm:^2.0.0": + version: 2.0.0 + resolution: "base58-universal@npm:2.0.0" + checksum: 10c0/f21fd50904e1f2d083832e39269058ffbd95592ad27fc2acc53ad3d9d7eacfa82c4e655181e0fd8a817619f4c925a42baca877276dd73e755d30f52def748ab6 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"base64url-universal@npm:^1.0.1": + version: 1.1.0 + resolution: "base64url-universal@npm:1.1.0" + dependencies: + base64url: "npm:^3.0.0" + checksum: 10c0/d1408b3062c7a73cca75c6cc47eaefc47089ca20e019f5b6c3ab4641d7a87caec3e8e1fb17165b63380bef924f62f59dc7f257586490d5718c8c352f1dfc98e2 + languageName: node + linkType: hard + +"base64url-universal@npm:^2.0.0": + version: 2.0.0 + resolution: "base64url-universal@npm:2.0.0" + dependencies: + base64url: "npm:^3.0.1" + checksum: 10c0/6143326c1b5011d987d410a7451fcacad33af9282f9e7d06a21e1d4d7ed9d884e6c09a8f0d178f6c9ef3b11f8cda10ece4c84768e43dc9cb4dc47d1b5056de40 + languageName: node + linkType: hard + +"base64url@npm:^3.0.0, base64url@npm:^3.0.1": + version: 3.0.1 + resolution: "base64url@npm:3.0.1" + checksum: 10c0/5ca9d6064e9440a2a45749558dddd2549ca439a305793d4f14a900b7256b5f4438ef1b7a494e1addc66ced5d20f5c010716d353ed267e4b769e6c78074991241 + languageName: node + linkType: hard + +"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: "npm:^0.14.3" + checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 + languageName: node + linkType: hard + +"bcrypt@npm:^5.0.1": + version: 5.1.1 + resolution: "bcrypt@npm:5.1.1" + dependencies: + "@mapbox/node-pre-gyp": "npm:^1.0.11" + node-addon-api: "npm:^5.0.0" + checksum: 10c0/743231158c866bddc46f25eb8e9617fe38bc1a6f5f3052aba35e361d349b7f8fb80e96b45c48a4c23c45c29967ccd11c81cf31166454fc0ab019801c336cab40 + languageName: node + linkType: hard + +"before-after-hook@npm:^2.2.0": + version: 2.2.3 + resolution: "before-after-hook@npm:2.2.3" + checksum: 10c0/0488c4ae12df758ca9d49b3bb27b47fd559677965c52cae7b335784724fb8bf96c42b6e5ba7d7afcbc31facb0e294c3ef717cc41c5bc2f7bd9e76f8b90acd31c + languageName: node + linkType: hard + +"bin-links@npm:^4.0.4": + version: 4.0.4 + resolution: "bin-links@npm:4.0.4" + dependencies: + cmd-shim: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + read-cmd-shim: "npm:^4.0.0" + write-file-atomic: "npm:^5.0.0" + checksum: 10c0/feb664e786429289d189c19c193b28d855c2898bc53b8391306cbad2273b59ccecb91fd31a433020019552c3bad3a1e0eeecca1c12e739a12ce2ca94f7553a17 + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"bluebird@npm:^3.0.0, bluebird@npm:^3.1.1, bluebird@npm:^3.7.2": + version: 3.7.2 + resolution: "bluebird@npm:3.7.2" + checksum: 10c0/680de03adc54ff925eaa6c7bb9a47a0690e8b5de60f4792604aae8ed618c65e6b63a7893b57ca924beaf53eee69c5af4f8314148c08124c550fe1df1add897d2 + languageName: node + linkType: hard + +"body-parser@npm:^1.19.0": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.5" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.13.0" + raw-body: "npm:2.5.2" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 + languageName: node + linkType: hard + +"boolbase@npm:~1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.0": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" + dependencies: + caniuse-lite: "npm:^1.0.30001688" + electron-to-chromium: "npm:^1.5.73" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.1" + bin: + browserslist: cli.js + checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 + languageName: node + linkType: hard + +"browserslist@npm:^4.25.1": + version: 4.25.1 + resolution: "browserslist@npm:4.25.1" + dependencies: + caniuse-lite: "npm:^1.0.30001726" + electron-to-chromium: "npm:^1.5.173" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.3" + bin: + browserslist: cli.js + checksum: 10c0/acba5f0bdbd5e72dafae1e6ec79235b7bad305ed104e082ed07c34c38c7cb8ea1bc0f6be1496958c40482e40166084458fc3aee15111f15faa79212ad9081b2a + languageName: node + linkType: hard + +"bs58@npm:^4.0.1": + version: 4.0.1 + resolution: "bs58@npm:4.0.1" + dependencies: + base-x: "npm:^3.0.2" + checksum: 10c0/613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: "npm:^0.4.0" + checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 + languageName: node + linkType: hard + +"buffer-equal-constant-time@npm:1.0.1": + version: 1.0.1 + resolution: "buffer-equal-constant-time@npm:1.0.1" + checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + +"buildcheck@npm:~0.0.6": + version: 0.0.6 + resolution: "buildcheck@npm:0.0.6" + checksum: 10c0/8cbdb89f41bc484b8325f4828db4135b206a0dffb641eb6cdb2b7022483c45dd0e5aac6d820c9a67bdd2caab3a02c76d7ceec7bd9ec494b5a2270d2806b01a76 + languageName: node + linkType: hard + +"bull@npm:^3.15.0": + version: 3.29.3 + resolution: "bull@npm:3.29.3" + dependencies: + cron-parser: "npm:^2.13.0" + debuglog: "npm:^1.0.0" + get-port: "npm:^5.1.1" + ioredis: "npm:^4.27.0" + lodash: "npm:^4.17.21" + p-timeout: "npm:^3.2.0" + promise.prototype.finally: "npm:^3.1.2" + semver: "npm:^7.3.2" + util.promisify: "npm:^1.0.1" + uuid: "npm:^8.3.0" + checksum: 10c0/6860a17a2abc45bfa887c8fed0f666da2291d382dea3b5be581b82ba992e6edc487d55b5cf2e668f29e7123930958d2bdefae5a2bb003414767d4f209ebc2b4f + languageName: node + linkType: hard + +"busboy@npm:^0.3.1": + version: 0.3.1 + resolution: "busboy@npm:0.3.1" + dependencies: + dicer: "npm:0.3.0" + checksum: 10c0/15b3382816f657302956ba68e48342891b4f36ae1164f1ad47d96302dd2cda634672513d03c7e5dde0dc90e2889becf3fa32f9b3b391d0f8ab4a5a675b5b5581 + languageName: node + linkType: hard + +"byte-size@npm:8.1.1": + version: 8.1.1 + resolution: "byte-size@npm:8.1.1" + checksum: 10c0/83170a16820fde48ebaef93bf6b2e86c5f72041f76e44eba1f3c738cceb699aeadf11088198944d5d7c6f970b465ab1e3dddc2e60bfb49a74374f3447a8db5b9 + languageName: node + linkType: hard + +"bytes@npm:3.1.2, bytes@npm:^3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + +"cacache@npm:^18.0.0, cacache@npm:^18.0.3": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"cacheable-lookup@npm:^5.0.3": + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 10c0/a6547fb4954b318aa831cbdd2f7b376824bc784fb1fa67610e4147099e3074726072d9af89f12efb69121415a0e1f2918a8ddd4aafcbcf4e91fbeef4a59cd42c + languageName: node + linkType: hard + +"cacheable-request@npm:^7.0.2": + version: 7.0.4 + resolution: "cacheable-request@npm:7.0.4" + dependencies: + clone-response: "npm:^1.0.2" + get-stream: "npm:^5.1.0" + http-cache-semantics: "npm:^4.0.0" + keyv: "npm:^4.0.0" + lowercase-keys: "npm:^2.0.0" + normalize-url: "npm:^6.0.1" + responselike: "npm:^2.0.0" + checksum: 10c0/0834a7d17ae71a177bc34eab06de112a43f9b5ad05ebe929bec983d890a7d9f2bc5f1aa8bb67ea2b65e07a3bc74bea35fa62dd36dbac52876afe36fdcf83da41 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": + version: 1.0.3 + resolution: "call-bound@npm:1.0.3" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf + languageName: node + linkType: hard + +"callsites@npm:^3.0.0, callsites@npm:^3.1.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: "npm:^5.3.1" + map-obj: "npm:^4.0.0" + quick-lru: "npm:^4.0.1" + checksum: 10c0/bf1a28348c0f285c6c6f68fb98a9d088d3c0269fed0cdff3ea680d5a42df8a067b4de374e7a33e619eb9d5266a448fe66c2dd1f8e0c9209ebc348632882a3526 + languageName: node + linkType: hard + +"camelcase@npm:5.0.0": + version: 5.0.0 + resolution: "camelcase@npm:5.0.0" + checksum: 10c0/515f1ce911d65949708d9e179f1a40af71eb7de668230a0c85961a35590f7da39af79cfb48d834883dbcc7995bdb7dd6bae8027b101e37a10d95337ec8732800 + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"camelcase@npm:^6.3.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001695 + resolution: "caniuse-lite@npm:1.0.30001695" + checksum: 10c0/acf90a767051fdd8083711b3ff9f07a28149c55e394115d8f874f149aa4f130e6bc50cea1dd94fe03035b9ebbe13b64f446518a6d2e19f72650962bdff44b2c5 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001726": + version: 1.0.30001731 + resolution: "caniuse-lite@npm:1.0.30001731" + checksum: 10c0/d8cddf817d5bec8e7c2106affdbf1bfc3923463ca16697c992b2efeb043e6a5d9dcb70cda913bc6acf9112fd66f9e80279316c08e7800359116925066a63fdfa + languageName: node + linkType: hard + +"canonicalize@npm:^1.0.1": + version: 1.0.8 + resolution: "canonicalize@npm:1.0.8" + checksum: 10c0/6fafcfa73855a49c86eed26d2f23734713a542a3107a23a6ab16fb22b6cee6bb2d92ad32b2244d52594bd69bc08bec820413911cd566dcc5399048012ce26a83 + languageName: node + linkType: hard + +"cas@git+https://github.com/joshchan/node-cas.git": + version: 0.0.5 + resolution: "cas@https://github.com/joshchan/node-cas.git#commit=344a8bfba9d054e2e378adaf95b720c898ae48a2" + dependencies: + cheerio: "npm:0.19.0" + checksum: 10c0/03467fd69a10bd1b03cbca35f25b2249855b99857e908aeb54727cb8d8f17658fa909f7b1296a77eaf7537dc24a0fa16f5da438a8f161260f189d0db1e60f5c6 + languageName: node + linkType: hard + +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 + languageName: node + linkType: hard + +"chalk@npm:2.4.2, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:4.1.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/3787bd65ecd98ab3a1acc3b4f71d006268a675875e49ee6ea75fb54ba73d268b97544368358c18c42445e408e076ae8ad5cec8fbad36942a2c7ac654883dc61e + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e + languageName: node + linkType: hard + +"character-parser@npm:^2.2.0": + version: 2.2.0 + resolution: "character-parser@npm:2.2.0" + dependencies: + is-regex: "npm:^1.0.3" + checksum: 10c0/5a8d3eff2c912a6878c84e2ebf9d42524e858aa7e1a1c7e8bb79ab54da109ad008fe9057a9d2b3230541d7ff858eda98983a2ae15db57ba01af2e989d29e932e + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"cheerio@npm:0.19.0": + version: 0.19.0 + resolution: "cheerio@npm:0.19.0" + dependencies: + css-select: "npm:~1.0.0" + dom-serializer: "npm:~0.1.0" + entities: "npm:~1.1.1" + htmlparser2: "npm:~3.8.1" + lodash: "npm:^3.2.0" + checksum: 10c0/af96cc6a6b595334ed7c1a47b1a999dfad20645a563acdc8bf5338b3774cf050c99b6f4c9040ef0f4c03b7c915e3d3735bedcbb95968d9aecf9cf2e44dcf4896 + languageName: node + linkType: hard + +"cheerio@npm:^0.22.0": + version: 0.22.0 + resolution: "cheerio@npm:0.22.0" + dependencies: + css-select: "npm:~1.2.0" + dom-serializer: "npm:~0.1.0" + entities: "npm:~1.1.1" + htmlparser2: "npm:^3.9.1" + lodash.assignin: "npm:^4.0.9" + lodash.bind: "npm:^4.1.4" + lodash.defaults: "npm:^4.0.1" + lodash.filter: "npm:^4.4.0" + lodash.flatten: "npm:^4.2.0" + lodash.foreach: "npm:^4.3.0" + lodash.map: "npm:^4.4.0" + lodash.merge: "npm:^4.4.0" + lodash.pick: "npm:^4.2.1" + lodash.reduce: "npm:^4.4.0" + lodash.reject: "npm:^4.4.0" + lodash.some: "npm:^4.4.0" + checksum: 10c0/b067fadb3d0ada1f614ce27b2795c206df2c612ab066393f833c798ba29c73a610a3202567d2223658743026f5385cda61f6b52370b22f28a924e52883933340 + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"ci-info@npm:^4.0.0": + version: 4.1.0 + resolution: "ci-info@npm:4.1.0" + checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 + languageName: node + linkType: hard + +"ci-info@npm:^4.2.0": + version: 4.3.0 + resolution: "ci-info@npm:4.3.0" + checksum: 10c0/60d3dfe95d75c01454ec1cfd5108617dd598a28a2a3e148bd7e1523c1c208b5f5a3007cafcbe293e6fd0a5a310cc32217c5dc54743eeabc0a2bec80072fc055c + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^2.1.0": + version: 2.1.0 + resolution: "cjs-module-lexer@npm:2.1.0" + checksum: 10c0/91cf28686dc3948e4a06dfa03a2fccb14b7a97471ffe7ae0124f62060ddf2de28e8e997f60007babe6e122b1b06a47c01a1b72cc015f185824d9cac3ccfa5533 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 + languageName: node + linkType: hard + +"cli-spinners@npm:2.6.1": + version: 2.6.1 + resolution: "cli-spinners@npm:2.6.1" + checksum: 10c0/6abcdfef59aa68e6b51376d87d257f9120a0a7120a39dd21633702d24797decb6dc747dff2217c88732710db892b5053c5c672d221b6c4d13bbcb5372e203596 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 10c0/125a62810e59a2564268c80fdff56c23159a7690c003e34aeb2e68497dccff26911998ff49c33916fcfdf71e824322cc3953e3f7b48b27267c7a062c81348a9a + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone-deep@npm:4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"clone-response@npm:^1.0.2": + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" + dependencies: + mimic-response: "npm:^1.0.0" + checksum: 10c0/06a2b611824efb128810708baee3bd169ec9a1bf5976a5258cd7eb3f7db25f00166c6eee5961f075c7e38e194f373d4fdf86b8166ad5b9c7e82bbd2e333a6087 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b + languageName: node + linkType: hard + +"cluster-key-slot@npm:^1.1.0": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: 10c0/d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 + languageName: node + linkType: hard + +"cmd-shim@npm:6.0.3, cmd-shim@npm:^6.0.0": + version: 6.0.3 + resolution: "cmd-shim@npm:6.0.3" + checksum: 10c0/dc09fe0bf39e86250529456d9a87dd6d5208d053e449101a600e96dc956c100e0bc312cdb413a91266201f3bd8057d4abf63875cafb99039553a1937d8f3da36 + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.2": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"color-string@npm:^1.9.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: "npm:^1.0.0" + simple-swizzle: "npm:^0.2.2" + checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 + languageName: node + linkType: hard + +"color-support@npm:1.1.3, color-support@npm:^1.1.2": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 + languageName: node + linkType: hard + +"color@npm:^4.2.3": + version: 4.2.3 + resolution: "color@npm:4.2.3" + dependencies: + color-convert: "npm:^2.0.1" + color-string: "npm:^1.9.0" + checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 + languageName: node + linkType: hard + +"columnify@npm:1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: "npm:^6.0.1" + wcwidth: "npm:^1.0.0" + checksum: 10c0/25b90b59129331bbb8b0c838f8df69924349b83e8eab9549f431062a20a39094b8d744bb83265be38fd5d03140ce4bfbd85837c293f618925e83157ae9535f1d + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:^2.15.1, commander@npm:^2.20.3": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"comment-parser@npm:1.4.1": + version: 1.4.1 + resolution: "comment-parser@npm:1.4.1" + checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 10c0/390c08d2a67a7a106d39499c002d827d2874966d938012453fd7ca34cd306881e2b9d604f657fa7a8e6e4896d67f39ebc09bf1bfd8da8ff318e0fb7a8752c534 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: "npm:^1.0.0" + dot-prop: "npm:^5.1.0" + checksum: 10c0/78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 + languageName: node + linkType: hard + +"component-emitter@npm:^1.2.0": + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: 10c0/e4900b1b790b5e76b8d71b328da41482118c0f3523a516a41be598dc2785a07fd721098d9bf6e22d89b19f4fa4e1025160dc00317ea111633a3e4f75c2b86032 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.0.2" + typedarray: "npm:^0.0.6" + checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.10": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e + languageName: node + linkType: hard + +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 + languageName: node + linkType: hard + +"consolidate@npm:^0.14.2": + version: 0.14.5 + resolution: "consolidate@npm:0.14.5" + dependencies: + bluebird: "npm:^3.1.1" + checksum: 10c0/9affd54c3013932e0c475c9a3fd431f8b2dd81d2ef9c8267c9c99941e5f763cfb3e7719625783615c9e231f1bb3b7646b4362a60fc8b625a3b9ebe6f51ac4888 + languageName: node + linkType: hard + +"constantinople@npm:^4.0.1": + version: 4.0.1 + resolution: "constantinople@npm:4.0.1" + dependencies: + "@babel/parser": "npm:^7.6.0" + "@babel/types": "npm:^7.6.1" + checksum: 10c0/15129adef19b1af2c3ade8bd38f97c34781bf461472a30ab414384b28d072be83070c8d2175787c045ef7c222c415101ae609936e7903427796a0c0eca8449fd + languageName: node + linkType: hard + +"content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:7.0.0": + version: 7.0.0 + resolution: "conventional-changelog-angular@npm:7.0.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e + languageName: node + linkType: hard + +"conventional-changelog-core@npm:5.0.1": + version: 5.0.1 + resolution: "conventional-changelog-core@npm:5.0.1" + dependencies: + add-stream: "npm:^1.0.0" + conventional-changelog-writer: "npm:^6.0.0" + conventional-commits-parser: "npm:^4.0.0" + dateformat: "npm:^3.0.3" + get-pkg-repo: "npm:^4.2.1" + git-raw-commits: "npm:^3.0.0" + git-remote-origin-url: "npm:^2.0.0" + git-semver-tags: "npm:^5.0.0" + normalize-package-data: "npm:^3.0.3" + read-pkg: "npm:^3.0.0" + read-pkg-up: "npm:^3.0.0" + checksum: 10c0/c026da415ea58346c167e58f8dd717592e92afc897aa604189a6d69f48b6943e7a656b2c83433810feea32dda117b0914a7f5860ed338a21f6ee9b0f56788b37 + languageName: node + linkType: hard + +"conventional-changelog-preset-loader@npm:^3.0.0": + version: 3.0.0 + resolution: "conventional-changelog-preset-loader@npm:3.0.0" + checksum: 10c0/5de23c4aa8b8526c3542fd5abe9758d56eed79821f32cc16d1fdf480cecc44855edbe4680113f229509dcaf4b97cc41e786ac8e3b0822b44fd9d0b98542ed0e0 + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^6.0.0": + version: 6.0.1 + resolution: "conventional-changelog-writer@npm:6.0.1" + dependencies: + conventional-commits-filter: "npm:^3.0.0" + dateformat: "npm:^3.0.3" + handlebars: "npm:^4.7.7" + json-stringify-safe: "npm:^5.0.1" + meow: "npm:^8.1.2" + semver: "npm:^7.0.0" + split: "npm:^1.0.1" + bin: + conventional-changelog-writer: cli.js + checksum: 10c0/50790b0d92e06c5ab1c02cc4eb2ecd74575244d31cfacea1885d7c8afeae1bc7bbc169140fe062f2438b9952400762240b796e59521c0246278859296b323338 + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^3.0.0": + version: 3.0.0 + resolution: "conventional-commits-filter@npm:3.0.0" + dependencies: + lodash.ismatch: "npm:^4.4.0" + modify-values: "npm:^1.0.1" + checksum: 10c0/9d43cf9029bf39b70b394c551846a57b6f0473028ba5628c38bd447672655cc27bb80ba502d9a7e41335f63ad62b754cb26579f3d4bae7398dfc092acbb32578 + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "conventional-commits-parser@npm:4.0.0" + dependencies: + JSONStream: "npm:^1.3.5" + is-text-path: "npm:^1.0.1" + meow: "npm:^8.1.2" + split2: "npm:^3.2.2" + bin: + conventional-commits-parser: cli.js + checksum: 10c0/12e390cc80ad8a825c5775a329b95e11cf47a6df7b8a3875d375e28b8cb27c4f32955842ea73e4e357cff9757a6be99fdffe4fda87a23e9d8e73f983425537a0 + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:7.0.1": + version: 7.0.1 + resolution: "conventional-recommended-bump@npm:7.0.1" + dependencies: + concat-stream: "npm:^2.0.0" + conventional-changelog-preset-loader: "npm:^3.0.0" + conventional-commits-filter: "npm:^3.0.0" + conventional-commits-parser: "npm:^4.0.0" + git-raw-commits: "npm:^3.0.0" + git-semver-tags: "npm:^5.0.0" + meow: "npm:^8.1.2" + bin: + conventional-recommended-bump: cli.js + checksum: 10c0/ff751a256ddfbec62efd5a32de059b01659e945073793c6766143a8242864fd8099804a90bbf1e6a61928ade3d12292d6f66f721a113630de392d54eb7f0b0c3 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.7": + version: 1.0.7 + resolution: "cookie-signature@npm:1.0.7" + checksum: 10c0/e7731ad2995ae2efeed6435ec1e22cdd21afef29d300c27281438b1eab2bae04ef0d1a203928c0afec2cee72aa36540b8747406ebe308ad23c8e8cc3c26c9c51 + languageName: node + linkType: hard + +"cookie@npm:0.7.2": + version: 0.7.2 + resolution: "cookie@npm:0.7.2" + checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 + languageName: node + linkType: hard + +"cookiejar@npm:^2.1.0": + version: 2.1.4 + resolution: "cookiejar@npm:2.1.4" + checksum: 10c0/2dae55611c6e1678f34d93984cbd4bda58f4fe3e5247cc4993f4a305cd19c913bbaf325086ed952e892108115073a747596453d3dc1c34947f47f731818b8ad1 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.43.0": + version: 3.44.0 + resolution: "core-js-compat@npm:3.44.0" + dependencies: + browserslist: "npm:^4.25.1" + checksum: 10c0/5de4b042b8bb232b8390be3079030de5c7354610f136ed3eb91310a44455a78df02cfcf49b2fd05d5a5aa2695460620abf1b400784715f7482ed4770d40a68b2 + languageName: node + linkType: hard + +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cosmiconfig@npm:9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + languageName: node + linkType: hard + +"cpu-features@npm:~0.0.10": + version: 0.0.10 + resolution: "cpu-features@npm:0.0.10" + dependencies: + buildcheck: "npm:~0.0.6" + nan: "npm:^2.19.0" + node-gyp: "npm:latest" + checksum: 10c0/0c4a12904657b22477ffbcfd2b4b2bdd45b174f283616b18d9e1ade495083f9f6098493feb09f4ae2d0b36b240f9ecd32cfb4afe210cf0d0f8f0cc257bd58e54 + languageName: node + linkType: hard + +"credentials-context@npm:^1.0.0": + version: 1.0.0 + resolution: "credentials-context@npm:1.0.0" + checksum: 10c0/ceefd9cba384fed7e2cfe85d8e9fee15da27ef8989ddcecb7cc8a678fa83d691e834100cf0280deb52349f09f5da1fb3b3ba144404faeabea44b0130651ac74d + languageName: node + linkType: hard + +"cron-parser@npm:^2.13.0": + version: 2.18.0 + resolution: "cron-parser@npm:2.18.0" + dependencies: + is-nan: "npm:^1.3.0" + moment-timezone: "npm:^0.5.31" + checksum: 10c0/1361cf0af8a749a355c7dd45ec85d94f8b1b768e6ce19955fea38d72b22874c0c63add070a1fe543a4ee4fa5229b6ae43760934df0d4aed6499581108657df25 + languageName: node + linkType: hard + +"cron-parser@npm:^4.2.0, cron-parser@npm:^4.2.1, cron-parser@npm:^4.3.0": + version: 4.9.0 + resolution: "cron-parser@npm:4.9.0" + dependencies: + luxon: "npm:^3.2.1" + checksum: 10c0/348622bdcd1a15695b61fc33af8a60133e5913a85cf99f6344367579e7002896514ba3b0a9d6bb569b02667d6b06836722bf2295fcd101b3de378f71d37bed0b + languageName: node + linkType: hard + +"cron@npm:^1.8.2": + version: 1.8.3 + resolution: "cron@npm:1.8.3" + dependencies: + luxon: "npm:^1.23.x" + checksum: 10c0/f3cd0960c34bebe8ac70404120ad1822bceb4cca216b0951a997e5a673c8b140d73b567633248485811cfced99926cdf4ff624e067cf26ec72d5cfce06f0468c + languageName: node + linkType: hard + +"cron@npm:^4.1.4": + version: 4.3.0 + resolution: "cron@npm:4.3.0" + dependencies: + "@types/luxon": "npm:~3.6.0" + luxon: "npm:~3.6.0" + checksum: 10c0/859805a56ce6af19177a0abff3688e917d2124c0fa086234333d20fd4ca6efe333af2ab4ba6ba06c3aa68c6b2eec30e375c795e97e735c70fcac126057332f10 + languageName: node + linkType: hard + +"cross-fetch@npm:^3.0.5, cross-fetch@npm:^3.0.6": + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" + dependencies: + node-fetch: "npm:^2.7.0" + checksum: 10c0/d8596adf0269130098a676f6739a0922f3cc7b71cc89729925411ebe851a87026171c82ea89154c4811c9867c01c44793205a52e618ce2684650218c7fbeeb9f + languageName: node + linkType: hard + +"cross-spawn@npm:^5.1.0": + version: 5.1.0 + resolution: "cross-spawn@npm:5.1.0" + dependencies: + lru-cache: "npm:^4.0.1" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10c0/1918621fddb9f8c61e02118b2dbf81f611ccd1544ceaca0d026525341832b8511ce2504c60f935dbc06b35e5ef156fe8c1e72708c27dd486f034e9c0e1e07201 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"crypto-ld@npm:^3.7.0": + version: 3.9.0 + resolution: "crypto-ld@npm:3.9.0" + dependencies: + base64url-universal: "npm:^1.0.1" + bs58: "npm:^4.0.1" + node-forge: "npm:~0.10.0" + semver: "npm:^6.2.0" + sodium-native: "npm:^3.2.0" + dependenciesMeta: + sodium-native: + optional: true + checksum: 10c0/78fd545e802db3b0ade0bacf177dde7c52dd24d801faca79a7b5b7d6226d114db7fc1307397ff119798709376d28c3271e08e457723720c141ab4f50e47473e1 + languageName: node + linkType: hard + +"crypto-ld@npm:^7.0.0": + version: 7.0.0 + resolution: "crypto-ld@npm:7.0.0" + checksum: 10c0/67fac3bf5c52d71e02ae436a305f223376746cb43d2aa6550764d2885e15e8802267c8fd6a451c4255b90b58eeab1c036b6ee6e88f21425620a3d5ecc8b36d92 + languageName: node + linkType: hard + +"css-select@npm:~1.0.0": + version: 1.0.0 + resolution: "css-select@npm:1.0.0" + dependencies: + boolbase: "npm:~1.0.0" + css-what: "npm:1.0" + domutils: "npm:1.4" + nth-check: "npm:~1.0.0" + checksum: 10c0/2311812bb619d39263f620a7f5f3900c08cc25a5a0817b76e6f677dbe5b062a434cdac7f5de0bfc025cd249de53c509ddc87c77c62c99466b2a891f7df935338 + languageName: node + linkType: hard + +"css-select@npm:~1.2.0": + version: 1.2.0 + resolution: "css-select@npm:1.2.0" + dependencies: + boolbase: "npm:~1.0.0" + css-what: "npm:2.1" + domutils: "npm:1.5.1" + nth-check: "npm:~1.0.1" + checksum: 10c0/16e91cd4a8606e76eb2d93ded43e2d20fe315effa7e1dedf16e81fab5c6bbd18b394f78cb59c04e2dddc7d4c68e31a0617b7f4f196dff48398cf3ac83e78475c + languageName: node + linkType: hard + +"css-what@npm:1.0": + version: 1.0.0 + resolution: "css-what@npm:1.0.0" + checksum: 10c0/dbcba5c7251e11643fd531d6cfd625007ac147485c1004d8a9e6c2d768ab43ab1f2f57da5f73df235990cd30d2d80fdb64d54f4c943baec460a2b2beaf646808 + languageName: node + linkType: hard + +"css-what@npm:2.1": + version: 2.1.3 + resolution: "css-what@npm:2.1.3" + checksum: 10c0/4f1a25855be8bdfebdd431ccb084f6481951408dbf076eebf7a1c045ae45dd5651b32fe55deaa16a59e98eb25d5bb066dcf6bdff7aa3cc2ed5bdbe5fe1aa7fd7 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + +"dargs@npm:^7.0.0": + version: 7.0.0 + resolution: "dargs@npm:7.0.0" + checksum: 10c0/ec7f6a8315a8fa2f8b12d39207615bdf62b4d01f631b96fbe536c8ad5469ab9ed710d55811e564d0d5c1d548fc8cb6cc70bf0939f2415790159f5a75e0f96c92 + languageName: node + linkType: hard + +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a + languageName: node + linkType: hard + +"dashify@npm:^2.0.0": + version: 2.0.0 + resolution: "dashify@npm:2.0.0" + checksum: 10c0/b9ab76cbd9739b6dba4359083cc9a670e6a0876f90ab3409b9984cf386b82a28a89009afe15d13ce62f97bc84ce49be2fe85f3a6791481a8d31e962cd0f0e710 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 + languageName: node + linkType: hard + +"datauri@npm:^2.0.0": + version: 2.0.0 + resolution: "datauri@npm:2.0.0" + dependencies: + image-size: "npm:^0.7.3" + mimer: "npm:^1.0.0" + checksum: 10c0/3f70d6e51585657d12dc4e2342623998fc227b2464d87b25d440e2c6e996a1f67647d59025d3978ba1a38a24719d7eb3cd1656d3287ef93d9fe87b80aefded79 + languageName: node + linkType: hard + +"dateformat@npm:^3.0.3": + version: 3.0.3 + resolution: "dateformat@npm:3.0.3" + checksum: 10c0/2effb8bef52ff912f87a05e4adbeacff46353e91313ad1ea9ed31412db26849f5a0fcc7e3ce36dbfb84fc6c881a986d5694f84838ad0da7000d5150693e78678 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: "npm:2.0.0" + checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + languageName: node + linkType: hard + +"debug@npm:^3.1.0, debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"debug@npm:^4.4.1": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + languageName: node + linkType: hard + +"debuglog@npm:^1.0.0": + version: 1.0.1 + resolution: "debuglog@npm:1.0.1" + checksum: 10c0/d98ac9abe6a528fcbb4d843b1caf5a9116998c76e1263d8ff4db2c086aa96fa7ea4c752a81050fa2e4304129ef330e6e4dc9dd4d47141afd7db80bf699f08219 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: "npm:^1.1.0" + map-obj: "npm:^1.0.0" + checksum: 10c0/4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"dedent@npm:1.5.3": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 + languageName: node + linkType: hard + +"dedent@npm:^1.6.0": + version: 1.6.0 + resolution: "dedent@npm:1.6.0" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/671b8f5e390dd2a560862c4511dd6d2638e71911486f78cb32116551f8f2aa6fcaf50579ffffb2f866d46b5b80fd72470659ca5760ede8f967619ef7df79e8a5 + languageName: node + linkType: hard + +"deep-extend@npm:^0.5.1": + version: 0.5.1 + resolution: "deep-extend@npm:0.5.1" + checksum: 10c0/a0b86d1ff2d62b7fe531a568bf5fef3f9fe477ada35e3d97310ab989cb588acde607283ef587a4552eaf05c3491045536ddf5741021523574d93de472c61d24f + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a + languageName: node + linkType: hard + +"defer-to-connect@npm:^2.0.0": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 + languageName: node + linkType: hard + +"denque@npm:^1.1.0": + version: 1.5.1 + resolution: "denque@npm:1.5.1" + checksum: 10c0/9e6fc1a63e1c9ded38325290302fef40e5ad28471ad8c66d68eaea623ef847bd25fc75a7c3f47396206dc967922615999066470a364e1786f2758d61337872b7 + languageName: node + linkType: hard + +"depd@npm:2.0.0, depd@npm:~2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"deprecation@npm:^2.0.0": + version: 2.3.1 + resolution: "deprecation@npm:2.3.1" + checksum: 10c0/23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + +"detect-indent@npm:^5.0.0": + version: 5.0.0 + resolution: "detect-indent@npm:5.0.0" + checksum: 10c0/58d985dd5b4d5e5aad6fe7d8ecc74538fa92c807c894794b8505569e45651bf01a38755b65d9d3d17e512239a26d3131837cbef43cf4226968d5abf175bbcc9d + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 + languageName: node + linkType: hard + +"detect-newline@npm:^3.1.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d + languageName: node + linkType: hard + +"dicer@npm:0.3.0": + version: 0.3.0 + resolution: "dicer@npm:0.3.0" + dependencies: + streamsearch: "npm:0.1.2" + checksum: 10c0/4486f0448233145216cfadd5f6bbb4c26c3a28824da5344322b06051632e99d6af2b44f893fa8b30f1749ad175b4e565d301c760d0437226d9e41ccdb6546f35 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + +"doctypes@npm:^1.1.0": + version: 1.1.0 + resolution: "doctypes@npm:1.1.0" + checksum: 10c0/b3f9d597ad8b9ac6aeba9d64df61f0098174f7570e3d34f7ee245ebc736c7bee122d9738a18e22010b98983fd9a340d63043d3841f02d8a7742a2d96d2c72610 + languageName: node + linkType: hard + +"dom-serializer@npm:0": + version: 0.2.2 + resolution: "dom-serializer@npm:0.2.2" + dependencies: + domelementtype: "npm:^2.0.1" + entities: "npm:^2.0.0" + checksum: 10c0/5cb595fb77e1a23eca56742f47631e6f4af66ce1982c7ed28b3d0ef21f1f50304c067adc29d3eaf824c572be022cee88627d0ac9b929408f24e923f3c7bed37b + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.0" + entities: "npm:^2.0.0" + checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.2" + entities: "npm:^4.2.0" + checksum: 10c0/d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 + languageName: node + linkType: hard + +"dom-serializer@npm:~0.1.0": + version: 0.1.1 + resolution: "dom-serializer@npm:0.1.1" + dependencies: + domelementtype: "npm:^1.3.0" + entities: "npm:^1.1.1" + checksum: 10c0/bb710d0a49dbe7b1019e8bf314102495e8894b9da188d00187c0ac52939ded630bc5f9eacc97bfa462d535cd321c734c0b02fefd5e4d93162ab886dccc6666f3 + languageName: node + linkType: hard + +"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": + version: 1.3.1 + resolution: "domelementtype@npm:1.3.1" + checksum: 10c0/6d4f5761060a21eaf3c96545501e9d188745c7e1c31b8d141bf15d8748feeadba868f4ea32877751b8678b286fb1afbe6ae905ca3fb8f0214d8322e482cdbec0 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 + languageName: node + linkType: hard + +"domhandler@npm:2.3": + version: 2.3.0 + resolution: "domhandler@npm:2.3.0" + dependencies: + domelementtype: "npm:1" + checksum: 10c0/f434a1c08392821751b85081fd8ff11b17d7fd6e5da59335af87ee038b816be24d35a12f45d85034e3e137158beb031d5a3df21fcd05a7dd4490e2f01a6d0e82 + languageName: node + linkType: hard + +"domhandler@npm:^2.3.0": + version: 2.4.2 + resolution: "domhandler@npm:2.4.2" + dependencies: + domelementtype: "npm:1" + checksum: 10c0/6670cab73e97e3c6771dcf22b537db3f6a0be0ad6b370f03bb5f1b585d3b563d326787fdabe1190b7ca9d81c804e9b3f8a1431159c27c44f6c05f94afa92be2d + languageName: node + linkType: hard + +"domhandler@npm:^3.0.0": + version: 3.3.0 + resolution: "domhandler@npm:3.3.0" + dependencies: + domelementtype: "npm:^2.0.1" + checksum: 10c0/376e6462a6144121f6ae50c9c1b8e0b22d2e0c68f9fb2ef6e57a5f4f9395854b1258cb638c58b171ee291359a5f41a4a57f403954db976484a59ffcee4c1e405 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: "npm:^2.2.0" + checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: "npm:^2.3.0" + checksum: 10c0/bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a + languageName: node + linkType: hard + +"domutils@npm:1.4": + version: 1.4.3 + resolution: "domutils@npm:1.4.3" + dependencies: + domelementtype: "npm:1" + checksum: 10c0/ce345ccc3a964aa6f5415a4fd9b3a11db743e8ac5c4383d7ad3dd53fe7a8f23ee03dca580209d8005f49261ddab976082bcd5652e913bcb6044b8c959fb5401b + languageName: node + linkType: hard + +"domutils@npm:1.5, domutils@npm:1.5.1": + version: 1.5.1 + resolution: "domutils@npm:1.5.1" + dependencies: + dom-serializer: "npm:0" + domelementtype: "npm:1" + checksum: 10c0/8707a18c974be54d33fd846d174d523ddf4955b2fcc1ec713cbe6ff490f60da22106b153fea6269332477eb81dc1a25a83f5b2afaf78b6dc9e2161fd7b80f7ba + languageName: node + linkType: hard + +"domutils@npm:^1.5.1": + version: 1.7.0 + resolution: "domutils@npm:1.7.0" + dependencies: + dom-serializer: "npm:0" + domelementtype: "npm:1" + checksum: 10c0/437fcd2d6d6be03f488152e73c6f953e289c58496baa22be9626b2b46f9cfd40486ae77d144487ff6b102929a3231cdb9a8bf8ef485fb7b7c30c985daedc77eb + languageName: node + linkType: hard + +"domutils@npm:^2.0.0, domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: "npm:^1.0.1" + domelementtype: "npm:^2.2.0" + domhandler: "npm:^4.2.0" + checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.2.2 + resolution: "domutils@npm:3.2.2" + dependencies: + dom-serializer: "npm:^2.0.0" + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + checksum: 10c0/47938f473b987ea71cd59e59626eb8666d3aa8feba5266e45527f3b636c7883cca7e582d901531961f742c519d7514636b7973353b648762b2e3bedbf235fada + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 10c0/93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 + languageName: node + linkType: hard + +"dotenv-expand@npm:~10.0.0": + version: 10.0.0 + resolution: "dotenv-expand@npm:10.0.0" + checksum: 10c0/298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e + languageName: node + linkType: hard + +"dotenv-expand@npm:~11.0.6": + version: 11.0.7 + resolution: "dotenv-expand@npm:11.0.7" + dependencies: + dotenv: "npm:^16.4.5" + checksum: 10c0/d80b8a7be085edf351270b96ac0e794bc3ddd7f36157912939577cb4d33ba6492ebee349d59798b71b90e36f498d24a2a564fb4aa00073b2ef4c2a3a49c467b1 + languageName: node + linkType: hard + +"dotenv-flow@npm:^3.1.0": + version: 3.3.0 + resolution: "dotenv-flow@npm:3.3.0" + dependencies: + dotenv: "npm:^8.6.0" + checksum: 10c0/64f367f66532bdd2abad84360ff37668d8718e9362b442ba293ed518b573449c6e8d15e3e50001f7bac4f2c932287a5c8c5e98435b252f230f67bcc30cd27b87 + languageName: node + linkType: hard + +"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": + version: 16.4.7 + resolution: "dotenv@npm:16.4.7" + checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462 + languageName: node + linkType: hard + +"dotenv@npm:^8.6.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 10c0/6750431dea8efbd54b9f2d9681b04e1ccc7989486461dcf058bb708d9e3d63b04115fcdf8840e38ad1e24a4a2e1e7c1560626c5e3ac7bc09371b127c49e2d45f + languageName: node + linkType: hard + +"dotenv@npm:~16.3.1": + version: 16.3.2 + resolution: "dotenv@npm:16.3.2" + checksum: 10c0/a87d62cef0810b670cb477db1a24a42a093b6b428c9e65c185ce1d6368ad7175234b13547718ba08da18df43faae4f814180cc0366e11be1ded2277abc4dd22e + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.1.0" + checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 + languageName: node + linkType: hard + +"ecdsa-sig-formatter@npm:1.0.11": + version: 1.0.11 + resolution: "ecdsa-sig-formatter@npm:1.0.11" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c + languageName: node + linkType: hard + +"ed25519-signature-2018-context@npm:^1.1.0": + version: 1.1.0 + resolution: "ed25519-signature-2018-context@npm:1.1.0" + checksum: 10c0/c0fb62dd448de59f9cb45ac55f026b793b8da9c0dbe83014d0ddf73d50ea78e37e6bf88b9445f2301a6ead3a42031ef5839f625e3186169d07897e19a056de7c + languageName: node + linkType: hard + +"ed25519-signature-2020-context@npm:^1.1.0": + version: 1.1.0 + resolution: "ed25519-signature-2020-context@npm:1.1.0" + checksum: 10c0/7e5fba0ad8c1979412c45439654c0e1ac05372305760ad7c53e6b8d9a8106ed2f109e57ef19a7f0b23ea0efd69fee9c045d38280d18be11ef3dd68a433e55c46 + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"ejs@npm:^3.1.7": + version: 3.1.10 + resolution: "ejs@npm:3.1.10" + dependencies: + jake: "npm:^10.8.5" + bin: + ejs: bin/cli.js + checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.173": + version: 1.5.194 + resolution: "electron-to-chromium@npm:1.5.194" + checksum: 10c0/7d72617857055d54552380b34be411933966fa1156dc8653e321d14e82e2af84114bac607e9e2926f885d560b2697a324981e4204d3da4e0f9604d4a468eeba1 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.73": + version: 1.5.84 + resolution: "electron-to-chromium@npm:1.5.84" + checksum: 10c0/8362d556360eba420ea3475a7878c8fa8507a42c4ebfbf44108f6acc4edbe30a1cde79e95613bdc9ae6e7d73bf1776347cf7f615c1a220f63e34a0fa029568e0 + languageName: node + linkType: hard + +"email-templates@npm:^2.7.1": + version: 2.7.1 + resolution: "email-templates@npm:2.7.1" + dependencies: + bluebird: "npm:^3.0.0" + consolidate: "npm:^0.14.2" + debug: "npm:^2.2.0" + glob: "npm:^6.0.0" + juice: "npm:^4.1.0" + lodash: "npm:^4.0.1" + checksum: 10c0/dad652679e8da4ae47a86fa8d7bcd708fab4aa866b4a397605b7f55a437d2cf8b3b05d9dc4a04d39d2773364d09fe17e092b1e9b3673eb8c1f9d97735b4607d0 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.15.0": + version: 5.18.0 + resolution: "enhanced-resolve@npm:5.18.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/5fcc264a6040754ab5b349628cac2bb5f89cee475cbe340804e657a5b9565f70e6aafb338d5895554eb0ced9f66c50f38a255274a0591dcb64ee17c549c459ce + languageName: node + linkType: hard + +"enquirer@npm:~2.3.6": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: "npm:^4.1.1" + checksum: 10c0/8e070e052c2c64326a2803db9084d21c8aaa8c688327f133bf65c4a712586beb126fd98c8a01cfb0433e82a4bd3b6262705c55a63e0f7fb91d06b9cedbde9a11 + languageName: node + linkType: hard + +"entities@npm:1.0": + version: 1.0.0 + resolution: "entities@npm:1.0.0" + checksum: 10c0/fd382add860bab507c942a054ef98445028bf988d16f53cbae24c70533c280d4ea116a5bc6308f6ca66901818faf4f495316f9873c6337af7cffaaf3859da407 + languageName: node + linkType: hard + +"entities@npm:^1.1.1, entities@npm:~1.1.1": + version: 1.1.2 + resolution: "entities@npm:1.1.2" + checksum: 10c0/5b12fa8c4fb942f88af6f8791bbe7be0a59ebd91c8933cee091d94455efd1eeb200418c7b1bc8dd0f74cdd4db8cf4538eb043db14cfd1919130c25d8c6095215 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 + languageName: node + linkType: hard + +"entities@npm:^3.0.1": + version: 3.0.1 + resolution: "entities@npm:3.0.1" + checksum: 10c0/2d93f48fd86de0b0ed8ee34456aa47b4e74a916a5e663cfcc7048302e2c7e932002926daf5a00ad6d5691e3c90673a15d413704d86d7e1b9532f9bc00d975590 + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"envinfo@npm:7.13.0": + version: 7.13.0 + resolution: "envinfo@npm:7.13.0" + bin: + envinfo: dist/cli.js + checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9": + version: 1.23.9 + resolution: "es-abstract@npm:1.23.9" + dependencies: + array-buffer-byte-length: "npm:^1.0.2" + arraybuffer.prototype.slice: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + data-view-buffer: "npm:^1.0.2" + data-view-byte-length: "npm:^1.0.2" + data-view-byte-offset: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.1.0" + es-to-primitive: "npm:^1.3.0" + function.prototype.name: "npm:^1.1.8" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.0" + get-symbol-description: "npm:^1.1.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.1.0" + is-array-buffer: "npm:^3.0.5" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.2" + is-regex: "npm:^1.2.1" + is-shared-array-buffer: "npm:^1.0.4" + is-string: "npm:^1.1.1" + is-typed-array: "npm:^1.1.15" + is-weakref: "npm:^1.1.0" + math-intrinsics: "npm:^1.1.0" + object-inspect: "npm:^1.13.3" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.7" + own-keys: "npm:^1.0.1" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.3" + safe-push-apply: "npm:^1.0.0" + safe-regex-test: "npm:^1.1.0" + set-proto: "npm:^1.0.0" + string.prototype.trim: "npm:^1.2.10" + string.prototype.trimend: "npm:^1.0.9" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.3" + typed-array-byte-length: "npm:^1.0.3" + typed-array-byte-offset: "npm:^1.0.4" + typed-array-length: "npm:^1.0.7" + unbox-primitive: "npm:^1.1.0" + which-typed-array: "npm:^1.1.18" + checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b + languageName: node + linkType: hard + +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 10c0/4b7617d3fbd460d6f051f684ceca6cf7e88e6724671d9480388d3ecdd72119ddaa46ca31f2c69c5426a82e4b3091c1e81867c71dcdc453565cd90005ff2c382d + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.0.0, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.5.3": + version: 1.6.0 + resolution: "es-module-lexer@npm:1.6.0" + checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" + dependencies: + is-callable: "npm:^1.2.7" + is-date-object: "npm:^1.0.5" + is-symbol: "npm:^1.0.4" + checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b + languageName: node + linkType: hard + +"es6-error@npm:^4.1.1": + version: 4.1.1 + resolution: "es6-error@npm:4.1.1" + checksum: 10c0/357663fb1e845c047d548c3d30f86e005db71e122678f4184ced0693f634688c3f3ef2d7de7d4af732f734de01f528b05954e270f06aa7d133679fb9fe6600ef + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-config-airbnb-base@npm:^15.0.0": + version: 15.0.0 + resolution: "eslint-config-airbnb-base@npm:15.0.0" + dependencies: + confusing-browser-globals: "npm:^1.0.10" + object.assign: "npm:^4.1.2" + object.entries: "npm:^1.1.5" + semver: "npm:^6.3.0" + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f + languageName: node + linkType: hard + +"eslint-config-airbnb@npm:^19.0.4": + version: 19.0.4 + resolution: "eslint-config-airbnb@npm:19.0.4" + dependencies: + eslint-config-airbnb-base: "npm:^15.0.0" + object.assign: "npm:^4.1.2" + object.entries: "npm:^1.1.5" + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + checksum: 10c0/867feeda45c4b480b1b8eff8fabc1bb107e837da8b48e5039e0c175ae6ad34af383b1924fc163bbfcef24a324e6651b1515e5bd12cbcbb19535a8838e2544a02 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^9.1.0": + version: 9.1.0 + resolution: "eslint-config-prettier@npm:9.1.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: "npm:^3.2.7" + is-core-module: "npm:^2.13.0" + resolve: "npm:^1.22.4" + checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 + languageName: node + linkType: hard + +"eslint-import-resolver-typescript@npm:^3.6.1": + version: 3.7.0 + resolution: "eslint-import-resolver-typescript@npm:3.7.0" + dependencies: + "@nolyfill/is-core-module": "npm:1.0.39" + debug: "npm:^4.3.7" + enhanced-resolve: "npm:^5.15.0" + fast-glob: "npm:^3.3.2" + get-tsconfig: "npm:^4.7.5" + is-bun-module: "npm:^1.0.2" + is-glob: "npm:^4.0.3" + stable-hash: "npm:^0.0.4" + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + eslint-plugin-import-x: "*" + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + checksum: 10c0/b1dec542a31486b3b5730f71f08a8ee2ac4915dbc4aa1493fd15bc8fcadcb029772ab39a425824c235045b3a7e629290a339d4a7e7f3dd32b24e715106352d40 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.12.0": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 + languageName: node + linkType: hard + +"eslint-plugin-es@npm:^3.0.0": + version: 3.0.1 + resolution: "eslint-plugin-es@npm:3.0.1" + dependencies: + eslint-utils: "npm:^2.0.0" + regexpp: "npm:^3.0.0" + peerDependencies: + eslint: ">=4.19.1" + checksum: 10c0/12ae730aa9603e680af048e1653aac15e529411b68b8d0da6e290700b17c695485af7c3f5360f531f80970786cab7288c2c1d4a58c35ec1bb89649897c016c4a + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.29.1": + version: 2.31.0 + resolution: "eslint-plugin-import@npm:2.31.0" + dependencies: + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.8" + array.prototype.findlastindex: "npm:^1.2.5" + array.prototype.flat: "npm:^1.3.2" + array.prototype.flatmap: "npm:^1.3.2" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.12.0" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.15.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.0" + semver: "npm:^6.3.1" + string.prototype.trimend: "npm:^1.0.8" + tsconfig-paths: "npm:^3.15.0" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^27.9.0": + version: 27.9.0 + resolution: "eslint-plugin-jest@npm:27.9.0" + dependencies: + "@typescript-eslint/utils": "npm:^5.10.0" + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: "*" + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 10c0/b8b09f7d8ba3d84a8779a6e95702a6e4dce45ab034e4edf5ddb631e77cd38dcdf791dfd9228e0a0d1d80d1eb2d278deb62ad2ec39f10fb8fd43cec07304e0c38 + languageName: node + linkType: hard + +"eslint-plugin-jsdoc@npm:^48.2.1": + version: 48.11.0 + resolution: "eslint-plugin-jsdoc@npm:48.11.0" + dependencies: + "@es-joy/jsdoccomment": "npm:~0.46.0" + are-docs-informative: "npm:^0.0.2" + comment-parser: "npm:1.4.1" + debug: "npm:^4.3.5" + escape-string-regexp: "npm:^4.0.0" + espree: "npm:^10.1.0" + esquery: "npm:^1.6.0" + parse-imports: "npm:^2.1.1" + semver: "npm:^7.6.3" + spdx-expression-parse: "npm:^4.0.0" + synckit: "npm:^0.9.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 10c0/f78bac109e62f838c14f90ebd572a06a865f2896a16201c9324cb92be25b5ba8deb54ee1d8ea36232ee53a41c177d5d5ac80662c0fe2479d1e1e1e7633385659 + languageName: node + linkType: hard + +"eslint-plugin-node@npm:^11.1.0": + version: 11.1.0 + resolution: "eslint-plugin-node@npm:11.1.0" + dependencies: + eslint-plugin-es: "npm:^3.0.0" + eslint-utils: "npm:^2.0.0" + ignore: "npm:^5.1.1" + minimatch: "npm:^3.0.4" + resolve: "npm:^1.10.1" + semver: "npm:^6.1.0" + peerDependencies: + eslint: ">=5.16.0" + checksum: 10c0/c7716adac4020cb852fd2410dcd8bdb13a227004de77f96d7f9806d0cf2274f24e0920a7ca73bcd72d90003696c1f17fdd9fe3ca218e64ee03dc2b840e4416fa + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.1.3": + version: 5.2.3 + resolution: "eslint-plugin-prettier@npm:5.2.3" + dependencies: + prettier-linter-helpers: "npm:^1.0.0" + synckit: "npm:^0.9.1" + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: "*" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 10c0/60d9c03491ec6080ac1d71d0bee1361539ff6beb9b91ac98cfa7176c9ed52b7dbe7119ebee5b441b479d447d17d802a4a492ee06095ef2f22c460e3dd6459302 + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-utils@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: "npm:^1.1.0" + checksum: 10c0/69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.1.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 + languageName: node + linkType: hard + +"eslint@npm:^8.2.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + languageName: node + linkType: hard + +"espree@npm:^10.1.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" + dependencies: + acorn: "npm:^8.14.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2, esquery@npm:^1.6.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"etag@npm:^1.8.1, etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + +"eventemitter2@npm:^6.4.9": + version: 6.4.9 + resolution: "eventemitter2@npm:6.4.9" + checksum: 10c0/b2adf7d9f1544aa2d95ee271b0621acaf1e309d85ebcef1244fb0ebc7ab0afa6ffd5e371535d0981bc46195ad67fd6ff57a8d1db030584dee69aa5e371a27ea7 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"execa@npm:5.0.0": + version: 5.0.0 + resolution: "execa@npm:5.0.0" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/e110add7ca0de63aea415385ebad7236c8de281d5d9a916dbd69f59009dac3d5d631e6252c2ea5d0258220b0d22acf25649b2caf05fa162eaa1401339fc69ba4 + languageName: node + linkType: hard + +"execa@npm:^5.1.1": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + +"exit-x@npm:^0.2.2": + version: 0.2.2 + resolution: "exit-x@npm:0.2.2" + checksum: 10c0/212a7a095ca5540e9581f1ef2d1d6a40df7a6027c8cc96e78ce1d16b86d1a88326d4a0eff8dff2b5ec1e68bb0c1edd5d0dfdde87df1869bf7514d4bc6a5cbd72 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"expect-type@npm:^1.2.2": + version: 1.2.2 + resolution: "expect-type@npm:1.2.2" + checksum: 10c0/6019019566063bbc7a690d9281d920b1a91284a4a093c2d55d71ffade5ac890cf37a51e1da4602546c4b56569d2ad2fc175a2ccee77d1ae06cb3af91ef84f44b + languageName: node + linkType: hard + +"expect@npm:30.0.5, expect@npm:^30.0.0": + version: 30.0.5 + resolution: "expect@npm:30.0.5" + dependencies: + "@jest/expect-utils": "npm:30.0.5" + "@jest/get-type": "npm:30.0.1" + jest-matcher-utils: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-mock: "npm:30.0.5" + jest-util: "npm:30.0.5" + checksum: 10c0/e08e4ced2856a0898b3a4e8d09aab7f8e2212cde701e41a560c3ab7e9053517947ff1a762fc425dbe0c48ed54e131aa7190de67a402f98b4e5ada23eb21c0a9f + languageName: node + linkType: hard + +"expo-server-sdk@npm:^3.4.0": + version: 3.13.0 + resolution: "expo-server-sdk@npm:3.13.0" + dependencies: + node-fetch: "npm:^2.6.0" + promise-limit: "npm:^2.7.0" + promise-retry: "npm:^2.0.1" + checksum: 10c0/08fbebd2d6a38ff9af37c9dc0a3d9a33c16dff6908078716cd887fbf8d08d50167d9fa4ec7713e452935c6ede8f29233d533b166e91118eb0db56280282645f4 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"express-session@npm:^1.17.0": + version: 1.18.1 + resolution: "express-session@npm:1.18.1" + dependencies: + cookie: "npm:0.7.2" + cookie-signature: "npm:1.0.7" + debug: "npm:2.6.9" + depd: "npm:~2.0.0" + on-headers: "npm:~1.0.2" + parseurl: "npm:~1.3.3" + safe-buffer: "npm:5.2.1" + uid-safe: "npm:~2.1.5" + checksum: 10c0/7999f128df1528430044c97bb1aac95093afaee86c5fa54b2890c4aad9898d79745301f8c90c2df057d6dfe7af7f8ee220340bf5eb53dca5eff37e52cc2fbec7 + languageName: node + linkType: hard + +"extend@npm:^3.0.0, extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fastest-validator@npm:^1.19.0": + version: 1.19.0 + resolution: "fastest-validator@npm:1.19.0" + checksum: 10c0/86dc0620a3cb593378f90017e45c4843a9f40442a1df84ce76cdf68f205dbf45a194aee1ed68d25391ec15ad4b23febf3e4fda9d2f6218e9655cc649beaf0d15 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.18.0 + resolution: "fastq@npm:1.18.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.2": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: "npm:2.1.1" + checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 + languageName: node + linkType: hard + +"fdir@npm:^6.4.4": + version: 6.4.6 + resolution: "fdir@npm:6.4.6" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 + languageName: node + linkType: hard + +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + +"figures@npm:3.2.0, figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + +"filelist@npm:^1.0.4": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: "npm:^5.0.1" + checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^2.0.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: "npm:^2.0.0" + checksum: 10c0/c080875c9fe28eb1962f35cbe83c683796a0321899f1eed31a37577800055539815de13d53495049697d3ba313013344f843bb9401dd337a1b832be5edfc6840 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.6, follow-redirects@npm:^1.5.1": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c + languageName: node + linkType: hard + +"form-data@npm:^2.3.1": + version: 2.5.2 + resolution: "form-data@npm:2.5.2" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.6" + mime-types: "npm:^2.1.12" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/af7cb13fc8423ff95fd59c62d101c84b5458a73e1e426b0bc459afbf5b93b1e447dc6c225ac31c6df59f36b209904a3f1a10b4eb9e7a17e0fe394019749142cc + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 + languageName: node + linkType: hard + +"form-data@npm:^4.0.4": + version: 4.0.4 + resolution: "form-data@npm:4.0.4" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 + languageName: node + linkType: hard + +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.6" + mime-types: "npm:^2.1.12" + checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + +"formidable@npm:^1.2.0": + version: 1.2.6 + resolution: "formidable@npm:1.2.6" + checksum: 10c0/9ebc45f434785051d4ecab28be3356c7a172a112119f5dd7aafc393ab7f6a6f3baa2446e5215ce21bf094c4c24dfb4bf483117d07961862e04ad11a25b9b577b + languageName: node + linkType: hard + +"fresh@npm:0.5.2, fresh@npm:^0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + +"front-matter@npm:^4.0.2": + version: 4.0.2 + resolution: "front-matter@npm:4.0.2" + dependencies: + js-yaml: "npm:^3.13.1" + checksum: 10c0/7a0df5ca37428dd563c057bc17a8940481fe53876609bcdc443a02ce463c70f1842c7cb4628b80916de46a253732794b36fb6a31105db0f185698a93acee4011 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-extra@npm:^10.0.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.1": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + functions-have-names: "npm:^1.2.3" + hasown: "npm:^2.0.2" + is-callable: "npm:^1.2.7" + checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + +"gauge@npm:^3.0.0": + version: 3.0.2 + resolution: "gauge@npm:3.0.2" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.2" + console-control-strings: "npm:^1.0.0" + has-unicode: "npm:^2.0.1" + object-assign: "npm:^4.1.1" + signal-exit: "npm:^3.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.2" + checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7": + version: 1.2.7 + resolution: "get-intrinsic@npm:1.2.7" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.0" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be + languageName: node + linkType: hard + +"get-pkg-repo@npm:^4.2.1": + version: 4.2.1 + resolution: "get-pkg-repo@npm:4.2.1" + dependencies: + "@hutson/parse-repository-url": "npm:^3.0.0" + hosted-git-info: "npm:^4.0.0" + through2: "npm:^2.0.0" + yargs: "npm:^16.2.0" + bin: + get-pkg-repo: src/cli.js + checksum: 10c0/1338d2e048a594da4a34e7dd69d909376d72784f5ba50963a242b4b35db77533786f618b3f6a9effdee2af20af4917a3b7cf12533b4575d7f9c163886be1fb62 + languageName: node + linkType: hard + +"get-port@npm:5.1.1, get-port@npm:^5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 10c0/2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c + languageName: node + linkType: hard + +"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"get-stdin@npm:^7.0.0": + version: 7.0.0 + resolution: "get-stdin@npm:7.0.0" + checksum: 10c0/84d7850d17727f14d582670c4222b167317da43b296b88717abca989b6192eb80f66ca62833d63e749b3c984f3f9113cb6794dc9ecccb29969b8162565162033 + languageName: node + linkType: hard + +"get-stream@npm:6.0.0": + version: 6.0.0 + resolution: "get-stream@npm:6.0.0" + checksum: 10c0/7cd835cb9180041e7be2cc3de236e5db9f2144515921aeb60ae78d3a46f9944439d654c2aae5b0191e41eb6e2500f0237494a2e6c0790367183f788d1c9f6dd6 + languageName: node + linkType: hard + +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.5": + version: 4.9.0 + resolution: "get-tsconfig@npm:4.9.0" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/b1b83a2f65aa589cd99036c21de928bea7424be6575a2736cb4de5fb5760c874d64ac69809f4691c1262a4e3c72c646fd2cb758e406acbff7f37ee86301943ee + languageName: node + linkType: hard + +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f + languageName: node + linkType: hard + +"git-raw-commits@npm:^3.0.0": + version: 3.0.0 + resolution: "git-raw-commits@npm:3.0.0" + dependencies: + dargs: "npm:^7.0.0" + meow: "npm:^8.1.2" + split2: "npm:^3.2.2" + bin: + git-raw-commits: cli.js + checksum: 10c0/2a5db2e4b5b1ef7b6ecbdc175e559920a5400cbdb8d36f130aaef3588bfd74d8650b354a51ff89e0929eadbb265a00078a6291ff26248a525f0b2f079b001bf6 + languageName: node + linkType: hard + +"git-remote-origin-url@npm:^2.0.0": + version: 2.0.0 + resolution: "git-remote-origin-url@npm:2.0.0" + dependencies: + gitconfiglocal: "npm:^1.0.0" + pify: "npm:^2.3.0" + checksum: 10c0/3a846ce98ed36b2d0b801e8ec1ab299a236cfc6fa264bfdf9f42301abfdfd8715c946507fd83a10b9db449eb609ac6f8a2a341daf52e3af0000367487f486355 + languageName: node + linkType: hard + +"git-semver-tags@npm:^5.0.0": + version: 5.0.1 + resolution: "git-semver-tags@npm:5.0.1" + dependencies: + meow: "npm:^8.1.2" + semver: "npm:^7.0.0" + bin: + git-semver-tags: cli.js + checksum: 10c0/7cacba2f4ac19c0ccb8e6bb7301409376e5a2cc178692667afff453e6fe81f79b5f3f5040343e2be127a2f34977528d354de2aa32430917e90b64884debd3102 + languageName: node + linkType: hard + +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" + dependencies: + is-ssh: "npm:^1.4.0" + parse-url: "npm:^8.1.0" + checksum: 10c0/a3fa02e1a63c7c824b5ebbf23f4a9a6b34dd80031114c5dd8adb7ef53493642e39d3d80dfef4025a452128400c35c2c138d20a0f6ae5d7d7ef70d9ba13083d34 + languageName: node + linkType: hard + +"git-url-parse@npm:14.0.0": + version: 14.0.0 + resolution: "git-url-parse@npm:14.0.0" + dependencies: + git-up: "npm:^7.0.0" + checksum: 10c0/d360cf23c6278e302b74603f3dc490c3fe22e533d58b7f35e0295fad9af209ce5046a55950ccbf2f0d18de7931faefb4353e3f3fd3dda87fce77b409d48e0ba9 + languageName: node + linkType: hard + +"gitconfiglocal@npm:^1.0.0": + version: 1.0.0 + resolution: "gitconfiglocal@npm:1.0.0" + dependencies: + ini: "npm:^1.3.2" + checksum: 10c0/cfcb16344834113199f209f2758ced778dc30e075ddb49b5dde659b4dd2deadee824db0a1b77e1303cb594d9e8b2240da18c67705f657aa76affb444aa349005 + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:7.1.4": + version: 7.1.4 + resolution: "glob@npm:7.1.4" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.0.4" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/7f6fcbf600eb2298cce34c65f6d8bbe6933ddd4f88aa5b38a9c6feec82b615bb33b63b120725303e89c4b50284413c21d2ff883414717a5c7d0c9f7cd7a0e5fe + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^6.0.0": + version: 6.0.4 + resolution: "glob@npm:6.0.4" + dependencies: + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:2 || 3" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/520146ebce0f4594b8357338f86281b38ee14214debce398a2902176a28f18e0f98911ea48516d85022de64fbbaa57f074aa13715d1daa5d70e21b82cea22183 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"glob@npm:^9.2.0": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: "npm:^1.0.0" + minimatch: "npm:^8.0.2" + minipass: "npm:^4.2.4" + path-scurry: "npm:^1.6.1" + checksum: 10c0/2f6c2b9ee019ee21dc258ae97a88719614591e4c979cb4580b1b9df6f0f778a3cb38b4bdaf18dfa584637ea10f89a3c5f2533a5e449cf8741514ad18b0951f2e + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"globby@npm:11.1.0, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"google-libphonenumber@npm:^3.2.26": + version: 3.2.40 + resolution: "google-libphonenumber@npm:3.2.40" + checksum: 10c0/997857e0dfdd39b169171cfee72ba268e9b0f9c655317701e21f61b2725d48384df3b2dea6977b49fb47efbde319fd71a1f2ec46589e91ab832ada9f54793cff + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"got@npm:^11.8.0": + version: 11.8.6 + resolution: "got@npm:11.8.6" + dependencies: + "@sindresorhus/is": "npm:^4.0.0" + "@szmarczak/http-timer": "npm:^4.0.5" + "@types/cacheable-request": "npm:^6.0.1" + "@types/responselike": "npm:^1.0.0" + cacheable-lookup: "npm:^5.0.3" + cacheable-request: "npm:^7.0.2" + decompress-response: "npm:^6.0.0" + http2-wrapper: "npm:^1.0.0-beta.5.2" + lowercase-keys: "npm:^2.0.0" + p-cancelable: "npm:^2.0.0" + responselike: "npm:^2.0.0" + checksum: 10c0/754dd44877e5cf6183f1e989ff01c648d9a4719e357457bd4c78943911168881f1cfb7b2cb15d885e2105b3ad313adb8f017a67265dd7ade771afdb261ee8cb1 + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.2" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d + languageName: node + linkType: hard + +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: "npm:^6.12.3" + har-schema: "npm:^2.0.0" + checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 10c0/febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: "npm:^1.0.0" + checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c + languageName: node + linkType: hard + +"hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"he@npm:^1.0.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: "npm:^6.0.0" + checksum: 10c0/150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 + languageName: node + linkType: hard + +"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + +"html-to-text@npm:^2.1.0": + version: 2.1.3 + resolution: "html-to-text@npm:2.1.3" + dependencies: + he: "npm:^1.0.0" + htmlparser: "npm:^1.7.7" + optimist: "npm:^0.6.1" + underscore: "npm:^1.8.3" + underscore.string: "npm:^3.2.3" + bin: + html-to-text: ./bin/cli.js + checksum: 10c0/bd37935b7370b8fb294efb96af1517f8554285349fa376d6e8b77ed3db6a1300dd30c0513d99a1640b9ba9758bf18c8d2b68f60abdfc4481872748dffe4b06fa + languageName: node + linkType: hard + +"htmlparser2@npm:^3.9.1": + version: 3.10.1 + resolution: "htmlparser2@npm:3.10.1" + dependencies: + domelementtype: "npm:^1.3.1" + domhandler: "npm:^2.3.0" + domutils: "npm:^1.5.1" + entities: "npm:^1.1.1" + inherits: "npm:^2.0.1" + readable-stream: "npm:^3.1.1" + checksum: 10c0/b1424536ff062088501efa06a2afd478545d3134a5ad2e28bbe02dc2d092784982286b90f1c87fa3d86692958dbfb8936352dfd71d1cb2ff7cb61208c00fcdb1 + languageName: node + linkType: hard + +"htmlparser2@npm:^4.0.0": + version: 4.1.0 + resolution: "htmlparser2@npm:4.1.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^3.0.0" + domutils: "npm:^2.0.0" + entities: "npm:^2.0.0" + checksum: 10c0/a2d8d12ba45534a657d1965b71d4d581e521d14b7fc966ef031722cdd3895a23ce769fed63024e796538b3fc370e894b3a2f5b5071e54120905a6111cd3f88b0 + languageName: node + linkType: hard + +"htmlparser2@npm:^6.0.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.0.0" + domutils: "npm:^2.5.2" + entities: "npm:^2.0.0" + checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 + languageName: node + linkType: hard + +"htmlparser2@npm:^7.0.0": + version: 7.2.0 + resolution: "htmlparser2@npm:7.2.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.2" + domutils: "npm:^2.8.0" + entities: "npm:^3.0.1" + checksum: 10c0/7e1fa7f3b2635f2a1c5272765e25aab33b241d84a43e9d27f28a0b7166b51a8025dec40a6a29af38d6a698a2f1d2983cb43e5c61d4e07ec5aa9df672a7460e16 + languageName: node + linkType: hard + +"htmlparser2@npm:^8.0.0": + version: 8.0.2 + resolution: "htmlparser2@npm:8.0.2" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.0.1" + entities: "npm:^4.4.0" + checksum: 10c0/609cca85886d0bf2c9a5db8c6926a89f3764596877492e2caa7a25a789af4065bc6ee2cdc81807fe6b1d03a87bf8a373b5a754528a4cc05146b713c20575aab4 + languageName: node + linkType: hard + +"htmlparser2@npm:~3.8.1": + version: 3.8.3 + resolution: "htmlparser2@npm:3.8.3" + dependencies: + domelementtype: "npm:1" + domhandler: "npm:2.3" + domutils: "npm:1.5" + entities: "npm:1.0" + readable-stream: "npm:1.1" + checksum: 10c0/253a673976c1e2c2b8429e45830a5a89c3f23bb6dd34f5958aefbb104a8caf1268515b535277714deb034d894aa0bd315e901cbf2ec906e8ed0d1e49b2d73b3e + languageName: node + linkType: hard + +"htmlparser@npm:^1.7.7": + version: 1.7.7 + resolution: "htmlparser@npm:1.7.7" + checksum: 10c0/b4ef1d2031f1370f274f646f824da10c8d946e671001d92878a4db77332abe84541667728063bb374a2742659b9549fd7d2e7ecdf71605ff016ef18b328becf5 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + +"http-link-header@npm:^1.0.2, http-link-header@npm:^1.1.1": + version: 1.1.3 + resolution: "http-link-header@npm:1.1.3" + checksum: 10c0/56698a9d3aee4d5319d1cdfe62ef5d7179f179ec1e6432d23c9e6a0c896be642ba47a4985a45419cff91008032aef920aca9df94ff9e763e646c83bf54b7243d + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"http-signature-header@npm:^1.3.1": + version: 1.3.1 + resolution: "http-signature-header@npm:1.3.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/c44fb0129322c3a7825f589c82fa37d546a0cdc9d06052545208d8c0edda240aa4888e07d667d5c221e94bd583d016250829c8a510114da0d3643185ec8236b5 + languageName: node + linkType: hard + +"http-signature@npm:^1.3.4": + version: 1.4.0 + resolution: "http-signature@npm:1.4.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^2.0.2" + sshpk: "npm:^1.18.0" + checksum: 10c0/b9806f5a9ed82a146589837d175c43b596b1cc8c9431665e83d47c152aa8a4629dd1b1e050f8f56e7f17f62cf97b58e888775093310441ddee5f105f28646b2b + languageName: node + linkType: hard + +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^1.2.2" + sshpk: "npm:^1.7.0" + checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 + languageName: node + linkType: hard + +"http2-wrapper@npm:^1.0.0-beta.5.2": + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.0.0" + checksum: 10c0/6a9b72a033e9812e1476b9d776ce2f387bc94bc46c88aea0d5dab6bd47d0a539b8178830e77054dd26d1142c866d515a28a4dc7c3ff4232c88ff2ebe4f5d12d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-walk@npm:^6.0.4": + version: 6.0.5 + resolution: "ignore-walk@npm:6.0.5" + dependencies: + minimatch: "npm:^9.0.0" + checksum: 10c0/8bd6d37c82400016c7b6538b03422dde8c9d7d3e99051c8357dd205d499d42828522fb4fbce219c9c21b4b069079445bacdc42bbd3e2e073b52856c2646d8a39 + languageName: node + linkType: hard + +"ignore@npm:^5.0.4, ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.3.1": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"image-size@npm:^0.7.3": + version: 0.7.5 + resolution: "image-size@npm:0.7.5" + bin: + image-size: bin/image-size.js + checksum: 10c0/74e978c525e7d777df145bc66cfc4a4a7aa56de8e5daead3a69b0872082dbe385deb4a3b80799810df9e34b2031467412ae28810f2f65ec2e5fe08b895aa3491 + languageName: node + linkType: hard + +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: 10c0/f8ba7ede69bee9260241ad078d2d535848745ff5f6995c7c7cb41cfdc9ccc213f66e10fa5afb881f90298b24a3f7344b637b592beb4f54e582770cdce3f1f039 + languageName: node + linkType: hard + +"immutable@npm:^3.8.2": + version: 3.8.2 + resolution: "immutable@npm:3.8.2" + checksum: 10c0/fb6a2999ad3bda9e51741721e42547076dd492635ee4df9241224055fe953ec843583a700088cc4915f23dc326e5084f4e17f1bbd7388c3e872ef5a242e0ac5e + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"import-local@npm:3.1.0": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + languageName: node + linkType: hard + +"import-local@npm:^3.2.0": + version: 3.2.0 + resolution: "import-local@npm:3.2.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:^1.3.2, ini@npm:^1.3.8, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 + languageName: node + linkType: hard + +"init-package-json@npm:6.0.3": + version: 6.0.3 + resolution: "init-package-json@npm:6.0.3" + dependencies: + "@npmcli/package-json": "npm:^5.0.0" + npm-package-arg: "npm:^11.0.0" + promzard: "npm:^1.0.0" + read: "npm:^3.0.1" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/a80f024ee041a2cf4d3062ba936abf015cbc32bda625cabe994d1fa4bd942bb9af37a481afd6880d340d3e94d90bf97bed1a0a877cc8c7c9b48e723c2524ae74 + languageName: node + linkType: hard + +"inquirer@npm:^8.2.4": + version: 8.2.6 + resolution: "inquirer@npm:8.2.6" + dependencies: + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.1.1" + cli-cursor: "npm:^3.1.0" + cli-width: "npm:^3.0.0" + external-editor: "npm:^3.0.3" + figures: "npm:^3.0.0" + lodash: "npm:^4.17.21" + mute-stream: "npm:0.0.8" + ora: "npm:^5.4.1" + run-async: "npm:^2.4.0" + rxjs: "npm:^7.5.5" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + through: "npm:^2.3.6" + wrap-ansi: "npm:^6.0.1" + checksum: 10c0/eb5724de1778265323f3a68c80acfa899378cb43c24cdcb58661386500e5696b6b0b6c700e046b7aa767fe7b4823c6f04e6ddc268173e3f84116112529016296 + languageName: node + linkType: hard + +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 + languageName: node + linkType: hard + +"ioredis@npm:^4.27.0": + version: 4.28.5 + resolution: "ioredis@npm:4.28.5" + dependencies: + cluster-key-slot: "npm:^1.1.0" + debug: "npm:^4.3.1" + denque: "npm:^1.1.0" + lodash.defaults: "npm:^4.2.0" + lodash.flatten: "npm:^4.4.0" + lodash.isarguments: "npm:^3.1.0" + p-map: "npm:^2.1.0" + redis-commands: "npm:1.7.0" + redis-errors: "npm:^1.2.0" + redis-parser: "npm:^3.0.0" + standard-as-callback: "npm:^2.1.0" + checksum: 10c0/6fd12957d2906f83d8aa662ba78d084df16dc7c1a0e6e18c512302ac94339dcd5936d2e7cd6f89e9e7b511e3cf96617ca2fdea63aa4679bfdf48aa2be441ad76 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.2.0": + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.1.0 + resolution: "is-async-function@npm:2.1.0" + dependencies: + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/5209b858c6d18d88a9fb56dea202a050d53d4b722448cc439fdca859b36e23edf27ee8c18958ba49330f1a71b8846576273f4581e1c0bb9d403738129d852fdb + languageName: node + linkType: hard + +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" + dependencies: + has-bigints: "npm:^1.0.2" + checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.2.1": + version: 1.2.1 + resolution: "is-boolean-object@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 + languageName: node + linkType: hard + +"is-bun-module@npm:^1.0.2": + version: 1.3.0 + resolution: "is-bun-module@npm:1.3.0" + dependencies: + semver: "npm:^7.6.3" + checksum: 10c0/2966744188fcd28e0123c52158c7073973f88babfa9ab04e2846ec5862d6b0f8f398df6413429d930f7c5ee6111ce2cbfb3eb8652d9ec42d4a37dc5089a866fb + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-ci@npm:3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: "npm:^3.2.0" + bin: + is-ci: bin.js + checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0, is-core-module@npm:^2.5.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc + languageName: node + linkType: hard + +"is-expression@npm:^4.0.0": + version: 4.0.0 + resolution: "is-expression@npm:4.0.0" + dependencies: + acorn: "npm:^7.1.1" + object-assign: "npm:^4.1.1" + checksum: 10c0/541831d39d3e7bfc8cecd966d6b0f3c0e6d9055342f17b634fb23e74f51ce90f1bfc3cf231c722fe003a61e8d4f0b9e07244fdaba57f4fc70a163c74006fd5a0 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": + version: 1.1.0 + resolution: "is-generator-function@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.0" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 10c0/dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc + languageName: node + linkType: hard + +"is-nan@npm:^1.3.0": + version: 1.3.2 + resolution: "is-nan@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.0" + define-properties: "npm:^1.1.3" + checksum: 10c0/8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 + languageName: node + linkType: hard + +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 10c0/daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-promise@npm:^2.0.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 + languageName: node + linkType: hard + +"is-regex@npm:^1.0.3, is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 + languageName: node + linkType: hard + +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": + version: 1.4.0 + resolution: "is-ssh@npm:1.4.0" + dependencies: + protocols: "npm:^2.0.1" + checksum: 10c0/3eb30d1bcb4507cd25562e7ac61a1c0aa31772134c67cec9c3afe6f4d57ec17e8c2892600a608e8e583f32f53f36465b8968c0305f2855cfbff95acfd049e113 + languageName: node + linkType: hard + +"is-stream@npm:2.0.0": + version: 2.0.0 + resolution: "is-stream@npm:2.0.0" + checksum: 10c0/687f6bbd2b995573d33e6b40b2cbc8b9186a751aa3151c23e6fd2c4ca352e323a6dc010b09103f89c9ca0bf5c8c38f3fa8b74d5d9acd1c44f1499874d7e844f9 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-string@npm:^1.0.7, is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: "npm:^1.0.0" + checksum: 10c0/61c8650c29548febb6bf69e9541fc11abbbb087a0568df7bc471ba264e95fb254def4e610631cbab4ddb0a1a07949d06416f4ebeaf37875023fb184cdb87ee84 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: "npm:^1.1.16" + checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 + languageName: node + linkType: hard + +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": + version: 1.1.0 + resolution: "is-weakref@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" + dependencies: + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"isstream@npm:^0.1.2, isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2": + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" + dependencies: + "@babel/core": "npm:^7.23.9" + "@babel/parser": "npm:^7.23.9" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^5.0.0": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.23" + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.9.2 + resolution: "jake@npm:10.9.2" + dependencies: + async: "npm:^3.2.3" + chalk: "npm:^4.0.2" + filelist: "npm:^1.0.4" + minimatch: "npm:^3.1.2" + bin: + jake: bin/cli.js + checksum: 10c0/c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31 + languageName: node + linkType: hard + +"jest-changed-files@npm:30.0.5": + version: 30.0.5 + resolution: "jest-changed-files@npm:30.0.5" + dependencies: + execa: "npm:^5.1.1" + jest-util: "npm:30.0.5" + p-limit: "npm:^3.1.0" + checksum: 10c0/41ce090f324e8450443327f19f772a9c3f225b4b1374ba9704358f0c8b8cd91fd134fa41df7db4d278428ab974c432abc3eca9484e67c8f18528974378fddef6 + languageName: node + linkType: hard + +"jest-circus@npm:30.0.5": + version: 30.0.5 + resolution: "jest-circus@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/expect": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + co: "npm:^4.6.0" + dedent: "npm:^1.6.0" + is-generator-fn: "npm:^2.1.0" + jest-each: "npm:30.0.5" + jest-matcher-utils: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-runtime: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + jest-util: "npm:30.0.5" + p-limit: "npm:^3.1.0" + pretty-format: "npm:30.0.5" + pure-rand: "npm:^7.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + checksum: 10c0/028204897eee7bef2d04eea0216b48f94e3da77ff1d12b0e3a5e265e8e73bcd31192cec70282aa1ece91150c00fcb5662c2c68e86b3892cffbfbe7058fa7f4e5 + languageName: node + linkType: hard + +"jest-cli@npm:30.0.5": + version: 30.0.5 + resolution: "jest-cli@npm:30.0.5" + dependencies: + "@jest/core": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + chalk: "npm:^4.1.2" + exit-x: "npm:^0.2.2" + import-local: "npm:^3.2.0" + jest-config: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + yargs: "npm:^17.7.2" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: ./bin/jest.js + checksum: 10c0/bfcd7212db7825d06afaf01c19bd7168190e22220d300b6db31b3885943a31361e98c4a1bde466146368ad503ae6257a9630bc35b4a43ff0631d7a3f95b63e45 + languageName: node + linkType: hard + +"jest-config@npm:30.0.5": + version: 30.0.5 + resolution: "jest-config@npm:30.0.5" + dependencies: + "@babel/core": "npm:^7.27.4" + "@jest/get-type": "npm:30.0.1" + "@jest/pattern": "npm:30.0.1" + "@jest/test-sequencer": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + babel-jest: "npm:30.0.5" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + deepmerge: "npm:^4.3.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + jest-circus: "npm:30.0.5" + jest-docblock: "npm:30.0.1" + jest-environment-node: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.0.5" + jest-runner: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + micromatch: "npm:^4.0.8" + parse-json: "npm:^5.2.0" + pretty-format: "npm:30.0.5" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + esbuild-register: ">=3.4.0" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + esbuild-register: + optional: true + ts-node: + optional: true + checksum: 10c0/da68048801e6f6622bf6e9a361dcfb3859017bbd58fabcf53bade41157bdf31cc35a1bd3dab1e3cca86e69da23e2c27c7aa5e308efc04564a454e23de6f22062 + languageName: node + linkType: hard + +"jest-diff@npm:30.0.5": + version: 30.0.5 + resolution: "jest-diff@npm:30.0.5" + dependencies: + "@jest/diff-sequences": "npm:30.0.1" + "@jest/get-type": "npm:30.0.1" + chalk: "npm:^4.1.2" + pretty-format: "npm:30.0.5" + checksum: 10c0/b218ced37b7676f578ea866762f04caa74901bdcf3f593872aa9a4991a586302651a1d16bb0386772adacc7580a452ec621359af75d733c0b50ea947fe1881d3 + languageName: node + linkType: hard + +"jest-diff@npm:>=29.4.3 < 30, jest-diff@npm:^29.4.1": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 + languageName: node + linkType: hard + +"jest-docblock@npm:30.0.1": + version: 30.0.1 + resolution: "jest-docblock@npm:30.0.1" + dependencies: + detect-newline: "npm:^3.1.0" + checksum: 10c0/f9bad2651db8afa029867ea7a40f422c9d73c67657360297371846a314a40c8786424be00483261df9137499f52c2af28cd458fbd15a7bf7fac8775b4bcd6ee1 + languageName: node + linkType: hard + +"jest-each@npm:30.0.5": + version: 30.0.5 + resolution: "jest-each@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + "@jest/types": "npm:30.0.5" + chalk: "npm:^4.1.2" + jest-util: "npm:30.0.5" + pretty-format: "npm:30.0.5" + checksum: 10c0/fe7509bfd8b0c8553bbdaffda5d3b674a4da870c5ce9fe69c1ca8111d9e0f21a8f265799eba0f927581d16f4810e5eb5bebfd7e51f5f137cbef08cc44d8fd9cd + languageName: node + linkType: hard + +"jest-environment-node@npm:30.0.5": + version: 30.0.5 + resolution: "jest-environment-node@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/fake-timers": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + jest-mock: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + checksum: 10c0/1b608597f0755814e7c24b9ed2a45abc2340cfd8f8d3691caf929f332facd9c62ac5092e7f01056708a0ca41ae0458b6d442fd1ae9f6d21b7b416b252e1ae210 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b + languageName: node + linkType: hard + +"jest-haste-map@npm:30.0.5": + version: 30.0.5 + resolution: "jest-haste-map@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + anymatch: "npm:^3.1.3" + fb-watchman: "npm:^2.0.2" + fsevents: "npm:^2.3.3" + graceful-fs: "npm:^4.2.11" + jest-regex-util: "npm:30.0.1" + jest-util: "npm:30.0.5" + jest-worker: "npm:30.0.5" + micromatch: "npm:^4.0.8" + walker: "npm:^1.0.8" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/eab5d85d820f149bcf4bf4e0c49316f48973c85d39b4c3a2e08f57504f069afe9b0f1665e556330a98c6fc6bd5a6932767b466c1c96124fa0161aef017ab17b3 + languageName: node + linkType: hard + +"jest-leak-detector@npm:30.0.5": + version: 30.0.5 + resolution: "jest-leak-detector@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + pretty-format: "npm:30.0.5" + checksum: 10c0/04207ab6f44dec22d3d656b5f3b4f334440f4c01ccd21c55474f26706530244d34b8dc9922c9449e00e8649e5da1b8de4aca58c9895c9de19951d5ecdc0ff113 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:30.0.5": + version: 30.0.5 + resolution: "jest-matcher-utils@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + chalk: "npm:^4.1.2" + jest-diff: "npm:30.0.5" + pretty-format: "npm:30.0.5" + checksum: 10c0/231d891b29bfc218f2f5739c10873b6671426e31ad1c5538eed1531e62608fd3f60d32f41821332a6cf41f1614fd37361434c754fdd49c849b35ef2e5156c02e + languageName: node + linkType: hard + +"jest-message-util@npm:30.0.5": + version: 30.0.5 + resolution: "jest-message-util@npm:30.0.5" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@jest/types": "npm:30.0.5" + "@types/stack-utils": "npm:^2.0.3" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + micromatch: "npm:^4.0.8" + pretty-format: "npm:30.0.5" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + checksum: 10c0/38b710c127db6c79c36d690377d9f9f1e3c2e4b2d2e60f3b82a5b4da70efb1f4783c6cf0cf1f6be6e3b7fb2d2aed889583d2430f65afc09e7e6d68aa5fa981dc + languageName: node + linkType: hard + +"jest-mock@npm:30.0.5": + version: 30.0.5 + resolution: "jest-mock@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + jest-util: "npm:30.0.5" + checksum: 10c0/207fd79297f514a8e26ede9b4b5035e70212b8850a2f460b51d3cc58e8e7c9585bd2dbc5df2475a3321c4cd114b90e0b24190f00d6eeb88c8f088a8ed00416d5 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.3": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac + languageName: node + linkType: hard + +"jest-regex-util@npm:30.0.1": + version: 30.0.1 + resolution: "jest-regex-util@npm:30.0.1" + checksum: 10c0/f30c70524ebde2d1012afe5ffa5691d5d00f7d5ba9e43d588f6460ac6fe96f9e620f2f9b36a02d0d3e7e77bc8efb8b3450ae3b80ac53c8be5099e01bf54f6728 + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:30.0.5": + version: 30.0.5 + resolution: "jest-resolve-dependencies@npm:30.0.5" + dependencies: + jest-regex-util: "npm:30.0.1" + jest-snapshot: "npm:30.0.5" + checksum: 10c0/7c72ef30d2e2e5c9564c53f55679184a4fe460f4d5c48eb5edc476000f17ee392341ae0c21b3ce9e531a1bff00924ebcda4fcd5b1406071c6a7b2b109fd3cf33 + languageName: node + linkType: hard + +"jest-resolve@npm:30.0.5": + version: 30.0.5 + resolution: "jest-resolve@npm:30.0.5" + dependencies: + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + jest-pnp-resolver: "npm:^1.2.3" + jest-util: "npm:30.0.5" + jest-validate: "npm:30.0.5" + slash: "npm:^3.0.0" + unrs-resolver: "npm:^1.7.11" + checksum: 10c0/6edea75db950131513cd642743d4c5dd36c209c94652e469eebc86fdf85eb579a7614c30262668fcd429e1c841f1d17a26831259db69c17dffd0718c37f69196 + languageName: node + linkType: hard + +"jest-runner@npm:30.0.5": + version: 30.0.5 + resolution: "jest-runner@npm:30.0.5" + dependencies: + "@jest/console": "npm:30.0.5" + "@jest/environment": "npm:30.0.5" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + emittery: "npm:^0.13.1" + exit-x: "npm:^0.2.2" + graceful-fs: "npm:^4.2.11" + jest-docblock: "npm:30.0.1" + jest-environment-node: "npm:30.0.5" + jest-haste-map: "npm:30.0.5" + jest-leak-detector: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-resolve: "npm:30.0.5" + jest-runtime: "npm:30.0.5" + jest-util: "npm:30.0.5" + jest-watcher: "npm:30.0.5" + jest-worker: "npm:30.0.5" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 10c0/5da84e4f393cc4b0c2b86a7058c154e524bc91947867f892d252300d06c595058690a61ffdbfa74381498f4ebb9cc7d8d967a62f53cb5f5383ec59fb5ed21d91 + languageName: node + linkType: hard + +"jest-runtime@npm:30.0.5": + version: 30.0.5 + resolution: "jest-runtime@npm:30.0.5" + dependencies: + "@jest/environment": "npm:30.0.5" + "@jest/fake-timers": "npm:30.0.5" + "@jest/globals": "npm:30.0.5" + "@jest/source-map": "npm:30.0.1" + "@jest/test-result": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + cjs-module-lexer: "npm:^2.1.0" + collect-v8-coverage: "npm:^1.0.2" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-mock: "npm:30.0.5" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.0.5" + jest-snapshot: "npm:30.0.5" + jest-util: "npm:30.0.5" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: 10c0/c1afa36da0582172e9a73d69fcc23fd433efc8a7d0328ba5fee45858dc85cb01410b47ba53540bb3758277eb84bb5a42e872bc58d2e5a3cad533f4b33e3abe61 + languageName: node + linkType: hard + +"jest-snapshot@npm:30.0.5": + version: 30.0.5 + resolution: "jest-snapshot@npm:30.0.5" + dependencies: + "@babel/core": "npm:^7.27.4" + "@babel/generator": "npm:^7.27.5" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + "@babel/types": "npm:^7.27.3" + "@jest/expect-utils": "npm:30.0.5" + "@jest/get-type": "npm:30.0.1" + "@jest/snapshot-utils": "npm:30.0.5" + "@jest/transform": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + babel-preset-current-node-syntax: "npm:^1.1.0" + chalk: "npm:^4.1.2" + expect: "npm:30.0.5" + graceful-fs: "npm:^4.2.11" + jest-diff: "npm:30.0.5" + jest-matcher-utils: "npm:30.0.5" + jest-message-util: "npm:30.0.5" + jest-util: "npm:30.0.5" + pretty-format: "npm:30.0.5" + semver: "npm:^7.7.2" + synckit: "npm:^0.11.8" + checksum: 10c0/2bda246367373003abfbd66de261bfd355618926c28261d7ffcdfac0c4c7a7f575c9f598745b0b59eb2cfa8907889dcc07db3ad65d940061275d490c1eb3e1fe + languageName: node + linkType: hard + +"jest-util@npm:30.0.5": + version: 30.0.5 + resolution: "jest-util@npm:30.0.5" + dependencies: + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + graceful-fs: "npm:^4.2.11" + picomatch: "npm:^4.0.2" + checksum: 10c0/d3808b5f7720044d0464664c795e2b795ed82edf3b5871db74b8b603c3a0a38107668730348d26f92920ca3b8245a99cbbc2c93e77d0abb1f5e27524079a4ba8 + languageName: node + linkType: hard + +"jest-validate@npm:30.0.5": + version: 30.0.5 + resolution: "jest-validate@npm:30.0.5" + dependencies: + "@jest/get-type": "npm:30.0.1" + "@jest/types": "npm:30.0.5" + camelcase: "npm:^6.3.0" + chalk: "npm:^4.1.2" + leven: "npm:^3.1.0" + pretty-format: "npm:30.0.5" + checksum: 10c0/739a5df57befd763ba40693c9c1d7e93234af44ca21226a42272fbf87dea076a23848072b46871ce02cc0f2614f8ad41542e98965b405320276102b4de35b063 + languageName: node + linkType: hard + +"jest-watcher@npm:30.0.5": + version: 30.0.5 + resolution: "jest-watcher@npm:30.0.5" + dependencies: + "@jest/test-result": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + emittery: "npm:^0.13.1" + jest-util: "npm:30.0.5" + string-length: "npm:^4.0.2" + checksum: 10c0/5c26617c53e6314e2143806cbc8c1cdca7100cc8de3241c7debf7b5feb0df17bdc9a92ee4a4efa953a261d8806ffd7f6c89e72d567236e62492dd554eaa91f97 + languageName: node + linkType: hard + +"jest-worker@npm:30.0.5": + version: 30.0.5 + resolution: "jest-worker@npm:30.0.5" + dependencies: + "@types/node": "npm:*" + "@ungap/structured-clone": "npm:^1.3.0" + jest-util: "npm:30.0.5" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.1.1" + checksum: 10c0/50a724b39b8691168a456544f32ef8e937c827cd6d326fa0bc27df786c80af1e1f16d9f2d9cc800af4baac85a0f9e9ed78fbd4a06f13eb32e72ec66d11b85f38 + languageName: node + linkType: hard + +"jest@npm:^30.0.5": + version: 30.0.5 + resolution: "jest@npm:30.0.5" + dependencies: + "@jest/core": "npm:30.0.5" + "@jest/types": "npm:30.0.5" + import-local: "npm:^3.2.0" + jest-cli: "npm:30.0.5" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: ./bin/jest.js + checksum: 10c0/eff3980ebe0257f1d5a0e94b0df27fc689563539138cc9220dadcb57543e30601cea6b79cbd68a5a5bcdc69501a8a670493495cf4b1d2076796697f8a7937d4c + languageName: node + linkType: hard + +"jose@npm:^2.0.5": + version: 2.0.7 + resolution: "jose@npm:2.0.7" + dependencies: + "@panva/asn1.js": "npm:^1.0.0" + checksum: 10c0/228406f4635debd05922fa565a85c42c086426c1af03c4db2ce247d84f240d3f5985efa9540e6c90c89bab56476b1d1a0be2199740d1f497a37b075bbe2307e8 + languageName: node + linkType: hard + +"jose@npm:^5.2.0": + version: 5.9.6 + resolution: "jose@npm:5.9.6" + checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d + languageName: node + linkType: hard + +"js-stringify@npm:^1.0.2": + version: 1.0.2 + resolution: "js-stringify@npm:1.0.2" + checksum: 10c0/a450c04fde3a7e1c27f1c3c4300433f8d79322f9e3c2e76266843cef8c0b5a69b5f11b5f173212b2f15f2df09e068ef7ddf46ef775e2486f3006a6f4e912578d + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 + languageName: node + linkType: hard + +"jsdoc-type-pratt-parser@npm:~4.0.0": + version: 4.0.0 + resolution: "jsdoc-type-pratt-parser@npm:4.0.0" + checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": + version: 3.0.2 + resolution: "json-parse-even-better-errors@npm:3.0.2" + checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 10c0/13673b67ba9e7fde75a103cade0b0d2dd0d21cd3b918de8d8f6cd59d48ad8c78b0e85f6f4a5842073ddfc91ebdde5ef7c81c7f51945b96a33eaddc5d41324b87 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f + languageName: node + linkType: hard + +"json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonc-parser@npm:3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 10c0/5a12d4d04dad381852476872a29dcee03a57439574e4181d91dca71904fcdcc5e8e4706c0a68a2c61ad9810e1e1c5806b5100d52d3e727b78f5cdc595401045b + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"jsonld-context-parser@npm:^2.0.0, jsonld-context-parser@npm:^2.1.2, jsonld-context-parser@npm:^2.1.3, jsonld-context-parser@npm:^2.4.0": + version: 2.4.0 + resolution: "jsonld-context-parser@npm:2.4.0" + dependencies: + "@types/http-link-header": "npm:^1.0.1" + "@types/node": "npm:^18.0.0" + cross-fetch: "npm:^3.0.6" + http-link-header: "npm:^1.0.2" + relative-to-absolute-iri: "npm:^1.0.5" + bin: + jsonld-context-parse: bin/jsonld-context-parse.js + checksum: 10c0/7d27257ac4a18698cf2750798d59f9fb956e13999c91536ceb0d5f2480b2b6b26c7966fe1f60a7d507d381a3bf460d209a3e3a23e2854c4821d010cf36718b21 + languageName: node + linkType: hard + +"jsonld-signatures@npm:^11.2.1, jsonld-signatures@npm:^11.3.0, jsonld-signatures@npm:^11.3.2": + version: 11.5.0 + resolution: "jsonld-signatures@npm:11.5.0" + dependencies: + "@digitalbazaar/security-context": "npm:^1.0.0" + jsonld: "npm:^8.0.0" + rdf-canonize: "npm:^4.0.1" + serialize-error: "npm:^8.1.0" + checksum: 10c0/a624ef4706c91064ba19dd3f1bb2a43f40cabd68f38e1c3e57fb0cea830b5ff4763364a00197313ccf704f571295803220d5c20d40df371562d84de98c5df9a0 + languageName: node + linkType: hard + +"jsonld-signatures@npm:^5.0.0": + version: 5.2.0 + resolution: "jsonld-signatures@npm:5.2.0" + dependencies: + base64url: "npm:^3.0.1" + crypto-ld: "npm:^3.7.0" + jsonld: "npm:^2.0.2" + node-forge: "npm:^0.10.0" + security-context: "npm:^4.0.0" + serialize-error: "npm:^5.0.0" + checksum: 10c0/c9966118b9ad0af8be9bed8b42cfa8fe67d57c7ef29b7dbf7b889902c5bc1f1c19527d724316666dca49a6a1e72b3b37e09be6ab77d3b74f8dd4c39b2ef8f61c + languageName: node + linkType: hard + +"jsonld-streaming-parser@npm:^2.4.0, jsonld-streaming-parser@npm:^2.4.2": + version: 2.4.3 + resolution: "jsonld-streaming-parser@npm:2.4.3" + dependencies: + "@rdfjs/types": "npm:*" + "@types/http-link-header": "npm:^1.0.1" + canonicalize: "npm:^1.0.1" + http-link-header: "npm:^1.0.2" + jsonld-context-parser: "npm:^2.1.3" + jsonparse: "npm:^1.3.1" + rdf-data-factory: "npm:^1.1.0" + checksum: 10c0/f678e3b6f80471b95400b4d89b7a456e1ff798ace41a5312597e9c2d20a61b17aada2dc20364c3192806eba6abd651cd5c377fae0b9417f45187179ff6af862c + languageName: node + linkType: hard + +"jsonld-streaming-serializer@npm:^1.2.0": + version: 1.3.0 + resolution: "jsonld-streaming-serializer@npm:1.3.0" + dependencies: + "@rdfjs/types": "npm:*" + jsonld-context-parser: "npm:^2.0.0" + checksum: 10c0/c0e692a3c579a49e18af60f5d70cffef4a7e1637090c129150742feb0719e88bdfa6d73a5f0a095dd5cba72b6057fca22c0f50644e5dc5cd62d1ddc7ed3051ae + languageName: node + linkType: hard + +"jsonld@npm:^2.0.2": + version: 2.0.2 + resolution: "jsonld@npm:2.0.2" + dependencies: + canonicalize: "npm:^1.0.1" + lru-cache: "npm:^5.1.1" + rdf-canonize: "npm:^1.0.2" + request: "npm:^2.88.0" + semver: "npm:^6.3.0" + xmldom: "npm:0.1.19" + checksum: 10c0/d5648d74aab4316b13acfb1dfe087443a0f8b7022b94732867d01a3fbd50f1ce0bec073412da883dfa760641a22e778304e27f098de7f23ea27c8503e188edf2 + languageName: node + linkType: hard + +"jsonld@npm:^3.3.2": + version: 3.3.2 + resolution: "jsonld@npm:3.3.2" + dependencies: + canonicalize: "npm:^1.0.1" + lru-cache: "npm:^5.1.1" + object.fromentries: "npm:^2.0.2" + rdf-canonize: "npm:^2.0.1" + request: "npm:^2.88.0" + semver: "npm:^6.3.0" + xmldom: "npm:0.1.19" + checksum: 10c0/f89f4e5170a49505d552525abe37c4257a72171ca41f4c6ec38f12c021d6e6e41a473c38edee0f4bbda2af6e58d900c998bf875a4194f1e2b27e90cb8e95ef7c + languageName: node + linkType: hard + +"jsonld@npm:^8.0.0, jsonld@npm:^8.1.0, jsonld@npm:^8.3.1": + version: 8.3.3 + resolution: "jsonld@npm:8.3.3" + dependencies: + "@digitalbazaar/http-client": "npm:^3.4.1" + canonicalize: "npm:^1.0.1" + lru-cache: "npm:^6.0.0" + rdf-canonize: "npm:^3.4.0" + checksum: 10c0/ca8c18f65a50c61deec2951533bf05b709fd8e937e2f0cb549683d7e9934df7649b6e2f6f99f0dafe7bf8dd6ae95a257306cdb37fb705ef5ee0a7439d85581c2 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 + languageName: node + linkType: hard + +"jsonwebtoken@npm:^9.0.2": + version: 9.0.2 + resolution: "jsonwebtoken@npm:9.0.2" + dependencies: + jws: "npm:^3.2.2" + lodash.includes: "npm:^4.3.0" + lodash.isboolean: "npm:^3.0.3" + lodash.isinteger: "npm:^4.0.4" + lodash.isnumber: "npm:^3.0.3" + lodash.isplainobject: "npm:^4.0.6" + lodash.isstring: "npm:^4.0.1" + lodash.once: "npm:^4.0.0" + ms: "npm:^2.1.1" + semver: "npm:^7.5.4" + checksum: 10c0/d287a29814895e866db2e5a0209ce730cbc158441a0e5a70d5e940eb0d28ab7498c6bf45029cc8b479639bca94056e9a7f254e2cdb92a2f5750c7f358657a131 + languageName: node + linkType: hard + +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af + languageName: node + linkType: hard + +"jsprim@npm:^2.0.2": + version: 2.0.2 + resolution: "jsprim@npm:2.0.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10c0/677be2d41df536c92c6d0114a492ef197084018cfbb1a3e10b1fa1aad889564b2e3a7baa6af7949cc2d73678f42368b0be165a26bd4e4de6883a30dd6a24e98d + languageName: node + linkType: hard + +"jstransformer@npm:1.0.0": + version: 1.0.0 + resolution: "jstransformer@npm:1.0.0" + dependencies: + is-promise: "npm:^2.0.0" + promise: "npm:^7.0.1" + checksum: 10c0/11f9b4f368a55878dd7973154cd83b0adca27f974d21217728652530775b2bec281e92109de66f0c9e37c76af796d5b76b33f3e38363214a83d102d523a7285b + languageName: node + linkType: hard + +"juice@npm:^4.1.0": + version: 4.3.2 + resolution: "juice@npm:4.3.2" + dependencies: + cheerio: "npm:^0.22.0" + commander: "npm:^2.15.1" + cross-spawn: "npm:^5.1.0" + deep-extend: "npm:^0.5.1" + mensch: "npm:^0.3.3" + slick: "npm:^1.12.2" + web-resource-inliner: "npm:^4.2.1" + bin: + juice: bin/juice + checksum: 10c0/5ab6cb687740fd52260daf3d8c4c01fbec02c4da805574ae2f9d2947a472d950137aae4a48092a56f9acf007de486af7cced60d9d9ec2cbfc4fbc6c19c081363 + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: 10c0/d7b85371f2a5a17a108467fda35dddd95264ab438ccec7837b67af5913c57ded7246039d1df2b5bc1ade034ccf815b56d69786c5f1e07383168a066007c796c0 + languageName: node + linkType: hard + +"just-diff@npm:^6.0.0": + version: 6.0.2 + resolution: "just-diff@npm:6.0.2" + checksum: 10c0/1931ca1f0cea4cc480172165c189a84889033ad7a60bee302268ba8ca9f222b43773fd5f272a23ee618d43d85d3048411f06b635571a198159e9a85bb2495f5c + languageName: node + linkType: hard + +"jwa@npm:^1.4.1": + version: 1.4.1 + resolution: "jwa@npm:1.4.1" + dependencies: + buffer-equal-constant-time: "npm:1.0.1" + ecdsa-sig-formatter: "npm:1.0.11" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 + languageName: node + linkType: hard + +"jws@npm:^3.2.2": + version: 3.2.2 + resolution: "jws@npm:3.2.2" + dependencies: + jwa: "npm:^1.4.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff + languageName: node + linkType: hard + +"keyv@npm:^4.0.0, keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"kleur@npm:^4.1.4, kleur@npm:^4.1.5": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a + languageName: node + linkType: hard + +"ky-universal@npm:^0.11.0": + version: 0.11.0 + resolution: "ky-universal@npm:0.11.0" + dependencies: + abort-controller: "npm:^3.0.0" + node-fetch: "npm:^3.2.10" + peerDependencies: + ky: ">=0.31.4" + web-streams-polyfill: ">=3.2.1" + peerDependenciesMeta: + web-streams-polyfill: + optional: true + checksum: 10c0/d71a1cae6d79c93808eda3b021eea91df064ac972f0391b45aa0913cdc48bdcad9c33452d68de021bd32c1b5abe15090229ae4a45fa28f7babb8e77e39ae1596 + languageName: node + linkType: hard + +"ky@npm:^0.33.3": + version: 0.33.3 + resolution: "ky@npm:0.33.3" + checksum: 10c0/5ba8de4c97c2abe5fb1b7d1b20252f95a7b249254af03cdfac670b9615de6b2b4af747bf363a1b918d2650c4cc83259578105f8eadd284f4e1c4261081e29640 + languageName: node + linkType: hard + +"lerna@npm:^8.0.1": + version: 8.1.9 + resolution: "lerna@npm:8.1.9" + dependencies: + "@lerna/create": "npm:8.1.9" + "@npmcli/arborist": "npm:7.5.4" + "@npmcli/package-json": "npm:5.2.0" + "@npmcli/run-script": "npm:8.1.0" + "@nx/devkit": "npm:>=17.1.2 < 21" + "@octokit/plugin-enterprise-rest": "npm:6.0.1" + "@octokit/rest": "npm:19.0.11" + aproba: "npm:2.0.0" + byte-size: "npm:8.1.1" + chalk: "npm:4.1.0" + clone-deep: "npm:4.0.1" + cmd-shim: "npm:6.0.3" + color-support: "npm:1.1.3" + columnify: "npm:1.6.0" + console-control-strings: "npm:^1.1.0" + conventional-changelog-angular: "npm:7.0.0" + conventional-changelog-core: "npm:5.0.1" + conventional-recommended-bump: "npm:7.0.1" + cosmiconfig: "npm:9.0.0" + dedent: "npm:1.5.3" + envinfo: "npm:7.13.0" + execa: "npm:5.0.0" + fs-extra: "npm:^11.2.0" + get-port: "npm:5.1.1" + get-stream: "npm:6.0.0" + git-url-parse: "npm:14.0.0" + glob-parent: "npm:6.0.2" + globby: "npm:11.1.0" + graceful-fs: "npm:4.2.11" + has-unicode: "npm:2.0.1" + import-local: "npm:3.1.0" + ini: "npm:^1.3.8" + init-package-json: "npm:6.0.3" + inquirer: "npm:^8.2.4" + is-ci: "npm:3.0.1" + is-stream: "npm:2.0.0" + jest-diff: "npm:>=29.4.3 < 30" + js-yaml: "npm:4.1.0" + libnpmaccess: "npm:8.0.6" + libnpmpublish: "npm:9.0.9" + load-json-file: "npm:6.2.0" + lodash: "npm:^4.17.21" + make-dir: "npm:4.0.0" + minimatch: "npm:3.0.5" + multimatch: "npm:5.0.0" + node-fetch: "npm:2.6.7" + npm-package-arg: "npm:11.0.2" + npm-packlist: "npm:8.0.2" + npm-registry-fetch: "npm:^17.1.0" + nx: "npm:>=17.1.2 < 21" + p-map: "npm:4.0.0" + p-map-series: "npm:2.1.0" + p-pipe: "npm:3.1.0" + p-queue: "npm:6.6.2" + p-reduce: "npm:2.1.0" + p-waterfall: "npm:2.1.1" + pacote: "npm:^18.0.6" + pify: "npm:5.0.0" + read-cmd-shim: "npm:4.0.0" + resolve-from: "npm:5.0.0" + rimraf: "npm:^4.4.1" + semver: "npm:^7.3.8" + set-blocking: "npm:^2.0.0" + signal-exit: "npm:3.0.7" + slash: "npm:3.0.0" + ssri: "npm:^10.0.6" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + strong-log-transformer: "npm:2.1.0" + tar: "npm:6.2.1" + temp-dir: "npm:1.0.0" + typescript: "npm:>=3 < 6" + upath: "npm:2.0.1" + uuid: "npm:^10.0.0" + validate-npm-package-license: "npm:3.0.4" + validate-npm-package-name: "npm:5.0.1" + wide-align: "npm:1.1.5" + write-file-atomic: "npm:5.0.1" + write-pkg: "npm:4.0.0" + yargs: "npm:17.7.2" + yargs-parser: "npm:21.1.1" + bin: + lerna: dist/cli.js + checksum: 10c0/e3362d66324f5ee9606dbdb332a6b09eeb2df6378177e36a1bbcf532927d921beb4d25dbcc717c4adf3a7dcd67e0bcee67bedf81fdbe7e78bbecce310358d762 + languageName: node + linkType: hard + +"leven@npm:2.1.0": + version: 2.1.0 + resolution: "leven@npm:2.1.0" + checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"libnpmaccess@npm:8.0.6": + version: 8.0.6 + resolution: "libnpmaccess@npm:8.0.6" + dependencies: + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + checksum: 10c0/0b63c7cb44e024b0225dae8ebfe5166a0be8a9420c1b5fb6a4f1c795e9eabbed0fff5984ab57167c5634145de018008cbeeb27fe6f808f611ba5ba1b849ec3d6 + languageName: node + linkType: hard + +"libnpmpublish@npm:9.0.9": + version: 9.0.9 + resolution: "libnpmpublish@npm:9.0.9" + dependencies: + ci-info: "npm:^4.0.0" + normalize-package-data: "npm:^6.0.1" + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + proc-log: "npm:^4.2.0" + semver: "npm:^7.3.7" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.6" + checksum: 10c0/5e4bae455d33fb7402b8b8fcc505d89a1d60ff4b7dc47dd9ba318426c00400e1892fd0435d8db6baab808f64d7f226cbf8d53792244ffad1df7fc2f94f3237fc + languageName: node + linkType: hard + +"lie@npm:3.1.1": + version: 3.1.1 + resolution: "lie@npm:3.1.1" + dependencies: + immediate: "npm:~3.0.5" + checksum: 10c0/d62685786590351b8e407814acdd89efe1cb136f05cb9236c5a97b2efdca1f631d2997310ad2d565c753db7596799870140e4777c9c9b8c44a0f6bf42d1804a1 + languageName: node + linkType: hard + +"lines-and-columns@npm:2.0.3": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 10c0/09525c10010a925b7efe858f1dd3184eeac34f0a9bc34993075ec490efad71e948147746b18e9540279cc87cd44085b038f986903db3de65ffe96d38a7b91c4c + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"lines-and-columns@npm:~2.0.3": + version: 2.0.4 + resolution: "lines-and-columns@npm:2.0.4" + checksum: 10c0/4db28bf065cd7ad897c0700f22d3d0d7c5ed6777e138861c601c496d545340df3fc19e18bd04ff8d95a246a245eb55685b82ca2f8c2ca53a008e9c5316250379 + languageName: node + linkType: hard + +"load-json-file@npm:6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.15" + parse-json: "npm:^5.0.0" + strip-bom: "npm:^4.0.0" + type-fest: "npm:^0.6.0" + checksum: 10c0/fcb46ef75bab917f37170ba76781a1690bf67144bb53931cb0ed8e4aa20ca439e9c354fcf3594aed531f47dbeb4a49800acab7fdffd553c402ac40c987706d7b + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 + languageName: node + linkType: hard + +"localforage@npm:^1.9.0": + version: 1.10.0 + resolution: "localforage@npm:1.10.0" + dependencies: + lie: "npm:3.1.1" + checksum: 10c0/00f19f1f97002e6721587ed5017f502d58faf80dae567d5065d4d1ee0caf0762f40d2e2dba7f0ef7d3f14ee6203242daae9ecad97359bfc10ecff36df11d85a3 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: "npm:^2.0.0" + path-exists: "npm:^3.0.0" + checksum: 10c0/24efa0e589be6aa3c469b502f795126b26ab97afa378846cb508174211515633b770aa0ba610cab113caedab8d2a4902b061a08aaed5297c12ab6f5be4df0133 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.assignin@npm:^4.0.9": + version: 4.2.0 + resolution: "lodash.assignin@npm:4.2.0" + checksum: 10c0/40ac405acf5d6daf27fd40b50c99f823641a9ceba6bd282b18cb9989149204af584b5671f336587c2a263e367c3a2d1105cbf7bdc5ea33cbd0f829b02b16578a + languageName: node + linkType: hard + +"lodash.bind@npm:^4.1.4": + version: 4.2.1 + resolution: "lodash.bind@npm:4.2.1" + checksum: 10c0/e47ae564101c43940fab7f102dd9fb056ae6cc534a3b7bfbaecdf7216dac904ad762150e66a80d1bd5430da7eed4df90ba93996bb24030fad096b698d2ae15af + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + +"lodash.defaults@npm:^4.0.1, lodash.defaults@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.defaults@npm:4.2.0" + checksum: 10c0/d5b77aeb702caa69b17be1358faece33a84497bcca814897383c58b28a2f8dfc381b1d9edbec239f8b425126a3bbe4916223da2a576bb0411c2cefd67df80707 + languageName: node + linkType: hard + +"lodash.filter@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.filter@npm:4.6.0" + checksum: 10c0/bb65002f3ee02b94400b9d8728a46d3ac9fc3eb7df387b3c642f36eff82d716714283ca674889a29edae3c28ea8a4048e6c7bb90598670ab9c97b5d125bffda2 + languageName: node + linkType: hard + +"lodash.flatten@npm:^4.2.0, lodash.flatten@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.flatten@npm:4.4.0" + checksum: 10c0/97e8f0d6b61fe4723c02ad0c6e67e51784c4a2c48f56ef283483e556ad01594cf9cec9c773e177bbbdbdb5d19e99b09d2487cb6b6e5dc405c2693e93b125bd3a + languageName: node + linkType: hard + +"lodash.foreach@npm:^4.3.0": + version: 4.5.0 + resolution: "lodash.foreach@npm:4.5.0" + checksum: 10c0/bd9cc83e87e805b21058ce6cf718dd22db137c7ca08eddbd608549db59989911c571b7195707f615cb37f27bb4f9a9fa9980778940d768c24095f5a04b244c84 + languageName: node + linkType: hard + +"lodash.includes@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.includes@npm:4.3.0" + checksum: 10c0/7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b + languageName: node + linkType: hard + +"lodash.isarguments@npm:^3.1.0": + version: 3.1.0 + resolution: "lodash.isarguments@npm:3.1.0" + checksum: 10c0/5e8f95ba10975900a3920fb039a3f89a5a79359a1b5565e4e5b4310ed6ebe64011e31d402e34f577eca983a1fc01ff86c926e3cbe602e1ddfc858fdd353e62d8 + languageName: node + linkType: hard + +"lodash.isboolean@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isboolean@npm:3.0.3" + checksum: 10c0/0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7 + languageName: node + linkType: hard + +"lodash.isinteger@npm:^4.0.4": + version: 4.0.4 + resolution: "lodash.isinteger@npm:4.0.4" + checksum: 10c0/4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7 + languageName: node + linkType: hard + +"lodash.ismatch@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.ismatch@npm:4.4.0" + checksum: 10c0/8f96a5dc4b8d3fc5a033dcb259d0c3148a1044fa4d02b4a0e8dce0fa1f2ef3ec4ac131e20b5cb2c985a4e9bcb1c37c0aa5af2cef70094959389617347b8fc645 + languageName: node + linkType: hard + +"lodash.isnumber@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isnumber@npm:3.0.3" + checksum: 10c0/2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 10c0/afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 + languageName: node + linkType: hard + +"lodash.map@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.map@npm:4.6.0" + checksum: 10c0/919fe767fa58d3f8369ddd84346636eda71c88a8ef6bde1ca0d87dd37e71614da2ed8bcfc3018ca5b7741ebaf7c01c2d7078b510dca8ab6a0d0ecafd3dc1abcb + languageName: node + linkType: hard + +"lodash.merge@npm:^4.4.0, lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"lodash.once@npm:^4.0.0": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 + languageName: node + linkType: hard + +"lodash.pick@npm:^4.2.1": + version: 4.4.0 + resolution: "lodash.pick@npm:4.4.0" + checksum: 10c0/a04c460b95d1aaa44e9513d1dacf72ea74d838da843e45831de9de64c303f13cdde1859702a6f4dcef417816898ffd47c6ae0614c957ac70245bed2809b8d2e2 + languageName: node + linkType: hard + +"lodash.reduce@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.reduce@npm:4.6.0" + checksum: 10c0/5d2dab823523a1a7f81eb5f4c1edcc03aab55504b1299a2385737389644ba6d2ad219169dfc5c16632a67a345d925ef6a5e8816b4e18a36f94ed66f8e7740b36 + languageName: node + linkType: hard + +"lodash.reject@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.reject@npm:4.6.0" + checksum: 10c0/653b5beb1641aeac8bd734775ef6517706897c49197dbe548788558c243434a89dd94b971866b04a0a1df411534db85e96ab7daeb8accf53650119a78de7355f + languageName: node + linkType: hard + +"lodash.some@npm:^4.4.0": + version: 4.6.0 + resolution: "lodash.some@npm:4.6.0" + checksum: 10c0/9d3cdb1c8a2ed3d19b02ce146d4962a7859016f752b40fc143d78d3e70985259d6bea71c2c31b8e78f492830f49d755f1be2cdbf85461c54a523089e0c8c0e75 + languageName: node + linkType: hard + +"lodash.unescape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.unescape@npm:4.0.1" + checksum: 10c0/b050d4e71a1459a397e615833ea296dd679e851ae13f7b2c91d6c2a5cd9a07e9a5be070a1cac3e27ee1c0dd0433d13bc8d3eda426c205cb5c2704a7c077f062a + languageName: node + linkType: hard + +"lodash@npm:^3.2.0": + version: 3.10.1 + resolution: "lodash@npm:3.10.1" + checksum: 10c0/f5f6d3d87503c3f1db27d49b30a00bb38dc1bd9de716c5febe8970259cc7b447149a0e320452ccaf5996a7a4abd63d94df341bb91bd8d336584ad518d8eab144 + languageName: node + linkType: hard + +"lodash@npm:^4.0.1, lodash@npm:^4.17.15, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 + languageName: node + linkType: hard + +"long-timeout@npm:0.1.1": + version: 0.1.1 + resolution: "long-timeout@npm:0.1.1" + checksum: 10c0/a62240cc8f449d7a00081e817ae543fb1ded4d9fc05492e9fa8d6868cb33b2c9d5d71176a6f8be4473df7ba4b208460b3073b0e05069c3ec286122f3e4b5747f + languageName: node + linkType: hard + +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 10c0/f82a2b3568910509da4b7906362efa40f5b54ea14c2584778ddb313226f9cbf21020a5db35f9b9a0e95847a9b781d548601f31793d736b22a2b8ae8eb9ab1082 + languageName: node + linkType: hard + +"lru-cache@npm:10.1.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 10c0/778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^4.0.1": + version: 4.1.5 + resolution: "lru-cache@npm:4.1.5" + dependencies: + pseudomap: "npm:^1.0.2" + yallist: "npm:^2.1.2" + checksum: 10c0/1ca5306814e5add9ec63556d6fd9b24a4ecdeaef8e9cea52cbf30301e6b88c8d8ddc7cab45b59b56eb763e6c45af911585dc89925a074ab65e1502e3fe8103cf + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"luxon@npm:^1.23.x": + version: 1.28.1 + resolution: "luxon@npm:1.28.1" + checksum: 10c0/5c561ce4364bb2301ca5811c74d11a9e087f82164109c7997dc8f0959e64d51259d8e630914dca2edc6702525ce5ab066a4b85caa19d04be71f10e79ffe2bc84 + languageName: node + linkType: hard + +"luxon@npm:^3.2.1": + version: 3.5.0 + resolution: "luxon@npm:3.5.0" + checksum: 10c0/335789bba95077db831ef99894edadeb23023b3eb2137a1b56acd0d290082b691cf793143d69e30bc069ec95f0b49f36419f48e951c68014f19ffe12045e3494 + languageName: node + linkType: hard + +"luxon@npm:~3.6.0": + version: 3.6.1 + resolution: "luxon@npm:3.6.1" + checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5 + languageName: node + linkType: hard + +"make-dir@npm:4.0.0, make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: "npm:^4.0.1" + semver: "npm:^5.6.0" + checksum: 10c0/ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 + languageName: node + linkType: hard + +"make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-error@npm:^1.3.6": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: "npm:1.0.5" + checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 10c0/ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: 10c0/1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 + languageName: node + linkType: hard + +"memory-streams@npm:^0.1.3": + version: 0.1.3 + resolution: "memory-streams@npm:0.1.3" + dependencies: + readable-stream: "npm:~1.0.2" + checksum: 10c0/05d1ceff6b420e580ea7b1d8454e42118b06696cbe70c2d5ffc5e0b7df72a4a2152fa4e18216da10d8d5abbd2b2b409b354a8bb6489b30ae854c0dd998c84406 + languageName: node + linkType: hard + +"mensch@npm:^0.3.3": + version: 0.3.4 + resolution: "mensch@npm:0.3.4" + checksum: 10c0/177f9c1cb1acd93da98a971288a5da99f819ac06de19ca450040b18ddf8728c7ae0ce22309fadbbfd4ceb773bc5c03bf1cb93ceb91441da9e76e010d314da2ea + languageName: node + linkType: hard + +"meow@npm:^8.1.2": + version: 8.1.2 + resolution: "meow@npm:8.1.2" + dependencies: + "@types/minimist": "npm:^1.2.0" + camelcase-keys: "npm:^6.2.2" + decamelize-keys: "npm:^1.1.0" + hard-rejection: "npm:^2.1.0" + minimist-options: "npm:4.1.0" + normalize-package-data: "npm:^3.0.0" + read-pkg-up: "npm:^7.0.1" + redent: "npm:^3.0.0" + trim-newlines: "npm:^3.0.0" + type-fest: "npm:^0.18.0" + yargs-parser: "npm:^20.2.3" + checksum: 10c0/9a8d90e616f783650728a90f4ea1e5f763c1c5260369e6596b52430f877f4af8ecbaa8c9d952c93bbefd6d5bda4caed6a96a20ba7d27b511d2971909b01922a2 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"methods@npm:^1.1.1, methods@npm:^1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 + languageName: node + linkType: hard + +"microdata-rdf-streaming-parser@npm:^1.2.0": + version: 1.2.0 + resolution: "microdata-rdf-streaming-parser@npm:1.2.0" + dependencies: + "@rdfjs/types": "npm:*" + htmlparser2: "npm:^6.0.0" + rdf-data-factory: "npm:^1.1.0" + relative-to-absolute-iri: "npm:^1.0.2" + checksum: 10c0/fc54e45b78d9186061b6bcb915e1e2ae5796ee92e8aaeee9e548012f37487c618361e7e96f95cd8958a2bfab22dde51ddec290366b1c6b6069b94a9aa0a01f73 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime@npm:1.6.0, mime@npm:^1.4.1": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mimer@npm:^1.0.0": + version: 1.1.1 + resolution: "mimer@npm:1.1.1" + bin: + mimer: bin/mimer + checksum: 10c0/e832bd0d45fc2ce76b0de70f9fb8ca5c59f74b987a19d9d417a43175a67646a80846e825956cc8fdb05eae7651496b9c344fb09f5c5f52f9e4786b8291ae528c + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"mimic-response@npm:^1.0.0": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 10c0/c5381a5eae997f1c3b5e90ca7f209ed58c3615caeee850e85329c598f0c000ae7bec40196580eef1781c60c709f47258131dab237cad8786f8f56750594f27fa + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:3.0.5": + version: 3.0.5 + resolution: "minimatch@npm:3.0.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/f398652d0d260137c289c270a4ac98ebe0a27cd316fa0fac72b096e96cbdc89f71d80d47ac7065c716ba3b0b730783b19180bd85a35f9247535d2adfe96bba76 + languageName: node + linkType: hard + +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/a0a394c356dd5b4cb7f821720841a82fa6f07c9c562c5b716909d1b6ec5e56a7e4c4b5029da26dd256b7d2b3a3f38cbf9ddd8680e887b9b5282b09c05501c1ca + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: "npm:^1.0.1" + is-plain-obj: "npm:^1.1.0" + kind-of: "npm:^6.0.3" + checksum: 10c0/7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minimist@npm:~0.0.1": + version: 0.0.10 + resolution: "minimist@npm:0.0.10" + checksum: 10c0/c505a020144b6e49f2b1c7d1e378f3692b7102e989b4a49338fc171eb4229ddddb430e779ff803dcb11854050e3fe3c2298962a7d73c20df7c2044c92b2ba1da + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 10c0/4ea76b030d97079f4429d6e8a8affd90baf1b6a1898977c8ccce4701c5a2ba2792e033abc6709373f25c2c4d4d95440d9d5e9464b46b7b76ca44d2ce26d939ce + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"modify-values@npm:^1.0.1": + version: 1.0.1 + resolution: "modify-values@npm:1.0.1" + checksum: 10c0/6acb1b82aaf7a02f9f7b554b20cbfc159f223a79c66b0a257511c5933d50b85e12ea1220b0a90a2af6f80bc29ff784f929a52a51881867a93ae6a12ce87a729a + languageName: node + linkType: hard + +"moleculer-bull@npm:^0.2.5": + version: 0.2.8 + resolution: "moleculer-bull@npm:0.2.8" + dependencies: + bull: "npm:^3.15.0" + lodash: "npm:^4.17.15" + peerDependencies: + moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 + checksum: 10c0/744170d331eb3ddefb34d86e3e5fba02942ed9223a3a2b7c4e7ee893eb49d89c479374dfc77a6d8803a805469856cd00fcb03f63ee718e97ab318d1329eedcef + languageName: node + linkType: hard + +"moleculer-db@npm:^0.8.15, moleculer-db@npm:^0.8.16": + version: 0.8.26 + resolution: "moleculer-db@npm:0.8.26" + dependencies: + "@seald-io/nedb": "npm:^3.0.0" + bluebird: "npm:^3.7.2" + flat: "npm:^5.0.2" + lodash: "npm:^4.17.21" + peerDependencies: + moleculer: ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 + checksum: 10c0/e4797651ecc59e1aa7855ab536fc0be3e6090c6b2f37c94dda37cb397fb8ef750f2325d565b85b55d926db789b05a011a13e0b885cbe9ce81b658fca99e78ef4 + languageName: node + linkType: hard + +"moleculer-mail@npm:^1.2.5": + version: 1.2.6 + resolution: "moleculer-mail@npm:1.2.6" + dependencies: + bluebird: "npm:^3.7.2" + email-templates: "npm:^2.7.1" + lodash: "npm:^4.17.21" + nodemailer: "npm:^4.6.7" + nodemailer-html-to-text: "npm:^2.1.0" + peerDependencies: + moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 + checksum: 10c0/3a8d8af4a7471e2e618470731b989f1c5c33fb4c944c72d7410a63582bcc48bb035c85f31cd62ab552b191043cac049ca972f2088c1c2f42e91f0db0ba8ea79b + languageName: node + linkType: hard + +"moleculer-schedule@npm:^0.2.3": + version: 0.2.3 + resolution: "moleculer-schedule@npm:0.2.3" + dependencies: + lodash: "npm:^4.17.21" + node-schedule: "npm:^2.0.0" + peerDependencies: + moleculer: ^0.14.13 + checksum: 10c0/63e3ae5c5cf4631a09358742c14941ad2ffa7051c552f52bbe0128e8dacd7bf3ce9688a434d94f39d63141d80b15828942e81c2cf0f9c4c4652791ecc469f4fb + languageName: node + linkType: hard + +"moleculer-web@npm:^0.10.0-beta1, moleculer-web@npm:^0.10.7": + version: 0.10.7 + resolution: "moleculer-web@npm:0.10.7" + dependencies: + "@fastify/busboy": "npm:^1.0.0" + body-parser: "npm:^1.19.0" + es6-error: "npm:^4.1.1" + etag: "npm:^1.8.1" + fresh: "npm:^0.5.2" + isstream: "npm:^0.1.2" + kleur: "npm:^4.1.4" + lodash: "npm:^4.17.21" + path-to-regexp: "npm:^3.1.0" + qs: "npm:^6.11.0" + serve-static: "npm:^1.14.1" + peerDependencies: + moleculer: ^0.13.0 || ^0.14.0 + checksum: 10c0/af4964522fcdac7d88d61f7e810fbd7fe4500b6d6c7882c0cf8f7a4b28ac4402a32136a7b0635d1d3ceac5a4abd9648056048c5516d9a7be234541c13076024b + languageName: node + linkType: hard + +"moleculer@npm:0.14.35": + version: 0.14.35 + resolution: "moleculer@npm:0.14.35" + dependencies: + args: "npm:^5.0.3" + eventemitter2: "npm:^6.4.9" + fastest-validator: "npm:^1.19.0" + glob: "npm:^7.2.0" + ipaddr.js: "npm:^2.2.0" + kleur: "npm:^4.1.5" + lodash: "npm:^4.17.21" + lru-cache: "npm:^6.0.0" + node-fetch: "npm:^2.6.7" + recursive-watch: "npm:^1.1.4" + peerDependencies: + amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 + avsc: ^5.0.0 + bunyan: ^1.0.0 + cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 + dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 + debug: ^4.0.0 + etcd3: ^1.0.0 + ioredis: ^4.0.0 || ^5.0.0 + jaeger-client: ^3.0.0 + kafka-node: ^5.0.0 + log4js: ^6.0.0 + mqtt: ^4.0.0 || ^5.0.0 + msgpack5: ^5.0.0 || ^6.0.0 + nats: ^1.0.0 || ^2.0.0 + node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 + notepack.io: ^2.0.0 || ^3.0.0 + pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + protobufjs: ^6.0.0 || ^7.0.0 + redlock: ^4.0.0 + rhea-promise: ^1.0.0 || ^2.0.0 + thrift: ^0.12.0 || ^0.16.0 + winston: ^3.0.0 + peerDependenciesMeta: + amqplib: + optional: true + avsc: + optional: true + bunyan: + optional: true + cbor-x: + optional: true + dd-trace: + optional: true + debug: + optional: true + etcd3: + optional: true + ioredis: + optional: true + jaeger-client: + optional: true + kafka-node: + optional: true + log4js: + optional: true + mqtt: + optional: true + msgpack5: + optional: true + nats: + optional: true + node-nats-streaming: + optional: true + notepack.io: + optional: true + pino: + optional: true + protobufjs: + optional: true + redlock: + optional: true + rhea-promise: + optional: true + thrift: + optional: true + winston: + optional: true + bin: + moleculer-runner: bin/moleculer-runner.js + moleculer-runner-esm: bin/moleculer-runner.mjs + checksum: 10c0/471cfd38994bf3e08abc39342413bb79ad5aab518b0fbc1329b74f3c6fb9ecff0826323e7030dfbd7ae20c5f94d3743bdaebbfe6eeb4a9faa8b02d0b7e990b29 + languageName: node + linkType: hard + +"moleculer@patch:moleculer@npm%3A0.14.35#~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch::version=0.14.35&hash=b9970b": + version: 0.14.35 + resolution: "moleculer@patch:moleculer@npm%3A0.14.35#~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch::version=0.14.35&hash=b9970b" + dependencies: + args: "npm:^5.0.3" + eventemitter2: "npm:^6.4.9" + fastest-validator: "npm:^1.19.0" + glob: "npm:^7.2.0" + ipaddr.js: "npm:^2.2.0" + kleur: "npm:^4.1.5" + lodash: "npm:^4.17.21" + lru-cache: "npm:^6.0.0" + node-fetch: "npm:^2.6.7" + recursive-watch: "npm:^1.1.4" + peerDependencies: + amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 + avsc: ^5.0.0 + bunyan: ^1.0.0 + cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 + dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 + debug: ^4.0.0 + etcd3: ^1.0.0 + ioredis: ^4.0.0 || ^5.0.0 + jaeger-client: ^3.0.0 + kafka-node: ^5.0.0 + log4js: ^6.0.0 + mqtt: ^4.0.0 || ^5.0.0 + msgpack5: ^5.0.0 || ^6.0.0 + nats: ^1.0.0 || ^2.0.0 + node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 + notepack.io: ^2.0.0 || ^3.0.0 + pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + protobufjs: ^6.0.0 || ^7.0.0 + redlock: ^4.0.0 + rhea-promise: ^1.0.0 || ^2.0.0 + thrift: ^0.12.0 || ^0.16.0 + winston: ^3.0.0 + peerDependenciesMeta: + amqplib: + optional: true + avsc: + optional: true + bunyan: + optional: true + cbor-x: + optional: true + dd-trace: + optional: true + debug: + optional: true + etcd3: + optional: true + ioredis: + optional: true + jaeger-client: + optional: true + kafka-node: + optional: true + log4js: + optional: true + mqtt: + optional: true + msgpack5: + optional: true + nats: + optional: true + node-nats-streaming: + optional: true + notepack.io: + optional: true + pino: + optional: true + protobufjs: + optional: true + redlock: + optional: true + rhea-promise: + optional: true + thrift: + optional: true + winston: + optional: true + bin: + moleculer-runner: bin/moleculer-runner.js + moleculer-runner-esm: bin/moleculer-runner.mjs + checksum: 10c0/595cab387e422fbdac8cedff29f44422f923309cca68e36c31acd489143f051105a8239d5e9e3117e8fe823e8b03a80ab0e70e9331e62836735f3b1c24c9b0b1 + languageName: node + linkType: hard + +"moleculer@patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch": + version: 0.14.35 + resolution: "moleculer@patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch::version=0.14.35&hash=11399c" + dependencies: + args: "npm:^5.0.3" + eventemitter2: "npm:^6.4.9" + fastest-validator: "npm:^1.19.0" + glob: "npm:^7.2.0" + ipaddr.js: "npm:^2.2.0" + kleur: "npm:^4.1.5" + lodash: "npm:^4.17.21" + lru-cache: "npm:^6.0.0" + node-fetch: "npm:^2.6.7" + recursive-watch: "npm:^1.1.4" + peerDependencies: + amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 + avsc: ^5.0.0 + bunyan: ^1.0.0 + cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 + dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 + debug: ^4.0.0 + etcd3: ^1.0.0 + ioredis: ^4.0.0 || ^5.0.0 + jaeger-client: ^3.0.0 + kafka-node: ^5.0.0 + log4js: ^6.0.0 + mqtt: ^4.0.0 || ^5.0.0 + msgpack5: ^5.0.0 || ^6.0.0 + nats: ^1.0.0 || ^2.0.0 + node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 + notepack.io: ^2.0.0 || ^3.0.0 + pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + protobufjs: ^6.0.0 || ^7.0.0 + redlock: ^4.0.0 + rhea-promise: ^1.0.0 || ^2.0.0 + thrift: ^0.12.0 || ^0.16.0 + winston: ^3.0.0 + peerDependenciesMeta: + amqplib: + optional: true + avsc: + optional: true + bunyan: + optional: true + cbor-x: + optional: true + dd-trace: + optional: true + debug: + optional: true + etcd3: + optional: true + ioredis: + optional: true + jaeger-client: + optional: true + kafka-node: + optional: true + log4js: + optional: true + mqtt: + optional: true + msgpack5: + optional: true + nats: + optional: true + node-nats-streaming: + optional: true + notepack.io: + optional: true + pino: + optional: true + protobufjs: + optional: true + redlock: + optional: true + rhea-promise: + optional: true + thrift: + optional: true + winston: + optional: true + bin: + moleculer-runner: bin/moleculer-runner.js + moleculer-runner-esm: bin/moleculer-runner.mjs + checksum: 10c0/8d454a19168bb6e0a86c362d8b462742070e315572c7e50cbbd3e33b4ddf5423b74d90d489ca7ae057a6ed244bed450f7dc52368fa8245a51a0b06630dfccaa8 + languageName: node + linkType: hard + +"moment-timezone@npm:^0.5.31": + version: 0.5.46 + resolution: "moment-timezone@npm:0.5.46" + dependencies: + moment: "npm:^2.29.4" + checksum: 10c0/003fd278d1aa3e63afff340a318735db80157b7a343e3f807cac10e026def214f0e71b52d582b89a11ee0a19f5d9f0da2752b7959d855429f2b715d4859d3722 + languageName: node + linkType: hard + +"moment@npm:2.30.1, moment@npm:^2.29.4": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a + languageName: node + linkType: hard + +"mri@npm:1.1.4": + version: 1.1.4 + resolution: "mri@npm:1.1.4" + checksum: 10c0/eb577c2ef60385aa287afdac777e536996f4fd3144250c201097e7ec121568139d482c92cb9a512f90e428d6dc3e9ba8e9de89bc204424cb96f187a4bdc465c1 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"multimatch@npm:5.0.0": + version: 5.0.0 + resolution: "multimatch@npm:5.0.0" + dependencies: + "@types/minimatch": "npm:^3.0.3" + array-differ: "npm:^3.0.0" + array-union: "npm:^2.1.0" + arrify: "npm:^2.0.1" + minimatch: "npm:^3.0.4" + checksum: 10c0/252ffae6d19491c169c22fc30cf8a99f6031f94a3495f187d3430b06200e9f05a7efae90ab9d834f090834e0d9c979ab55e7ad21f61a37995d807b4b0ccdcbd1 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: 10c0/18d06d92e5d6d45e2b63c0e1b8f25376af71748ac36f53c059baa8b76ffac31c5ab225480494e7d35d30215ecdb18fed26ec23cafcd2f7733f2f14406bcd19e2 + languageName: node + linkType: hard + +"mute-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c + languageName: node + linkType: hard + +"n3@npm:^1.26.0": + version: 1.26.0 + resolution: "n3@npm:1.26.0" + dependencies: + buffer: "npm:^6.0.3" + readable-stream: "npm:^4.0.0" + checksum: 10c0/e8a399f9295ccbd4008113bebdbdb15e5ef824e2d396a94d70cc7c1a94261a72869622bd1d78b3e94ea48056d5cd1b42e3b6d8acd1e0261f387e94ac6403013d + languageName: node + linkType: hard + +"n3@npm:^1.6.3, n3@npm:^1.8.0": + version: 1.23.1 + resolution: "n3@npm:1.23.1" + dependencies: + buffer: "npm:^6.0.3" + queue-microtask: "npm:^1.1.2" + readable-stream: "npm:^4.0.0" + checksum: 10c0/9f7f179b3f358f37c284dc65907f4f12b079657d5eaea0ed4e0f1dc248e54caf68e3c62439c6a1d3d1b3eec06edb18e20aa7d12da494b49ff112f5dd72b0d414 + languageName: node + linkType: hard + +"nan@npm:^2.19.0, nan@npm:^2.20.0": + version: 2.22.0 + resolution: "nan@npm:2.22.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/d5d31aefdb218deba308d44867c5f432b4d3aabeb57c70a2b236d62652e9fee7044e5d5afd380d9fef022fe7ebb2f2d6c85ca3cbcac5031aaca3592c844526bb + languageName: node + linkType: hard + +"nanoid@npm:^3.3.8": + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"napi-postinstall@npm:^0.3.0": + version: 0.3.2 + resolution: "napi-postinstall@npm:0.3.2" + bin: + napi-postinstall: lib/cli.js + checksum: 10c0/77c67eb9871d24afe7bad30e6115c441d099d6a0e42dc1c49c4a722ff682425e08dc6dd2b03eca10db9b547e724c38fb51325c35039e7ac10dcb714bb88d7326 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.73.0 + resolution: "node-abi@npm:3.73.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/4cd237f2507f80048310f381198a07387b11cbaab7dfac61ccc40cdc83f2296c647df02b5ddfead9f40b845c696f0ce75fdaa01973d3f3f0686151e4f96d2c8c + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/fcae80f5ac52fbf5012f5e19df2bd3915e67d3b3ad51cb5942943df2238d32ba15890fecabd0e166876a9f98a581ab50f3f10eb942b09405c49ef8da36b826c7 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-fetch@npm:^3.2.10": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 + languageName: node + linkType: hard + +"node-forge@npm:^0.10.0, node-forge@npm:~0.10.0": + version: 0.10.0 + resolution: "node-forge@npm:0.10.0" + checksum: 10c0/9cbf9ac8fc3889a5a46b0248f7238ee4014770bf31d22e04c0c7f04ed91c8be4584c5f534cdf6037e99f236c636c925cba960501ed2b850e077512e152760663 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + +"node-gyp@npm:^10.0.0": + version: 10.3.1 + resolution: "node-gyp@npm:10.3.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/87c3b50e1f6f5256b5d2879a8c064eefa53ed444bad2a20870be43bc189db7cbffe22c30af056046c6d904181d73881b1726fd391d2f6f79f89b991019f195ea + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.3.0 + resolution: "node-gyp@npm:11.3.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/5f4ad5a729386f7b50096efd4934b06c071dbfbc7d7d541a66d6959a7dccd62f53ff3dc95fffb60bf99d8da1270e23769f82246fcaa6c5645a70c967ae9a3398 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a + languageName: node + linkType: hard + +"node-machine-id@npm:1.1.12": + version: 1.1.12 + resolution: "node-machine-id@npm:1.1.12" + checksum: 10c0/ab2fea5f75a6f1ce3c76c5e0ae3903b631230e0a99b003d176568fff8ddbdf7b2943be96cd8d220c497ca0f6149411831f8a450601929f326781cb1b59bab7f8 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa + languageName: node + linkType: hard + +"node-schedule@npm:^2.0.0": + version: 2.1.1 + resolution: "node-schedule@npm:2.1.1" + dependencies: + cron-parser: "npm:^4.2.0" + long-timeout: "npm:0.1.1" + sorted-array-functions: "npm:^1.3.0" + checksum: 10c0/6ec51b34b9e676740ac25298e4ced5ee46053379f0d3aad533e51d7e083bc24ced045df1772a95bf9d9cfdb81299340bbf551549a7c5eb6e4d2dc6468c85c70e + languageName: node + linkType: hard + +"nodemailer-html-to-text@npm:^2.1.0": + version: 2.1.0 + resolution: "nodemailer-html-to-text@npm:2.1.0" + dependencies: + html-to-text: "npm:^2.1.0" + checksum: 10c0/068d6aa086a46f7d137775b87dfa1177916f352a1c0c3d1b7959e8591fc98fabcaa5e1bec32ff71c536a01fd51914dfc93f2112a0ee27a3dbaf6ab31d2ebe88c + languageName: node + linkType: hard + +"nodemailer@npm:^4.6.7": + version: 4.7.0 + resolution: "nodemailer@npm:4.7.0" + checksum: 10c0/62a330b88f0982c1474adb92b909ad33620ff194c24977e43118b71ed7f9ff17b54a34f8e5db805001925f01f6c0b5356d3765b7bd9f5cc5a07dfc78ea57263a + languageName: node + linkType: hard + +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: "npm:1" + bin: + nopt: bin/nopt.js + checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0, nopt@npm:^7.2.1": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: "npm:^4.0.1" + is-core-module: "npm:^2.5.0" + semver: "npm:^7.3.4" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be + languageName: node + linkType: hard + +"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": + version: 6.0.2 + resolution: "normalize-package-data@npm:6.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10c0/7e32174e7f5575ede6d3d449593247183880122b4967d4ae6edb28cea5769ca025defda54fc91ec0e3c972fdb5ab11f9284606ba278826171b264cb16a9311ef + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 10c0/95d948f9bdd2cfde91aa786d1816ae40f8262946e13700bf6628105994fe0ff361662c20af3961161c38a119dc977adeb41fc0b41b1745eb77edaaf9cb22db23 + languageName: node + linkType: hard + +"npm-bundled@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-bundled@npm:3.0.1" + dependencies: + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10c0/7975590a50b7ce80dd9f3eddc87f7e990c758f2f2c4d9313dd67a9aca38f1a5ac0abe20d514b850902c441e89d2346adfc3c6f1e9cbab3ea28ebb653c4442440 + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 + languageName: node + linkType: hard + +"npm-package-arg@npm:11.0.2": + version: 11.0.2 + resolution: "npm-package-arg@npm:11.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/d730572e128980db45c97c184a454cb565283bf849484bf92e3b4e8ec2d08a21bd4b2cba9467466853add3e8c7d81e5de476904ac241f3ae63e6905dfc8196d4 + languageName: node + linkType: hard + +"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a + languageName: node + linkType: hard + +"npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": + version: 8.0.2 + resolution: "npm-packlist@npm:8.0.2" + dependencies: + ignore-walk: "npm:^6.0.4" + checksum: 10c0/ac3140980b1475c2e9acd3d0ca1acd0f8660c357aed357f1a4ebff2270975e0280a3b1c4938e2f16bd68217853ceb5725cf8779ec3752dfcc546582751ceedff + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": + version: 9.1.0 + resolution: "npm-pick-manifest@npm:9.1.0" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^11.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/8765f4199755b381323da2bff2202b4b15b59f59dba0d1be3f2f793b591321cd19e1b5a686ef48d9753a6bd4868550da632541a45dfb61809d55664222d73e44 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": + version: 17.1.0 + resolution: "npm-registry-fetch@npm:17.1.0" + dependencies: + "@npmcli/redact": "npm:^2.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^13.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minizlib: "npm:^2.1.2" + npm-package-arg: "npm:^11.0.0" + proc-log: "npm:^4.0.0" + checksum: 10c0/3f66214e106609fd2e92704e62ac929cba1424d4013fec50f783afbb81168b0dc14457d35c1716a77e30fc482c3576bdc4e4bc5c84a714cac59cf98f96a17f47 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + +"npmlog@npm:^5.0.1": + version: 5.0.1 + resolution: "npmlog@npm:5.0.1" + dependencies: + are-we-there-yet: "npm:^2.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^3.0.0" + set-blocking: "npm:^2.0.0" + checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa + languageName: node + linkType: hard + +"nth-check@npm:~1.0.0, nth-check@npm:~1.0.1": + version: 1.0.2 + resolution: "nth-check@npm:1.0.2" + dependencies: + boolbase: "npm:~1.0.0" + checksum: 10c0/1a67ce53a99e276eea672f892d712b29f3e6802bbbef7285ffab72ecea4f972e8244defac1ebded0daffabf459def31355bb9c64e5657ac2ab032c13f185d0fd + languageName: node + linkType: hard + +"nx@npm:17.2.5, nx@npm:v17.2.5": + version: 17.2.5 + resolution: "nx@npm:17.2.5" + dependencies: + "@nrwl/tao": "npm:v17.2.5" + "@nx/nx-darwin-arm64": "npm:v17.2.5" + "@nx/nx-darwin-x64": "npm:v17.2.5" + "@nx/nx-freebsd-x64": "npm:v17.2.5" + "@nx/nx-linux-arm-gnueabihf": "npm:v17.2.5" + "@nx/nx-linux-arm64-gnu": "npm:v17.2.5" + "@nx/nx-linux-arm64-musl": "npm:v17.2.5" + "@nx/nx-linux-x64-gnu": "npm:v17.2.5" + "@nx/nx-linux-x64-musl": "npm:v17.2.5" + "@nx/nx-win32-arm64-msvc": "npm:v17.2.5" + "@nx/nx-win32-x64-msvc": "npm:v17.2.5" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:3.0.0-rc.46" + "@zkochan/js-yaml": "npm:0.0.6" + axios: "npm:^1.5.1" + chalk: "npm:^4.1.0" + cli-cursor: "npm:3.1.0" + cli-spinners: "npm:2.6.1" + cliui: "npm:^8.0.1" + dotenv: "npm:~16.3.1" + dotenv-expand: "npm:~10.0.0" + enquirer: "npm:~2.3.6" + figures: "npm:3.2.0" + flat: "npm:^5.0.2" + fs-extra: "npm:^11.1.0" + glob: "npm:7.1.4" + ignore: "npm:^5.0.4" + jest-diff: "npm:^29.4.1" + js-yaml: "npm:4.1.0" + jsonc-parser: "npm:3.2.0" + lines-and-columns: "npm:~2.0.3" + minimatch: "npm:3.0.5" + node-machine-id: "npm:1.1.12" + npm-run-path: "npm:^4.0.1" + open: "npm:^8.4.0" + semver: "npm:7.5.3" + string-width: "npm:^4.2.3" + strong-log-transformer: "npm:^2.1.0" + tar-stream: "npm:~2.2.0" + tmp: "npm:~0.2.1" + tsconfig-paths: "npm:^4.1.2" + tslib: "npm:^2.3.0" + yargs: "npm:^17.6.2" + yargs-parser: "npm:21.1.1" + peerDependencies: + "@swc-node/register": ^1.6.7 + "@swc/core": ^1.3.85 + dependenciesMeta: + "@nx/nx-darwin-arm64": + optional: true + "@nx/nx-darwin-x64": + optional: true + "@nx/nx-freebsd-x64": + optional: true + "@nx/nx-linux-arm-gnueabihf": + optional: true + "@nx/nx-linux-arm64-gnu": + optional: true + "@nx/nx-linux-arm64-musl": + optional: true + "@nx/nx-linux-x64-gnu": + optional: true + "@nx/nx-linux-x64-musl": + optional: true + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + nx-cloud: bin/nx-cloud.js + checksum: 10c0/5438bd50e19a6fab01f4f08847045f4d9f67d446eed279027ca7de11a2f20ca9ad0a7e2ec195d8422d2c1f9e401eb3bb7bfd01e97c7c4cd933ed763949f6dbd4 + languageName: node + linkType: hard + +"nx@npm:>=17.1.2 < 21": + version: 20.3.2 + resolution: "nx@npm:20.3.2" + dependencies: + "@napi-rs/wasm-runtime": "npm:0.2.4" + "@nx/nx-darwin-arm64": "npm:20.3.2" + "@nx/nx-darwin-x64": "npm:20.3.2" + "@nx/nx-freebsd-x64": "npm:20.3.2" + "@nx/nx-linux-arm-gnueabihf": "npm:20.3.2" + "@nx/nx-linux-arm64-gnu": "npm:20.3.2" + "@nx/nx-linux-arm64-musl": "npm:20.3.2" + "@nx/nx-linux-x64-gnu": "npm:20.3.2" + "@nx/nx-linux-x64-musl": "npm:20.3.2" + "@nx/nx-win32-arm64-msvc": "npm:20.3.2" + "@nx/nx-win32-x64-msvc": "npm:20.3.2" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:3.0.2" + "@zkochan/js-yaml": "npm:0.0.7" + axios: "npm:^1.7.4" + chalk: "npm:^4.1.0" + cli-cursor: "npm:3.1.0" + cli-spinners: "npm:2.6.1" + cliui: "npm:^8.0.1" + dotenv: "npm:~16.4.5" + dotenv-expand: "npm:~11.0.6" + enquirer: "npm:~2.3.6" + figures: "npm:3.2.0" + flat: "npm:^5.0.2" + front-matter: "npm:^4.0.2" + ignore: "npm:^5.0.4" + jest-diff: "npm:^29.4.1" + jsonc-parser: "npm:3.2.0" + lines-and-columns: "npm:2.0.3" + minimatch: "npm:9.0.3" + node-machine-id: "npm:1.1.12" + npm-run-path: "npm:^4.0.1" + open: "npm:^8.4.0" + ora: "npm:5.3.0" + resolve.exports: "npm:2.0.3" + semver: "npm:^7.5.3" + string-width: "npm:^4.2.3" + tar-stream: "npm:~2.2.0" + tmp: "npm:~0.2.1" + tsconfig-paths: "npm:^4.1.2" + tslib: "npm:^2.3.0" + yaml: "npm:^2.6.0" + yargs: "npm:^17.6.2" + yargs-parser: "npm:21.1.1" + peerDependencies: + "@swc-node/register": ^1.8.0 + "@swc/core": ^1.3.85 + dependenciesMeta: + "@nx/nx-darwin-arm64": + optional: true + "@nx/nx-darwin-x64": + optional: true + "@nx/nx-freebsd-x64": + optional: true + "@nx/nx-linux-arm-gnueabihf": + optional: true + "@nx/nx-linux-arm64-gnu": + optional: true + "@nx/nx-linux-arm64-musl": + optional: true + "@nx/nx-linux-x64-gnu": + optional: true + "@nx/nx-linux-x64-musl": + optional: true + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + nx-cloud: bin/nx-cloud.js + checksum: 10c0/e84b748f45cdce3f57a17b99627a8d2d7ff9c41a4eaa9b88775576b03e3dcd9d0f707f28303b05483fe9478dce58f2d7ecf9a29e8a12902a8247e73a4ae48755 + languageName: node + linkType: hard + +"oauth-sign@npm:~0.9.0": + version: 0.9.0 + resolution: "oauth-sign@npm:0.9.0" + checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-hash@npm:^2.0.1": + version: 2.2.0 + resolution: "object-hash@npm:2.2.0" + checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2, object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc + languageName: node + linkType: hard + +"object.entries@npm:^1.1.5": + version: 1.1.8 + resolution: "object.entries@npm:1.1.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.2, object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b + languageName: node + linkType: hard + +"object.getownpropertydescriptors@npm:^2.1.8": + version: 2.1.8 + resolution: "object.getownpropertydescriptors@npm:2.1.8" + dependencies: + array.prototype.reduce: "npm:^1.0.6" + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + gopd: "npm:^1.0.1" + safe-array-concat: "npm:^1.1.2" + checksum: 10c0/553e9562fd86637c9c169df23a56f1d810d8c9b580a6d4be11552c009f32469310c9347f3d10325abf0cd9cfe4afc521a1e903fbd24148ae7ec860e1e7c75cf3 + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.3": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c + languageName: node + linkType: hard + +"object.values@npm:^1.2.0": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 + languageName: node + linkType: hard + +"oidc-token-hash@npm:^5.0.1": + version: 5.0.3 + resolution: "oidc-token-hash@npm:5.0.3" + checksum: 10c0/d0dc0551406f09577874155cc83cf69c39e4b826293d50bb6c37936698aeca17d4bcee356ab910c859e53e83f2728a2acbd041020165191353b29de51fbca615 + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"open@npm:^8.4.0": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 + languageName: node + linkType: hard + +"openid-client@npm:^4.7.4": + version: 4.9.1 + resolution: "openid-client@npm:4.9.1" + dependencies: + aggregate-error: "npm:^3.1.0" + got: "npm:^11.8.0" + jose: "npm:^2.0.5" + lru-cache: "npm:^6.0.0" + make-error: "npm:^1.3.6" + object-hash: "npm:^2.0.1" + oidc-token-hash: "npm:^5.0.1" + checksum: 10c0/88af2e7c17e62eaddd3f27e96567ef9c08dbd3266a6ff9c4e058128191d2d4ec07c49eaa523d9159953835fc90c59470270f6050872afb70c5c9576c387833e7 + languageName: node + linkType: hard + +"optimist@npm:^0.6.1": + version: 0.6.1 + resolution: "optimist@npm:0.6.1" + dependencies: + minimist: "npm:~0.0.1" + wordwrap: "npm:~0.0.2" + checksum: 10c0/8cb417328121e732dbfb4d94d53bb39b1406446b55323ed4ce787decc52394927e051ba879eb3ffa3171fe22a35ce13b460114b60effcead77443ee87c2f9b0f + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"ora@npm:5.3.0": + version: 5.3.0 + resolution: "ora@npm:5.3.0" + dependencies: + bl: "npm:^4.0.3" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + log-symbols: "npm:^4.0.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/30d5f3218eb75b0a2028c5fb9aa88e83e38a2f1745ab56839abb06c3ba31bae35f768f4e72c4f9e04e2a66be6a898e9312e8cf85c9333e1e3613eabb8c7cdf57 + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: "npm:^4.1.0" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + is-unicode-supported: "npm:^0.1.0" + log-symbols: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"own-keys@npm:^1.0.1": + version: 1.0.1 + resolution: "own-keys@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.2.6" + object-keys: "npm:^1.1.1" + safe-push-apply: "npm:^1.0.0" + checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a + languageName: node + linkType: hard + +"p-cancelable@npm:^2.0.0": + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 10c0/8c6dc1f8dd4154fd8b96a10e55a3a832684c4365fb9108056d89e79fbf21a2465027c04a59d0d797b5ffe10b54a61a32043af287d5c4860f1e996cbdbc847f01 + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: "npm:^1.0.0" + checksum: 10c0/5c1b1d53d180b2c7501efb04b7c817448e10efe1ba46f4783f8951994d5027e4cd88f36ad79af50546682594c4ebd11702ac4b9364c47f8074890e2acad0edee + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: "npm:^1.1.0" + checksum: 10c0/82da4be88fb02fd29175e66021610c881938d3cc97c813c71c1a605fac05617d57fd5d3b337494a6106c0edb2a37c860241430851411f1b265108cead34aee67 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-map-series@npm:2.1.0": + version: 2.1.0 + resolution: "p-map-series@npm:2.1.0" + checksum: 10c0/302ca686a61c498b227fc45d4e2b2e5bfd20a03f4156a976d94c4ff7decf9cd5a815fa6846b43b37d587ffa8d4671ff2bd596fa83fe8b9113b5102da94940e2a + languageName: node + linkType: hard + +"p-map@npm:4.0.0, p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^2.1.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"p-pipe@npm:3.1.0": + version: 3.1.0 + resolution: "p-pipe@npm:3.1.0" + checksum: 10c0/9b3076828ea7e9469c0f92c78fa44096726208d547efdb2d6148cbe135d1a70bd449de5be13e234dd669d9515343bd68527b316bf9d5639cee639e2fdde20aaf + languageName: node + linkType: hard + +"p-queue@npm:6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: "npm:^4.0.4" + p-timeout: "npm:^3.2.0" + checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e + languageName: node + linkType: hard + +"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": + version: 2.1.0 + resolution: "p-reduce@npm:2.1.0" + checksum: 10c0/27b8ff0fb044995507a06cd6357dffba0f2b98862864745972562a21885d7906ce5c794036d2aaa63ef6303158e41e19aed9f19651dfdafb38548ecec7d0de15 + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: "npm:^1.0.0" + checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 10c0/757ba31de5819502b80c447826fac8be5f16d3cb4fbf9bc8bc4971dba0682e84ac33e4b24176ca7058c69e29f64f34d8d9e9b08e873b7b7bb0aa89d620fa224a + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"p-waterfall@npm:2.1.1": + version: 2.1.1 + resolution: "p-waterfall@npm:2.1.1" + dependencies: + p-reduce: "npm:^2.0.0" + checksum: 10c0/ccae582b75a3597018a375f8eac32b93e8bfb9fc22a8e5037787ef4ebf5958d7465c2d3cbe26443971fbbfda2bcb7b645f694b91f928fc9a71fa5031e6e33f85 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pacote@npm:^18.0.0, pacote@npm:^18.0.6": + version: 18.0.6 + resolution: "pacote@npm:18.0.6" + dependencies: + "@npmcli/git": "npm:^5.0.0" + "@npmcli/installed-package-contents": "npm:^2.0.1" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + "@npmcli/run-script": "npm:^8.0.0" + cacache: "npm:^18.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^11.0.0" + npm-packlist: "npm:^8.0.0" + npm-pick-manifest: "npm:^9.0.0" + npm-registry-fetch: "npm:^17.0.0" + proc-log: "npm:^4.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + bin: + pacote: bin/index.js + checksum: 10c0/d80907375dd52a521255e0debca1ba9089ad8fd7acdf16c5a5db2ea2a5bb23045e2bcf08d1648b1ebc40fcc889657db86ff6187ff5f8d2fc312cd6ad1ec4c6ac + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-conflict-json@npm:^3.0.0": + version: 3.0.1 + resolution: "parse-conflict-json@npm:3.0.1" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + just-diff: "npm:^6.0.0" + just-diff-apply: "npm:^5.2.0" + checksum: 10c0/610b37181229ce3e945125c3a9548ec24d1de2d697a7ea3ef0f2660cccc6613715c2ba4bdbaf37c565133d6b61758703618a2c63d1ee29f97fd33c70a8aae323 + languageName: node + linkType: hard + +"parse-imports@npm:^2.1.1": + version: 2.2.1 + resolution: "parse-imports@npm:2.2.1" + dependencies: + es-module-lexer: "npm:^1.5.3" + slashes: "npm:^3.0.12" + checksum: 10c0/bc541ce4ef2ff77d53247de39a956e0ee7a1a4b9b175c3e0f898222fe7994595f011491154db4ed408cbaf5049ede9d0b6624125565be208e973a54420cbe069 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"parse-link-header@npm:^1.0.1": + version: 1.0.1 + resolution: "parse-link-header@npm:1.0.1" + dependencies: + xtend: "npm:~4.0.1" + checksum: 10c0/7d0c1f94b4d400ac8605e6d18aced0139e15a08f3dc886567894953727db82bb387febb9a7a6837a4809ca75abd32364bb54d447c050db4a017754ff8949c1fa + languageName: node + linkType: hard + +"parse-path@npm:^7.0.0": + version: 7.0.0 + resolution: "parse-path@npm:7.0.0" + dependencies: + protocols: "npm:^2.0.0" + checksum: 10c0/e7646f6b998b083bbd40102643d803557ce4ae18ae1704e6cc7ae2525ea7c5400f4a3635aca3244cfe65ce4dd0ff77db1142dde4d080e8a80c364c4b3e8fe8d2 + languageName: node + linkType: hard + +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 10c0/2f268e3d110d4c53d06ed2a8e8ee61a7da0cee13bf150819a6da066a8ca9b8d15b5600d6e6cae8be940e2edc50ee7c1e1052934d6ec858324065ecef848f0497 + languageName: node + linkType: hard + +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" + dependencies: + parse-path: "npm:^7.0.0" + checksum: 10c0/68b95afdf4bbf72e57c7ab66f8757c935fff888f7e2b0f1e06098b4faa19e06b6b743bddaed5bc8df4f0c2de6fc475355d787373b2fdd40092be9e4e4b996648 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"passport-cas2@npm:0.0.12": + version: 0.0.12 + resolution: "passport-cas2@npm:0.0.12" + dependencies: + cas: "git+https://github.com/joshchan/node-cas.git" + passport-strategy: "npm:^1.0.0" + checksum: 10c0/86050abe8da35304efae98402f4b6be1be9793d43d78e30e83d7431e8ab5e389aa12c348d426144f53413ce6d19240227e7a7f22e7253c768d1f6cabf34b3409 + languageName: node + linkType: hard + +"passport-local@npm:^1.0.0": + version: 1.0.0 + resolution: "passport-local@npm:1.0.0" + dependencies: + passport-strategy: "npm:1.x.x" + checksum: 10c0/59becb988014921a5d6056470d9373c41db452fcf113323064f39d53baa6f184e72151bf269ca6770511f7f0260e13632dacc7b6afdbf60ebf63e90327e186d4 + languageName: node + linkType: hard + +"passport-strategy@npm:1.x.x, passport-strategy@npm:^1.0.0": + version: 1.0.0 + resolution: "passport-strategy@npm:1.0.0" + checksum: 10c0/cf4cd32e1bf2538a239651581292fbb91ccc83973cde47089f00d2014c24bed63d3e65af21da8ddef649a8896e089eb9c3ac9ca639f36c797654ae9ee4ed65e1 + languageName: node + linkType: hard + +"passport@npm:^0.4.1": + version: 0.4.1 + resolution: "passport@npm:0.4.1" + dependencies: + passport-strategy: "npm:1.x.x" + pause: "npm:0.0.1" + checksum: 10c0/aa1a8eb2e991368734ae1e33d354c94a02c5fcd27c4ef25c3c303b4f3df1e05512ac0159e608cedbfc8c544c166735a153124cfa3bd8d48fb01f5ded500f0c5f + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-to-regexp@npm:^3.1.0": + version: 3.3.0 + resolution: "path-to-regexp@npm:3.3.0" + checksum: 10c0/ffa0ebe7088d38d435a8d08b0fe6e8c93ceb2a81a65d4dd1d9a538f52e09d5e3474ed5f553cb3b180d894b0caa10698a68737ab599fd1e56b4663d1a64c9f77b + languageName: node + linkType: hard + +"path-to-regexp@npm:^6.2.0": + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: 10c0/73b67f4638b41cde56254e6354e46ae3a2ebc08279583f6af3d96fe4664fc75788f74ed0d18ca44fa4a98491b69434f9eee73b97bb5314bd1b5adb700f5c18d6 + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"pause@npm:0.0.1": + version: 0.0.1 + resolution: "pause@npm:0.0.1" + checksum: 10c0/f362655dfa7f44b946302c5a033148852ed5d05f744bd848b1c7eae6a543f743e79c7751ee896ba519fd802affdf239a358bb2ea5ca1b1c1e4e916279f83ab75 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 + languageName: node + linkType: hard + +"pify@npm:5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 10c0/9f6f3cd1f159652692f514383efe401a06473af35a699962230ad1c4c9796df5999961461fc1a3b81eed8e3e74adb8bd032474fb3f93eb6bdbd9f33328da1ed2 + languageName: node + linkType: hard + +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf + languageName: node + linkType: hard + +"pirates@npm:^4.0.7": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.10": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss@npm:^8.3.11": + version: 8.5.1 + resolution: "postcss@npm:8.5.1" + dependencies: + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.2 + resolution: "prebuild-install@npm:7.1.2" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: "npm:^1.1.2" + checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab + languageName: node + linkType: hard + +"prettier@npm:^3.1.1": + version: 3.4.2 + resolution: "prettier@npm:3.4.2" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 + languageName: node + linkType: hard + +"pretty-format@npm:30.0.5, pretty-format@npm:^30.0.0": + version: 30.0.5 + resolution: "pretty-format@npm:30.0.5" + dependencies: + "@jest/schemas": "npm:30.0.5" + ansi-styles: "npm:^5.2.0" + react-is: "npm:^18.3.1" + checksum: 10c0/9f6cf1af5c3169093866c80adbfdad32f69c692b62f24ba3ca8cdec8519336123323f896396f9fa40346a41b197c5f6be15aec4d8620819f12496afaaca93f81 + languageName: node + linkType: hard + +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + +"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + +"proggy@npm:^2.0.0": + version: 2.0.0 + resolution: "proggy@npm:2.0.0" + checksum: 10c0/1bfc14fa95769e6dd7e91f9d3cae8feb61e6d833ed7210d87ee5413bfa068f4ee7468483da96b2f138c40a7e91a2307f5d5d2eb6de9761c21e266a34602e6a5f + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: 10c0/f1af0c7b0067e84d64751148ee5bb6c3e84f4a4d1316d6fe56261e1d2637cf71b49894bcbd2c6daf7d45afb1bc99efc3749be277c3e0518b70d0c5a29d037011 + languageName: node + linkType: hard + +"promise-call-limit@npm:^3.0.1": + version: 3.0.2 + resolution: "promise-call-limit@npm:3.0.2" + checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc + languageName: node + linkType: hard + +"promise-limit@npm:^2.7.0": + version: 2.7.0 + resolution: "promise-limit@npm:2.7.0" + checksum: 10c0/ce220a7e11c8d0541940a3d99cc424bd16a18451b295a263f6dbaa998585d2d1afa71fcb7bb29078a61e214d2f13d96e9b082e96e8e357fbe5c5936ef2459cba + languageName: node + linkType: hard + +"promise-polyfill@npm:^1.1.6": + version: 1.1.6 + resolution: "promise-polyfill@npm:1.1.6" + checksum: 10c0/055859bba9da0b26994c6521473794cd3bd523f7cf61c5554c4a279ff86a3c11be21d222995d469efffa9b26b96577535286ded5566e4dc4d7c26338dfdf52c7 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"promise.prototype.finally@npm:^3.1.2": + version: 3.1.8 + resolution: "promise.prototype.finally@npm:3.1.8" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.0.0" + set-function-name: "npm:^2.0.1" + checksum: 10c0/5d56eaa3531c3fc03fdd5eef3b3270b3098ff158a4c82261331c9dca3f4f2b5e1c86a2a6a34e752ea978b8736cc7c130dda78ce53f8933d456c24a3c5749482e + languageName: node + linkType: hard + +"promise@npm:^7.0.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: "npm:~2.0.3" + checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f + languageName: node + linkType: hard + +"promzard@npm:^1.0.0": + version: 1.0.2 + resolution: "promzard@npm:1.0.2" + dependencies: + read: "npm:^3.0.1" + checksum: 10c0/d53c4ecb8b606b7e4bdeab14ac22c5f81a57463d29de1b8fe43bbc661106d9e4a79d07044bd3f69bde82c7ebacba7307db90a9699bc20482ce637bdea5fb8e4b + languageName: node + linkType: hard + +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.1 + resolution: "protocols@npm:2.0.1" + checksum: 10c0/016cc58a596e401004a028a2f7005e3444bf89ee8f606409c411719374d1e8bba0464fc142a065cce0d19f41669b2f7ffe25a8bde4f16ce3b6eb01fabc51f2e7 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"pseudomap@npm:^1.0.2": + version: 1.0.2 + resolution: "pseudomap@npm:1.0.2" + checksum: 10c0/5a91ce114c64ed3a6a553aa7d2943868811377388bb31447f9d8028271bae9b05b340fe0b6961a64e45b9c72946aeb0a4ab635e8f7cb3715ffd0ff2beeb6a679 + languageName: node + linkType: hard + +"psl@npm:^1.1.28": + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a + languageName: node + linkType: hard + +"pug-attrs@npm:^3.0.0": + version: 3.0.0 + resolution: "pug-attrs@npm:3.0.0" + dependencies: + constantinople: "npm:^4.0.1" + js-stringify: "npm:^1.0.2" + pug-runtime: "npm:^3.0.0" + checksum: 10c0/28178e91c05e8eb9130861c78dccc61eae3e1610931346065bd32ad0b08b023a8dcf2470c3b2409ba45a5098d6d7ed15687717e91cf77770c6381a18626e5194 + languageName: node + linkType: hard + +"pug-code-gen@npm:^3.0.3": + version: 3.0.3 + resolution: "pug-code-gen@npm:3.0.3" + dependencies: + constantinople: "npm:^4.0.1" + doctypes: "npm:^1.1.0" + js-stringify: "npm:^1.0.2" + pug-attrs: "npm:^3.0.0" + pug-error: "npm:^2.1.0" + pug-runtime: "npm:^3.0.1" + void-elements: "npm:^3.1.0" + with: "npm:^7.0.0" + checksum: 10c0/517a93930dbc80bc7fa5f60ff324229a07cc5ab70ed9d344ce105e2fe24de68db5121c8457a9ba99cdc8d48dd18779dd34956ebfcab009b3c1c6843a3cade109 + languageName: node + linkType: hard + +"pug-error@npm:^2.0.0, pug-error@npm:^2.1.0": + version: 2.1.0 + resolution: "pug-error@npm:2.1.0" + checksum: 10c0/bbce339b17fab9890de84975c0cd8723a847bf65f35653d3ebcf77018e8ad91529d56e978ab80f4c64c9f4f07ef9e56e7a9fda3be44249c344a93ba11fccff79 + languageName: node + linkType: hard + +"pug-filters@npm:^4.0.0": + version: 4.0.0 + resolution: "pug-filters@npm:4.0.0" + dependencies: + constantinople: "npm:^4.0.1" + jstransformer: "npm:1.0.0" + pug-error: "npm:^2.0.0" + pug-walk: "npm:^2.0.0" + resolve: "npm:^1.15.1" + checksum: 10c0/7ddd62f5eb97f5242858bd56d93ffed387fef3742210a53770c980020cf91a34384b84b7fc8f0de185b43dfa77de2c4d0f63f575a4c5b3887fdef4e64b8d559d + languageName: node + linkType: hard + +"pug-lexer@npm:^5.0.1": + version: 5.0.1 + resolution: "pug-lexer@npm:5.0.1" + dependencies: + character-parser: "npm:^2.2.0" + is-expression: "npm:^4.0.0" + pug-error: "npm:^2.0.0" + checksum: 10c0/24195a5681953ab91c6a3ccd80a643f760dddb65e2f266bf8ccba145018ba0271536efe1572de2c2224163eb00873c2f1df0ad7ea7aa8bcbf79a66b586ca8435 + languageName: node + linkType: hard + +"pug-linker@npm:^4.0.0": + version: 4.0.0 + resolution: "pug-linker@npm:4.0.0" + dependencies: + pug-error: "npm:^2.0.0" + pug-walk: "npm:^2.0.0" + checksum: 10c0/db754ff34cdd4ba9d9e2d9535cce2a74178f2172e848a5fa6381907cb5bfaa0d39d4cc3eb29893d35fc1c417e83ae3cfd434640ba7d3b635c63199104fae976c + languageName: node + linkType: hard + +"pug-load@npm:^3.0.0": + version: 3.0.0 + resolution: "pug-load@npm:3.0.0" + dependencies: + object-assign: "npm:^4.1.1" + pug-walk: "npm:^2.0.0" + checksum: 10c0/2a7659dfaf9872dd25d851f85e4c27fa447d907b1db3540030cd844614159ff181e067d8f2bedf90eb6b5b1ff03747253859ecbbb822e40f4834b15591d4e108 + languageName: node + linkType: hard + +"pug-parser@npm:^6.0.0": + version: 6.0.0 + resolution: "pug-parser@npm:6.0.0" + dependencies: + pug-error: "npm:^2.0.0" + token-stream: "npm:1.0.0" + checksum: 10c0/faa6cec43afdeb2705eb8c68dfdb2e65836238df8043ae55295ffb72450b8c7a990ea1be60adbde19f58988b9e1d18a84ea42453e2c4f104d0031f78fda737b2 + languageName: node + linkType: hard + +"pug-runtime@npm:^3.0.0, pug-runtime@npm:^3.0.1": + version: 3.0.1 + resolution: "pug-runtime@npm:3.0.1" + checksum: 10c0/0db8166d2e17695a6941d1de81dcb21c8a52921299b1e03bf6a0a3d2b0036b51cf98101b3937b731c745e8d3e0268cb0b728c02f61a80a25fcfaa15c594fb1be + languageName: node + linkType: hard + +"pug-strip-comments@npm:^2.0.0": + version: 2.0.0 + resolution: "pug-strip-comments@npm:2.0.0" + dependencies: + pug-error: "npm:^2.0.0" + checksum: 10c0/ca498adedaeba51dd836b20129bbd161e2d5a397a2baaa553b1e74e888caa2258dcd7326396fc6f8fed8c7b7f906cfebc4c386ccbee8888a27b2ca0d4d86d206 + languageName: node + linkType: hard + +"pug-walk@npm:^2.0.0": + version: 2.0.0 + resolution: "pug-walk@npm:2.0.0" + checksum: 10c0/005d63177bcf057f5a618b182f6d4600afb039200b07a381a0d89288a2b3126e763a0a6c40b758eab0731c8e63cad1bbcb46d96803b9ae9cfc879f6ef5a0f8f4 + languageName: node + linkType: hard + +"pug@npm:^3.0.2": + version: 3.0.3 + resolution: "pug@npm:3.0.3" + dependencies: + pug-code-gen: "npm:^3.0.3" + pug-filters: "npm:^4.0.0" + pug-lexer: "npm:^5.0.1" + pug-linker: "npm:^4.0.0" + pug-load: "npm:^3.0.0" + pug-parser: "npm:^6.0.0" + pug-runtime: "npm:^3.0.1" + pug-strip-comments: "npm:^2.0.0" + checksum: 10c0/bda53d3a6deea1d348cd5ab17427c77f3d74165510ad16f4fd182cc63618ad09388ecda317d17122ee890c8a68f9a54b96221fce7f44a332e463fdbb10a9d1e2 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"pure-rand@npm:^7.0.0": + version: 7.0.1 + resolution: "pure-rand@npm:7.0.1" + checksum: 10c0/9cade41030f5ec95f5d55a11a71404cd6f46b69becaad892097cd7f58e2c6248cd0a933349ca7d21336ab629f1da42ffe899699b671bc4651600eaf6e57f837e + languageName: node + linkType: hard + +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" + dependencies: + side-channel: "npm:^1.0.6" + checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 + languageName: node + linkType: hard + +"qs@npm:^6.11.0, qs@npm:^6.5.1": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c + languageName: node + linkType: hard + +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.1.2, queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: 10c0/f9b1596fa7595a35c2f9d913ac312fede13d37dc8a747a51557ab36e11ce113bbe88ef4c0154968845559a7709cb6a7e7cbe75f7972182451cd45e7f057a334d + languageName: node + linkType: hard + +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da + languageName: node + linkType: hard + +"random-bytes@npm:~1.0.0": + version: 1.0.0 + resolution: "random-bytes@npm:1.0.0" + checksum: 10c0/71e7a600e0976e9ebc269793a0577d47b965fa678fcc9e9623e427f909d1b3669db5b3a178dbf61229f0724ea23dba64db389f0be0ba675c6a6b837c02f29b8f + languageName: node + linkType: hard + +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"rdf-canonize@npm:^1.0.2": + version: 1.2.0 + resolution: "rdf-canonize@npm:1.2.0" + dependencies: + node-forge: "npm:^0.10.0" + semver: "npm:^6.3.0" + checksum: 10c0/d0955b79caa43c60a74c544163486bdb1b7462e8c4373e9bfae36afc93fb849271fb4fe2c228613d24b9c9f22195b5ed17f1cc6787538853e3dec1d0df1d3d10 + languageName: node + linkType: hard + +"rdf-canonize@npm:^2.0.1": + version: 2.0.1 + resolution: "rdf-canonize@npm:2.0.1" + dependencies: + semver: "npm:^6.3.0" + setimmediate: "npm:^1.0.5" + checksum: 10c0/2a3e158c8a2354aa5682d341c420d815b421325979c06d02e00f45dd7f3b4ef751dd0d072b227a16ebd1e5dbb1f82226a58d5b9cc6cfd246fc53fc04f7b613d0 + languageName: node + linkType: hard + +"rdf-canonize@npm:^3.4.0": + version: 3.4.0 + resolution: "rdf-canonize@npm:3.4.0" + dependencies: + setimmediate: "npm:^1.0.5" + checksum: 10c0/c78ccd8ff99abf749005f6c596d5ceb16edd7a9508e430cd636b89fba8f75e5698f2dd8294aeca389463b1f983326f8d50c9d4ad0a9195cf945f02731a720dea + languageName: node + linkType: hard + +"rdf-canonize@npm:^4.0.1": + version: 4.0.1 + resolution: "rdf-canonize@npm:4.0.1" + dependencies: + setimmediate: "npm:^1.0.5" + checksum: 10c0/8f6040847c5731817cc5ad95ca16caa588fba76c94ee3b24f282c9a3054f36226560bcb33bed8a173903960af1b9937e21db6e0dc2e90caa749682fff8228250 + languageName: node + linkType: hard + +"rdf-data-factory@npm:^1.1.0, rdf-data-factory@npm:^1.1.2": + version: 1.1.3 + resolution: "rdf-data-factory@npm:1.1.3" + dependencies: + "@rdfjs/types": "npm:^1.0.0" + checksum: 10c0/b5f5db1417afd72e690c60b0eb19388b0ed519e8d732419ccee4d3a5c15fa8cfd1b16380c9692dec26245a9bbf5ce2cb07360645d60e995337c34796da0c990a + languageName: node + linkType: hard + +"rdf-data-model@npm:^1.0.0": + version: 1.0.0 + resolution: "rdf-data-model@npm:1.0.0" + bin: + rdf-data-model-test: ./bin/test.js + checksum: 10c0/36a1a4961a186f832bc89d4831c3adafb7dbb9305e144ea7cc2a2df27c8a7df6d546f2481931f95eb081299a32d2223f7c4163d3cd18492773b443f1c938bdbc + languageName: node + linkType: hard + +"rdf-isomorphic@npm:^1.3.0": + version: 1.3.1 + resolution: "rdf-isomorphic@npm:1.3.1" + dependencies: + "@rdfjs/types": "npm:*" + hash.js: "npm:^1.1.7" + rdf-string: "npm:^1.6.0" + rdf-terms: "npm:^1.7.0" + checksum: 10c0/6da5545654045b643d12510e946677a6d724282dfeb58f215c26fa46cae1c525bfad4820bda7765f49902ee0cc75cffbcf646ca1e984ec35d71c8008ad3e6e83 + languageName: node + linkType: hard + +"rdf-parse@npm:^1.7.0": + version: 1.9.1 + resolution: "rdf-parse@npm:1.9.1" + dependencies: + "@comunica/actor-http-native": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html-microdata": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html-rdfa": "npm:~1.22.0" + "@comunica/actor-rdf-parse-html-script": "npm:~1.22.0" + "@comunica/actor-rdf-parse-jsonld": "npm:^1.22.0" + "@comunica/actor-rdf-parse-n3": "npm:~1.22.0" + "@comunica/actor-rdf-parse-rdfxml": "npm:~1.22.0" + "@comunica/actor-rdf-parse-xml-rdfa": "npm:~1.22.0" + "@comunica/bus-http": "npm:~1.22.0" + "@comunica/bus-init": "npm:~1.22.0" + "@comunica/bus-rdf-parse": "npm:~1.22.0" + "@comunica/bus-rdf-parse-html": "npm:~1.22.0" + "@comunica/core": "npm:~1.22.0" + "@comunica/mediator-combine-union": "npm:~1.22.0" + "@comunica/mediator-number": "npm:~1.22.0" + "@comunica/mediator-race": "npm:~1.22.0" + "@rdfjs/types": "npm:*" + stream-to-string: "npm:^1.2.0" + checksum: 10c0/b9d99f2ce16abc870e90425f626ce25ff861d389ebd1a8644313367c562551fb695c2088ea9ea72402d178238b89f67235d79d68a8e0819b2c1cad79fd9e3bea + languageName: node + linkType: hard + +"rdf-string@npm:^1.6.0": + version: 1.6.3 + resolution: "rdf-string@npm:1.6.3" + dependencies: + "@rdfjs/types": "npm:*" + rdf-data-factory: "npm:^1.1.0" + checksum: 10c0/d7fca91d659f1631708670efefe4d8243b55f18a74adb384b385f7562d3c1a7c7f0a64da09c094e08aced8dc9cfd870eadbec4fe97030d78a90ec69187f6a53c + languageName: node + linkType: hard + +"rdf-terms@npm:^1.7.0": + version: 1.11.0 + resolution: "rdf-terms@npm:1.11.0" + dependencies: + "@rdfjs/types": "npm:*" + rdf-data-factory: "npm:^1.1.0" + rdf-string: "npm:^1.6.0" + checksum: 10c0/9603eef8b05c8254f1d12a75db894de85eb291fd1cff167d5dd4a3854ff7677ad6baea9ebbb164bc0ad0cbe37ab4317e96de61e98297937ea9237956ac951fab + languageName: node + linkType: hard + +"rdfa-streaming-parser@npm:^1.5.0": + version: 1.5.0 + resolution: "rdfa-streaming-parser@npm:1.5.0" + dependencies: + "@rdfjs/types": "npm:*" + htmlparser2: "npm:^6.0.0" + rdf-data-factory: "npm:^1.1.0" + relative-to-absolute-iri: "npm:^1.0.2" + checksum: 10c0/d2482dce371d90ca3c19b97b57b9c17ad07be5990bc6c11ec9b4a57f761ff5433567555ed87fa66144412a9239053d0b7cee85c370e4f02098b0338c2da971ba + languageName: node + linkType: hard + +"rdfxml-streaming-parser@npm:^1.5.0": + version: 1.5.0 + resolution: "rdfxml-streaming-parser@npm:1.5.0" + dependencies: + "@rdfjs/types": "npm:*" + rdf-data-factory: "npm:^1.1.0" + relative-to-absolute-iri: "npm:^1.0.0" + sax: "npm:^1.2.4" + checksum: 10c0/37a75a10608051f433d3c267b91f495f310ad1a65d7897b6c823311702c8ab2a11b2b54b64869fc2564f2792e426714c1cca478eb0105ce658caafdd78353d66 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0, react-is@npm:^18.3.1": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + +"read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": + version: 4.0.0 + resolution: "read-cmd-shim@npm:4.0.0" + checksum: 10c0/e62db17ec9708f1e7c6a31f0a46d43df2069d85cf0df3b9d1d99e5ed36e29b1e8b2f8a427fd8bbb9bc40829788df1471794f9b01057e4b95ed062806e4df5ba9 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10c0/37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 + languageName: node + linkType: hard + +"read-pkg-up@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg-up@npm:3.0.0" + dependencies: + find-up: "npm:^2.0.0" + read-pkg: "npm:^3.0.0" + checksum: 10c0/2cd0a180260b0d235990e6e9c8c2330a03882d36bc2eba8930e437ef23ee52a68a894e7e1ccb1c33f03bcceb270a861ee5f7eac686f238857755e2cddfb48ffd + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: "npm:^4.1.0" + read-pkg: "npm:^5.2.0" + type-fest: "npm:^0.8.1" + checksum: 10c0/82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: "npm:^4.0.0" + normalize-package-data: "npm:^2.3.2" + path-type: "npm:^3.0.0" + checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": "npm:^2.4.0" + normalize-package-data: "npm:^2.5.0" + parse-json: "npm:^5.0.0" + type-fest: "npm:^0.6.0" + checksum: 10c0/b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb + languageName: node + linkType: hard + +"read@npm:^3.0.1": + version: 3.0.1 + resolution: "read@npm:3.0.1" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/af524994ff7cf94aa3ebd268feac509da44e58be7ed2a02775b5ee6a7d157b93b919e8c5ead91333f86a21fbb487dc442760bc86354c18b84d334b8cec33723a + languageName: node + linkType: hard + +"readable-stream-node-to-web@npm:^1.0.1": + version: 1.0.1 + resolution: "readable-stream-node-to-web@npm:1.0.1" + checksum: 10c0/9ad4bde9ac06b7dc0b202f77ba632ee012c4782a40139d7a78ecea9d5503867181ab9871e40576891f1adde35203b795e3b46ce30c5fbbab3421404d93561442 + languageName: node + linkType: hard + +"readable-stream@npm:1.1": + version: 1.1.13 + resolution: "readable-stream@npm:1.1.13" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.1" + isarray: "npm:0.0.1" + string_decoder: "npm:~0.10.x" + checksum: 10c0/fb8edd73a37e58fdb35d006370c6cde2912c993483479fe9be232ee0aa8f0b12058f0662602760c7a678887415198888c2f8d864b7ba6ab57683e1b3774d9e66 + languageName: node + linkType: hard + +"readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readable-stream@npm:^4.0.0": + version: 4.7.0 + resolution: "readable-stream@npm:4.7.0" + dependencies: + abort-controller: "npm:^3.0.0" + buffer: "npm:^6.0.3" + events: "npm:^3.3.0" + process: "npm:^0.11.10" + string_decoder: "npm:^1.3.0" + checksum: 10c0/fd86d068da21cfdb10f7a4479f2e47d9c0a9b0c862fc0c840a7e5360201580a55ac399c764b12a4f6fa291f8cee74d9c4b7562e0d53b3c4b2769f2c98155d957 + languageName: node + linkType: hard + +"readable-stream@npm:~1.0.2": + version: 1.0.34 + resolution: "readable-stream@npm:1.0.34" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.1" + isarray: "npm:0.0.1" + string_decoder: "npm:~0.10.x" + checksum: 10c0/02272551396ed8930ddee1a088bdf0379f0f7cc47ac49ed8804e998076cb7daec9fbd2b1fd9c0490ec72e56e8bb3651abeb8080492b8e0a9c3f2158330908ed6 + languageName: node + linkType: hard + +"readable-web-to-node-stream@npm:^3.0.2": + version: 3.0.2 + resolution: "readable-web-to-node-stream@npm:3.0.2" + dependencies: + readable-stream: "npm:^3.6.0" + checksum: 10c0/533d5cd1580232a2c753e52a245be13fc552e6f82c5053a8a8da7ea1063d73a34f936a86b3d4433cdb4a13dd683835cfc87f230936cb96d329a1e28b6040f42e + languageName: node + linkType: hard + +"recursive-watch@npm:^1.1.4": + version: 1.1.4 + resolution: "recursive-watch@npm:1.1.4" + dependencies: + ttl: "npm:^1.3.0" + bin: + recursive-watch: ./bin.js + checksum: 10c0/6bd6da1d85eb09a08bb9b4631fc5e2b79383d252d897c6fd3d0d5e3c334b0bb3ac6b4d1d64c169ef52814552410802fd7404ddabe55327e4d2a21a601925ef2f + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: "npm:^4.0.0" + strip-indent: "npm:^3.0.0" + checksum: 10c0/d64a6b5c0b50eb3ddce3ab770f866658a2b9998c678f797919ceb1b586bab9259b311407280bd80b804e2a7c7539b19238ae6a2a20c843f1a7fcff21d48c2eae + languageName: node + linkType: hard + +"redis-commands@npm:1.7.0": + version: 1.7.0 + resolution: "redis-commands@npm:1.7.0" + checksum: 10c0/c78b46d8d6e811f422961878538c57048a451ab56760d3f1657a7c8f29aaae42cc23890f75655556a59ec67611022e18cb443d2976e6c55036934bfe783aa60e + languageName: node + linkType: hard + +"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": + version: 1.2.0 + resolution: "redis-errors@npm:1.2.0" + checksum: 10c0/5b316736e9f532d91a35bff631335137a4f974927bb2fb42bf8c2f18879173a211787db8ac4c3fde8f75ed6233eb0888e55d52510b5620e30d69d7d719c8b8a7 + languageName: node + linkType: hard + +"redis-parser@npm:^3.0.0": + version: 3.0.0 + resolution: "redis-parser@npm:3.0.0" + dependencies: + redis-errors: "npm:^1.0.0" + checksum: 10c0/ee16ac4c7b2a60b1f42a2cdaee22b005bd4453eb2d0588b8a4939718997ae269da717434da5d570fe0b05030466eeb3f902a58cf2e8e1ca058bf6c9c596f632f + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.1" + which-builtin-type: "npm:^1.2.1" + checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 + languageName: node + linkType: hard + +"regexpp@npm:^3.0.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: 10c0/d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710 + languageName: node + linkType: hard + +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.2.0" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.12.0" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.1.0" + checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: "npm:~3.0.2" + bin: + regjsparser: bin/parser + checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b + languageName: node + linkType: hard + +"relative-to-absolute-iri@npm:^1.0.0, relative-to-absolute-iri@npm:^1.0.2, relative-to-absolute-iri@npm:^1.0.5": + version: 1.0.7 + resolution: "relative-to-absolute-iri@npm:1.0.7" + checksum: 10c0/8301941bb1c33818fd312d6729c91cbed47ee960963a35048e7331d88e5ded6eaaae608c33d3840ddcb959310dbf5041dfa5165540faba99334c5c53de721013 + languageName: node + linkType: hard + +"request@npm:^2.88.0": + version: 2.88.2 + resolution: "request@npm:2.88.2" + dependencies: + aws-sign2: "npm:~0.7.0" + aws4: "npm:^1.8.0" + caseless: "npm:~0.12.0" + combined-stream: "npm:~1.0.6" + extend: "npm:~3.0.2" + forever-agent: "npm:~0.6.1" + form-data: "npm:~2.3.2" + har-validator: "npm:~5.1.3" + http-signature: "npm:~1.2.0" + is-typedarray: "npm:~1.0.0" + isstream: "npm:~0.1.2" + json-stringify-safe: "npm:~5.0.1" + mime-types: "npm:~2.1.19" + oauth-sign: "npm:~0.9.0" + performance-now: "npm:^2.1.0" + qs: "npm:~6.5.2" + safe-buffer: "npm:^5.1.2" + tough-cookie: "npm:~2.5.0" + tunnel-agent: "npm:^0.6.0" + uuid: "npm:^3.3.2" + checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"resolve-alpn@npm:^1.0.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve.exports@npm:2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.15.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.15.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 + languageName: node + linkType: hard + +"responselike@npm:^2.0.0": + version: 2.0.1 + resolution: "responselike@npm:2.0.1" + dependencies: + lowercase-keys: "npm:^2.0.0" + checksum: 10c0/360b6deb5f101a9f8a4174f7837c523c3ec78b7ca8a7c1d45a1062b303659308a23757e318b1e91ed8684ad1205721142dd664d94771cd63499353fd4ee732b5 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rimraf@npm:^4.4.1": + version: 4.4.1 + resolution: "rimraf@npm:4.4.1" + dependencies: + glob: "npm:^9.2.0" + bin: + rimraf: dist/cjs/src/bin.js + checksum: 10c0/8c5e142d26d8b222be9dc9a1a41ba48e95d8f374e813e66a8533e87c6180174fcb3f573b9b592eca12740ebf8b78526d136acd971d4a790763d6f2232c34fa24 + languageName: node + linkType: hard + +"rsync@npm:^0.6.1": + version: 0.6.1 + resolution: "rsync@npm:0.6.1" + checksum: 10c0/90f6717177ae681d357806153aa27e0598c605ffe01a6c24671f96994146a594c9eebf7251b772e94ca1d1a673628dce4836e6771f0c20e0f41a57c18ccd2da7 + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.2, safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" + isarray: "npm:^2.0.5" + checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safe-push-apply@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-push-apply@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + isarray: "npm:^2.0.5" + checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:^2.1.2, safer-buffer@npm:~2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"sanitize-html@npm:^2.6.1": + version: 2.14.0 + resolution: "sanitize-html@npm:2.14.0" + dependencies: + deepmerge: "npm:^4.2.2" + escape-string-regexp: "npm:^4.0.0" + htmlparser2: "npm:^8.0.0" + is-plain-object: "npm:^5.0.0" + parse-srcset: "npm:^1.0.2" + postcss: "npm:^8.3.11" + checksum: 10c0/7e001ab18d09ce5c4d0dbb6837c7a36f132874267e5b724cdef79b21188b55e652a591d79d297f9473aaf80cf96bb1894c3fa1046ccba977ed9aa365d6eb3a5c + languageName: node + linkType: hard + +"sax@npm:^1.2.4": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c + languageName: node + linkType: hard + +"security-context@npm:^4.0.0": + version: 4.0.0 + resolution: "security-context@npm:4.0.0" + checksum: 10c0/234e466945bdaf8dedf9538ebb88b6041485076de3ce74af4fa9ad90ecb38df59ffd050aac888c513484de3a45a7e09c603692e72c0dcbce24f024e2ed03ac3c + languageName: node + linkType: hard + +"semapps-middleware@workspace:.": + version: 0.0.0-use.local + resolution: "semapps-middleware@workspace:." + dependencies: + "@types/dotenv-flow": "npm:^3.3.3" + "@types/ioredis": "npm:^4.27.0" + "@types/node-fetch": "npm:^2.6.13" + "@types/streamify-string": "npm:^1.0.4" + "@typescript-eslint/eslint-plugin": "npm:^7.1.1" + "@typescript-eslint/parser": "npm:^7.5.0" + eslint: "npm:^8.2.0" + eslint-config-airbnb: "npm:^19.0.4" + eslint-config-prettier: "npm:^9.1.0" + eslint-import-resolver-typescript: "npm:^3.6.1" + eslint-plugin-import: "npm:^2.29.1" + eslint-plugin-jest: "npm:^27.9.0" + eslint-plugin-jsdoc: "npm:^48.2.1" + eslint-plugin-node: "npm:^11.1.0" + eslint-plugin-prettier: "npm:^5.1.3" + lerna: "npm:^8.0.1" + moleculer: "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + nx: "npm:17.2.5" + prettier: "npm:^3.1.1" + typescript: "npm:^5.9.2" + languageName: unknown + linkType: soft + +"semapps-tests@workspace:tests": + version: 0.0.0-use.local + resolution: "semapps-tests@workspace:tests" + dependencies: + "@babel/core": "npm:^7.28.0" + "@babel/plugin-transform-runtime": "npm:^7.28.0" + "@babel/preset-env": "npm:^7.28.0" + "@babel/preset-typescript": "npm:^7.27.1" + "@jest/globals": "npm:^30.0.5" + "@rdfjs/data-model": "npm:^1.3.4" + "@semapps/activitypub": "npm:1.1.4" + "@semapps/auth": "npm:1.1.4" + "@semapps/core": "npm:1.1.4" + "@semapps/crypto": "npm:1.1.4" + "@semapps/inference": "npm:1.1.4" + "@semapps/jsonld": "npm:1.1.4" + "@semapps/ldp": "npm:1.1.4" + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + "@semapps/ontologies": "npm:1.1.4" + "@semapps/sync": "npm:1.1.4" + "@semapps/triplestore": "npm:1.1.4" + "@semapps/webacl": "npm:1.1.4" + "@semapps/webid": "npm:1.1.4" + "@types/ioredis": "npm:^4.27.0" + "@types/jest": "npm:^30.0.0" + babel-jest: "npm:^30.0.5" + babel-plugin-transform-import-meta: "npm:^2.3.3" + babel-preset-vite: "npm:^1.1.3" + dotenv-flow: "npm:^3.1.0" + expect-type: "npm:^1.2.2" + fs-extra: "npm:^9.0.1" + http-link-header: "npm:^1.1.1" + ioredis: "npm:^4.27.0" + jest: "npm:^30.0.5" + lru-cache: "npm:10.1.0" + moleculer: "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + moleculer-web: "npm:^0.10.7" + node-fetch: "npm:^2.6.6" + rdf-data-model: "npm:^1.0.0" + supertest: "npm:^4.0.2" + url-join: "npm:^4.0.1" + wait-for-expect: "npm:^3.0.2" + languageName: unknown + linkType: soft + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:7.5.3": + version: 7.5.3 + resolution: "semver@npm:7.5.3" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/4cf3bab7e8cf8c2ae521fc4bcc50a4d6912a836360796b23b9f1c26f45d27a73f870e47664df4770bde0dd60dc4d4781a05fd49fe91d72376ea5519b9e791459 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"semver@npm:^7.7.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 + languageName: node + linkType: hard + +"serialize-error@npm:^5.0.0": + version: 5.0.0 + resolution: "serialize-error@npm:5.0.0" + dependencies: + type-fest: "npm:^0.8.0" + checksum: 10c0/6934419798421a14536178d7ab70b9676dc747813817ec9841c96aeb87759f436a71feb241593c6f6aa9a697c0429285aef892d459e7d8cd5156b1d35f1606a1 + languageName: node + linkType: hard + +"serialize-error@npm:^8.1.0": + version: 8.1.0 + resolution: "serialize-error@npm:8.1.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/8cfd89f43ca93e283c5f1d16178a536bdfac9bc6029f4a9df988610cc399bc4f2478d1f10ce40b9dff66b863a5158a19b438fbec929045c96d92174f6bca1e88 + languageName: node + linkType: hard + +"serve-static@npm:^1.14.1": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.19.0" + checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" + dependencies: + dunder-proto: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"sharp@npm:^0.31.2": + version: 0.31.3 + resolution: "sharp@npm:0.31.3" + dependencies: + color: "npm:^4.2.3" + detect-libc: "npm:^2.0.1" + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + semver: "npm:^7.3.8" + simple-get: "npm:^4.0.1" + tar-fs: "npm:^2.1.1" + tunnel-agent: "npm:^0.6.0" + checksum: 10c0/22cab24b7145546f25cd5e2a27841880405335ddeeb4e05be6e32d4221baac4fd89d0fb31c397a0cea31b6f1b6b139d4eb49d036cdba1f33175ffa0b1a4eccfc + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: "npm:^1.0.0" + checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"sigstore@npm:^2.2.0": + version: 2.3.1 + resolution: "sigstore@npm:2.3.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + "@sigstore/sign": "npm:^2.3.2" + "@sigstore/tuf": "npm:^2.3.4" + "@sigstore/verify": "npm:^1.2.1" + checksum: 10c0/8906b1074130d430d707e46f15c66eb6996891dc0d068705f1884fb1251a4a367f437267d44102cdebcee34f1768b3f30131a2ec8fb7aac74ba250903a459aa7 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: "npm:^0.3.1" + checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 + languageName: node + linkType: hard + +"slash@npm:3.0.0, slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slashes@npm:^3.0.12": + version: 3.0.12 + resolution: "slashes@npm:3.0.12" + checksum: 10c0/71ca2a1fcd1ab6814b0fdb8cf9c33a3d54321deec2aa8d173510f0086880201446021a9b9e6a18561f7c472b69a2145977c6a8fb9c53a8ff7be31778f203d175 + languageName: node + linkType: hard + +"slick@npm:^1.12.2": + version: 1.12.2 + resolution: "slick@npm:1.12.2" + checksum: 10c0/fea97c36b2bdcd1b80caea150cd8135dc9d3ffe659bbe04fa6f4b4dff373f5d5aef09a8ef384b331c3fdd9567faf447b75b850ab35d2c69ff8a8a92def3d49e1 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"sodium-native@npm:^3.2.0": + version: 3.4.1 + resolution: "sodium-native@npm:3.4.1" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10c0/b67de94d80a234d348e3bbcd27f39243f974dfdb5e2538b146433c5f2a42ce4697ce3bf5dff8a2803dab16486167e8cc755af426ff2934cb5ca393cb5b116c77 + languageName: node + linkType: hard + +"sort-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "sort-keys@npm:2.0.0" + dependencies: + is-plain-obj: "npm:^1.0.0" + checksum: 10c0/c11a6313995cb67ccf35fed4b1f6734176cc1d1e350ee311c061a2340ada4f7e23b046db064d518b63adba98c0f763739920c59fb4659a0b8482ec7a1f255081 + languageName: node + linkType: hard + +"sorted-array-functions@npm:^1.3.0": + version: 1.3.0 + resolution: "sorted-array-functions@npm:1.3.0" + checksum: 10c0/d94e3401a2bc1689dc913f56939621c892a3ff1288e984e85689a6c6e46b0ec16f65edc8b47d46b0f09d06857f67ca245553b462da597619102b9fad270476d9 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"sparqlalgebrajs@npm:^3.0.1": + version: 3.0.3 + resolution: "sparqlalgebrajs@npm:3.0.3" + dependencies: + "@rdfjs/types": "npm:*" + "@types/sparqljs": "npm:^3.1.2" + fast-deep-equal: "npm:^3.1.3" + minimist: "npm:^1.2.5" + rdf-data-factory: "npm:^1.1.0" + rdf-isomorphic: "npm:^1.3.0" + rdf-string: "npm:^1.6.0" + sparqljs: "npm:^3.4.2" + bin: + sparqlalgebrajs: bin/sparqlalgebrajs.js + checksum: 10c0/4074b864f72857303cbabe2771e790e28429cd732d89d61e541fa3629a333c239b5878e286b88001eb539fd2237e5d57273bff6dae2206da74a7c647f8cfef1d + languageName: node + linkType: hard + +"sparqljs@npm:^3.4.2, sparqljs@npm:^3.5.2": + version: 3.7.3 + resolution: "sparqljs@npm:3.7.3" + dependencies: + rdf-data-factory: "npm:^1.1.2" + bin: + sparqljs: bin/sparql-to-json + checksum: 10c0/733323136c490e6454ced4cdd02023054a8893c3bf9e739ccd39f526a96ef5edcf42352c4f0cf2c90847292a239dfe4c68bd35f044699e2f585601a0c56c1c70 + languageName: node + linkType: hard + +"sparqljson-parse@npm:^1.5.1": + version: 1.7.0 + resolution: "sparqljson-parse@npm:1.7.0" + dependencies: + "@rdfjs/types": "npm:*" + "@types/node": "npm:^13.1.0" + JSONStream: "npm:^1.3.3" + rdf-data-factory: "npm:^1.1.0" + checksum: 10c0/010c94b9bc37e545c3fe2f90c53ac033a652d76bd8075e21bf9fd9d6c78c92081d67c20b3384208e937c2695ff9d849fca8344597fe95653960fe5390f605ecc + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^4.0.0": + version: 4.0.0 + resolution: "spdx-expression-parse@npm:4.0.0" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.21 + resolution: "spdx-license-ids@npm:3.0.21" + checksum: 10c0/ecb24c698d8496aa9efe23e0b1f751f8a7a89faedcdfcbfabae772b546c2db46ccde8f3bc447a238eb86bbcd4f73fea88720ef3b8394f7896381bec3d7736411 + languageName: node + linkType: hard + +"speakingurl@npm:^14.0.1": + version: 14.0.1 + resolution: "speakingurl@npm:14.0.1" + checksum: 10c0/1de1d1b938a7c4d9e79593ff7a26d312ec04a7c3234ca40b7f9b8106daf74ea9d2110a077f5db97ecf3762b83069e3ccbf9694431b51d4fcfd863f0b3333c342 + languageName: node + linkType: hard + +"split2@npm:^3.2.2": + version: 3.2.2 + resolution: "split2@npm:3.2.2" + dependencies: + readable-stream: "npm:^3.0.0" + checksum: 10c0/2dad5603c52b353939befa3e2f108f6e3aff42b204ad0f5f16dd12fd7c2beab48d117184ce6f7c8854f9ee5ffec6faae70d243711dd7d143a9f635b4a285de4e + languageName: node + linkType: hard + +"split@npm:^1.0.1": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: "npm:2" + checksum: 10c0/7f489e7ed5ff8a2e43295f30a5197ffcb2d6202c9cf99357f9690d645b19c812bccf0be3ff336fea5054cda17ac96b91d67147d95dbfc31fbb5804c61962af85 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.1, sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssh2-sftp-client@npm:^7.2.1": + version: 7.2.3 + resolution: "ssh2-sftp-client@npm:7.2.3" + dependencies: + concat-stream: "npm:^2.0.0" + promise-retry: "npm:^2.0.1" + ssh2: "npm:^1.8.0" + checksum: 10c0/780da50d87789af1f943490b1ad11797cf60f20761345c14ba920b90fec845a7fc8e11093ea26ddb4619ea3727fa75d71ca21dca72e6d4f3b7324c985b31801e + languageName: node + linkType: hard + +"ssh2@npm:^1.8.0": + version: 1.16.0 + resolution: "ssh2@npm:1.16.0" + dependencies: + asn1: "npm:^0.2.6" + bcrypt-pbkdf: "npm:^1.0.2" + cpu-features: "npm:~0.0.10" + nan: "npm:^2.20.0" + dependenciesMeta: + cpu-features: + optional: true + nan: + optional: true + checksum: 10c0/d336a85d87501c64ba230b6c1a2901a9b0e376fe7f7a1640a7f8dbdafe674b2e1a5dc6236ffd1329969dc0cf03cd57759b28743075e61229a984065ee1d56bed + languageName: node + linkType: hard + +"sshpk@npm:^1.18.0, sshpk@npm:^1.7.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: "npm:~0.2.3" + assert-plus: "npm:^1.0.0" + bcrypt-pbkdf: "npm:^1.0.0" + dashdash: "npm:^1.12.0" + ecc-jsbn: "npm:~0.1.1" + getpass: "npm:^0.1.1" + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.0.2" + tweetnacl: "npm:~0.14.0" + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0, ssri@npm:^10.0.6": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"stable-hash@npm:^0.0.4": + version: 0.0.4 + resolution: "stable-hash@npm:0.0.4" + checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.6": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"standard-as-callback@npm:^2.1.0": + version: 2.1.0 + resolution: "standard-as-callback@npm:2.1.0" + checksum: 10c0/012677236e3d3fdc5689d29e64ea8a599331c4babe86956bf92fc5e127d53f85411c5536ee0079c52c43beb0026b5ce7aa1d834dd35dd026e82a15d1bcaead1f + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + +"stream-to-string@npm:^1.2.0": + version: 1.2.1 + resolution: "stream-to-string@npm:1.2.1" + dependencies: + promise-polyfill: "npm:^1.1.6" + checksum: 10c0/08b764a17ad7615f5daa188120448dc4d06b097a3c515e337378e1653bc815ad25d388a44e0e2b98b7637841913c42a6734c1f60d142b2e7827f4b41d62d112a + languageName: node + linkType: hard + +"streamify-string@npm:^1.0.1": + version: 1.0.1 + resolution: "streamify-string@npm:1.0.1" + checksum: 10c0/d6b72771ab8a8a15e822a636e3bbe9debe34aa59901cc90a6b8e27cd6f02d52f0335704ed32c4cd69b2dab0a192f503877d53718a51282fe4901f7e9092c8b5b + languageName: node + linkType: hard + +"streamsearch@npm:0.1.2": + version: 0.1.2 + resolution: "streamsearch@npm:0.1.2" + checksum: 10c0/408a3db5b5643c1d6eb65c9d8ccc011b4857bfca41946d808b7f165b5b85f47755b2ff56ec1c4bbbeb5a496afcde9adfea12f9f67bd09ff3f04ae3f1f58d37c6 + languageName: node + linkType: hard + +"string-length@npm:^4.0.2": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: "npm:^1.0.2" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c + languageName: node + linkType: hard + +"string-template@npm:^1.0.0": + version: 1.0.0 + resolution: "string-template@npm:1.0.0" + checksum: 10c0/7c07ab5b4274a50b1f077a47769044b9a8f0a5a4a47811cf3f9ba5acc9d2ff1231d593a93983ea554c3211fb09949e805912f9ce9d7688990eeb41d5008b95d2 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-object-atoms: "npm:^1.0.0" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"string_decoder@npm:~0.10.x": + version: 0.10.31 + resolution: "string_decoder@npm:0.10.31" + checksum: 10c0/1c628d78f974aa7539c496029f48e7019acc32487fc695464f9d6bdfec98edd7d933a06b3216bc2016918f6e75074c611d84430a53cb0e43071597d6c1ac5e25 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: "npm:^1.0.0" + checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": + version: 2.1.0 + resolution: "strong-log-transformer@npm:2.1.0" + dependencies: + duplexer: "npm:^0.1.1" + minimist: "npm:^1.2.0" + through: "npm:^2.3.4" + bin: + sl-log-transformer: bin/sl-log-transformer.js + checksum: 10c0/3c3b8aa8f34d661910563ff996412e2f527fc814e699a376854b554d4a4294ab7e285b4e2c08a080a7b19c5600a9b93a98798d3ac600fe3de545ca6605c07829 + languageName: node + linkType: hard + +"superagent@npm:^3.8.3": + version: 3.8.3 + resolution: "superagent@npm:3.8.3" + dependencies: + component-emitter: "npm:^1.2.0" + cookiejar: "npm:^2.1.0" + debug: "npm:^3.1.0" + extend: "npm:^3.0.0" + form-data: "npm:^2.3.1" + formidable: "npm:^1.2.0" + methods: "npm:^1.1.1" + mime: "npm:^1.4.1" + qs: "npm:^6.5.1" + readable-stream: "npm:^2.3.5" + checksum: 10c0/e467c39aee7aa57dc2e45b5c7c76d70a7ad4fff8d3d2b57a2da0edfaca0e598562fc9f8f74a1383661744f68b3dfd2cca388a3000b41d6c2d8e0e5d031d152fe + languageName: node + linkType: hard + +"supertest@npm:^4.0.2": + version: 4.0.2 + resolution: "supertest@npm:4.0.2" + dependencies: + methods: "npm:^1.1.2" + superagent: "npm:^3.8.3" + checksum: 10c0/436ab991ae9242e695374d0006bf2dd16fbbab287966d0176c92eaf8f9a124a839a0ff6db22f46d1de0faeec3752ff8ebfbe051681c050032acab9f4af192399 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"synckit@npm:^0.11.8": + version: 0.11.11 + resolution: "synckit@npm:0.11.11" + dependencies: + "@pkgr/core": "npm:^0.2.9" + checksum: 10c0/f0761495953d12d94a86edf6326b3a565496c72f9b94c02549b6961fb4d999f4ca316ce6b3eb8ed2e4bfc5056a8de65cda0bd03a233333a35221cd2fdc0e196b + languageName: node + linkType: hard + +"synckit@npm:^0.9.1": + version: 0.9.2 + resolution: "synckit@npm:0.9.2" + dependencies: + "@pkgr/core": "npm:^0.1.0" + tslib: "npm:^2.6.2" + checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59 + languageName: node + linkType: hard + +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": + version: 2.1.2 + resolution: "tar-fs@npm:2.1.2" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10c0/9c704bd4a53be7565caf34ed001d1428532457fe3546d8fc1233f0f0882c3d2403f8602e8046e0b0adeb31fe95336572a69fb28851a391523126b697537670fc + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4, tar-stream@npm:~2.2.0": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"temp-dir@npm:1.0.0": + version: 1.0.0 + resolution: "temp-dir@npm:1.0.0" + checksum: 10c0/648669d5e154d1961217784c786acadccf0156519c19e0aceda7edc76f5bdfa32a40dd7f88ebea9238ed6e3dedf08b846161916c8947058c384761351be90a8e + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^7.1.4" + minimatch: "npm:^3.0.4" + checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 + languageName: node + linkType: hard + +"text-decoding@npm:^1.0.0": + version: 1.0.0 + resolution: "text-decoding@npm:1.0.0" + checksum: 10c0/290dbd6111f39a4020b3e2384de614f90051eff3cd11176329fda0a40ac0b0a07e6820b9aeb4b0b7c2cc7869b62cd3b25944c71e9e16b628bcf57299ab84e311 + languageName: node + linkType: hard + +"text-extensions@npm:^1.0.0": + version: 1.9.0 + resolution: "text-extensions@npm:1.9.0" + checksum: 10c0/9ad5a9f723a871e2d884e132d7e93f281c60b5759c95f3f6b04704856548715d93a36c10dbaf5f12b91bf405f0cf3893bf169d4d143c0f5509563b992d385443 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: "npm:~2.3.6" + xtend: "npm:~4.0.1" + checksum: 10c0/cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + +"tmp@npm:~0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"token-stream@npm:1.0.0": + version: 1.0.0 + resolution: "token-stream@npm:1.0.0" + checksum: 10c0/c1924a89686fc035d579cbe856da12306571d5fe7408eeeebe80df7c25c5cc644b8ae102d5cbc0f085d0e105f391d1a48dc0e568520434c5b444ea6c7de2b822 + languageName: node + linkType: hard + +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: "npm:^1.1.28" + punycode: "npm:^2.1.1" + checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"treeverse@npm:^3.0.0": + version: 3.0.0 + resolution: "treeverse@npm:3.0.0" + checksum: 10c0/286479b9c05a8fb0538ee7d67a5502cea7704f258057c784c9c1118a2f598788b2c0f7a8d89e74648af88af0225b31766acecd78e6060736f09b21dd3fa255db + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: 10c0/03cfefde6c59ff57138412b8c6be922ecc5aec30694d784f2a65ef8dcbd47faef580b7de0c949345abdc56ec4b4abf64dd1e5aea619b200316e471a3dd5bf1f6 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.3.0": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": "npm:^0.0.29" + json5: "npm:^1.0.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^4.1.2": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: "npm:^2.2.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/09a5877402d082bb1134930c10249edeebc0211f36150c35e1c542e5b91f1047b1ccf7da1e59babca1ef1f014c525510f4f870de7c9bda470c73bb4e2721b3ea + languageName: node + linkType: hard + +"tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: "npm:^1.8.1" + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 + languageName: node + linkType: hard + +"ttl@npm:^1.3.0": + version: 1.3.1 + resolution: "ttl@npm:1.3.1" + checksum: 10c0/097d898ceedc4fcdcd767c28c880096c78f5d69ecf6ddd95a0b465abc61f486c8f4f9dda2d527cb159a7d51f3bbdaeb703fff71b6f968a3d12396046ecd6d13c + languageName: node + linkType: hard + +"tuf-js@npm:^2.2.1": + version: 2.2.1 + resolution: "tuf-js@npm:2.2.1" + dependencies: + "@tufjs/models": "npm:2.0.1" + debug: "npm:^4.3.4" + make-fetch-happen: "npm:^13.0.1" + checksum: 10c0/7c17b097571f001730d7be0aeaec6bec46ed2f25bf73990b1133c383d511a1ce65f831e5d6d78770940a85b67664576ff0e4c98e5421bab6d33ff36e4be500c8 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: 10c0/303f5ecf40d03e1d5b635ce7660de3b33c18ed8ebc65d64920c02974d9e684c72483c23f9084587e9dd6466a2ece1da42ddc95b412a461794dd30baca95e2bac + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^0.4.1": + version: 0.4.1 + resolution: "type-fest@npm:0.4.1" + checksum: 10c0/2e65f43209492638244842f70d86e7325361c92dd1cc8e3bf5728c96b980305087fa5ba60652e9053d56c302ef4f1beb9652a91b72a50da0ea66c6b851f3b9cb + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: 10c0/0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: "npm:0.3.0" + mime-types: "npm:~2.1.24" + checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + reflect.getprototypeof: "npm:^1.0.9" + checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + reflect.getprototypeof: "npm:^1.0.6" + checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412 + languageName: node + linkType: hard + +"typescript@npm:>=3 < 6": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa + languageName: node + linkType: hard + +"typescript@npm:^5.9.2": + version: 5.9.2 + resolution: "typescript@npm:5.9.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": + version: 5.9.2 + resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" + bin: + uglifyjs: bin/uglifyjs + checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 + languageName: node + linkType: hard + +"uid-safe@npm:~2.1.5": + version: 2.1.5 + resolution: "uid-safe@npm:2.1.5" + dependencies: + random-bytes: "npm:~1.0.0" + checksum: 10c0/ec96862e859fd12175f3da7fda9d1359a2cf412fd521e10837cbdc6d554774079ce252f366981df9401283841c8924782f6dbee8f82a3a81f805ed8a8584595d + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + which-boxed-primitive: "npm:^1.1.1" + checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 + languageName: node + linkType: hard + +"underscore.string@npm:^3.2.3": + version: 3.3.6 + resolution: "underscore.string@npm:3.3.6" + dependencies: + sprintf-js: "npm:^1.1.1" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/172319c7ef5436587e6f0fb5afe0b2e6b50f723a4070c7fb3454c5dfa5398ed3b7042c049eac2826bdd44d37cbd16b2b965d0ccc1597fde354b1d3a846fd4a39 + languageName: node + linkType: hard + +"underscore@npm:^1.8.3": + version: 1.13.7 + resolution: "underscore@npm:1.13.7" + checksum: 10c0/fad2b4aac48847674aaf3c30558f383399d4fdafad6dd02dd60e4e1b8103b52c5a9e5937e0cc05dacfd26d6a0132ed0410ab4258241240757e4a4424507471cd + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 + languageName: node + linkType: hard + +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf + languageName: node + linkType: hard + +"undici@npm:^5.21.2": + version: 5.28.5 + resolution: "undici@npm:5.28.5" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10c0/4dfaa13089fe4c0758f84ec0d34b257e58608e6be3aa540f493b9864b39e3fdcd0a1ace38e434fe79db55f833aa30bcfddd8d6cbe3e0982b0dcae8ec17b65e08 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"universal-user-agent@npm:^6.0.0": + version: 6.0.1 + resolution: "universal-user-agent@npm:6.0.1" + checksum: 10c0/5c9c46ffe19a975e11e6443640ed4c9e0ce48fcc7203325757a8414ac49940ebb0f4667f2b1fa561489d1eb22cb2d05a0f7c82ec20c5cba42e58e188fb19b187 + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unpipe@npm:1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + +"unrs-resolver@npm:^1.7.11": + version: 1.11.1 + resolution: "unrs-resolver@npm:1.11.1" + dependencies: + "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" + "@unrs/resolver-binding-android-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" + "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" + napi-postinstall: "npm:^0.3.0" + dependenciesMeta: + "@unrs/resolver-binding-android-arm-eabi": + optional: true + "@unrs/resolver-binding-android-arm64": + optional: true + "@unrs/resolver-binding-darwin-arm64": + optional: true + "@unrs/resolver-binding-darwin-x64": + optional: true + "@unrs/resolver-binding-freebsd-x64": + optional: true + "@unrs/resolver-binding-linux-arm-gnueabihf": + optional: true + "@unrs/resolver-binding-linux-arm-musleabihf": + optional: true + "@unrs/resolver-binding-linux-arm64-gnu": + optional: true + "@unrs/resolver-binding-linux-arm64-musl": + optional: true + "@unrs/resolver-binding-linux-ppc64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-musl": + optional: true + "@unrs/resolver-binding-linux-s390x-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-musl": + optional: true + "@unrs/resolver-binding-wasm32-wasi": + optional: true + "@unrs/resolver-binding-win32-arm64-msvc": + optional: true + "@unrs/resolver-binding-win32-ia32-msvc": + optional: true + "@unrs/resolver-binding-win32-x64-msvc": + optional: true + checksum: 10c0/c91b112c71a33d6b24e5c708dab43ab80911f2df8ee65b87cd7a18fb5af446708e98c4b415ca262026ad8df326debcc7ca6a801b2935504d87fd6f0b9d70dce1 + languageName: node + linkType: hard + +"upath@npm:2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.1": + version: 1.1.2 + resolution: "update-browserslist-db@npm:1.1.2" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"url-join@npm:^4.0.1": + version: 4.0.1 + resolution: "url-join@npm:4.0.1" + checksum: 10c0/ac65e2c7c562d7b49b68edddcf55385d3e922bc1dd5d90419ea40b53b6de1607d1e45ceb71efb9d60da02c681d13c6cb3a1aa8b13fc0c989dfc219df97ee992d + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"util.promisify@npm:^1.0.1": + version: 1.1.3 + resolution: "util.promisify@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + for-each: "npm:^0.3.3" + get-intrinsic: "npm:^1.2.6" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + object.getownpropertydescriptors: "npm:^2.1.8" + safe-array-concat: "npm:^1.1.3" + checksum: 10c0/b7a2f721222ffc26f8a12a1cdc44a81b16a614b81f2d6f71f50c8b214a20afe8324d5f0700f04759d6ea33446ba0730e4ef0b4e2c4f4ef5adca16dabd502fa2b + languageName: node + linkType: hard + +"util@npm:^0.12.4": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: "npm:^2.0.3" + is-arguments: "npm:^1.0.4" + is-generator-function: "npm:^1.0.7" + is-typed-array: "npm:^1.1.3" + which-typed-array: "npm:^1.1.2" + checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 + languageName: node + linkType: hard + +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe + languageName: node + linkType: hard + +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 + languageName: node + linkType: hard + +"uuid@npm:^8.3.0": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + +"uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.12" + "@types/istanbul-lib-coverage": "npm:^2.0.1" + convert-source-map: "npm:^2.0.0" + checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 + languageName: node + linkType: hard + +"valid-data-url@npm:^2.0.0": + version: 2.0.0 + resolution: "valid-data-url@npm:2.0.0" + checksum: 10c0/4e34ccf43139656770ce8474b2a49aa825ab793811ef37713041fa63e24197b02715908bbd40edacc247c592a1b0fa8d3f8279983655c6417eed5bf444eb1d7a + languageName: node + linkType: hard + +"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + +"validate-npm-package-name@npm:5.0.1, validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 + languageName: node + linkType: hard + +"vc-js@npm:^0.6.4": + version: 0.6.4 + resolution: "vc-js@npm:0.6.4" + dependencies: + commander: "npm:^2.20.3" + credentials-context: "npm:^1.0.0" + debug: "npm:^4.1.1" + fs-extra: "npm:^8.1.0" + get-stdin: "npm:^7.0.0" + jsonld: "npm:^2.0.2" + jsonld-signatures: "npm:^5.0.0" + supports-color: "npm:^7.1.0" + bin: + vc-js: bin/vc-js + checksum: 10c0/04b33fce6688c293ed078c09aa5a68f41a27cff0f298338290c1a3bd7db8a51e805f6220c89d3d15925d3621f2f00270f19891feed1d5bf32b8880d87484c3f4 + languageName: node + linkType: hard + +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: "npm:^1.0.0" + core-util-is: "npm:1.0.2" + extsprintf: "npm:^1.2.0" + checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d + languageName: node + linkType: hard + +"void-elements@npm:^3.1.0": + version: 3.1.0 + resolution: "void-elements@npm:3.1.0" + checksum: 10c0/0b8686f9f9aa44012e9bd5eabf287ae0cde409b9a2854c5a2335cb83920c957668ac5876e3f0d158dd424744ac411a7270e64128556b451ed3bec875ef18534d + languageName: node + linkType: hard + +"wait-for-expect@npm:^3.0.2": + version: 3.0.2 + resolution: "wait-for-expect@npm:3.0.2" + checksum: 10c0/9616b82381f6571a0f3ed235a62ecdaf529816c9eef04f665ee1b8b515c3b7e1dc90d781111b6284bb777f45c4742f6c058d549a44d9d6e367ffd4d34f5f3b9e + languageName: node + linkType: hard + +"walk-up-path@npm:^3.0.1": + version: 3.0.1 + resolution: "walk-up-path@npm:3.0.1" + checksum: 10c0/3184738e0cf33698dd58b0ee4418285b9c811e58698f52c1f025435a85c25cbc5a63fee599f1a79cb29ca7ef09a44ec9417b16bfd906b1a37c305f7aa20ee5bc + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: "npm:1.0.12" + checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 + languageName: node + linkType: hard + +"web-resource-inliner@npm:^4.2.1": + version: 4.3.4 + resolution: "web-resource-inliner@npm:4.3.4" + dependencies: + async: "npm:^3.1.0" + chalk: "npm:^2.4.2" + datauri: "npm:^2.0.0" + htmlparser2: "npm:^4.0.0" + lodash.unescape: "npm:^4.0.1" + request: "npm:^2.88.0" + safer-buffer: "npm:^2.1.2" + valid-data-url: "npm:^2.0.0" + xtend: "npm:^4.0.2" + checksum: 10c0/2e7b87449ceea0220398c0c509396302a71c9b429968187a61f4fc704de428f593ff5f671335ad6d3b4a3aa0752911ad0ee9c30789cffb687176352be238bb57 + languageName: node + linkType: hard + +"web-streams-node@npm:^0.4.0": + version: 0.4.0 + resolution: "web-streams-node@npm:0.4.0" + dependencies: + is-stream: "npm:^1.1.0" + readable-stream-node-to-web: "npm:^1.0.1" + web-streams-ponyfill: "npm:^1.4.1" + checksum: 10c0/356292e85f1b9afa39a0470f6abf1ab3866504371862bce4851a9ab99f8510fc06c1c0f8490536ca2ae02797f63dec4d186482468ab2cc547e4c1a8546b4b2e3 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"web-streams-ponyfill@npm:^1.4.1": + version: 1.4.2 + resolution: "web-streams-ponyfill@npm:1.4.2" + checksum: 10c0/bcaed7e8c6359511f2e07054d399675441f8baf05075ed171f7781020731c71a3455fbd4a70a4038a461aa82941d3186679d0c74bfeaa855537db973da390f6c + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" + dependencies: + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.1" + is-number-object: "npm:^1.1.1" + is-string: "npm:^1.1.1" + is-symbol: "npm:^1.1.1" + checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" + is-async-function: "npm:^2.0.0" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" + is-generator-function: "npm:^1.0.10" + is-regex: "npm:^1.2.1" + is-weakref: "npm:^1.0.2" + isarray: "npm:^2.0.5" + which-boxed-primitive: "npm:^1.1.0" + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.16" + checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.2": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: "npm:^2.0.3" + is-set: "npm:^2.0.3" + is-weakmap: "npm:^2.0.2" + is-weakset: "npm:^2.0.3" + checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.2": + version: 1.1.18 + resolution: "which-typed-array@npm:1.1.18" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"wide-align@npm:1.1.5, wide-align@npm:^1.1.2": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 + languageName: node + linkType: hard + +"with@npm:^7.0.0": + version: 7.0.2 + resolution: "with@npm:7.0.2" + dependencies: + "@babel/parser": "npm:^7.9.6" + "@babel/types": "npm:^7.9.6" + assert-never: "npm:^1.2.1" + babel-walk: "npm:3.0.0-canary-5" + checksum: 10c0/99289e49afc4b1776afae0ef85e84cfa775e8e07464d2b9853a31b0822347031d1cf77f287d25adc8c3f81e4fa68f4ee31526a9c95d4981ba08a1fe24dee111a + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 + languageName: node + linkType: hard + +"wordwrap@npm:~0.0.2": + version: 0.0.3 + resolution: "wordwrap@npm:0.0.3" + checksum: 10c0/b3b212f8b2167091f59bc60929ada2166eb157abb6c8c82e2a705fe5aa5876440c3966ab39eb6c7bcb2ff0ac0c8d9fba726a9c2057b83bd65cdc1858f9d816ce + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.0.1": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.4.2": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: "npm:^4.1.11" + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8cb4bba0c1ab814a9b127844da0db4fb8c5e06ddbe6317b8b319377c73b283673036c8b9360120062898508b9428d81611cf7fa97584504a00bc179b2a580b92 + languageName: node + linkType: hard + +"write-json-file@npm:^3.2.0": + version: 3.2.0 + resolution: "write-json-file@npm:3.2.0" + dependencies: + detect-indent: "npm:^5.0.0" + graceful-fs: "npm:^4.1.15" + make-dir: "npm:^2.1.0" + pify: "npm:^4.0.1" + sort-keys: "npm:^2.0.0" + write-file-atomic: "npm:^2.4.2" + checksum: 10c0/3eadcb6e832ac34dbba37d4eea8871d9fef0e0d77c486b13ed5f81d84a8fcecd9e1a04277e2691eb803c2bed39c2a315e98b96f492c271acee2836acc6276043 + languageName: node + linkType: hard + +"write-pkg@npm:4.0.0": + version: 4.0.0 + resolution: "write-pkg@npm:4.0.0" + dependencies: + sort-keys: "npm:^2.0.0" + type-fest: "npm:^0.4.1" + write-json-file: "npm:^3.2.0" + checksum: 10c0/8e20db5fa444dad04e3703c18d8e0f89679caa60accbee5da9ea3aa076430b3f32d99f50d8860d29044245775795455c62d12d16a7856d407e30df7b79f39505 + languageName: node + linkType: hard + +"xmldom@npm:0.1.19": + version: 0.1.19 + resolution: "xmldom@npm:0.1.19" + checksum: 10c0/e0634db88f7485285ce0381112b28c2136b6754109e6e0f49576a9e52c2dc6f22f9558cd37126a6f18d15c9da6cd55a546dd223f8e9643326358e3eb38d23da2 + languageName: node + linkType: hard + +"xtend@npm:^4.0.2, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^2.1.2": + version: 2.1.2 + resolution: "yallist@npm:2.1.2" + checksum: 10c0/0b9e25aa00adf19e01d2bcd4b208aee2b0db643d9927131797b7af5ff69480fc80f1c3db738cbf3946f0bddf39d8f2d0a5709c644fd42d4aa3a4e6e786c087b5 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^2.6.0": + version: 2.7.0 + resolution: "yaml@npm:2.7.0" + bin: + yaml: bin.mjs + checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 + languageName: node + linkType: hard + +"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + +"yargs@npm:17.7.2, yargs@npm:^17.6.2, yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: "npm:^7.0.2" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^20.2.2" + checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..40c39e401 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,15 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/node@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.0.tgz#cde712f88c5190006d6b069232582ecd1f94a760" + integrity sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw== + dependencies: + undici-types "~7.10.0" + +undici-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== From 3f65e301ca406e98ee124eb9bf3bcaa0582f2cf9 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 9 Sep 2025 15:24:24 +0200 Subject: [PATCH 066/165] Solve all merge conflicts --- .../packages/activitypub/mixins/bot.ts | 8 -- .../activitypub/services/activity-mapping.ts | 1 - .../activitypub/services/activitypub/index.ts | 10 --- .../activitypub/subservices/activity.ts | 18 ---- .../services/activitypub/subservices/api.ts | 4 - .../subservices/collection/actions/get.ts | 52 +++++------ .../subservices/collection/index.ts | 43 --------- .../subservices/collections-registry.ts | 11 --- .../services/activitypub/subservices/inbox.ts | 22 ----- .../activitypub/subservices/object.ts | 10 --- .../services/activitypub/subservices/reply.ts | 9 -- .../activitypub/services/migration.ts | 7 -- src/middleware/packages/activitypub/utils.ts | 45 ---------- .../packages/auth/services/auth.local.ts | 8 +- src/middleware/packages/auth/services/mail.ts | 3 - src/middleware/packages/backup/index.ts | 5 -- src/middleware/packages/core/service.ts | 11 --- src/middleware/packages/crypto/index.ts | 7 -- src/middleware/packages/crypto/keys/keys.ts | 11 --- .../packages/crypto/keys/migration.ts | 10 --- .../packages/crypto/signature/keypair.ts | 4 - .../packages/crypto/signature/proxy.ts | 4 - .../data-integrity-service.ts | 6 -- .../verifiable-credentials/vc-api-service.ts | 4 - .../vc-holder-service.ts | 8 -- .../vc-issuer-service.ts | 8 -- .../verifiable-credentials/vc-service.ts | 15 ---- .../vc-verifier-service.ts | 4 - src/middleware/packages/inference/service.ts | 4 - .../jsonld/services/context/actions/parse.ts | 6 -- .../services/context/actions/validate.ts | 4 - .../packages/jsonld/services/context/index.ts | 8 -- src/middleware/packages/ldp/adapter.ts | 19 +--- .../packages/ldp/mixins/document-tagger.ts | 15 ---- .../packages/ldp/mixins/mime-types.ts | 5 -- .../ldp/mixins/orphan-files-deletion.ts | 10 --- .../ldp/mixins/single-resource-container.ts | 9 -- src/middleware/packages/ldp/service.ts | 36 +------- .../packages/ldp/services/api/actions/get.ts | 5 -- .../ldp/services/api/actions/patch.ts | 6 -- .../packages/ldp/services/api/actions/post.ts | 5 -- .../packages/ldp/services/api/actions/put.ts | 58 +------------ .../packages/ldp/services/cache/index.ts | 4 - .../ldp/services/container/actions/attach.ts | 5 -- .../packages/ldp/services/container/index.ts | 28 ------ .../permissions/actions/addAuthorizer.ts | 12 --- .../ldp/services/registry/actions/list.ts | 4 - .../packages/ldp/services/registry/index.ts | 17 ---- .../ldp/services/remote/actions/get.ts | 87 ++----------------- .../ldp/services/remote/actions/getNetwork.ts | 20 ----- .../ldp/services/remote/actions/getStored.ts | 70 +-------------- .../ldp/services/remote/actions/store.ts | 11 --- .../packages/ldp/services/remote/index.ts | 32 ------- .../ldp/services/resource/actions/create.ts | 40 --------- .../ldp/services/resource/actions/exist.ts | 4 - .../services/resource/actions/generateId.ts | 6 -- .../ldp/services/resource/actions/get.ts | 4 - .../ldp/services/resource/actions/getTypes.ts | 4 - .../ldp/services/resource/actions/patch.ts | 8 -- .../ldp/services/resource/actions/upload.ts | 5 -- .../packages/ldp/services/resource/methods.ts | 12 --- src/middleware/packages/middlewares/index.ts | 9 -- src/middleware/packages/mime-types/index.ts | 5 -- .../services/single-mail/service.ts | 8 -- .../packages/ontologies/actions/get.ts | 7 -- .../ontologies/actions/getPrefixes.ts | 3 - .../ontologies/actions/getRdfPrefixes.ts | 3 - .../packages/ontologies/actions/list.ts | 3 - src/middleware/packages/ontologies/index.ts | 16 ---- .../ontologies/ontologies/core/index.ts | 8 -- src/middleware/packages/ontologies/service.ts | 8 -- .../channels/notification-channel.mixin.ts | 4 - .../solid/services/notifications/listener.ts | 9 -- .../solid/services/notifications/provider.ts | 4 - .../solid/services/preferences-file.ts | 4 - .../packages/solid/services/storage.ts | 8 -- .../solid/services/type-index/type-indexes.ts | 12 +-- .../services/type-index/type-registrations.ts | 4 - .../packages/sparql-endpoint/service.ts | 4 - .../packages/triplestore/adapter.ts | 12 --- .../packages/triplestore/service.ts | 39 +-------- 81 files changed, 38 insertions(+), 1043 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index 4bb835eeb..102425275 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -78,18 +78,10 @@ const BotMixin = { events: { 'activitypub.inbox.received': { handler(ctx) { -<<<<<<< HEAD if (this.inboxReceived) { // @ts-expect-error TS(2339): Property 'recipients' does not exist on type 'Opti... Remove this comment to see the full error message if (ctx.params.recipients.includes(this.settings.actor.uri)) { // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message -======= - // @ts-expect-error TS(2339): Property 'inboxReceived' does not exist on type 'S... Remove this comment to see the full error message - if (this.inboxReceived) { - // @ts-expect-error TS(2339): Property 'recipients' does not exist on type 'Opti... Remove this comment to see the full error message - if (ctx.params.recipients.includes(this.settings.actor.uri)) { - // @ts-expect-error TS(2339): Property 'inboxReceived' does not exist on type 'S... Remove this comment to see the full error message ->>>>>>> 2.0 this.inboxReceived(ctx.params.activity); } } diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 8873f655f..106782fbd 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -60,7 +60,6 @@ const ActivityMappingService = { : {}; } catch (e) { this.logger.warn( - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. `Could not get profile of actor ${activity.actor} (webId ${ctx.meta.webId} / dataset ${ctx.meta.dataset})` ); } diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index 7b47089c9..80bb710d3 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -1,9 +1,5 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; -<<<<<<< HEAD -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { as, sec } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import ActorService from './subservices/actor.ts'; @@ -50,13 +46,7 @@ const ActivityPubService = { settings: { podProvider } }); -<<<<<<< HEAD this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "activitypub.collection"; mixins: { ... Remove this comment to see the full error message -======= - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.c... Remove this comment to see the full error message - this.broker.createService({ ->>>>>>> 2.0 mixins: [CollectionService], settings: { podProvider, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 9b23ca251..ea8920bab 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -3,11 +3,7 @@ import { Errors as E } from 'moleculer-web'; import { ControlledContainerMixin } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import setRightsHandler from './activity-handlers/setRightsHandler.ts'; -<<<<<<< HEAD import { arrayOf } from '../../../utils.ts'; -======= -import { objectCurrentToId, objectIdToCurrent, arrayOf } from '../../../utils.ts'; ->>>>>>> 2.0 import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; @@ -114,20 +110,6 @@ const ActivityService = { if (typeof ctx.params.resourceUri === 'object') { ctx.params.resourceUri = ctx.params.resourceUri.id || ctx.params.resourceUri['@id']; } -<<<<<<< HEAD - - // We always want the get method to return a single resource - ctx.params.noGraph = true; -======= - }, - create(ctx) { - ctx.params.resource = objectIdToCurrent(ctx.params.resource); - } - }, - after: { - get(ctx, res) { - return objectCurrentToId(res); ->>>>>>> 2.0 } } }, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index 5149ef137..d34770aa7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -105,10 +105,6 @@ const ApiService = { arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) ) { await ctx.call('api.addRoute', { -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'getBoxesRoute' does not exist on type 'S... Remove this comment to see the full error message ->>>>>>> 2.0 route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) }); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 3b69d1baf..02919331d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,14 +1,9 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; import { getValueFromDataType } from '../../../../../utils.ts'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 /** * Retrieves the collection metadata from the triplestore @@ -83,39 +78,34 @@ async function validateCursorParams(ctx: any, collectionUri: any, beforeEq: any, * @returns {Promise} The collection item URIs */ async function fetchCollectionItemURIs(ctx: any, collectionUri: any, options: any, dataset: any) { -<<<<<<< HEAD const query = ` -======= - const result = await ctx.call('triplestore.query', { - query: ` ->>>>>>> 2.0 - PREFIX as: - SELECT DISTINCT ?itemUri - WHERE { - GRAPH <${collectionUri}> { - <${collectionUri}> a as:Collection . - OPTIONAL { - <${collectionUri}> as:items ?itemUri . - } - } - ${ - options.ordered - ? ` - OPTIONAL { - GRAPH ?g { - ?itemUri <${options.sortPredicate}> ?order . - } - } - ` - : '' + PREFIX as: + SELECT DISTINCT ?itemUri + WHERE { + GRAPH <${collectionUri}> { + <${collectionUri}> a as:Collection . + OPTIONAL { + <${collectionUri}> as:items ?itemUri . } } ${ options.ordered - ? `ORDER BY ${options.sortOrder === 'http://semapps.org/ns/core#DescOrder' ? 'DESC' : 'ASC'}( ?order )` + ? ` + OPTIONAL { + GRAPH ?g { + ?itemUri <${options.sortPredicate}> ?order . + } + } + ` : '' } - `; + } + ${ + options.ordered + ? `ORDER BY ${options.sortOrder === 'http://semapps.org/ns/core#DescOrder' ? 'DESC' : 'ASC'}( ?order )` + : '' + } + `; const result = await ctx.call('triplestore.query', { query, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 6f521dcab..36104a0ec 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -4,14 +4,9 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const CollectionService = { name: 'activitypub.collection' as const, @@ -147,13 +142,9 @@ const CollectionService = { PREFIX as: SELECT ( Count(?items) as ?count ) WHERE { -<<<<<<< HEAD GRAPH <${collectionUri}> { <${collectionUri}> as:items ?items . } -======= - <${collectionUri}> as:items ?items . ->>>>>>> 2.0 } `, dataset: this.getCollectionDataset(collectionUri), @@ -178,15 +169,10 @@ const CollectionService = { PREFIX as: ASK WHERE { -<<<<<<< HEAD GRAPH <${collectionUri}> { <${collectionUri}> a as:Collection . <${collectionUri}> as:items <${itemUri}> . } -======= - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items <${itemUri}> . ->>>>>>> 2.0 } `, dataset: this.getCollectionDataset(collectionUri), @@ -221,13 +207,9 @@ const CollectionService = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` INSERT DATA { -<<<<<<< HEAD GRAPH <${collectionUri}> { <${collectionUri}> <${itemUri}> } -======= - <${collectionUri}> <${itemUri}> ->>>>>>> 2.0 } `, dataset: this.getCollectionDataset(collectionUri), @@ -258,16 +240,11 @@ const CollectionService = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` DELETE -<<<<<<< HEAD WHERE { GRAPH <${collectionUri}> { <${collectionUri}> <${itemUri}> } } -======= - WHERE - { <${collectionUri}> <${itemUri}> } ->>>>>>> 2.0 `, dataset: this.getCollectionDataset(collectionUri), webId: 'system' @@ -280,10 +257,7 @@ const CollectionService = { } }, -<<<<<<< HEAD // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message -======= ->>>>>>> 2.0 get: getAction, clear: { @@ -292,16 +266,11 @@ const CollectionService = { * @param collectionUri The full URI of the collection */ async handler(ctx) { -<<<<<<< HEAD const { collectionUri } = ctx.params; -======= - const collectionUri = ctx.params.collectionUri.replace(/\/+$/, ''); ->>>>>>> 2.0 await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` PREFIX as: DELETE { -<<<<<<< HEAD GRAPH ?g1 { ?s1 ?p1 ?o1 . } @@ -313,14 +282,6 @@ const CollectionService = { GRAPH ?g1 { ?s1 ?p1 ?o1 . } -======= - ?s1 ?p1 ?o1 . - } - WHERE { - FILTER(?container IN (<${collectionUri}>, <${`${collectionUri}/`}>)) . - ?container as:items ?s1 . - ?s1 ?p1 ?o1 . ->>>>>>> 2.0 } `, dataset: this.getCollectionDataset(collectionUri), @@ -347,13 +308,9 @@ const CollectionService = { PREFIX ldp: SELECT ?actorUri WHERE { -<<<<<<< HEAD GRAPH ?g { ?actorUri ${prefix}:${collectionKey} <${collectionUri}> } -======= - ?actorUri ${prefix}:${collectionKey} <${collectionUri}> ->>>>>>> 2.0 } `, dataset: this.getCollectionDataset(collectionUri), diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 0d710f79a..c7a84a3bd 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -169,13 +169,9 @@ const CollectionsRegistryService = { query: ` SELECT ?collectionUri WHERE { -<<<<<<< HEAD GRAPH ?g { ?objectUri <${attachPredicate}> ?collectionUri } -======= - ?objectUri <${attachPredicate}> ?collectionUri ->>>>>>> 2.0 } `, webId: 'system', @@ -189,10 +185,7 @@ const CollectionsRegistryService = { query: ` PREFIX as: PREFIX semapps: -<<<<<<< HEAD WITH <${collectionUri}> -======= ->>>>>>> 2.0 DELETE { <${collectionUri}> a ?type ; @@ -340,10 +333,6 @@ const CollectionsRegistryService = { const { oldData } = ctx.params; const collections = this.getCollectionsByType(oldData.type || oldData['@type']); for (const collection of collections) { -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 await this.actions.deleteCollection( { objectUri: oldData.id || oldData['@id'], collection }, { parentCtx: ctx } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 9c82d9e16..9c8fc628c 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,21 +1,11 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; -<<<<<<< HEAD import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; const { MoleculerError } = require('moleculer').Errors; -======= -import { objectIdToCurrent, collectionPermissionsWithAnonRead } from '../../../utils.ts'; -import { ACTOR_TYPES } from '../../../constants.ts'; -import AwaitActivityMixin from '../../../mixins/await-activity.ts'; - -import { Errors } from 'moleculer'; - -const { MoleculerError } = Errors; ->>>>>>> 2.0 /** @type {import('moleculer').ServiceSchema} */ const InboxService = { @@ -124,12 +114,7 @@ const InboxService = { if (activity.id && !activity.id.includes('#')) { // Save the remote activity in the local triple store await ctx.call('ldp.remote.store', { -<<<<<<< HEAD resource: activity, -======= - resource: objectIdToCurrent(activity), - mirrorGraph: false, // Store in default graph as activity may not be public ->>>>>>> 2.0 keepInSync: false, // Activities are immutable webId: inboxOwner }); @@ -185,7 +170,6 @@ const InboxService = { PREFIX xsd: SELECT DISTINCT ?activityUri WHERE { -<<<<<<< HEAD GRAPH <${collectionUri}> { <${collectionUri}> a as:Collection . <${collectionUri}> as:items ?activityUri . @@ -194,12 +178,6 @@ const InboxService = { ?activityUri as:published ?published . ${filters ? `FILTER (${filters.join(' && ')})` : ''} } -======= - <${collectionUri}> a as:Collection . - <${collectionUri}> as:items ?activityUri . - ?activityUri as:published ?published . - ${filters ? `FILTER (${filters.join(' && ')})` : ''} ->>>>>>> 2.0 } ORDER BY ?published `, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index ff33ec648..9d5bdb0a8 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -181,13 +181,10 @@ const ObjectService = { const { resourceUri, formerType } = ctx.params; const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); -<<<<<<< HEAD // We need to recreate the document as it has been deleted // TODO See how we can avoid this since it will not work with NextGraph await ctx.call('triplestore.document.create', { documentUri: resourceUri }); -======= ->>>>>>> 2.0 // Insert directly the Tombstone in the triple store to avoid resource creation side-effects await ctx.call('triplestore.insert', { resource: { @@ -201,10 +198,7 @@ const ObjectService = { '@type': 'http://www.w3.org/2001/XMLSchema#dateTime' } }, -<<<<<<< HEAD graphName: resourceUri, -======= ->>>>>>> 2.0 webId: 'system' }); } @@ -229,10 +223,6 @@ const ObjectService = { // @ts-expect-error TS(2339): Property 'activateTombstones' does not exist on ty... Remove this comment to see the full error message if (containerOptions.activateTombstones !== false && ctx.meta.activateTombstones !== false) { const formerType = oldData.type || oldData['@type']; -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 await this.actions.createTombstone({ resourceUri, formerType }, { meta: { dataset }, parentCtx: ctx }); } } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 5570770dc..03d08aafe 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -56,7 +56,6 @@ const ReplyService = { query: sanitizeSparqlQuery` PREFIX as: DELETE { -<<<<<<< HEAD GRAPH ?g1 { ?collection as:items <${objectUri}> . } @@ -69,14 +68,6 @@ const ReplyService = { GRAPH ?g2 { ?object as:replies ?collection . } -======= - ?collection as:items <${objectUri}> . - } - WHERE { - ?collection as:items <${objectUri}> . - ?collection a as:Collection . - ?object as:replies ?collection . ->>>>>>> 2.0 } `, webId: 'system' diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts index abcc7c17c..7c178b66f 100644 --- a/src/middleware/packages/activitypub/services/migration.ts +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -25,7 +25,6 @@ const ActivitypubMigrationSchema = { PREFIX as: PREFIX ldp: INSERT { -<<<<<<< HEAD GRAPH <${collectionsContainerUri}> { <${collectionsContainerUri}> ldp:contains ?collectionUri } @@ -34,12 +33,6 @@ const ActivitypubMigrationSchema = { GRAPH ?g { ?collectionUri a as:Collection } -======= - <${collectionsContainerUri}> ldp:contains ?collectionUri - } - WHERE { - ?collectionUri a as:Collection ->>>>>>> 2.0 } `, webId: 'system' diff --git a/src/middleware/packages/activitypub/utils.ts b/src/middleware/packages/activitypub/utils.ts index 0e6f21a67..c20ec9aef 100644 --- a/src/middleware/packages/activitypub/utils.ts +++ b/src/middleware/packages/activitypub/utils.ts @@ -1,43 +1,3 @@ -<<<<<<< HEAD -======= -import { ACTIVITY_TYPES } from './constants.ts'; - -// @ts-expect-error TS(7023): 'objectCurrentToId' implicitly has return type 'an... Remove this comment to see the full error message -const objectCurrentToId = (activityJson: any) => { - if (activityJson.object && typeof activityJson.object === 'object' && activityJson.object.current) { - const { current, ...object } = activityJson.object; - return { - ...activityJson, - object: { - id: current, - ...objectCurrentToId(object) - } - }; - } - return activityJson; -}; - -// @ts-expect-error TS(7023): 'objectIdToCurrent' implicitly has return type 'an... Remove this comment to see the full error message -const objectIdToCurrent = (activityJson: any) => { - // If the activity has an object predicate, and this object is not an activity - if ( - activityJson.object && - typeof activityJson.object === 'object' && - !Object.values(ACTIVITY_TYPES).includes(activityJson.object.type) - ) { - const { id, '@id': arobaseId, ...object } = activityJson.object; - return { - ...activityJson, - object: { - current: id || arobaseId, - ...objectIdToCurrent(object) - } - }; - } - return activityJson; -}; - ->>>>>>> 2.0 const collectionPermissionsWithAnonRead = (webId: any) => { const permissions = { anon: { @@ -119,11 +79,6 @@ const getValueFromDataType = (result: any) => { }; export { -<<<<<<< HEAD -======= - objectCurrentToId, - objectIdToCurrent, ->>>>>>> 2.0 collectionPermissionsWithAnonRead, getSlugFromUri, getContainerFromUri, diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 5dbe8cdf6..b00317f57 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,18 +1,12 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-local'; -import { ServiceSchema } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; import AuthMailService from './mail.ts'; -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; ->>>>>>> 2.0 /** @type {import('moleculer').ServiceSchema} */ const AuthLocalService = { diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts index 342ffc636..c84c0a7c3 100644 --- a/src/middleware/packages/auth/services/mail.ts +++ b/src/middleware/packages/auth/services/mail.ts @@ -3,13 +3,10 @@ import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; import { ServiceSchema } from 'moleculer'; -<<<<<<< HEAD -======= import { fileURLToPath } from 'url'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); ->>>>>>> 2.0 const AuthMailSchema = { name: 'auth.mail' as const, diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index a48321787..d59d68cb0 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -188,15 +188,10 @@ const BackupService = { const backupsPattern = RegExp(`^${dataset}_.{10}_.{8}\\.nq\\.gz$`); const filenames = await fs.promises .readdir(pathJoin(this.settings.localServer.fusekiBase, 'backups')) -<<<<<<< HEAD - .then(files => files.filter(file => backupsPattern.test(file))) - .then(files => files.map(file => pathJoin(this.settings.localServer.fusekiBase, 'backups', file))); -======= .then((files: any) => files.filter((file: any) => backupsPattern.test(file))) .then((files: any) => files.map((file: any) => pathJoin(this.settings.localServer.fusekiBase, 'backups', file)) ); ->>>>>>> 2.0 return filenames; } diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 7ebaf7240..fcc8da1e0 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -10,10 +10,7 @@ import { TripleStoreService } from '@semapps/triplestore'; import { VoidService } from '@semapps/void'; import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; -<<<<<<< HEAD // @ts-expect-error TS(2305): Module '"@semapps/crypto"' has no exported member ... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { KeysService, SignatureService } from '@semapps/crypto'; import { WebIdService } from '@semapps/webid'; import { ServiceSchema } from 'moleculer'; @@ -148,11 +145,7 @@ const CoreService = { } if (this.settings.signature !== false) { -<<<<<<< HEAD // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: any; ... Remove this comment to see the full error message -======= - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "signature"; a... Remove this comment to see the full error message ->>>>>>> 2.0 this.broker.createService({ mixins: [SignatureService], settings: { @@ -173,11 +166,7 @@ const CoreService = { } if (this.settings.keys !== false) { -<<<<<<< HEAD // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: any; ... Remove this comment to see the full error message -======= - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys"; settin... Remove this comment to see the full error message ->>>>>>> 2.0 this.broker.createService({ mixins: [KeysService], settings: { diff --git a/src/middleware/packages/crypto/index.ts b/src/middleware/packages/crypto/index.ts index c34ecb005..4a551bedd 100644 --- a/src/middleware/packages/crypto/index.ts +++ b/src/middleware/packages/crypto/index.ts @@ -1,4 +1,3 @@ -<<<<<<< HEAD // @ts-expect-error TS(2307): Cannot find module './keys.ts' or its correspondin... Remove this comment to see the full error message export * from './keys.ts'; // @ts-expect-error TS(2307): Cannot find module './signature.ts' or its corresp... Remove this comment to see the full error message @@ -6,9 +5,3 @@ export * from './signature.ts'; export * from './constants.ts'; // @ts-expect-error TS(2307): Cannot find module './verifiable-credentials.ts' o... Remove this comment to see the full error message export * from './verifiable-credentials.ts'; -======= -export * from './keys/index.ts'; -export * from './signature/index.ts'; -export * from './constants.ts'; -export * from './verifiable-credentials/index.ts'; ->>>>>>> 2.0 diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index 4731b5448..487239814 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -2,16 +2,9 @@ import fetch from 'node-fetch'; import { generateKeyPair } from 'crypto'; import { namedNode, triple } from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; -<<<<<<< HEAD -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -import { sec } from '@semapps/ontologies'; -// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message -import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -======= import { sec } from '@semapps/ontologies'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; ->>>>>>> 2.0 import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; @@ -672,10 +665,6 @@ const KeysService = { // Create, publish and attach keys to the webId. await Promise.all([ this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.RSA }, { parentCtx: ctx }), -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 this.actions.createKeyForActor({ webId, attachToWebId: true, keyType: KEY_TYPES.ED25519 }, { parentCtx: ctx }) ]); } diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index 6b71155b4..631eb000c 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -142,7 +142,6 @@ const KeysMigrationSchema = { await ctx.call('triplestore.update', { query: ` PREFIX sec: -<<<<<<< HEAD DELETE WHERE { GRAPH <${webId}> { <${webId}> sec:publicKey ?o . @@ -150,15 +149,6 @@ const KeysMigrationSchema = { GRAPH ?g { ?o ?p1 ?o1 . } -======= - DELETE { - <${webId}> sec:publicKey ?o . - ?o ?p1 ?o1 . - } - WHERE { - <${webId}> sec:publicKey ?o . - ?o ?p1 ?o1 . ->>>>>>> 2.0 } `, webId: 'system' diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index 0a6837abe..b3fd18c6b 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -242,10 +242,6 @@ const SignatureService = { 'keys.migration.migrated': { async handler(ctx) { -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'isMigrated' does not exist on type 'Serv... Remove this comment to see the full error message ->>>>>>> 2.0 this.isMigrated = true; } } diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 109dfcbc2..5686a0c04 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -159,10 +159,6 @@ const ProxyService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message ->>>>>>> 2.0 if (this.settings.podProvider) { const services = await ctx.call('$node.services'); if (services.filter((s: any) => s.name === 'activitypub.actor')) { diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 6622896ce..1bb7b1eb4 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -6,14 +6,8 @@ import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; -<<<<<<< HEAD -/** @type {import('@digitalbazaar/ed25519-multikey')} */ -// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message -import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -======= // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; ->>>>>>> 2.0 import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts index f552c663c..0a3d35e12 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts @@ -1,8 +1,4 @@ import { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } from '@semapps/middlewares'; -<<<<<<< HEAD - -======= ->>>>>>> 2.0 import path from 'node:path'; import { ServiceSchema } from 'moleculer'; import { VC_API_PATH } from '../constants.ts'; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index f1ac80997..c65ae6549 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -5,19 +5,11 @@ import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message -<<<<<<< HEAD -import vc from '@digitalbazaar/vc'; - -/** @type {import('@digitalbazaar/ed25519-multikey')} */ -// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message -import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -======= import * as vc from '@digitalbazaar/vc'; /** @type {import('@digitalbazaar/ed25519-multikey')} */ // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; ->>>>>>> 2.0 import { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index 8bf75f6ab..fabd6e890 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -5,18 +5,10 @@ import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message -<<<<<<< HEAD -import vc from '@digitalbazaar/vc'; - -/** @type {import('@digitalbazaar/ed25519-multikey')} */ -// @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message -import Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -======= import * as vc from '@digitalbazaar/vc'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; ->>>>>>> 2.0 import { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts index fb5118656..cd033cc8e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts @@ -1,7 +1,4 @@ -<<<<<<< HEAD // @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { did, cred } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import VCAuthorizerService from './vc-authorizer-service.ts'; @@ -40,7 +37,6 @@ const VCService = { }, created() { const { enableApi, podProvider } = this.settings; -<<<<<<< HEAD // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.issuer"; settings: { podP... Remove this comment to see the full error message this.broker.createService({ mixins: [VCIssuerService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.guard"; de... Remove this comment to see the full error message @@ -50,17 +46,6 @@ const VCService = { // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.verifier"; dependencies: ... Remove this comment to see the full error message this.broker.createService({ mixins: [VCVerifierService] }); // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.data-integrity"; dependen... Remove this comment to see the full error message -======= - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.iss... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCIssuerService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.guard"; de... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCAuthorizerService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.hol... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCHolderService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.ver... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCVerifierService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.dat... Remove this comment to see the full error message ->>>>>>> 2.0 this.broker.createService({ mixins: [DataIntegrityService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.pre... Remove this comment to see the full error message this.broker.createService({ mixins: [ChallengeService] }); diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index fe8f1be22..6d1d83340 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -3,11 +3,7 @@ import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message -<<<<<<< HEAD -import vc from '@digitalbazaar/vc'; -======= import * as vc from '@digitalbazaar/vc'; ->>>>>>> 2.0 import { ServiceSchema } from 'moleculer'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; import VCPurpose from './VcPurpose.ts'; diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 358516723..ba80448cb 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -341,10 +341,6 @@ const InferenceSchema = { if (owl) { const result = await this.findInverseRelations(owl); this.logger.info(`Found ${Object.keys(result).length} inverse relations in ${owl}`); -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'inverseRelations' does not exist on type... Remove this comment to see the full error message ->>>>>>> 2.0 this.inverseRelations = { ...this.inverseRelations, ...result }; } } diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts index 407b70157..5ed0864db 100644 --- a/src/middleware/packages/jsonld/services/context/actions/parse.ts +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -5,18 +5,12 @@ const Schema = { params: { context: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }] }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message options: { type: 'object', optional: true } }, async handler(ctx) { const { context, options } = ctx.params; -<<<<<<< HEAD - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. -======= ->>>>>>> 2.0 const { contextRaw } = await this.contextParser.parse(context, options); return contextRaw; } diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index 079112b7a..3d34e7c19 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -16,11 +16,7 @@ const Schema = { await this.contextParser.parse(context); return true; } catch (e) { -<<<<<<< HEAD // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. -======= - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ->>>>>>> 2.0 this.logger.warn(`Could not parse context. Error: ${e.message}`); return false; } diff --git a/src/middleware/packages/jsonld/services/context/index.ts b/src/middleware/packages/jsonld/services/context/index.ts index 1c79e3b1d..7ceff99e0 100644 --- a/src/middleware/packages/jsonld/services/context/index.ts +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -32,16 +32,8 @@ const JsonldContextSchema = { actions: { get: getAction, getLocal: getLocalAction, -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { a: { type:... Remove this comment to see the full error message merge: mergeAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { context: {... Remove this comment to see the full error message parse: parseAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { context: {... Remove this comment to see the full error message -======= - merge: mergeAction, - parse: parseAction, ->>>>>>> 2.0 validate: validateAction } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts index 011f6e740..e3cd15605 100644 --- a/src/middleware/packages/ldp/adapter.ts +++ b/src/middleware/packages/ldp/adapter.ts @@ -1,12 +1,7 @@ import urlJoin from 'url-join'; - -<<<<<<< HEAD -const { ServiceSchemaError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { ServiceSchemaError } = Errors; ->>>>>>> 2.0 class LdpAdapter { constructor({ resourceService = 'ldp.resource', containerService = 'ldp.container' } = {}) { @@ -26,10 +21,6 @@ class LdpAdapter { async connect() { // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message if (!this.service.schema.settings.containerUri) { -<<<<<<< HEAD -======= - // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. ->>>>>>> 2.0 throw new ServiceSchemaError( // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message `Missing \`containerUri\` definition in settings of service ${this.service.schema.name}` @@ -125,11 +116,8 @@ class LdpAdapter { insert(entity: any) { const { slug, ...resource } = entity; -<<<<<<< HEAD - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message -======= ->>>>>>> 2.0 return ( + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message this.broker // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message .call(`${this.resourceService}.post`, { @@ -181,11 +169,8 @@ class LdpAdapter { // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message if (!_id.startsWith('http')) _id = urlJoin(this.service.schema.settings.containerUri, _id); -<<<<<<< HEAD - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message -======= ->>>>>>> 2.0 return ( + // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message this.broker // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message .call(`${this.resourceService}.put`, { diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 0412e122a..75e419445 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,7 +1,4 @@ -<<<<<<< HEAD // @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { dc } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import { getDatasetFromUri } from '../utils.ts'; @@ -46,11 +43,7 @@ const Schema = { if (triples.length > 0) { await ctx.call('triplestore.update', { -<<<<<<< HEAD query: `INSERT DATA { GRAPH <${resourceUri}> { ${triples.join('\n')} } }`, -======= - query: `INSERT DATA { ${triples.join('\n')} }`, ->>>>>>> 2.0 dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, webId: 'system' }); @@ -64,10 +57,7 @@ const Schema = { const now = new Date(); await ctx.call('triplestore.update', { query: ` -<<<<<<< HEAD WITH <${resourceUri}> -======= ->>>>>>> 2.0 DELETE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } INSERT { <${resourceUri}> <${ this.settings.documentPredicates.updated @@ -103,12 +93,7 @@ const Schema = { 'ldp.resource.patched': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } } diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index 824aa9d9c..c9247cbba 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -1,13 +1,8 @@ import { isMimeTypeMatching } from '@semapps/mime-types'; import { ServiceSchema } from 'moleculer'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const Schema = { settings: { diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index af34c0218..256f2900f 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -18,16 +18,12 @@ const Schema = { this.logger.info('OrphanFilesDeletion - Check...'); const containerUri = await this.actions.getContainerUri(); -<<<<<<< HEAD // Ignore ACL files -======= ->>>>>>> 2.0 const results = await ctx.call('triplestore.query', { query: ` SELECT ?file WHERE { -<<<<<<< HEAD GRAPH <${containerUri}> { <${containerUri}> ?file . } @@ -37,12 +33,6 @@ const Schema = { FILTER(?s != <${containerUri}>) FILTER(?p != ) } -======= - <${containerUri}> ?file . - FILTER NOT EXISTS { - ?s ?p ?file . - FILTER(?s != <${containerUri}>) ->>>>>>> 2.0 } } `, diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index b495d1309..c41d476de 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -1,14 +1,9 @@ import { ServiceSchema } from 'moleculer'; import ControlledContainerMixin from './controlled-container.ts'; import { delay } from '../utils.ts'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const Schema = { mixins: [ControlledContainerMixin], @@ -119,10 +114,6 @@ const Schema = { if (this.settings.podProvider) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 await this.actions.initializeResource({ webId }); } } diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 2965027c1..0f220430d 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,7 +1,4 @@ -<<<<<<< HEAD // @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { ldp, semapps } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; @@ -19,10 +16,6 @@ const LdpSchema = { baseUrl: null, containers: [], podProvider: false, -<<<<<<< HEAD -======= - mirrorGraphName: 'http://semapps.org/mirror', ->>>>>>> 2.0 defaultContainerOptions: {}, preferredViewForResource: null, resourcesWithContainerPath: true, @@ -37,26 +30,17 @@ const LdpSchema = { containers, podProvider, defaultContainerOptions, -<<<<<<< HEAD -======= - mirrorGraphName, ->>>>>>> 2.0 preferredViewForResource, resourcesWithContainerPath, binary } = this.settings; + // @ts-expect-error TS(2322): Type '{ name: "ldp.container"; settings: { baseUrl... Remove this comment to see the full error message this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "ldp.container"; settings: { baseUrl... Remove this comment to see the full error message mixins: [LdpContainerService], settings: { baseUrl, -<<<<<<< HEAD podProvider -======= - podProvider, - mirrorGraphName ->>>>>>> 2.0 }, hooks: this.schema.hooksContainer || {} }); @@ -67,10 +51,6 @@ const LdpSchema = { settings: { baseUrl, podProvider, -<<<<<<< HEAD -======= - mirrorGraphName, ->>>>>>> 2.0 preferredViewForResource, resourcesWithContainerPath, binary @@ -78,17 +58,12 @@ const LdpSchema = { hooks: this.schema.hooksResource || {} }); + // @ts-expect-error TS(2322): Type '{ name: "ldp.remote"; mixins: any[]; setting... Remove this comment to see the full error message this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "ldp.remote"; mixins: any[]; setting... Remove this comment to see the full error message mixins: [LdpRemoteService], settings: { baseUrl, -<<<<<<< HEAD podProvider -======= - podProvider, - mirrorGraphName ->>>>>>> 2.0 } }); @@ -112,17 +87,10 @@ const LdpSchema = { } }); -<<<<<<< HEAD // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "permissions";... Remove this comment to see the full error message this.broker.createService({ mixins: [PermissionsService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ldp.link-head... Remove this comment to see the full error message -======= - // @ts-expect-error TS(2322): Type '{ name: "permissions"; actions: { addAuthori... Remove this comment to see the full error message - this.broker.createService({ mixins: [PermissionsService] }); - - // @ts-expect-error TS(2322): Type '{ name: "ldp.link-header"; actions: { get: A... Remove this comment to see the full error message ->>>>>>> 2.0 this.broker.createService({ mixins: [LdpLinkHeaderService] }); // Only create this service if a cacher is defined diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index 1e3f183ee..09a1d11e9 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -1,14 +1,9 @@ import fs from 'fs'; import { MIME_TYPES } from '@semapps/mime-types'; import { cleanUndefined, parseJson } from '../../../utils.ts'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 export default async function get(this: any, ctx: any) { try { diff --git a/src/middleware/packages/ldp/services/api/actions/patch.ts b/src/middleware/packages/ldp/services/api/actions/patch.ts index 04c6ef0f6..67403213f 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.ts +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -1,13 +1,7 @@ import sparqljsModule from 'sparqljs'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 - const SparqlParser = sparqljsModule.Parser; const parser = new SparqlParser(); const ACCEPTED_OPERATIONS = ['insert', 'delete']; diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index 4f03bcb45..758fd773e 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -3,14 +3,9 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { v4 as uuidv4 } from 'uuid'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mime... Remove this comment to see the full error message import mime from 'mime-types'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 export default async function post(this: any, ctx: any) { try { diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 70c8d327b..9290cdddb 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; -<<<<<<< HEAD +import { Errors } from 'moleculer'; -const { MoleculerError } = require('moleculer').Errors; +const { MoleculerError } = Errors; export default async function post(this: any, ctx: any) { let { username, slugParts, ...resource } = ctx.params; @@ -45,57 +45,3 @@ export default async function post(this: any, ctx: any) { ctx.meta.$statusMessage = e.message; } } -======= -import { Errors } from 'moleculer'; - -const { MoleculerError } = Errors; - -export default { - async handler(ctx) { - let { username, slugParts, ...resource } = ctx.params; - - const resourceUri = this.getUriFromSlugParts(slugParts, username); - const resourceId = resource['@id'] || resource.id; - - if (!resourceId) { - resource['@id'] = resourceUri; - } else if (resourceUri !== resourceId) { - throw new MoleculerError(`The @id of the resource is not the same as its URL`, 400, 'BAD_REQUEST'); - } - - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); - - if (ctx.meta.parser === 'file') { - throw new MoleculerError(`PUT method is not supported for non-RDF resources`, 400, 'BAD_REQUEST'); - } - - try { - const contentType = ctx.meta.headers['content-type']; - - // If the body is in Turtle or N-Triples, first convert it to JSON-LD - if (contentType && contentType !== MIME_TYPES.JSON) { - resource = await ctx.call('jsonld.parser.fromRDF', { - input: ctx.meta.rawBody, - options: { format: contentType } - }); - } - - await ctx.call(controlledActions.put || 'ldp.resource.put', { resource }); - - ctx.meta.$statusCode = 204; - // @ts-expect-error - ctx.meta.$responseHeaders = { - Link: '; rel="type"', - 'Content-Length': 0 - }; - } catch (e) { - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code !== 404 && e.code !== 403) console.error(e); - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - ctx.meta.$statusCode = e.code || 500; - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - ctx.meta.$statusMessage = e.message; - } - } -}; ->>>>>>> 2.0 diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index 043e77d77..8af6b8998 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -138,10 +138,6 @@ const LdpCacheSchema = { if (isContainer) { await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); } else { -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 await this.actions.invalidateResource({ resourceUri: uri, dataset }, { parentCtx: ctx }); } } diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 310db447d..2a7058e65 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,13 +1,8 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index 366837b74..593c01abf 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -20,52 +20,24 @@ const LdpContainerSchema = { name: 'ldp.container' as const, settings: { baseUrl: null, -<<<<<<< HEAD podProvider: false -======= - podProvider: false, - mirrorGraphName: null ->>>>>>> 2.0 }, dependencies: ['triplestore', 'jsonld'], actions: { attach: attachAction, clear: clearAction, -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message create: createAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message createAndAttach: createAndAttachAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message delete: deleteAction, detach: detachAction, exist: existAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message get: getAction, getAll: getAllAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceTy... Remove this comment to see the full error message getPath: getPathAction, getUris: getUrisAction, includes: includesAction, isEmpty: isEmptyAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message post: postAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { containerU... Remove this comment to see the full error message -======= - create: createAction, - createAndAttach: createAndAttachAction, - delete: deleteAction, - detach: detachAction, - exist: existAction, - get: getAction, - getAll: getAllAction, - getPath: getPathAction, - getUris: getUrisAction, - includes: includesAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ containerUri: { type: "string... Remove this comment to see the full error message - isEmpty: isEmptyAction, - post: postAction, ->>>>>>> 2.0 patch: patchAction }, hooks: { diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index 6701c2a6a..938a3e53b 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -4,26 +4,14 @@ const Schema = { visibility: 'public', params: { actionName: { type: 'string' }, -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ type: "number"; default: number; }' is not... Remove this comment to see the full error message -======= ->>>>>>> 2.0 priority: { type: 'number', default: 5 } }, async handler(ctx) { const { actionName, priority } = ctx.params; -<<<<<<< HEAD - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.authorizers.push({ actionName, priority }); // Re-order all authorizers by priority - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. -======= - this.authorizers.push({ actionName, priority }); - - // Re-order all authorizers by priority ->>>>>>> 2.0 this.authorizers.sort((a: any, b: any) => b.priority - a.priority); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index 4ca1f93ea..8e3d6a1db 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -1,6 +1,3 @@ -<<<<<<< HEAD -export const visibility = 'public'; -======= import { ActionSchema } from 'moleculer'; const Schema = { @@ -11,4 +8,3 @@ const Schema = { } satisfies ActionSchema; export default Schema; ->>>>>>> 2.0 diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 3991c4024..3b6c9db5c 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -3,10 +3,6 @@ import { ServiceSchema } from 'moleculer'; import getByTypeAction from './actions/getByType.ts'; import getByUriAction from './actions/getByUri.ts'; import getUriAction from './actions/getUri.ts'; -<<<<<<< HEAD -// @ts-expect-error TS(1192): Module '"/home/laurin/projects/virtual-assembly/se... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import listAction from './actions/list.ts'; import registerAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; @@ -21,18 +17,10 @@ const LdpRegistrySchema = { }, dependencies: ['ldp.container', 'api'], actions: { -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { type: { ty... Remove this comment to see the full error message -======= ->>>>>>> 2.0 getByType: getByTypeAction, getByUri: getByUriAction, getUri: getUriAction, list: listAction, -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { path: { ty... Remove this comment to see the full error message -======= ->>>>>>> 2.0 register: registerAction }, async started() { @@ -51,15 +39,10 @@ const LdpRegistrySchema = { events: { 'auth.registered': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId, accountData } = ctx.params; // We want to add user's containers only in Pod provider config if (this.settings.podProvider) { const storageUrl = await ctx.call('solid-storage.getUrl', { webId }); -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 const registeredContainers = await this.actions.list({ dataset: accountData.username }, { parentCtx: ctx }); // Go through each registered containers for (const options of Object.values(registeredContainers)) { diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index 32321d5db..5da8f9053 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,7 +1,3 @@ -<<<<<<< HEAD -======= -import { MIME_TYPES } from '@semapps/mime-types'; ->>>>>>> 2.0 import { ActionSchema } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; @@ -9,106 +5,43 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message noGraph: { type: 'boolean', default: false }, webId: { type: 'string', optional: true }, -======= - webId: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message - accept: { type: 'string', default: MIME_TYPES.JSON }, ->>>>>>> 2.0 jsonContext: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, // Inspired from https://developer.chrome.com/docs/workbox/caching-strategies-overview/#caching-strategies strategy: { type: 'enum', - // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message values: ['cacheFirst', 'networkFirst', 'cacheOnly', 'networkOnly', 'staleWhileRevalidate'], default: 'cacheFirst' } }, async handler(ctx) { -<<<<<<< HEAD const { resourceUri, jsonContext, ...rest } = ctx.params; -======= - const { resourceUri, accept, jsonContext, ...rest } = ctx.params; ->>>>>>> 2.0 - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // Without webId, we have no way to know which dataset to look in, so get from network const strategy = -<<<<<<< HEAD - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. -======= ->>>>>>> 2.0 this.settings.podProvider && (!webId || webId === 'anon' || webId === 'system') ? 'networkOnly' : ctx.params.strategy; -<<<<<<< HEAD - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. -======= ->>>>>>> 2.0 if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } switch (strategy) { case 'cacheFirst': -<<<<<<< HEAD - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return ( - this.actions - // @ts-expect-error TS(2339): Property 'getStored' does not exist on type 'strin... Remove this comment to see the full error message - .getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }) - .catch((e: any) => { - if (e.code === 404) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { - parentCtx: ctx - }); - } else { - throw e; - } - }) - ); - - case 'networkFirst': - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return ( - this.actions - // @ts-expect-error TS(2339): Property 'getNetwork' does not exist on type 'stri... Remove this comment to see the full error message - .getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }) - .catch((e: any) => { - if (e.code === 404) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { - parentCtx: ctx - }); - } else { - throw e; - } - }) - ); - - case 'cacheOnly': - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { -======= return this.actions - .getStored(cleanUndefined({ resourceUri, webId, accept, jsonContext, ...rest }), { parentCtx: ctx }) - .catch(e => { + .getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }) + .catch((e: any) => { if (e.code === 404) { - return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, accept, jsonContext }), { + return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }); } else { @@ -118,10 +51,10 @@ const Schema = { case 'networkFirst': return this.actions - .getNetwork(cleanUndefined({ resourceUri, webId, accept, jsonContext }), { parentCtx: ctx }) - .catch(e => { + .getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }) + .catch((e: any) => { if (e.code === 404) { - return this.actions.getStored(cleanUndefined({ resourceUri, webId, accept, jsonContext, ...rest }), { + return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }); } else { @@ -130,18 +63,12 @@ const Schema = { }); case 'cacheOnly': - return this.actions.getStored(cleanUndefined({ resourceUri, webId, accept, jsonContext, ...rest }), { ->>>>>>> 2.0 + return this.actions.getStored(cleanUndefined({ resourceUri, webId, jsonContext, ...rest }), { parentCtx: ctx }); case 'networkOnly': -<<<<<<< HEAD - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, jsonContext }), { parentCtx: ctx }); -======= - return this.actions.getNetwork(cleanUndefined({ resourceUri, webId, accept, jsonContext }), { parentCtx: ctx }); ->>>>>>> 2.0 case 'staleWhileRevalidate': // Not implemented yet diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index c79cfd395..0a7326f07 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,47 +1,29 @@ import fetch from 'node-fetch'; import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema } from 'moleculer'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, -<<<<<<< HEAD -======= - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message - accept: { type: 'string', default: MIME_TYPES.JSON }, ->>>>>>> 2.0 jsonContext: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { -<<<<<<< HEAD const { resourceUri, jsonContext } = ctx.params; -======= - const { resourceUri, accept, jsonContext } = ctx.params; ->>>>>>> 2.0 - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const headers = new fetch.Headers({ accept: MIME_TYPES.JSON }); if (jsonContext) headers.set('JsonLdContext', JSON.stringify(jsonContext)); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } @@ -50,9 +32,7 @@ const Schema = { webId && webId !== 'system' && webId !== 'anon' && - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. webId.startsWith(this.settings.baseUrl) && - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message (await this.proxyAvailable()) ) { const response = await ctx.call('signature.proxy.query', { diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index fa401a268..363d25ea2 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,43 +1,27 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema } from 'moleculer'; -<<<<<<< HEAD - -const { MoleculerError } = require('moleculer').Errors; -======= -import { buildBlankNodesQuery } from '../../../utils.ts'; - import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, -<<<<<<< HEAD -======= - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message - accept: { type: 'string', default: MIME_TYPES.JSON }, ->>>>>>> 2.0 jsonContext: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { -<<<<<<< HEAD - const { resourceUri, jsonContext, noGraph } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const { resourceUri, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); if (!exist) - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); const result = await ctx.call('triplestore.query', { @@ -68,58 +52,6 @@ const Schema = { }); return result2; -======= - const { resourceUri, jsonContext } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - - // No options will be returned by ldp.registry.getByUri unless the resource is in a local container (this is the case for activities) - // TODO Store the context of the original resource ? - const { accept } = { - ...(await ctx.call('ldp.registry.getByUri', { resourceUri })), - ...ctx.params - }; - - const graphName = await this.actions.getGraph({ resourceUri, webId }, { parentCtx: ctx }); - - // If resource exists - if (graphName !== false) { - const blankNodesQuery = buildBlankNodesQuery(4); - - let result = await ctx.call('triplestore.query', { - query: ` - ${await ctx.call('ontologies.getRdfPrefixes')} - CONSTRUCT { - ${blankNodesQuery.construct} - } - WHERE { - ${graphName ? `GRAPH <${graphName}> {` : ''} - BIND(<${resourceUri}> AS ?s1) . - ${blankNodesQuery.where} - ${graphName ? '}' : ''} - } - `, - accept, - webId - }); - - // If we asked for JSON-LD, frame it in order to have clean, consistent results - if (accept === MIME_TYPES.JSON) { - result = await ctx.call('jsonld.parser.frame', { - input: result, - frame: { - '@context': jsonContext || (await ctx.call('jsonld.context.get')), - '@id': resourceUri - } - }); - } - - return result; - } else { - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); - } ->>>>>>> 2.0 } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index f654e405b..71b8a1c29 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -7,15 +7,8 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message resource: { type: 'object', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message keepInSync: { type: 'boolean', default: false }, -<<<<<<< HEAD -======= - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message - mirrorGraph: { type: 'boolean', default: false }, ->>>>>>> 2.0 webId: { type: 'string', optional: true }, dataset: { type: 'string', optional: true } }, @@ -27,7 +20,6 @@ const Schema = { } if (!resource) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. resource = await this.actions.getNetwork({ resourceUri, webId }, { parentCtx: ctx }); } @@ -40,7 +32,6 @@ const Schema = { resourceUri = resource.id || resource['@id']; } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.isRemote({ resourceUri, dataset }, { parentCtx: ctx }))) { throw new Error( `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${dataset}))` @@ -55,7 +46,6 @@ const Schema = { }; } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!dataset && this.settings.podProvider) { if (!webId) { throw new Error(`In Pod provider config, a webId or dataset param must be provided to ldp.remote.store`); @@ -84,7 +74,6 @@ const Schema = { dataset }); - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.remote.stored', diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index b5730a793..41e1c505c 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -3,10 +3,6 @@ import Schedule from 'moleculer-schedule'; import { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; -<<<<<<< HEAD -======= -import getGraphAction from './actions/getGraph.ts'; ->>>>>>> 2.0 import getNetworkAction from './actions/getNetwork.ts'; import getStoredAction from './actions/getStored.ts'; import isRemoteAction from './actions/isRemote.ts'; @@ -17,35 +13,16 @@ const LdpRemoteSchema = { mixins: [Schedule], settings: { baseUrl: null, -<<<<<<< HEAD podProvider: false -======= - podProvider: false, - mirrorGraphName: null ->>>>>>> 2.0 }, dependencies: ['triplestore', 'jsonld'], actions: { delete: deleteAction, -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message get: getAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message getNetwork: getNetworkAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message getStored: getStoredAction, isRemote: isRemoteAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message -======= - get: getAction, - getGraph: getGraphAction, - getNetwork: getNetworkAction, - getStored: getStoredAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message - isRemote: isRemoteAction, ->>>>>>> 2.0 store: storeAction, - runCron: { // Used by tests handler() { @@ -64,11 +41,7 @@ const LdpRemoteSchema = { query: ` SELECT DISTINCT ?s WHERE { -<<<<<<< HEAD GRAPH ?g { -======= - GRAPH <${this.settings.mirrorGraphName}> { ->>>>>>> 2.0 ?s ?o } } @@ -79,12 +52,7 @@ const LdpRemoteSchema = { try { await this.actions.store({ resourceUri, -<<<<<<< HEAD keepInSync: true -======= - keepInSync: true, - mirrorGraph: true ->>>>>>> 2.0 }); } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index b1a63f8fe..3100735a7 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,25 +1,15 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema } from 'moleculer'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const Schema = { visibility: 'public', params: { -<<<<<<< HEAD // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, resourceUri: { type: 'string' }, -======= - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message - resource: 'object', ->>>>>>> 2.0 webId: { type: 'string', optional: true @@ -30,13 +20,8 @@ const Schema = { } }, async handler(ctx) { -<<<<<<< HEAD let { resource, resourceUri, contentType } = ctx.params; // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. -======= - let { resource, contentType } = ctx.params; - // @ts-expect-error ->>>>>>> 2.0 const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (contentType && contentType !== MIME_TYPES.JSON) @@ -63,36 +48,11 @@ const Schema = { }; } -<<<<<<< HEAD await ctx.call('triplestore.insert', { resource, contentType, webId, graphName: resourceUri -======= - let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); - // see PUT - newTriples = this.filterOtherNamedNodes(newTriples, resourceUri); - // see PUT - newTriples = this.convertBlankNodesToVars(newTriples); - // see PUT - newTriples = this.removeDuplicatedVariables(newTriples); - - const triplesToAdd = newTriples.reverse(); - - const newBlankNodes = newTriples.filter((triple: any) => triple.object.termType === 'Variable'); - - // Generate the query - let query = ''; - if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; - query += 'WHERE { '; - if (newBlankNodes.length > 0) query += this.bindNewBlankNodes(newBlankNodes); - query += ` }`; - - await ctx.call('triplestore.update', { - query, - webId ->>>>>>> 2.0 }); // TODO See if using controlledAction is still necessary now blank nodes are automatically detected diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 8b7ebb2e4..56d14a7dd 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,7 +1,3 @@ -<<<<<<< HEAD -======= -import { triple, namedNode, variable } from '@rdfjs/data-model'; ->>>>>>> 2.0 import { ActionSchema } from 'moleculer'; const Schema = { diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index 92fbb1c06..124f01f60 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -31,16 +31,10 @@ const Schema = { // Use the root container URI // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. containerUri = this.settings.podProvider -<<<<<<< HEAD ? // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) : // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.settings.baseUrl; -======= - ? // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) - : this.settings.baseUrl; ->>>>>>> 2.0 } let resourceAlreadyExists = await ctx.call('ldp.resource.exist', { diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index db65c2d70..3fab06e43 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -31,11 +31,7 @@ const Schema = { keys: ['resourceUri', 'jsonContext'] }, async handler(ctx) { -<<<<<<< HEAD const { resourceUri, accept, noGraph, jsonContext } = ctx.params; -======= - const { resourceUri, accept, jsonContext } = ctx.params; ->>>>>>> 2.0 // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 36e8f27d9..9cdf9b836 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -16,13 +16,9 @@ const Schema = { query: ` SELECT ?type WHERE { -<<<<<<< HEAD GRAPH <${resourceUri}> { <${resourceUri}> a ?type . } -======= - <${resourceUri}> a ?type . ->>>>>>> 2.0 } `, webId: 'system' diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index dd1ecade8..dc0a85aef 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,17 +1,9 @@ -<<<<<<< HEAD import { namedNode } from '@rdfjs/data-model'; import { ActionSchema } from 'moleculer'; - -const { MoleculerError } = require('moleculer').Errors; - -======= -import { ActionSchema } from 'moleculer'; - import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 function checkTriplesSubjectIsResource(triples: any, resourceUri: any) { for (const triple of triples) { switch (triple.subject.termType) { diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index d7a8d249d..4b7bfca7e 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -2,14 +2,9 @@ import path from 'path'; import fs from 'fs'; import { ActionSchema } from 'moleculer'; import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/methods.ts b/src/middleware/packages/ldp/services/resource/methods.ts index 5acba41a0..8d00585ce 100644 --- a/src/middleware/packages/ldp/services/resource/methods.ts +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -32,7 +32,6 @@ export default { .on('error', reject); }); }, -<<<<<<< HEAD:src/middleware/packages/ldp/services/resource/methods.ts // @ts-expect-error async bodyToTriples(body, contentType) { if (contentType === MIME_TYPES.JSON) { @@ -52,19 +51,8 @@ export default { .on('end', () => resolve(res)); }); }, - // Filter out triples whose subject is not the resource itself - // We don't want to update or delete resources with IDs - filterOtherNamedNodes(triples: any, resourceUri: any) { - return triples.filter( - (triple: any) => !(triple.subject.termType === 'NamedNode' && triple.subject.value !== resourceUri) - ); - }, convertBlankNodesToVars(triples: any) { return triples.map((triple: any) => { -======= - convertBlankNodesToVars(triples) { - return triples.map(triple => { ->>>>>>> 222b281308a99e519f536b00d53ed2b31812d6e3:src/middleware/packages/ldp/services/resource/methods.js if (triple.subject.termType === 'BlankNode') { triple.subject = variable(triple.subject.value); } diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index b6dabac7b..c13e52123 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -2,14 +2,9 @@ import { negotiateTypeMime, MIME_TYPES } from '@semapps/mime-types'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'busb... Remove this comment to see the full error message import Busboy from 'busboy'; import streams from 'memory-streams'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const handledMimeTypes = [MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE, MIME_TYPES.SPARQL_UPDATE]; @@ -124,10 +119,6 @@ const parseFile = (req: any, res: any, next: any) => { busboy.on('file', (fieldname: any, file: any, filename: any, encoding: any, mimetype: any) => { // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. const readableStream = new streams.ReadableStream(); -<<<<<<< HEAD -======= - // @ts-expect-error ->>>>>>> 2.0 file.on('data', (data: any) => readableStream.push(data)); files.push({ fieldname, diff --git a/src/middleware/packages/mime-types/index.ts b/src/middleware/packages/mime-types/index.ts index 3d0ade5ce..43f8ec43d 100644 --- a/src/middleware/packages/mime-types/index.ts +++ b/src/middleware/packages/mime-types/index.ts @@ -1,14 +1,9 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'nego... Remove this comment to see the full error message import Negotiator from 'negotiator'; import { MIME_TYPES, TYPES_REPO } from './constants.ts'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const negotiateType = function (incomingType: any) { const availableMediaTypes: any = []; diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 0a96fa559..c6c28782f 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -4,13 +4,9 @@ import path from 'path'; import MailService from 'moleculer-mail'; import { getSlugFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; -<<<<<<< HEAD - -======= import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); ->>>>>>> 2.0 const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); const SingleMailNotificationsService = { @@ -67,10 +63,6 @@ const SingleMailNotificationsService = { }); } } else { -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'logger' does not exist on type 'ServiceE... Remove this comment to see the full error message ->>>>>>> 2.0 this.logger.warn(`No account found for local recipient ${recipientUri}`); } } diff --git a/src/middleware/packages/ontologies/actions/get.ts b/src/middleware/packages/ontologies/actions/get.ts index b59ae0e0a..52da3d741 100644 --- a/src/middleware/packages/ontologies/actions/get.ts +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -16,17 +16,10 @@ const Schema = { // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. ontology = this.ontologies[prefix] || false; } else if (namespace) { -<<<<<<< HEAD // @ts-expect-error TS(2769): No overload matches this call. ontology = Object.values(this.ontologies).find(o => o.namespace === namespace); } else if (uri) { // @ts-expect-error TS(2769): No overload matches this call. -======= - // @ts-expect-error TS(18046): 'o' is of type 'unknown'. - ontology = Object.values(this.ontologies).find(o => o.namespace === namespace); - } else if (uri) { - // @ts-expect-error TS(18046): 'o' is of type 'unknown'. ->>>>>>> 2.0 ontology = Object.values(this.ontologies).find(o => uri.startsWith(o.namespace)); } else { throw new Error('You must provide a prefix, namespace or uri parameter'); diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index db1387a1f..f1f0dd225 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -4,10 +4,7 @@ const Schema = { visibility: 'public', cache: true, async handler(ctx) { -<<<<<<< HEAD // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. -======= ->>>>>>> 2.0 const ontologies = await this.actions.list({}, { parentCtx: ctx }); return Object.fromEntries( ontologies diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index 6e18138de..6f9f9cd28 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -4,10 +4,7 @@ const Schema = { visibility: 'public', cache: true, async handler(ctx) { -<<<<<<< HEAD // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. -======= ->>>>>>> 2.0 const ontologies = await this.actions.list({}, { parentCtx: ctx }); return ontologies .sort((a: any, b: any) => (a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0)) diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index 4749ecaf4..47035764f 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -4,10 +4,7 @@ const Schema = { visibility: 'public', cache: true, handler() { -<<<<<<< HEAD // @ts-expect-error TS(2769): No overload matches this call. -======= ->>>>>>> 2.0 return Object.values(this.ontologies); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ontologies/index.ts b/src/middleware/packages/ontologies/index.ts index 5ee6c46a2..dae6c20ea 100644 --- a/src/middleware/packages/ontologies/index.ts +++ b/src/middleware/packages/ontologies/index.ts @@ -1,25 +1,9 @@ import OntologiesService from './service.ts'; import OntologiesRegistryService from './sub-services/registry.ts'; -<<<<<<< HEAD -// @ts-expect-error TS(2307): Cannot find module './ontologies/core.ts' or its c... Remove this comment to see the full error message -export * from './ontologies/core.ts'; -// @ts-expect-error TS(2307): Cannot find module './ontologies/solid.ts' or its ... Remove this comment to see the full error message -export * from './ontologies/solid.ts'; -// @ts-expect-error TS(2307): Cannot find module './ontologies/custom.ts' or its... Remove this comment to see the full error message -export * from './ontologies/custom.ts'; -export { OntologiesService, OntologiesRegistryService }; -// @ts-expect-error TS(7022): 'coreOntologies' implicitly has type 'any' because... Remove this comment to see the full error message -export const coreOntologies = Object.values(coreOntologies); -// @ts-expect-error TS(7022): 'solidOntologies' implicitly has type 'any' becaus... Remove this comment to see the full error message -export const solidOntologies = Object.values(solidOntologies); -// @ts-expect-error TS(7022): 'customOntologies' implicitly has type 'any' becau... Remove this comment to see the full error message -export const customOntologies = Object.values(customOntologies); -======= export { OntologiesService, OntologiesRegistryService }; export * from './ontologies/core/index.ts'; export * from './ontologies/solid/index.ts'; export * from './ontologies/custom/index.ts'; export { skos } from './ontologies/core/index.ts'; ->>>>>>> 2.0 diff --git a/src/middleware/packages/ontologies/ontologies/core/index.ts b/src/middleware/packages/ontologies/ontologies/core/index.ts index be77a2adf..297091a3b 100644 --- a/src/middleware/packages/ontologies/ontologies/core/index.ts +++ b/src/middleware/packages/ontologies/ontologies/core/index.ts @@ -11,13 +11,6 @@ import sec from './sec.json' with { type: 'json' }; import semapps from './semapps.json' with { type: 'json' }; import skos from './skos.json' with { type: 'json' }; import vcard from './vcard.json' with { type: 'json' }; -<<<<<<< HEAD -// @ts-expect-error TS(1141): String literal expected. -import void from './void.json' with { type: 'json' }; -import xsd from './xsd.json' with { type: 'json' }; -// @ts-expect-error TS(2304): Cannot find name 'void'. -export { acl, as, cred, dc, did, foaf, ldp, rdf, rdfs, sec, semapps, skos, vcard, void, xsd }; -======= import voidOntology from './void.json' with { type: 'json' }; import xsd from './xsd.json' with { type: 'json' }; @@ -39,4 +32,3 @@ export { xsd, voidOntology }; ->>>>>>> 2.0 diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index 8cef5dba5..2548f6692 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -32,25 +32,17 @@ const OntologiesSchema = { await this.registerAll(); }, actions: { -<<<<<<< HEAD // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { uri: strin... Remove this comment to see the full error message findPrefix: findPrefixAction, // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { prefix: st... Remove this comment to see the full error message -======= - findPrefix: findPrefixAction, ->>>>>>> 2.0 findNamespace: findNamespaceAction, get: getAction, getPrefixes: getPrefixesAction, getRdfPrefixes: getRdfPrefixesAction, list: listAction, -<<<<<<< HEAD // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { value: str... Remove this comment to see the full error message prefixToUri: prefixToUriAction, // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { prefix: st... Remove this comment to see the full error message -======= - prefixToUri: prefixToUriAction, ->>>>>>> 2.0 register: registerAction }, methods: { diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index c2b403fd7..130711ea9 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -229,10 +229,6 @@ const Schema = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message const { collectionUri, itemUri } = ctx.params; -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'onContainerOrCollectionEvent' does not e... Remove this comment to see the full error message ->>>>>>> 2.0 this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); } } diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 6bd5f13dc..8b10c3254 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -6,21 +6,12 @@ import LinkHeader from 'http-link-header'; import { v4 as uuidv4 } from 'uuid'; import DbService from 'moleculer-db'; import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; -<<<<<<< HEAD -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { notify } from '@semapps/ontologies'; import { TripleStoreAdapter } from '@semapps/triplestore'; import { ServiceSchema } from 'moleculer'; - -<<<<<<< HEAD -const { MoleculerError } = require('moleculer').Errors; -======= import { Errors } from 'moleculer'; const { MoleculerError } = Errors; ->>>>>>> 2.0 const SolidNotificationsListenerSchema = { name: 'solid-notifications.listener' as const, diff --git a/src/middleware/packages/solid/services/notifications/provider.ts b/src/middleware/packages/solid/services/notifications/provider.ts index a3a93078d..f7c857a75 100644 --- a/src/middleware/packages/solid/services/notifications/provider.ts +++ b/src/middleware/packages/solid/services/notifications/provider.ts @@ -1,9 +1,5 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; -<<<<<<< HEAD -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { notify } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import WebhookChannelService from './channels/webhook-channel.ts'; diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index f546b8b35..3370bb06d 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -1,8 +1,4 @@ import { SingleResourceContainerMixin } from '@semapps/ldp'; -<<<<<<< HEAD -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { pim } from '@semapps/ontologies'; import { namedNode, triple } from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 8575265c4..7ad042862 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,9 +1,5 @@ import urlJoin from 'url-join'; import { triple, namedNode } from '@rdfjs/data-model'; -<<<<<<< HEAD -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { pim } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; @@ -65,10 +61,6 @@ const SolidStorageSchema = { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 const storageUrl = await this.actions.getUrl({ webId }, { parentCtx: ctx }); // Attach the storage URL to the webId diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index 932effd06..581a4878a 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -1,8 +1,5 @@ import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@semapps/ldp'; -<<<<<<< HEAD // @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message -======= ->>>>>>> 2.0 import { solid, skos, apods } from '@semapps/ontologies'; import { MIME_TYPES } from '@semapps/mime-types'; import { namedNode, triple } from '@rdfjs/data-model'; @@ -23,11 +20,8 @@ const TypeIndexesSchema = { }, dependencies: ['ontologies'], created() { + // @ts-expect-error TS(2322): Type '{ name: "type-registrations"; mixins: { sett... Remove this comment to see the full error message this.broker.createService({ -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ name: "type-registrations"; mixins: { sett... Remove this comment to see the full error message -======= ->>>>>>> 2.0 mixins: [TypeRegistrationsService] }); }, @@ -214,10 +208,6 @@ const TypeIndexesSchema = { await ctx.call('type-registrations.waitForContainerCreation', { containerUri: registrationsContainerUri }); await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); } } diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index cf3fad59a..416abe0a3 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -295,10 +295,6 @@ const TypeRegistrationsSchema = { if (options?.typeIndex) { await ctx.call('type-indexes.waitForIndexCreation', { type: options.typeIndex, webId }); -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message ->>>>>>> 2.0 await this.actions.register( { types: arrayOf(options?.acceptedTypes), diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 3cde1a834..50fadee16 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -64,10 +64,6 @@ const SparqlEndpointService = { async handler(ctx) { // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; -<<<<<<< HEAD -======= - // @ts-expect-error TS(2339): Property 'settings' does not exist on type 'Servic... Remove this comment to see the full error message ->>>>>>> 2.0 if (this.settings.podProvider) { await ctx.call('activitypub.actor.addEndpoint', { actorUri: webId, diff --git a/src/middleware/packages/triplestore/adapter.ts b/src/middleware/packages/triplestore/adapter.ts index 492a3c30a..6364a2339 100644 --- a/src/middleware/packages/triplestore/adapter.ts +++ b/src/middleware/packages/triplestore/adapter.ts @@ -66,16 +66,10 @@ class TripleStoreAdapter { ?s ?p ?o } WHERE { -<<<<<<< HEAD - // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message - // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message - ?s a <${this.ontology + this.type}> . -======= ?s a <${ // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message this.ontology + this.type }> . ->>>>>>> 2.0 ?s ?p ?o . ${ query @@ -225,16 +219,10 @@ class TripleStoreAdapter { <${sanitizeSparqlUri(_id)}> ?p ?o . } INSERT { -<<<<<<< HEAD - // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message - // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message - <${sanitizeSparqlUri(_id)}> a <${this.ontology + this.type}> . -======= <${sanitizeSparqlUri(_id)}> a <${ // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message this.ontology + this.type }> . ->>>>>>> 2.0 ${ newData ? Object.keys(newData) diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index c4f18ecd5..7e7445e53 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -2,7 +2,7 @@ import { SparqlJsonParser } from 'sparqljson-parse'; import sparqljsModule from 'sparqljs'; import fetch from 'node-fetch'; import { throw403, throw500 } from '@semapps/middlewares'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; import countTriplesOfSubject from './actions/countTriplesOfSubject.ts'; import deleteOrphanBlankNodes from './actions/deleteOrphanBlankNodes.ts'; import dropAll from './actions/dropAll.ts'; @@ -11,18 +11,10 @@ import query from './actions/query.ts'; import update from './actions/update.ts'; import tripleExist from './actions/tripleExist.ts'; import DatasetService from './subservices/dataset.ts'; -<<<<<<< HEAD import DocumentService from './subservices/document.ts'; const SparqlGenerator = sparqljsModule.Generator; -const { MoleculerError } = require('moleculer').Errors; -======= - -const SparqlGenerator = sparqljsModule.Generator; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; ->>>>>>> 2.0 const TripleStoreService = { name: 'triplestore' as const, @@ -33,7 +25,6 @@ const TripleStoreService = { mainDataset: null, fusekiBase: null, // Sub-services customization -<<<<<<< HEAD dataset: {}, document: {} }, @@ -44,18 +35,6 @@ const TripleStoreService = { if (dataset !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message this.broker.createService({ -======= - dataset: {} - }, - dependencies: ['jsonld.parser'], - async created() { - const { url, user, password, dataset, fusekiBase } = this.settings; - this.subservices = {}; - - if (dataset !== false) { - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message - this.subservices.dataset = this.broker.createService({ ->>>>>>> 2.0 mixins: [DatasetService], settings: { url, @@ -66,7 +45,6 @@ const TripleStoreService = { } }); } -<<<<<<< HEAD if (document !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message @@ -75,8 +53,6 @@ const TripleStoreService = { settings: document }); } -======= ->>>>>>> 2.0 }, started() { this.sparqlJsonParser = new SparqlJsonParser(); @@ -85,24 +61,11 @@ const TripleStoreService = { }); }, actions: { -<<<<<<< HEAD - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resource: ... Remove this comment to see the full error message - insert, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { query: { t... Remove this comment to see the full error message - update, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { query: { t... Remove this comment to see the full error message - query, - dropAll, - countTriplesOfSubject, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { triple: { ... Remove this comment to see the full error message -======= insert, update, query, dropAll, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ uri: { type: "string"; }; web... Remove this comment to see the full error message countTriplesOfSubject, ->>>>>>> 2.0 tripleExist, deleteOrphanBlankNodes }, From d4cfa317b4d1997d45dc0dcfc819ca4243e1809d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 9 Sep 2025 18:13:10 +0200 Subject: [PATCH 067/165] Fix some tests after merge --- src/middleware/package.json | 10 +- .../subservices/collection/actions/get.ts | 3 +- .../subservices/collection/index.ts | 3 +- src/middleware/packages/crypto/index.ts | 9 +- src/middleware/packages/jsonld/package.json | 1 + .../packages/jsonld/services/parser/index.ts | 9 +- .../packages/ldp/mixins/mime-types.ts | 3 +- .../ldp/mixins/single-resource-container.ts | 3 +- .../ldp/services/api/actions/delete.ts | 2 +- .../packages/ldp/services/api/actions/get.ts | 2 +- .../packages/ldp/services/api/actions/head.ts | 2 +- .../ldp/services/api/actions/patch.ts | 2 +- .../packages/ldp/services/api/actions/post.ts | 2 +- .../packages/ldp/services/api/actions/put.ts | 2 +- .../ldp/services/container/actions/attach.ts | 3 +- .../ldp/services/container/actions/get.ts | 4 +- .../ldp/services/container/actions/patch.ts | 4 +- .../ldp/services/container/actions/post.ts | 4 +- .../ldp/services/permissions/actions/check.ts | 4 +- .../ldp/services/remote/actions/get.ts | 1 - .../ldp/services/remote/actions/getNetwork.ts | 3 +- .../ldp/services/remote/actions/getStored.ts | 17 +- .../ldp/services/resource/actions/create.ts | 3 +- .../ldp/services/resource/actions/get.ts | 30 +-- .../ldp/services/resource/actions/patch.ts | 3 +- .../ldp/services/resource/actions/put.ts | 4 +- .../ldp/services/resource/actions/upload.ts | 3 +- .../packages/ldp/services/resource/methods.ts | 4 +- .../solid/services/notifications/listener.ts | 3 +- src/middleware/packages/void/service.ts | 5 +- .../services/group/actions/addMember.ts | 4 +- .../webacl/services/group/actions/create.ts | 4 +- .../webacl/services/group/actions/delete.ts | 4 +- .../webacl/services/group/actions/exist.ts | 4 +- .../services/group/actions/getMembers.ts | 4 +- .../webacl/services/group/actions/isMember.ts | 4 +- .../services/group/actions/removeMember.ts | 4 +- .../services/resource/actions/addRights.ts | 4 +- .../services/resource/actions/getRights.ts | 5 +- .../services/resource/actions/removeRights.ts | 4 +- .../services/resource/actions/setRights.ts | 4 +- src/middleware/packages/webacl/utils.ts | 8 +- src/middleware/packages/webhooks/service.ts | 4 +- .../tests/activitypub/initialize.ts | 2 +- src/middleware/tests/crypto/initialize.ts | 6 +- src/middleware/tests/jest.config.js | 13 -- src/middleware/tests/jsonld/initialize.ts | 4 +- src/middleware/tests/ldp/initialize.ts | 2 +- src/middleware/tests/ontologies/initialize.ts | 4 +- src/middleware/tests/package.json | 2 +- src/middleware/tests/utils.ts | 2 +- src/middleware/tests/webId/webId.test.ts | 2 +- src/middleware/tests/webacl/initialize.ts | 2 +- src/middleware/yarn.lock | 185 +----------------- 54 files changed, 71 insertions(+), 358 deletions(-) delete mode 100644 src/middleware/tests/jest.config.js diff --git a/src/middleware/package.json b/src/middleware/package.json index fdc0e67bd..cab309537 100644 --- a/src/middleware/package.json +++ b/src/middleware/package.json @@ -33,7 +33,7 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.1.3", "lerna": "^8.0.1", - "moleculer": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", + "moleculer": "^0.14.35", "nx": "17.2.5", "prettier": "^3.1.1", "typescript": "^5.9.2" @@ -46,11 +46,5 @@ "node": ">=22.12.0" }, "version": "0.7.0", - "packageManager_": "yarn@4.9.2", - "packageManager": "yarn@4.9.2", - "resolutions": { - "moleculer@npm:^0.14.29": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", - "moleculer@npm:^0.14.18": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", - "moleculer@npm:^0.14.17": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" - } + "packageManager": "yarn@4.9.2" } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 02919331d..61a22b7db 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,7 +1,6 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { getValueFromDataType } from '../../../../../utils.ts'; -import { Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 36104a0ec..981c38a11 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -2,9 +2,8 @@ import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/l import { sanitizeSparqlQuery } from '@semapps/triplestore'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; import getAction from './actions/get.ts'; -import { Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/crypto/index.ts b/src/middleware/packages/crypto/index.ts index 4a551bedd..557f993ac 100644 --- a/src/middleware/packages/crypto/index.ts +++ b/src/middleware/packages/crypto/index.ts @@ -1,7 +1,4 @@ -// @ts-expect-error TS(2307): Cannot find module './keys.ts' or its correspondin... Remove this comment to see the full error message -export * from './keys.ts'; -// @ts-expect-error TS(2307): Cannot find module './signature.ts' or its corresp... Remove this comment to see the full error message -export * from './signature.ts'; +export * from './keys/index.ts'; +export * from './signature/index.ts'; export * from './constants.ts'; -// @ts-expect-error TS(2307): Cannot find module './verifiable-credentials.ts' o... Remove this comment to see the full error message -export * from './verifiable-credentials.ts'; +export * from './verifiable-credentials/index.ts'; diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index b8a611e7b..45bcd5f3b 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -5,6 +5,7 @@ "license": "Apache-2.0", "author": "Virtual Assembly", "dependencies": { + "@semapps/ldp": "1.1.4", "jsonld": "^3.3.2", "jsonld-context-parser": "^2.4.0", "jsonld-streaming-parser": "^2.4.2", diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index d05ac43d4..c79699892 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -3,13 +3,11 @@ import N3 from 'n3'; import { JsonLdParser } from 'jsonld-streaming-parser'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import streamifyString from 'streamify-string'; -import rdfparseModule from 'rdf-parse'; +import rdfParser from 'rdf-parse'; import { ServiceSchema } from 'moleculer'; import { getId, isObject } from '@semapps/ldp'; import { arrayOf, isURI } from '../../utils/utils.ts'; -const rdfParser = rdfparseModule.default; - const JsonldParserSchema = { name: 'jsonld.parser' as const, dependencies: ['jsonld.document-loader'], @@ -185,12 +183,13 @@ const JsonldParserSchema = { // Frame an input according to a context and try to embed all nodes in a single node // If this is not possible (cam happen with complex documents), return a @graph without embedding async frameAndEmbed(ctx) { - const { input, jsonContext } = ctx.params; + const { input } = ctx.params; + const jsonContext = ctx.params.jsonContext || (await ctx.call('jsonld.context.get')); // Frame and embed the input const result = await ctx.call('jsonld.parser.frame', { input, - frame: { '@context': jsonContext || (await ctx.call('jsonld.context.get')) }, + frame: { '@context': jsonContext }, options: { embed: '@once', omitGraph: false // Force to return a @graph property diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index c9247cbba..731dff9d5 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -1,6 +1,5 @@ import { isMimeTypeMatching } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; -import { Errors } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index c41d476de..d08f37336 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -1,7 +1,6 @@ -import { ServiceSchema } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; import ControlledContainerMixin from './controlled-container.ts'; import { delay } from '../utils.ts'; -import { Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/api/actions/delete.ts b/src/middleware/packages/ldp/services/api/actions/delete.ts index 3dd70de4d..cd3d3c544 100644 --- a/src/middleware/packages/ldp/services/api/actions/delete.ts +++ b/src/middleware/packages/ldp/services/api/actions/delete.ts @@ -19,7 +19,7 @@ export default async function patch(this: any, ctx: any) { }; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code !== 404 && e.code !== 403) console.error(e); + if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index 09a1d11e9..12d315e5d 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -109,7 +109,7 @@ export default async function get(this: any, ctx: any) { return res; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code !== 404 && e.code !== 403) console.error(e); + if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/api/actions/head.ts b/src/middleware/packages/ldp/services/api/actions/head.ts index b753013c8..d10dbbea3 100644 --- a/src/middleware/packages/ldp/services/api/actions/head.ts +++ b/src/middleware/packages/ldp/services/api/actions/head.ts @@ -13,7 +13,7 @@ export default async function head(this: any, ctx: any) { }; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code !== 404 && e.code !== 403) console.error(e); + if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/api/actions/patch.ts b/src/middleware/packages/ldp/services/api/actions/patch.ts index 67403213f..90dfc7c8b 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.ts +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -71,7 +71,7 @@ export default async function patch(this: any, ctx: any) { ctx.meta.$statusCode = 204; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (!e.code || e.code < 400) console.error(e); + if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index 758fd773e..46ddf1027 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -56,7 +56,7 @@ export default async function post(this: any, ctx: any) { ctx.meta.$statusCode = 201; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code < 400 && e.code >= 500) console.error(e); + if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 9290cdddb..7ff2a5d97 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -38,7 +38,7 @@ export default async function post(this: any, ctx: any) { }; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code !== 404 && e.code !== 403) console.error(e); + if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 2a7058e65..8ad5baecd 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,6 +1,5 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 51d6b8f96..31d4ab15b 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,9 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; const Schema = { diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 8c532a64b..9422ff063 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,8 +1,6 @@ -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { isMirror } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; const checkTripleValidity = (triple: any, containerUri: any) => { diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index dfff2dfc2..7ef0023c3 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,10 +1,8 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; const Schema = { diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index 8a9267851..2df8eb2fb 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,6 +1,4 @@ -import { ActionSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index 5da8f9053..199389190 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -5,7 +5,6 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, - noGraph: { type: 'boolean', default: false }, webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index 0a7326f07..d2c17ed9e 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,7 +1,6 @@ import fetch from 'node-fetch'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 363d25ea2..681b3bb9c 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,6 +1,4 @@ -import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; @@ -39,19 +37,10 @@ const Schema = { webId }); - // Frame the result using the correct context in order to have clean, consistent results - const result2 = await ctx.call('jsonld.parser.frame', { + return await ctx.call('jsonld.parser.frameAndEmbed', { input: result, - frame: { - '@context': jsonContext || (await ctx.call('jsonld.context.get')), - '@id': resourceUri - }, - options: { - embed: '@once' - } + context: jsonContext || (await ctx.call('jsonld.context.get')) }); - - return result2; } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 3100735a7..ecf5272a3 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,6 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index 3fab06e43..67e133ad2 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,8 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; -import { arrayOf } from '../../../utils.ts'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; @@ -12,11 +9,8 @@ const Schema = { resourceUri: { type: 'string' }, webId: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message - noGraph: { type: 'boolean', default: false }, jsonContext: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } @@ -31,8 +25,7 @@ const Schema = { keys: ['resourceUri', 'jsonContext'] }, async handler(ctx) { - const { resourceUri, accept, noGraph, jsonContext } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. + const { resourceUri, accept, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (accept && accept !== MIME_TYPES.JSON) @@ -62,24 +55,9 @@ const Schema = { webId: 'system' }); - const frame = { '@context': jsonContext || (await ctx.call('jsonld.context.get')) }; - - // If the graph contains only blank nodes, we want them to be embedded in the resource - // Otherwise we want this action to return a @graph with all resources - const graphWithBlankNodesOnly = arrayOf(result['@graph']).every( - node => node['@id'].startsWith('_:b') || node['@id'] === resourceUri - ); - - // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message - if (graphWithBlankNodesOnly || noGraph) frame['@id'] = resourceUri; - - // Frame the result using the correct context in order to have clean, consistent results - return await ctx.call('jsonld.parser.frame', { + return await ctx.call('jsonld.parser.frameAndEmbed', { input: result, - frame, - options: { - embed: graphWithBlankNodesOnly || noGraph ? '@once' : '@never' - } + jsonContext }); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index dc0a85aef..46f0a564d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,6 +1,5 @@ import { namedNode } from '@rdfjs/data-model'; -import { ActionSchema } from 'moleculer'; -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index a5f872541..e2e64cddd 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,9 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; const Schema = { diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index 4b7bfca7e..eda38ec4b 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -1,8 +1,7 @@ import path from 'path'; import fs from 'fs'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; -import { Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/resource/methods.ts b/src/middleware/packages/ldp/services/resource/methods.ts index 8d00585ce..2f3ca8824 100644 --- a/src/middleware/packages/ldp/services/resource/methods.ts +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -2,12 +2,10 @@ import fs from 'fs'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'byte... Remove this comment to see the full error message import bytes from 'bytes'; import { variable } from '@rdfjs/data-model'; -import rdfparseModule from 'rdf-parse'; +import rdfParser from 'rdf-parse'; import streamifyString from 'streamify-string'; import { Errors } from 'moleculer'; -const rdfParser = rdfparseModule.default; - const { MoleculerError } = Errors; // TODO put each method in a different file (problems with "this" not working) diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 8b10c3254..d476968a4 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -2,14 +2,13 @@ import path from 'path'; import urlJoin from 'url-join'; import fetch from 'node-fetch'; import LinkHeader from 'http-link-header'; +import { ServiceSchema, Errors } from 'moleculer'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import DbService from 'moleculer-db'; import { parseHeader, parseRawBody, negotiateContentType, parseJson } from '@semapps/middlewares'; import { notify } from '@semapps/ontologies'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; -import { Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index fee3f4929..e99699dbb 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -3,12 +3,11 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { void as voidOntology } from '@semapps/ontologies'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; -import { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } from '@semapps/ldp'; +import { createFragmentURL, arrayOf } from '@semapps/ldp'; import { parseHeader } from '@semapps/middlewares'; -import { ServiceSchema } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; const { quad, namedNode, literal, blankNode } = DataFactory; -import { Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 9e93fe351..b1d3aebc1 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -1,8 +1,6 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 226494749..00d959062 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -2,9 +2,7 @@ import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index a11b7b09b..d76b1a39d 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -1,10 +1,8 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; export const api = async function api(this: any, ctx: any) { diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index 8455f130e..1c41f3f29 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -1,8 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 3c956e536..d406434b1 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -1,8 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 791752219..240253b16 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -1,8 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 73e77172f..87d0d97f7 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -1,8 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index c89554e32..e0c820a7e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, @@ -11,8 +11,6 @@ import { FULL_AGENTCLASS_URI } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; export const api = async function api(this: any, ctx: any) { diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 172a9b071..5d5ae400f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -2,8 +2,7 @@ import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; - -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { getAuthorizationNode, findParentContainers, @@ -13,8 +12,6 @@ import { } from '../../../utils.ts'; const { quad } = DataFactory; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; const prefixes = { diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 4ce67c00c..6c8d59631 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -1,8 +1,6 @@ -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; export const action = { diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 226a3d21e..77983177d 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import { ActionSchema, Errors } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, @@ -10,8 +10,6 @@ import { FULL_FOAF_AGENT } from '../../../utils.ts'; -import { Errors } from 'moleculer'; - const { MoleculerError } = Errors; export const api = async function api(this: any, ctx: any) { diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index 159599ceb..19ab294e9 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -3,14 +3,8 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; import { Parser } from 'n3'; import streamifyString from 'streamify-string'; -import rdfparseModule from 'rdf-parse'; +import rdfParser from 'rdf-parse'; -import { Errors } from 'moleculer'; - -const { MoleculerError } = Errors; - -// @ts-expect-error TS(2339): Property 'default' does not exist on type 'RdfPars... Remove this comment to see the full error message -const rdfParser = rdfparseModule.default; const getSlugFromUri = (str: any) => str.match(new RegExp(`.*/(.*)`))[1]; const hasType = (resource: any, type: any) => { diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index ab350d725..0ed1216ef 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -1,9 +1,7 @@ import path from 'path'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; - -import { Errors } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; const { MoleculerError, ServiceSchemaError } = Errors; diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index f3964047b..1e72c2fd8 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -9,7 +9,7 @@ import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } from '@semapps/activitypub'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { clearDataset, clearQueue } from '../utils.ts'; +import { dropDataset, clearQueue } from '../utils.ts'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index a2e5e28e3..095b21d9f 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -9,14 +9,14 @@ import { VerifiableCredentialsService } from '@semapps/crypto'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { clearDataset } from '../utils.ts'; +import { dropDataset } from '../utils.ts'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); const initialize = async (port: any, withOldKeyStore = false) => { - await clearDataset(CONFIG.MAIN_DATASET); - await clearDataset(CONFIG.SETTINGS_DATASET); + await dropDataset(CONFIG.MAIN_DATASET); + await dropDataset(CONFIG.SETTINGS_DATASET); const baseUrl = `http://localhost:${port}/`; diff --git a/src/middleware/tests/jest.config.js b/src/middleware/tests/jest.config.js deleted file mode 100644 index 084a8594f..000000000 --- a/src/middleware/tests/jest.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -const config = { - transformIgnorePatterns: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - setupFilesAfterEnv: ['./jest.setup.ts'] -}; - -export default config; diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index 190708a7a..2587a0d30 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -6,12 +6,12 @@ import { OntologiesService } from '@semapps/ontologies'; import { TripleStoreService } from '@semapps/triplestore'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { clearDataset } from '../utils.ts'; +import { dropDataset } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default async (cacher: any, persistRegistry: any) => { - await clearDataset(CONFIG.SETTINGS_DATASET); + await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ logger: { diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index bfd3d67fb..c180935e6 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -8,7 +8,7 @@ import { AuthLocalService } from '@semapps/auth'; import { ControlledContainerMixin } from '@semapps/ldp'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { clearDataset } from '../utils.ts'; +import { dropDataset } from '../utils.ts'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/src/middleware/tests/ontologies/initialize.ts b/src/middleware/tests/ontologies/initialize.ts index 55f03e451..2210e27cd 100644 --- a/src/middleware/tests/ontologies/initialize.ts +++ b/src/middleware/tests/ontologies/initialize.ts @@ -6,12 +6,12 @@ import { OntologiesService } from '@semapps/ontologies'; import { TripleStoreService } from '@semapps/triplestore'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { clearDataset } from '../utils.ts'; +import { dropDataset } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default async (cacher: any) => { - await clearDataset(CONFIG.SETTINGS_DATASET); + await dropDataset(CONFIG.SETTINGS_DATASET); const broker = new ServiceBroker({ logger: { diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 2615c4787..49212949a 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -32,7 +32,7 @@ "ioredis": "^4.27.0", "jest": "^30.0.5", "lru-cache": "10.1.0", - "moleculer": "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch", + "moleculer": "^0.14.35", "moleculer-web": "^0.10.7", "node-fetch": "^2.6.6", "rdf-data-model": "^1.0.0", diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index ed2177cb2..8aa2f2593 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -18,7 +18,7 @@ export const listDatasets = async () => { } }; -export const clearDataset = (dataset: any) => +export const dropDataset = (dataset: any) => // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message fetch(urlJoin(CONFIG.SPARQL_ENDPOINT, dataset, 'update'), { method: 'POST', diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts index ac417df10..41fc504a9 100644 --- a/src/middleware/tests/webId/webId.test.ts +++ b/src/middleware/tests/webId/webId.test.ts @@ -3,7 +3,7 @@ import { ServiceBroker, ServiceSchema } from 'moleculer'; import { CoreService } from '@semapps/core'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { clearDataset } from '../utils.ts'; +import { dropDataset } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/src/middleware/tests/webacl/initialize.ts b/src/middleware/tests/webacl/initialize.ts index 5ea3ae4a2..edc2a7a3f 100644 --- a/src/middleware/tests/webacl/initialize.ts +++ b/src/middleware/tests/webacl/initialize.ts @@ -5,7 +5,7 @@ import { as } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { fileURLToPath } from 'url'; -import { clearDataset } from '../utils.ts'; +import { dropDataset } from '../utils.ts'; import * as CONFIG from '../config.ts'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 81d5c2e8d..1297a28f0 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -3528,6 +3528,7 @@ __metadata: dependencies: "@semapps/ldp": "npm:1.1.4" "@semapps/webacl": "npm:1.1.4" + url-join: "npm:^4.0.1" peerDependencies: moleculer: ^0.14.35 languageName: unknown @@ -11916,7 +11917,7 @@ __metadata: languageName: node linkType: hard -"moleculer@npm:0.14.35": +"moleculer@npm:^0.14.17, moleculer@npm:^0.14.18, moleculer@npm:^0.14.29, moleculer@npm:^0.14.35": version: 0.14.35 resolution: "moleculer@npm:0.14.35" dependencies: @@ -12005,184 +12006,6 @@ __metadata: languageName: node linkType: hard -"moleculer@patch:moleculer@npm%3A0.14.35#~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch::version=0.14.35&hash=b9970b": - version: 0.14.35 - resolution: "moleculer@patch:moleculer@npm%3A0.14.35#~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch::version=0.14.35&hash=b9970b" - dependencies: - args: "npm:^5.0.3" - eventemitter2: "npm:^6.4.9" - fastest-validator: "npm:^1.19.0" - glob: "npm:^7.2.0" - ipaddr.js: "npm:^2.2.0" - kleur: "npm:^4.1.5" - lodash: "npm:^4.17.21" - lru-cache: "npm:^6.0.0" - node-fetch: "npm:^2.6.7" - recursive-watch: "npm:^1.1.4" - peerDependencies: - amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 - avsc: ^5.0.0 - bunyan: ^1.0.0 - cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 - dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 - debug: ^4.0.0 - etcd3: ^1.0.0 - ioredis: ^4.0.0 || ^5.0.0 - jaeger-client: ^3.0.0 - kafka-node: ^5.0.0 - log4js: ^6.0.0 - mqtt: ^4.0.0 || ^5.0.0 - msgpack5: ^5.0.0 || ^6.0.0 - nats: ^1.0.0 || ^2.0.0 - node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 - notepack.io: ^2.0.0 || ^3.0.0 - pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - protobufjs: ^6.0.0 || ^7.0.0 - redlock: ^4.0.0 - rhea-promise: ^1.0.0 || ^2.0.0 - thrift: ^0.12.0 || ^0.16.0 - winston: ^3.0.0 - peerDependenciesMeta: - amqplib: - optional: true - avsc: - optional: true - bunyan: - optional: true - cbor-x: - optional: true - dd-trace: - optional: true - debug: - optional: true - etcd3: - optional: true - ioredis: - optional: true - jaeger-client: - optional: true - kafka-node: - optional: true - log4js: - optional: true - mqtt: - optional: true - msgpack5: - optional: true - nats: - optional: true - node-nats-streaming: - optional: true - notepack.io: - optional: true - pino: - optional: true - protobufjs: - optional: true - redlock: - optional: true - rhea-promise: - optional: true - thrift: - optional: true - winston: - optional: true - bin: - moleculer-runner: bin/moleculer-runner.js - moleculer-runner-esm: bin/moleculer-runner.mjs - checksum: 10c0/595cab387e422fbdac8cedff29f44422f923309cca68e36c31acd489143f051105a8239d5e9e3117e8fe823e8b03a80ab0e70e9331e62836735f3b1c24c9b0b1 - languageName: node - linkType: hard - -"moleculer@patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch": - version: 0.14.35 - resolution: "moleculer@patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch::version=0.14.35&hash=11399c" - dependencies: - args: "npm:^5.0.3" - eventemitter2: "npm:^6.4.9" - fastest-validator: "npm:^1.19.0" - glob: "npm:^7.2.0" - ipaddr.js: "npm:^2.2.0" - kleur: "npm:^4.1.5" - lodash: "npm:^4.17.21" - lru-cache: "npm:^6.0.0" - node-fetch: "npm:^2.6.7" - recursive-watch: "npm:^1.1.4" - peerDependencies: - amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 - avsc: ^5.0.0 - bunyan: ^1.0.0 - cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 - dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 - debug: ^4.0.0 - etcd3: ^1.0.0 - ioredis: ^4.0.0 || ^5.0.0 - jaeger-client: ^3.0.0 - kafka-node: ^5.0.0 - log4js: ^6.0.0 - mqtt: ^4.0.0 || ^5.0.0 - msgpack5: ^5.0.0 || ^6.0.0 - nats: ^1.0.0 || ^2.0.0 - node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 - notepack.io: ^2.0.0 || ^3.0.0 - pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - protobufjs: ^6.0.0 || ^7.0.0 - redlock: ^4.0.0 - rhea-promise: ^1.0.0 || ^2.0.0 - thrift: ^0.12.0 || ^0.16.0 - winston: ^3.0.0 - peerDependenciesMeta: - amqplib: - optional: true - avsc: - optional: true - bunyan: - optional: true - cbor-x: - optional: true - dd-trace: - optional: true - debug: - optional: true - etcd3: - optional: true - ioredis: - optional: true - jaeger-client: - optional: true - kafka-node: - optional: true - log4js: - optional: true - mqtt: - optional: true - msgpack5: - optional: true - nats: - optional: true - node-nats-streaming: - optional: true - notepack.io: - optional: true - pino: - optional: true - protobufjs: - optional: true - redlock: - optional: true - rhea-promise: - optional: true - thrift: - optional: true - winston: - optional: true - bin: - moleculer-runner: bin/moleculer-runner.js - moleculer-runner-esm: bin/moleculer-runner.mjs - checksum: 10c0/8d454a19168bb6e0a86c362d8b462742070e315572c7e50cbbd3e33b4ddf5423b74d90d489ca7ae057a6ed244bed450f7dc52368fa8245a51a0b06630dfccaa8 - languageName: node - linkType: hard - "moment-timezone@npm:^0.5.31": version: 0.5.46 resolution: "moment-timezone@npm:0.5.46" @@ -14791,7 +14614,7 @@ __metadata: eslint-plugin-node: "npm:^11.1.0" eslint-plugin-prettier: "npm:^5.1.3" lerna: "npm:^8.0.1" - moleculer: "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + moleculer: "npm:^0.14.35" nx: "npm:17.2.5" prettier: "npm:^3.1.1" typescript: "npm:^5.9.2" @@ -14834,7 +14657,7 @@ __metadata: ioredis: "npm:^4.27.0" jest: "npm:^30.0.5" lru-cache: "npm:10.1.0" - moleculer: "patch:moleculer@patch%3Amoleculer@npm%253A0.14.35%23~/.yarn/patches/moleculer-npm-0.14.35-b9acbe0879.patch%3A%3Aversion=0.14.35&hash=b9970b#~/.yarn/patches/moleculer-patch-59829b52bf.patch" + moleculer: "npm:^0.14.35" moleculer-web: "npm:^0.10.7" node-fetch: "npm:^2.6.6" rdf-data-model: "npm:^1.0.0" From af35ed7985bb3d50444649b79ec31f1495300a6b Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 9 Sep 2025 18:22:47 +0200 Subject: [PATCH 068/165] Remove PseudoIdMixin and add migration --- .../vc-credential-container.ts | 4 +- .../vc-presentation-container.ts | 4 +- src/middleware/packages/ldp/index.ts | 2 - .../packages/ldp/mixins/pseudo-id.ts | 95 ------------------- src/middleware/packages/migration/2-0-0.ts | 48 ++++++++-- src/middleware/packages/migration/utils.ts | 31 +++++- 6 files changed, 72 insertions(+), 112 deletions(-) delete mode 100644 src/middleware/packages/ldp/mixins/pseudo-id.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index d708d6b35..06d00ece4 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; +import { ControlledContainerMixin } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; @@ -13,7 +13,7 @@ import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from */ const VCCredentialsContainer = { name: 'crypto.vc.issuer.credential-container' as const, - mixins: [ControlledContainerMixin, PseudoIdMixin], + mixins: [ControlledContainerMixin], dependencies: ['ontologies'], settings: { path: null, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index a0d4d6f14..e87a2b697 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -1,4 +1,4 @@ -import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; +import { ControlledContainerMixin } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; @@ -15,7 +15,7 @@ import { credentialsContext, credentialsContextNoGraphProof } from '../constants */ const VCPresentationContainer = { name: 'crypto.vc.holder.presentation-container' as const, - mixins: [ControlledContainerMixin, PseudoIdMixin], + mixins: [ControlledContainerMixin], settings: { path: null, excludeFromMirror: true, diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index 645dd7311..fa79bc1cc 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -7,7 +7,6 @@ import LdpResourceService from './services/resource/index.ts'; import PermissionsService from './services/permissions/index.ts'; import ControlledContainerMixin from './mixins/controlled-container.ts'; import DereferenceMixin from './mixins/dereference.ts'; -import PseudoIdMixin from './mixins/pseudo-id.ts'; import ImageProcessorMixin from './mixins/image-processor.ts'; import MimeTypesMixin from './mixins/mime-types.ts'; import DocumentTaggerMixin from './mixins/document-tagger.ts'; @@ -29,7 +28,6 @@ export { PermissionsService, ControlledContainerMixin, DereferenceMixin, - PseudoIdMixin, ImageProcessorMixin, MimeTypesMixin, DocumentTaggerMixin, diff --git a/src/middleware/packages/ldp/mixins/pseudo-id.ts b/src/middleware/packages/ldp/mixins/pseudo-id.ts deleted file mode 100644 index 1abe545b5..000000000 --- a/src/middleware/packages/ldp/mixins/pseudo-id.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { ServiceSchema } from 'moleculer'; - -/** - * MoleculerJS mixin to be applied on the ControlledContainerMixin. - * Adds support for adding different subjects to the same resource/named graph than the resource URI itself. - * For that, it uses a pseudo-id predicate. - * - * Attention: Only works with JSON-LD resources. - * - * @deprecated This is a temporary solution until we have a quad-store. - * - * @type {import('moleculer').ServiceSchema} - */ -const Schema = { - dependencies: ['ldp.resource'], - settings: { - pseudoIdPredicate: 'urn:tmp:pseudoId' - }, - methods: { - replacePseudoIdWithId(obj) { - if (Array.isArray(obj)) { - return obj.map(this.replacePseudoIdWithId); - } - if (typeof obj !== 'object') { - return obj; - } - const newObj = { ...obj }; - - if (newObj[this.settings.pseudoIdPredicate]) { - newObj.id = newObj[this.settings.pseudoIdPredicate]; - delete newObj[this.settings.pseudoIdPredicate]; - } - - for (const key in newObj) { - if (Object.hasOwn(newObj, key)) { - newObj[key] = this.replacePseudoIdWithId(newObj[key]); - } - } - return newObj; - }, - - replaceIdWithPseudoId(obj, isRoot = false) { - if (Array.isArray(obj)) { - return obj.map(this.replaceIdWithPseudoId); - } - if (typeof obj !== 'object') { - return obj; - } - const newObj = { ...obj }; - - if (!isRoot && (newObj.id || newObj['@id'])) { - newObj[this.settings.pseudoIdPredicate] = newObj['@id'] || newObj.id; - delete newObj.id; - delete newObj['@id']; - } - - for (const key in newObj) { - if (Object.hasOwn(newObj, key)) { - newObj[key] = this.replaceIdWithPseudoId(newObj[key]); - } - } - return newObj; - }, - - /** - * Replace pseudo id with id field. - * @param {object} ctx - moleculer context - * @returns { Promise } - The dereferenced object. - */ - async handleAfterGet(ctx, result) { - return this.replacePseudoIdWithId(result); - }, - - /** - * Replace id with pseudo id field. - */ - async handleBeforePost(ctx) { - const { resource } = ctx.params; - const newResource = this.replaceIdWithPseudoId(resource, true); - ctx.params.resource = newResource; - } - }, - hooks: { - before: { - post: ['handleBeforePost'], - put: ['handleBeforePost'] - }, - after: { - get: ['handleAfterGet'], - list: ['handleAfterGet'] - } - } -} satisfies Partial; - -export default Schema; diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index 246d50e1f..c0e541805 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -1,6 +1,6 @@ import { ServiceSchema } from 'moleculer'; import urlJoin from 'url-join'; -import { buildBlankNodesQuery, objectCurrentToId } from './utils.ts'; +import { buildBlankNodesQuery, objectCurrentToId, pseudoIdToId } from './utils.ts'; const blankNodesQuery = buildBlankNodesQuery(4); @@ -18,8 +18,6 @@ export default { actions: { async moveAllToNamedGraph(ctx) { const { dataset } = ctx.params; - - // @ts-expect-error ctx.meta.dataset = dataset || ctx.meta.dataset; // Find all containers in default graph @@ -201,16 +199,14 @@ export default { */ async migrateCurrentPredicate(ctx) { const { dataset } = ctx.params; - - // @ts-expect-error ctx.meta.dataset = dataset || ctx.meta.dataset; - // @ts-expect-error + if (this.settings.podProvider) ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); const result = await ctx.call('triplestore.query', { query: ` PREFIX as: - SELECT ?resourceUri + SELECT DISTINCT ?resourceUri WHERE { GRAPH ?resourceUri { ?s1 as:current ?current . @@ -233,15 +229,49 @@ export default { if (await ctx.call('ldp.remote.isRemote', { resourceUri: activityUri })) { await ctx.call('ldp.remote.store', { resource: activityWithId, - // @ts-expect-error webId: ctx.meta.webId, - // @ts-expect-error dataset: ctx.meta.dataset }); } else { await ctx.call('activitypub.activity.put', { resource: activityWithId }); } } + }, + /** + * Replace the as:current predicate with the ID + * Must be called *after* the moveAllToNamedGraph action + */ + async migratePseudoIds(ctx) { + const { dataset } = ctx.params; + + ctx.meta.dataset = dataset || ctx.meta.dataset; + + if (this.settings.podProvider) ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); + + const result = await ctx.call('triplestore.query', { + query: ` + SELECT DISTINCT ?resourceUri + WHERE { + GRAPH ?resourceUri { + ?s1 ?pseudoId . + } + } + `, + + webId: 'system' + }); + + const resourcesUris = result.map(node => node.resourceUri.value); + + this.logger.info(`Found ${resourcesUris.length} resources needing migration`); + + for (const resourceUri of resourcesUris) { + this.logger.info(`Migrating resource ${resourceUri}...`); + + const resource = await ctx.call('ldp.resource.get', { resourceUri }); + + await ctx.call('ldp.resource.put', { resource: pseudoIdToId(resource) }); + } } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/migration/utils.ts b/src/middleware/packages/migration/utils.ts index 93edf35f5..55863ea07 100644 --- a/src/middleware/packages/migration/utils.ts +++ b/src/middleware/packages/migration/utils.ts @@ -22,7 +22,7 @@ const buildBlankNodesQuery = (depth: any) => { return { construct, where }; }; -const objectCurrentToId = activityJson => { +const objectCurrentToId = (activityJson: any): any => { if (activityJson.object && typeof activityJson.object === 'object' && activityJson.object.current) { const { current, ...object } = activityJson.object; return { @@ -36,4 +36,31 @@ const objectCurrentToId = activityJson => { return activityJson; }; -export { buildBlankNodesQuery, objectCurrentToId }; +// From deprecated PseudoIdMixin +const pseudoIdToId = (obj: any): any => { + if (Array.isArray(obj)) { + return obj.map(pseudoIdToId); + } + + if (typeof obj !== 'object') { + return obj; + } + + const newObj = { ...obj }; + + if (newObj['urn:tmp:pseudoId']) { + newObj.id = newObj['urn:tmp:pseudoId']; + + delete newObj['urn:tmp:pseudoId']; + } + + for (const key in newObj) { + if (Object.hasOwn(newObj, key)) { + newObj[key] = pseudoIdToId(newObj[key]); + } + } + + return newObj; +}; + +export { buildBlankNodesQuery, objectCurrentToId, pseudoIdToId }; From e7944fb4350d86081c450b9914511db5002cd75d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 12 Sep 2025 10:49:53 +0200 Subject: [PATCH 069/165] Fix crypto tests --- .../services/activitypub/subservices/actor.ts | 1 - .../services/activitypub/subservices/inbox.ts | 1 - .../packages/auth/services/auth.local.ts | 1 - .../packages/crypto/keys/migration.ts | 1 - .../packages/jsonld/services/parser/index.ts | 26 +++++++++++++------ .../ldp/services/remote/actions/getStored.ts | 3 ++- .../ldp/services/resource/actions/get.ts | 1 + .../notifications/channels/webhook-channel.ts | 1 - .../channels/websocket-channel.ts | 1 - .../packages/solid/services/storage.ts | 1 - .../triplestore/subservices/document.ts | 1 - src/middleware/packages/webid/service.ts | 1 - src/middleware/yarn.lock | 1 + 13 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index f1b42d66a..1f3672f1b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -5,7 +5,6 @@ import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; import { getSlugFromUri, waitForResource } from '../../../utils.ts'; -/** @type {import('moleculer').ServiceSchema} */ const ActorService = { name: 'activitypub.actor' as const, dependencies: ['activitypub.collection', 'ldp', 'signature'], diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 9c8fc628c..af726e375 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -7,7 +7,6 @@ import AwaitActivityMixin from '../../../mixins/await-activity.ts'; const { MoleculerError } = require('moleculer').Errors; -/** @type {import('moleculer').ServiceSchema} */ const InboxService = { name: 'activitypub.inbox' as const, mixins: [AwaitActivityMixin], diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index b00317f57..599009f22 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -8,7 +8,6 @@ import AuthMailService from './mail.ts'; const { MoleculerError } = Errors; -/** @type {import('moleculer').ServiceSchema} */ const AuthLocalService = { name: 'auth' as const, mixins: [AuthMixin], diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index 631eb000c..23e67df1b 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -3,7 +3,6 @@ import path from 'path'; import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; -/** @type {import('moleculer').ServiceSchema} */ const KeysMigrationSchema = { name: 'keys.migration' as const, settings: { diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index c79699892..01f81988e 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -180,13 +180,13 @@ const JsonldParserSchema = { } }, - // Frame an input according to a context and try to embed all nodes in a single node - // If this is not possible (cam happen with complex documents), return a @graph without embedding + // Frame an input according to a context and try to embed all nodes under a single root node + // If this is not possible (can happen with complex documents), return a @graph without embedding async frameAndEmbed(ctx) { - const { input } = ctx.params; + const { input, rootNode } = ctx.params; const jsonContext = ctx.params.jsonContext || (await ctx.call('jsonld.context.get')); - // Frame and embed the input + // Frame and embed the input without the root node, to count the number of nodes const result = await ctx.call('jsonld.parser.frame', { input, frame: { '@context': jsonContext }, @@ -196,17 +196,27 @@ const JsonldParserSchema = { } }); + const allNodes = arrayOf(result['@graph']); + // Traverse the entire JSON-LD structure to find all embedded objects URIs let embeddedObjectsUris = new Set(); - this.collectEmbeddedObjectsUris(result['@graph'], embeddedObjectsUris); + this.collectEmbeddedObjectsUris(allNodes, embeddedObjectsUris); // Get the nodes in the @graph that were not embedded - const unembeddedNodes = result['@graph'].filter( + const unembeddedNodes = allNodes.filter( (node: any) => getId(node) && Object.keys(node).length > 1 && !embeddedObjectsUris.has(getId(node)) ); - if (unembeddedNodes.length === 1) { - // If all nodes can be embedded in a single node, reframe it with the @id + if (unembeddedNodes.length === 0 && allNodes.length > 0 && allNodes.some(node => getId(node) === rootNode)) { + // If all nodes are embedded into other nodes, it means we have mutual embedding + // In such case, frame the result according to the provided root node + return await ctx.call('jsonld.parser.frame', { + input, + frame: { '@context': jsonContext, '@id': rootNode }, + options: { embed: '@once' } + }); + } else if (unembeddedNodes.length === 1) { + // If all nodes can be embedded in a single node, reframe it with the @id of this node // (We cannot simply remove the embedded nodes, otherwise the blank nodes id will be visible) return await ctx.call('jsonld.parser.frame', { input, diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 681b3bb9c..e0c128f74 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -39,7 +39,8 @@ const Schema = { return await ctx.call('jsonld.parser.frameAndEmbed', { input: result, - context: jsonContext || (await ctx.call('jsonld.context.get')) + rootNode: resourceUri, + context: jsonContext }); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index 67e133ad2..12bf93df3 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -57,6 +57,7 @@ const Schema = { return await ctx.call('jsonld.parser.frameAndEmbed', { input: result, + rootNode: resourceUri, jsonContext }); } diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index 580d13810..dbb19590f 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -14,7 +14,6 @@ const queueOptions = backoff: { type: 'exponential', delay: '180000' } }; -/** @type {import('moleculer').ServiceSchema} */ const WebhookChannel2023Service = { name: 'solid-notifications.provider.webhook' as const, mixins: [NotificationChannelMixin], diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index 101ae1c25..450053def 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -4,7 +4,6 @@ import { v4 as uuidV4 } from 'uuid'; import { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; -/** @type {import('moleculer').ServiceSchema} */ const WebSocketChannel2023Service = { name: 'solid-notifications.provider.websocket' as const, mixins: [NotificationChannelMixin], diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 7ad042862..28a0b9683 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -3,7 +3,6 @@ import { triple, namedNode } from '@rdfjs/data-model'; import { pim } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; -/** @type {import('moleculer').ServiceSchema} */ const SolidStorageSchema = { name: 'solid-storage' as const, settings: { diff --git a/src/middleware/packages/triplestore/subservices/document.ts b/src/middleware/packages/triplestore/subservices/document.ts index 7a120aa08..3bc83ab8a 100644 --- a/src/middleware/packages/triplestore/subservices/document.ts +++ b/src/middleware/packages/triplestore/subservices/document.ts @@ -2,7 +2,6 @@ import { v4 as uuidv4 } from 'uuid'; import { ServiceSchema } from 'moleculer'; -/** @type {import('moleculer').ServiceSchema} */ const DocumentService = { name: 'triplestore.document' as const, actions: { diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 6931b1160..b5295fa6e 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -3,7 +3,6 @@ import { foaf, schema } from '@semapps/ontologies'; import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; -/** @type {import('moleculer').ServiceSchema} */ const WebIdService = { name: 'webid' as const, mixins: [ControlledContainerMixin, DereferenceMixin], diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 1297a28f0..68a53bc28 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -3423,6 +3423,7 @@ __metadata: version: 0.0.0-use.local resolution: "@semapps/jsonld@workspace:packages/jsonld" dependencies: + "@semapps/ldp": "npm:1.1.4" "@types/jsonld": "npm:1.5.15" jsonld: "npm:^3.3.2" jsonld-context-parser: "npm:^2.4.0" From 865bae1c3e14de3cbfba809caa157b81a3b5966a Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 12 Sep 2025 17:54:16 +0200 Subject: [PATCH 070/165] Fix all remaining tests --- src/middleware/packages/sync/services/mirror.ts | 2 +- src/middleware/tests/activitypub/collection-api.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index 8ddb449af..c8e53ace6 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; -import { createFragmentURL, arrayOf } from '@semapps/ldp'; +import { createFragmentURL, arrayOf, getId } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; import { ServiceSchema, Errors } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index 779278601..bb9f2b2e6 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -184,9 +184,9 @@ describe('Collections API', () => { id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[1])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, - prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[7])}`, + prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[2])}`, // @ts-expect-error TS(2304): Cannot find name 'expect'. - items: expect.arrayContaining([items[8], items[9]]) + items: expect.arrayContaining([items[1], items[0]]) } }); }); From e7a82837dfa546eff1e04bd83f9f33e54ed95668 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 12 Sep 2025 18:06:21 +0200 Subject: [PATCH 071/165] Renamed DocumentService to NamedGraph service for consistency sake --- .../activitypub/subservices/object.ts | 4 +- .../ldp/services/container/actions/delete.ts | 2 +- .../ldp/services/container/actions/post.ts | 2 +- .../ldp/services/remote/actions/delete.ts | 15 ++------ .../ldp/services/remote/actions/getStored.ts | 2 +- .../ldp/services/remote/actions/store.ts | 6 +-- .../ldp/services/resource/actions/delete.ts | 4 +- .../ldp/services/resource/actions/exist.ts | 2 +- src/middleware/packages/migration/2-0-0.ts | 8 ++-- .../packages/triplestore/service.ts | 12 +++--- .../{document.ts => named-graph.ts} | 38 +++++++++---------- 11 files changed, 42 insertions(+), 53 deletions(-) rename src/middleware/packages/triplestore/subservices/{document.ts => named-graph.ts} (56%) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 9d5bdb0a8..6dc4703a7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -181,9 +181,9 @@ const ObjectService = { const { resourceUri, formerType } = ctx.params; const expandedFormerTypes = await ctx.call('jsonld.parser.expandTypes', { types: formerType }); - // We need to recreate the document as it has been deleted + // We need to recreate the named graph as it has been deleted // TODO See how we can avoid this since it will not work with NextGraph - await ctx.call('triplestore.document.create', { documentUri: resourceUri }); + await ctx.call('triplestore.named-graph.create', { uri: resourceUri }); // Insert directly the Tombstone in the triple store to avoid resource creation side-effects await ctx.call('triplestore.insert', { diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index d3dc95b6d..b55fc139a 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -27,7 +27,7 @@ const Schema = { webId }); - await ctx.call('triplestore.document.delete', { documentUri: containerUri }); + await ctx.call('triplestore.named-graph.delete', { uri: containerUri }); // Detach the container from parent containers after deletion, otherwise the permissions may fail const parentContainers = await ctx.call('ldp.resource.getContainers', { resourceUri: containerUri }); diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 7ef0023c3..30a878fe5 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -93,7 +93,7 @@ const Schema = { // TODO Use UUIDs for containers and collections https://github.com/assemblee-virtuelle/semapps/issues/1266 const resourceUri = forcedResourceUri || (await ctx.call('ldp.resource.generateId', { containerUri, slug, isContainer })); - await ctx.call('triplestore.document.create', { documentUri: resourceUri }); + await ctx.call('triplestore.named-graph.create', { uri: resourceUri }); // We must add this first, otherwise side effects will not find the container of the created resource // But this create race conditions, especially when testing, since uncreated resources are linked to containers diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index bcfade63a..1f8505035 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -8,18 +8,14 @@ const Schema = { }, async handler(ctx) { const { resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` ); } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider) { if (!webId || webId === 'system' || webId === 'anon') { throw new Error(`Cannot delete remote resource in cache without a webId (Provided: ${webId})`); @@ -29,14 +25,13 @@ const Schema = { ctx.meta.dataset = account.username; } - const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); - if (!exist) throw new Error(`No document found with resource ${resourceUri} (webId: ${webId})`); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); + if (!exist) throw new Error(`No named graph found with resource ${resourceUri} (webId: ${webId})`); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const oldData = await this.actions.getStored({ resourceUri, webId }, { parentCtx: ctx }); - await ctx.call('triplestore.document.clear', { documentUri: resourceUri }); - await ctx.call('triplestore.document.delete', { documentUri: resourceUri }); + await ctx.call('triplestore.named-graph.clear', { uri: resourceUri }); + await ctx.call('triplestore.named-graph.delete', { uri: resourceUri }); // Detach from all containers const containers = await ctx.call('ldp.resource.getContainers', { resourceUri }); @@ -48,11 +43,9 @@ const Schema = { resourceUri, oldData, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.remote.deleted', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index e0c128f74..294ceebfd 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -17,7 +17,7 @@ const Schema = { const { resourceUri, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); if (!exist) throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index 71b8a1c29..8705c1757 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -55,12 +55,12 @@ const Schema = { } // Check if the remote resource is already stored - const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri, dataset }); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri, dataset }); if (!exist) { - await ctx.call('triplestore.document.create', { documentUri: resourceUri, dataset }); + await ctx.call('triplestore.named-graph.create', { uri: resourceUri, dataset }); } else { - await ctx.call('triplestore.document.clear', { documentUri: resourceUri, dataset }); + await ctx.call('triplestore.named-graph.clear', { uri: resourceUri, dataset }); } if (keepInSync) { diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 9130ce9cc..442ce00ed 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -34,9 +34,9 @@ const Schema = { } ); - await ctx.call('triplestore.document.clear', { documentUri: resourceUri }); + await ctx.call('triplestore.named-graph.clear', { uri: resourceUri }); - await ctx.call('triplestore.document.delete', { documentUri: resourceUri }); + await ctx.call('triplestore.named-graph.delete', { uri: resourceUri }); // We must detach the resource from the containers after deletion, otherwise the permissions may fail const containersUris = await ctx.call('ldp.resource.getContainers', { resourceUri }); diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 56d14a7dd..cb2c62510 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -13,7 +13,7 @@ const Schema = { // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const exist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); // If resource exists but we don't want tombstones, check the resource type if (exist && !acceptTombstones) { diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index c0e541805..a2ff14e36 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -76,7 +76,7 @@ export default { async moveContainerToNamedGraph(ctx) { const { containerUri } = ctx.params; - const containerExist = await ctx.call('triplestore.document.exist', { documentUri: containerUri }); + const containerExist = await ctx.call('triplestore.named-graph.exist', { uri: containerUri }); if (containerExist) { this.logger.warn(`Container ${containerUri} is already in a named graph, skipping...`); @@ -93,7 +93,7 @@ export default { webId: 'system' }); - await ctx.call('triplestore.document.create', { documentUri: containerUri }); + await ctx.call('triplestore.named-graph.create', { uri: containerUri }); await ctx.call('triplestore.insert', { resource: container, graphName: containerUri, @@ -152,7 +152,7 @@ export default { async moveResourceToNamedGraph(ctx) { const { resourceUri } = ctx.params; - const resourceExist = await ctx.call('triplestore.document.exist', { documentUri: resourceUri }); + const resourceExist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); if (resourceExist) { this.logger.warn(`Resource ${resourceUri} is already in a named graph, skipping...`); @@ -172,7 +172,7 @@ export default { webId: 'system' }); - await ctx.call('triplestore.document.create', { documentUri: resourceUri }); + await ctx.call('triplestore.named-graph.create', { uri: resourceUri }); await ctx.call('triplestore.insert', { resource, graphName: resourceUri, diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 7e7445e53..4addbffff 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -11,7 +11,7 @@ import query from './actions/query.ts'; import update from './actions/update.ts'; import tripleExist from './actions/tripleExist.ts'; import DatasetService from './subservices/dataset.ts'; -import DocumentService from './subservices/document.ts'; +import NamedGraphService from './subservices/named-graph.ts'; const SparqlGenerator = sparqljsModule.Generator; const { MoleculerError } = Errors; @@ -26,11 +26,11 @@ const TripleStoreService = { fusekiBase: null, // Sub-services customization dataset: {}, - document: {} + namedGraph: {} }, dependencies: ['jsonld.parser'], async created() { - const { url, user, password, fusekiBase, dataset, document } = this.settings; + const { url, user, password, fusekiBase, dataset, namedGraph } = this.settings; if (dataset !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message @@ -46,11 +46,11 @@ const TripleStoreService = { }); } - if (document !== false) { + if (namedGraph !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message this.broker.createService({ - mixins: [DocumentService], - settings: document + mixins: [NamedGraphService], + settings: namedGraph }); } }, diff --git a/src/middleware/packages/triplestore/subservices/document.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts similarity index 56% rename from src/middleware/packages/triplestore/subservices/document.ts rename to src/middleware/packages/triplestore/subservices/named-graph.ts index 3bc83ab8a..21e02b983 100644 --- a/src/middleware/packages/triplestore/subservices/document.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -2,40 +2,38 @@ import { v4 as uuidv4 } from 'uuid'; import { ServiceSchema } from 'moleculer'; -const DocumentService = { - name: 'triplestore.document' as const, +const NamedGraphService = { + name: 'triplestore.named-graph' as const, actions: { create: { async handler(ctx) { - // TODO Do not allow to pass the document URI on creation - let { documentUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + // TODO Do not allow to pass the named graph URI on creation + let { uri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; - if (!documentUri) uuidv4(); + if (!uri) uuidv4(); - if (await this.actions.exist({ documentUri, dataset }, { parentCtx: ctx })) { - throw new Error(`Cannot create document as it already exists`); + if (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })) { + throw new Error(`Cannot create named graph as it already exists`); } await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${documentUri}> {} }`, + query: `INSERT DATA { GRAPH <${uri}> {} }`, webId: 'system', dataset }); - return documentUri; + return uri; } }, exist: { async handler(ctx) { - const { documentUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + const { uri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; return await ctx.call('triplestore.query', { - query: `ASK { GRAPH <${documentUri}> {} }`, + query: `ASK { GRAPH <${uri}> {} }`, webId: 'system', dataset }); @@ -44,15 +42,14 @@ const DocumentService = { clear: { async handler(ctx) { - const { documentUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + const { uri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; await ctx.call('triplestore.update', { query: ` DELETE WHERE { - GRAPH <${documentUri}> { + GRAPH <${uri}> { ?s1 ?p1 ?o1 . } } @@ -65,13 +62,12 @@ const DocumentService = { delete: { async handler(ctx) { - const { documentUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + const { uri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; // We need to manually drop the graph, otherwise Fuseki will consider it still exists await ctx.call('triplestore.update', { - query: `DROP GRAPH <${documentUri}>`, + query: `DROP GRAPH <${uri}>`, webId: 'system', dataset }); @@ -80,12 +76,12 @@ const DocumentService = { } } satisfies ServiceSchema; -export default DocumentService; +export default NamedGraphService; declare global { export namespace Moleculer { export interface AllServices { - [DocumentService.name]: typeof DocumentService; + [NamedGraphService.name]: typeof NamedGraphService; } } } From de34d37142a424adf3d87e62fb5ad17332fc5409 Mon Sep 17 00:00:00 2001 From: SlyRock Date: Fri, 19 Sep 2025 11:52:54 +0200 Subject: [PATCH 072/165] Full test suite for triplestore service and subservice with adequate coverage Refactor triplestore service to support multiple backends (Fuseki and NextGraph) TODO before review : Environmentalize the nextgraph settings. --- src/middleware/.nvmrc | 1 + src/middleware/package-lock.json | 24146 ++++++++++++++++ .../packages/jsonld/services/parser/index.ts | 25 + src/middleware/packages/triplestore/README.md | 80 +- .../actions/countTriplesOfSubject.ts | 47 - .../actions/deleteOrphanBlankNodes.ts | 48 - .../packages/triplestore/actions/dropAll.ts | 11 +- .../packages/triplestore/actions/insert.ts | 22 +- .../packages/triplestore/actions/query.ts | 57 +- .../triplestore/actions/tripleExist.ts | 53 - .../packages/triplestore/actions/update.ts | 13 +- .../packages/triplestore/adapters/base.ts | 55 + .../packages/triplestore/adapters/fuseki.ts | 185 + .../triplestore/adapters/nextgraph.ts | 301 + src/middleware/packages/triplestore/index.ts | 3 + .../packages/triplestore/package.json | 3 +- .../packages/triplestore/service.ts | 63 +- .../triplestore/subservices/dataset.ts | 149 +- .../tests/triplestore/initialize.js | 73 + .../tests/triplestore/triplestore.test.js | 519 + src/middleware/yarn.lock | 113 +- 21 files changed, 25510 insertions(+), 457 deletions(-) create mode 100644 src/middleware/.nvmrc create mode 100644 src/middleware/package-lock.json delete mode 100644 src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts delete mode 100644 src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts delete mode 100644 src/middleware/packages/triplestore/actions/tripleExist.ts create mode 100644 src/middleware/packages/triplestore/adapters/base.ts create mode 100644 src/middleware/packages/triplestore/adapters/fuseki.ts create mode 100644 src/middleware/packages/triplestore/adapters/nextgraph.ts create mode 100644 src/middleware/tests/triplestore/initialize.js create mode 100644 src/middleware/tests/triplestore/triplestore.test.js diff --git a/src/middleware/.nvmrc b/src/middleware/.nvmrc new file mode 100644 index 000000000..1d9b7831b --- /dev/null +++ b/src/middleware/.nvmrc @@ -0,0 +1 @@ +22.12.0 diff --git a/src/middleware/package-lock.json b/src/middleware/package-lock.json new file mode 100644 index 000000000..002057d6d --- /dev/null +++ b/src/middleware/package-lock.json @@ -0,0 +1,24146 @@ +{ + "name": "semapps-middleware", + "version": "0.7.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "semapps-middleware", + "version": "0.7.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "workspaces": [ + "packages/*", + "tests" + ], + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.5.0", + "esbuild": "^0.25.4", + "esbuild-jest": "^0.5.0", + "eslint": "^8.2.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-jest": "^27.9.0", + "eslint-plugin-jsdoc": "^48.2.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.1.3", + "lerna": "^8.0.1", + "nx": "17.2.5", + "prettier": "^3.1.1", + "typescript": "^5.3.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node": { + "name": "nextgraph", + "version": "0.1.1-alpha.7", + "license": "MIT/Apache-2.0" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", + "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", + "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@comunica/actor-abstract-mediatyped": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.22.0.tgz", + "integrity": "sha512-+KQLPpx8GFqrhWFfuvrsA4Rjlfbo/QOIo2IvzSgmDwy6YVQZXaSQiNQv/BnrnedaFCf2ONV+w+PMLqXgzn8N9A==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-http-native": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-native/-/actor-http-native-1.22.1.tgz", + "integrity": "sha512-BdB+hvQ9CJF9tI42hNhcvTMagOty+jw21LIQDJWI628xMcXZ88BJaUX0Ulc7g2nrWH97ZRm5+KjLC4Zf+OGwZg==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@types/parse-link-header": "^1.0.0", + "cross-fetch": "^3.0.5", + "follow-redirects": "^1.5.1", + "parse-link-header": "^1.0.1" + }, + "peerDependencies": { + "@comunica/bus-http": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.22.0.tgz", + "integrity": "sha512-U9pznSpQ1POSH+ekOke3lYKO0fsUbNdv1g1nfuWz/MV3xMCF/d2f3CVBjXRSx9qwyb/2zUrOjBCJRrYkfZ6geQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^1.22.0", + "@rdfjs/types": "*", + "htmlparser2": "^7.0.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.8.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.22.0.tgz", + "integrity": "sha512-OdB3Z7ZCtVAcsVU2Vs0ytGbiz0eYkeBwVA3k0vGVhSN3ygng5Thj+t8jxG6QWHlLvaIXfJFh0x57qY5tXkr8uQ==", + "license": "MIT", + "dependencies": { + "microdata-rdf-streaming-parser": "^1.2.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse-html": "^1.17.0", + "@comunica/core": "^1.17.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.22.0.tgz", + "integrity": "sha512-yVjYLpm9rbpPiqU1OE4Yioyk/YHtO6ywVMbdOPUNLeOwrtWou8vKX0Xh4UUR24Qrt8nuhE+p0kCJiZZtM1PmSQ==", + "license": "MIT", + "dependencies": { + "rdfa-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse-html": "^1.0.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.22.0.tgz", + "integrity": "sha512-gQSY56wkS/uftRyjQf+/dQFRpA/jZ6z2o2RgGbQc2avgKTkhaiTtPxpfO1oarLskm1sPlQOFo24ZwqUSqjOwcA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^1.22.0", + "@rdfjs/types": "*", + "relative-to-absolute-iri": "^1.0.5" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.4.0", + "@comunica/core": "^1.4.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.22.1.tgz", + "integrity": "sha512-MFFhJ6eGyO40Be80zsFKAbRjkPXr80PvCqvVKsEstdv3u9C6GFV3nqZpCwvsVCz22IPQhW+rzb8ZyasmgHnurA==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.1.2", + "jsonld-streaming-parser": "^2.4.0", + "stream-to-string": "^1.2.0" + }, + "peerDependencies": { + "@comunica/bus-http": "^1.0.0", + "@comunica/bus-rdf-parse": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-n3": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.22.0.tgz", + "integrity": "sha512-qHrGfh5k/pZa4imy7m9gJ1kt9aW1uxXqLDKnLKvR2l0m09YiEx/YOYWr1Wtu1YtH/Yyc13OX4mo/OwaE5PfrHQ==", + "license": "MIT", + "dependencies": { + "@types/n3": "^1.4.4", + "n3": "^1.6.3" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.22.0.tgz", + "integrity": "sha512-k47WEAZ6qKEhf1eBZZeI5aVywlrUUKP3BKHw2zKJUjuWq5k+w/rp2WALCyt0Owtb37UlJbET3fTlUhXKvT+2aw==", + "license": "MIT", + "dependencies": { + "rdfxml-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.1.0", + "@comunica/core": "^1.1.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.22.0.tgz", + "integrity": "sha512-y315YcZTz7AizKf8Jl022IocAJIh3OHSlzNrRNH3zB7i/ch+WHj1VL9pjIf6y77PD4BR75EdeoQCPafpm5Gsbg==", + "license": "MIT", + "dependencies": { + "rdfa-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.8.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/bus-http": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-1.22.1.tgz", + "integrity": "sha512-CZ0NDWZH0k0FOshuRQJzYr3Z+2ZM1vqr9ZepONuaoYDwyKaxl29xPs3hNfjSy6YawjEQP+elr/WDc3TxKIpu8g==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@types/readable-stream": "^2.3.11", + "is-stream": "^2.0.0", + "readable-web-to-node-stream": "^3.0.2", + "web-streams-node": "^0.4.0" + }, + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-init": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-1.22.0.tgz", + "integrity": "sha512-NIfEJLI8EYFdTWJB0PV/lxPagStPl+gUj3LtOnovcF1ZhC5rgcJSC/tq1r04n0TziY2KVangnLDsF4752LjD6g==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-rdf-parse": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.22.0.tgz", + "integrity": "sha512-ohZGlabX5K+dEmn+v4BzP+IZVyRc1ovWItHDLznnRqsHQr8W19WPG21lEFh5kk2MK4YnyQWmlUax1Yxrg7cbXg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^1.22.0", + "@rdfjs/types": "*" + }, + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-rdf-parse-html": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.22.0.tgz", + "integrity": "sha512-zqdLdF5qvru1vnzN4t9eXpJhi6khKm1ZWhUovBB9pfYnnyGRCQCPlFpcgJPrD8JfKd6nTvhgdLB5QcAbBb1I0A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + }, + "peerDependencies": { + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/context-entries": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-1.22.0.tgz", + "integrity": "sha512-HOYr1HdhgavxABpw8saZa9pueLAeGVVd/6cZ3FWcYnH3CvfQu6Ima06Gd00QdIAiGjQm01qQcWCxp0xURiqLKg==", + "license": "MIT" + }, + "node_modules/@comunica/core": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-1.22.0.tgz", + "integrity": "sha512-tgozygRFTd6t6l0YyvfVUWNC+KXWiTlBclkxtzFioQsplKvUSvg1TPjopRk8hhAvMaNRGMNBK2ZafNaqNTkI4w==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@comunica/types": "^1.22.0", + "immutable": "^3.8.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@comunica/mediator-combine-union": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-1.22.0.tgz", + "integrity": "sha512-iUHmEGgWVmk02e80uB7w8xZ5vgTLpiqzrImvbokolJzWcVbobVCUkq8DUxzz3FJbNVRGipZUFrOqkRPAuAX6FA==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/mediator-number": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-1.22.0.tgz", + "integrity": "sha512-KDPlJEvj0Lu+JygGXjnH8pf33k01lJ+wgzUlWK216jZJ1Px2lTlfc/COhSqi/e0y+k4ZSBcxx0gnjt2awMpbrQ==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/mediator-race": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-1.22.0.tgz", + "integrity": "sha512-hIMaHyf9M4jOS0199OURSVgWFmzkyF2K2keuAb+iHoCH3UUcUnWjPOL1TrdkxvaUnrxmsBWR9SXbnqgMnhIsiQ==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/types": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-1.22.0.tgz", + "integrity": "sha512-ZQ8p+ZvMAKmdq6Hz2QwqIQ2JScwRMotiWz0iSw2zYHsYQOhVmLg7HSMzMHpWNEA5UWzO/A5A+Co/ONXMhlnx3g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "asynciterator": "^3.2.0", + "immutable": "^3.8.2", + "sparqlalgebrajs": "^3.0.1" + } + }, + "node_modules/@digitalbazaar/credentials-context": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/credentials-context/-/credentials-context-3.1.0.tgz", + "integrity": "sha512-VKflyFbcid6xH3FJMrd8U9DeCjbYXa2aO3l8yy7MzP6O/0v0EZTV56hMfJT5fN6TSVtQmShv2R3oPCFqFbc2Tg==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/@digitalbazaar/data-integrity": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz", + "integrity": "sha512-ohIieLfgtPQU9BYfj0eKNiz55/ZDOk5YSE9FN/Hn0eXzI8WQzLkzRvC8pvBnzuzXDgCsjPdSqYvzok5PoClMBQ==", + "license": "BSD-3-Clause", + "dependencies": { + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0", + "jsonld-signatures": "^11.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/ed25519-multikey": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-multikey/-/ed25519-multikey-1.3.0.tgz", + "integrity": "sha512-wNmgnLv3z5u1Ji/6wlpeunqTr62OF2oCbJflSo8+7sV96SQvZSFU+03+3LOMjCOa6Tg05/K679MwJ0q76QxpOQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/ed25519": "^1.6.0", + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@digitalbazaar/ed25519-signature-2020": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-signature-2020/-/ed25519-signature-2020-5.4.0.tgz", + "integrity": "sha512-dHjOv41wiKLoPaE1S9g4NCMKNnelYtBa5fCJKwrqo+cPlLuKcEhtD7w/uuc5non7bf/GX5sa5YfDI/sRUOS6iw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/ed25519-multikey": "^1.1.0", + "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", + "base58-universal": "^2.0.0", + "ed25519-signature-2020-context": "^1.1.0", + "jsonld-signatures": "^11.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/ed25519-verification-key-2020": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.2.0.tgz", + "integrity": "sha512-urEVTYkt+uYD8GjdoS6gkm2sKBich1hqx42b6vvUOmNgF0agZ95JlUjiJXEx+VOwu7WSjJSnEBph2Qatkrk1CA==", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/ed25519": "^1.6.0", + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0", + "crypto-ld": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/-/eddsa-rdfc-2022-cryptosuite-1.2.0.tgz", + "integrity": "sha512-a3PyICe1SI55SgHXgtPRYpzmZ2FMtloQDkVcbhUZ9dpoLcZg5TqsS4U7ap2ggCD4MUXz7uz6ErikJf76Iwyd0g==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/ed25519-multikey": "^1.0.0", + "jsonld": "^8.1.0", + "rdf-canonize": "^4.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/jsonld/node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "license": "BSD-3-Clause", + "dependencies": { + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", + "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalbazaar/vc": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-7.1.0.tgz", + "integrity": "sha512-KjoMnhuZ/+fC/ZThw+GEnR1oOCz67yIwkbK/wbBdZ8wiAH84awBFzJnLogObDS3cTQ+cIhQOfXv+XLRRgxC5Rw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/credentials-context": "^3.1.0", + "ed25519-signature-2018-context": "^1.1.0", + "jsonld": "^8.3.1", + "jsonld-signatures": "^11.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/vc/node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/vc/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@digitalbazaar/vc/node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@emnapi/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz", + "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", + "integrity": "sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==", + "license": "MIT", + "dependencies": { + "text-decoding": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/reporters/node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@jest/reporters/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/transform/node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@jest/transform/node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/transform/node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/transform/node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/transform/node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jest/transform/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@jest/transform/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/transform/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lerna/create": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.9.tgz", + "integrity": "sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "init-package-json": "6.0.3", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.0", + "libnpmpublish": "9.0.9", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "nx": ">=17.1.2 < 21", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-reduce": "^2.1.0", + "pacote": "^18.0.6", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.4", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "^3.0.0", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.2.1", + "temp-dir": "1.0.0", + "upath": "2.0.1", + "uuid": "^10.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "5.0.1", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@lerna/create/node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@lerna/create/node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz", + "integrity": "sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/create/node_modules/@nx/nx-linux-x64-musl": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz", + "integrity": "sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/create/node_modules/@yarnpkg/parsers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", + "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@lerna/create/node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@lerna/create/node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@lerna/create/node_modules/@zkochan/js-yaml": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@lerna/create/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@lerna/create/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@lerna/create/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@lerna/create/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@lerna/create/node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@lerna/create/node_modules/nx": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.3.2.tgz", + "integrity": "sha512-VWUHX0uCn8ACFbpBTpgucDzwe4q/a/UU3AYOhzKCvTzb3kQiyvoxLjORSze93ZNEqgor0PMkCQgcoMBUjxJfzQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "resolve.exports": "2.0.3", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "20.3.2", + "@nx/nx-darwin-x64": "20.3.2", + "@nx/nx-freebsd-x64": "20.3.2", + "@nx/nx-linux-arm-gnueabihf": "20.3.2", + "@nx/nx-linux-arm64-gnu": "20.3.2", + "@nx/nx-linux-arm64-musl": "20.3.2", + "@nx/nx-linux-x64-gnu": "20.3.2", + "@nx/nx-linux-x64-musl": "20.3.2", + "@nx/nx-win32-arm64-msvc": "20.3.2", + "@nx/nx-win32-x64-msvc": "20.3.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@lerna/create/node_modules/nx/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lerna/create/node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/nx/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lerna/create/node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@lerna/create/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@noble/ed25519": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", + "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/arborist": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", + "integrity": "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.1", + "@npmcli/installed-package-contents": "^2.1.0", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^7.1.1", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.1.0", + "@npmcli/query": "^3.1.0", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "bin-links": "^4.0.4", + "cacache": "^18.0.3", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^7.0.2", + "json-parse-even-better-errors": "^3.0.2", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^7.2.1", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-registry-fetch": "^17.0.1", + "pacote": "^18.0.6", + "parse-conflict-json": "^3.0.0", + "proc-log": "^4.2.0", + "proggy": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.6", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/metavuln-calculator": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", + "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", + "dev": true, + "license": "ISC", + "dependencies": { + "cacache": "^18.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^18.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", + "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/query": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz", + "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/tao": { + "version": "v17.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "v17.2.5", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/devkit": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.3.2.tgz", + "integrity": "sha512-VhbxEsSTCZlOVgjuQC+6HQmb9Oz9VoHUeo4001Pw6BFBcSXZUi5q37C/lxbAgQPnMKLkFcLva3WKZ+fOLwhGIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 19 <= 21" + } + }, + "node_modules/@nx/devkit/node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz", + "integrity": "sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/devkit/node_modules/@nx/nx-linux-x64-musl": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz", + "integrity": "sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/devkit/node_modules/@yarnpkg/parsers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", + "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nx/devkit/node_modules/@zkochan/js-yaml": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@nx/devkit/node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@nx/devkit/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@nx/devkit/node_modules/js-yaml/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@nx/devkit/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@nx/devkit/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nx/devkit/node_modules/nx": { + "version": "20.3.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "resolve.exports": "2.0.3", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "20.3.2", + "@nx/nx-darwin-x64": "20.3.2", + "@nx/nx-freebsd-x64": "20.3.2", + "@nx/nx-linux-arm-gnueabihf": "20.3.2", + "@nx/nx-linux-arm64-gnu": "20.3.2", + "@nx/nx-linux-arm64-musl": "20.3.2", + "@nx/nx-linux-x64-gnu": "20.3.2", + "@nx/nx-linux-x64-musl": "20.3.2", + "@nx/nx-win32-arm64-msvc": "20.3.2", + "@nx/nx-win32-x64-msvc": "20.3.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nx/devkit/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "v17.2.5", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "v17.2.5", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", + "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^10.0.0" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", + "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/request/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/rest": { + "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", + "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@seald-io/binary-search-tree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", + "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" + }, + "node_modules/@seald-io/nedb": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-3.1.0.tgz", + "integrity": "sha512-5G0hCQGJjOelOutvW1l4VD581XMhTPxpj1BUaCWTEM2MPXR9TzIr0MKMnEjnTA5nEKfujPyvVW7iF3etm1/gKQ==", + "license": "MIT", + "dependencies": { + "@seald-io/binary-search-tree": "^1.0.2", + "localforage": "^1.9.0", + "util": "^0.12.4" + } + }, + "node_modules/@semapps/activitypub": { + "resolved": "packages/activitypub", + "link": true + }, + "node_modules/@semapps/auth": { + "resolved": "packages/auth", + "link": true + }, + "node_modules/@semapps/backup": { + "resolved": "packages/backup", + "link": true + }, + "node_modules/@semapps/core": { + "resolved": "packages/core", + "link": true + }, + "node_modules/@semapps/crypto": { + "resolved": "packages/crypto", + "link": true + }, + "node_modules/@semapps/importer": { + "resolved": "packages/importer", + "link": true + }, + "node_modules/@semapps/inference": { + "resolved": "packages/inference", + "link": true + }, + "node_modules/@semapps/jsonld": { + "resolved": "packages/jsonld", + "link": true + }, + "node_modules/@semapps/ldp": { + "resolved": "packages/ldp", + "link": true + }, + "node_modules/@semapps/middlewares": { + "resolved": "packages/middlewares", + "link": true + }, + "node_modules/@semapps/migration": { + "resolved": "packages/migration", + "link": true + }, + "node_modules/@semapps/mime-types": { + "resolved": "packages/mime-types", + "link": true + }, + "node_modules/@semapps/nodeinfo": { + "resolved": "packages/nodeinfo", + "link": true + }, + "node_modules/@semapps/notifications": { + "resolved": "packages/notifications", + "link": true + }, + "node_modules/@semapps/ontologies": { + "resolved": "packages/ontologies", + "link": true + }, + "node_modules/@semapps/solid": { + "resolved": "packages/solid", + "link": true + }, + "node_modules/@semapps/sparql-endpoint": { + "resolved": "packages/sparql-endpoint", + "link": true + }, + "node_modules/@semapps/sync": { + "resolved": "packages/sync", + "link": true + }, + "node_modules/@semapps/triplestore": { + "resolved": "packages/triplestore", + "link": true + }, + "node_modules/@semapps/triplestore-ng": { + "resolved": "packages/triplestore-ng", + "link": true + }, + "node_modules/@semapps/void": { + "resolved": "packages/void", + "link": true + }, + "node_modules/@semapps/webacl": { + "resolved": "packages/webacl", + "link": true + }, + "node_modules/@semapps/webfinger": { + "resolved": "packages/webfinger", + "link": true + }, + "node_modules/@semapps/webhooks": { + "resolved": "packages/webhooks", + "link": true + }, + "node_modules/@semapps/webid": { + "resolved": "packages/webid", + "link": true + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", + "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-link-header": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", + "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonld": { + "version": "1.5.15", + "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.15.tgz", + "integrity": "sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/luxon": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", + "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/n3": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.21.1.tgz", + "integrity": "sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.1.0", + "@types/node": "*" + } + }, + "node_modules/@types/n3/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", + "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-link-header": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/parse-link-header/-/parse-link-header-1.0.1.tgz", + "integrity": "sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg==", + "license": "MIT" + }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sparqljs": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", + "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/url-join": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.3.tgz", + "integrity": "sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "license": "ISC" + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/args": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", + "license": "MIT", + "dependencies": { + "camelcase": "5.0.0", + "chalk": "2.4.2", + "leven": "2.1.0", + "mri": "1.1.4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/args/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/args/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/args/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/args/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/args/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynciterator": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.9.0.tgz", + "integrity": "sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-jest/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/babel-jest/node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/babel-jest/node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-jest/node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-jest/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/babel-jest/node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-jest/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base58-universal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base58-universal/-/base58-universal-2.0.0.tgz", + "integrity": "sha512-BgkgF8zVLOAygszG4W8NkLm7iXrw80VYAOcedrzANrIhS14+4W6zVqjyGTFUBM/FpqkHUt8aAYd4DbBBfn3zKg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/base64url-universal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", + "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bin-links": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", + "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bull": { + "version": "3.29.3", + "resolved": "https://registry.npmjs.org/bull/-/bull-3.29.3.tgz", + "integrity": "sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg==", + "license": "MIT", + "dependencies": { + "cron-parser": "^2.13.0", + "debuglog": "^1.0.0", + "get-port": "^5.1.1", + "ioredis": "^4.27.0", + "lodash": "^4.17.21", + "p-timeout": "^3.2.0", + "promise.prototype.finally": "^3.1.2", + "semver": "^7.3.2", + "util.promisify": "^1.0.1", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bull/node_modules/cron-parser": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz", + "integrity": "sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==", + "license": "MIT", + "dependencies": { + "is-nan": "^1.3.0", + "moment-timezone": "^0.5.31" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/bull/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/busboy": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", + "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", + "dependencies": { + "dicer": "0.3.0" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/byte-size": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001695", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0" + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "license": "ISC", + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/cas": { + "version": "0.0.5", + "dependencies": { + "cheerio": "0.19.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cheerio": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", + "integrity": "sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ==", + "license": "MIT", + "dependencies": { + "css-select": "~1.0.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "lodash": "^3.2.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cheerio/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/cheerio/node_modules/domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/cheerio/node_modules/domutils/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/cheerio/node_modules/domutils/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/cheerio/node_modules/domutils/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", + "license": "MIT", + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2/node_modules/entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", + "license": "BSD-like" + }, + "node_modules/cheerio/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/cheerio/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==", + "license": "MIT" + }, + "node_modules/cheerio/node_modules/readable-stream": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz", + "integrity": "sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmd-shim": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", + "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true, + "license": "ISC" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, + "node_modules/consolidate": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha512-PZFskfj64QnpKVK9cPdY36pyWEhZNM+srRVqtwMiVTlnViSoZcvX35PpBhhUcyLTHXYvz7pZRmxvsqwzJqg9kA==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.1.1" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", + "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-parser": "^4.0.0", + "dateformat": "^3.0.3", + "get-pkg-repo": "^4.2.1", + "git-raw-commits": "^3.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^5.0.0", + "normalize-package-data": "^3.0.3", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", + "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^3.0.0", + "dateformat": "^3.0.3", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "meow": "^8.1.2", + "semver": "^7.0.0", + "split": "^1.0.1" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-commits-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", + "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-commits-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", + "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^3.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "git-raw-commits": "^3.0.0", + "git-semver-tags": "^5.0.0", + "meow": "^8.1.2" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "license": "MIT" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/credentials-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-1.0.0.tgz", + "integrity": "sha512-rF3GPhTUGY58xlpuVRif/1i0BxVpynpmFdGNS81S2ezdKPSKoFke5ZOZWB8ZUvGi8bV8CuDM+ZcM/uf4z0PQVQ==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/cron": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.3.tgz", + "integrity": "sha512-JYR/QZFklJCIPndBLfd/2nU1nSlCMrUdtQ2mGLXSVM/qqqEK7DOrFR0gsEiyeqs0PdWrs0ve1ggH4V7XksDwXg==", + "license": "MIT", + "dependencies": { + "luxon": "^1.23.x" + } + }, + "node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "license": "MIT", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cron/node_modules/luxon": { + "version": "1.28.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz", + "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-ld": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-7.0.0.tgz", + "integrity": "sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14" + } + }, + "node_modules/css-select": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", + "integrity": "sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw==", + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "1.0", + "domutils": "1.4", + "nth-check": "~1.0.0" + } + }, + "node_modules/css-select/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/css-select/node_modules/domutils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", + "integrity": "sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/css-what": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", + "integrity": "sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw==", + "license": "BSD-like", + "engines": { + "node": "*" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dashify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dashify/-/dashify-2.0.0.tgz", + "integrity": "sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/datauri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz", + "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==", + "license": "MIT", + "dependencies": { + "image-size": "^0.7.3", + "mimer": "^1.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "dependencies": { + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/domutils/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domutils/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv-flow": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dotenv-flow/-/dotenv-flow-3.3.0.tgz", + "integrity": "sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A==", + "license": "MIT", + "dependencies": { + "dotenv": "^8.6.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/dotenv-flow/node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ed25519-signature-2018-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", + "license": "BSD-3-Clause" + }, + "node_modules/ed25519-signature-2020-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", + "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.84", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz", + "integrity": "sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==", + "dev": true, + "license": "ISC" + }, + "node_modules/email-templates": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/email-templates/-/email-templates-2.7.1.tgz", + "integrity": "sha512-WJ0csXaBK3gV90dwBco5d3liu/XSH1jPEn3qfLDES/AsxOoMv4IRqp/MsQduKBexJZ81577OUbrdgnzvK2Kk9Q==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.0.0", + "consolidate": "^0.14.2", + "debug": "^2.2.0", + "glob": "^6.0.0", + "juice": "^4.1.0", + "lodash": "^4.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/email-templates/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/email-templates/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/email-templates/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "license": "BSD-2-Clause" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/esbuild-jest": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/esbuild-jest/-/esbuild-jest-0.5.0.tgz", + "integrity": "sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.17", + "@babel/plugin-transform-modules-commonjs": "^7.12.13", + "babel-jest": "^26.6.3" + }, + "peerDependencies": { + "esbuild": ">=0.8.50" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.7", + "enhanced-resolve": "^5.15.0", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-plugin-jest/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "48.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz", + "integrity": "sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@es-joy/jsdoccomment": "~0.46.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.5", + "escape-string-regexp": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", + "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expo-server-sdk": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/expo-server-sdk/-/expo-server-sdk-3.13.0.tgz", + "integrity": "sha512-EeGs8PlXmnP2uDpjVhnclQmlua3A0swEj3BzqoRiHfU4WPsN5v3eHhqjjwl+Lf2rleKW2L9lhWp6sCL1vPMnAg==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.0", + "promise-limit": "^2.7.0", + "promise-retry": "^2.0.1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express-session": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", + "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-validator": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastest-validator/-/fastest-validator-1.19.0.tgz", + "integrity": "sha512-wUfJBrXmccVz4kARAiWTkuqsC6EFeqbNxwfysCDk+maExBPP8KxyBwaWtayrWjKIaBIbaz+rqI2kel6ecayxcg==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "license": "MIT", + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/front-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/front-matter/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.9.0.tgz", + "integrity": "sha512-52n24W52sIueosRe0XZ8Ex5Yle+WbhfCKnV/gWXpbVR8FXNTfqdKEKUSypKso66VRHTvvcQxL44UTZbJRlCTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^7.0.0", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^8.1.2", + "semver": "^7.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "node_modules/git-url-parse": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", + "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^7.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "dev": true, + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/google-libphonenumber": { + "version": "3.2.40", + "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.40.tgz", + "integrity": "sha512-bzGxX/vfggcV80LVcibki+JvR91x6zHpBpovDXSfmZUGn6uLzhbYXsWll2a80EG6qTmvf8lt7KZZ/pkMml8ckw==", + "license": "(MIT AND Apache-2.0)", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-to-text": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-2.1.3.tgz", + "integrity": "sha512-mafVvNjY6lrVrdT73ssJT4fWCtiLR8QVZDPurHbO/yT0KK7mVCpEGi+0g6jzwj4G41o4++9A48cZOSQBwvWd8Q==", + "license": "MIT", + "dependencies": { + "he": "^1.0.0", + "htmlparser": "^1.7.7", + "optimist": "^0.6.1", + "underscore": "^1.8.3", + "underscore.string": "^3.2.3" + }, + "bin": { + "html-to-text": "bin/cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/htmlparser": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/htmlparser/-/htmlparser-1.7.7.tgz", + "integrity": "sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ==", + "engines": { + "node": ">=0.1.33" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-link-header": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/http-signature-header": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-signature-header/-/http-signature-header-1.3.1.tgz", + "integrity": "sha512-UpKpxfRlCWRK41j+MfRHHvjDWMLX67gY7pUNGQbXi13fsTZcvUHrgbhbiJtHDvGGxe5nQVYlTW7fKypMSmgXKQ==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/init-package-json": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", + "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^5.0.0", + "npm-package-arg": "^11.0.0", + "promzard": "^1.0.0", + "read": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ioredis": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz", + "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==", + "license": "MIT", + "dependencies": { + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.1", + "denque": "^1.1.0", + "lodash.defaults": "^4.2.0", + "lodash.flatten": "^4.4.0", + "lodash.isarguments": "^3.1.0", + "p-map": "^2.1.0", + "redis-commands": "1.7.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ioredis/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-config/node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/jest-config/node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-config/node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-config/node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-config/node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-config/node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-config/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/jest-config/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-config/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/jest-config/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-config/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jose": { + "version": "5.9.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", + "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-3.3.2.tgz", + "integrity": "sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw==", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "object.fromentries": "^2.0.2", + "rdf-canonize": "^2.0.1", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonld-context-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/jsonld-context-parser/node_modules/@types/node": { + "version": "18.19.71", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.71.tgz", + "integrity": "sha512-evXpcgtZm8FY4jqBSN8+DmOTcVkkvTmAayeo4Wf3m1xAruyVGzGuDh/Fb/WWX2yLItUiho42ozyJjB0dw//Tkw==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/jsonld-context-parser/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/jsonld-signatures": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", + "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "jsonld": "^8.0.0", + "rdf-canonize": "^4.0.1", + "serialize-error": "^8.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsonld-signatures/node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsonld-signatures/node_modules/jsonld/node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsonld-signatures/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonld-streaming-parser": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", + "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.1.3", + "jsonparse": "^1.3.1", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/jsonld-streaming-serializer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.3.0.tgz", + "integrity": "sha512-QGflpxpwmr659ExvAQ5TFAY9BmJQiL/yF/MDRrP5oVWHcBBLhbPjUqDv//y2OvJxUY3UQYMXulTwzmYb1ttv2Q==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.0.0" + } + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/jsonld/node_modules/rdf-canonize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-2.0.1.tgz", + "integrity": "sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA==", + "license": "BSD-3-Clause", + "dependencies": { + "semver": "^6.3.0", + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonld/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jsonld/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/juice": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/juice/-/juice-4.3.2.tgz", + "integrity": "sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g==", + "license": "MIT", + "dependencies": { + "cheerio": "^0.22.0", + "commander": "^2.15.1", + "cross-spawn": "^5.1.0", + "deep-extend": "^0.5.1", + "mensch": "^0.3.3", + "slick": "^1.12.2", + "web-resource-inliner": "^4.2.1" + }, + "bin": { + "juice": "bin/juice" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/juice/node_modules/cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "license": "MIT", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/juice/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/juice/node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/juice/node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "license": "BSD-2-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/juice/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/juice/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/juice/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/juice/node_modules/domutils/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/juice/node_modules/domutils/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/juice/node_modules/domutils/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/juice/node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/juice/node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/juice/node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/juice/node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/juice/node_modules/htmlparser2/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/juice/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/juice/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/juice/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "license": "ISC" + }, + "node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "dev": true, + "license": "MIT" + }, + "node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lerna": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.9.tgz", + "integrity": "sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create": "8.1.9", + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-angular": "7.0.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "envinfo": "7.13.0", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "import-local": "3.1.0", + "ini": "^1.3.8", + "init-package-json": "6.0.3", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "jest-diff": ">=29.4.3 < 30", + "js-yaml": "4.1.0", + "libnpmaccess": "8.0.6", + "libnpmpublish": "9.0.9", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "nx": ">=17.1.2 < 21", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-pipe": "3.1.0", + "p-queue": "6.6.2", + "p-reduce": "2.1.0", + "p-waterfall": "2.1.1", + "pacote": "^18.0.6", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.8", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.2.1", + "temp-dir": "1.0.0", + "typescript": ">=3 < 6", + "upath": "2.0.1", + "uuid": "^10.0.0", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "5.0.1", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "lerna": "dist/cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/lerna/node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz", + "integrity": "sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/lerna/node_modules/@nx/nx-linux-x64-musl": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz", + "integrity": "sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/lerna/node_modules/@yarnpkg/parsers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", + "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/lerna/node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/lerna/node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/lerna/node_modules/@zkochan/js-yaml": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/lerna/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/lerna/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/lerna/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/lerna/node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lerna/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/lerna/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/nx": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.3.2.tgz", + "integrity": "sha512-VWUHX0uCn8ACFbpBTpgucDzwe4q/a/UU3AYOhzKCvTzb3kQiyvoxLjORSze93ZNEqgor0PMkCQgcoMBUjxJfzQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "resolve.exports": "2.0.3", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "20.3.2", + "@nx/nx-darwin-x64": "20.3.2", + "@nx/nx-freebsd-x64": "20.3.2", + "@nx/nx-linux-arm-gnueabihf": "20.3.2", + "@nx/nx-linux-arm64-gnu": "20.3.2", + "@nx/nx-linux-arm64-musl": "20.3.2", + "@nx/nx-linux-x64-gnu": "20.3.2", + "@nx/nx-linux-x64-musl": "20.3.2", + "@nx/nx-win32-arm64-msvc": "20.3.2", + "@nx/nx-win32-x64-msvc": "20.3.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/nx/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/lerna/node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/nx/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/lerna/node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/lerna/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", + "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", + "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", + "dev": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", + "semver": "^7.3.7", + "sigstore": "^2.2.0", + "ssri": "^10.0.6" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/ci-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", + "license": "MIT" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "license": "MIT" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", + "license": "MIT" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", + "license": "MIT" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "license": "MIT" + }, + "node_modules/lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/luxon": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-streams": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/memory-streams/-/memory-streams-0.1.3.tgz", + "integrity": "sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==", + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.2" + } + }, + "node_modules/memory-streams/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/memory-streams/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/mensch": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", + "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", + "license": "MIT" + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/microdata-rdf-streaming-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.2.0.tgz", + "integrity": "sha512-cMLNLEcS0mPaiA9iwq6BnsQK9sx2uBwjpRZIEvMRBNJpbvV58f8AFtPeYzNFh3OPyX9B49NYJ77bB0jNAUCurw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^6.0.0", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.1.1.tgz", + "integrity": "sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g==", + "license": "MIT", + "bin": { + "mimer": "bin/mimer" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/moleculer": { + "version": "0.14.35", + "resolved": "https://registry.npmjs.org/moleculer/-/moleculer-0.14.35.tgz", + "integrity": "sha512-KB4qs0zNTjE9z7Bl27FFLPaWkAsUFJajF2njozJeor1phFCAYP5S1JsWOSrnUBTtsH7SX4gTw8tGRdcgh1eyVQ==", + "license": "MIT", + "dependencies": { + "args": "^5.0.3", + "eventemitter2": "^6.4.9", + "fastest-validator": "^1.19.0", + "glob": "^7.2.0", + "ipaddr.js": "^2.2.0", + "kleur": "^4.1.5", + "lodash": "^4.17.21", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "recursive-watch": "^1.1.4" + }, + "bin": { + "moleculer-runner": "bin/moleculer-runner.js", + "moleculer-runner-esm": "bin/moleculer-runner.mjs" + }, + "engines": { + "node": ">= 10.x.x" + }, + "funding": { + "url": "https://github.com/moleculerjs/moleculer?sponsor=1" + }, + "peerDependencies": { + "amqplib": "^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "avsc": "^5.0.0", + "bunyan": "^1.0.0", + "cbor-x": "^0.8.3 || ^0.9.0 || ^1.2.0", + "dd-trace": "^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0", + "debug": "^4.0.0", + "etcd3": "^1.0.0", + "ioredis": "^4.0.0 || ^5.0.0", + "jaeger-client": "^3.0.0", + "kafka-node": "^5.0.0", + "log4js": "^6.0.0", + "mqtt": "^4.0.0 || ^5.0.0", + "msgpack5": "^5.0.0 || ^6.0.0", + "nats": "^1.0.0 || ^2.0.0", + "node-nats-streaming": "^0.0.51 || ^0.2.0 || ^0.3.0", + "notepack.io": "^2.0.0 || ^3.0.0", + "pino": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "protobufjs": "^6.0.0 || ^7.0.0", + "redlock": "^4.0.0", + "rhea-promise": "^1.0.0 || ^2.0.0", + "thrift": "^0.12.0 || ^0.16.0", + "winston": "^3.0.0" + }, + "peerDependenciesMeta": { + "amqplib": { + "optional": true + }, + "avsc": { + "optional": true + }, + "bunyan": { + "optional": true + }, + "cbor-x": { + "optional": true + }, + "dd-trace": { + "optional": true + }, + "debug": { + "optional": true + }, + "etcd3": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "jaeger-client": { + "optional": true + }, + "kafka-node": { + "optional": true + }, + "log4js": { + "optional": true + }, + "mqtt": { + "optional": true + }, + "msgpack5": { + "optional": true + }, + "nats": { + "optional": true + }, + "node-nats-streaming": { + "optional": true + }, + "notepack.io": { + "optional": true + }, + "pino": { + "optional": true + }, + "protobufjs": { + "optional": true + }, + "redlock": { + "optional": true + }, + "rhea-promise": { + "optional": true + }, + "thrift": { + "optional": true + }, + "winston": { + "optional": true + } + } + }, + "node_modules/moleculer-bull": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/moleculer-bull/-/moleculer-bull-0.2.8.tgz", + "integrity": "sha512-ayVIqVmc6HVD6SL0RLsmMYqDnnPqwrcEWAPpY31kbUIfU3CBH2grGaqA5adyZBNCo4gQz09+4O9m+Hqxls06Ag==", + "license": "MIT", + "dependencies": { + "bull": "^3.15.0", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" + } + }, + "node_modules/moleculer-db": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/moleculer-db/-/moleculer-db-0.8.26.tgz", + "integrity": "sha512-pbUYNqVrev3Y4yUskGSkRMkCwN1vrNKq6bWLFWeKeOanP+X/ZjAPFrY4AMVdqwBCIn2Z8q0w+pHe4C70KuI/uA==", + "license": "MIT", + "dependencies": { + "@seald-io/nedb": "^3.0.0", + "bluebird": "^3.7.2", + "flat": "^5.0.2", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0" + } + }, + "node_modules/moleculer-mail": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/moleculer-mail/-/moleculer-mail-1.2.6.tgz", + "integrity": "sha512-i1r1lraG6JTHOeHgUxrP5nQEfvxhldZkYjlcNTgu6blvdv0aWe2GqK6/p+D/dPum4jY6QEKaNB6twI8N+nTAmA==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "email-templates": "^2.7.1", + "lodash": "^4.17.21", + "nodemailer": "^4.6.7", + "nodemailer-html-to-text": "^2.1.0" + }, + "engines": { + "node": ">= 6.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" + } + }, + "node_modules/moleculer-schedule": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/moleculer-schedule/-/moleculer-schedule-0.2.3.tgz", + "integrity": "sha512-cFHpnHe56y6grSQov9KR1Y8OGmIFImOPelsR2poMdCulgRC49kThKDxBx11ZwASCNx/UtadmaLJ+sX8xRnuGFQ==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "node-schedule": "^2.0.0" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.13" + } + }, + "node_modules/moleculer-web": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/moleculer-web/-/moleculer-web-0.10.7.tgz", + "integrity": "sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^1.0.0", + "body-parser": "^1.19.0", + "es6-error": "^4.1.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "isstream": "^0.1.2", + "kleur": "^4.1.4", + "lodash": "^4.17.21", + "path-to-regexp": "^3.1.0", + "qs": "^6.11.0", + "serve-static": "^1.14.1" + }, + "engines": { + "node": ">= 10.x.x" + }, + "peerDependencies": { + "moleculer": "^0.13.0 || ^0.14.0" + } + }, + "node_modules/moleculer-web/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/moleculer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.46", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/n3": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.23.1.tgz", + "integrity": "sha512-3f0IYJo+6+lXypothmlwPzm3wJNffsxUwnfONeFv2QqWq7RjTvyCMtkRXDUXW6XrZoOzaQX8xTTSYNlGjXcGtw==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "queue-microtask": "^1.1.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/n3/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/n3/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/nan": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "license": "MIT", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/nextgraph": { + "resolved": "../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", + "link": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.73.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.73.0.tgz", + "integrity": "sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", + "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-schedule": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "license": "MIT", + "dependencies": { + "cron-parser": "^4.2.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/nodemailer": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", + "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemailer-html-to-text": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz", + "integrity": "sha512-oaNLWoMyeC5Y8DbtYSwBRHTJVdkojKfiP6J4hh8+10Oih0QoAUqEsnM0WbFA13yhbzjyp1yXBNiDl0QV7BpoRA==", + "license": "MIT", + "dependencies": { + "html-to-text": "^2.1.0" + } + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/nx": { + "version": "v17.2.5", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nrwl/tao": "v17.2.5", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.5.1", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "v17.2.5", + "@nx/nx-darwin-x64": "v17.2.5", + "@nx/nx-freebsd-x64": "v17.2.5", + "@nx/nx-linux-arm-gnueabihf": "v17.2.5", + "@nx/nx-linux-arm64-gnu": "v17.2.5", + "@nx/nx-linux-arm64-musl": "v17.2.5", + "@nx/nx-linux-x64-gnu": "v17.2.5", + "@nx/nx-linux-x64-musl": "v17.2.5", + "@nx/nx-win32-arm64-msvc": "v17.2.5", + "@nx/nx-win32-x64-msvc": "v17.2.5" + }, + "peerDependencies": { + "@swc-node/register": "^1.6.7", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nx/node_modules/dotenv": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", + "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oidc-token-hash": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", + "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz", + "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.1.0", + "got": "^11.8.0", + "jose": "^2.0.5", + "lru-cache": "^6.0.0", + "make-error": "^1.3.6", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "engines": { + "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/jose": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz", + "integrity": "sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==", + "license": "MIT", + "dependencies": { + "@panva/asn1.js": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "license": "MIT/X11", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "license": "MIT" + }, + "node_modules/optimist/node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-conflict-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", + "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/parse-imports": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", + "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", + "dev": true, + "license": "Apache-2.0 AND MIT", + "dependencies": { + "es-module-lexer": "^1.5.3", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-link-header": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-1.0.1.tgz", + "integrity": "sha512-Z0gpfHmwCIKDr5rRzjypL+p93aHVWO7e+0rFcUl9E3sC67njjs+xHFenuboSXZGlvYtmQqRzRaE3iFpTUnLmFQ==", + "license": "MIT", + "dependencies": { + "xtend": "~4.0.1" + } + }, + "node_modules/parse-path": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", + "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "license": "MIT" + }, + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "license": "MIT", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-cas2": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/passport-cas2/-/passport-cas2-0.0.12.tgz", + "integrity": "sha512-ck/6x2lb6eYhlC/9lmw7ZTgqzSiJmYB0px7H2B00kpRZlBQuds9yPzFMi7kBWtgFpTDf0o+rwQMUYga8yO/jIg==", + "license": "MIT", + "dependencies": { + "cas": "https://github.com/joshchan/node-cas", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", + "dependencies": { + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/proggy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz", + "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-limit": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", + "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", + "license": "ISC" + }, + "node_modules/promise-polyfill": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", + "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==", + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz", + "integrity": "sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/promzard": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", + "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pug": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.3", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rdf-canonize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/rdf-data-factory": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz", + "integrity": "sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.0" + } + }, + "node_modules/rdf-data-factory/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-data-model": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rdf-data-model/-/rdf-data-model-1.0.0.tgz", + "integrity": "sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g==", + "license": "MIT", + "bin": { + "rdf-data-model-test": "bin/test.js" + } + }, + "node_modules/rdf-isomorphic": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", + "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "hash.js": "^1.1.7", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.7.0" + } + }, + "node_modules/rdf-parse": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-1.9.1.tgz", + "integrity": "sha512-W6ouYE+ufmCNFmXD1iGs5gUZH75jZekh/I5qF8a4Sl37BUc9mY0Jz5A0CV1tiKKhx+I+HYfxyX9VjOljD8rzgQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-http-native": "~1.22.0", + "@comunica/actor-rdf-parse-html": "~1.22.0", + "@comunica/actor-rdf-parse-html-microdata": "~1.22.0", + "@comunica/actor-rdf-parse-html-rdfa": "~1.22.0", + "@comunica/actor-rdf-parse-html-script": "~1.22.0", + "@comunica/actor-rdf-parse-jsonld": "^1.22.0", + "@comunica/actor-rdf-parse-n3": "~1.22.0", + "@comunica/actor-rdf-parse-rdfxml": "~1.22.0", + "@comunica/actor-rdf-parse-xml-rdfa": "~1.22.0", + "@comunica/bus-http": "~1.22.0", + "@comunica/bus-init": "~1.22.0", + "@comunica/bus-rdf-parse": "~1.22.0", + "@comunica/bus-rdf-parse-html": "~1.22.0", + "@comunica/core": "~1.22.0", + "@comunica/mediator-combine-union": "~1.22.0", + "@comunica/mediator-number": "~1.22.0", + "@comunica/mediator-race": "~1.22.0", + "@rdfjs/types": "*", + "stream-to-string": "^1.2.0" + } + }, + "node_modules/rdf-string": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/rdf-terms": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", + "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "rdf-string": "^1.6.0" + } + }, + "node_modules/rdfa-streaming-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz", + "integrity": "sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^6.0.0", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/rdfxml-streaming-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz", + "integrity": "sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.0", + "sax": "^1.2.4" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/read": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", + "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-stream-node-to-web": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", + "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==", + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/recursive-watch": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/recursive-watch/-/recursive-watch-1.1.4.tgz", + "integrity": "sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ==", + "license": "MIT", + "dependencies": { + "ttl": "^1.3.0" + }, + "bin": { + "recursive-watch": "bin.js" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redis-commands": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", + "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==", + "license": "MIT" + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/relative-to-absolute-iri": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", + "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==", + "license": "MIT" + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "license": "ISC" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/request/node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/rsync": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/rsync/-/rsync-0.6.1.tgz", + "integrity": "sha512-39HcwWuM67CQ9tHloazShXWUOWa2m3SGqX6XQhQMSj0VCQMkSI9PodoxM7/+hKf2p4v2umbhfoarYqd1gwII/w==", + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "license": "ISC", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/sanitize-html": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.14.0.tgz", + "integrity": "sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g==", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^8.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/sanitize-html/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/security-context": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", + "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" + }, + "node_modules/semapps-tests": { + "resolved": "tests", + "link": true + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sharp": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", + "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slashes": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true, + "license": "ISC" + }, + "node_modules/slick": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", + "license": "MIT (http://mootools.net/license.txt)", + "engines": { + "node": "*" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/sodium-native": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.4.1.tgz", + "integrity": "sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/sparqlalgebrajs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-3.0.3.tgz", + "integrity": "sha512-XFNhsO55bprayrM35h/jY0kzzuGc3oZ1On3kc+s7Un0BFQBXa046aLcMZFp4MYSvn7GtMe9eZ08ONFnBH5kEsQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/sparqljs": "^3.1.2", + "fast-deep-equal": "^3.1.3", + "minimist": "^1.2.5", + "rdf-data-factory": "^1.1.0", + "rdf-isomorphic": "^1.3.0", + "rdf-string": "^1.6.0", + "sparqljs": "^3.4.2" + }, + "bin": { + "sparqlalgebrajs": "bin/sparqlalgebrajs.js" + } + }, + "node_modules/sparqljs": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", + "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^1.1.2" + }, + "bin": { + "sparqljs": "bin/sparql-to-json" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/sparqljson-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz", + "integrity": "sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "^13.1.0", + "JSONStream": "^1.3.3", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/sparqljson-parse/node_modules/@types/node": { + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/ssh2": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", + "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.20.0" + } + }, + "node_modules/ssh2-sftp-client": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/ssh2-sftp-client/-/ssh2-sftp-client-7.2.3.tgz", + "integrity": "sha512-Bmq4Uewu3e0XOwu5bnPbiS5KRQYv+dff5H6+85V4GZrPrt0Fkt1nUH+uXanyAkoNxUpzjnAPEEoLdOaBO9c3xw==", + "license": "Apache-2.0", + "dependencies": { + "concat-stream": "^2.0.0", + "promise-retry": "^2.0.1", + "ssh2": "^1.8.0" + }, + "engines": { + "node": ">=10.24.1" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-to-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", + "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", + "license": "MIT", + "dependencies": { + "promise-polyfill": "^1.1.6" + } + }, + "node_modules/streamify-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", + "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==", + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/superagent/node_modules/form-data": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", + "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/superagent/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/superagent/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/superagent/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/superagent/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/superagent/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/supertest": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", + "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^3.8.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", + "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-decoding": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", + "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==", + "license": "MIT" + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex-range/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/ttl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ttl/-/ttl-1.3.1.tgz", + "integrity": "sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA==", + "license": "MIT" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "license": "MIT", + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "5.28.5", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", + "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/undici/node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.3.tgz", + "integrity": "sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "for-each": "^0.3.3", + "get-intrinsic": "^1.2.6", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "object.getownpropertydescriptors": "^2.1.8", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-data-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz", + "integrity": "sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vc-js": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/vc-js/-/vc-js-0.6.4.tgz", + "integrity": "sha512-ogwYys94k8mFyFZEn1Ru3nIA5Z/9C4iCU4grNWUYOYVWldcsn6UDp6erYFbaSkilzv7RK3cQu5N8prkxfHpZwA==", + "license": "BSD-3-Clause", + "dependencies": { + "commander": "^2.20.3", + "credentials-context": "^1.0.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0", + "get-stdin": "^7.0.0", + "jsonld": "^2.0.2", + "jsonld-signatures": "^5.0.0", + "supports-color": "^7.1.0" + }, + "bin": { + "vc-js": "bin/vc-js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/base64url-universal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", + "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/vc-js/node_modules/crypto-ld": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-3.9.0.tgz", + "integrity": "sha512-PFE7V6A2QNnUp6iiPVEZI4p8wsztkEWLbY1BAXVnclm/aw4KGwpJ+1Ds4vQUCJ5BsWxj15fwE5rHQ8AWaWB2nw==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url-universal": "^1.0.1", + "bs58": "^4.0.1", + "node-forge": "~0.10.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8.3.0" + }, + "optionalDependencies": { + "sodium-native": "^3.2.0" + } + }, + "node_modules/vc-js/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/vc-js/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/vc-js/node_modules/jsonld": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-2.0.2.tgz", + "integrity": "sha512-/TQzRe75/3h2khu57IUojha5oat+M82bm8RYw0jLhlmmPrW/kTWAZ9nGzKPfZWnPYnVVJJMQVc/pU8HCmpv9xg==", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "rdf-canonize": "^1.0.2", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vc-js/node_modules/jsonld-signatures": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-5.2.0.tgz", + "integrity": "sha512-/dGgMElXc3oBS+/OUwMc3DTK4riHKLE9Lk7NF1Upz2ZlBTNfnOw5uLRkFQOJFBDqDEm5hK6hIfkoC/rCWFh9tQ==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1", + "crypto-ld": "^3.7.0", + "jsonld": "^2.0.2", + "node-forge": "^0.10.0", + "security-context": "^4.0.0", + "serialize-error": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/vc-js/node_modules/rdf-canonize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-1.2.0.tgz", + "integrity": "sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw==", + "license": "BSD-3-Clause", + "dependencies": { + "node-forge": "^0.10.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vc-js/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/vc-js/node_modules/serialize-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", + "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/vc-js/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/verror/node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wait-for-expect": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", + "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==", + "license": "MIT" + }, + "node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true, + "license": "ISC" + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-resource-inliner": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz", + "integrity": "sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA==", + "license": "MIT", + "dependencies": { + "async": "^3.1.0", + "chalk": "^2.4.2", + "datauri": "^2.0.0", + "htmlparser2": "^4.0.0", + "lodash.unescape": "^4.0.1", + "request": "^2.88.0", + "safer-buffer": "^2.1.2", + "valid-data-url": "^2.0.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/web-resource-inliner/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/web-resource-inliner/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/web-resource-inliner/node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/web-resource-inliner/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/web-resource-inliner/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-streams-node": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/web-streams-node/-/web-streams-node-0.4.0.tgz", + "integrity": "sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w==", + "license": "Apache-2.0", + "dependencies": { + "is-stream": "^1.1.0", + "readable-stream-node-to-web": "^1.0.1", + "web-streams-ponyfill": "^1.4.1" + } + }, + "node_modules/web-streams-node/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-streams-ponyfill": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", + "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/xmldom": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", + "integrity": "sha512-pDyxjQSFQgNHkU+yjvoF+GXVGJU7e9EnOg/KcGMDihBIKjTsOeDYaECwC/O9bsUWKY+Sd9izfE43JXC46EOHKA==", + "engines": { + "node": ">=0.1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/activitypub": { + "name": "@semapps/activitypub", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/crypto": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "handlebars": "^4.7.7", + "moleculer": "^0.14.18", + "moleculer-bull": "^0.2.5", + "moleculer-db": "^0.8.16", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/auth": { + "name": "@semapps/auth", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/triplestore": "1.1.4", + "bcrypt": "^5.0.1", + "express-session": "^1.17.0", + "jsonwebtoken": "^9.0.2", + "moleculer": "^0.14.17", + "moleculer-db": "^0.8.16", + "moleculer-mail": "^1.2.5", + "moleculer-web": "^0.10.0-beta1", + "openid-client": "^4.7.4", + "passport": "^0.4.1", + "passport-cas2": "0.0.12", + "passport-local": "^1.0.0", + "pug": "^3.0.2", + "speakingurl": "^14.0.1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/backup": { + "name": "@semapps/backup", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "cron": "^1.8.2", + "fs-extra": "^10.0.0", + "moleculer": "^0.14.31", + "rsync": "^0.6.1", + "ssh2-sftp-client": "^7.2.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/backup/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/core": { + "name": "@semapps/core", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/crypto": "1.1.4", + "@semapps/jsonld": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/sparql-endpoint": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/void": "1.1.4", + "@semapps/webacl": "1.1.4", + "@semapps/webfinger": "1.1.4", + "@semapps/webid": "1.1.4", + "moleculer": "^0.14.19", + "moleculer-web": "^0.10.0-beta1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/crypto": { + "name": "@semapps/crypto", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@digitalbazaar/data-integrity": "^2.5.0", + "@digitalbazaar/ed25519-multikey": "^1.3.0", + "@digitalbazaar/ed25519-signature-2020": "^5.4.0", + "@digitalbazaar/ed25519-verification-key-2020": "^4.2.0", + "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "^1.2.0", + "@digitalbazaar/vc": "^7.1.0", + "@rdfjs/data-model": "^1.3.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "crypto-ld": "^7.0.0", + "http-signature": "^1.3.4", + "http-signature-header": "^1.3.1", + "jose": "^5.2.0", + "jsonld-signatures": "^11.3.2", + "moleculer": "^0.14.18", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1", + "vc-js": "^0.6.4" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "packages/importer": { + "name": "@semapps/importer", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "cron-parser": "^4.2.1", + "google-libphonenumber": "^3.2.26", + "node-fetch": "^2.6.6", + "sanitize-html": "^2.6.1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/inference": { + "name": "@semapps/inference", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "n3": "^1.6.3", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/jsonld": { + "name": "@semapps/jsonld", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "jsonld": "^3.3.2", + "jsonld-context-parser": "^2.4.0", + "jsonld-streaming-parser": "^2.4.2", + "lru-cache": "^6.0.0", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1" + }, + "devDependencies": { + "@types/jsonld": "1.5.15" + }, + "engines": { + "node": ">=14" + } + }, + "packages/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/ldp": { + "name": "@semapps/ldp", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "bytes": "^3.1.2", + "cron": "^4.1.4", + "dashify": "^2.0.0", + "http-link-header": "^1.1.1", + "mime-types": "^2.1.35", + "moleculer": "^0.14.17", + "moleculer-db": "^0.8.16", + "moleculer-schedule": "^0.2.3", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "path-to-regexp": "^6.2.0", + "rdf-parse": "^1.7.0", + "sharp": "^0.31.2", + "sparqljs": "^3.5.2", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/ldp/node_modules/cron": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.0.tgz", + "integrity": "sha512-ciiYNLfSlF9MrDqnbMdRWFiA6oizSF7kA1osPP9lRzNu0Uu+AWog1UKy7SkckiDY2irrNjeO6qLyKnXC8oxmrw==", + "license": "MIT", + "dependencies": { + "@types/luxon": "~3.6.0", + "luxon": "~3.6.0" + }, + "engines": { + "node": ">=18.x" + } + }, + "packages/ldp/node_modules/luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "packages/middlewares": { + "name": "@semapps/middlewares", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.1.4", + "busboy": "^0.3.1", + "memory-streams": "^0.1.3", + "moleculer": "^0.14.18" + }, + "engines": { + "node": ">=14" + } + }, + "packages/migration": { + "name": "@semapps/migration", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/webacl": "1.1.4" + }, + "engines": { + "node": ">=14" + } + }, + "packages/mime-types": { + "name": "@semapps/mime-types", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "moleculer": "^0.14.18", + "negotiator": "^0.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "packages/nodeinfo": { + "name": "@semapps/nodeinfo", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/notifications": { + "name": "@semapps/notifications", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/triplestore": "1.1.4", + "cron-parser": "^4.3.0", + "expo-server-sdk": "^3.4.0", + "moleculer": "^0.14.18", + "moleculer-db": "^0.8.15", + "moleculer-mail": "^1.2.5", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/ontologies": { + "name": "@semapps/ontologies", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/triplestore": "1.1.4", + "moleculer-db": "^0.8.16", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=14" + } + }, + "packages/solid": { + "name": "@semapps/solid", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/webid": "1.1.4", + "http-link-header": "^1.1.1", + "moleculer": "^0.14.19", + "moleculer-bull": "^0.2.5", + "moleculer-db": "^0.8.16", + "moleculer-web": "^0.10.0-beta1", + "moment": "2.30.1", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/sparql-endpoint": { + "name": "@semapps/sparql-endpoint", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/triplestore": "1.1.4", + "moleculer": "^0.14.18", + "moleculer-web": "^0.10.0-beta1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/sync": { + "name": "@semapps/sync", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "moleculer": "^0.14.17", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/triplestore": { + "name": "@semapps/triplestore", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "jsonld": "^3.3.2", + "moleculer": "^0.14.29", + "negotiator": "^0.6.2", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "sparqljson-parse": "^1.5.1", + "string-template": "^1.0.0", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/triplestore-ng": { + "name": "@semapps/triplestore-ng", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "jsonld": "^3.3.2", + "moleculer": "^0.14.29", + "negotiator": "^0.6.2", + "nextgraph": "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "sparqljson-parse": "^1.5.1", + "string-template": "^1.0.0", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/void": { + "name": "@semapps/void", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "jsonld-streaming-serializer": "^1.2.0", + "moleculer": "^0.14.17", + "n3": "^1.8.0", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webacl": { + "name": "@semapps/webacl", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "jsonld-streaming-serializer": "^1.2.0", + "moleculer": "^0.14.18", + "n3": "^1.8.0", + "rdf-parse": "^1.7.0", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1" + }, + "devDependencies": { + "@types/url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webfinger": { + "name": "@semapps/webfinger", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.1.4", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks": { + "name": "@semapps/webhooks", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.0.10", + "@semapps/triplestore": "1.0.10", + "moleculer": "^0.14.18", + "moleculer-db": "^0.8.15", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/ldp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@semapps/ldp/-/ldp-1.0.10.tgz", + "integrity": "sha512-3RHJ1/hGUdCH9oNFYVrvCpliqg6uEGmFjHXcnaJwE60oJjMgd5rylsG6zUrZK6ArGwSTiQK9mTQiqMlup/SDEw==", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.0.10", + "@semapps/mime-types": "1.0.10", + "@semapps/ontologies": "1.0.10", + "@semapps/triplestore": "1.0.10", + "dashify": "^2.0.0", + "http-link-header": "^1.1.1", + "mime-types": "^2.1.35", + "moleculer": "^0.14.17", + "moleculer-db": "^0.8.16", + "moleculer-schedule": "^0.2.3", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "path-to-regexp": "^6.2.0", + "rdf-parse": "^1.7.0", + "sharp": "^0.31.2", + "sparqljs": "^3.5.2", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/middlewares": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@semapps/middlewares/-/middlewares-1.0.10.tgz", + "integrity": "sha512-eyWJr5XLJ93Rw90fjw8WxAOHbrDMyAjjK5HG6zaxeYct7DsVBXB8mgIBmqkl+q/GZddY9j4kNGBjx4sm5JLhuA==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.0.10", + "busboy": "^0.3.1", + "memory-streams": "^0.1.3", + "moleculer": "^0.14.18" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/mime-types": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@semapps/mime-types/-/mime-types-1.0.10.tgz", + "integrity": "sha512-QfAlYiuYhZktn+AsJvo4U2bgcuVsVm5JQDVSz5E2amVlfrkB0U9clUsSGkktBy0p6kUmkuD8m54uJx9fSnrARg==", + "license": "Apache-2.0", + "dependencies": { + "moleculer": "^0.14.18", + "negotiator": "^0.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/ontologies": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@semapps/ontologies/-/ontologies-1.0.10.tgz", + "integrity": "sha512-FBJ+ZT0cxpYrxbO/y4RO+aew4Ljfv8p+AQbCbPeJIDNd9lXiL4IgqEsBHobYuvvs6JiCjIttURzbYOxExZBk6Q==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/triplestore": "1.0.10", + "moleculer-db": "^0.8.16", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/triplestore": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@semapps/triplestore/-/triplestore-1.0.10.tgz", + "integrity": "sha512-mBO2nm8W35M4vNL4jiUWq8VFE1iVIzKVSQdLNq/vPPqFW09aSqz26xe5qiqAi4NzWnQ0Gdjjecnuasi3lW/uGw==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/middlewares": "1.0.10", + "@semapps/mime-types": "1.0.10", + "jsonld": "^3.3.2", + "moleculer": "^0.14.29", + "negotiator": "^0.6.2", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "sparqljson-parse": "^1.5.1", + "string-template": "^1.0.0", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webid": { + "name": "@semapps/webid", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "tests": { + "name": "semapps-tests", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/activitypub": "1.1.4", + "@semapps/auth": "1.1.4", + "@semapps/core": "1.1.4", + "@semapps/crypto": "1.1.4", + "@semapps/inference": "1.1.4", + "@semapps/jsonld": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/sync": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/webacl": "1.1.4", + "@semapps/webid": "1.1.4", + "dotenv-flow": "^3.1.0", + "fs-extra": "^9.0.1", + "http-link-header": "^1.1.1", + "ioredis": "^4.27.0", + "lru-cache": "10.1.0", + "moleculer": "^0.14.17", + "moleculer-web": "^0.10.7", + "node-fetch": "^2.6.6", + "rdf-data-model": "^1.0.0", + "supertest": "^4.0.2", + "url-join": "^4.0.1", + "wait-for-expect": "^3.0.2" + }, + "devDependencies": { + "@types/jest": "^29.5.14", + "jest": "^29.7.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "tests/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "tests/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + } + } +} diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 01f81988e..60b7fdd75 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -105,6 +105,31 @@ const JsonldParserSchema = { } }, + fromQuads: { + async handler(ctx) { + const { input } = ctx.params; + + const context = await ctx.call('jsonld.context.get'); + + // Options: https://github.com/rubensworks/jsonld-streaming-serializer.js?tab=readme-ov-file#configuration + const jsonLdSerializer = new JsonLdSerializer(); + input.forEach((quad: any) => jsonLdSerializer.write(quad)); + jsonLdSerializer.end(); + + const jsonLd = JSON.parse(await this.streamToString(jsonLdSerializer)); + + return await this.actions.frame( + { + input: jsonLd, + frame: { '@context': context } + // Force results to be in a @graph, even if we have a single result + // options: { omitGraph: false } + }, + { parentCtx: ctx } + ); + } + }, + toRDF: { async handler(ctx) { const { input, options = {} } = ctx.params; diff --git a/src/middleware/packages/triplestore/README.md b/src/middleware/packages/triplestore/README.md index 6ceca477f..720645d44 100644 --- a/src/middleware/packages/triplestore/README.md +++ b/src/middleware/packages/triplestore/README.md @@ -1,5 +1,81 @@ # @semapps/triplestore -Triple store module for SemApps +Triple store module for SemApps with support for multiple backends. -[Documentation](https://semapps.org/docs/middleware/triplestore) +## Supported Backends + +- **Fuseki**: Apache Jena Fuseki SPARQL server +- **NextGraph**: NextGraph triple store + +## Configuration + +The module automatically detects which backend to use based on your configuration. + +### Fuseki Configuration + +```javascript +{ + name: 'triplestore', + mixins: [TripleStoreService], + settings: { + url: 'http://localhost:3030', + user: 'admin', + password: 'password', + mainDataset: 'main' + } +} +``` + +### NextGraph Configuration + +```javascript +{ + name: 'triplestore', + mixins: [TripleStoreService], + settings: { + nextgraphConfig: '/path/to/nextgraph/config', + nextgraphAdminUserId: 'admin-user-id', + nextgraphMappingsNuri: 'http://semapps.org/mappings', + mainDataset: 'main' + } +} +``` + +### Explicit Backend Selection + +You can also explicitly specify the backend type: + +```javascript +{ + name: 'triplestore', + mixins: [TripleStoreService], + settings: { + backend: 'fuseki', // or 'nextgraph' + url: 'http://localhost:3030', + user: 'admin', + password: 'password', + mainDataset: 'main' + } +} +``` + +## Backward Compatibility + +Existing configurations continue to work without any changes. The module automatically detects the backend type based on the provided settings. + +## API + +The module provides the same API regardless of the backend used: + +- `triplestore.query` - Execute SPARQL queries +- `triplestore.update` - Execute SPARQL updates +- `triplestore.insert` - Insert triples +- `triplestore.dropAll` - Drop all data +- `triplestore.countTriplesOfSubject` - Count triples for a subject +- `triplestore.tripleExist` - Check if a triple exists +- `triplestore.deleteOrphanBlankNodes` - Delete orphan blank nodes + +## Dependencies + +- **Fuseki**: Uses `node-fetch` for HTTP communication +- **NextGraph**: Uses the `nextgraph` SDK (optional dependency) diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts deleted file mode 100644 index 2af773908..000000000 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { ActionSchema } from 'moleculer'; - -const Schema = { - visibility: 'public', - params: { - uri: { - type: 'string' - }, - webId: { - type: 'string', - optional: true - }, - dataset: { - type: 'string', - optional: true - }, - graphName: { - type: 'string', - optional: true - } - }, - async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; - - if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) - throw new Error(`The dataset ${dataset} doesn't exist`); - - const results = await ctx.call('triplestore.query', { - query: ` - SELECT ?p ?v - ${ctx.params.graphName ? `FROM <${ctx.params.graphName}>` : ''} - WHERE { - <${ctx.params.uri}> ?p ?v - } - `, - webId, - dataset - }); - - return results.length; - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts deleted file mode 100644 index e80417735..000000000 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ActionSchema } from 'moleculer'; - -const Schema = { - visibility: 'public', - params: { - dataset: { - type: 'string', - optional: true - }, - graphName: { - type: 'string', - optional: true - } - }, - async handler(ctx) { - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; - const { graphName } = ctx.params; - - if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) - throw new Error(`The dataset ${dataset} doesn't exist`); - - // Launch the query 3 times, so that blank nodes within orphan blank nodes are also deleted - for (let i = 0; i < 3; i++) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - await this.actions.update( - { - query: ` - ${graphName ? `WITH <${graphName}>` : ''} - DELETE { - ?s ?p ?o . - } - WHERE { - ?s ?p ?o . - FILTER(isBLANK(?s)) - FILTER(NOT EXISTS {?parentS ?parentP ?s}) - } - `, - webId: 'system', - dataset - }, - { parentCtx: ctx } - ); - } - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index 96906aa08..6f3bf87e9 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -14,22 +14,13 @@ const Schema = { } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) throw new Error(`The dataset ${dataset} doesn't exist`); - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message - return await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { - body: 'update=DROP+ALL', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - 'X-SemappsUser': webId - } - }); + return await this.settings.adapter.dropAll(dataset); } } satisfies ActionSchema; diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 6a7e8e045..45f9f5209 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -8,10 +8,6 @@ const Schema = { resource: { type: 'object' }, - webId: { - type: 'string', - optional: true - }, graphName: { type: 'string', optional: true @@ -23,8 +19,6 @@ const Schema = { }, async handler(ctx) { const { resource, graphName } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; @@ -44,17 +38,11 @@ const Schema = { const datasets = dataset === '*' ? await ctx.call('triplestore.dataset.list') : [dataset]; for (dataset of datasets) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - if (datasets.length > 1) this.logger.info(`Inserting into dataset ${dataset}...`); - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message - await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { - body: graphName ? `INSERT DATA { GRAPH <${graphName}> { ${rdf} } }` : `INSERT DATA { ${rdf} }`, - headers: { - 'Content-Type': 'application/sparql-update', - 'X-SemappsUser': webId, - Authorization: this.Authorization - } - }); + //test if graphName exists in the dataset + if (datasets.length > 1) this.logger.info(`Inserting into dataset ${dataset}...`); + const query = graphName ? `INSERT DATA { GRAPH <${graphName}> { ${rdf} } }` : `INSERT DATA { ${rdf} }`; + + await this.settings.adapter.update(dataset, query); } } } satisfies ActionSchema; diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index d40b5c21e..8d1e0810a 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,4 +1,3 @@ -import urlJoin from 'url-join'; import { MIME_TYPES, negotiateType } from '@semapps/mime-types'; import { ActionSchema } from 'moleculer'; @@ -10,11 +9,6 @@ const Schema = { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message - accept: { - type: 'string', - default: MIME_TYPES.JSON - }, webId: { type: 'string', optional: true @@ -25,9 +19,7 @@ const Schema = { } }, async handler(ctx) { - let { accept, query } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + let { query } = ctx.params; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; @@ -38,53 +30,10 @@ const Schema = { // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (typeof query === 'object') query = this.generateSparqlQuery(query); - const acceptNegotiatedType = negotiateType(accept); - const acceptType = acceptNegotiatedType.mime; - - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - const response = await this.fetch(urlJoin(this.settings.url, dataset, 'query'), { - body: query, - headers: { - 'Content-Type': 'application/sparql-query', - 'X-SemappsUser': webId, - Accept: acceptNegotiatedType.fusekiMapping - } - }); - - // we don't use the property ctx.meta.$responseType because we are not in a HTTP API call here - // we are in an moleculer Action. - // we use a different name (without the $) and then retrieve this value in the API action (sparqlendpoint.query) to set the $responseType - // @ts-expect-error TS(2339): Property 'responseType' does not exist on type '{}... Remove this comment to see the full error message - ctx.meta.responseType = response.headers.get('content-type'); - const regex = /(CONSTRUCT|SELECT|ASK).*/gm; - // @ts-expect-error TS(2531): Object is possibly 'null'. - const verb = regex.exec(query)[1]; - switch (verb) { - case 'ASK': - if (acceptType === MIME_TYPES.JSON) { - const jsonResult = await response.json(); - return jsonResult.boolean; - } - throw new Error('Only JSON accept type is currently allowed for ASK queries'); + // Use backend implementation + return await this.settings.adapter.query(dataset, query); - case 'SELECT': - if (acceptType === MIME_TYPES.JSON || acceptType === MIME_TYPES.SPARQL_JSON) { - const jsonResult = await response.json(); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return await this.sparqlJsonParser.parseJsonResults(jsonResult); - } - return await response.text(); - - case 'CONSTRUCT': - if (acceptType === MIME_TYPES.TURTLE || acceptType === MIME_TYPES.TRIPLE) { - return await response.text(); - } - return await response.json(); - - default: - throw new Error('SPARQL Verb not supported'); - } } } satisfies ActionSchema; diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts deleted file mode 100644 index 9da86992b..000000000 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { ActionSchema } from 'moleculer'; - -const Schema = { - visibility: 'public', - params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message - triple: { - type: 'object' - }, - webId: { - type: 'string', - optional: true - }, - dataset: { - type: 'string', - optional: true - }, - graphName: { - type: 'string', - optional: true - } - }, - async handler(ctx) { - const { triple, graphName } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; - - if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) - throw new Error(`The dataset ${dataset} doesn't exist`); - - return await ctx.call('triplestore.query', { - query: { - type: 'query', - queryType: 'ASK', - where: [ - graphName - ? { - type: 'graph', - name: { termType: 'NamedNode', value: graphName }, - patterns: [{ type: 'bgp', triples: [triple] }] - } - : { type: 'bgp', triples: [triple] } - ] - }, - webId, - dataset - }); - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index 128df4166..1a12954fc 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -20,8 +20,6 @@ const Schema = { }, async handler(ctx) { let { query } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; @@ -38,14 +36,9 @@ const Schema = { for (dataset of datasets) { // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (datasets.length > 1) this.logger.info(`Updating dataset ${dataset}...`); - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message - await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { - body: query, - headers: { - 'Content-Type': 'application/sparql-update', - 'X-SemappsUser': webId - } - }); + + // Use backend abstraction + await this.settings.adapter.update(dataset, query); } } } satisfies ActionSchema; diff --git a/src/middleware/packages/triplestore/adapters/base.ts b/src/middleware/packages/triplestore/adapters/base.ts new file mode 100644 index 000000000..514a5f0ca --- /dev/null +++ b/src/middleware/packages/triplestore/adapters/base.ts @@ -0,0 +1,55 @@ +import { Response } from 'node-fetch'; + +export interface AdapterInterface { + name: string; + init(initSettings: { broker: any }): Promise; + cleanup(): Promise; + query(query: string, dataset?: string): Promise; + update(query: string, dataset?: string): Promise; + dropAll(dataset: string): Promise; + createDataset(dataset: string): Promise; + datasetExists(dataset: string): Promise; + listDatasets(): Promise; + deleteDataset(dataset: string): Promise; + backupDataset(dataset: string): Promise; +} + +export abstract class BaseAdapter implements AdapterInterface { + abstract name: string; + + protected broker: any; + + // Optional init method, override if needed + async init(initSettings: { broker: any }): Promise { + this.broker = initSettings.broker; + } + + protected getLogger() { + if (this.broker && this.broker.logger) { + return this.broker.logger; + } + return console; // Fallback to console + } + + + // Default no-op implementation, override if needed + async cleanup(): Promise { + return Promise.resolve(); + } + + abstract query(query: string, dataset?: string): Promise; + + abstract update(query: string, dataset?: string): Promise; + + abstract dropAll(dataset: string): Promise; + + abstract createDataset(dataset: string): Promise; + + abstract datasetExists(dataset: string): Promise; + + abstract listDatasets(): Promise; + + abstract deleteDataset(dataset: string): Promise; + + abstract backupDataset(dataset: string): Promise; +} \ No newline at end of file diff --git a/src/middleware/packages/triplestore/adapters/fuseki.ts b/src/middleware/packages/triplestore/adapters/fuseki.ts new file mode 100644 index 000000000..60dd854f1 --- /dev/null +++ b/src/middleware/packages/triplestore/adapters/fuseki.ts @@ -0,0 +1,185 @@ +import fetch from 'node-fetch'; +import urlJoin from 'url-join'; +import { SparqlJsonParser } from 'sparqljson-parse'; +import { throw403, throw500, throw404 } from '@semapps/middlewares'; +import { Errors } from 'moleculer'; +import { BaseAdapter } from './base.ts'; + +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); +const { MoleculerError } = Errors; + +export default class FusekiAdapter extends BaseAdapter { + name = 'fuseki'; + + private settings: { + url: string, // The URL of the Fuseki server + user: string, // The username for the Fuseki server + password: string // The password for the Fuseki server + }; + + private sparqlJsonParser: SparqlJsonParser; + + constructor(settings: any) { + super(); + if (!settings.url) throw new Error('URL is required'); + if (!settings.user) throw new Error('User is required'); + if (!settings.password) throw new Error('Password is required'); + this.settings = settings; + this.sparqlJsonParser = new SparqlJsonParser(); + } + + /* + * Fetch the given URL with the given method, body and headers + * Intended to be used internally to call the Fuseki server + * + * @param url - The URL to fetch + * @param method - The method to use (default is POST) + * @param body - The body to send (default is undefined) + * @param headers - The headers to send (default is Accept: application/json, and the authorization header) + * @returns The response from the URL + */ + async fetch(url:string, { operation = 'unknown operation', method = 'POST', body, headers }: { operation?: string, method?: string, body?: any, headers?: any }) { + const response = await fetch(url, { + method, + body, + headers: { + Accept: 'application/json', + Authorization: `Basic ${Buffer.from(`${this.settings.user}:${this.settings.password}`).toString('base64')}`, + ...headers + } + }); + + if (!response.ok) { + const text = await response.text(); + // TODO : check if we could remove the comparison with 500 and permissions violation since we switched to jena-fuseki 5.0.0 or above + if (response.status === 403 || (response.status === 500 && text.includes('permissions violation'))) { + throw403(`Fuseki ${operation} failed: ${text}\nURL: ${url}\nQuery: ${body}`); + } else if (response.status === 404) { + throw404(`Fuseki ${operation} failed: ${text}\nURL: ${url}\nQuery: ${body}`); + } else { + throw500(`Fuseki ${operation} failed: Unable to reach SPARQL endpoint ${url}. Error message: ${response.statusText}. Query: ${body}`); + } + } + + return response; + } + + async query(dataset: string, query: string) { + const response = await this.fetch(urlJoin(this.settings.url, dataset, 'query'), { + operation: 'query', + body: query, + headers: { + 'Content-Type': 'application/sparql-query', + Accept: 'application/ld+json, application/sparql-results+json' + } + }); + + const regex = /(CONSTRUCT|SELECT|ASK).*/gm; + // @ts-expect-error TS(2531): Object is possibly 'null'. + const verb = regex.exec(query)[1]; + switch (verb) { + case 'ASK': + return (await response.json()).boolean; + case 'SELECT': + return this.sparqlJsonParser.parseJsonResults(await response.json()); + case 'CONSTRUCT': + return await response.json(); + default: + throw new Error('SPARQL Verb not supported'); + } + } + + async update(dataset: string, query: string) { + await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { + operation: 'update', + body: query, + headers: { + 'Content-Type': 'application/sparql-update', + } + }); + } + + async dropAll(dataset: string) { + await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { + operation: 'dropAll', + body: 'update=CLEAR+ALL', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }); + } + + async createDataset(dataset: string) { + await this.fetch(urlJoin(this.settings.url, '$/datasets') + `?dbName=${dataset}&dbType=tdb2`, { + operation: 'createDataset', + method: 'POST', + }); + await this.waitForDatasetCreation(dataset); + this.getLogger().info(`Fuseki dataset created: ${dataset}`); + } + + async datasetExists(dataset: string): Promise { + try { + const response = await this.fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { + operation: 'datasetExists', + }); + return response.status === 200; + } catch (error) { + if (!(error instanceof MoleculerError && error.code === 404)) throw error; + return false; + } + } + + async listDatasets() { + const response = await this.fetch(urlJoin(this.settings.url, '$/datasets'), { + operation: 'listDatasets', + method: 'GET' + }); + const json = await response.json(); + return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); + } + + async deleteDataset(dataset: string) { + await this.fetch(urlJoin(this.settings.url, '$/datasets', dataset), { + operation: 'deleteDataset', + method: 'DELETE' + }); + this.getLogger().info(`Fuseki dataset deleted: ${dataset}`); + } + + // TODO : see how we can test this + async backupDataset(dataset: string) { + // Ask Fuseki to backup the given dataset + const response = await this.fetch(urlJoin(this.settings.url, '$/backup', dataset), { + operation: 'backupDataset', + }); + + // Wait for backup to complete + const { taskId } = await response.json(); + await this.waitForTaskCompletion(taskId); + this.getLogger().info(`Fuseki dataset backed up: ${dataset}`); + } + + async waitForDatasetCreation(dataset: string) { + let datasetExist; + do { + await delay(1000); + datasetExist = await this.datasetExists(dataset); + } while (!datasetExist); + } + + async waitForTaskCompletion(taskId: string) { + let task; + do { + await delay(1000); + const response = await this.fetch(urlJoin(this.settings.url, '$/tasks/', `${taskId}`), { + operation: 'Wait for Task Completion', + method: 'GET' + }); + + if (response.ok) { + task = await response.json(); + } + } while (!task || !task.finished); + } +} \ No newline at end of file diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts new file mode 100644 index 000000000..7e33db9c3 --- /dev/null +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -0,0 +1,301 @@ +import ng from 'nextgraph'; +import { SparqlJsonParser } from 'sparqljson-parse'; +import { BaseAdapter } from './base.ts'; + +type NextGraphAdapterSettings = { + serverPeerId: string; // The server peer id, is provided in the console of the NextGraph server + adminUserKey: string; // The admin user key, can be retrieved using the GUI of the NextGraph server + clientPeerKey: string; // TODO : remember how to retrieve/generate/guess/invoke/create out of thin air the client peer key ^^ + serverAddr: string; // The server address, can be retrieved using the console of the NextGraph server + adminUserId: string; // The admin user id, must be saved when first creating the user + mappingsNuri: string; // The mappings nuri, must be saved when first creating the document +}; + +export default class NextGraphAdapter extends BaseAdapter { + name = 'nextgraph'; + + private settings: NextGraphAdapterSettings; + + private adminSessionid: string = ''; + + private nextgraphConfig: { server_peer_id: string, admin_user_key: string, client_peer_key: string, server_addr: string } = { + server_peer_id: '', + admin_user_key: '', + client_peer_key: '', + server_addr: '' + }; + + private sparqlJsonParser: SparqlJsonParser; + + constructor(settings: NextGraphAdapterSettings) { + super(); + if (!settings.serverPeerId) throw new Error('Server peer id is required'); + if (!settings.adminUserKey) throw new Error('Admin user key is required'); + if (!settings.clientPeerKey) throw new Error('Client peer key is required'); + if (!settings.serverAddr) throw new Error('Server address is required'); + if (!settings.adminUserId) throw new Error('Admin user id is required'); + if (!settings.mappingsNuri) throw new Error('Mappings nuri is required'); + + this.settings = settings; + this.sparqlJsonParser = new SparqlJsonParser(); + } + + async init(initSettings: { broker: any }) { + // The broker is used to call the jsonld.parser service in the query method + // TODO : see if it's an issue (can cause circular dependency or other calamities) + this.broker = initSettings.broker; + + // Initialize the nextgraph config, used to initialize the nextgraph backend and to create users + this.nextgraphConfig = { + server_peer_id: this.settings.serverPeerId, + admin_user_key: this.settings.adminUserKey, + client_peer_key: this.settings.clientPeerKey, + server_addr: this.settings.serverAddr + }; + + try { + // Initialize the nextgraph backend in headless mode + await ng.init_headless(this.nextgraphConfig); + // Start a session for the admin user (used to manage datasets) + const session = await ng.session_headless_start(this.settings.adminUserId); + this.adminSessionid = session.session_id; + this.getLogger().info(`NextGraph adapter initialized. Admin session started with id: ${this.adminSessionid}`); + } catch (error) { + throw new Error(`NextGraph adapter initialization failed: ${error}`); + } + } + + async query(dataset: string, query: string) { + let session; + try { + session = await this.openSession(dataset); + const result = await ng.sparql_query(session.session_id, query); + + const regex = /(CONSTRUCT|SELECT|ASK).*/gm; + // @ts-expect-error TS(2531): Object is possibly 'null'. + const verb = regex.exec(query)[1]; + switch (verb) { + case 'ASK': + return result; + case 'SELECT': + return this.sparqlJsonParser.parseJsonResults(result); + case 'CONSTRUCT': + // TODO : check if calling a service inside another service can cause circular dependency or other calamities + return await this.broker.call('jsonld.parser.fromQuads', { input: result }); + default: + throw new Error('SPARQL Verb not supported'); + } + } catch (error) { + throw new Error(`NextGraph query failed: ${error}\nQuery: ${query}\nDataset: ${dataset}`); + } + finally { + this.closeSession(session); + } + } + + async update(dataset: any, query: string) { + let session; + try { + session = await this.openSession(dataset); + await ng.sparql_update(session.session_id, query); + } catch (error) { + throw new Error(`NextGraph update failed: ${error}\nQuery: ${query}\nDataset: ${dataset}`); + } + finally { + this.closeSession(session); + } + } + + async dropAll(dataset: string): Promise { + let session: any; + try { + session = await this.openSession(dataset); + // TODO : Check if there is a drop statement in nextgraph to use instead of DELETE { ?s ?p ?o } WHERE { ?s ?p ?o } + return await ng.sparql_update(session.session_id, 'DELETE { ?s ?p ?o } WHERE { ?s ?p ?o }'); + } catch (error) { + throw new Error(`NextGraph dropAll failed: ${error}\nDataset: ${dataset}`); + } + finally { + this.closeSession(session); + } + } + + async createDataset(dataset: string) { + try { + const userId = await ng.admin_create_user(this.nextgraphConfig); + // TODO: see about logger + this.getLogger().info(`NextGraph user created for dataset ${dataset} with user id : ${userId}`); + + const mappingUri = `http://semapps.org/mappings/${encodeURIComponent(dataset)}`; + + await ng.sparql_update( + this.adminSessionid, + ` + PREFIX semapps: + INSERT DATA { + GRAPH <${this.settings.mappingsNuri}> { + <${mappingUri}> + a semapps:Dataset ; + semapps:name "${dataset}" ; + semapps:value "${userId}" . + } + } + ` + ); + this.getLogger().info(`Mapping created for dataset ${dataset} with mapping uri : ${mappingUri}`); + + } catch (error) { + throw new Error(`NextGraph createDataset failed: ${error}\nDataset: ${dataset}`); + } + } + + async datasetExists(dataset: string): Promise { + try { + + const response = await ng.sparql_query( + this.adminSessionid, + ` + PREFIX semapps: + SELECT ?userId WHERE { + GRAPH <${this.settings.mappingsNuri}> { + ?mapping a semapps:Dataset ; + semapps:name "${dataset}" ; + semapps:value ?userId . + } + } + ` + ); + return response && response.results && response.results.bindings && response.results.bindings.length > 0; + } catch (error) { + throw new Error(`NextGraph datasetExists failed: ${error}\nDataset: ${dataset}`); + } + } + + async listDatasets(): Promise { + try { + const response = await ng.sparql_query( + this.adminSessionid, + ` + PREFIX semapps: + SELECT ?datasetName WHERE { + GRAPH <${this.settings.mappingsNuri}> { + ?mapping a semapps:Dataset ; + semapps:name ?datasetName . + } + } + ` + ); + return response.results.bindings.map((binding: any) => binding.datasetName.value); + } catch (error) { + throw new Error(`NextGraph listDatasets failed: ${error}`); + } + } + + async deleteDataset(dataset: string): Promise { + try { + // First, check if the mapping exists + const checkResponse = await ng.sparql_query( + this.adminSessionid, + ` + PREFIX semapps: + + SELECT ?mapping ?userId WHERE { + GRAPH <${this.settings.mappingsNuri}> { + ?mapping a semapps:Dataset ; + semapps:name "${dataset}" ; + semapps:value ?userId . + } + } + ` + ); + + if (!(checkResponse.results.bindings.length > 0)) { + this.getLogger().warn(`Nextgraph delete dataset : No nextgraph mapping found for dataset: ${dataset}`); + return; // Nothing to delete + } + + const mappingUri = checkResponse.results.bindings[0].mapping.value; + const userId = checkResponse.results.bindings[0].userId.value; + + // Delete the mapping from the graph + await ng.sparql_update( + this.adminSessionid, + ` + PREFIX semapps: + + DELETE DATA { + GRAPH <${this.settings.mappingsNuri}> { + <${mappingUri}> + a semapps:Dataset ; + semapps:name "${dataset}" ; + semapps:value "${userId}" . + } + } + ` + ); + this.getLogger().info(`Successfully deleted mapping for dataset: ${dataset} (userId: ${userId})`); + + // TODO : See with Niko about user deletion in nextgraph then if possible delete the actual user + } catch (error) { + throw new Error(`NextGraph deleteDataset failed: ${error}\nDataset: ${dataset}`); + } + } + + async backupDataset(dataset: string): Promise { + throw new Error('Backup not implemented for NextGraph'); + } + + + async openSession(dataset: string) { + try { + const userId = await this.getUserIdForDataset(dataset); + const session = await ng.session_headless_start(userId); + return session; + } catch (error) { + throw new Error(`NextGraph openSession failed: ${error}`); + } + } + + async closeSession(session: any) { + try { + await ng.session_headless_stop(session.session_id, true); + } catch (error) { + throw new Error(`NextGraph closeSession failed: ${error}`); + } + } + + private async getUserIdForDataset(dataset: string): Promise { + try { + const response = await ng.sparql_query( + this.adminSessionid, + ` + PREFIX semapps: + SELECT ?userId WHERE { + GRAPH <${this.settings.mappingsNuri}> { + ?mapping a semapps:Dataset ; + semapps:name "${dataset}" ; + semapps:value ?userId . + } + } + ` + ); + if (response.results.bindings.length > 0) { + return response.results.bindings[0].userId.value; + } + throw new Error(`No user id found in the nextgraph mappings.`); + } catch (error) { + throw new Error(`NextGraph getUserIdForDataset failed: ${error}\nDataset: ${dataset}`); + } + } + + async cleanup() { + if (this.adminSessionid) { + try { + await ng.session_headless_stop(this.adminSessionid, true); + this.getLogger().info('NextGraph adapter cleaned up'); + } catch (error) { + throw new Error(`NextGraph cleanup failed: ${error}`); + } + } + } +} \ No newline at end of file diff --git a/src/middleware/packages/triplestore/index.ts b/src/middleware/packages/triplestore/index.ts index 3f346b217..eff419411 100644 --- a/src/middleware/packages/triplestore/index.ts +++ b/src/middleware/packages/triplestore/index.ts @@ -3,4 +3,7 @@ import TripleStoreAdapter from './adapter.ts'; import TripleStoreService from './service.ts'; export * from './utils.ts'; +export * from './adapters/base.ts'; +export { default as FusekiAdapter } from './adapters/fuseki.ts'; +export { default as NextGraphAdapter } from './adapters/nextgraph.ts'; export { DatasetService, TripleStoreAdapter, TripleStoreService }; diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 4b3c0f2a4..38ba9f51b 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -1,5 +1,5 @@ { - "name": "@semapps/triplestore", + "name": "@semapps/triplestore-jena", "version": "1.1.4", "description": "Triple store module for SemApps", "license": "Apache-2.0", @@ -9,6 +9,7 @@ "@semapps/mime-types": "1.1.4", "jsonld": "^3.3.2", "negotiator": "^0.6.2", + "nextgraph": "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", "node-fetch": "^2.6.6", "sparqljs": "^3.5.2", "sparqljson-parse": "^1.5.1", diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 4addbffff..be2266f38 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -1,15 +1,9 @@ -import { SparqlJsonParser } from 'sparqljson-parse'; import sparqljsModule from 'sparqljs'; -import fetch from 'node-fetch'; -import { throw403, throw500 } from '@semapps/middlewares'; import { ServiceSchema, Errors } from 'moleculer'; -import countTriplesOfSubject from './actions/countTriplesOfSubject.ts'; -import deleteOrphanBlankNodes from './actions/deleteOrphanBlankNodes.ts'; import dropAll from './actions/dropAll.ts'; import insert from './actions/insert.ts'; import query from './actions/query.ts'; import update from './actions/update.ts'; -import tripleExist from './actions/tripleExist.ts'; import DatasetService from './subservices/dataset.ts'; import NamedGraphService from './subservices/named-graph.ts'; @@ -19,28 +13,30 @@ const { MoleculerError } = Errors; const TripleStoreService = { name: 'triplestore' as const, settings: { - url: null, - user: null, - password: null, mainDataset: null, - fusekiBase: null, + adapter: null as AdapterInterface|null, // Sub-services customization dataset: {}, namedGraph: {} }, dependencies: ['jsonld.parser'], + async created() { - const { url, user, password, fusekiBase, dataset, namedGraph } = this.settings; + const { dataset, namedGraph, adapter } = this.settings; + if (!adapter) { + throw new Error('Adapter is required'); + } + // Initialize the adapter with + await adapter.init({ broker: this.broker }); + + // Create subservices if (dataset !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message this.broker.createService({ mixins: [DatasetService], settings: { - url, - user, - password, - fusekiBase, + adapter, ...dataset } }); @@ -54,48 +50,25 @@ const TripleStoreService = { }); } }, + started() { - this.sparqlJsonParser = new SparqlJsonParser(); this.sparqlGenerator = new SparqlGenerator({ /* prefixes, baseIRI, factory, sparqlStar */ }); }, + + stopped() { + this.settings.adapter.cleanup(); + }, + actions: { insert, update, query, dropAll, - countTriplesOfSubject, - tripleExist, - deleteOrphanBlankNodes }, + methods: { - async fetch(url, { method = 'POST', body, headers }) { - const response = await fetch(url, { - method, - body, - headers: { - ...headers, - Authorization: `Basic ${Buffer.from(`${this.settings.user}:${this.settings.password}`).toString('base64')}` - } - }); - - if (!response.ok) { - const text = await response.text(); - if (response.status === 403) { - throw403(text); - } else { - // the 3 lines below (until the else) can be removed once we switch to jena-fuseki version 4.0.0 or above - if (response.status === 500 && text.includes('permissions violation')) { - throw403(text); - } else { - throw500(`Unable to reach SPARQL endpoint ${url}. Error message: ${response.statusText}. Query: ${body}`); - } - } - } - - return response; - }, generateSparqlQuery(query) { try { return this.sparqlGenerator.stringify(query); diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 03c121554..1545321ca 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -1,73 +1,42 @@ -import fetch from 'node-fetch'; -import fs from 'fs'; -import path from 'path'; -import urlJoin from 'url-join'; -// @ts-expect-error TS(7016): Could not find a declaration file for module 'stri... Remove this comment to see the full error message -import format from 'string-template'; import { ServiceSchema } from 'moleculer'; -import { fileURLToPath } from 'url'; +import { AdapterInterface } from '../adapters/base.ts'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); const DatasetService = { name: 'triplestore.dataset' as const, settings: { - url: null, - user: null, - password: null, - fusekiBase: null + backend: null as AdapterInterface | null }, - started() { - this.headers = { - Authorization: `Basic ${Buffer.from(`${this.settings.user}:${this.settings.password}`).toString('base64')}` - }; + async created() { + if (!this.settings.adapter) { + throw new Error('Adapter is required'); + } }, actions: { backup: { async handler(ctx) { const { dataset } = ctx.params; - - // Ask Fuseki to backup the given dataset - const response = await fetch(urlJoin(this.settings.url, '$/backup', dataset), { - method: 'POST', - headers: this.headers - }); - - // Wait for backup to complete - const { taskId } = await response.json(); - await this.actions.waitForTaskCompletion({ taskId }, { parentCtx: ctx }); + if (!dataset) throw new Error('Unable to backup dataset. The parameter dataset is missing'); + + this.logger.info(`Backing up dataset ${dataset}...`); + await this.settings.adapter.backupDataset(dataset); + this.logger.info(`Dataset ${dataset} backed up`); } }, create: { async handler(ctx) { - const { dataset, secure } = ctx.params; + const { dataset } = ctx.params; if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); + const exist = await this.actions.exist({ dataset }, { parentCtx: ctx }); if (!exist) { this.logger.info(`Dataset ${dataset} doesn't exist. Creating it...`); - let response; - + if (dataset.endsWith('Acl') || dataset.endsWith('Mirror')) throw new Error(`Error when creating dataset ${dataset}. Its name cannot end with Acl or Mirror`); - const templateFilePath = path.join(__dirname, '../templates', secure ? 'secure-dataset.ttl' : 'dataset.ttl'); - const template = await fs.promises.readFile(templateFilePath, 'utf8'); - const assembler = format(template, { dataset: dataset }); - response = await fetch(urlJoin(this.settings.url, '$/datasets'), { - method: 'POST', - headers: { ...this.headers, 'Content-Type': 'text/turtle' }, - body: assembler - }); - - if (response.status === 200) { - await this.actions.waitForCreation({ dataset }, { parentCtx: ctx }); - this.logger.info(`Created ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); - } else { - this.logger.info(await response.text()); - throw new Error(`Error when creating ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); - } + await this.settings.adapter.createDataset(dataset); } } }, @@ -75,67 +44,20 @@ const DatasetService = { exist: { async handler(ctx) { const { dataset } = ctx.params; - const response = await fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { - headers: this.headers - }); - return response.status === 200; + if (!dataset) throw new Error('Unable to check if dataset exists. The parameter dataset is missing'); + return await this.settings.adapter.datasetExists(dataset); } }, list: { async handler() { - const response = await fetch(urlJoin(this.settings.url, '$/datasets'), { - headers: this.headers - }); - - if (response.ok) { - const json = await response.json(); - return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); - } - return []; + return await this.settings.adapter.listDatasets(); } }, isSecure: { async handler(ctx) { - const { dataset } = ctx.params; - // Check if http://semapps.org/webacl graph exists - return await ctx.call('triplestore.query', { - query: `ASK WHERE { GRAPH { ?s ?p ?o } }`, - dataset, - webId: 'system' - }); - } - }, - - waitForCreation: { - async handler(ctx) { - const { dataset } = ctx.params; - let datasetExist; - do { - await delay(1000); - datasetExist = await this.actions.exist({ dataset }, { parentCtx: ctx }); - } while (!datasetExist); - } - }, - - waitForTaskCompletion: { - async handler(ctx) { - const { taskId } = ctx.params; - let task; - - do { - await delay(1000); - - const response = await fetch(urlJoin(this.settings.url, '$/tasks/', `${taskId}`), { - method: 'GET', - headers: this.headers - }); - - if (response.ok) { - task = await response.json(); - } - } while (!task || !task.finished); + return false; } }, @@ -149,36 +71,9 @@ const DatasetService = { if (!iKnowWhatImDoing) { throw new Error('Please confirm that you know what you are doing by setting `iKnowWhatImDoing` to `true`.'); } - const isSecure = await this.actions.isSecure({ dataset }); - - if (isSecure && !this.settings.fusekiBase) - throw new Error( - 'Please provide the fusekiBase dir setting to the triplestore service, to delete a secure dataset.' - ); - - const response = await fetch(urlJoin(this.settings.url, '$/datasets', dataset), { - method: 'DELETE', - headers: this.headers - }); - if (!response.ok) { - throw new Error(`Failed to delete dataset ${dataset}: ${response.statusText}`); - } - - // If this is a secure dataset, we need to delete stuff manually. - if (isSecure) { - const dbDir = path.join(this.settings.fusekiBase, 'databases', dataset); - const dbAclDir = path.join(this.settings.fusekiBase, 'databases', `${dataset}Acl`); - const dbMirrorDir = path.join(this.settings.fusekiBase, 'databases', `${dataset}Mirror`); - const confFile = path.join(this.settings.fusekiBase, 'configuration', `${dataset}.ttl`); - - // Delete all, if present. - await Promise.all([ - fs.promises.rm(dbDir, { recursive: true, force: true }), - fs.promises.rm(dbAclDir, { recursive: true, force: true }), - fs.promises.rm(dbMirrorDir, { recursive: true, force: true }), - fs.promises.rm(confFile, { force: true }) - ]); - } + + if (!dataset) throw new Error('Unable to delete dataset. The parameter dataset is missing'); + await this.settings.adapter.deleteDataset(dataset); } } } diff --git a/src/middleware/tests/triplestore/initialize.js b/src/middleware/tests/triplestore/initialize.js new file mode 100644 index 000000000..d8241d372 --- /dev/null +++ b/src/middleware/tests/triplestore/initialize.js @@ -0,0 +1,73 @@ +const { ServiceBroker } = require('moleculer'); +const { TripleStoreService } = require('@semapps/triplestore'); +const { FusekiAdapter, NextGraphAdapter } = require('@semapps/triplestore'); +const CONFIG = require('../config'); +const { clearDataset } = require('../utils'); +const { JsonLdService } = require('@semapps/jsonld'); +const { OntologiesService } = require('@semapps/ontologies'); +const ApiGatewayService = require('moleculer-web'); + +module.exports = async triplestore => { + await clearDataset(CONFIG.SETTINGS_DATASET); + + const broker = new ServiceBroker({ + logger: { + type: 'Console', + options: { + level: 'warn' + } + } + }); + + broker.createService({ + mixins: [JsonLdService], + settings: { + baseUri: CONFIG.HOME_URL + } + }); + + broker.createService({ mixins: [ApiGatewayService] }); + + broker.createService({ + mixins: [OntologiesService], + settings: { + persistRegistry: false, + // persistRegistry: true, + settingsDataset: CONFIG.SETTINGS_DATASET + } + }); + + let adapter; + if (triplestore === 'ng') { + // TODO : Environmentalize the nextgraph settings. + adapter = new NextGraphAdapter({ + adminUserId: 'XOct97tUc-ccyFUGe5sDUkHyXdTQ7LtGW1RVyYZzIYgA', + mappingsNuri: 'did:ng:o:5ZwPgEib6okmEbVlWRJVfGUNnbdtmQpC_x1uTy9wjcoA:v:asrmmGCr1WTq3oAGkgtVwUxsJgA5MIsV2FIYhDRyPagA', + serverPeerId: 'zT_iEzpHeO5znVU9ZYcvenJjb8pWrRWFzEO6eUE_SrAA', + adminUserKey: 'dwtQ9wWEovJwv6_3VArHKHRyr_zLAuR2_bFB1LiLfqEA', + clientPeerKey: 'ryv9v1Y3jJqdQYH-_rMxGTGyDtC_eOaA0a4ibRLhmX4A', + serverAddr: '127.0.0.1:14400' + }); + } else if (triplestore === 'fuseki') { + adapter = new FusekiAdapter({ + url: CONFIG.SPARQL_ENDPOINT, + user: CONFIG.JENA_USER, + password: CONFIG.JENA_PASSWORD, + mainDataset: CONFIG.MAIN_DATASET + }); + } else { + throw new Error('Triplestore not supported'); + } + + broker.createService({ + mixins: [TripleStoreService], + settings: { + mainDataset: CONFIG.MAIN_DATASET, + adapter + } + }); + + await broker.start(); + + return broker; +}; diff --git a/src/middleware/tests/triplestore/triplestore.test.js b/src/middleware/tests/triplestore/triplestore.test.js new file mode 100644 index 000000000..0dea9801e --- /dev/null +++ b/src/middleware/tests/triplestore/triplestore.test.js @@ -0,0 +1,519 @@ +const initialize = require('./initialize'); +// const initialize = require('./initialize-old'); + +jest.setTimeout(30000); + +describe.each([ + 'fuseki', + 'ng', +])('Triplestore service tests with %s', triplestore => { + let broker; + const testDataset = 'test_dataset'; + + beforeAll(async () => { + broker = await initialize(triplestore); + // Ensure the test dataset exists + await broker.call('triplestore.dataset.create', { dataset: testDataset }); + }); + + afterAll(async () => { + // Clean up test dataset + try { + await broker.call('triplestore.dataset.delete', { + dataset: testDataset, + iKnowWhatImDoing: true + }); + } catch (error) { + // Dataset might not exist, ignore error + } + if (broker) await broker.stop(); + }); + + beforeEach(async () => { + // Clear the test dataset before each test + await broker.call('triplestore.dropAll', { dataset: testDataset }); + }); + + describe('Dataset subservice', () => { + const testDatasetForSubServiceTests = 'test_dataset_for_sub_service_tests'; + + test('Create a new dataset', async () => { + // Delete if exists + try { + await broker.call('triplestore.dataset.delete', { + dataset: testDatasetForSubServiceTests, + iKnowWhatImDoing: true + }); + } catch (error) { + // Intentionally ignore errors if dataset does not exist + } + await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); + await expect(broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests })).resolves.toBeTruthy(); + }); + + test('Check dataset existence', async () => { + // Test non-existent dataset + await expect(broker.call('triplestore.dataset.exist', { dataset: 'non_existent_dataset' })).resolves.toBeFalsy(); + // Create and test existing dataset + await broker.call('triplestore.dataset.create', { dataset: testDataset }); + await expect(broker.call('triplestore.dataset.exist', { dataset: testDataset })).resolves.toBeTruthy(); + }); + + test('List datasets', async () => { + const datasets = await broker.call('triplestore.dataset.list'); + expect(Array.isArray(datasets)).toBeTruthy(); + expect(datasets).toContain(testDataset); + }); + + test('Delete dataset', async () => { + await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); + await expect(broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests })).resolves.toBeTruthy(); + await broker.call('triplestore.dataset.delete', { + dataset: testDatasetForSubServiceTests, + iKnowWhatImDoing: true + }); + await expect(broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests })).resolves.toBeFalsy(); + }); + + test('Delete dataset without confirmation should fail', async () => { + await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); + await expect(broker.call('triplestore.dataset.delete', { + dataset: testDatasetForSubServiceTests, + iKnowWhatImDoing: false + })).rejects.toThrow('Please confirm that you know what you are doing'); + }); + }); + + describe('Insert action', () => { + test('Insert JSON-LD data', async () => { + const jsonLdData = { + "@context": { + "ex": "http://example.org/", + "predicate": "ex:predicate" + }, + "@id": "http://example.org/subject", + "predicate": "object" + }; + await broker.call('triplestore.insert', { + resource: jsonLdData, + dataset: testDataset + }); + const result = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: testDataset + }); + expect(result).toHaveLength(1); + expect(result[0].s.value).toBe('http://example.org/subject'); + expect(result[0].p.value).toBe('http://example.org/predicate'); + expect(result[0].o.value).toBe('object'); + }); + + test('Insert JSON-LD data with type', async () => { + const jsonLdData = { + "@context": { + "ex": "http://example.org/", + "name": "ex:name", + "type": "@type" + }, + "@id": "http://example.org/person1", + "type": "http://example.org/Person", + "name": "John Doe" + }; + await broker.call('triplestore.insert', { + resource: jsonLdData, + dataset: testDataset + }); + const result = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s a }', + dataset: testDataset + }); + expect(result).toHaveLength(1); + }); + + if (triplestore === 'fuseki') { + test('Insert data with graph name', async () => { + const jsonLdData = { + "@context": { + "ex": "http://example.org/", + "predicate": "ex:predicate" + }, + "@id": "http://example.org/subject", + "predicate": "object" + }; + const graphName = 'http://example.org/graph'; + await broker.call('triplestore.insert', { + resource: jsonLdData, + graphName, + dataset: testDataset + }); + const result = await broker.call('triplestore.query', { + query: `SELECT * FROM <${graphName}> WHERE { ?s ?p ?o }`, + dataset: testDataset + }); + expect(result).toHaveLength(1); + }); + } + + test('Insert data with wildcard dataset inserts into all datasets', async () => { + const secondDataset = 'test_dataset2'; + // Create the second dataset + await broker.call('triplestore.dataset.create', { dataset: secondDataset }); + + const jsonLdData = { + "@context": { + "ex": "http://example.org/", + "predicate": "ex:predicate" + }, + "@id": "http://example.org/subject", + "predicate": "object" + }; + await broker.call('triplestore.insert', { + resource: jsonLdData, + dataset: '*' + }); + + // Assert in first dataset + let result = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: testDataset + }); + expect(result).toHaveLength(1); + + // Assert in second dataset + result = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: secondDataset + }); + expect(result).toHaveLength(1); + + // Clean up + await broker.call('triplestore.dataset.delete', { + dataset: secondDataset, + iKnowWhatImDoing: true + }); + }); + + test('Insert should fail with non-existent dataset', async () => { + const jsonLdData = { + "@context": { + "ex": "http://example.org/", + "predicate": "ex:predicate" + }, + "@id": "http://example.org/subject", + "predicate": "object" + }; + await expect(broker.call('triplestore.insert', { + resource: jsonLdData, + dataset: 'non_existent_dataset' + })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + }); + }); + + describe('Query action', () => { + beforeEach(async () => { + // Insert test data + const jsonLdData = [ + { + "@context": { + "ex": "http://example.org/", + "name": "ex:name", + "type": "@type" + }, + "@id": "http://example.org/person1", + "type": "http://example.org/Person", + "name": "John Doe" + }, + { + "@context": { + "ex": "http://example.org/", + "name": "ex:name", + "type": "@type" + }, + "@id": "http://example.org/person2", + "type": "http://example.org/Person", + "name": "Jane Smith" + } + ]; + for (const data of jsonLdData) { + await broker.call('triplestore.insert', { + resource: data, + dataset: testDataset + }); + } + }); + + test('SELECT query with JSON result', async () => { + const result = await broker.call('triplestore.query', { + query: 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 5', + // accept: 'application/json', + dataset: testDataset + }); + expect(Array.isArray(result)).toBeTruthy(); + expect(result.length).toBe(4); + }); + + test('SELECT query with SPARQL JSON result', async () => { + const result = await broker.call('triplestore.query', { + query: 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 5', + // accept: 'application/sparql-results+json', + dataset: testDataset + }); + expect(Array.isArray(result)).toBeTruthy(); + expect(result.length).toBe(4); + }); + + test('ASK query', async () => { + const result = await broker.call('triplestore.query', { + query: 'ASK WHERE { ?s a }', + // accept: 'application/json', + dataset: testDataset + }); + expect(typeof result).toBe('boolean'); + expect(result).toBeTruthy(); + }); + + + test('CONSTRUCT query with JSON result', async () => { + const result = await broker.call('triplestore.query', { + query: 'CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 5', + // accept: 'application/json', + dataset: testDataset + }); + expect(typeof result).toBe('object'); + }); + + test('Query with SPARQL.js object', async () => { + const sparqlObject = { + type: 'query', + queryType: 'SELECT', + variables: [ + { termType: 'Variable', value: 's' }, + { termType: 'Variable', value: 'p' }, + { termType: 'Variable', value: 'o' } + ], + where: [{ + type: 'bgp', + triples: [ + { + subject: { termType: 'Variable', value: 's' }, + predicate: { termType: 'Variable', value: 'p' }, + object: { termType: 'Variable', value: 'o' } + } + ] + }], + limit: 5 + }; + const result = await broker.call('triplestore.query', { + query: sparqlObject, + dataset: testDataset + }); + expect(Array.isArray(result)).toBeTruthy(); + }); + + test('Query should fail with non-existent dataset', async () => { + await expect(broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: 'non_existent_dataset' + })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + }); + + }); + + describe('Update action', () => { + beforeEach(async () => { + // Insert test data + const jsonLdData = { + "@context": { + "ex": "http://example.org/", + "name": "ex:name", + "type": "@type" + }, + "@id": "http://example.org/person1", + "type": "http://example.org/Person", + "name": "John Doe" + }; + await broker.call('triplestore.insert', { + resource: jsonLdData, + dataset: testDataset + }); + }); + + test('UPDATE query with string', async () => { + const updateQuery = ` + DELETE { ?name } + INSERT { "John Updated" } + WHERE { ?name } + `; + await broker.call('triplestore.update', { + query: updateQuery, + dataset: testDataset + }); + const result = await broker.call('triplestore.query', { + query: 'SELECT ?name WHERE { ?name }', + dataset: testDataset + }); + expect(result).toHaveLength(1); + expect(result[0].name.value).toBe('John Updated'); + }); + + test('UPDATE query with SPARQL.js object', async () => { + const updateObject = { + type: 'update', + updates: [{ + type: 'insertdelete', + delete: [{ + type: 'bgp', + triples: [{ + subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, + predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, + object: { termType: 'Variable', value: 'name' } + }] + }], + insert: [{ + type: 'bgp', + triples: [{ + subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, + predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, + object: { termType: 'Literal', value: 'John Updated' } + }] + }], + where: [{ + type: 'bgp', + triples: [{ + subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, + predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, + object: { termType: 'Variable', value: 'name' } + }] + }] + }] + }; + await broker.call('triplestore.update', { + query: updateObject, + dataset: testDataset + }); + const result = await broker.call('triplestore.query', { + query: 'SELECT ?name WHERE { ?name }', + dataset: testDataset + }); + expect(result).toHaveLength(1); + expect(result[0].name.value).toBe('John Updated'); + }); + + test('UPDATE with wildcard dataset updates all datasets', async () => { + const secondDataset = 'test_dataset2'; + // Create the second dataset + await broker.call('triplestore.dataset.create', { dataset: secondDataset }); + + // Insert the same data into both datasets + const initialData = { + "@context": { + "ex": "http://example.org/", + "age": "ex:age" + }, + "@id": "http://example.org/person1", + "age": "29" + }; + await broker.call('triplestore.insert', { + resource: initialData, + dataset: testDataset + }); + await broker.call('triplestore.insert', { + resource: initialData, + dataset: secondDataset + }); + + // Perform the update with wildcard + const updateQuery = ` + DELETE { ?age } + INSERT { "30" } + WHERE { ?age } + `; + await broker.call('triplestore.update', { + query: updateQuery, + dataset: '*' + }); + + // Assert in first dataset + let result = await broker.call('triplestore.query', { + query: 'SELECT ?age WHERE { ?age }', + dataset: testDataset + }); + expect(result).toHaveLength(1); + expect(result[0].age.value).toBe('30'); + + // Assert in second dataset + result = await broker.call('triplestore.query', { + query: 'SELECT ?age WHERE { ?age }', + dataset: secondDataset + }); + expect(result).toHaveLength(1); + expect(result[0].age.value).toBe('30'); + + // Clean up + await broker.call('triplestore.dataset.delete', { + dataset: secondDataset, + iKnowWhatImDoing: true + }); + }); + + test('UPDATE should fail with non-existent dataset', async () => { + const updateQuery = ` + INSERT { "30" } + WHERE { } + `; + await expect(broker.call('triplestore.update', { + query: updateQuery, + dataset: 'non_existent_dataset' + })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + }); + }); + + describe('DropAll action', () => { + beforeEach(async () => { + // Insert test data + const jsonLdData = { + "@context": { + "ex": "http://example.org/", + "name": "ex:name", + "type": "@type" + }, + "@id": "http://example.org/person1", + "type": "http://example.org/Person", + "name": "John Doe" + }; + await broker.call('triplestore.insert', { + resource: jsonLdData, + dataset: testDataset + }); + }); + + test('Drop all data from dataset', async () => { + // Verify data exists + let result = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: testDataset + }); + expect(result.length).toBeGreaterThan(0); + // Drop all data + await broker.call('triplestore.dropAll', { + dataset: testDataset + }); + // Verify data is gone + result = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: testDataset + }); + expect(result).toHaveLength(0); + }); + + test('DropAll should fail with non-existent dataset', async () => { + await expect(broker.call('triplestore.dropAll', { + dataset: 'non_existent_dataset' + })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + }); + }); + + describe('Error handling', () => { + // TODO: Add error handling tests + }); +}); diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 68a53bc28..c4c0475ee 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -3658,6 +3658,26 @@ __metadata: languageName: unknown linkType: soft +"@semapps/triplestore-jena@workspace:packages/triplestore": + version: 0.0.0-use.local + resolution: "@semapps/triplestore-jena@workspace:packages/triplestore" + dependencies: + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + jsonld: "npm:^3.3.2" + negotiator: "npm:^0.6.2" + nextgraph: "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + sparqljson-parse: "npm:^1.5.1" + string-template: "npm:^1.0.0" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + "@semapps/triplestore@npm:1.0.10": version: 1.0.10 resolution: "@semapps/triplestore@npm:1.0.10" @@ -3677,13 +3697,14 @@ __metadata: languageName: node linkType: hard -"@semapps/triplestore@npm:1.1.4, @semapps/triplestore@workspace:packages/triplestore": - version: 0.0.0-use.local - resolution: "@semapps/triplestore@workspace:packages/triplestore" +"@semapps/triplestore@npm:1.1.4": + version: 1.1.4 + resolution: "@semapps/triplestore@npm:1.1.4" dependencies: "@semapps/middlewares": "npm:1.1.4" "@semapps/mime-types": "npm:1.1.4" jsonld: "npm:^3.3.2" + moleculer: "npm:^0.14.29" negotiator: "npm:^0.6.2" node-fetch: "npm:^2.6.6" sparqljs: "npm:^3.5.2" @@ -3691,10 +3712,9 @@ __metadata: string-template: "npm:^1.0.0" url-join: "npm:^4.0.1" uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft + checksum: 10c0/5e46b023cbd9c7cb2f977fa53da2581770b84cbb498e2de665a8d1eec8a49446ac323d3ee7a66d38ebb68058b11b18cd0e9da5d3b0b88d9037e104bdf20d5014 + languageName: node + linkType: hard "@semapps/void@npm:1.1.4, @semapps/void@workspace:packages/void": version: 0.0.0-use.local @@ -5413,16 +5433,16 @@ __metadata: linkType: hard "browserslist@npm:^4.25.1": - version: 4.25.1 - resolution: "browserslist@npm:4.25.1" + version: 4.25.2 + resolution: "browserslist@npm:4.25.2" dependencies: - caniuse-lite: "npm:^1.0.30001726" - electron-to-chromium: "npm:^1.5.173" + caniuse-lite: "npm:^1.0.30001733" + electron-to-chromium: "npm:^1.5.199" node-releases: "npm:^2.0.19" update-browserslist-db: "npm:^1.1.3" bin: browserslist: cli.js - checksum: 10c0/acba5f0bdbd5e72dafae1e6ec79235b7bad305ed104e082ed07c34c38c7cb8ea1bc0f6be1496958c40482e40166084458fc3aee15111f15faa79212ad9081b2a + checksum: 10c0/3fd27c6d569125e08b476d0ded78232c756bffeb79f29cfa548961dfd62fa560f8bf60fdb52d496ba276aea0c843968dd38ed4138a724277715be3b41dac8861 languageName: node linkType: hard @@ -5588,13 +5608,13 @@ __metadata: languageName: node linkType: hard -"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": - version: 1.0.1 - resolution: "call-bind-apply-helpers@npm:1.0.1" +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" dependencies: es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" - checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 languageName: node linkType: hard @@ -5611,12 +5631,12 @@ __metadata: linkType: hard "call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": - version: 1.0.3 - resolution: "call-bound@npm:1.0.3" + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 languageName: node linkType: hard @@ -5666,10 +5686,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001726": - version: 1.0.30001731 - resolution: "caniuse-lite@npm:1.0.30001731" - checksum: 10c0/d8cddf817d5bec8e7c2106affdbf1bfc3923463ca16697c992b2efeb043e6a5d9dcb70cda913bc6acf9112fd66f9e80279316c08e7800359116925066a63fdfa +"caniuse-lite@npm:^1.0.30001733": + version: 1.0.30001734 + resolution: "caniuse-lite@npm:1.0.30001734" + checksum: 10c0/5869cb6a01e7a012a8c5d7b0482e2c910be3a2a469d4ef516a54db3f846fbaedb2600eeaa270dae9e2ad9328e33f39782e6f459405fcca620021f5f06694542d languageName: node linkType: hard @@ -6249,11 +6269,11 @@ __metadata: linkType: hard "core-js-compat@npm:^3.43.0": - version: 3.44.0 - resolution: "core-js-compat@npm:3.44.0" + version: 3.45.0 + resolution: "core-js-compat@npm:3.45.0" dependencies: browserslist: "npm:^4.25.1" - checksum: 10c0/5de4b042b8bb232b8390be3079030de5c7354610f136ed3eb91310a44455a78df02cfcf49b2fd05d5a5aa2695460620abf1b400784715f7482ed4770d40a68b2 + checksum: 10c0/3515955d2c83846f0bf8c4a0f96fc514a6b711e9b3ee19a8df3683a6b0720d762fef60a63bb5c07907f9d18aa00c5904ef690dd4150bc39e2d47e01f05154fda languageName: node linkType: hard @@ -7093,10 +7113,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.173": - version: 1.5.194 - resolution: "electron-to-chromium@npm:1.5.194" - checksum: 10c0/7d72617857055d54552380b34be411933966fa1156dc8653e321d14e82e2af84114bac607e9e2926f885d560b2697a324981e4204d3da4e0f9604d4a468eeba1 +"electron-to-chromium@npm:^1.5.199": + version: 1.5.199 + resolution: "electron-to-chromium@npm:1.5.199" + checksum: 10c0/5586d20455407edc583e33422e370bbdc07913d8f5c73da2ae1c6adcc79c3be7384ecaf893978027cb26a410c1354f199a05edb99b1ab03dd0346e2201525148 languageName: node linkType: hard @@ -7347,7 +7367,7 @@ __metadata: languageName: node linkType: hard -"es-object-atoms@npm:^1.0.0": +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" dependencies: @@ -8426,21 +8446,21 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7": - version: 1.2.7 - resolution: "get-intrinsic@npm:1.2.7" +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" dependencies: - call-bind-apply-helpers: "npm:^1.0.1" + call-bind-apply-helpers: "npm:^1.0.2" es-define-property: "npm:^1.0.1" es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" + es-object-atoms: "npm:^1.1.1" function-bind: "npm:^1.1.2" - get-proto: "npm:^1.0.0" + get-proto: "npm:^1.0.1" gopd: "npm:^1.2.0" has-symbols: "npm:^1.1.0" hasown: "npm:^2.0.2" math-intrinsics: "npm:^1.1.0" - checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d + checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a languageName: node linkType: hard @@ -12118,11 +12138,11 @@ __metadata: linkType: hard "napi-postinstall@npm:^0.3.0": - version: 0.3.2 - resolution: "napi-postinstall@npm:0.3.2" + version: 0.3.3 + resolution: "napi-postinstall@npm:0.3.3" bin: napi-postinstall: lib/cli.js - checksum: 10c0/77c67eb9871d24afe7bad30e6115c441d099d6a0e42dc1c49c4a722ff682425e08dc6dd2b03eca10db9b547e724c38fb51325c35039e7ac10dcb714bb88d7326 + checksum: 10c0/3f3297c002abd1f1c64730c442e9047e4b50335666bd2821e990e0546ab917f9cd000d3837930a81dbe89075495e884ed526918a85667abeef0654f659217cea languageName: node linkType: hard @@ -12154,6 +12174,13 @@ __metadata: languageName: node linkType: hard +"nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::locator=%40semapps%2Ftriplestore-jena%40workspace%3Apackages%2Ftriplestore": + version: 0.1.1-alpha.7 + resolution: "nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node#../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::hash=d24187&locator=%40semapps%2Ftriplestore-jena%40workspace%3Apackages%2Ftriplestore" + checksum: 10c0/64289f03d335271e8d1b412e3082090d2e6818ab81d0285ebc7673f53225c89a8ec43688b7343e35f38c5d008d18a981c17c965147b621ef1c846ba29f8d0e58 + languageName: node + linkType: hard + "node-abi@npm:^3.3.0": version: 3.73.0 resolution: "node-abi@npm:3.73.0" From c4e34aae26d174988061c6b034450d3cdc8a3ccd Mon Sep 17 00:00:00 2001 From: SlyRock Date: Fri, 19 Sep 2025 14:55:43 +0200 Subject: [PATCH 073/165] Remove yarn.lock and package-lock.json files, clean up middleware tests by deleting unused files, and update package.json dependencies for triplestore and tests. Rename triplestore package for consistency. Migrate tests to ts. --- src/middleware/package-lock.json | 24146 ---------------- .../packages/triplestore/package.json | 2 +- src/middleware/tests/package.json | 1 + .../{initialize.js => initialize.ts} | 21 +- ...riplestore.test.js => triplestore.test.ts} | 286 +- src/middleware/yarn.lock | 187 +- yarn.lock | 15 - 7 files changed, 332 insertions(+), 24326 deletions(-) delete mode 100644 src/middleware/package-lock.json rename src/middleware/tests/triplestore/{initialize.js => initialize.ts} (68%) rename src/middleware/tests/triplestore/{triplestore.test.js => triplestore.test.ts} (68%) delete mode 100644 yarn.lock diff --git a/src/middleware/package-lock.json b/src/middleware/package-lock.json deleted file mode 100644 index 002057d6d..000000000 --- a/src/middleware/package-lock.json +++ /dev/null @@ -1,24146 +0,0 @@ -{ - "name": "semapps-middleware", - "version": "0.7.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "semapps-middleware", - "version": "0.7.0", - "hasInstallScript": true, - "license": "Apache-2.0", - "workspaces": [ - "packages/*", - "tests" - ], - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.5.0", - "esbuild": "^0.25.4", - "esbuild-jest": "^0.5.0", - "eslint": "^8.2.0", - "eslint-config-airbnb": "^19.0.4", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^27.9.0", - "eslint-plugin-jsdoc": "^48.2.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^5.1.3", - "lerna": "^8.0.1", - "nx": "17.2.5", - "prettier": "^3.1.1", - "typescript": "^5.3.3" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node": { - "name": "nextgraph", - "version": "0.1.1-alpha.7", - "license": "MIT/Apache-2.0" - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", - "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", - "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helpers": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/parser": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", - "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/traverse": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", - "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/parser": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", - "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/traverse": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", - "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", - "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", - "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/parser": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", - "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", - "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.5", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.5", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@comunica/actor-abstract-mediatyped": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.22.0.tgz", - "integrity": "sha512-+KQLPpx8GFqrhWFfuvrsA4Rjlfbo/QOIo2IvzSgmDwy6YVQZXaSQiNQv/BnrnedaFCf2ONV+w+PMLqXgzn8N9A==", - "license": "MIT", - "peerDependencies": { - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/actor-http-native": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@comunica/actor-http-native/-/actor-http-native-1.22.1.tgz", - "integrity": "sha512-BdB+hvQ9CJF9tI42hNhcvTMagOty+jw21LIQDJWI628xMcXZ88BJaUX0Ulc7g2nrWH97ZRm5+KjLC4Zf+OGwZg==", - "license": "MIT", - "dependencies": { - "@comunica/context-entries": "^1.22.0", - "@types/parse-link-header": "^1.0.0", - "cross-fetch": "^3.0.5", - "follow-redirects": "^1.5.1", - "parse-link-header": "^1.0.1" - }, - "peerDependencies": { - "@comunica/bus-http": "^1.0.0", - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-html": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.22.0.tgz", - "integrity": "sha512-U9pznSpQ1POSH+ekOke3lYKO0fsUbNdv1g1nfuWz/MV3xMCF/d2f3CVBjXRSx9qwyb/2zUrOjBCJRrYkfZ6geQ==", - "license": "MIT", - "dependencies": { - "@comunica/bus-rdf-parse-html": "^1.22.0", - "@rdfjs/types": "*", - "htmlparser2": "^7.0.0" - }, - "peerDependencies": { - "@comunica/bus-rdf-parse": "^1.8.0", - "@comunica/core": "^1.8.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-html-microdata": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.22.0.tgz", - "integrity": "sha512-OdB3Z7ZCtVAcsVU2Vs0ytGbiz0eYkeBwVA3k0vGVhSN3ygng5Thj+t8jxG6QWHlLvaIXfJFh0x57qY5tXkr8uQ==", - "license": "MIT", - "dependencies": { - "microdata-rdf-streaming-parser": "^1.2.0" - }, - "peerDependencies": { - "@comunica/bus-rdf-parse-html": "^1.17.0", - "@comunica/core": "^1.17.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-html-rdfa": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.22.0.tgz", - "integrity": "sha512-yVjYLpm9rbpPiqU1OE4Yioyk/YHtO6ywVMbdOPUNLeOwrtWou8vKX0Xh4UUR24Qrt8nuhE+p0kCJiZZtM1PmSQ==", - "license": "MIT", - "dependencies": { - "rdfa-streaming-parser": "^1.5.0" - }, - "peerDependencies": { - "@comunica/bus-rdf-parse-html": "^1.0.0", - "@comunica/core": "^1.8.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-html-script": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.22.0.tgz", - "integrity": "sha512-gQSY56wkS/uftRyjQf+/dQFRpA/jZ6z2o2RgGbQc2avgKTkhaiTtPxpfO1oarLskm1sPlQOFo24ZwqUSqjOwcA==", - "license": "MIT", - "dependencies": { - "@comunica/bus-rdf-parse-html": "^1.22.0", - "@rdfjs/types": "*", - "relative-to-absolute-iri": "^1.0.5" - }, - "peerDependencies": { - "@comunica/bus-rdf-parse": "^1.4.0", - "@comunica/core": "^1.4.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-html/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@comunica/actor-rdf-parse-html/node_modules/htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "node_modules/@comunica/actor-rdf-parse-jsonld": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.22.1.tgz", - "integrity": "sha512-MFFhJ6eGyO40Be80zsFKAbRjkPXr80PvCqvVKsEstdv3u9C6GFV3nqZpCwvsVCz22IPQhW+rzb8ZyasmgHnurA==", - "license": "MIT", - "dependencies": { - "@comunica/context-entries": "^1.22.0", - "@rdfjs/types": "*", - "jsonld-context-parser": "^2.1.2", - "jsonld-streaming-parser": "^2.4.0", - "stream-to-string": "^1.2.0" - }, - "peerDependencies": { - "@comunica/bus-http": "^1.0.0", - "@comunica/bus-rdf-parse": "^1.0.0", - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-n3": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.22.0.tgz", - "integrity": "sha512-qHrGfh5k/pZa4imy7m9gJ1kt9aW1uxXqLDKnLKvR2l0m09YiEx/YOYWr1Wtu1YtH/Yyc13OX4mo/OwaE5PfrHQ==", - "license": "MIT", - "dependencies": { - "@types/n3": "^1.4.4", - "n3": "^1.6.3" - }, - "peerDependencies": { - "@comunica/bus-rdf-parse": "^1.0.0", - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-rdfxml": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.22.0.tgz", - "integrity": "sha512-k47WEAZ6qKEhf1eBZZeI5aVywlrUUKP3BKHw2zKJUjuWq5k+w/rp2WALCyt0Owtb37UlJbET3fTlUhXKvT+2aw==", - "license": "MIT", - "dependencies": { - "rdfxml-streaming-parser": "^1.5.0" - }, - "peerDependencies": { - "@comunica/bus-rdf-parse": "^1.1.0", - "@comunica/core": "^1.1.0" - } - }, - "node_modules/@comunica/actor-rdf-parse-xml-rdfa": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.22.0.tgz", - "integrity": "sha512-y315YcZTz7AizKf8Jl022IocAJIh3OHSlzNrRNH3zB7i/ch+WHj1VL9pjIf6y77PD4BR75EdeoQCPafpm5Gsbg==", - "license": "MIT", - "dependencies": { - "rdfa-streaming-parser": "^1.5.0" - }, - "peerDependencies": { - "@comunica/bus-rdf-parse": "^1.8.0", - "@comunica/core": "^1.8.0" - } - }, - "node_modules/@comunica/bus-http": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-1.22.1.tgz", - "integrity": "sha512-CZ0NDWZH0k0FOshuRQJzYr3Z+2ZM1vqr9ZepONuaoYDwyKaxl29xPs3hNfjSy6YawjEQP+elr/WDc3TxKIpu8g==", - "license": "MIT", - "dependencies": { - "@comunica/context-entries": "^1.22.0", - "@types/readable-stream": "^2.3.11", - "is-stream": "^2.0.0", - "readable-web-to-node-stream": "^3.0.2", - "web-streams-node": "^0.4.0" - }, - "peerDependencies": { - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/bus-init": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-1.22.0.tgz", - "integrity": "sha512-NIfEJLI8EYFdTWJB0PV/lxPagStPl+gUj3LtOnovcF1ZhC5rgcJSC/tq1r04n0TziY2KVangnLDsF4752LjD6g==", - "license": "MIT", - "peerDependencies": { - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/bus-rdf-parse": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.22.0.tgz", - "integrity": "sha512-ohZGlabX5K+dEmn+v4BzP+IZVyRc1ovWItHDLznnRqsHQr8W19WPG21lEFh5kk2MK4YnyQWmlUax1Yxrg7cbXg==", - "license": "MIT", - "dependencies": { - "@comunica/actor-abstract-mediatyped": "^1.22.0", - "@rdfjs/types": "*" - }, - "peerDependencies": { - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/bus-rdf-parse-html": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.22.0.tgz", - "integrity": "sha512-zqdLdF5qvru1vnzN4t9eXpJhi6khKm1ZWhUovBB9pfYnnyGRCQCPlFpcgJPrD8JfKd6nTvhgdLB5QcAbBb1I0A==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" - }, - "peerDependencies": { - "@comunica/core": "^1.8.0" - } - }, - "node_modules/@comunica/context-entries": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-1.22.0.tgz", - "integrity": "sha512-HOYr1HdhgavxABpw8saZa9pueLAeGVVd/6cZ3FWcYnH3CvfQu6Ima06Gd00QdIAiGjQm01qQcWCxp0xURiqLKg==", - "license": "MIT" - }, - "node_modules/@comunica/core": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/core/-/core-1.22.0.tgz", - "integrity": "sha512-tgozygRFTd6t6l0YyvfVUWNC+KXWiTlBclkxtzFioQsplKvUSvg1TPjopRk8hhAvMaNRGMNBK2ZafNaqNTkI4w==", - "license": "MIT", - "dependencies": { - "@comunica/context-entries": "^1.22.0", - "@comunica/types": "^1.22.0", - "immutable": "^3.8.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/@comunica/mediator-combine-union": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-1.22.0.tgz", - "integrity": "sha512-iUHmEGgWVmk02e80uB7w8xZ5vgTLpiqzrImvbokolJzWcVbobVCUkq8DUxzz3FJbNVRGipZUFrOqkRPAuAX6FA==", - "license": "MIT", - "peerDependencies": { - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/mediator-number": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-1.22.0.tgz", - "integrity": "sha512-KDPlJEvj0Lu+JygGXjnH8pf33k01lJ+wgzUlWK216jZJ1Px2lTlfc/COhSqi/e0y+k4ZSBcxx0gnjt2awMpbrQ==", - "license": "MIT", - "peerDependencies": { - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/mediator-race": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-1.22.0.tgz", - "integrity": "sha512-hIMaHyf9M4jOS0199OURSVgWFmzkyF2K2keuAb+iHoCH3UUcUnWjPOL1TrdkxvaUnrxmsBWR9SXbnqgMnhIsiQ==", - "license": "MIT", - "peerDependencies": { - "@comunica/core": "^1.0.0" - } - }, - "node_modules/@comunica/types": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@comunica/types/-/types-1.22.0.tgz", - "integrity": "sha512-ZQ8p+ZvMAKmdq6Hz2QwqIQ2JScwRMotiWz0iSw2zYHsYQOhVmLg7HSMzMHpWNEA5UWzO/A5A+Co/ONXMhlnx3g==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "asynciterator": "^3.2.0", - "immutable": "^3.8.2", - "sparqlalgebrajs": "^3.0.1" - } - }, - "node_modules/@digitalbazaar/credentials-context": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/credentials-context/-/credentials-context-3.1.0.tgz", - "integrity": "sha512-VKflyFbcid6xH3FJMrd8U9DeCjbYXa2aO3l8yy7MzP6O/0v0EZTV56hMfJT5fN6TSVtQmShv2R3oPCFqFbc2Tg==", - "license": "SEE LICENSE IN LICENSE.md" - }, - "node_modules/@digitalbazaar/data-integrity": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz", - "integrity": "sha512-ohIieLfgtPQU9BYfj0eKNiz55/ZDOk5YSE9FN/Hn0eXzI8WQzLkzRvC8pvBnzuzXDgCsjPdSqYvzok5PoClMBQ==", - "license": "BSD-3-Clause", - "dependencies": { - "base58-universal": "^2.0.0", - "base64url-universal": "^2.0.0", - "jsonld-signatures": "^11.3.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@digitalbazaar/ed25519-multikey": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-multikey/-/ed25519-multikey-1.3.0.tgz", - "integrity": "sha512-wNmgnLv3z5u1Ji/6wlpeunqTr62OF2oCbJflSo8+7sV96SQvZSFU+03+3LOMjCOa6Tg05/K679MwJ0q76QxpOQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@noble/ed25519": "^1.6.0", - "base58-universal": "^2.0.0", - "base64url-universal": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@digitalbazaar/ed25519-signature-2020": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-signature-2020/-/ed25519-signature-2020-5.4.0.tgz", - "integrity": "sha512-dHjOv41wiKLoPaE1S9g4NCMKNnelYtBa5fCJKwrqo+cPlLuKcEhtD7w/uuc5non7bf/GX5sa5YfDI/sRUOS6iw==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/ed25519-multikey": "^1.1.0", - "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", - "base58-universal": "^2.0.0", - "ed25519-signature-2020-context": "^1.1.0", - "jsonld-signatures": "^11.3.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@digitalbazaar/ed25519-verification-key-2020": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.2.0.tgz", - "integrity": "sha512-urEVTYkt+uYD8GjdoS6gkm2sKBich1hqx42b6vvUOmNgF0agZ95JlUjiJXEx+VOwu7WSjJSnEBph2Qatkrk1CA==", - "license": "BSD-3-Clause", - "dependencies": { - "@noble/ed25519": "^1.6.0", - "base58-universal": "^2.0.0", - "base64url-universal": "^2.0.0", - "crypto-ld": "^7.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/-/eddsa-rdfc-2022-cryptosuite-1.2.0.tgz", - "integrity": "sha512-a3PyICe1SI55SgHXgtPRYpzmZ2FMtloQDkVcbhUZ9dpoLcZg5TqsS4U7ap2ggCD4MUXz7uz6ErikJf76Iwyd0g==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/ed25519-multikey": "^1.0.0", - "jsonld": "^8.1.0", - "rdf-canonize": "^4.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/jsonld": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", - "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/jsonld/node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", - "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", - "license": "BSD-3-Clause", - "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/@digitalbazaar/security-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", - "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", - "license": "BSD-3-Clause" - }, - "node_modules/@digitalbazaar/vc": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-7.1.0.tgz", - "integrity": "sha512-KjoMnhuZ/+fC/ZThw+GEnR1oOCz67yIwkbK/wbBdZ8wiAH84awBFzJnLogObDS3cTQ+cIhQOfXv+XLRRgxC5Rw==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/credentials-context": "^3.1.0", - "ed25519-signature-2018-context": "^1.1.0", - "jsonld": "^8.3.1", - "jsonld-signatures": "^11.2.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@digitalbazaar/vc/node_modules/jsonld": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", - "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@digitalbazaar/vc/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@digitalbazaar/vc/node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emnapi/wasi-threads": "1.0.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz", - "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "comment-parser": "1.4.1", - "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~4.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", - "integrity": "sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==", - "license": "MIT", - "dependencies": { - "text-decoding": "^1.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/reporters/node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@jest/reporters/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/transform/node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@jest/transform/node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/transform/node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/transform/node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/transform/node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jest/transform/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@jest/transform/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@jest/transform/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@lerna/create": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.9.tgz", - "integrity": "sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@npmcli/arborist": "7.5.4", - "@npmcli/package-json": "5.2.0", - "@npmcli/run-script": "8.1.0", - "@nx/devkit": ">=17.1.2 < 21", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "aproba": "2.0.0", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.3", - "color-support": "1.1.3", - "columnify": "1.6.0", - "console-control-strings": "^1.1.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "9.0.0", - "dedent": "1.5.3", - "execa": "5.0.0", - "fs-extra": "^11.2.0", - "get-stream": "6.0.0", - "git-url-parse": "14.0.0", - "glob-parent": "6.0.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "ini": "^1.3.8", - "init-package-json": "6.0.3", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "js-yaml": "4.1.0", - "libnpmpublish": "9.0.9", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "11.0.2", - "npm-packlist": "8.0.2", - "npm-registry-fetch": "^17.1.0", - "nx": ">=17.1.2 < 21", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-queue": "6.6.2", - "p-reduce": "^2.1.0", - "pacote": "^18.0.6", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.4", - "set-blocking": "^2.0.0", - "signal-exit": "3.0.7", - "slash": "^3.0.0", - "ssri": "^10.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.2.1", - "temp-dir": "1.0.0", - "upath": "2.0.1", - "uuid": "^10.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "5.0.1", - "wide-align": "1.1.5", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@lerna/create/node_modules/@npmcli/package-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@lerna/create/node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz", - "integrity": "sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/create/node_modules/@nx/nx-linux-x64-musl": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz", - "integrity": "sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/create/node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@lerna/create/node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@lerna/create/node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@lerna/create/node_modules/@zkochan/js-yaml": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@lerna/create/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@lerna/create/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@lerna/create/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@lerna/create/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@lerna/create/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@lerna/create/node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@lerna/create/node_modules/nx": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.3.2.tgz", - "integrity": "sha512-VWUHX0uCn8ACFbpBTpgucDzwe4q/a/UU3AYOhzKCvTzb3kQiyvoxLjORSze93ZNEqgor0PMkCQgcoMBUjxJfzQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.4", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "resolve.exports": "2.0.3", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yaml": "^2.6.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.3.2", - "@nx/nx-darwin-x64": "20.3.2", - "@nx/nx-freebsd-x64": "20.3.2", - "@nx/nx-linux-arm-gnueabihf": "20.3.2", - "@nx/nx-linux-arm64-gnu": "20.3.2", - "@nx/nx-linux-arm64-musl": "20.3.2", - "@nx/nx-linux-x64-gnu": "20.3.2", - "@nx/nx-linux-x64-musl": "20.3.2", - "@nx/nx-win32-arm64-msvc": "20.3.2", - "@nx/nx-win32-x64-msvc": "20.3.2" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@lerna/create/node_modules/nx/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@lerna/create/node_modules/nx/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/nx/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@lerna/create/node_modules/rimraf/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/rimraf/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@lerna/create/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC" - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/@noble/ed25519": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", - "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/arborist": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", - "integrity": "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.1", - "@npmcli/installed-package-contents": "^2.1.0", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.1.1", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.1.0", - "@npmcli/query": "^3.1.0", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "bin-links": "^4.0.4", - "cacache": "^18.0.3", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.2", - "json-parse-even-better-errors": "^3.0.2", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^7.2.1", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-registry-fetch": "^17.0.1", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.0", - "proc-log": "^4.2.0", - "proggy": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.6", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", - "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", - "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", - "dev": true, - "license": "ISC", - "dependencies": { - "cacache": "^18.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", - "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/query": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz", - "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/tao": { - "version": "v17.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "nx": "v17.2.5", - "tslib": "^2.3.0" - }, - "bin": { - "tao": "index.js" - } - }, - "node_modules/@nx/devkit": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.3.2.tgz", - "integrity": "sha512-VhbxEsSTCZlOVgjuQC+6HQmb9Oz9VoHUeo4001Pw6BFBcSXZUi5q37C/lxbAgQPnMKLkFcLva3WKZ+fOLwhGIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - }, - "peerDependencies": { - "nx": ">= 19 <= 21" - } - }, - "node_modules/@nx/devkit/node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz", - "integrity": "sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/devkit/node_modules/@nx/nx-linux-x64-musl": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz", - "integrity": "sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/devkit/node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@nx/devkit/node_modules/@zkochan/js-yaml": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@nx/devkit/node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/@nx/devkit/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@nx/devkit/node_modules/js-yaml/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@nx/devkit/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@nx/devkit/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@nx/devkit/node_modules/nx": { - "version": "20.3.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.4", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "resolve.exports": "2.0.3", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yaml": "^2.6.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.3.2", - "@nx/nx-darwin-x64": "20.3.2", - "@nx/nx-freebsd-x64": "20.3.2", - "@nx/nx-linux-arm-gnueabihf": "20.3.2", - "@nx/nx-linux-arm64-gnu": "20.3.2", - "@nx/nx-linux-arm64-musl": "20.3.2", - "@nx/nx-linux-x64-gnu": "20.3.2", - "@nx/nx-linux-x64-musl": "20.3.2", - "@nx/nx-win32-arm64-msvc": "20.3.2", - "@nx/nx-win32-x64-msvc": "20.3.2" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@nx/devkit/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "v17.2.5", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "v17.2.5", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", - "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^10.0.0" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", - "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/rest": { - "version": "19.0.11", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", - "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.1.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@panva/asn1.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", - "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@rdfjs/data-model": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", - "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": ">=1.0.1" - }, - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, - "node_modules/@rdfjs/types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", - "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@seald-io/binary-search-tree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", - "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" - }, - "node_modules/@seald-io/nedb": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-3.1.0.tgz", - "integrity": "sha512-5G0hCQGJjOelOutvW1l4VD581XMhTPxpj1BUaCWTEM2MPXR9TzIr0MKMnEjnTA5nEKfujPyvVW7iF3etm1/gKQ==", - "license": "MIT", - "dependencies": { - "@seald-io/binary-search-tree": "^1.0.2", - "localforage": "^1.9.0", - "util": "^0.12.4" - } - }, - "node_modules/@semapps/activitypub": { - "resolved": "packages/activitypub", - "link": true - }, - "node_modules/@semapps/auth": { - "resolved": "packages/auth", - "link": true - }, - "node_modules/@semapps/backup": { - "resolved": "packages/backup", - "link": true - }, - "node_modules/@semapps/core": { - "resolved": "packages/core", - "link": true - }, - "node_modules/@semapps/crypto": { - "resolved": "packages/crypto", - "link": true - }, - "node_modules/@semapps/importer": { - "resolved": "packages/importer", - "link": true - }, - "node_modules/@semapps/inference": { - "resolved": "packages/inference", - "link": true - }, - "node_modules/@semapps/jsonld": { - "resolved": "packages/jsonld", - "link": true - }, - "node_modules/@semapps/ldp": { - "resolved": "packages/ldp", - "link": true - }, - "node_modules/@semapps/middlewares": { - "resolved": "packages/middlewares", - "link": true - }, - "node_modules/@semapps/migration": { - "resolved": "packages/migration", - "link": true - }, - "node_modules/@semapps/mime-types": { - "resolved": "packages/mime-types", - "link": true - }, - "node_modules/@semapps/nodeinfo": { - "resolved": "packages/nodeinfo", - "link": true - }, - "node_modules/@semapps/notifications": { - "resolved": "packages/notifications", - "link": true - }, - "node_modules/@semapps/ontologies": { - "resolved": "packages/ontologies", - "link": true - }, - "node_modules/@semapps/solid": { - "resolved": "packages/solid", - "link": true - }, - "node_modules/@semapps/sparql-endpoint": { - "resolved": "packages/sparql-endpoint", - "link": true - }, - "node_modules/@semapps/sync": { - "resolved": "packages/sync", - "link": true - }, - "node_modules/@semapps/triplestore": { - "resolved": "packages/triplestore", - "link": true - }, - "node_modules/@semapps/triplestore-ng": { - "resolved": "packages/triplestore-ng", - "link": true - }, - "node_modules/@semapps/void": { - "resolved": "packages/void", - "link": true - }, - "node_modules/@semapps/webacl": { - "resolved": "packages/webacl", - "link": true - }, - "node_modules/@semapps/webfinger": { - "resolved": "packages/webfinger", - "link": true - }, - "node_modules/@semapps/webhooks": { - "resolved": "packages/webhooks", - "link": true - }, - "node_modules/@semapps/webid": { - "resolved": "packages/webid", - "link": true - }, - "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", - "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-link-header": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", - "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsonld": { - "version": "1.5.15", - "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.15.tgz", - "integrity": "sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/luxon": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", - "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/n3": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.21.1.tgz", - "integrity": "sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "^1.1.0", - "@types/node": "*" - } - }, - "node_modules/@types/n3/node_modules/@rdfjs/types": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", - "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "22.10.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", - "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/parse-link-header": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/parse-link-header/-/parse-link-header-1.0.1.tgz", - "integrity": "sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg==", - "license": "MIT" - }, - "node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/@types/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sparqljs": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", - "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": ">=1.0.0" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/url-join": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.3.tgz", - "integrity": "sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", - "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", - "dev": true, - "license": "ISC" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "license": "ISC" - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/args": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", - "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", - "license": "MIT", - "dependencies": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/args/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/args/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/args/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/args/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/args/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", - "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-array-method-boxes-properly": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "license": "MIT" - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/asynciterator": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.9.0.tgz", - "integrity": "sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "license": "MIT" - }, - "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/babel-jest/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/babel-jest/node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/babel-jest/node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-jest/node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-jest/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/babel-jest/node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/babel-jest/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base58-universal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base58-universal/-/base58-universal-2.0.0.tgz", - "integrity": "sha512-BgkgF8zVLOAygszG4W8NkLm7iXrw80VYAOcedrzANrIhS14+4W6zVqjyGTFUBM/FpqkHUt8aAYd4DbBBfn3zKg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=14" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/base64url-universal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", - "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", - "license": "BSD-3-Clause", - "dependencies": { - "base64url": "^3.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/bcrypt": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", - "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11", - "node-addon-api": "^5.0.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/bin-links": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", - "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", - "dev": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bull": { - "version": "3.29.3", - "resolved": "https://registry.npmjs.org/bull/-/bull-3.29.3.tgz", - "integrity": "sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg==", - "license": "MIT", - "dependencies": { - "cron-parser": "^2.13.0", - "debuglog": "^1.0.0", - "get-port": "^5.1.1", - "ioredis": "^4.27.0", - "lodash": "^4.17.21", - "p-timeout": "^3.2.0", - "promise.prototype.finally": "^3.1.2", - "semver": "^7.3.2", - "util.promisify": "^1.0.1", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/bull/node_modules/cron-parser": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz", - "integrity": "sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==", - "license": "MIT", - "dependencies": { - "is-nan": "^1.3.0", - "moment-timezone": "^0.5.31" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/bull/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", - "dependencies": { - "dicer": "0.3.0" - }, - "engines": { - "node": ">=4.5.0" - } - }, - "node_modules/byte-size": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", - "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001695", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", - "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canonicalize": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", - "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", - "license": "Apache-2.0" - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "license": "ISC", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/cas": { - "version": "0.0.5", - "dependencies": { - "cheerio": "0.19.0" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "license": "Apache-2.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cheerio": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", - "integrity": "sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ==", - "license": "MIT", - "dependencies": { - "css-select": "~1.0.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "~3.8.1", - "lodash": "^3.2.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cheerio/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/cheerio/node_modules/domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/cheerio/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/cheerio/node_modules/domutils/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/cheerio/node_modules/domutils/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/cheerio/node_modules/domutils/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/cheerio/node_modules/htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", - "license": "MIT", - "dependencies": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "node_modules/cheerio/node_modules/htmlparser2/node_modules/entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", - "license": "BSD-like" - }, - "node_modules/cheerio/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/cheerio/node_modules/lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==", - "license": "MIT" - }, - "node_modules/cheerio/node_modules/readable-stream": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz", - "integrity": "sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cmd-shim": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", - "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true, - "license": "ISC" - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "engines": [ - "node >= 6.0" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true, - "license": "MIT" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC" - }, - "node_modules/consolidate": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", - "integrity": "sha512-PZFskfj64QnpKVK9cPdY36pyWEhZNM+srRVqtwMiVTlnViSoZcvX35PpBhhUcyLTHXYvz7pZRmxvsqwzJqg9kA==", - "license": "MIT", - "dependencies": { - "bluebird": "^3.1.1" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", - "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-parser": "^4.0.0", - "dateformat": "^3.0.3", - "get-pkg-repo": "^4.2.1", - "git-raw-commits": "^3.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^5.0.0", - "normalize-package-data": "^3.0.3", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", - "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", - "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "conventional-commits-filter": "^3.0.0", - "dateformat": "^3.0.3", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "meow": "^8.1.2", - "semver": "^7.0.0", - "split": "^1.0.1" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-commits-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", - "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-recommended-bump": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", - "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^3.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "git-raw-commits": "^3.0.0", - "git-semver-tags": "^5.0.0", - "meow": "^8.1.2" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "license": "MIT" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "license": "MIT" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cpu-features": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", - "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/credentials-context": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-1.0.0.tgz", - "integrity": "sha512-rF3GPhTUGY58xlpuVRif/1i0BxVpynpmFdGNS81S2ezdKPSKoFke5ZOZWB8ZUvGi8bV8CuDM+ZcM/uf4z0PQVQ==", - "license": "SEE LICENSE IN LICENSE.md" - }, - "node_modules/cron": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.3.tgz", - "integrity": "sha512-JYR/QZFklJCIPndBLfd/2nU1nSlCMrUdtQ2mGLXSVM/qqqEK7DOrFR0gsEiyeqs0PdWrs0ve1ggH4V7XksDwXg==", - "license": "MIT", - "dependencies": { - "luxon": "^1.23.x" - } - }, - "node_modules/cron-parser": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", - "license": "MIT", - "dependencies": { - "luxon": "^3.2.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/cron/node_modules/luxon": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz", - "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-ld": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-7.0.0.tgz", - "integrity": "sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=14" - } - }, - "node_modules/css-select": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", - "integrity": "sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw==", - "license": "BSD-like", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "1.0", - "domutils": "1.4", - "nth-check": "~1.0.0" - } - }, - "node_modules/css-select/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/css-select/node_modules/domutils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", - "integrity": "sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/css-what": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", - "integrity": "sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw==", - "license": "BSD-like", - "engines": { - "node": "*" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dashify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dashify/-/dashify-2.0.0.tgz", - "integrity": "sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/datauri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz", - "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==", - "license": "MIT", - "dependencies": { - "image-size": "^0.7.3", - "mimer": "^1.0.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT" - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dicer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", - "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", - "dependencies": { - "streamsearch": "0.1.2" - }, - "engines": { - "node": ">=4.5.0" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "license": "MIT" - }, - "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "license": "MIT", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/domutils/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domutils/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/dotenv-flow": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dotenv-flow/-/dotenv-flow-3.3.0.tgz", - "integrity": "sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A==", - "license": "MIT", - "dependencies": { - "dotenv": "^8.6.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/dotenv-flow/node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ed25519-signature-2018-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", - "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", - "license": "BSD-3-Clause" - }, - "node_modules/ed25519-signature-2020-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", - "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", - "license": "BSD-3-Clause" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz", - "integrity": "sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==", - "dev": true, - "license": "ISC" - }, - "node_modules/email-templates": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/email-templates/-/email-templates-2.7.1.tgz", - "integrity": "sha512-WJ0csXaBK3gV90dwBco5d3liu/XSH1jPEn3qfLDES/AsxOoMv4IRqp/MsQduKBexJZ81577OUbrdgnzvK2Kk9Q==", - "license": "MIT", - "dependencies": { - "bluebird": "^3.0.0", - "consolidate": "^0.14.2", - "debug": "^2.2.0", - "glob": "^6.0.0", - "juice": "^4.1.0", - "lodash": "^4.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/email-templates/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/email-templates/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "license": "ISC", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/email-templates/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", - "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "license": "BSD-2-Clause" - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" - } - }, - "node_modules/esbuild-jest": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/esbuild-jest/-/esbuild-jest-0.5.0.tgz", - "integrity": "sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.17", - "@babel/plugin-transform-modules-commonjs": "^7.12.13", - "babel-jest": "^26.6.3" - }, - "peerDependencies": { - "esbuild": ">=0.8.50" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - }, - "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "license": "MIT", - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", - "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3", - "stable-hash": "^0.0.4" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.10.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "48.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz", - "integrity": "sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@es-joy/jsdoccomment": "~0.46.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.5", - "escape-string-regexp": "^4.0.0", - "espree": "^10.1.0", - "esquery": "^1.6.0", - "parse-imports": "^2.1.1", - "semver": "^7.6.3", - "spdx-expression-parse": "^4.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", - "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/expo-server-sdk": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/expo-server-sdk/-/expo-server-sdk-3.13.0.tgz", - "integrity": "sha512-EeGs8PlXmnP2uDpjVhnclQmlua3A0swEj3BzqoRiHfU4WPsN5v3eHhqjjwl+Lf2rleKW2L9lhWp6sCL1vPMnAg==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.0", - "promise-limit": "^2.7.0", - "promise-retry": "^2.0.1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express-session": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", - "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==", - "license": "MIT", - "dependencies": { - "cookie": "0.7.2", - "cookie-signature": "1.0.7", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express-session/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastest-validator": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastest-validator/-/fastest-validator-1.19.0.tgz", - "integrity": "sha512-wUfJBrXmccVz4kARAiWTkuqsC6EFeqbNxwfysCDk+maExBPP8KxyBwaWtayrWjKIaBIbaz+rqI2kel6ecayxcg==", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", - "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "license": "MIT", - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1" - } - }, - "node_modules/front-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/front-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/front-matter/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-pkg-repo/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.9.0.tgz", - "integrity": "sha512-52n24W52sIueosRe0XZ8Ex5Yle+WbhfCKnV/gWXpbVR8FXNTfqdKEKUSypKso66VRHTvvcQxL44UTZbJRlCTnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/git-raw-commits": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", - "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dargs": "^7.0.0", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/git-semver-tags": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", - "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", - "dev": true, - "license": "MIT", - "dependencies": { - "meow": "^8.1.2", - "semver": "^7.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" - } - }, - "node_modules/git-url-parse": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "git-up": "^7.0.0" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "license": "BSD", - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/google-libphonenumber": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.40.tgz", - "integrity": "sha512-bzGxX/vfggcV80LVcibki+JvR91x6zHpBpovDXSfmZUGn6uLzhbYXsWll2a80EG6qTmvf8lt7KZZ/pkMml8ckw==", - "license": "(MIT AND Apache-2.0)", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC" - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-to-text": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-2.1.3.tgz", - "integrity": "sha512-mafVvNjY6lrVrdT73ssJT4fWCtiLR8QVZDPurHbO/yT0KK7mVCpEGi+0g6jzwj4G41o4++9A48cZOSQBwvWd8Q==", - "license": "MIT", - "dependencies": { - "he": "^1.0.0", - "htmlparser": "^1.7.7", - "optimist": "^0.6.1", - "underscore": "^1.8.3", - "underscore.string": "^3.2.3" - }, - "bin": { - "html-to-text": "bin/cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/htmlparser": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/htmlparser/-/htmlparser-1.7.7.tgz", - "integrity": "sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ==", - "engines": { - "node": ">=0.1.33" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-link-header": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", - "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-signature": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", - "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.18.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/http-signature-header": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-signature-header/-/http-signature-header-1.3.1.tgz", - "integrity": "sha512-UpKpxfRlCWRK41j+MfRHHvjDWMLX67gY7pUNGQbXi13fsTZcvUHrgbhbiJtHDvGGxe5nQVYlTW7fKypMSmgXKQ==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/http2-wrapper/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", - "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", - "license": "MIT", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/init-package-json": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", - "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/package-json": "^5.0.0", - "npm-package-arg": "^11.0.0", - "promzard": "^1.0.0", - "read": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ioredis": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz", - "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==", - "license": "MIT", - "dependencies": { - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.1", - "denque": "^1.1.0", - "lodash.defaults": "^4.2.0", - "lodash.flatten": "^4.4.0", - "lodash.isarguments": "^3.1.0", - "p-map": "^2.1.0", - "redis-commands": "1.7.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/ioredis/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", - "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", - "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", - "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "license": "MIT" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-config/node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/jest-config/node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-config/node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-config/node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-config/node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-config/node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-config/node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/jest-config/node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-config/node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-config/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/jest-config/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-config/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/jest-snapshot/node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jose": { - "version": "5.9.6", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", - "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "license": "MIT" - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonld": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-3.3.2.tgz", - "integrity": "sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw==", - "license": "BSD-3-Clause", - "dependencies": { - "canonicalize": "^1.0.1", - "lru-cache": "^5.1.1", - "object.fromentries": "^2.0.2", - "rdf-canonize": "^2.0.1", - "request": "^2.88.0", - "semver": "^6.3.0", - "xmldom": "0.1.19" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonld-context-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", - "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", - "license": "MIT", - "dependencies": { - "@types/http-link-header": "^1.0.1", - "@types/node": "^18.0.0", - "cross-fetch": "^3.0.6", - "http-link-header": "^1.0.2", - "relative-to-absolute-iri": "^1.0.5" - }, - "bin": { - "jsonld-context-parse": "bin/jsonld-context-parse.js" - } - }, - "node_modules/jsonld-context-parser/node_modules/@types/node": { - "version": "18.19.71", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.71.tgz", - "integrity": "sha512-evXpcgtZm8FY4jqBSN8+DmOTcVkkvTmAayeo4Wf3m1xAruyVGzGuDh/Fb/WWX2yLItUiho42ozyJjB0dw//Tkw==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/jsonld-context-parser/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/jsonld-signatures": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", - "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/security-context": "^1.0.0", - "jsonld": "^8.0.0", - "rdf-canonize": "^4.0.1", - "serialize-error": "^8.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsonld-signatures/node_modules/jsonld": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", - "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/jsonld-signatures/node_modules/jsonld/node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsonld-signatures/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonld-streaming-parser": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", - "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@types/http-link-header": "^1.0.1", - "canonicalize": "^1.0.1", - "http-link-header": "^1.0.2", - "jsonld-context-parser": "^2.1.3", - "jsonparse": "^1.3.1", - "rdf-data-factory": "^1.1.0" - } - }, - "node_modules/jsonld-streaming-serializer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.3.0.tgz", - "integrity": "sha512-QGflpxpwmr659ExvAQ5TFAY9BmJQiL/yF/MDRrP5oVWHcBBLhbPjUqDv//y2OvJxUY3UQYMXulTwzmYb1ttv2Q==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "jsonld-context-parser": "^2.0.0" - } - }, - "node_modules/jsonld/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/jsonld/node_modules/rdf-canonize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-2.0.1.tgz", - "integrity": "sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA==", - "license": "BSD-3-Clause", - "dependencies": { - "semver": "^6.3.0", - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonld/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jsonld/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/juice": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/juice/-/juice-4.3.2.tgz", - "integrity": "sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g==", - "license": "MIT", - "dependencies": { - "cheerio": "^0.22.0", - "commander": "^2.15.1", - "cross-spawn": "^5.1.0", - "deep-extend": "^0.5.1", - "mensch": "^0.3.3", - "slick": "^1.12.2", - "web-resource-inliner": "^4.2.1" - }, - "bin": { - "juice": "bin/juice" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/juice/node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", - "license": "MIT", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/juice/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "license": "MIT", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/juice/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "license": "BSD-like", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/juice/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "license": "BSD-2-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/juice/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/juice/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/juice/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/juice/node_modules/domutils/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/juice/node_modules/domutils/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/juice/node_modules/domutils/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/juice/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "license": "MIT", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/juice/node_modules/htmlparser2/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/juice/node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/juice/node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/juice/node_modules/htmlparser2/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/juice/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/juice/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/juice/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "license": "ISC" - }, - "node_modules/just-diff": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", - "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", - "dev": true, - "license": "MIT" - }, - "node_modules/just-diff-apply": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/ky-universal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", - "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } - } - }, - "node_modules/ky-universal/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0", - "peer": true - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/lerna": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.9.tgz", - "integrity": "sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/create": "8.1.9", - "@npmcli/arborist": "7.5.4", - "@npmcli/package-json": "5.2.0", - "@npmcli/run-script": "8.1.0", - "@nx/devkit": ">=17.1.2 < 21", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "aproba": "2.0.0", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.3", - "color-support": "1.1.3", - "columnify": "1.6.0", - "console-control-strings": "^1.1.0", - "conventional-changelog-angular": "7.0.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "9.0.0", - "dedent": "1.5.3", - "envinfo": "7.13.0", - "execa": "5.0.0", - "fs-extra": "^11.2.0", - "get-port": "5.1.1", - "get-stream": "6.0.0", - "git-url-parse": "14.0.0", - "glob-parent": "6.0.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "import-local": "3.1.0", - "ini": "^1.3.8", - "init-package-json": "6.0.3", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "jest-diff": ">=29.4.3 < 30", - "js-yaml": "4.1.0", - "libnpmaccess": "8.0.6", - "libnpmpublish": "9.0.9", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "11.0.2", - "npm-packlist": "8.0.2", - "npm-registry-fetch": "^17.1.0", - "nx": ">=17.1.2 < 21", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-pipe": "3.1.0", - "p-queue": "6.6.2", - "p-reduce": "2.1.0", - "p-waterfall": "2.1.1", - "pacote": "^18.0.6", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.8", - "set-blocking": "^2.0.0", - "signal-exit": "3.0.7", - "slash": "3.0.0", - "ssri": "^10.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.2.1", - "temp-dir": "1.0.0", - "typescript": ">=3 < 6", - "upath": "2.0.1", - "uuid": "^10.0.0", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "5.0.1", - "wide-align": "1.1.5", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "lerna": "dist/cli.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/lerna/node_modules/@npmcli/package-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/lerna/node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz", - "integrity": "sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/lerna/node_modules/@nx/nx-linux-x64-musl": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz", - "integrity": "sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/lerna/node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/lerna/node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/lerna/node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/lerna/node_modules/@zkochan/js-yaml": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/lerna/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/lerna/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/lerna/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/lerna/node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/lerna/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/lerna/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/lerna/node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/lerna/node_modules/nx": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.3.2.tgz", - "integrity": "sha512-VWUHX0uCn8ACFbpBTpgucDzwe4q/a/UU3AYOhzKCvTzb3kQiyvoxLjORSze93ZNEqgor0PMkCQgcoMBUjxJfzQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.4", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "resolve.exports": "2.0.3", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yaml": "^2.6.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.3.2", - "@nx/nx-darwin-x64": "20.3.2", - "@nx/nx-freebsd-x64": "20.3.2", - "@nx/nx-linux-arm-gnueabihf": "20.3.2", - "@nx/nx-linux-arm64-gnu": "20.3.2", - "@nx/nx-linux-arm64-musl": "20.3.2", - "@nx/nx-linux-x64-gnu": "20.3.2", - "@nx/nx-linux-x64-musl": "20.3.2", - "@nx/nx-win32-arm64-msvc": "20.3.2", - "@nx/nx-win32-x64-msvc": "20.3.2" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/lerna/node_modules/nx/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/lerna/node_modules/nx/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/nx/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/lerna/node_modules/rimraf/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/rimraf/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/lerna/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libnpmaccess": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", - "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", - "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", - "dev": true, - "license": "ISC", - "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", - "semver": "^7.3.7", - "sigstore": "^2.2.0", - "ssri": "^10.0.6" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/ci-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", - "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "license": "Apache-2.0", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", - "license": "MIT" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "license": "MIT" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "license": "MIT" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", - "license": "MIT" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "license": "MIT" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", - "license": "MIT" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", - "license": "MIT" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", - "license": "MIT" - }, - "node_modules/lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/long-timeout": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", - "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-streams": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/memory-streams/-/memory-streams-0.1.3.tgz", - "integrity": "sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==", - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.2" - } - }, - "node_modules/memory-streams/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/memory-streams/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/mensch": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", - "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", - "license": "MIT" - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/microdata-rdf-streaming-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.2.0.tgz", - "integrity": "sha512-cMLNLEcS0mPaiA9iwq6BnsQK9sx2uBwjpRZIEvMRBNJpbvV58f8AFtPeYzNFh3OPyX9B49NYJ77bB0jNAUCurw==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "htmlparser2": "^6.0.0", - "rdf-data-factory": "^1.1.0", - "relative-to-absolute-iri": "^1.0.2" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.1.1.tgz", - "integrity": "sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g==", - "license": "MIT", - "bin": { - "mimer": "bin/mimer" - }, - "engines": { - "node": ">= 6.0" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/moleculer": { - "version": "0.14.35", - "resolved": "https://registry.npmjs.org/moleculer/-/moleculer-0.14.35.tgz", - "integrity": "sha512-KB4qs0zNTjE9z7Bl27FFLPaWkAsUFJajF2njozJeor1phFCAYP5S1JsWOSrnUBTtsH7SX4gTw8tGRdcgh1eyVQ==", - "license": "MIT", - "dependencies": { - "args": "^5.0.3", - "eventemitter2": "^6.4.9", - "fastest-validator": "^1.19.0", - "glob": "^7.2.0", - "ipaddr.js": "^2.2.0", - "kleur": "^4.1.5", - "lodash": "^4.17.21", - "lru-cache": "^6.0.0", - "node-fetch": "^2.6.7", - "recursive-watch": "^1.1.4" - }, - "bin": { - "moleculer-runner": "bin/moleculer-runner.js", - "moleculer-runner-esm": "bin/moleculer-runner.mjs" - }, - "engines": { - "node": ">= 10.x.x" - }, - "funding": { - "url": "https://github.com/moleculerjs/moleculer?sponsor=1" - }, - "peerDependencies": { - "amqplib": "^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0", - "avsc": "^5.0.0", - "bunyan": "^1.0.0", - "cbor-x": "^0.8.3 || ^0.9.0 || ^1.2.0", - "dd-trace": "^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0", - "debug": "^4.0.0", - "etcd3": "^1.0.0", - "ioredis": "^4.0.0 || ^5.0.0", - "jaeger-client": "^3.0.0", - "kafka-node": "^5.0.0", - "log4js": "^6.0.0", - "mqtt": "^4.0.0 || ^5.0.0", - "msgpack5": "^5.0.0 || ^6.0.0", - "nats": "^1.0.0 || ^2.0.0", - "node-nats-streaming": "^0.0.51 || ^0.2.0 || ^0.3.0", - "notepack.io": "^2.0.0 || ^3.0.0", - "pino": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "protobufjs": "^6.0.0 || ^7.0.0", - "redlock": "^4.0.0", - "rhea-promise": "^1.0.0 || ^2.0.0", - "thrift": "^0.12.0 || ^0.16.0", - "winston": "^3.0.0" - }, - "peerDependenciesMeta": { - "amqplib": { - "optional": true - }, - "avsc": { - "optional": true - }, - "bunyan": { - "optional": true - }, - "cbor-x": { - "optional": true - }, - "dd-trace": { - "optional": true - }, - "debug": { - "optional": true - }, - "etcd3": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "jaeger-client": { - "optional": true - }, - "kafka-node": { - "optional": true - }, - "log4js": { - "optional": true - }, - "mqtt": { - "optional": true - }, - "msgpack5": { - "optional": true - }, - "nats": { - "optional": true - }, - "node-nats-streaming": { - "optional": true - }, - "notepack.io": { - "optional": true - }, - "pino": { - "optional": true - }, - "protobufjs": { - "optional": true - }, - "redlock": { - "optional": true - }, - "rhea-promise": { - "optional": true - }, - "thrift": { - "optional": true - }, - "winston": { - "optional": true - } - } - }, - "node_modules/moleculer-bull": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/moleculer-bull/-/moleculer-bull-0.2.8.tgz", - "integrity": "sha512-ayVIqVmc6HVD6SL0RLsmMYqDnnPqwrcEWAPpY31kbUIfU3CBH2grGaqA5adyZBNCo4gQz09+4O9m+Hqxls06Ag==", - "license": "MIT", - "dependencies": { - "bull": "^3.15.0", - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 8.x.x" - }, - "peerDependencies": { - "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" - } - }, - "node_modules/moleculer-db": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/moleculer-db/-/moleculer-db-0.8.26.tgz", - "integrity": "sha512-pbUYNqVrev3Y4yUskGSkRMkCwN1vrNKq6bWLFWeKeOanP+X/ZjAPFrY4AMVdqwBCIn2Z8q0w+pHe4C70KuI/uA==", - "license": "MIT", - "dependencies": { - "@seald-io/nedb": "^3.0.0", - "bluebird": "^3.7.2", - "flat": "^5.0.2", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">= 8.x.x" - }, - "peerDependencies": { - "moleculer": "^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0" - } - }, - "node_modules/moleculer-mail": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/moleculer-mail/-/moleculer-mail-1.2.6.tgz", - "integrity": "sha512-i1r1lraG6JTHOeHgUxrP5nQEfvxhldZkYjlcNTgu6blvdv0aWe2GqK6/p+D/dPum4jY6QEKaNB6twI8N+nTAmA==", - "license": "MIT", - "dependencies": { - "bluebird": "^3.7.2", - "email-templates": "^2.7.1", - "lodash": "^4.17.21", - "nodemailer": "^4.6.7", - "nodemailer-html-to-text": "^2.1.0" - }, - "engines": { - "node": ">= 6.x.x" - }, - "peerDependencies": { - "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" - } - }, - "node_modules/moleculer-schedule": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/moleculer-schedule/-/moleculer-schedule-0.2.3.tgz", - "integrity": "sha512-cFHpnHe56y6grSQov9KR1Y8OGmIFImOPelsR2poMdCulgRC49kThKDxBx11ZwASCNx/UtadmaLJ+sX8xRnuGFQ==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "node-schedule": "^2.0.0" - }, - "engines": { - "node": ">= 8.x.x" - }, - "peerDependencies": { - "moleculer": "^0.14.13" - } - }, - "node_modules/moleculer-web": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/moleculer-web/-/moleculer-web-0.10.7.tgz", - "integrity": "sha512-/UJtV+O7iQ3aSg/xi/sw3ZswhvzkigzGPjKOR5R97sm2FSihKuLTftUpXlk4dYls7/8c8WSz6H/M/40BenEx9Q==", - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^1.0.0", - "body-parser": "^1.19.0", - "es6-error": "^4.1.1", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "isstream": "^0.1.2", - "kleur": "^4.1.4", - "lodash": "^4.17.21", - "path-to-regexp": "^3.1.0", - "qs": "^6.11.0", - "serve-static": "^1.14.1" - }, - "engines": { - "node": ">= 10.x.x" - }, - "peerDependencies": { - "moleculer": "^0.13.0 || ^0.14.0" - } - }, - "node_modules/moleculer-web/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/moleculer/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.46", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", - "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", - "license": "MIT", - "dependencies": { - "moment": "^2.29.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, - "node_modules/n3": { - "version": "1.23.1", - "resolved": "https://registry.npmjs.org/n3/-/n3-1.23.1.tgz", - "integrity": "sha512-3f0IYJo+6+lXypothmlwPzm3wJNffsxUwnfONeFv2QqWq7RjTvyCMtkRXDUXW6XrZoOzaQX8xTTSYNlGjXcGtw==", - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "queue-microtask": "^1.1.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/n3/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/n3/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/nan": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", - "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", - "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/nextgraph": { - "resolved": "../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", - "link": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-abi": { - "version": "3.73.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.73.0.tgz", - "integrity": "sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-gyp": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", - "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-schedule": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", - "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", - "license": "MIT", - "dependencies": { - "cron-parser": "^4.2.0", - "long-timeout": "0.1.1", - "sorted-array-functions": "^1.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/nodemailer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", - "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/nodemailer-html-to-text": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz", - "integrity": "sha512-oaNLWoMyeC5Y8DbtYSwBRHTJVdkojKfiP6J4hh8+10Oih0QoAUqEsnM0WbFA13yhbzjyp1yXBNiDl0QV7BpoRA==", - "license": "MIT", - "dependencies": { - "html-to-text": "^2.1.0" - } - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", - "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", - "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", - "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/nx": { - "version": "v17.2.5", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@nrwl/tao": "v17.2.5", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.5.1", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.3.1", - "dotenv-expand": "~10.0.0", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.5.3", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "v17.2.5", - "@nx/nx-darwin-x64": "v17.2.5", - "@nx/nx-freebsd-x64": "v17.2.5", - "@nx/nx-linux-arm-gnueabihf": "v17.2.5", - "@nx/nx-linux-arm64-gnu": "v17.2.5", - "@nx/nx-linux-arm64-musl": "v17.2.5", - "@nx/nx-linux-x64-gnu": "v17.2.5", - "@nx/nx-linux-x64-musl": "v17.2.5", - "@nx/nx-win32-arm64-msvc": "v17.2.5", - "@nx/nx-win32-x64-msvc": "v17.2.5" - }, - "peerDependencies": { - "@swc-node/register": "^1.6.7", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/nx/node_modules/dotenv": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", - "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/nx/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", - "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", - "license": "MIT", - "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "gopd": "^1.0.1", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openid-client": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz", - "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.1.0", - "got": "^11.8.0", - "jose": "^2.0.5", - "lru-cache": "^6.0.0", - "make-error": "^1.3.6", - "object-hash": "^2.0.1", - "oidc-token-hash": "^5.0.1" - }, - "engines": { - "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/openid-client/node_modules/jose": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz", - "integrity": "sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==", - "license": "MIT", - "dependencies": { - "@panva/asn1.js": "^1.0.0" - }, - "engines": { - "node": ">=10.13.0 < 13 || >=13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/openid-client/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", - "license": "MIT/X11", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "node_modules/optimist/node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", - "license": "MIT" - }, - "node_modules/optimist/node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-conflict-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", - "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/parse-imports": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", - "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", - "dev": true, - "license": "Apache-2.0 AND MIT", - "dependencies": { - "es-module-lexer": "^1.5.3", - "slashes": "^3.0.12" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-link-header": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-1.0.1.tgz", - "integrity": "sha512-Z0gpfHmwCIKDr5rRzjypL+p93aHVWO7e+0rFcUl9E3sC67njjs+xHFenuboSXZGlvYtmQqRzRaE3iFpTUnLmFQ==", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.1" - } - }, - "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", - "license": "MIT" - }, - "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-path": "^7.0.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/passport": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", - "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", - "license": "MIT", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/passport-cas2": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/passport-cas2/-/passport-cas2-0.0.12.tgz", - "integrity": "sha512-ck/6x2lb6eYhlC/9lmw7ZTgqzSiJmYB0px7H2B00kpRZlBQuds9yPzFMi7kBWtgFpTDf0o+rwQMUYga8yO/jIg==", - "license": "MIT", - "dependencies": { - "cas": "https://github.com/joshchan/node-cas", - "passport-strategy": "^1.0.0" - } - }, - "node_modules/passport-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", - "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", - "dependencies": { - "passport-strategy": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", - "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/proggy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz", - "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-call-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", - "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", - "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-limit": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", - "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", - "license": "ISC" - }, - "node_modules/promise-polyfill": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", - "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==", - "license": "MIT" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/promise.prototype.finally": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz", - "integrity": "sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/promzard": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", - "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "read": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "license": "ISC" - }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/pug": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", - "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.3", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", - "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rdf-canonize": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", - "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/rdf-data-factory": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz", - "integrity": "sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "^1.0.0" - } - }, - "node_modules/rdf-data-factory/node_modules/@rdfjs/types": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", - "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/rdf-data-model": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rdf-data-model/-/rdf-data-model-1.0.0.tgz", - "integrity": "sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g==", - "license": "MIT", - "bin": { - "rdf-data-model-test": "bin/test.js" - } - }, - "node_modules/rdf-isomorphic": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", - "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "hash.js": "^1.1.7", - "rdf-string": "^1.6.0", - "rdf-terms": "^1.7.0" - } - }, - "node_modules/rdf-parse": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-1.9.1.tgz", - "integrity": "sha512-W6ouYE+ufmCNFmXD1iGs5gUZH75jZekh/I5qF8a4Sl37BUc9mY0Jz5A0CV1tiKKhx+I+HYfxyX9VjOljD8rzgQ==", - "license": "MIT", - "dependencies": { - "@comunica/actor-http-native": "~1.22.0", - "@comunica/actor-rdf-parse-html": "~1.22.0", - "@comunica/actor-rdf-parse-html-microdata": "~1.22.0", - "@comunica/actor-rdf-parse-html-rdfa": "~1.22.0", - "@comunica/actor-rdf-parse-html-script": "~1.22.0", - "@comunica/actor-rdf-parse-jsonld": "^1.22.0", - "@comunica/actor-rdf-parse-n3": "~1.22.0", - "@comunica/actor-rdf-parse-rdfxml": "~1.22.0", - "@comunica/actor-rdf-parse-xml-rdfa": "~1.22.0", - "@comunica/bus-http": "~1.22.0", - "@comunica/bus-init": "~1.22.0", - "@comunica/bus-rdf-parse": "~1.22.0", - "@comunica/bus-rdf-parse-html": "~1.22.0", - "@comunica/core": "~1.22.0", - "@comunica/mediator-combine-union": "~1.22.0", - "@comunica/mediator-number": "~1.22.0", - "@comunica/mediator-race": "~1.22.0", - "@rdfjs/types": "*", - "stream-to-string": "^1.2.0" - } - }, - "node_modules/rdf-string": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", - "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "rdf-data-factory": "^1.1.0" - } - }, - "node_modules/rdf-terms": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", - "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "rdf-data-factory": "^1.1.0", - "rdf-string": "^1.6.0" - } - }, - "node_modules/rdfa-streaming-parser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz", - "integrity": "sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "htmlparser2": "^6.0.0", - "rdf-data-factory": "^1.1.0", - "relative-to-absolute-iri": "^1.0.2" - } - }, - "node_modules/rdfxml-streaming-parser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz", - "integrity": "sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "rdf-data-factory": "^1.1.0", - "relative-to-absolute-iri": "^1.0.0", - "sax": "^1.2.4" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/read": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", - "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-cmd-shim": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readable-stream-node-to-web": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", - "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==", - "license": "MIT" - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "license": "MIT", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/recursive-watch": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/recursive-watch/-/recursive-watch-1.1.4.tgz", - "integrity": "sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ==", - "license": "MIT", - "dependencies": { - "ttl": "^1.3.0" - }, - "bin": { - "recursive-watch": "bin.js" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redis-commands": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", - "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==", - "license": "MIT" - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "license": "MIT", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/relative-to-absolute-iri": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", - "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==", - "license": "MIT" - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "license": "ISC" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/request/node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/rsync": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/rsync/-/rsync-0.6.1.tgz", - "integrity": "sha512-39HcwWuM67CQ9tHloazShXWUOWa2m3SGqX6XQhQMSj0VCQMkSI9PodoxM7/+hKf2p4v2umbhfoarYqd1gwII/w==", - "license": "MIT" - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "license": "ISC", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/sanitize-html": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.14.0.tgz", - "integrity": "sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g==", - "license": "MIT", - "dependencies": { - "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "htmlparser2": "^8.0.0", - "is-plain-object": "^5.0.0", - "parse-srcset": "^1.0.2", - "postcss": "^8.3.11" - } - }, - "node_modules/sanitize-html/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/sanitize-html/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/security-context": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", - "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" - }, - "node_modules/semapps-tests": { - "resolved": "tests", - "link": true - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", - "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sharp": { - "version": "0.31.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", - "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.8", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slashes": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", - "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", - "dev": true, - "license": "ISC" - }, - "node_modules/slick": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", - "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", - "license": "MIT (http://mootools.net/license.txt)", - "engines": { - "node": "*" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/sodium-native": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.4.1.tgz", - "integrity": "sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sorted-array-functions": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", - "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/sparqlalgebrajs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-3.0.3.tgz", - "integrity": "sha512-XFNhsO55bprayrM35h/jY0kzzuGc3oZ1On3kc+s7Un0BFQBXa046aLcMZFp4MYSvn7GtMe9eZ08ONFnBH5kEsQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@types/sparqljs": "^3.1.2", - "fast-deep-equal": "^3.1.3", - "minimist": "^1.2.5", - "rdf-data-factory": "^1.1.0", - "rdf-isomorphic": "^1.3.0", - "rdf-string": "^1.6.0", - "sparqljs": "^3.4.2" - }, - "bin": { - "sparqlalgebrajs": "bin/sparqlalgebrajs.js" - } - }, - "node_modules/sparqljs": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", - "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", - "license": "MIT", - "dependencies": { - "rdf-data-factory": "^1.1.2" - }, - "bin": { - "sparqljs": "bin/sparql-to-json" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/sparqljson-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz", - "integrity": "sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@types/node": "^13.1.0", - "JSONStream": "^1.3.3", - "rdf-data-factory": "^1.1.0" - } - }, - "node_modules/sparqljson-parse/node_modules/@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", - "license": "MIT" - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" - }, - "node_modules/ssh2": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", - "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.10", - "nan": "^2.20.0" - } - }, - "node_modules/ssh2-sftp-client": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ssh2-sftp-client/-/ssh2-sftp-client-7.2.3.tgz", - "integrity": "sha512-Bmq4Uewu3e0XOwu5bnPbiS5KRQYv+dff5H6+85V4GZrPrt0Fkt1nUH+uXanyAkoNxUpzjnAPEEoLdOaBO9c3xw==", - "license": "Apache-2.0", - "dependencies": { - "concat-stream": "^2.0.0", - "promise-retry": "^2.0.1", - "ssh2": "^1.8.0" - }, - "engines": { - "node": ">=10.24.1" - } - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "license": "MIT" - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-to-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", - "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", - "license": "MIT", - "dependencies": { - "promise-polyfill": "^1.1.6" - } - }, - "node_modules/streamify-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", - "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==", - "license": "MIT" - }, - "node_modules/streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "license": "MIT" - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", - "license": "MIT" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "license": "MIT", - "dependencies": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/superagent/node_modules/form-data": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", - "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/superagent/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/superagent/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/superagent/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/superagent/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/superagent/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/supertest": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", - "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", - "license": "MIT", - "dependencies": { - "methods": "^1.1.2", - "superagent": "^3.8.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", - "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-decoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", - "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==", - "license": "MIT" - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-regex-range/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "license": "MIT" - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/treeverse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/ttl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ttl/-/ttl-1.3.1.tgz", - "integrity": "sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA==", - "license": "MIT" - }, - "node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "license": "MIT" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "license": "MIT", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "license": "MIT" - }, - "node_modules/underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "license": "MIT", - "dependencies": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/undici": { - "version": "5.28.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", - "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, - "node_modules/undici/node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "license": "MIT" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/util.promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.3.tgz", - "integrity": "sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "for-each": "^0.3.3", - "get-intrinsic": "^1.2.6", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "object.getownpropertydescriptors": "^2.1.8", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/valid-data-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz", - "integrity": "sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vc-js": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/vc-js/-/vc-js-0.6.4.tgz", - "integrity": "sha512-ogwYys94k8mFyFZEn1Ru3nIA5Z/9C4iCU4grNWUYOYVWldcsn6UDp6erYFbaSkilzv7RK3cQu5N8prkxfHpZwA==", - "license": "BSD-3-Clause", - "dependencies": { - "commander": "^2.20.3", - "credentials-context": "^1.0.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0", - "get-stdin": "^7.0.0", - "jsonld": "^2.0.2", - "jsonld-signatures": "^5.0.0", - "supports-color": "^7.1.0" - }, - "bin": { - "vc-js": "bin/vc-js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vc-js/node_modules/base64url-universal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", - "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", - "license": "BSD-3-Clause", - "dependencies": { - "base64url": "^3.0.0" - }, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/vc-js/node_modules/crypto-ld": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-3.9.0.tgz", - "integrity": "sha512-PFE7V6A2QNnUp6iiPVEZI4p8wsztkEWLbY1BAXVnclm/aw4KGwpJ+1Ds4vQUCJ5BsWxj15fwE5rHQ8AWaWB2nw==", - "license": "BSD-3-Clause", - "dependencies": { - "base64url-universal": "^1.0.1", - "bs58": "^4.0.1", - "node-forge": "~0.10.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8.3.0" - }, - "optionalDependencies": { - "sodium-native": "^3.2.0" - } - }, - "node_modules/vc-js/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/vc-js/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/vc-js/node_modules/jsonld": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-2.0.2.tgz", - "integrity": "sha512-/TQzRe75/3h2khu57IUojha5oat+M82bm8RYw0jLhlmmPrW/kTWAZ9nGzKPfZWnPYnVVJJMQVc/pU8HCmpv9xg==", - "license": "BSD-3-Clause", - "dependencies": { - "canonicalize": "^1.0.1", - "lru-cache": "^5.1.1", - "rdf-canonize": "^1.0.2", - "request": "^2.88.0", - "semver": "^6.3.0", - "xmldom": "0.1.19" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vc-js/node_modules/jsonld-signatures": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-5.2.0.tgz", - "integrity": "sha512-/dGgMElXc3oBS+/OUwMc3DTK4riHKLE9Lk7NF1Upz2ZlBTNfnOw5uLRkFQOJFBDqDEm5hK6hIfkoC/rCWFh9tQ==", - "license": "BSD-3-Clause", - "dependencies": { - "base64url": "^3.0.1", - "crypto-ld": "^3.7.0", - "jsonld": "^2.0.2", - "node-forge": "^0.10.0", - "security-context": "^4.0.0", - "serialize-error": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vc-js/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/vc-js/node_modules/rdf-canonize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-1.2.0.tgz", - "integrity": "sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw==", - "license": "BSD-3-Clause", - "dependencies": { - "node-forge": "^0.10.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vc-js/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/vc-js/node_modules/serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vc-js/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/vc-js/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/vc-js/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "license": "MIT" - }, - "node_modules/verror/node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wait-for-expect": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", - "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==", - "license": "MIT" - }, - "node_modules/walk-up-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", - "dev": true, - "license": "ISC" - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-resource-inliner": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz", - "integrity": "sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA==", - "license": "MIT", - "dependencies": { - "async": "^3.1.0", - "chalk": "^2.4.2", - "datauri": "^2.0.0", - "htmlparser2": "^4.0.0", - "lodash.unescape": "^4.0.1", - "request": "^2.88.0", - "safer-buffer": "^2.1.2", - "valid-data-url": "^2.0.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/web-resource-inliner/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/web-resource-inliner/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/web-resource-inliner/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/web-resource-inliner/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/web-resource-inliner/node_modules/domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.0.1" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/web-resource-inliner/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/web-resource-inliner/node_modules/htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "node_modules/web-resource-inliner/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/web-streams-node": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/web-streams-node/-/web-streams-node-0.4.0.tgz", - "integrity": "sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w==", - "license": "Apache-2.0", - "dependencies": { - "is-stream": "^1.1.0", - "readable-stream-node-to-web": "^1.0.1", - "web-streams-ponyfill": "^1.4.1" - } - }, - "node_modules/web-streams-node/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/web-streams-ponyfill": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", - "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==", - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "license": "MIT", - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=6" - } - }, - "node_modules/xmldom": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", - "integrity": "sha512-pDyxjQSFQgNHkU+yjvoF+GXVGJU7e9EnOg/KcGMDihBIKjTsOeDYaECwC/O9bsUWKY+Sd9izfE43JXC46EOHKA==", - "engines": { - "node": ">=0.1" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/activitypub": { - "name": "@semapps/activitypub", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@semapps/crypto": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "@semapps/triplestore": "1.1.4", - "handlebars": "^4.7.7", - "moleculer": "^0.14.18", - "moleculer-bull": "^0.2.5", - "moleculer-db": "^0.8.16", - "moleculer-web": "^0.10.0-beta1", - "node-fetch": "^2.6.6", - "sparqljs": "^3.5.2", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/auth": { - "name": "@semapps/auth", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/ldp": "1.1.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/triplestore": "1.1.4", - "bcrypt": "^5.0.1", - "express-session": "^1.17.0", - "jsonwebtoken": "^9.0.2", - "moleculer": "^0.14.17", - "moleculer-db": "^0.8.16", - "moleculer-mail": "^1.2.5", - "moleculer-web": "^0.10.0-beta1", - "openid-client": "^4.7.4", - "passport": "^0.4.1", - "passport-cas2": "0.0.12", - "passport-local": "^1.0.0", - "pug": "^3.0.2", - "speakingurl": "^14.0.1", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/backup": { - "name": "@semapps/backup", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "cron": "^1.8.2", - "fs-extra": "^10.0.0", - "moleculer": "^0.14.31", - "rsync": "^0.6.1", - "ssh2-sftp-client": "^7.2.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/backup/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "packages/core": { - "name": "@semapps/core", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/activitypub": "1.1.4", - "@semapps/crypto": "1.1.4", - "@semapps/jsonld": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/ontologies": "1.1.4", - "@semapps/sparql-endpoint": "1.1.4", - "@semapps/triplestore": "1.1.4", - "@semapps/void": "1.1.4", - "@semapps/webacl": "1.1.4", - "@semapps/webfinger": "1.1.4", - "@semapps/webid": "1.1.4", - "moleculer": "^0.14.19", - "moleculer-web": "^0.10.0-beta1", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/crypto": { - "name": "@semapps/crypto", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@digitalbazaar/data-integrity": "^2.5.0", - "@digitalbazaar/ed25519-multikey": "^1.3.0", - "@digitalbazaar/ed25519-signature-2020": "^5.4.0", - "@digitalbazaar/ed25519-verification-key-2020": "^4.2.0", - "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "^1.2.0", - "@digitalbazaar/vc": "^7.1.0", - "@rdfjs/data-model": "^1.3.4", - "@semapps/ldp": "1.1.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "crypto-ld": "^7.0.0", - "http-signature": "^1.3.4", - "http-signature-header": "^1.3.1", - "jose": "^5.2.0", - "jsonld-signatures": "^11.3.2", - "moleculer": "^0.14.18", - "moleculer-web": "^0.10.0-beta1", - "node-fetch": "^2.6.6", - "url-join": "^4.0.1", - "vc-js": "^0.6.4" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "packages/importer": { - "name": "@semapps/importer", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/activitypub": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/mime-types": "1.1.4", - "cron-parser": "^4.2.1", - "google-libphonenumber": "^3.2.26", - "node-fetch": "^2.6.6", - "sanitize-html": "^2.6.1", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/inference": { - "name": "@semapps/inference", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/activitypub": "1.1.4", - "n3": "^1.6.3", - "node-fetch": "^2.6.6", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/jsonld": { - "name": "@semapps/jsonld", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "jsonld": "^3.3.2", - "jsonld-context-parser": "^2.4.0", - "jsonld-streaming-parser": "^2.4.2", - "lru-cache": "^6.0.0", - "streamify-string": "^1.0.1", - "url-join": "^4.0.1" - }, - "devDependencies": { - "@types/jsonld": "1.5.15" - }, - "engines": { - "node": ">=14" - } - }, - "packages/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "packages/ldp": { - "name": "@semapps/ldp", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "@semapps/triplestore": "1.1.4", - "bytes": "^3.1.2", - "cron": "^4.1.4", - "dashify": "^2.0.0", - "http-link-header": "^1.1.1", - "mime-types": "^2.1.35", - "moleculer": "^0.14.17", - "moleculer-db": "^0.8.16", - "moleculer-schedule": "^0.2.3", - "moleculer-web": "^0.10.0-beta1", - "node-fetch": "^2.6.6", - "path-to-regexp": "^6.2.0", - "rdf-parse": "^1.7.0", - "sharp": "^0.31.2", - "sparqljs": "^3.5.2", - "speakingurl": "^14.0.1", - "streamify-string": "^1.0.1", - "url-join": "^4.0.1", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/ldp/node_modules/cron": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.0.tgz", - "integrity": "sha512-ciiYNLfSlF9MrDqnbMdRWFiA6oizSF7kA1osPP9lRzNu0Uu+AWog1UKy7SkckiDY2irrNjeO6qLyKnXC8oxmrw==", - "license": "MIT", - "dependencies": { - "@types/luxon": "~3.6.0", - "luxon": "~3.6.0" - }, - "engines": { - "node": ">=18.x" - } - }, - "packages/ldp/node_modules/luxon": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", - "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "packages/middlewares": { - "name": "@semapps/middlewares", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/mime-types": "1.1.4", - "busboy": "^0.3.1", - "memory-streams": "^0.1.3", - "moleculer": "^0.14.18" - }, - "engines": { - "node": ">=14" - } - }, - "packages/migration": { - "name": "@semapps/migration", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/ldp": "1.1.4", - "@semapps/webacl": "1.1.4" - }, - "engines": { - "node": ">=14" - } - }, - "packages/mime-types": { - "name": "@semapps/mime-types", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "moleculer": "^0.14.18", - "negotiator": "^0.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "packages/nodeinfo": { - "name": "@semapps/nodeinfo", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/notifications": { - "name": "@semapps/notifications", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/ldp": "1.1.4", - "@semapps/triplestore": "1.1.4", - "cron-parser": "^4.3.0", - "expo-server-sdk": "^3.4.0", - "moleculer": "^0.14.18", - "moleculer-db": "^0.8.15", - "moleculer-mail": "^1.2.5", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/ontologies": { - "name": "@semapps/ontologies", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/triplestore": "1.1.4", - "moleculer-db": "^0.8.16", - "node-fetch": "^2.6.6" - }, - "engines": { - "node": ">=14" - } - }, - "packages/solid": { - "name": "@semapps/solid", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@semapps/activitypub": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "@semapps/triplestore": "1.1.4", - "@semapps/webid": "1.1.4", - "http-link-header": "^1.1.1", - "moleculer": "^0.14.19", - "moleculer-bull": "^0.2.5", - "moleculer-db": "^0.8.16", - "moleculer-web": "^0.10.0-beta1", - "moment": "2.30.1", - "node-fetch": "^2.6.6", - "url-join": "^4.0.1", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/sparql-endpoint": { - "name": "@semapps/sparql-endpoint", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/triplestore": "1.1.4", - "moleculer": "^0.14.18", - "moleculer-web": "^0.10.0-beta1", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/sync": { - "name": "@semapps/sync", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/activitypub": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/mime-types": "1.1.4", - "moleculer": "^0.14.17", - "node-fetch": "^2.6.6", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/triplestore": { - "name": "@semapps/triplestore", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "jsonld": "^3.3.2", - "moleculer": "^0.14.29", - "negotiator": "^0.6.2", - "node-fetch": "^2.6.6", - "sparqljs": "^3.5.2", - "sparqljson-parse": "^1.5.1", - "string-template": "^1.0.0", - "url-join": "^4.0.1", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/triplestore-ng": { - "name": "@semapps/triplestore-ng", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "jsonld": "^3.3.2", - "moleculer": "^0.14.29", - "negotiator": "^0.6.2", - "nextgraph": "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", - "node-fetch": "^2.6.6", - "sparqljs": "^3.5.2", - "sparqljson-parse": "^1.5.1", - "string-template": "^1.0.0", - "url-join": "^4.0.1", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/void": { - "name": "@semapps/void", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/ldp": "1.1.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "jsonld-streaming-serializer": "^1.2.0", - "moleculer": "^0.14.17", - "n3": "^1.8.0", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webacl": { - "name": "@semapps/webacl", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/activitypub": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "@semapps/triplestore": "1.1.4", - "jsonld-streaming-serializer": "^1.2.0", - "moleculer": "^0.14.18", - "n3": "^1.8.0", - "rdf-parse": "^1.7.0", - "speakingurl": "^14.0.1", - "streamify-string": "^1.0.1", - "url-join": "^4.0.1" - }, - "devDependencies": { - "@types/url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webfinger": { - "name": "@semapps/webfinger", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/mime-types": "1.1.4", - "node-fetch": "^2.6.6" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webhooks": { - "name": "@semapps/webhooks", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/ldp": "1.0.10", - "@semapps/triplestore": "1.0.10", - "moleculer": "^0.14.18", - "moleculer-db": "^0.8.15", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webhooks/node_modules/@semapps/ldp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@semapps/ldp/-/ldp-1.0.10.tgz", - "integrity": "sha512-3RHJ1/hGUdCH9oNFYVrvCpliqg6uEGmFjHXcnaJwE60oJjMgd5rylsG6zUrZK6ArGwSTiQK9mTQiqMlup/SDEw==", - "license": "Apache-2.0", - "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@semapps/middlewares": "1.0.10", - "@semapps/mime-types": "1.0.10", - "@semapps/ontologies": "1.0.10", - "@semapps/triplestore": "1.0.10", - "dashify": "^2.0.0", - "http-link-header": "^1.1.1", - "mime-types": "^2.1.35", - "moleculer": "^0.14.17", - "moleculer-db": "^0.8.16", - "moleculer-schedule": "^0.2.3", - "moleculer-web": "^0.10.0-beta1", - "node-fetch": "^2.6.6", - "path-to-regexp": "^6.2.0", - "rdf-parse": "^1.7.0", - "sharp": "^0.31.2", - "sparqljs": "^3.5.2", - "speakingurl": "^14.0.1", - "streamify-string": "^1.0.1", - "url-join": "^4.0.1", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webhooks/node_modules/@semapps/middlewares": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@semapps/middlewares/-/middlewares-1.0.10.tgz", - "integrity": "sha512-eyWJr5XLJ93Rw90fjw8WxAOHbrDMyAjjK5HG6zaxeYct7DsVBXB8mgIBmqkl+q/GZddY9j4kNGBjx4sm5JLhuA==", - "license": "Apache-2.0", - "dependencies": { - "@semapps/mime-types": "1.0.10", - "busboy": "^0.3.1", - "memory-streams": "^0.1.3", - "moleculer": "^0.14.18" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webhooks/node_modules/@semapps/mime-types": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@semapps/mime-types/-/mime-types-1.0.10.tgz", - "integrity": "sha512-QfAlYiuYhZktn+AsJvo4U2bgcuVsVm5JQDVSz5E2amVlfrkB0U9clUsSGkktBy0p6kUmkuD8m54uJx9fSnrARg==", - "license": "Apache-2.0", - "dependencies": { - "moleculer": "^0.14.18", - "negotiator": "^0.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webhooks/node_modules/@semapps/ontologies": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@semapps/ontologies/-/ontologies-1.0.10.tgz", - "integrity": "sha512-FBJ+ZT0cxpYrxbO/y4RO+aew4Ljfv8p+AQbCbPeJIDNd9lXiL4IgqEsBHobYuvvs6JiCjIttURzbYOxExZBk6Q==", - "license": "Apache-2.0", - "dependencies": { - "@semapps/triplestore": "1.0.10", - "moleculer-db": "^0.8.16", - "node-fetch": "^2.6.6" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webhooks/node_modules/@semapps/triplestore": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@semapps/triplestore/-/triplestore-1.0.10.tgz", - "integrity": "sha512-mBO2nm8W35M4vNL4jiUWq8VFE1iVIzKVSQdLNq/vPPqFW09aSqz26xe5qiqAi4NzWnQ0Gdjjecnuasi3lW/uGw==", - "license": "Apache-2.0", - "dependencies": { - "@semapps/middlewares": "1.0.10", - "@semapps/mime-types": "1.0.10", - "jsonld": "^3.3.2", - "moleculer": "^0.14.29", - "negotiator": "^0.6.2", - "node-fetch": "^2.6.6", - "sparqljs": "^3.5.2", - "sparqljson-parse": "^1.5.1", - "string-template": "^1.0.0", - "url-join": "^4.0.1", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "packages/webid": { - "name": "@semapps/webid", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@semapps/activitypub": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "tests": { - "name": "semapps-tests", - "version": "1.1.4", - "license": "Apache-2.0", - "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@semapps/activitypub": "1.1.4", - "@semapps/auth": "1.1.4", - "@semapps/core": "1.1.4", - "@semapps/crypto": "1.1.4", - "@semapps/inference": "1.1.4", - "@semapps/jsonld": "1.1.4", - "@semapps/ldp": "1.1.4", - "@semapps/middlewares": "1.1.4", - "@semapps/mime-types": "1.1.4", - "@semapps/ontologies": "1.1.4", - "@semapps/sync": "1.1.4", - "@semapps/triplestore": "1.1.4", - "@semapps/webacl": "1.1.4", - "@semapps/webid": "1.1.4", - "dotenv-flow": "^3.1.0", - "fs-extra": "^9.0.1", - "http-link-header": "^1.1.1", - "ioredis": "^4.27.0", - "lru-cache": "10.1.0", - "moleculer": "^0.14.17", - "moleculer-web": "^0.10.7", - "node-fetch": "^2.6.6", - "rdf-data-model": "^1.0.0", - "supertest": "^4.0.2", - "url-join": "^4.0.1", - "wait-for-expect": "^3.0.2" - }, - "devDependencies": { - "@types/jest": "^29.5.14", - "jest": "^29.7.0" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "tests/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "tests/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - } - } -} diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 38ba9f51b..2a88a8f42 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -1,5 +1,5 @@ { - "name": "@semapps/triplestore-jena", + "name": "@semapps/triplestore", "version": "1.1.4", "description": "Triple store module for SemApps", "license": "Apache-2.0", diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 49212949a..ac0410f16 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -37,6 +37,7 @@ "node-fetch": "^2.6.6", "rdf-data-model": "^1.0.0", "supertest": "^4.0.2", + "ts-node": "^10.9.2", "url-join": "^4.0.1", "wait-for-expect": "^3.0.2" }, diff --git a/src/middleware/tests/triplestore/initialize.js b/src/middleware/tests/triplestore/initialize.ts similarity index 68% rename from src/middleware/tests/triplestore/initialize.js rename to src/middleware/tests/triplestore/initialize.ts index d8241d372..c08be7ac1 100644 --- a/src/middleware/tests/triplestore/initialize.js +++ b/src/middleware/tests/triplestore/initialize.ts @@ -1,15 +1,11 @@ -const { ServiceBroker } = require('moleculer'); -const { TripleStoreService } = require('@semapps/triplestore'); -const { FusekiAdapter, NextGraphAdapter } = require('@semapps/triplestore'); -const CONFIG = require('../config'); -const { clearDataset } = require('../utils'); -const { JsonLdService } = require('@semapps/jsonld'); -const { OntologiesService } = require('@semapps/ontologies'); -const ApiGatewayService = require('moleculer-web'); - -module.exports = async triplestore => { - await clearDataset(CONFIG.SETTINGS_DATASET); +import { ServiceBroker } from 'moleculer'; +import { FusekiAdapter, NextGraphAdapter, TripleStoreService } from '@semapps/triplestore'; +import { JsonLdService } from '@semapps/jsonld'; +import { OntologiesService } from '@semapps/ontologies'; +import ApiGatewayService from 'moleculer-web'; +import * as CONFIG from '../config.ts'; +export default async triplestore => { const broker = new ServiceBroker({ logger: { type: 'Console', @@ -42,7 +38,8 @@ module.exports = async triplestore => { // TODO : Environmentalize the nextgraph settings. adapter = new NextGraphAdapter({ adminUserId: 'XOct97tUc-ccyFUGe5sDUkHyXdTQ7LtGW1RVyYZzIYgA', - mappingsNuri: 'did:ng:o:5ZwPgEib6okmEbVlWRJVfGUNnbdtmQpC_x1uTy9wjcoA:v:asrmmGCr1WTq3oAGkgtVwUxsJgA5MIsV2FIYhDRyPagA', + mappingsNuri: + 'did:ng:o:5ZwPgEib6okmEbVlWRJVfGUNnbdtmQpC_x1uTy9wjcoA:v:asrmmGCr1WTq3oAGkgtVwUxsJgA5MIsV2FIYhDRyPagA', serverPeerId: 'zT_iEzpHeO5znVU9ZYcvenJjb8pWrRWFzEO6eUE_SrAA', adminUserKey: 'dwtQ9wWEovJwv6_3VArHKHRyr_zLAuR2_bFB1LiLfqEA', clientPeerKey: 'ryv9v1Y3jJqdQYH-_rMxGTGyDtC_eOaA0a4ibRLhmX4A', diff --git a/src/middleware/tests/triplestore/triplestore.test.js b/src/middleware/tests/triplestore/triplestore.test.ts similarity index 68% rename from src/middleware/tests/triplestore/triplestore.test.js rename to src/middleware/tests/triplestore/triplestore.test.ts index 0dea9801e..d7b46bca4 100644 --- a/src/middleware/tests/triplestore/triplestore.test.js +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -1,21 +1,21 @@ -const initialize = require('./initialize'); -// const initialize = require('./initialize-old'); +import initialize from './initialize.ts'; +// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(30000); -describe.each([ - 'fuseki', - 'ng', -])('Triplestore service tests with %s', triplestore => { +// @ts-expect-error TS(2304): Cannot find name 'describe'. +describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', triplestore => { let broker; const testDataset = 'test_dataset'; + // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(triplestore); // Ensure the test dataset exists await broker.call('triplestore.dataset.create', { dataset: testDataset }); }); + // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { // Clean up test dataset try { @@ -48,7 +48,9 @@ describe.each([ // Intentionally ignore errors if dataset does not exist } await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); - await expect(broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests })).resolves.toBeTruthy(); + await expect( + broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests }) + ).resolves.toBeTruthy(); }); test('Check dataset existence', async () => { @@ -67,32 +69,38 @@ describe.each([ test('Delete dataset', async () => { await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); - await expect(broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests })).resolves.toBeTruthy(); + await expect( + broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests }) + ).resolves.toBeTruthy(); await broker.call('triplestore.dataset.delete', { dataset: testDatasetForSubServiceTests, iKnowWhatImDoing: true }); - await expect(broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests })).resolves.toBeFalsy(); + await expect( + broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests }) + ).resolves.toBeFalsy(); }); test('Delete dataset without confirmation should fail', async () => { await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); - await expect(broker.call('triplestore.dataset.delete', { - dataset: testDatasetForSubServiceTests, - iKnowWhatImDoing: false - })).rejects.toThrow('Please confirm that you know what you are doing'); + await expect( + broker.call('triplestore.dataset.delete', { + dataset: testDatasetForSubServiceTests, + iKnowWhatImDoing: false + }) + ).rejects.toThrow('Please confirm that you know what you are doing'); }); }); describe('Insert action', () => { test('Insert JSON-LD data', async () => { const jsonLdData = { - "@context": { - "ex": "http://example.org/", - "predicate": "ex:predicate" + '@context': { + ex: 'http://example.org/', + predicate: 'ex:predicate' }, - "@id": "http://example.org/subject", - "predicate": "object" + '@id': 'http://example.org/subject', + predicate: 'object' }; await broker.call('triplestore.insert', { resource: jsonLdData, @@ -110,14 +118,14 @@ describe.each([ test('Insert JSON-LD data with type', async () => { const jsonLdData = { - "@context": { - "ex": "http://example.org/", - "name": "ex:name", - "type": "@type" + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' }, - "@id": "http://example.org/person1", - "type": "http://example.org/Person", - "name": "John Doe" + '@id': 'http://example.org/person1', + type: 'http://example.org/Person', + name: 'John Doe' }; await broker.call('triplestore.insert', { resource: jsonLdData, @@ -133,12 +141,12 @@ describe.each([ if (triplestore === 'fuseki') { test('Insert data with graph name', async () => { const jsonLdData = { - "@context": { - "ex": "http://example.org/", - "predicate": "ex:predicate" + '@context': { + ex: 'http://example.org/', + predicate: 'ex:predicate' }, - "@id": "http://example.org/subject", - "predicate": "object" + '@id': 'http://example.org/subject', + predicate: 'object' }; const graphName = 'http://example.org/graph'; await broker.call('triplestore.insert', { @@ -160,12 +168,12 @@ describe.each([ await broker.call('triplestore.dataset.create', { dataset: secondDataset }); const jsonLdData = { - "@context": { - "ex": "http://example.org/", - "predicate": "ex:predicate" + '@context': { + ex: 'http://example.org/', + predicate: 'ex:predicate' }, - "@id": "http://example.org/subject", - "predicate": "object" + '@id': 'http://example.org/subject', + predicate: 'object' }; await broker.call('triplestore.insert', { resource: jsonLdData, @@ -195,17 +203,19 @@ describe.each([ test('Insert should fail with non-existent dataset', async () => { const jsonLdData = { - "@context": { - "ex": "http://example.org/", - "predicate": "ex:predicate" + '@context': { + ex: 'http://example.org/', + predicate: 'ex:predicate' }, - "@id": "http://example.org/subject", - "predicate": "object" + '@id': 'http://example.org/subject', + predicate: 'object' }; - await expect(broker.call('triplestore.insert', { - resource: jsonLdData, - dataset: 'non_existent_dataset' - })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + await expect( + broker.call('triplestore.insert', { + resource: jsonLdData, + dataset: 'non_existent_dataset' + }) + ).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); }); }); @@ -214,28 +224,28 @@ describe.each([ // Insert test data const jsonLdData = [ { - "@context": { - "ex": "http://example.org/", - "name": "ex:name", - "type": "@type" + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' }, - "@id": "http://example.org/person1", - "type": "http://example.org/Person", - "name": "John Doe" + '@id': 'http://example.org/person1', + type: 'http://example.org/Person', + name: 'John Doe' }, { - "@context": { - "ex": "http://example.org/", - "name": "ex:name", - "type": "@type" + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' }, - "@id": "http://example.org/person2", - "type": "http://example.org/Person", - "name": "Jane Smith" + '@id': 'http://example.org/person2', + type: 'http://example.org/Person', + name: 'Jane Smith' } ]; for (const data of jsonLdData) { - await broker.call('triplestore.insert', { + await broker.call('triplestore.insert', { resource: data, dataset: testDataset }); @@ -272,7 +282,6 @@ describe.each([ expect(result).toBeTruthy(); }); - test('CONSTRUCT query with JSON result', async () => { const result = await broker.call('triplestore.query', { query: 'CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 5', @@ -291,16 +300,18 @@ describe.each([ { termType: 'Variable', value: 'p' }, { termType: 'Variable', value: 'o' } ], - where: [{ - type: 'bgp', - triples: [ - { - subject: { termType: 'Variable', value: 's' }, - predicate: { termType: 'Variable', value: 'p' }, - object: { termType: 'Variable', value: 'o' } - } - ] - }], + where: [ + { + type: 'bgp', + triples: [ + { + subject: { termType: 'Variable', value: 's' }, + predicate: { termType: 'Variable', value: 'p' }, + object: { termType: 'Variable', value: 'o' } + } + ] + } + ], limit: 5 }; const result = await broker.call('triplestore.query', { @@ -311,26 +322,27 @@ describe.each([ }); test('Query should fail with non-existent dataset', async () => { - await expect(broker.call('triplestore.query', { - query: 'SELECT * WHERE { ?s ?p ?o }', - dataset: 'non_existent_dataset' - })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + await expect( + broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: 'non_existent_dataset' + }) + ).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); }); - }); describe('Update action', () => { beforeEach(async () => { // Insert test data const jsonLdData = { - "@context": { - "ex": "http://example.org/", - "name": "ex:name", - "type": "@type" + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' }, - "@id": "http://example.org/person1", - "type": "http://example.org/Person", - "name": "John Doe" + '@id': 'http://example.org/person1', + type: 'http://example.org/Person', + name: 'John Doe' }; await broker.call('triplestore.insert', { resource: jsonLdData, @@ -359,33 +371,47 @@ describe.each([ test('UPDATE query with SPARQL.js object', async () => { const updateObject = { type: 'update', - updates: [{ - type: 'insertdelete', - delete: [{ - type: 'bgp', - triples: [{ - subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, - predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, - object: { termType: 'Variable', value: 'name' } - }] - }], - insert: [{ - type: 'bgp', - triples: [{ - subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, - predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, - object: { termType: 'Literal', value: 'John Updated' } - }] - }], - where: [{ - type: 'bgp', - triples: [{ - subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, - predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, - object: { termType: 'Variable', value: 'name' } - }] - }] - }] + updates: [ + { + type: 'insertdelete', + delete: [ + { + type: 'bgp', + triples: [ + { + subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, + predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, + object: { termType: 'Variable', value: 'name' } + } + ] + } + ], + insert: [ + { + type: 'bgp', + triples: [ + { + subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, + predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, + object: { termType: 'Literal', value: 'John Updated' } + } + ] + } + ], + where: [ + { + type: 'bgp', + triples: [ + { + subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, + predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, + object: { termType: 'Variable', value: 'name' } + } + ] + } + ] + } + ] }; await broker.call('triplestore.update', { query: updateObject, @@ -406,12 +432,12 @@ describe.each([ // Insert the same data into both datasets const initialData = { - "@context": { - "ex": "http://example.org/", - "age": "ex:age" + '@context': { + ex: 'http://example.org/', + age: 'ex:age' }, - "@id": "http://example.org/person1", - "age": "29" + '@id': 'http://example.org/person1', + age: '29' }; await broker.call('triplestore.insert', { resource: initialData, @@ -461,10 +487,12 @@ describe.each([ INSERT { "30" } WHERE { } `; - await expect(broker.call('triplestore.update', { - query: updateQuery, - dataset: 'non_existent_dataset' - })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + await expect( + broker.call('triplestore.update', { + query: updateQuery, + dataset: 'non_existent_dataset' + }) + ).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); }); }); @@ -472,14 +500,14 @@ describe.each([ beforeEach(async () => { // Insert test data const jsonLdData = { - "@context": { - "ex": "http://example.org/", - "name": "ex:name", - "type": "@type" + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' }, - "@id": "http://example.org/person1", - "type": "http://example.org/Person", - "name": "John Doe" + '@id': 'http://example.org/person1', + type: 'http://example.org/Person', + name: 'John Doe' }; await broker.call('triplestore.insert', { resource: jsonLdData, @@ -507,9 +535,11 @@ describe.each([ }); test('DropAll should fail with non-existent dataset', async () => { - await expect(broker.call('triplestore.dropAll', { - dataset: 'non_existent_dataset' - })).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); + await expect( + broker.call('triplestore.dropAll', { + dataset: 'non_existent_dataset' + }) + ).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); }); }); diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index c4c0475ee..e76dfe62c 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -1839,6 +1839,15 @@ __metadata: languageName: node linkType: hard +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 + languageName: node + linkType: hard + "@digitalbazaar/credentials-context@npm:^3.1.0": version: 3.1.0 resolution: "@digitalbazaar/credentials-context@npm:3.1.0" @@ -2437,7 +2446,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.1.0": +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e @@ -2465,6 +2474,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -3658,26 +3677,6 @@ __metadata: languageName: unknown linkType: soft -"@semapps/triplestore-jena@workspace:packages/triplestore": - version: 0.0.0-use.local - resolution: "@semapps/triplestore-jena@workspace:packages/triplestore" - dependencies: - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - jsonld: "npm:^3.3.2" - negotiator: "npm:^0.6.2" - nextgraph: "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - "@semapps/triplestore@npm:1.0.10": version: 1.0.10 resolution: "@semapps/triplestore@npm:1.0.10" @@ -3716,6 +3715,26 @@ __metadata: languageName: node linkType: hard +"@semapps/triplestore@workspace:packages/triplestore": + version: 0.0.0-use.local + resolution: "@semapps/triplestore@workspace:packages/triplestore" + dependencies: + "@semapps/middlewares": "npm:1.1.4" + "@semapps/mime-types": "npm:1.1.4" + jsonld: "npm:^3.3.2" + negotiator: "npm:^0.6.2" + nextgraph: "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node" + node-fetch: "npm:^2.6.6" + sparqljs: "npm:^3.5.2" + sparqljson-parse: "npm:^1.5.1" + string-template: "npm:^1.0.0" + url-join: "npm:^4.0.1" + uuid: "npm:^9.0.1" + peerDependencies: + moleculer: ^0.14.35 + languageName: unknown + linkType: soft + "@semapps/void@npm:1.1.4, @semapps/void@workspace:packages/void": version: 0.0.0-use.local resolution: "@semapps/void@workspace:packages/void" @@ -3898,6 +3917,34 @@ __metadata: languageName: node linkType: hard +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb + languageName: node + linkType: hard + "@tufjs/canonical-json@npm:2.0.0": version: 2.0.0 resolution: "@tufjs/canonical-json@npm:2.0.0" @@ -4667,6 +4714,15 @@ __metadata: languageName: node linkType: hard +"acorn-walk@npm:^8.1.1": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 + languageName: node + linkType: hard + "acorn@npm:^7.1.1": version: 7.4.1 resolution: "acorn@npm:7.4.1" @@ -4676,6 +4732,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.11.0, acorn@npm:^8.4.1": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + "acorn@npm:^8.14.0, acorn@npm:^8.9.0": version: 8.14.0 resolution: "acorn@npm:8.14.0" @@ -4826,6 +4891,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a + languageName: node + linkType: hard + "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -6319,6 +6391,13 @@ __metadata: languageName: node linkType: hard +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 + languageName: node + linkType: hard + "credentials-context@npm:^1.0.0": version: 1.0.0 resolution: "credentials-context@npm:1.0.0" @@ -6796,6 +6875,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -11408,7 +11494,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:^1.3.6": +"make-error@npm:^1.1.1, make-error@npm:^1.3.6": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f @@ -12174,9 +12260,9 @@ __metadata: languageName: node linkType: hard -"nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::locator=%40semapps%2Ftriplestore-jena%40workspace%3Apackages%2Ftriplestore": +"nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::locator=%40semapps%2Ftriplestore%40workspace%3Apackages%2Ftriplestore": version: 0.1.1-alpha.7 - resolution: "nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node#../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::hash=d24187&locator=%40semapps%2Ftriplestore-jena%40workspace%3Apackages%2Ftriplestore" + resolution: "nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node#../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::hash=d24187&locator=%40semapps%2Ftriplestore%40workspace%3Apackages%2Ftriplestore" checksum: 10c0/64289f03d335271e8d1b412e3082090d2e6818ab81d0285ebc7673f53225c89a8ec43688b7343e35f38c5d008d18a981c17c965147b621ef1c846ba29f8d0e58 languageName: node linkType: hard @@ -14690,6 +14776,7 @@ __metadata: node-fetch: "npm:^2.6.6" rdf-data-model: "npm:^1.0.0" supertest: "npm:^4.0.2" + ts-node: "npm:^10.9.2" url-join: "npm:^4.0.1" wait-for-expect: "npm:^3.0.2" languageName: unknown @@ -15825,6 +15912,44 @@ __metadata: languageName: node linkType: hard +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" @@ -16434,6 +16559,13 @@ __metadata: languageName: node linkType: hard +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.3.0 resolution: "v8-to-istanbul@npm:9.3.0" @@ -16930,6 +17062,13 @@ __metadata: languageName: node linkType: hard +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 40c39e401..000000000 --- a/yarn.lock +++ /dev/null @@ -1,15 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/node@^24.2.0": - version "24.2.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.0.tgz#cde712f88c5190006d6b069232582ecd1f94a760" - integrity sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw== - dependencies: - undici-types "~7.10.0" - -undici-types@~7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" - integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== From aa7a7f143caa3836498b380179fd53277c940821 Mon Sep 17 00:00:00 2001 From: SlyRock Date: Fri, 19 Sep 2025 15:24:36 +0200 Subject: [PATCH 074/165] Refactor triplestore actions to remove 'webId' parameter from dropAll, query, and update schemas. Add AdapterInterface import in service.ts for improved type handling. --- .../packages/triplestore/actions/dropAll.ts | 4 ---- .../packages/triplestore/actions/query.ts | 6 ----- .../packages/triplestore/actions/update.ts | 6 +---- .../packages/triplestore/service.ts | 23 +++++++++---------- .../triplestore/subservices/named-graph.ts | 4 ---- 5 files changed, 12 insertions(+), 31 deletions(-) diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index 6f3bf87e9..b46e2e340 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -4,10 +4,6 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - webId: { - type: 'string', - optional: true - }, dataset: { type: 'string', optional: true diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 8d1e0810a..ccad2d6ef 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -9,10 +9,6 @@ const Schema = { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, - webId: { - type: 'string', - optional: true - }, dataset: { type: 'string', optional: true @@ -30,10 +26,8 @@ const Schema = { // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (typeof query === 'object') query = this.generateSparqlQuery(query); - // Use backend implementation return await this.settings.adapter.query(dataset, query); - } } satisfies ActionSchema; diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index 1a12954fc..72b524d57 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -9,10 +9,6 @@ const Schema = { // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, - webId: { - type: 'string', - optional: true - }, dataset: { type: 'string', optional: true @@ -36,7 +32,7 @@ const Schema = { for (dataset of datasets) { // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (datasets.length > 1) this.logger.info(`Updating dataset ${dataset}...`); - + // Use backend abstraction await this.settings.adapter.update(dataset, query); } diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index be2266f38..f9c8cfbc3 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -6,6 +6,7 @@ import query from './actions/query.ts'; import update from './actions/update.ts'; import DatasetService from './subservices/dataset.ts'; import NamedGraphService from './subservices/named-graph.ts'; +import { AdapterInterface } from './adapters/base.ts'; const SparqlGenerator = sparqljsModule.Generator; const { MoleculerError } = Errors; @@ -14,22 +15,22 @@ const TripleStoreService = { name: 'triplestore' as const, settings: { mainDataset: null, - adapter: null as AdapterInterface|null, + adapter: null as AdapterInterface | null, // Sub-services customization dataset: {}, namedGraph: {} }, dependencies: ['jsonld.parser'], - + async created() { const { dataset, namedGraph, adapter } = this.settings; if (!adapter) { throw new Error('Adapter is required'); } - // Initialize the adapter with + // Initialize the adapter with await adapter.init({ broker: this.broker }); - + // Create subservices if (dataset !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message @@ -50,24 +51,22 @@ const TripleStoreService = { }); } }, - + started() { - this.sparqlGenerator = new SparqlGenerator({ - /* prefixes, baseIRI, factory, sparqlStar */ - }); + this.sparqlGenerator = new SparqlGenerator({}); }, - + stopped() { this.settings.adapter.cleanup(); }, - + actions: { insert, update, query, - dropAll, + dropAll }, - + methods: { generateSparqlQuery(query) { try { diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index 21e02b983..830a908a3 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -19,7 +19,6 @@ const NamedGraphService = { await ctx.call('triplestore.update', { query: `INSERT DATA { GRAPH <${uri}> {} }`, - webId: 'system', dataset }); @@ -34,7 +33,6 @@ const NamedGraphService = { return await ctx.call('triplestore.query', { query: `ASK { GRAPH <${uri}> {} }`, - webId: 'system', dataset }); } @@ -54,7 +52,6 @@ const NamedGraphService = { } } `, - webId: 'system', dataset }); } @@ -68,7 +65,6 @@ const NamedGraphService = { // We need to manually drop the graph, otherwise Fuseki will consider it still exists await ctx.call('triplestore.update', { query: `DROP GRAPH <${uri}>`, - webId: 'system', dataset }); } From debe2ae2175feb230d6b325091d6482f6448f054 Mon Sep 17 00:00:00 2001 From: SlyRock Date: Mon, 22 Sep 2025 10:24:13 +0200 Subject: [PATCH 075/165] Refactor triplestore service to replace 'mainDataset' with 'defaultDataset' for consistency across actions and settings. Update related actions to utilize the new default dataset configuration. Add tests for named-graph subservice : Highlights issues with the service itself, that therefore needs fixing --- .../packages/triplestore/actions/dropAll.ts | 2 +- .../packages/triplestore/actions/insert.ts | 6 +- .../packages/triplestore/actions/query.ts | 2 +- .../packages/triplestore/actions/update.ts | 2 +- .../triplestore/adapters/nextgraph.ts | 48 +++---- .../packages/triplestore/service.ts | 9 +- .../triplestore/subservices/dataset.ts | 11 +- .../triplestore/subservices/named-graph.ts | 12 +- .../tests/triplestore/initialize.ts | 5 +- .../tests/triplestore/triplestore.test.ts | 124 ++++++++++++++++-- 10 files changed, 162 insertions(+), 59 deletions(-) diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index b46e2e340..fcd243dc1 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -11,7 +11,7 @@ const Schema = { }, async handler(ctx) { // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; + const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) throw new Error(`The dataset ${dataset} doesn't exist`); diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 45f9f5209..42884cbbc 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -20,7 +20,7 @@ const Schema = { async handler(ctx) { const { resource, graphName } = ctx.params; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; + let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; // Convert JSON-LD to N-Quads const rdf = await ctx.call('jsonld.parser.toRDF', { @@ -38,8 +38,8 @@ const Schema = { const datasets = dataset === '*' ? await ctx.call('triplestore.dataset.list') : [dataset]; for (dataset of datasets) { - //test if graphName exists in the dataset - if (datasets.length > 1) this.logger.info(`Inserting into dataset ${dataset}...`); + //test if graphName exists in the dataset + if (datasets.length > 1) this.logger.info(`Inserting into dataset ${dataset}...`); const query = graphName ? `INSERT DATA { GRAPH <${graphName}> { ${rdf} } }` : `INSERT DATA { ${rdf} }`; await this.settings.adapter.update(dataset, query); diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index ccad2d6ef..eb066d074 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -17,7 +17,7 @@ const Schema = { async handler(ctx) { let { query } = ctx.params; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; + const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; if (!dataset) throw new Error(`No dataset defined for triplestore query: ${query}`); if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index 72b524d57..1f26f524d 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -17,7 +17,7 @@ const Schema = { async handler(ctx) { let { query } = ctx.params; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; + let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; if (!dataset) throw new Error(`No dataset defined for triplestore update: ${query}`); if (dataset !== '*' && !(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index 7e33db9c3..fbff8989a 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -14,16 +14,11 @@ type NextGraphAdapterSettings = { export default class NextGraphAdapter extends BaseAdapter { name = 'nextgraph'; - private settings: NextGraphAdapterSettings; + private settings: { adminUserId: string; mappingsNuri: string }; private adminSessionid: string = ''; - private nextgraphConfig: { server_peer_id: string, admin_user_key: string, client_peer_key: string, server_addr: string } = { - server_peer_id: '', - admin_user_key: '', - client_peer_key: '', - server_addr: '' - }; + private sdkConfig: { server_peer_id: string; admin_user_key: string; client_peer_key: string; server_addr: string }; private sparqlJsonParser: SparqlJsonParser; @@ -36,7 +31,18 @@ export default class NextGraphAdapter extends BaseAdapter { if (!settings.adminUserId) throw new Error('Admin user id is required'); if (!settings.mappingsNuri) throw new Error('Mappings nuri is required'); - this.settings = settings; + // Create the SDK config, used to initialize the adapter and to create datasets (users) + this.sdkConfig = { + server_peer_id: settings.serverPeerId, + admin_user_key: settings.adminUserKey, + client_peer_key: settings.clientPeerKey, + server_addr: settings.serverAddr + }; + + this.settings = { + adminUserId: settings.adminUserId, + mappingsNuri: settings.mappingsNuri + }; this.sparqlJsonParser = new SparqlJsonParser(); } @@ -45,17 +51,9 @@ export default class NextGraphAdapter extends BaseAdapter { // TODO : see if it's an issue (can cause circular dependency or other calamities) this.broker = initSettings.broker; - // Initialize the nextgraph config, used to initialize the nextgraph backend and to create users - this.nextgraphConfig = { - server_peer_id: this.settings.serverPeerId, - admin_user_key: this.settings.adminUserKey, - client_peer_key: this.settings.clientPeerKey, - server_addr: this.settings.serverAddr - }; - try { // Initialize the nextgraph backend in headless mode - await ng.init_headless(this.nextgraphConfig); + await ng.init_headless(this.sdkConfig); // Start a session for the admin user (used to manage datasets) const session = await ng.session_headless_start(this.settings.adminUserId); this.adminSessionid = session.session_id; @@ -87,8 +85,7 @@ export default class NextGraphAdapter extends BaseAdapter { } } catch (error) { throw new Error(`NextGraph query failed: ${error}\nQuery: ${query}\nDataset: ${dataset}`); - } - finally { + } finally { this.closeSession(session); } } @@ -100,8 +97,7 @@ export default class NextGraphAdapter extends BaseAdapter { await ng.sparql_update(session.session_id, query); } catch (error) { throw new Error(`NextGraph update failed: ${error}\nQuery: ${query}\nDataset: ${dataset}`); - } - finally { + } finally { this.closeSession(session); } } @@ -114,15 +110,14 @@ export default class NextGraphAdapter extends BaseAdapter { return await ng.sparql_update(session.session_id, 'DELETE { ?s ?p ?o } WHERE { ?s ?p ?o }'); } catch (error) { throw new Error(`NextGraph dropAll failed: ${error}\nDataset: ${dataset}`); - } - finally { + } finally { this.closeSession(session); } } async createDataset(dataset: string) { try { - const userId = await ng.admin_create_user(this.nextgraphConfig); + const userId = await ng.admin_create_user(this.sdkConfig); // TODO: see about logger this.getLogger().info(`NextGraph user created for dataset ${dataset} with user id : ${userId}`); @@ -143,7 +138,6 @@ export default class NextGraphAdapter extends BaseAdapter { ` ); this.getLogger().info(`Mapping created for dataset ${dataset} with mapping uri : ${mappingUri}`); - } catch (error) { throw new Error(`NextGraph createDataset failed: ${error}\nDataset: ${dataset}`); } @@ -151,7 +145,6 @@ export default class NextGraphAdapter extends BaseAdapter { async datasetExists(dataset: string): Promise { try { - const response = await ng.sparql_query( this.adminSessionid, ` @@ -245,7 +238,6 @@ export default class NextGraphAdapter extends BaseAdapter { throw new Error('Backup not implemented for NextGraph'); } - async openSession(dataset: string) { try { const userId = await this.getUserIdForDataset(dataset); @@ -298,4 +290,4 @@ export default class NextGraphAdapter extends BaseAdapter { } } } -} \ No newline at end of file +} diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index f9c8cfbc3..44486783c 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -14,7 +14,7 @@ const { MoleculerError } = Errors; const TripleStoreService = { name: 'triplestore' as const, settings: { - mainDataset: null, + defaultDataset: null, adapter: null as AdapterInterface | null, // Sub-services customization dataset: {}, @@ -23,7 +23,7 @@ const TripleStoreService = { dependencies: ['jsonld.parser'], async created() { - const { dataset, namedGraph, adapter } = this.settings; + const { dataset, namedGraph, adapter, defaultDataset } = this.settings; if (!adapter) { throw new Error('Adapter is required'); @@ -47,7 +47,10 @@ const TripleStoreService = { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "triplestore.d... Remove this comment to see the full error message this.broker.createService({ mixins: [NamedGraphService], - settings: namedGraph + settings: { + defaultDataset, + ...namedGraph + } }); } }, diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 1545321ca..b20e58209 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -1,11 +1,10 @@ import { ServiceSchema } from 'moleculer'; import { AdapterInterface } from '../adapters/base.ts'; - const DatasetService = { name: 'triplestore.dataset' as const, settings: { - backend: null as AdapterInterface | null + adapter: null as AdapterInterface | null }, async created() { if (!this.settings.adapter) { @@ -17,7 +16,7 @@ const DatasetService = { async handler(ctx) { const { dataset } = ctx.params; if (!dataset) throw new Error('Unable to backup dataset. The parameter dataset is missing'); - + this.logger.info(`Backing up dataset ${dataset}...`); await this.settings.adapter.backupDataset(dataset); this.logger.info(`Dataset ${dataset} backed up`); @@ -28,11 +27,11 @@ const DatasetService = { async handler(ctx) { const { dataset } = ctx.params; if (!dataset) throw new Error('Unable to create dataset. The parameter dataset is missing'); - + const exist = await this.actions.exist({ dataset }, { parentCtx: ctx }); if (!exist) { this.logger.info(`Dataset ${dataset} doesn't exist. Creating it...`); - + if (dataset.endsWith('Acl') || dataset.endsWith('Mirror')) throw new Error(`Error when creating dataset ${dataset}. Its name cannot end with Acl or Mirror`); @@ -71,7 +70,7 @@ const DatasetService = { if (!iKnowWhatImDoing) { throw new Error('Please confirm that you know what you are doing by setting `iKnowWhatImDoing` to `true`.'); } - + if (!dataset) throw new Error('Unable to delete dataset. The parameter dataset is missing'); await this.settings.adapter.deleteDataset(dataset); } diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index 830a908a3..d51322c8f 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -4,14 +4,19 @@ import { ServiceSchema } from 'moleculer'; const NamedGraphService = { name: 'triplestore.named-graph' as const, + settings: { + defaultDataset: null + }, actions: { create: { async handler(ctx) { // TODO Do not allow to pass the named graph URI on creation let { uri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; - if (!uri) uuidv4(); + if (!uri) { + uri = `http://example.org/graph/${uuidv4()}`; + } if (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })) { throw new Error(`Cannot create named graph as it already exists`); @@ -29,7 +34,8 @@ const NamedGraphService = { exist: { async handler(ctx) { const { uri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + if (!uri) throw new Error('Unable to check if named graph exists. The parameter uri is missing'); + const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; return await ctx.call('triplestore.query', { query: `ASK { GRAPH <${uri}> {} }`, diff --git a/src/middleware/tests/triplestore/initialize.ts b/src/middleware/tests/triplestore/initialize.ts index c08be7ac1..c942c6085 100644 --- a/src/middleware/tests/triplestore/initialize.ts +++ b/src/middleware/tests/triplestore/initialize.ts @@ -49,8 +49,7 @@ export default async triplestore => { adapter = new FusekiAdapter({ url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, - password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET + password: CONFIG.JENA_PASSWORD }); } else { throw new Error('Triplestore not supported'); @@ -59,7 +58,7 @@ export default async triplestore => { broker.createService({ mixins: [TripleStoreService], settings: { - mainDataset: CONFIG.MAIN_DATASET, + defaultDataset: CONFIG.MAIN_DATASET, adapter } }); diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index d7b46bca4..0a61e2326 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -4,13 +4,17 @@ import initialize from './initialize.ts'; jest.setTimeout(30000); // @ts-expect-error TS(2304): Cannot find name 'describe'. -describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', triplestore => { - let broker; +describe.each([ + 'fuseki' + // 'ng' +])('Triplestore service tests with %s', (triplestore: any) => { + let broker: any; const testDataset = 'test_dataset'; // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(triplestore); + // Ensure the test dataset exists await broker.call('triplestore.dataset.create', { dataset: testDataset }); }); @@ -18,14 +22,6 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', triplestore // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { // Clean up test dataset - try { - await broker.call('triplestore.dataset.delete', { - dataset: testDataset, - iKnowWhatImDoing: true - }); - } catch (error) { - // Dataset might not exist, ignore error - } if (broker) await broker.stop(); }); @@ -543,6 +539,114 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', triplestore }); }); + describe.only('NamedGraph subservice', () => { + let namedGraphUri: string; + let secondNamedGraphUri: string; + + test('Create a new named graph and verify it exists', async () => { + const localNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + + // Assert the uri is a non empty string + expect(localNamedGraphUri).toBeTruthy(); + expect(localNamedGraphUri).not.toBe(''); + + // Assert the named graph exists + expect( + await broker.call('triplestore.named-graph.exist', { uri: localNamedGraphUri, dataset: testDataset }) + ).toBeTruthy(); + }); + + test('Check named graph existence should return false with non-existent named graph', async () => { + await expect( + broker.call('triplestore.named-graph.exist', { uri: 'http://example.org/graph', dataset: testDataset }) + ).resolves.toBeFalsy(); + }); + + test('Clear named graph should clear the named graph, and only it', async () => { + // Create a new named graph + namedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + // Create a second named graph + secondNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + + // Assert the the named graphs exist + expect( + await broker.call('triplestore.named-graph.exist', { uri: namedGraphUri, dataset: testDataset }) + ).toBeTruthy(); + expect( + await broker.call('triplestore.named-graph.exist', { uri: secondNamedGraphUri, dataset: testDataset }) + ).toBeTruthy(); + + // Insert test data into the first named graph + const jsonLdData = { + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' + }, + '@id': 'http://example.org/person1', + type: 'http://example.org/Person', + name: 'John Doe' + }; + await broker.call('triplestore.insert', { + resource: jsonLdData, + graphName: namedGraphUri, + dataset: testDataset + }); + + // Insert test data into the second named graph + await broker.call('triplestore.insert', { + resource: jsonLdData, + graphName: secondNamedGraphUri, + dataset: testDataset + }); + + // Assert the data is in both named graphs + const resultFirstNamedGraph = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + graphName: namedGraphUri, + dataset: testDataset + }); + expect(resultFirstNamedGraph).toHaveLength(1); + const resultSecondNamedGraph = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + graphName: secondNamedGraphUri, + dataset: testDataset + }); + expect(resultSecondNamedGraph).toHaveLength(1); + + // Clear the named graph + await broker.call('triplestore.named-graph.clear', { uri: namedGraphUri, dataset: testDataset }); + + // Assert the data isn't in the first named graph anymore + const result = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: testDataset, + graphName: namedGraphUri + }); + expect(result).toHaveLength(0); + + // Assert the data is still in the second named graph + const resultSecondNamedGraphAfterClear = await broker.call('triplestore.query', { + query: 'SELECT * WHERE { ?s ?p ?o }', + dataset: testDataset, + graphName: secondNamedGraphUri + }); + expect(resultSecondNamedGraphAfterClear).toHaveLength(1); + }); + + test('Delete named graph', async () => { + await broker.call('triplestore.named-graph.delete', { uri: namedGraphUri, dataset: testDataset }); + // Assert the named graph doesn't exist + expect( + await broker.call('triplestore.named-graph.exist', { uri: namedGraphUri, dataset: testDataset }) + ).toBeFalsy(); + // Assert the second named graph still exists + expect( + await broker.call('triplestore.named-graph.exist', { uri: secondNamedGraphUri, dataset: testDataset }) + ).toBeTruthy(); + }); + }); + describe('Error handling', () => { // TODO: Add error handling tests }); From c70b044315e2fd75e26ef2b6f0802601bba91ced Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 18:54:03 +0200 Subject: [PATCH 076/165] Use correct API for WebAcl actions --- .../packages/webacl/services/group/actions/addMember.ts | 2 +- src/middleware/packages/webacl/services/group/actions/create.ts | 2 +- src/middleware/packages/webacl/services/group/actions/delete.ts | 2 +- .../packages/webacl/services/group/actions/getGroups.ts | 2 +- .../packages/webacl/services/group/actions/getMembers.ts | 2 +- .../packages/webacl/services/group/actions/removeMember.ts | 2 +- .../packages/webacl/services/resource/actions/addRights.ts | 2 +- .../packages/webacl/services/resource/actions/getRights.ts | 2 +- .../packages/webacl/services/resource/actions/hasRights.ts | 2 +- .../packages/webacl/services/resource/actions/setRights.ts | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index b1d3aebc1..f569ea666 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -4,7 +4,7 @@ import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 00d959062..931b118ab 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -6,7 +6,7 @@ import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index d76b1a39d..0598cbc57 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -5,7 +5,7 @@ import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; const { MoleculerError } = Errors; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; await ctx.call('webacl.group.delete', { groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index fca21dacb..fd780d834 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; return await ctx.call('webacl.group.getGroups', {}); }; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index d406434b1..432943ec4 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -4,7 +4,7 @@ import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; return await ctx.call('webacl.group.getMembers', { groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 87d0d97f7..64e5ef7a9 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -4,7 +4,7 @@ import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { if (!ctx.params.deleteUserUri) throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index e0c820a7e..15869a01b 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -13,7 +13,7 @@ import { const { MoleculerError } = Errors; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { const contentType = ctx.meta.headers['content-type']; let { slugParts } = ctx.params; diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 5d5ae400f..155d9d072 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -187,7 +187,7 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an return await formatOutput(ctx, document, resourceAclUri, ctx.meta.$responseType === MIME_TYPES.JSON); } -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { const { accept } = ctx.meta.headers; let { slugParts } = ctx.params; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index dec929e4b..af712734f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -83,7 +83,7 @@ async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, base return resultRights; } -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { let { slugParts } = ctx.params; // This is the root container diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 77983177d..21aa60e82 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -12,7 +12,7 @@ import { const { MoleculerError } = Errors; -export const api = async function api(this: any, ctx: any) { +export const api = async function api(ctx: any) { const contentType = ctx.meta.headers['content-type']; let { slugParts } = ctx.params; From 1c79850cff85a59eaf549703d9b8ff6ae0b4a0cc Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 18:55:57 +0200 Subject: [PATCH 077/165] Call controlled action from ldp.container.get --- src/middleware/packages/ldp/services/container/actions/get.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 31d4ab15b..811f426a6 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -70,13 +70,15 @@ const Schema = { const resourcesUris = resourcesResults?.map((node: any) => node.s1.value); + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); + // Request each resources (in parallel) containerResults['http://www.w3.org/ns/ldp#contains'] = await Promise.all( arrayOf(resourcesUris).flatMap(async resourceUri => { try { // We pass the accept/jsonContext parameters only if they are explicit const resource = await ctx.call( - 'ldp.resource.get', + controlledActions?.get || 'ldp.resource.get', cleanUndefined({ resourceUri, webId, From 625926b107cb68bbd99527a05ffa50af6f391d26 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 18:56:53 +0200 Subject: [PATCH 078/165] Fix types --- src/middleware/packages/core/service.ts | 13 ++++-------- .../packages/core/serviceTypes.d.ts | 20 ++++++++++--------- .../packages/sparql-endpoint/package.json | 3 +++ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index fcc8da1e0..e91e87144 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -10,10 +10,10 @@ import { TripleStoreService } from '@semapps/triplestore'; import { VoidService } from '@semapps/void'; import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; -// @ts-expect-error TS(2305): Module '"@semapps/crypto"' has no exported member ... Remove this comment to see the full error message import { KeysService, SignatureService } from '@semapps/crypto'; import { WebIdService } from '@semapps/webid'; import { ServiceSchema } from 'moleculer'; +import { CoreServiceSettings } from './serviceTypes.js'; const botsContainer = { path: '/as/application', @@ -21,11 +21,6 @@ const botsContainer = { readOnly: true }; -/** - * @typedef {import('./serviceTypes').CoreServiceSettings} CoreServiceSettings - */ - -/** @type {import('moleculer').ServiceSchema} */ const CoreService = { name: 'core' as const, settings: { @@ -124,8 +119,8 @@ const CoreService = { }); } + // @ts-expect-error TS(2322): Type '{ name: "ontologies"; settings: { ontologies... Remove this comment to see the full error message this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "ontologies"; settings: { ontologies... Remove this comment to see the full error message mixins: [OntologiesService], settings: { ontologies @@ -192,8 +187,8 @@ const CoreService = { // We define a constant here, because this.settings.webacl is not available inside the started method const secure = this.settings.triplestore?.secure !== false && this.settings.webacl !== false; + // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { ...triplestore @@ -242,7 +237,7 @@ const CoreService = { }); } } -} satisfies ServiceSchema; +} satisfies ServiceSchema; export default CoreService; diff --git a/src/middleware/packages/core/serviceTypes.d.ts b/src/middleware/packages/core/serviceTypes.d.ts index cf9534b6a..21c9be233 100644 --- a/src/middleware/packages/core/serviceTypes.d.ts +++ b/src/middleware/packages/core/serviceTypes.d.ts @@ -8,20 +8,22 @@ export interface CoreServiceSettings extends ServiceSettingSchema { user?: string; password?: string; mainDataset?: string; + fusekiBase?: string; + secure?: boolean; }; // Optional containers?: string; ontologies?: string; // Services configurations, no typings yet. - activitypub: object; - api: object; - jsonld: object; - ldp: object; - signature: object; - sparqlEndpoint: object; - void: object; - webacl: object; - webfinger: object; + activitypub: object | boolean; + api: object | boolean; + jsonld: object | boolean; + ldp: object | boolean; + signature: object | boolean; + sparqlEndpoint: object | boolean; + void: object | boolean; + webacl: object | boolean; + webfinger: object | boolean; } export interface MethodAuthenticateContext extends Context {} diff --git a/src/middleware/packages/sparql-endpoint/package.json b/src/middleware/packages/sparql-endpoint/package.json index 3260bce7c..9eb33f0b3 100644 --- a/src/middleware/packages/sparql-endpoint/package.json +++ b/src/middleware/packages/sparql-endpoint/package.json @@ -24,5 +24,8 @@ "main": "./index.ts", "peerDependencies": { "moleculer": "^0.14.35" + }, + "devDependencies": { + "@types/node": "^24.5.2" } } From 3129dbbba3fb1cd940c42669f61307bfd6275f2d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 18:57:44 +0200 Subject: [PATCH 079/165] Fix WebAclService routes --- .../packages/webacl/routes/getRoutes.ts | 32 +++++--------- src/middleware/packages/webacl/utils.ts | 42 ++++++++++--------- 2 files changed, 34 insertions(+), 40 deletions(-) diff --git a/src/middleware/packages/webacl/routes/getRoutes.ts b/src/middleware/packages/webacl/routes/getRoutes.ts index e0fbde78f..fbb3916b3 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.ts +++ b/src/middleware/packages/webacl/routes/getRoutes.ts @@ -19,16 +19,10 @@ const getRoutes = (basePath: any, podProvider: any) => { name: 'acl', authorization: false, authentication: true, - bodyParsers: { - json: false, - urlencoded: false, - text: { - type: ['text/turtle', 'application/ld+json'] - } - }, + bodyParsers: false, aliases: { - 'PATCH /:slugParts*': [parseHeader, 'webacl.resource.api_addRights'], - 'PUT /:slugParts*': [parseHeader, 'webacl.resource.api_setRights'], + 'PATCH /:slugParts*': [...middlewares, 'webacl.resource.api_addRights'], + 'PUT /:slugParts*': [...middlewares, 'webacl.resource.api_setRights'], 'GET /:slugParts*': [...middlewares, 'webacl.resource.api_getRights'] }, onError @@ -42,9 +36,7 @@ const getRoutes = (basePath: any, podProvider: any) => { 'GET /:slugParts*': [...middlewares, 'webacl.resource.api_hasRights'], 'POST /:slugParts*': [...middlewares, 'webacl.resource.api_hasRights'] }, - bodyParsers: { - json: false - }, + bodyParsers: false, onError }, { @@ -53,16 +45,14 @@ const getRoutes = (basePath: any, podProvider: any) => { authorization: false, authentication: true, aliases: { - 'POST /': [parseHeader, 'webacl.group.api_create'], - 'GET /:id+': ['webacl.group.api_getMembers'], - 'GET /': ['webacl.group.api_getGroups'], - 'DELETE /:id+': ['webacl.group.api_delete'], - 'PATCH /:id+': ['webacl.group.api_addMember'], - 'PUT /:id+': ['webacl.group.api_removeMember'] - }, - bodyParsers: { - json: true + 'POST /': [...middlewares, 'webacl.group.api_create'], + 'GET /:id+': [...middlewares, 'webacl.group.api_getMembers'], + 'GET /': [...middlewares, 'webacl.group.api_getGroups'], + 'DELETE /:id+': [...middlewares, 'webacl.group.api_delete'], + 'PATCH /:id+': [...middlewares, 'webacl.group.api_addMember'], + 'PUT /:id+': [...middlewares, 'webacl.group.api_removeMember'] }, + bodyParsers: false, onError } ]; diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index 19ab294e9..671b28531 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -4,6 +4,7 @@ import urlJoin from 'url-join'; import { Parser } from 'n3'; import streamifyString from 'streamify-string'; import rdfParser from 'rdf-parse'; +import { throw400 } from '@semapps/middlewares'; const getSlugFromUri = (str: any) => str.match(new RegExp(`.*/(.*)`))[1]; @@ -215,12 +216,12 @@ function filterTriplesForResource(triple: any, resourceAclUri: any, allowDefault return false; } -async function convertBodyToTriples(body: any, contentType: any) { +async function convertBodyToTriples(body: any, contentType: string) { if (contentType === MIME_TYPES.TURTLE) { return new Promise((resolve, reject) => { const parser = new Parser({ format: 'turtle' }); const res: any = []; - parser.parse(body, (error, quad, prefixes) => { + parser.parse(body, (error, quad) => { if (error) reject(error); else if (quad) { const q = filterAndConvertTriple(quad, 'id'); @@ -228,24 +229,27 @@ async function convertBodyToTriples(body: any, contentType: any) { } else resolve(res); }); }); + } else if (contentType === MIME_TYPES.JSON) { + // TODO use jsonld.toQuads actions ? + return new Promise((resolve, reject) => { + const textStream = streamifyString(body); + const res: any = []; + rdfParser + .parse(textStream, { + contentType: 'application/ld+json' + }) + .on('data', (quad: any) => { + const q = filterAndConvertTriple(quad, 'value'); + if (q) res.push(q); + }) + .on('error', (error: any) => reject(error)) + .on('end', () => { + resolve(res); + }); + }); + } else { + throw400(`Unknown content type ${contentType}`); } - // TODO use jsonld.toQuads actions ? - return new Promise((resolve, reject) => { - const textStream = streamifyString(body); - const res: any = []; - rdfParser - .parse(textStream, { - contentType: 'application/ld+json' - }) - .on('data', (quad: any) => { - const q = filterAndConvertTriple(quad, 'value'); - if (q) res.push(q); - }) - .on('error', (error: any) => reject(error)) - .on('end', () => { - resolve(res); - }); - }); } // TODO: if one day you code a delete Profile action (probably in webid service) From f36aed11b925c6e7a8af5ff9081697d293f7dde4 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 18:58:58 +0200 Subject: [PATCH 080/165] Fix ProxyService calls --- src/middleware/packages/crypto/signature/proxy.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 5686a0c04..4517ffba3 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -60,8 +60,7 @@ const ProxyService = { const body = ctx.params.files && ctx.params.files.length > 0 ? await stream2buffer(ctx.params.files[0].readableStream) - : // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. - ctx.meta.rawBody; + : ctx.params.body; try { const response = await this.actions.query( From f8c2f30cdf52ba5944c2cbcf4c7d27adbf827c1d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 18:59:22 +0200 Subject: [PATCH 081/165] Add missing interop predicates --- .../packages/ontologies/ontologies/solid/interop.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/middleware/packages/ontologies/ontologies/solid/interop.json b/src/middleware/packages/ontologies/ontologies/solid/interop.json index 4bce8fd52..5d32e0301 100644 --- a/src/middleware/packages/ontologies/ontologies/solid/interop.json +++ b/src/middleware/packages/ontologies/ontologies/solid/interop.json @@ -119,6 +119,12 @@ }, "interop:replaces": { "@type": "@id" + }, + "interop:delegationAllowed": { + "@type": "xsd:boolean" + }, + "interop:delegationLimit": { + "@type": "xsd:integer" } } } From d90a0df4da8dc670d15b4137f877ee37a6a89238 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 18:59:48 +0200 Subject: [PATCH 082/165] Add missing application/sparql-query content type --- src/middleware/packages/middlewares/index.ts | 31 +++++++++++++++---- .../packages/mime-types/constants.ts | 1 + 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index c13e52123..94125821c 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -6,7 +6,13 @@ import { Errors } from 'moleculer'; const { MoleculerError } = Errors; -const handledMimeTypes = [MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE, MIME_TYPES.SPARQL_UPDATE]; +const handledMimeTypes = [ + MIME_TYPES.JSON, + MIME_TYPES.TURTLE, + MIME_TYPES.TRIPLE, + MIME_TYPES.SPARQL_QUERY, + MIME_TYPES.SPARQL_UPDATE +]; // Put requested URL and query string in meta so that services may use them independently // Set here https://github.com/moleculerjs/moleculer-web/blob/c6ec80056a64ea15c57d6e2b946ce978d673ae92/src/index.js#L151-L161 @@ -49,7 +55,9 @@ const negotiateContentType = (req: any, res: any, next: any) => { const negotiateAccept = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) - throw new Error(`The parseHeader middleware must be added before the negotiateAccept middleware`); + throw new Error( + `The parseHeader middleware must be added before the negotiateAccept middleware (${req.method} ${req.parsedUrl})` + ); if (req.$ctx.meta.headers.accept === '*/*') { delete req.$ctx.meta.headers.accept; @@ -68,7 +76,9 @@ const negotiateAccept = (req: any, res: any, next: any) => { const parseRawBody = (req: any, res: any, next: any) => { if (!req.$ctx.meta.contentTypeNegotiated) - throw new Error(`The negotiateContentType middleware must be added before the parseRawBody middleware`); + throw new Error( + `The negotiateContentType middleware must be added before the parseRawBody middleware (${req.method} ${req.parsedUrl})` + ); // We don't want to parse the raw body for files, otherwise the stream will not be available anymore if (handledMimeTypes.includes(req.$ctx.meta.headers['content-type'])) { @@ -81,6 +91,9 @@ const parseRawBody = (req: any, res: any, next: any) => { req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added next(); }); + req.on('error', (e: Error) => { + console.error(e); + }); } else { req.$ctx.meta.rawBodyParsed = true; // Used to detect if the middleware was added next(); @@ -89,10 +102,14 @@ const parseRawBody = (req: any, res: any, next: any) => { const parseJson = async (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) - throw new Error(`The parseHeader middleware must be added before the parseJson middleware`); + throw new Error( + `The parseHeader middleware must be added before the parseJson middleware (${req.method} ${req.parsedUrl})` + ); if (!req.$ctx.meta.rawBodyParsed) - throw new Error(`The parseRawBody middleware must be added before the parseJson middleware`); + throw new Error( + `The parseRawBody middleware must be added before the parseJson middleware (${req.method} ${req.parsedUrl})` + ); if (req.$ctx.meta.headers['content-type'] === MIME_TYPES.JSON && req.$ctx.meta.rawBody) { try { @@ -108,7 +125,9 @@ const parseJson = async (req: any, res: any, next: any) => { const parseFile = (req: any, res: any, next: any) => { if (!req.$ctx.meta.headers) - throw new Error(`The parseHeader middleware must be added before the parseFile middleware`); + throw new Error( + `The parseHeader middleware must be added before the parseFile middleware (${req.method} ${req.parsedUrl})` + ); const contentType = req.$ctx.meta.headers['content-type']; diff --git a/src/middleware/packages/mime-types/constants.ts b/src/middleware/packages/mime-types/constants.ts index 09d2c3090..92885da7a 100644 --- a/src/middleware/packages/mime-types/constants.ts +++ b/src/middleware/packages/mime-types/constants.ts @@ -2,6 +2,7 @@ const MIME_TYPES = { JSON: 'application/ld+json', TURTLE: 'text/turtle', TRIPLE: 'application/n-triples', + SPARQL_QUERY: 'application/sparql-query', SPARQL_UPDATE: 'application/sparql-update', // Not supported SPARQL_JSON: 'application/sparql-results+json', From 2ce6999dd8208e7b183ea207d0d03c606cf5bb6c Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 23 Sep 2025 19:00:39 +0200 Subject: [PATCH 083/165] WebIdService: add missing resourceUri param to ldp.resource.create --- src/middleware/packages/webhooks/package.json | 4 ++-- src/middleware/packages/webid/service.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/middleware/packages/webhooks/package.json b/src/middleware/packages/webhooks/package.json index 9dcc7dd22..f06a15b46 100644 --- a/src/middleware/packages/webhooks/package.json +++ b/src/middleware/packages/webhooks/package.json @@ -5,8 +5,8 @@ "license": "Apache-2.0", "author": "Virtual Assembly", "dependencies": { - "@semapps/ldp": "1.0.10", - "@semapps/triplestore": "1.0.10", + "@semapps/ldp": "1.1.4", + "@semapps/triplestore": "1.1.4", "moleculer-db": "^0.8.15", "url-join": "^4.0.1" }, diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index b5295fa6e..bcb7e8eaf 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -80,6 +80,7 @@ const WebIdService = { '@id': webId, ...resource }, + resourceUri: webId, webId: 'system' }, { parentCtx: ctx } From dc0819755c31afb8daaffef7db3add1159b50a5a Mon Sep 17 00:00:00 2001 From: SlyRock Date: Wed, 24 Sep 2025 11:04:25 +0200 Subject: [PATCH 084/165] Force explicit creation of named graph via declarative triple insertion --- .../triplestore/subservices/named-graph.ts | 19 ++- .../tests/triplestore/triplestore.test.ts | 111 +++++++++--------- 2 files changed, 72 insertions(+), 58 deletions(-) diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index d51322c8f..ad89bcd22 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -22,8 +22,10 @@ const NamedGraphService = { throw new Error(`Cannot create named graph as it already exists`); } + // Insert a placeholder triple to ensure the named graph persists in Fuseki 5.0 + // This is necessary because Fuseki 5.0 doesn't maintain empty named graphs await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${uri}> {} }`, + query: `INSERT DATA { GRAPH <${uri}> { <${uri}> } }`, dataset }); @@ -47,7 +49,14 @@ const NamedGraphService = { clear: { async handler(ctx) { const { uri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; + + if (!uri) throw new Error('Unable to clear named graph. The parameter uri is missing'); + if (!dataset) throw new Error('Unable to clear named graph. The parameter dataset is missing'); + + if (!(await this.actions.exist({ uri, dataset }, { parentCtx: ctx }))) { + throw new Error(`Cannot clear named graph as it doesn't exist`); + } await ctx.call('triplestore.update', { query: ` @@ -60,6 +69,12 @@ const NamedGraphService = { `, dataset }); + + // Re-insert the placeholder triple + await ctx.call('triplestore.update', { + query: `INSERT DATA { GRAPH <${uri}> { <${uri}> } }`, + dataset + }); } }, diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index 0a61e2326..10ae674f5 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -1,9 +1,8 @@ +// @ts-nocheck import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(30000); -// @ts-expect-error TS(2304): Cannot find name 'describe'. describe.each([ 'fuseki' // 'ng' @@ -11,7 +10,6 @@ describe.each([ let broker: any; const testDataset = 'test_dataset'; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(triplestore); @@ -19,7 +17,6 @@ describe.each([ await broker.call('triplestore.dataset.create', { dataset: testDataset }); }); - // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { // Clean up test dataset if (broker) await broker.stop(); @@ -27,7 +24,7 @@ describe.each([ beforeEach(async () => { // Clear the test dataset before each test - await broker.call('triplestore.dropAll', { dataset: testDataset }); + // await broker.call('triplestore.dropAll', { dataset: testDataset }); }); describe('Dataset subservice', () => { @@ -106,10 +103,11 @@ describe.each([ query: 'SELECT * WHERE { ?s ?p ?o }', dataset: testDataset }); - expect(result).toHaveLength(1); - expect(result[0].s.value).toBe('http://example.org/subject'); - expect(result[0].p.value).toBe('http://example.org/predicate'); - expect(result[0].o.value).toBe('object'); + // includes the data inserted in the previous tests + expect(result).toHaveLength(3); + expect(result[2].s.value).toBe('http://example.org/subject'); + expect(result[2].p.value).toBe('http://example.org/predicate'); + expect(result[2].o.value).toBe('object'); }); test('Insert JSON-LD data with type', async () => { @@ -178,10 +176,12 @@ describe.each([ // Assert in first dataset let result = await broker.call('triplestore.query', { + // modify the query to target the data inserted in this same test query: 'SELECT * WHERE { ?s ?p ?o }', dataset: testDataset }); - expect(result).toHaveLength(1); + // includes the data inserted in the previous tests + expect(result).toHaveLength(3); // Assert in second dataset result = await broker.call('triplestore.query', { @@ -255,7 +255,8 @@ describe.each([ dataset: testDataset }); expect(Array.isArray(result)).toBeTruthy(); - expect(result.length).toBe(4); + // includes the data inserted in the previous tests + expect(result.length).toBe(5); }); test('SELECT query with SPARQL JSON result', async () => { @@ -265,7 +266,8 @@ describe.each([ dataset: testDataset }); expect(Array.isArray(result)).toBeTruthy(); - expect(result.length).toBe(4); + // includes the data inserted in the previous tests + expect(result.length).toBe(5); }); test('ASK query', async () => { @@ -539,9 +541,37 @@ describe.each([ }); }); - describe.only('NamedGraph subservice', () => { + describe('NamedGraph subservice', () => { let namedGraphUri: string; let secondNamedGraphUri: string; + beforeAll(async () => { + namedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + secondNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + + // Insert test data into the first named graph + const jsonLdData = { + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' + }, + '@id': 'http://example.org/person1', + type: 'http://example.org/Person', + name: 'John Doe' + }; + await broker.call('triplestore.insert', { + resource: jsonLdData, + graphName: namedGraphUri, + dataset: testDataset + }); + + // Insert test data into the second named graph + await broker.call('triplestore.insert', { + resource: jsonLdData, + graphName: secondNamedGraphUri, + dataset: testDataset + }); + }); test('Create a new named graph and verify it exists', async () => { const localNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); @@ -563,11 +593,6 @@ describe.each([ }); test('Clear named graph should clear the named graph, and only it', async () => { - // Create a new named graph - namedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); - // Create a second named graph - secondNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); - // Assert the the named graphs exist expect( await broker.call('triplestore.named-graph.exist', { uri: namedGraphUri, dataset: testDataset }) @@ -576,62 +601,36 @@ describe.each([ await broker.call('triplestore.named-graph.exist', { uri: secondNamedGraphUri, dataset: testDataset }) ).toBeTruthy(); - // Insert test data into the first named graph - const jsonLdData = { - '@context': { - ex: 'http://example.org/', - name: 'ex:name', - type: '@type' - }, - '@id': 'http://example.org/person1', - type: 'http://example.org/Person', - name: 'John Doe' - }; - await broker.call('triplestore.insert', { - resource: jsonLdData, - graphName: namedGraphUri, - dataset: testDataset - }); - - // Insert test data into the second named graph - await broker.call('triplestore.insert', { - resource: jsonLdData, - graphName: secondNamedGraphUri, - dataset: testDataset - }); - // Assert the data is in both named graphs const resultFirstNamedGraph = await broker.call('triplestore.query', { - query: 'SELECT * WHERE { ?s ?p ?o }', - graphName: namedGraphUri, + query: `SELECT * FROM <${namedGraphUri}> { ?s ?p ?o }`, + // graphName: namedGraphUri, dataset: testDataset }); - expect(resultFirstNamedGraph).toHaveLength(1); + expect(resultFirstNamedGraph).toHaveLength(3); const resultSecondNamedGraph = await broker.call('triplestore.query', { - query: 'SELECT * WHERE { ?s ?p ?o }', - graphName: secondNamedGraphUri, + query: `SELECT * FROM <${secondNamedGraphUri}> { ?s ?p ?o }`, + // graphName: secondNamedGraphUri, dataset: testDataset }); - expect(resultSecondNamedGraph).toHaveLength(1); + expect(resultSecondNamedGraph).toHaveLength(3); // Clear the named graph await broker.call('triplestore.named-graph.clear', { uri: namedGraphUri, dataset: testDataset }); // Assert the data isn't in the first named graph anymore const result = await broker.call('triplestore.query', { - query: 'SELECT * WHERE { ?s ?p ?o }', - dataset: testDataset, - graphName: namedGraphUri + query: `SELECT * FROM <${namedGraphUri}> WHERE { ?s ?p ?o }`, + dataset: testDataset }); - expect(result).toHaveLength(0); + expect(result).toHaveLength(1); // the placeholder triple // Assert the data is still in the second named graph const resultSecondNamedGraphAfterClear = await broker.call('triplestore.query', { - query: 'SELECT * WHERE { ?s ?p ?o }', - dataset: testDataset, - graphName: secondNamedGraphUri + query: `SELECT * FROM <${secondNamedGraphUri}> WHERE { ?s ?p ?o }`, + dataset: testDataset }); - expect(resultSecondNamedGraphAfterClear).toHaveLength(1); + expect(resultSecondNamedGraphAfterClear).toHaveLength(3); }); test('Delete named graph', async () => { From 62ed0eb49a3448ebcc597530bd9933c1e1407df9 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 24 Sep 2025 16:15:33 +0200 Subject: [PATCH 085/165] Switch back to Yarn classic --- .yarnrc | 5 + src/middleware/.yarnrc.yml | 2 + src/middleware/package.json | 4 +- src/middleware/yarn.lock | 28689 ++++++++++++++-------------------- 4 files changed, 11787 insertions(+), 16913 deletions(-) create mode 100644 .yarnrc diff --git a/.yarnrc b/.yarnrc new file mode 100644 index 000000000..85b738b8d --- /dev/null +++ b/.yarnrc @@ -0,0 +1,5 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +yarn-path ".yarn/releases/yarn-1.22.22.cjs" diff --git a/src/middleware/.yarnrc.yml b/src/middleware/.yarnrc.yml index 3186f3f07..1f5092607 100644 --- a/src/middleware/.yarnrc.yml +++ b/src/middleware/.yarnrc.yml @@ -1 +1,3 @@ nodeLinker: node-modules + +yarnPath: .yarn/releases/yarn-classic.cjs diff --git a/src/middleware/package.json b/src/middleware/package.json index cab309537..47c334d44 100644 --- a/src/middleware/package.json +++ b/src/middleware/package.json @@ -43,8 +43,8 @@ "tests" ], "engines": { - "node": ">=22.12.0" + "node": ">=22" }, "version": "0.7.0", - "packageManager": "yarn@4.9.2" + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 68a53bc28..8be61db9c 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -1,16911 +1,11778 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/code-frame@npm:7.27.1" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.27.1" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.1.1" - checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/compat-data@npm:7.26.5" - checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/compat-data@npm:7.27.2" - checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/compat-data@npm:7.28.0" - checksum: 10c0/c4e527302bcd61052423f757355a71c3bc62362bac13f7f130de16e439716f66091ff5bdecda418e8fa0271d4c725f860f0ee23ab7bf6e769f7a8bb16dfcb531 - languageName: node - linkType: hard - -"@babel/core@npm:^7.23.9": - version: 7.26.0 - resolution: "@babel/core@npm:7.26.0" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.26.0" - "@babel/generator": "npm:^7.26.0" - "@babel/helper-compilation-targets": "npm:^7.25.9" - "@babel/helper-module-transforms": "npm:^7.26.0" - "@babel/helpers": "npm:^7.26.0" - "@babel/parser": "npm:^7.26.0" - "@babel/template": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e - languageName: node - linkType: hard - -"@babel/core@npm:^7.27.4, @babel/core@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/core@npm:7.28.0" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-module-transforms": "npm:^7.27.3" - "@babel/helpers": "npm:^7.27.6" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/traverse": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/423302e7c721e73b1c096217880272e02020dfb697a55ccca60ad01bba90037015f84d0c20c6ce297cf33a19bb704bc5c2b3d3095f5284dfa592bd1de0b9e8c3 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/generator@npm:7.26.5" - dependencies: - "@babel/parser": "npm:^7.26.5" - "@babel/types": "npm:^7.26.5" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/generator@npm:7.27.1" - dependencies: - "@babel/parser": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/generator@npm:7.28.0" - dependencies: - "@babel/parser": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10c0/1b3d122268ea3df50fde707ad864d9a55c72621357d5cebb972db3dd76859c45810c56e16ad23123f18f80cc2692f5a015d2858361300f0f224a05dc43d36a92 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" - dependencies: - "@babel/types": "npm:^7.27.3" - checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.25.9": - version: 7.26.5 - resolution: "@babel/helper-compilation-targets@npm:7.26.5" - dependencies: - "@babel/compat-data": "npm:^7.26.5" - "@babel/helper-validator-option": "npm:^7.25.9" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/helper-compilation-targets@npm:7.27.2" - dependencies: - "@babel/compat-data": "npm:^7.27.2" - "@babel/helper-validator-option": "npm:^7.27.1" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-member-expression-to-functions": "npm:^7.27.1" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/4ee199671d6b9bdd4988aa2eea4bdced9a73abfc831d81b00c7634f49a8fc271b3ceda01c067af58018eb720c6151322015d463abea7072a368ee13f35adbb4c - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - regexpu-core: "npm:^6.2.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/591fe8bd3bb39679cc49588889b83bd628d8c4b99c55bafa81e80b1e605a348b64da955e3fd891c4ba3f36fd015367ba2eadea22af6a7de1610fbb5bcc2d3df0 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.6.5": - version: 0.6.5 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - debug: "npm:^4.4.1" - lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.22.10" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e - languageName: node - linkType: hard - -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-module-imports@npm:7.25.9" - dependencies: - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-imports@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helper-module-transforms@npm:7.26.0" - dependencies: - "@babel/helper-module-imports": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-transforms@npm:7.27.1" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-module-transforms@npm:7.27.3" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.3" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/fccb4f512a13b4c069af51e1b56b20f54024bcf1591e31e978a30f3502567f34f90a80da6a19a6148c249216292a8074a0121f9e52602510ef0f32dbce95ca01 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" - dependencies: - "@babel/types": "npm:^7.27.1" - checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.26.5 - resolution: "@babel/helper-plugin-utils@npm:7.26.5" - checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-plugin-utils@npm:7.27.1" - checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-wrap-function": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-replace-supers@npm:7.27.1" - dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.27.1" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-identifier@npm:7.27.1" - checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-option@npm:7.25.9" - checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-option@npm:7.27.1" - checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-wrap-function@npm:7.27.1" - dependencies: - "@babel/template": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/c472f75c0951bc657ab0a117538c7c116566ae7579ed47ac3f572c42dc78bd6f1e18f52ebe80d38300c991c3fcaa06979e2f8864ee919369dabd59072288de30 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helpers@npm:7.26.0" - dependencies: - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" - checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.27.6": - version: 7.28.2 - resolution: "@babel/helpers@npm:7.28.2" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.2" - checksum: 10c0/f3e7b21517e2699c4ca193663ecfb1bf1b2ae2762d8ba4a9f1786feaca0d6984537fc60bf2206e92c43640a6dada6b438f523cc1ad78610d0151aeb061b37f63 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6": - version: 7.26.5 - resolution: "@babel/parser@npm:7.26.5" - dependencies: - "@babel/types": "npm:^7.26.5" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e - languageName: node - linkType: hard - -"@babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/parser@npm:7.27.2" - dependencies: - "@babel/types": "npm:^7.27.1" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/parser@npm:7.28.0" - dependencies: - "@babel/types": "npm:^7.28.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/7dfffa978ae1cd179641a7c4b4ad688c6828c2c58ec96b118c2fb10bc3715223de6b88bff1ebff67056bb5fccc568ae773e3b83c592a1b843423319f80c99ebd - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.13.0 - checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/b94e6c3fc019e988b1499490829c327a1067b4ddea8ad402f6d0554793c9124148c2125338c723661b6dff040951abc1f092afbf3f2d234319cd580b68e52445 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.12.13" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/06a954ee672f7a7c44d52b6e55598da43a7064e80df219765c51c37a0692641277e90411028f7cae4f4d1dedeed084f0c453576fa421c35a81f1603c5e3e0146 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.26.0 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d - languageName: node - linkType: hard - -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/739d577e649d7d7b9845dc309e132964327ab3eaea43ad04d04a7dcb977c63f9aa9a423d1ca39baf10939128d02f52e6fda39c834fb9f1753785b1497e72c4dc - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e76b1f6f9c3bbf72e17d7639406d47f09481806de4db99a8de375a0bb40957ea309b20aa705f0c25ab1d7c845e3f365af67eafa368034521151a0e352a03ef2f - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/787d85e72a92917e735aa54e23062fa777031f8a07046e67f5026eff3d91e64eb535575dd1df917b0011bee014ae51287478af14c1d4ba60bc81e326bc044cfc - languageName: node - linkType: hard - -"@babel/plugin-transform-class-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cc0662633c0fe6df95819fef223506ddf26c369c8d64ab21a728d9007ec866bf9436a253909819216c24a82186b6ccbc1ec94d7aaf3f82df227c7c02fa6a704b - languageName: node - linkType: hard - -"@babel/plugin-transform-class-static-block@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 10c0/396997dd81fc1cf242b921e337d25089d6b9dc3596e81322ff11a6359326dc44f2f8b82dcc279c2e514cafaf8964dc7ed39e9fab4b8af1308b57387d111f6a20 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-classes@npm:7.28.0" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3b213b43104fe99dd7e79401a86d09e545836e057a70ffe77e8196a87bf67ae167e502ae90afdf0d1a2be683be5652514aaeda743bd984e583523dd8ecfef887 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/template": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e09a12f8c8ae0e6a6144c102956947b4ec05f6c844169121d0ec4529c2d30ad1dc59fee67736193b87a402f44552c888a519a680a31853bdb4d34788c28af3b0 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-destructuring@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cc7ccafa952b3ff7888544d5688cfafaba78c69ce1e2f04f3233f4f78c9de5e46e9695f5ea42c085b0c0cfa39b10f366d362a2be245b6d35b66d3eb1d427ccb2 - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f9caddfad9a551b4dabe0dcb7c040f458fbaaa7bbb44200c20198b32c8259be8e050e58d2c853fdac901a4cfe490b86aa857036d8d461b192dd010d0e242dedb - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/121502a252b3206913e1e990a47fea34397b4cbf7804d4cd872d45961bc45b603423f60ca87f3a3023a62528f5feb475ac1c9ec76096899ec182fcb135eba375 - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 - languageName: node - linkType: hard - -"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3baa706af3112adf2ae0c7ec0dc61b63dd02695eb5582f3c3a2b2d05399c6aa7756f55e7bbbd5412e613a6ba1dd6b6736904074b4d7ebd6b45a1e3f9145e4094 - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/953d21e01fed76da8e08fb5094cade7bf8927c1bb79301916bec2db0593b41dbcfbca1024ad5db886b72208a93ada8f57a219525aad048cf15814eeb65cf760d - languageName: node - linkType: hard - -"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-for-of@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-function-name@npm:7.27.1" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c - languageName: node - linkType: hard - -"@babel/plugin-transform-json-strings@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2379714aca025516452a7c1afa1ca42a22b9b51a5050a653cc6198a51665ab82bdecf36106d32d731512706a1e373c5637f5ff635737319aa42f3827da2326d6 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca - languageName: node - linkType: hard - -"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5b0abc7c0d09d562bf555c646dce63a30288e5db46fd2ce809a61d064415da6efc3b2b3c59b8e4fe98accd072c89a2f7c3765b400e4bf488651735d314d9feeb - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4def972dcd23375a266ea1189115a4ff61744b2c9366fc1de648b3fab2c650faf1a94092de93a33ff18858d2e6c4dddeeee5384cb42ba0129baeab01a5cdf1e2 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f16fca62d144d9cbf558e7b5f83e13bb6d0f21fdeff3024b0cecd42ffdec0b4151461da42bd0963512783ece31aafa5ffe03446b4869220ddd095b24d414e2b5 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-new-target@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 - languageName: node - linkType: hard - -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a435fc03aaa65c6ef8e99b2d61af0994eb5cdd4a28562d78c3b0b0228ca7e501aa255e1dff091a6996d7d3ea808eb5a65fd50ecd28dfb10687a8a1095dcadc7a - languageName: node - linkType: hard - -"@babel/plugin-transform-numeric-separator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/b72cbebbfe46fcf319504edc1cf59f3f41c992dd6840db766367f6a1d232cd2c52143c5eaf57e0316710bee251cae94be97c6d646b5022fcd9274ccb131b470c - languageName: node - linkType: hard - -"@babel/plugin-transform-object-rest-spread@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.0" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/360dc6fd5285ee5e1d3be8a1fb0decd120b2a1726800317b4ab48b7c91616247030239b7fa06ceaa1a8a586fde1e143c24d45f8d41956876099d97d664f8ef1e - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-object-super@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/807a4330f1fac08e2682d57bc82e714868fc651c8876f9a8b3a3fd8f53c129e87371f8243e712ac7dae11e090b737a2219a02fe1b6459a29e664fa073c3277bb - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5b18ff5124e503f0a25d6b195be7351a028b3992d6f2a91fb4037e2a2c386400d66bc1df8f6df0a94c708524f318729e81a95c41906e5a7919a06a43e573a525 - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.27.7": - version: 7.27.7 - resolution: "@babel/plugin-transform-parameters@npm:7.27.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f - languageName: node - linkType: hard - -"@babel/plugin-transform-private-methods@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/232bedfe9d28df215fb03cc7623bdde468b1246bdd6dc24465ff4bf9cc5f5a256ae33daea1fafa6cc59705e4d29da9024bb79baccaa5cd92811ac5db9b9244f2 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a8c4536273ca716dcc98e74ea25ca76431528554922f184392be3ddaf1761d4aa0e06f1311577755bd1613f7054fb51d29de2ada1130f743d329170a1aa1fe56 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.28.0": - version: 7.28.1 - resolution: "@babel/plugin-transform-regenerator@npm:7.28.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6c9e6eb80ce9c0bde0876c80979e078fbc85dc802272cba4ee72b5b1c858472e38167c418917e4f0d4384ce888706d95544a8d266880c0e199e167e078168b67 - languageName: node - linkType: hard - -"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/31ae596ab56751cf43468a6c0a9d6bc3521d306d2bee9c6957cdb64bea53812ce24bd13a32f766150d62b737bca5b0650b2c62db379382fff0dccbf076055c33 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 - languageName: node - linkType: hard - -"@babel/plugin-transform-runtime@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-runtime@npm:7.28.0" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - babel-plugin-polyfill-corejs2: "npm:^0.4.14" - babel-plugin-polyfill-corejs3: "npm:^0.13.0" - babel-plugin-polyfill-regenerator: "npm:^0.6.5" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/71eba1e6aaafacb2ec0fd468394c7aeaff32265b21424bd9b2d963368a4a5260547e06976bb34e2553a7179463c3a3a4c2a4552256b5112c8b7dcadb7bd5bb07 - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-spread@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/b34fc58b33bd35b47d67416655c2cbc8578fbb3948b4592bc15eb6d8b4046986e25c06e3b9929460fa4ab08e9653582415e7ef8b87d265e1239251bdf5a4c162 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 - languageName: node - linkType: hard - -"@babel/plugin-transform-typescript@npm:^7.27.1": - version: 7.28.0 - resolution: "@babel/plugin-transform-typescript@npm:7.28.0" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/plugin-syntax-typescript": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/049c2bd3407bbf5041d8c95805a4fadee6d176e034f6b94ce7967b92a846f1e00f323cf7dfbb2d06c93485f241fb8cf4c10520e30096a6059d251b94e80386e9 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a332bc3cb3eeea67c47502bc52d13a0f8abae5a7bfcb08b93a8300ddaff8d9e1238f912969494c1b494c1898c6f19687054440706700b6d12cb0b90d88beb4d0 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/236645f4d0a1fba7c18dc8ffe3975933af93e478f2665650c2d91cf528cfa1587cde5cfe277e0e501fc03b5bf57638369575d6539cef478632fb93bd7d7d7178 - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/preset-env@npm:7.28.0" - dependencies: - "@babel/compat-data": "npm:^7.28.0" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-option": "npm:^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.27.1" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1" - "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" - "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" - "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" - "@babel/plugin-transform-async-generator-functions": "npm:^7.28.0" - "@babel/plugin-transform-async-to-generator": "npm:^7.27.1" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" - "@babel/plugin-transform-block-scoping": "npm:^7.28.0" - "@babel/plugin-transform-class-properties": "npm:^7.27.1" - "@babel/plugin-transform-class-static-block": "npm:^7.27.1" - "@babel/plugin-transform-classes": "npm:^7.28.0" - "@babel/plugin-transform-computed-properties": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" - "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1" - "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" - "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.0" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.27.1" - "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" - "@babel/plugin-transform-for-of": "npm:^7.27.1" - "@babel/plugin-transform-function-name": "npm:^7.27.1" - "@babel/plugin-transform-json-strings": "npm:^7.27.1" - "@babel/plugin-transform-literals": "npm:^7.27.1" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.27.1" - "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" - "@babel/plugin-transform-modules-amd": "npm:^7.27.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" - "@babel/plugin-transform-modules-systemjs": "npm:^7.27.1" - "@babel/plugin-transform-modules-umd": "npm:^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" - "@babel/plugin-transform-new-target": "npm:^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1" - "@babel/plugin-transform-numeric-separator": "npm:^7.27.1" - "@babel/plugin-transform-object-rest-spread": "npm:^7.28.0" - "@babel/plugin-transform-object-super": "npm:^7.27.1" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/plugin-transform-private-methods": "npm:^7.27.1" - "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" - "@babel/plugin-transform-property-literals": "npm:^7.27.1" - "@babel/plugin-transform-regenerator": "npm:^7.28.0" - "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" - "@babel/plugin-transform-reserved-words": "npm:^7.27.1" - "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" - "@babel/plugin-transform-spread": "npm:^7.27.1" - "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" - "@babel/plugin-transform-template-literals": "npm:^7.27.1" - "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" - "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1" - "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1" - "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.14" - babel-plugin-polyfill-corejs3: "npm:^0.13.0" - babel-plugin-polyfill-regenerator: "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f343103b8f0e8da5be4ae031aff8bf35da4764997af4af78ae9506f421b785dd45da1bc09f845b1fc308c8b7d134aead4a1f89e7fb6e213cd2f9fe1d2aa78bc9 - languageName: node - linkType: hard - -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@babel/types": "npm:^7.4.4" - esutils: "npm:^2.0.2" - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/preset-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-option": "npm:^7.27.1" - "@babel/plugin-syntax-jsx": "npm:^7.27.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" - "@babel/plugin-transform-typescript": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cba6ca793d915f8aff9fe2f13b0dfbf5fd3f2e9a17f17478ec9878e9af0d206dcfe93154b9fd353727f16c1dca7c7a3ceb4943f8d28b216235f106bc0fbbcaa3 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.13.9": - version: 7.28.2 - resolution: "@babel/runtime@npm:7.28.2" - checksum: 10c0/c20afe253629d53a405a610b12a62ac74d341a2c1e0fb202bbef0c118f6b5c84f94bf16039f58fd0483dd256901259930a43976845bdeb180cab1f882c21b6e0 - languageName: node - linkType: hard - -"@babel/template@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" - dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab - languageName: node - linkType: hard - -"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/template@npm:7.27.2" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.2" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.25.9": - version: 7.26.5 - resolution: "@babel/traverse@npm:7.26.5" - dependencies: - "@babel/code-frame": "npm:^7.26.2" - "@babel/generator": "npm:^7.26.5" - "@babel/parser": "npm:^7.26.5" - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.5" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/traverse@npm:7.27.1" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.1" - "@babel/template": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/traverse@npm:7.28.0" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.0" - debug: "npm:^4.3.1" - checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5, @babel/types@npm:^7.6.1, @babel/types@npm:^7.9.6": - version: 7.26.5 - resolution: "@babel/types@npm:7.26.5" - dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/types@npm:7.27.1" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2, @babel/types@npm:^7.4.4": - version: 7.28.2 - resolution: "@babel/types@npm:7.28.2" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/24b11c9368e7e2c291fe3c1bcd1ed66f6593a3975f479cbb9dd7b8c8d8eab8a962b0d2fca616c043396ce82500ac7d23d594fbbbd013828182c01596370a0b10 - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 - languageName: node - linkType: hard - -"@comunica/actor-abstract-mediatyped@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-abstract-mediatyped@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/7812dbca52fc7442579ccc95a1b2a0e7b41058dcfab56c55e18a142c666e7ba8f7b7ff62f64ed205c6f0a4128cbab63dd1a84faaf5d8a84545b3e635c447a2ac - languageName: node - linkType: hard - -"@comunica/actor-http-native@npm:~1.22.0": - version: 1.22.1 - resolution: "@comunica/actor-http-native@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@types/parse-link-header": "npm:^1.0.0" - cross-fetch: "npm:^3.0.5" - follow-redirects: "npm:^1.5.1" - parse-link-header: "npm:^1.0.1" - peerDependencies: - "@comunica/bus-http": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/65288a5ae2cbefdcc5b7315851a4a7488966357de3ecf35510aa8f379241675d8579a9d595b44bffbc93eec544071fb6107d2c51ce6555f224e5273273dab07f - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-microdata@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-microdata@npm:1.22.0" - dependencies: - microdata-rdf-streaming-parser: "npm:^1.2.0" - peerDependencies: - "@comunica/bus-rdf-parse-html": ^1.17.0 - "@comunica/core": ^1.17.0 - checksum: 10c0/ceeb80e597ffa78dec991cd0c6fdd0af54f4a0fe93708aa2c41cecef6f10a9374b2f7fbfb221cce60d6f4ea4792e9eec04eb774b60005073545937c46b56ee6e - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-rdfa@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-rdfa@npm:1.22.0" - dependencies: - rdfa-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse-html": ^1.0.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/0a9969b1227f5a94712f58c9b45501174a49689e225d4b4805b7edbc9a8b035c1bc77a46b08e00b9b1f4354f5054e82b7d4197889cce44fce8b18390dfdc2742 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-script@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-script@npm:1.22.0" - dependencies: - "@comunica/bus-rdf-parse-html": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - relative-to-absolute-iri: "npm:^1.0.5" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.4.0 - "@comunica/core": ^1.4.0 - checksum: 10c0/7da4ddf8aaffd7f17d96c56b800a27c2cf7f87ad6b00daa620a89a800184ae7d32cdc871a3dcef202a8dd95fcfd316744ac72289681593be009dca74620b81c0 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html@npm:1.22.0" - dependencies: - "@comunica/bus-rdf-parse-html": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^7.0.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.8.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/9a0e2932d6f4e4242438a581e0fd88a3149395c5a2b8bdc5e120c757a8a42423ad1e5e3c7fbfa110bab3bea06041a41bb207ca6a68dbfc6b7c9e4fe4d23191a1 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-jsonld@npm:^1.22.0": - version: 1.22.1 - resolution: "@comunica/actor-rdf-parse-jsonld@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - jsonld-context-parser: "npm:^2.1.2" - jsonld-streaming-parser: "npm:^2.4.0" - stream-to-string: "npm:^1.2.0" - peerDependencies: - "@comunica/bus-http": ^1.0.0 - "@comunica/bus-rdf-parse": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/959e5abe524083704705f1e13470cbaf00fdcdf6f8434b657e98155f390b13d651544899200c85456f5bb800a78367c3a9bef241a574707712091a430269eb31 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-n3@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-n3@npm:1.22.0" - dependencies: - "@types/n3": "npm:^1.4.4" - n3: "npm:^1.6.3" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/5651a13e6b07ac4f45f73fd525077f1fd5c43af64944b4882ec7bd4f31eae12c87a763f3a39fbccb8018a39144f60e11fac2db2a725e73ca1f2595f936d05f37 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-rdfxml@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-rdfxml@npm:1.22.0" - dependencies: - rdfxml-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.1.0 - "@comunica/core": ^1.1.0 - checksum: 10c0/c4cf0c85794995fe94438108ea54fe5ff74928d8bb179aa3b52bc1bdcb3dcade02d9ef16dfbdf27e22cf4760ba1786f6989b34c2eed3fbd1c80815ca0cf5aa13 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-xml-rdfa@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-xml-rdfa@npm:1.22.0" - dependencies: - rdfa-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.8.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/d517f28fc6b63b0d88a31b0a7a2053f9f0d74c4d3040669b139c3e64a193b364ec59bb7a291eda08ca10b74e51d9b7045724f5772ee99731278ac06093243da5 - languageName: node - linkType: hard - -"@comunica/bus-http@npm:~1.22.0": - version: 1.22.1 - resolution: "@comunica/bus-http@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@types/readable-stream": "npm:^2.3.11" - is-stream: "npm:^2.0.0" - readable-web-to-node-stream: "npm:^3.0.2" - web-streams-node: "npm:^0.4.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/5578a14ab438e11a4da413119a24d4da1b3f681be44ab7c05711bfbff563d9601de793e081c524747ae6a66fad413a82d3d52814915ba8c92fb96055f5f37f41 - languageName: node - linkType: hard - -"@comunica/bus-init@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-init@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/76ed0ad2c12125788a98611276ed30ebd1e7f2ae52541e8f64ebde71fcb513bf6d6eed38322da3fc955197f104d20571aa1a0c54444907c8bbbd5c58058ba101 - languageName: node - linkType: hard - -"@comunica/bus-rdf-parse-html@npm:^1.22.0, @comunica/bus-rdf-parse-html@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-rdf-parse-html@npm:1.22.0" - dependencies: - "@rdfjs/types": "npm:*" - peerDependencies: - "@comunica/core": ^1.8.0 - checksum: 10c0/fb68896db681674831130d521e0e41d85bb2e3fea2be96f2f44f9304cb9e1271b1c51221d16c3d8bb015b55e2c108611562657e3c89fc8bd6e5c087f04290bfa - languageName: node - linkType: hard - -"@comunica/bus-rdf-parse@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-rdf-parse@npm:1.22.0" - dependencies: - "@comunica/actor-abstract-mediatyped": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/f4e3eb35b7757a93a44f1050de542f6e8fc39fcf74b22c89100eaec4556653b270163422f918a9e09833f57244e82553b7a03a80bbdab64c82b97b3aebf7dd02 - languageName: node - linkType: hard - -"@comunica/context-entries@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/context-entries@npm:1.22.0" - checksum: 10c0/edd1cb3e7861f043e63040f98e9959ace55a1c9b90ed5ab9ab0bc40eea182ec81b75e7c1650e1e1a64dc97634f33f6c6b57878f0003bd0217f696040ec8b9234 - languageName: node - linkType: hard - -"@comunica/core@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/core@npm:1.22.0" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@comunica/types": "npm:^1.22.0" - immutable: "npm:^3.8.2" - checksum: 10c0/73b4d0228b87ee8807d7219c7cae045389cf8b967b2cbfe024f244bb9cffb73b38c516673cf80764fa02ab3c1d32f803a0de05b88d9b38c0eff8a701f97a1c03 - languageName: node - linkType: hard - -"@comunica/mediator-combine-union@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-combine-union@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/72cee255c14709a3039149b64f281a480c32d2deade1c704587c3714d827ecc5e1ecbb1762211d2d554cf4759d4ba1a4fddd243c1e8bfda4493883b7bd07dca0 - languageName: node - linkType: hard - -"@comunica/mediator-number@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-number@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/f7fb1863ae17b4316da03af93333e9a288d4a4067a9f09e838e9a59aeee70f385e1c21dd3f144d352991d865dbcd7d809ddddfa26b7e6dedf65dbc56124bf4ae - languageName: node - linkType: hard - -"@comunica/mediator-race@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-race@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/6506d8fe2631a55be151c2ca4d2efdeab2fa0a376d650bbdab1b78aa5773507df5ab874eac0931990d1965879cc0566fa056663e1461f71fec67eb7d93d810ca - languageName: node - linkType: hard - -"@comunica/types@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/types@npm:1.22.0" - dependencies: - "@rdfjs/types": "npm:*" - asynciterator: "npm:^3.2.0" - immutable: "npm:^3.8.2" - sparqlalgebrajs: "npm:^3.0.1" - checksum: 10c0/55810c126392810f973467ae0b411e942b4d3202cd67500994321621dd550f4a9a470bba24a095d100edc8ad207e8936627ab6a6a4fbb33cc1c1098d10e1db88 - languageName: node - linkType: hard - -"@digitalbazaar/credentials-context@npm:^3.1.0": - version: 3.1.0 - resolution: "@digitalbazaar/credentials-context@npm:3.1.0" - checksum: 10c0/0fa22d00542450b3e0567511779dafcd943bcba75a2be83fa80b95c1f255f1b2f701ea64a0ab3959c8503a9f1682f724de0ffe8f5eea18b065d5074d61e52cb7 - languageName: node - linkType: hard - -"@digitalbazaar/data-integrity@npm:^2.5.0": - version: 2.5.0 - resolution: "@digitalbazaar/data-integrity@npm:2.5.0" - dependencies: - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - jsonld-signatures: "npm:^11.3.0" - checksum: 10c0/0080cbbd5425ef83e0ca3855fb8bc18f6d382a5f2aebba9a1dc7003dc6e066d2fd1ad95737f6ea36c3c8c2f696330316991aabb46d518420220487b8444086f5 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-multikey@npm:^1.0.0, @digitalbazaar/ed25519-multikey@npm:^1.1.0, @digitalbazaar/ed25519-multikey@npm:^1.3.0": - version: 1.3.0 - resolution: "@digitalbazaar/ed25519-multikey@npm:1.3.0" - dependencies: - "@noble/ed25519": "npm:^1.6.0" - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - checksum: 10c0/07cf6ea5591a269fca5b9709481e249b20cf83145ab56c25c8b75f668739163af95eae6742b50b8575522075e0933242343564d14d661f5bcae70fade13726b5 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-signature-2020@npm:^5.4.0": - version: 5.4.0 - resolution: "@digitalbazaar/ed25519-signature-2020@npm:5.4.0" - dependencies: - "@digitalbazaar/ed25519-multikey": "npm:^1.1.0" - "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.1.0" - base58-universal: "npm:^2.0.0" - ed25519-signature-2020-context: "npm:^1.1.0" - jsonld-signatures: "npm:^11.3.0" - checksum: 10c0/7fcdd54c18d85dbbf937464ff8f330876de336d2607c944981fa8e69bcc2df59a5181441d364c27e269d1a6d2028217ed3f662028634c57ab55e739c3af42c16 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-verification-key-2020@npm:^4.1.0, @digitalbazaar/ed25519-verification-key-2020@npm:^4.2.0": - version: 4.2.0 - resolution: "@digitalbazaar/ed25519-verification-key-2020@npm:4.2.0" - dependencies: - "@noble/ed25519": "npm:^1.6.0" - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - crypto-ld: "npm:^7.0.0" - checksum: 10c0/386b4be965e10b0253c5fd620c4e386c2f57587937c9215ed0127c3f42016d32e99844cc5eabbddc41642ade31760539e67e97d69cfdb0df6b3beb58737b9a01 - languageName: node - linkType: hard - -"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:^1.2.0": - version: 1.2.0 - resolution: "@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:1.2.0" - dependencies: - "@digitalbazaar/ed25519-multikey": "npm:^1.0.0" - jsonld: "npm:^8.1.0" - rdf-canonize: "npm:^4.0.1" - checksum: 10c0/2473ddb96cf50ab6e478f203ff3eaa7b530a9a96bb45c5f8cfada1fe4fb29dc04cd92cff86c6b9286848b86531deccbd3cdfca7fc0821a09880e94af8b3d8bed - languageName: node - linkType: hard - -"@digitalbazaar/http-client@npm:^3.4.1": - version: 3.4.1 - resolution: "@digitalbazaar/http-client@npm:3.4.1" - dependencies: - ky: "npm:^0.33.3" - ky-universal: "npm:^0.11.0" - undici: "npm:^5.21.2" - checksum: 10c0/218240da52e7303a63e822448fb6dc2eb3a42d0418f51fd9240b267703ffad2e45c17df01d5d8f6886ea8d0cdcf65ee929ae5377703c0e9d2db4f68313f8246c - languageName: node - linkType: hard - -"@digitalbazaar/security-context@npm:^1.0.0": - version: 1.0.1 - resolution: "@digitalbazaar/security-context@npm:1.0.1" - checksum: 10c0/6d1444002958454be5dd70cc6ba4d0df952f90162756d6320d88501ff44fc7d48dcb2aa3452b77e8941a9da4e4c7d050d3510827db93637ff469b92391c63324 - languageName: node - linkType: hard - -"@digitalbazaar/vc@npm:^7.1.0": - version: 7.1.0 - resolution: "@digitalbazaar/vc@npm:7.1.0" - dependencies: - "@digitalbazaar/credentials-context": "npm:^3.1.0" - ed25519-signature-2018-context: "npm:^1.1.0" - jsonld: "npm:^8.3.1" - jsonld-signatures: "npm:^11.2.1" - checksum: 10c0/4914cd7bfc2556512b7b1b78b7032180fcd8a966d365ecd62f0534da2347fa43b9023f2460f15fd9c8029088af8ecc81481603fe9cf953e40393a956338356bb - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/core@npm:1.3.1" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.1" - tslib: "npm:^2.4.0" - checksum: 10c0/d3be1044ad704e2c486641bc18908523490f28c7d38bd12d9c1d4ce37d39dae6c4aecd2f2eaf44c6e3bd90eaf04e0591acc440b1b038cdf43cce078a355a0ea0 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.4.3": - version: 1.4.5 - resolution: "@emnapi/core@npm:1.4.5" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.4" - tslib: "npm:^2.4.0" - checksum: 10c0/da4a57f65f325d720d0e0d1a9c6618b90c4c43a5027834a110476984e1d47c95ebaed4d316b5dddb9c0ed9a493ffeb97d1934f9677035f336d8a36c1f3b2818f - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/runtime@npm:1.3.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.4.3": - version: 1.4.5 - resolution: "@emnapi/runtime@npm:1.4.5" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/37a0278be5ac81e918efe36f1449875cbafba947039c53c65a1f8fc238001b866446fc66041513b286baaff5d6f9bec667f5164b3ca481373a8d9cb65bfc984b - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.1": - version: 1.0.1 - resolution: "@emnapi/wasi-threads@npm:1.0.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/1e0c8036b8d53e9b07cc9acf021705ef6c86ab6b13e1acda7fffaf541a2d3565072afb92597419173ced9ea14f6bf32fce149106e669b5902b825e8b499e5c6c - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.4": - version: 1.0.4 - resolution: "@emnapi/wasi-threads@npm:1.0.4" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/2c91a53e62f875800baf035c4d42c9c0d18e5afd9a31ca2aac8b435aeaeaeaac386b5b3d0d0e70aa7a5a9852bbe05106b1f680cd82cce03145c703b423d41313 - languageName: node - linkType: hard - -"@es-joy/jsdoccomment@npm:~0.46.0": - version: 0.46.0 - resolution: "@es-joy/jsdoccomment@npm:0.46.0" - dependencies: - comment-parser: "npm:1.4.1" - esquery: "npm:^1.6.0" - jsdoc-type-pratt-parser: "npm:~4.0.0" - checksum: 10c0/a7a67936ebf6d9aaf74af018c3ac744769af3552b05ad9b88fca96b2ffdca16e724b0ff497f53634ec4cca81e98d8c471b6b6bde0fa5b725af4222ad9a0707f0 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.1 - resolution: "@eslint-community/eslint-utils@npm:4.4.1" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 - languageName: node - linkType: hard - -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^1.0.0": - version: 1.2.1 - resolution: "@fastify/busboy@npm:1.2.1" - dependencies: - text-decoding: "npm:^1.0.0" - checksum: 10c0/fe13effa7a7a2aa270ef62586cd8d04339036b10ffa1d3d6a883e502fcc1bdc6d8de1bd7ac9d46ef7718bed3b1202cac058e281f5053dee262af7538243cb780 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" - dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c - languageName: node - linkType: hard - -"@hutson/parse-repository-url@npm:^3.0.0": - version: 3.0.2 - resolution: "@hutson/parse-repository-url@npm:3.0.2" - checksum: 10c0/d9197757ecad2df18d29d3e1d1fe0716d458fd88b849c71cbec9e78239f911074c97e8d764dfd8ed890431c1137e52dd7a337207fd65be20ce0784f7860ae4d1 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@isaacs/string-locale-compare@npm:^1.1.0": - version: 1.1.0 - resolution: "@isaacs/string-locale-compare@npm:1.1.0" - checksum: 10c0/d67226ff7ac544a495c77df38187e69e0e3a0783724777f86caadafb306e2155dc3b5787d5927916ddd7fb4a53561ac8f705448ac3235d18ea60da5854829fdf - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: "npm:^5.3.1" - find-up: "npm:^4.1.0" - get-package-type: "npm:^0.1.0" - js-yaml: "npm:^3.13.1" - resolve-from: "npm:^5.0.0" - checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a - languageName: node - linkType: hard - -"@jest/console@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/console@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - slash: "npm:^3.0.0" - checksum: 10c0/1400e9ee281dd070f543f8f8696b9aca4ba1f81d5cbfb3cae030664012ff5961c76ac2c8ccee172e416e15f88af3b10840548adbee4de0ec63100d44416b17ef - languageName: node - linkType: hard - -"@jest/core@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/core@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/pattern": "npm:30.0.1" - "@jest/reporters": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.3.2" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - exit-x: "npm:^0.2.2" - graceful-fs: "npm:^4.2.11" - jest-changed-files: "npm:30.0.5" - jest-config: "npm:30.0.5" - jest-haste-map: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-resolve-dependencies: "npm:30.0.5" - jest-runner: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - jest-watcher: "npm:30.0.5" - micromatch: "npm:^4.0.8" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/d3437dca1fccbb44c6c8a327b93e510e10999745b7c7dae94ad88d4fa4ce6d3c823e49d17caf79560b69a7db91fc10c7443a8014f8178622a0b11514b5106aa6 - languageName: node - linkType: hard - -"@jest/diff-sequences@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/diff-sequences@npm:30.0.1" - checksum: 10c0/3a840404e6021725ef7f86b11f7b2d13dd02846481264db0e447ee33b7ee992134e402cdc8b8b0ac969d37c6c0183044e382dedee72001cdf50cfb3c8088de74 - languageName: node - linkType: hard - -"@jest/environment@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/environment@npm:30.0.5" - dependencies: - "@jest/fake-timers": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-mock: "npm:30.0.5" - checksum: 10c0/e403b6f98fa3e39dd6462fa192e3bd55e9ac9c2322ca4471b9342495913a90ecaa5fc53238d4ad8a0dca7d53aa4b9de122721234e36f3a0445031c25757a3178 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/expect-utils@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - checksum: 10c0/d0ee162a1d1816724580bea53e7b422b891af073bdae439e78d04d5db09e6557e334f4c3d2892b9de750a59e79605f55d3ca8dbec9fb2ba33d8b803ed98463ad - languageName: node - linkType: hard - -"@jest/expect@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/expect@npm:30.0.5" - dependencies: - expect: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - checksum: 10c0/6ff40adf2f2cfa53f7a23bc2b85ae99d3264420e81202d45d1dc198009f4441ee575d910e79e589f69c2dd47e0ef9a3b66018f44760da02d98f474361f7c4d1c - languageName: node - linkType: hard - -"@jest/fake-timers@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/fake-timers@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@sinonjs/fake-timers": "npm:^13.0.0" - "@types/node": "npm:*" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - checksum: 10c0/4c403e624d758780016c2012b23112ff421efd601def289b201c4a5e03c46f995c7c3509d7b0b56dbe17cd5cbc66920734bd976ebe12125d6fd864d71888a50d - languageName: node - linkType: hard - -"@jest/get-type@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/get-type@npm:30.0.1" - checksum: 10c0/92437ae42d0df57e8acc2d067288151439db4752cde4f5e680c73c8a6e34568bbd8c1c81a2f2f9a637a619c2aac8bc87553fb80e31475b59e2ed789a71e5e540 - languageName: node - linkType: hard - -"@jest/globals@npm:30.0.5, @jest/globals@npm:^30.0.5": - version: 30.0.5 - resolution: "@jest/globals@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/expect": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - jest-mock: "npm:30.0.5" - checksum: 10c0/abe8e4b11f30c2885e42afa9e01d4364db8c6de4c3221f411b00a9081d3cc67226f84775efbbd17735dedb391222253f945ee260714d78b2a7304b7afa61b6d8 - languageName: node - linkType: hard - -"@jest/pattern@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/pattern@npm:30.0.1" - dependencies: - "@types/node": "npm:*" - jest-regex-util: "npm:30.0.1" - checksum: 10c0/32c5a7bfb6c591f004dac0ed36d645002ed168971e4c89bd915d1577031672870032594767557b855c5bc330aa1e39a2f54bf150d2ee88a7a0886e9cb65318bc - languageName: node - linkType: hard - -"@jest/reporters@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/reporters@npm:30.0.5" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - collect-v8-coverage: "npm:^1.0.2" - exit-x: "npm:^0.2.2" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^6.0.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^5.0.0" - istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-worker: "npm:30.0.5" - slash: "npm:^3.0.0" - string-length: "npm:^4.0.2" - v8-to-istanbul: "npm:^9.0.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/9f8a214ff69427b644e26981fa92af49b77819d512ac17d0b4190d1dc110b0bebeb7791faa7548b8097f010b094c3b5e3244e18f3837a3fe8385ff60c7114539 - languageName: node - linkType: hard - -"@jest/schemas@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/schemas@npm:30.0.5" - dependencies: - "@sinclair/typebox": "npm:^0.34.0" - checksum: 10c0/449dcd7ec5c6505e9ac3169d1143937e67044ae3e66a729ce4baf31812dfd30535f2b3b2934393c97cfdf5984ff581120e6b38f62b8560c8b5b7cc07f4175f65 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be - languageName: node - linkType: hard - -"@jest/snapshot-utils@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/snapshot-utils@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - natural-compare: "npm:^1.4.0" - checksum: 10c0/db270c2d6e216d132c5e0b05d8ff5bbe4fbd4e65b2de4cf94eacb44152e8f17fbbba8bdd2cb83b5fc2b1094db6424c7e1507b7eaade518dbc815cfacbdf6598b - languageName: node - linkType: hard - -"@jest/source-map@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/source-map@npm:30.0.1" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.25" - callsites: "npm:^3.1.0" - graceful-fs: "npm:^4.2.11" - checksum: 10c0/e7bda2786fc9f483d9dd7566c58c4bd948830997be862dfe80a3ae5550ff3f84753abb52e705d02ebe9db9f34ba7ebec4c2db11882048cdeef7a66f6332b3897 - languageName: node - linkType: hard - -"@jest/test-result@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/test-result@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/istanbul-lib-coverage": "npm:^2.0.6" - collect-v8-coverage: "npm:^1.0.2" - checksum: 10c0/2a43134ee28616a178b5a6379c837f2fb054a5e4a6ab411b9d15b85224e5d459d88902cdbf83edf5821c2c77fe13e67d078eff64c6871f3b08ebff0548a9a2e4 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/test-sequencer@npm:30.0.5" - dependencies: - "@jest/test-result": "npm:30.0.5" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - slash: "npm:^3.0.0" - checksum: 10c0/3caaea0558474764cd616f38acdc22ff4ce6ef806d931134ed366429fdea7110352b89d702e9cc1d71fa142d79e86f2f4e6eb0441a76a1896682e124ed8f42b4 - languageName: node - linkType: hard - -"@jest/transform@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/transform@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@jest/types": "npm:30.0.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - babel-plugin-istanbul: "npm:^7.0.0" - chalk: "npm:^4.1.2" - convert-source-map: "npm:^2.0.0" - fast-json-stable-stringify: "npm:^2.1.0" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-util: "npm:30.0.5" - micromatch: "npm:^4.0.8" - pirates: "npm:^4.0.7" - slash: "npm:^3.0.0" - write-file-atomic: "npm:^5.0.1" - checksum: 10c0/771f57b1bede66049de80dcbf984c74b7d3c072e905f2516ff3f86dc01abd2f79d821b9a6ae21f27cb26d484cd539c13b1a51f71c15e1aed0c62314203c5a186 - languageName: node - linkType: hard - -"@jest/types@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/types@npm:30.0.5" - dependencies: - "@jest/pattern": "npm:30.0.1" - "@jest/schemas": "npm:30.0.5" - "@types/istanbul-lib-coverage": "npm:^2.0.6" - "@types/istanbul-reports": "npm:^3.0.4" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.33" - chalk: "npm:^4.1.2" - checksum: 10c0/fd097a390e36edacbd2c92a8378ec0cd67abec5e234bab7a80aec6eb8625568052b0c32acf472388d04c4cf384b8fa2871d0d12a56b4b06eaea93f2c6df0ec6c - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.12": - version: 0.3.12 - resolution: "@jridgewell/gen-mapping@npm:0.3.12" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/32f771ae2467e4d440be609581f7338d786d3d621bac3469e943b9d6d116c23c4becb36f84898a92bbf2f3c0511365c54a945a3b86a83141547a2a360a5ec0c7 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.8 - resolution: "@jridgewell/gen-mapping@npm:0.3.8" - dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.4 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" - checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.29 - resolution: "@jridgewell/trace-mapping@npm:0.3.29" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/fb547ba31658c4d74eb17e7389f4908bf7c44cef47acb4c5baa57289daf68e6fe53c639f41f751b3923aca67010501264f70e7b49978ad1f040294b22c37b333 - languageName: node - linkType: hard - -"@lerna/create@npm:8.1.9": - version: 8.1.9 - resolution: "@lerna/create@npm:8.1.9" - dependencies: - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" - "@octokit/plugin-enterprise-rest": "npm:6.0.1" - "@octokit/rest": "npm:19.0.11" - aproba: "npm:2.0.0" - byte-size: "npm:8.1.1" - chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" - cmd-shim: "npm:6.0.3" - color-support: "npm:1.1.3" - columnify: "npm:1.6.0" - console-control-strings: "npm:^1.1.0" - conventional-changelog-core: "npm:5.0.1" - conventional-recommended-bump: "npm:7.0.1" - cosmiconfig: "npm:9.0.0" - dedent: "npm:1.5.3" - execa: "npm:5.0.0" - fs-extra: "npm:^11.2.0" - get-stream: "npm:6.0.0" - git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - globby: "npm:11.1.0" - graceful-fs: "npm:4.2.11" - has-unicode: "npm:2.0.1" - ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" - is-ci: "npm:3.0.1" - is-stream: "npm:2.0.0" - js-yaml: "npm:4.1.0" - libnpmpublish: "npm:9.0.9" - load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" - make-dir: "npm:4.0.0" - minimatch: "npm:3.0.5" - multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" - p-map: "npm:4.0.0" - p-map-series: "npm:2.1.0" - p-queue: "npm:6.6.2" - p-reduce: "npm:^2.1.0" - pacote: "npm:^18.0.6" - pify: "npm:5.0.0" - read-cmd-shim: "npm:4.0.0" - resolve-from: "npm:5.0.0" - rimraf: "npm:^4.4.1" - semver: "npm:^7.3.4" - set-blocking: "npm:^2.0.0" - signal-exit: "npm:3.0.7" - slash: "npm:^3.0.0" - ssri: "npm:^10.0.6" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - strong-log-transformer: "npm:2.1.0" - tar: "npm:6.2.1" - temp-dir: "npm:1.0.0" - upath: "npm:2.0.1" - uuid: "npm:^10.0.0" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:5.0.1" - wide-align: "npm:1.1.5" - write-file-atomic: "npm:5.0.1" - write-pkg: "npm:4.0.0" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - checksum: 10c0/f050e79c0bd982c6fdf9b7347275a94cc80f7a6599094f1cf114c10d5373c21afac9bd1a5c0b2ca400e6aaf18da883c384dfd6e5c84a186a2c09c912bf9b2238 - languageName: node - linkType: hard - -"@mapbox/node-pre-gyp@npm:^1.0.11": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" - dependencies: - detect-libc: "npm:^2.0.0" - https-proxy-agent: "npm:^5.0.0" - make-dir: "npm:^3.1.0" - node-fetch: "npm:^2.6.7" - nopt: "npm:^5.0.0" - npmlog: "npm:^5.0.1" - rimraf: "npm:^3.0.2" - semver: "npm:^7.3.5" - tar: "npm:^6.1.11" - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:0.2.4": - version: 0.2.4 - resolution: "@napi-rs/wasm-runtime@npm:0.2.4" - dependencies: - "@emnapi/core": "npm:^1.1.0" - "@emnapi/runtime": "npm:^1.1.0" - "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/1040de49b2ef509db207e2517465dbf7fb3474f20e8ec32897672a962ff4f59872385666dac61dc9dbeae3cae5dad265d8dc3865da756adeb07d1634c67b03a1 - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:^0.2.11": - version: 0.2.12 - resolution: "@napi-rs/wasm-runtime@npm:0.2.12" - dependencies: - "@emnapi/core": "npm:^1.4.3" - "@emnapi/runtime": "npm:^1.4.3" - "@tybys/wasm-util": "npm:^0.10.0" - checksum: 10c0/6d07922c0613aab30c6a497f4df297ca7c54e5b480e00035e0209b872d5c6aab7162fc49477267556109c2c7ed1eb9c65a174e27e9b87568106a87b0a6e3ca7d - languageName: node - linkType: hard - -"@noble/ed25519@npm:^1.6.0": - version: 1.7.3 - resolution: "@noble/ed25519@npm:1.7.3" - checksum: 10c0/dc162c3be5ae5a3cc0e6aff8209c8d175f24bba22f2b473aa849e102471193c83664b06f0ba2b5e01e9aa1a67a44daf313f478adb9f38768408a8bcad6145a48 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@nolyfill/is-core-module@npm:1.0.39": - version: 1.0.39 - resolution: "@nolyfill/is-core-module@npm:1.0.39" - checksum: 10c0/34ab85fdc2e0250879518841f74a30c276bca4f6c3e13526d2d1fe515e1adf6d46c25fcd5989d22ea056d76f7c39210945180b4859fc83b050e2da411aa86289 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae - languageName: node - linkType: hard - -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 - languageName: node - linkType: hard - -"@npmcli/arborist@npm:7.5.4": - version: 7.5.4 - resolution: "@npmcli/arborist@npm:7.5.4" - dependencies: - "@isaacs/string-locale-compare": "npm:^1.1.0" - "@npmcli/fs": "npm:^3.1.1" - "@npmcli/installed-package-contents": "npm:^2.1.0" - "@npmcli/map-workspaces": "npm:^3.0.2" - "@npmcli/metavuln-calculator": "npm:^7.1.1" - "@npmcli/name-from-folder": "npm:^2.0.0" - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/query": "npm:^3.1.0" - "@npmcli/redact": "npm:^2.0.0" - "@npmcli/run-script": "npm:^8.1.0" - bin-links: "npm:^4.0.4" - cacache: "npm:^18.0.3" - common-ancestor-path: "npm:^1.0.1" - hosted-git-info: "npm:^7.0.2" - json-parse-even-better-errors: "npm:^3.0.2" - json-stringify-nice: "npm:^1.1.4" - lru-cache: "npm:^10.2.2" - minimatch: "npm:^9.0.4" - nopt: "npm:^7.2.1" - npm-install-checks: "npm:^6.2.0" - npm-package-arg: "npm:^11.0.2" - npm-pick-manifest: "npm:^9.0.1" - npm-registry-fetch: "npm:^17.0.1" - pacote: "npm:^18.0.6" - parse-conflict-json: "npm:^3.0.0" - proc-log: "npm:^4.2.0" - proggy: "npm:^2.0.0" - promise-all-reject-late: "npm:^1.0.0" - promise-call-limit: "npm:^3.0.1" - read-package-json-fast: "npm:^3.0.2" - semver: "npm:^7.3.7" - ssri: "npm:^10.0.6" - treeverse: "npm:^3.0.0" - walk-up-path: "npm:^3.0.1" - bin: - arborist: bin/index.js - checksum: 10c0/22417b804872e68b6486187bb769eabef7245c5d3fa055d5473f84a7088580543235f34af3047a0e9b357e70fccd768e8ef5c6c8664ed6909f659d07607ad955 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/fs@npm:4.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 - languageName: node - linkType: hard - -"@npmcli/git@npm:^5.0.0": - version: 5.0.8 - resolution: "@npmcli/git@npm:5.0.8" - dependencies: - "@npmcli/promise-spawn": "npm:^7.0.0" - ini: "npm:^4.1.3" - lru-cache: "npm:^10.0.1" - npm-pick-manifest: "npm:^9.0.0" - proc-log: "npm:^4.0.0" - promise-inflight: "npm:^1.0.1" - promise-retry: "npm:^2.0.1" - semver: "npm:^7.3.5" - which: "npm:^4.0.0" - checksum: 10c0/892441c968404950809c7b515a93b78167ea1db2252f259f390feae22a2c5477f3e1629e105e19a084c05afc56e585bf3f13c2f13b54a06bfd6786f0c8429532 - languageName: node - linkType: hard - -"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/installed-package-contents@npm:2.1.0" - dependencies: - npm-bundled: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - bin: - installed-package-contents: bin/index.js - checksum: 10c0/f5ecba0d45fc762f3e0d5def29fbfabd5d55e8147b01ae0a101769245c2e0038bc82a167836513a98aaed0a15c3d81fcdb232056bb8a962972a432533e518fce - languageName: node - linkType: hard - -"@npmcli/map-workspaces@npm:^3.0.2": - version: 3.0.6 - resolution: "@npmcli/map-workspaces@npm:3.0.6" - dependencies: - "@npmcli/name-from-folder": "npm:^2.0.0" - glob: "npm:^10.2.2" - minimatch: "npm:^9.0.0" - read-package-json-fast: "npm:^3.0.0" - checksum: 10c0/6bfcf8ca05ab9ddc2bd19c0fd91e9982f03cc6e67b0c03f04ba4d2f29b7d83f96e759c0f8f1f4b6dbe3182272483643a0d1269788352edd0c883d6fbfa2f3f14 - languageName: node - linkType: hard - -"@npmcli/metavuln-calculator@npm:^7.1.1": - version: 7.1.1 - resolution: "@npmcli/metavuln-calculator@npm:7.1.1" - dependencies: - cacache: "npm:^18.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - pacote: "npm:^18.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - checksum: 10c0/27402cab124bb1fca56af7549f730c38c0ab40de60cbef6264a4193c26c2d28cefb2adac29ed27f368031795704f9f8fe0c547c4c8cb0c0fa94d72330d56ac80 - languageName: node - linkType: hard - -"@npmcli/name-from-folder@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/name-from-folder@npm:2.0.0" - checksum: 10c0/1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 - languageName: node - linkType: hard - -"@npmcli/node-gyp@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/node-gyp@npm:3.0.0" - checksum: 10c0/5d0ac17dacf2dd6e45312af2c1ae2749bb0730fcc82da101c37d3a4fd963a5e1c5d39781e5e1e5e5828df4ab1ad4e3fdbab1d69b7cd0abebad9983efb87df985 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:5.2.0": - version: 5.2.0 - resolution: "@npmcli/package-json@npm:5.2.0" - dependencies: - "@npmcli/git": "npm:^5.0.0" - glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.5.3" - checksum: 10c0/bdce8c7eed0dee1d272bf8ba500c4bce6d8ed2b4dd2ce43075d3ba02ffd3bb70c46dbcf8b3a35e19d9492d039b720dc3a4b30d1a2ddc30b7918e1d5232faa1f7 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": - version: 5.2.1 - resolution: "@npmcli/package-json@npm:5.2.1" - dependencies: - "@npmcli/git": "npm:^5.0.0" - glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.5.3" - checksum: 10c0/b852e31e3121a0afe5fa20bbf4faa701a59dbc9d9dd7141f7fd57b8e919ce22c1285dcdfea490851fe410fa0f7bc9c397cafba0d268aaa53420a12d7c561dde1 - languageName: node - linkType: hard - -"@npmcli/promise-spawn@npm:^7.0.0": - version: 7.0.2 - resolution: "@npmcli/promise-spawn@npm:7.0.2" - dependencies: - which: "npm:^4.0.0" - checksum: 10c0/8f2af5bc2c1b1ccfb9bcd91da8873ab4723616d8bd5af877c0daa40b1e2cbfa4afb79e052611284179cae918c945a1b99ae1c565d78a355bec1a461011e89f71 - languageName: node - linkType: hard - -"@npmcli/query@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/query@npm:3.1.0" - dependencies: - postcss-selector-parser: "npm:^6.0.10" - checksum: 10c0/9a099677dd188a2d9eb7a49e32c69d315b09faea59e851b7c2013b5bda915a38434efa7295565c40a1098916c06ebfa1840f68d831180e36842f48c24f4c5186 - languageName: node - linkType: hard - -"@npmcli/redact@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/redact@npm:2.0.1" - checksum: 10c0/5f346f7ef224b44c90009939f93c446a865a3d9e5a7ebe0246cdb0ebd03219de3962ee6c6e9197298d8c6127ea33535e8c44814276e4941394dc1cdf1f30f6bc - languageName: node - linkType: hard - -"@npmcli/run-script@npm:8.1.0, @npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": - version: 8.1.0 - resolution: "@npmcli/run-script@npm:8.1.0" - dependencies: - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.0.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - node-gyp: "npm:^10.0.0" - proc-log: "npm:^4.0.0" - which: "npm:^4.0.0" - checksum: 10c0/f9f40ecff0406a9ce1b77c9f714fc7c71b561289361efc6e2e0e48ca2d630aa98d277cbbf269750f9467a40eaaac79e78766d67c458046aa9507c8c354650fee - languageName: node - linkType: hard - -"@nrwl/tao@npm:v17.2.5": - version: 17.2.5 - resolution: "@nrwl/tao@npm:17.2.5" - dependencies: - nx: "npm:v17.2.5" - tslib: "npm:^2.3.0" - bin: - tao: index.js - checksum: 10c0/d98361141704d83487f2401116cafa7348acb30a1637336ddc471fdc42313503280767777c9752e91df0e56d3b7491251894172817e0e5ee514fe44d3ab2bf09 - languageName: node - linkType: hard - -"@nx/devkit@npm:>=17.1.2 < 21": - version: 20.3.2 - resolution: "@nx/devkit@npm:20.3.2" - dependencies: - ejs: "npm:^3.1.7" - enquirer: "npm:~2.3.6" - ignore: "npm:^5.0.4" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.3" - tmp: "npm:~0.2.1" - tslib: "npm:^2.3.0" - yargs-parser: "npm:21.1.1" - peerDependencies: - nx: ">= 19 <= 21" - checksum: 10c0/0c59aaea2c6b45712c28186b95792ae2530f928025aa7cea7d0175f9e0532ad3feeaa85b84d23e35378182c689819baa47daeb76ee4d26d823c926421830afd4 - languageName: node - linkType: hard - -"@nx/nx-darwin-arm64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-darwin-arm64@npm:20.3.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-darwin-arm64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-darwin-arm64@npm:17.2.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-darwin-x64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-darwin-x64@npm:20.3.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-darwin-x64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-darwin-x64@npm:17.2.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-freebsd-x64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-freebsd-x64@npm:20.3.2" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-freebsd-x64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-freebsd-x64@npm:17.2.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-linux-arm-gnueabihf@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.3.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@nx/nx-linux-arm-gnueabihf@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:17.2.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-gnu@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm64-gnu@npm:20.3.2" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-gnu@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm64-gnu@npm:17.2.5" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-musl@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm64-musl@npm:20.3.2" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-musl@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm64-musl@npm:17.2.5" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-x64-gnu@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-x64-gnu@npm:20.3.2" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-x64-gnu@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-x64-gnu@npm:17.2.5" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-x64-musl@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-x64-musl@npm:20.3.2" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-x64-musl@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-x64-musl@npm:17.2.5" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-win32-arm64-msvc@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-win32-arm64-msvc@npm:20.3.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-win32-arm64-msvc@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-win32-arm64-msvc@npm:17.2.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-win32-x64-msvc@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-win32-x64-msvc@npm:20.3.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-win32-x64-msvc@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-win32-x64-msvc@npm:17.2.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@octokit/auth-token@npm:^3.0.0": - version: 3.0.4 - resolution: "@octokit/auth-token@npm:3.0.4" - checksum: 10c0/abdf5e2da36344de9727c70ba782d58004f5ae1da0f65fa9bc9216af596ef23c0e4675f386df2f6886806612558091d603564051b693b0ad1986aa6160b7a231 - languageName: node - linkType: hard - -"@octokit/core@npm:^4.2.1": - version: 4.2.4 - resolution: "@octokit/core@npm:4.2.4" - dependencies: - "@octokit/auth-token": "npm:^3.0.0" - "@octokit/graphql": "npm:^5.0.0" - "@octokit/request": "npm:^6.0.0" - "@octokit/request-error": "npm:^3.0.0" - "@octokit/types": "npm:^9.0.0" - before-after-hook: "npm:^2.2.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/e54081a56884e628d1804837fddcd48c10d516117bb891551c8dc9d8e3dad449aeb9b4677ca71e8f0e76268c2b7656c953099506679aaa4666765228474a3ce6 - languageName: node - linkType: hard - -"@octokit/endpoint@npm:^7.0.0": - version: 7.0.6 - resolution: "@octokit/endpoint@npm:7.0.6" - dependencies: - "@octokit/types": "npm:^9.0.0" - is-plain-object: "npm:^5.0.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/fd147a55010b54af7567bf90791359f7096a1c9916a2b7c72f8afd0c53141338b3d78da3a4ab3e3bdfeb26218a1b73735432d8987ccc04996b1019219299f115 - languageName: node - linkType: hard - -"@octokit/graphql@npm:^5.0.0": - version: 5.0.6 - resolution: "@octokit/graphql@npm:5.0.6" - dependencies: - "@octokit/request": "npm:^6.0.0" - "@octokit/types": "npm:^9.0.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/de1d839d97fe6d96179925f6714bf96e7af6f77929892596bb4211adab14add3291fc5872b269a3d0e91a4dcf248d16096c82606c4a43538cf241b815c2e2a36 - languageName: node - linkType: hard - -"@octokit/openapi-types@npm:^18.0.0": - version: 18.1.1 - resolution: "@octokit/openapi-types@npm:18.1.1" - checksum: 10c0/856d3bb9f8c666e837dd5e8b8c216ee4342b9ed63ff8da922ca4ce5883ed1dfbec73390eb13d69fbcb4703a4c8b8b6a586df3b0e675ff93bf3d46b5b4fe0968e - languageName: node - linkType: hard - -"@octokit/plugin-enterprise-rest@npm:6.0.1": - version: 6.0.1 - resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" - checksum: 10c0/26bd0a30582954efcd29b41e16698db79e9d20e3f88c4069b43b183223cee69862621f18b6a7a1c9257b1cd07c24477e403b75c74688660ecf31d467b9d8fd9e - languageName: node - linkType: hard - -"@octokit/plugin-paginate-rest@npm:^6.1.2": - version: 6.1.2 - resolution: "@octokit/plugin-paginate-rest@npm:6.1.2" - dependencies: - "@octokit/tsconfig": "npm:^1.0.2" - "@octokit/types": "npm:^9.2.3" - peerDependencies: - "@octokit/core": ">=4" - checksum: 10c0/def241c4f00b864822ab6414eaadd8679a6d332004c7e77467cfc1e6d5bdcc453c76bd185710ee942e4df201f9dd2170d960f46af5b14ef6f261a0068f656364 - languageName: node - linkType: hard - -"@octokit/plugin-request-log@npm:^1.0.4": - version: 1.0.4 - resolution: "@octokit/plugin-request-log@npm:1.0.4" - peerDependencies: - "@octokit/core": ">=3" - checksum: 10c0/7238585445555db553912e0cdef82801c89c6e5cbc62c23ae086761c23cc4a403d6c3fddd20348bbd42fb7508e2c2fce370eb18fdbe3fbae2c0d2c8be974f4cc - languageName: node - linkType: hard - -"@octokit/plugin-rest-endpoint-methods@npm:^7.1.2": - version: 7.2.3 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" - dependencies: - "@octokit/types": "npm:^10.0.0" - peerDependencies: - "@octokit/core": ">=3" - checksum: 10c0/8bffbc5852695dd08d65cc64b6ab7d2871ed9df1e791608f48b488a3908b5b655e3686b5dd72fc37c824e82bdd4dfc9d24e2e50205bbc324667def1d705bc9da - languageName: node - linkType: hard - -"@octokit/request-error@npm:^3.0.0": - version: 3.0.3 - resolution: "@octokit/request-error@npm:3.0.3" - dependencies: - "@octokit/types": "npm:^9.0.0" - deprecation: "npm:^2.0.0" - once: "npm:^1.4.0" - checksum: 10c0/1e252ac193c8af23b709909911aa327ed5372cbafcba09e4aff41e0f640a7c152579ab0a60311a92e37b4e7936392d59ee4c2feae5cdc387ee8587a33d8afa60 - languageName: node - linkType: hard - -"@octokit/request@npm:^6.0.0": - version: 6.2.8 - resolution: "@octokit/request@npm:6.2.8" - dependencies: - "@octokit/endpoint": "npm:^7.0.0" - "@octokit/request-error": "npm:^3.0.0" - "@octokit/types": "npm:^9.0.0" - is-plain-object: "npm:^5.0.0" - node-fetch: "npm:^2.6.7" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/6b6079ed45bac44c4579b40990bfd1905b03d4bc4e5255f3d5a10cf5182171578ebe19abeab32ebb11a806f1131947f2a06b7a077bd7e77ade7b15fe2882174b - languageName: node - linkType: hard - -"@octokit/rest@npm:19.0.11": - version: 19.0.11 - resolution: "@octokit/rest@npm:19.0.11" - dependencies: - "@octokit/core": "npm:^4.2.1" - "@octokit/plugin-paginate-rest": "npm:^6.1.2" - "@octokit/plugin-request-log": "npm:^1.0.4" - "@octokit/plugin-rest-endpoint-methods": "npm:^7.1.2" - checksum: 10c0/a14ae31fc5e70e76d2492aae63d3453cbb71f44e7492400f885ab5ac6b2612bcb244bafa29e45a59461f3e5d99807ff9c88d48af8317ffa4f8ad3f8f11fdd035 - languageName: node - linkType: hard - -"@octokit/tsconfig@npm:^1.0.2": - version: 1.0.2 - resolution: "@octokit/tsconfig@npm:1.0.2" - checksum: 10c0/84db70b495beeed69259dd4def14cdfb600edeb65ef32811558c99413ee2b414ed10bff9c4dcc7a43451d0fd36b4925ada9ef7d4272b5eae38cb005cc2f459ac - languageName: node - linkType: hard - -"@octokit/types@npm:^10.0.0": - version: 10.0.0 - resolution: "@octokit/types@npm:10.0.0" - dependencies: - "@octokit/openapi-types": "npm:^18.0.0" - checksum: 10c0/9bbbec1e452c271752e5ba735c161a558933f2e35f3004bb0b6e8d6ba574af48b68bab2f293112a8e68c595435a2fbcc76f3e7333f45ba1888bb5193777a943e - languageName: node - linkType: hard - -"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": - version: 9.3.2 - resolution: "@octokit/types@npm:9.3.2" - dependencies: - "@octokit/openapi-types": "npm:^18.0.0" - checksum: 10c0/2925479aa378a4491762b4fcf381bdc7daca39b4e0b2dd7062bce5d74a32ed7d79d20d3c65ceaca6d105cf4b1f7417fea634219bf90f79a57d03e2dac629ec45 - languageName: node - linkType: hard - -"@panva/asn1.js@npm:^1.0.0": - version: 1.0.0 - resolution: "@panva/asn1.js@npm:1.0.0" - checksum: 10c0/5d6e7ec460b65b017043e2702e25f323936baad2aa248dbd9bf54c9508e351d236bffac96fa033c6e36cb0482a9dd73c3605948a36a59bd6bec49353ba8d7b62 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.1.0": - version: 0.1.1 - resolution: "@pkgr/core@npm:0.1.1" - checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.2.9": - version: 0.2.9 - resolution: "@pkgr/core@npm:0.2.9" - checksum: 10c0/ac8e4e8138b1a7a4ac6282873aef7389c352f1f8b577b4850778f5182e4a39a5241facbe48361fec817f56d02b51691b383010843fb08b34a8e8ea3614688fd5 - languageName: node - linkType: hard - -"@rdfjs/data-model@npm:^1.3.4": - version: 1.3.4 - resolution: "@rdfjs/data-model@npm:1.3.4" - dependencies: - "@rdfjs/types": "npm:>=1.0.1" - bin: - rdfjs-data-model-test: bin/test.js - checksum: 10c0/2f9f04b0f74cbcfd90b521eb51d7ab708164df16cc582ea4322dc364f66ad39ca9f1fc52d0db0b1c93e3043e86a5568ab2ecf66d7633051714e853e02e793ce8 - languageName: node - linkType: hard - -"@rdfjs/types@npm:*, @rdfjs/types@npm:>=1.0.0, @rdfjs/types@npm:>=1.0.1": - version: 2.0.1 - resolution: "@rdfjs/types@npm:2.0.1" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/81012b02e28737e15dfc27068664bbab7b989cc2ff82e0a6a341df492d9d97210b5e462d85bfb7882aa0ef5bf84e2c5e95647fb779b67b7b1910b1837d79c500 - languageName: node - linkType: hard - -"@rdfjs/types@npm:^1.0.0, @rdfjs/types@npm:^1.1.0": - version: 1.1.2 - resolution: "@rdfjs/types@npm:1.1.2" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/128242157d44453d1f5eac9d93cecfddb44acc4e6675751b2cccbc6c33b44492573785eb748e1841fd4a29921ba8e0412ba038824103d97c38a19f72033d9a5c - languageName: node - linkType: hard - -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b - languageName: node - linkType: hard - -"@seald-io/binary-search-tree@npm:^1.0.2": - version: 1.0.3 - resolution: "@seald-io/binary-search-tree@npm:1.0.3" - checksum: 10c0/cf86bfca881c84cf22fa11a96dffd358f58424bd779c9afb7e36934be2e8ad923da54252972a12a2d42a9473557829a573950b0f78213b901ceb9dcc862397e1 - languageName: node - linkType: hard - -"@seald-io/nedb@npm:^3.0.0": - version: 3.1.0 - resolution: "@seald-io/nedb@npm:3.1.0" - dependencies: - "@seald-io/binary-search-tree": "npm:^1.0.2" - localforage: "npm:^1.9.0" - util: "npm:^0.12.4" - checksum: 10c0/2bced9094700b188ce9cbf29502e60cb37b4165b53a9a636d08d985cac976da5d056fd0e990d8b90c4a2b0b58c3c15243a2cbd49aef80ac87f5e31bacb0d1bb0 - languageName: node - linkType: hard - -"@semapps/activitypub@npm:1.1.4, @semapps/activitypub@workspace:packages/activitypub": - version: 0.0.0-use.local - resolution: "@semapps/activitypub@workspace:packages/activitypub" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - handlebars: "npm:^4.7.7" - moleculer-bull: "npm:^0.2.5" - moleculer-db: "npm:^0.8.16" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/auth@npm:1.1.4, @semapps/auth@workspace:packages/auth": - version: 0.0.0-use.local - resolution: "@semapps/auth@workspace:packages/auth" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - bcrypt: "npm:^5.0.1" - express-session: "npm:^1.17.0" - jsonwebtoken: "npm:^9.0.2" - moleculer-db: "npm:^0.8.16" - moleculer-mail: "npm:^1.2.5" - moleculer-web: "npm:^0.10.0-beta1" - openid-client: "npm:^4.7.4" - passport: "npm:^0.4.1" - passport-cas2: "npm:0.0.12" - passport-local: "npm:^1.0.0" - pug: "npm:^3.0.2" - speakingurl: "npm:^14.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/backup@workspace:packages/backup": - version: 0.0.0-use.local - resolution: "@semapps/backup@workspace:packages/backup" - dependencies: - cron: "npm:^1.8.2" - fs-extra: "npm:^10.0.0" - rsync: "npm:^0.6.1" - ssh2-sftp-client: "npm:^7.2.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/core@npm:1.1.4, @semapps/core@workspace:packages/core": - version: 0.0.0-use.local - resolution: "@semapps/core@workspace:packages/core" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/jsonld": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/sparql-endpoint": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/void": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - "@semapps/webfinger": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - moleculer-web: "npm:^0.10.0-beta1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/crypto@npm:1.1.4, @semapps/crypto@workspace:packages/crypto": - version: 0.0.0-use.local - resolution: "@semapps/crypto@workspace:packages/crypto" - dependencies: - "@digitalbazaar/data-integrity": "npm:^2.5.0" - "@digitalbazaar/ed25519-multikey": "npm:^1.3.0" - "@digitalbazaar/ed25519-signature-2020": "npm:^5.4.0" - "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.2.0" - "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "npm:^1.2.0" - "@digitalbazaar/vc": "npm:^7.1.0" - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - crypto-ld: "npm:^7.0.0" - http-signature: "npm:^1.3.4" - http-signature-header: "npm:^1.3.1" - jose: "npm:^5.2.0" - jsonld-signatures: "npm:^11.3.2" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - vc-js: "npm:^0.6.4" - peerDependencies: - moleculer: ^0.14.35 - moleculer-web: ^0.10.0-beta1 - languageName: unknown - linkType: soft - -"@semapps/importer@workspace:packages/importer": - version: 0.0.0-use.local - resolution: "@semapps/importer@workspace:packages/importer" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - cron-parser: "npm:^4.2.1" - google-libphonenumber: "npm:^3.2.26" - node-fetch: "npm:^2.6.6" - sanitize-html: "npm:^2.6.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/inference@npm:1.1.4, @semapps/inference@workspace:packages/inference": - version: 0.0.0-use.local - resolution: "@semapps/inference@workspace:packages/inference" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - n3: "npm:^1.6.3" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/jsonld@npm:1.1.4, @semapps/jsonld@workspace:packages/jsonld": - version: 0.0.0-use.local - resolution: "@semapps/jsonld@workspace:packages/jsonld" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@types/jsonld": "npm:1.5.15" - jsonld: "npm:^3.3.2" - jsonld-context-parser: "npm:^2.4.0" - jsonld-streaming-parser: "npm:^2.4.2" - jsonld-streaming-serializer: "npm:^1.2.0" - lru-cache: "npm:^6.0.0" - n3: "npm:^1.26.0" - rdf-parse: "npm:^1.7.0" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/ldp@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/ldp@npm:1.0.10" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.0.10" - "@semapps/mime-types": "npm:1.0.10" - "@semapps/ontologies": "npm:1.0.10" - "@semapps/triplestore": "npm:1.0.10" - dashify: "npm:^2.0.0" - http-link-header: "npm:^1.1.1" - mime-types: "npm:^2.1.35" - moleculer: "npm:^0.14.17" - moleculer-db: "npm:^0.8.16" - moleculer-schedule: "npm:^0.2.3" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - path-to-regexp: "npm:^6.2.0" - rdf-parse: "npm:^1.7.0" - sharp: "npm:^0.31.2" - sparqljs: "npm:^3.5.2" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/dc8e8a673b4c04e46976f1440bbe7f6e024974fda979f1bdaf8731a1803260381bceba2f8e4fd9ee7b6191cc92738ebb4441a75768edeee3d75d08bba16c21fb - languageName: node - linkType: hard - -"@semapps/ldp@npm:1.1.4, @semapps/ldp@workspace:packages/ldp": - version: 0.0.0-use.local - resolution: "@semapps/ldp@workspace:packages/ldp" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - bytes: "npm:^3.1.2" - cron: "npm:^4.1.4" - dashify: "npm:^2.0.0" - http-link-header: "npm:^1.1.1" - mime-types: "npm:^2.1.35" - moleculer-db: "npm:^0.8.16" - moleculer-schedule: "npm:^0.2.3" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - path-to-regexp: "npm:^6.2.0" - rdf-parse: "npm:^1.7.0" - sharp: "npm:^0.31.2" - sparqljs: "npm:^3.5.2" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/middlewares@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/middlewares@npm:1.0.10" - dependencies: - "@semapps/mime-types": "npm:1.0.10" - busboy: "npm:^0.3.1" - memory-streams: "npm:^0.1.3" - moleculer: "npm:^0.14.18" - checksum: 10c0/f0d72246d0342b79babe76e7eddd041787c5dbc7d5ddb12dcbc3c7e902d84b4b28989f983e79f8dba668cfe673aeea6be4c7f9cf7c527b47ed908098eb7b23bf - languageName: node - linkType: hard - -"@semapps/middlewares@npm:1.1.4, @semapps/middlewares@workspace:packages/middlewares": - version: 0.0.0-use.local - resolution: "@semapps/middlewares@workspace:packages/middlewares" - dependencies: - "@semapps/mime-types": "npm:1.1.4" - busboy: "npm:^0.3.1" - memory-streams: "npm:^0.1.3" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/migration@workspace:packages/migration": - version: 0.0.0-use.local - resolution: "@semapps/migration@workspace:packages/migration" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/mime-types@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/mime-types@npm:1.0.10" - dependencies: - moleculer: "npm:^0.14.18" - negotiator: "npm:^0.6.2" - checksum: 10c0/aefb957dc606d2bc31994f9a0370d43ddeb73d3135f3aadcd2ed629b84aa361b1706cb01ed4c5f7c35aa82831d2834df2632adf811ffdb5693ab44eb55891030 - languageName: node - linkType: hard - -"@semapps/mime-types@npm:1.1.4, @semapps/mime-types@workspace:packages/mime-types": - version: 0.0.0-use.local - resolution: "@semapps/mime-types@workspace:packages/mime-types" - dependencies: - negotiator: "npm:^0.6.2" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/nodeinfo@workspace:packages/nodeinfo": - version: 0.0.0-use.local - resolution: "@semapps/nodeinfo@workspace:packages/nodeinfo" - dependencies: - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/notifications@workspace:packages/notifications": - version: 0.0.0-use.local - resolution: "@semapps/notifications@workspace:packages/notifications" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - cron-parser: "npm:^4.3.0" - expo-server-sdk: "npm:^3.4.0" - moleculer-db: "npm:^0.8.15" - moleculer-mail: "npm:^1.2.5" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/ontologies@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/ontologies@npm:1.0.10" - dependencies: - "@semapps/triplestore": "npm:1.0.10" - moleculer-db: "npm:^0.8.16" - node-fetch: "npm:^2.6.6" - checksum: 10c0/aa6eb56b330f46fdbcd2591925a79723ecfd718e4ae10a22f5e590017d416da9c85b51d83b40e37cbace55a1257c3204965271709d83c871a379bbd98d140c7b - languageName: node - linkType: hard - -"@semapps/ontologies@npm:1.1.4, @semapps/ontologies@workspace:packages/ontologies": - version: 0.0.0-use.local - resolution: "@semapps/ontologies@workspace:packages/ontologies" - dependencies: - "@semapps/triplestore": "npm:1.1.4" - moleculer-db: "npm:^0.8.16" - node-fetch: "npm:^2.6.6" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/solid@workspace:packages/solid": - version: 0.0.0-use.local - resolution: "@semapps/solid@workspace:packages/solid" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - http-link-header: "npm:^1.1.1" - moleculer-bull: "npm:^0.2.5" - moleculer-db: "npm:^0.8.16" - moleculer-web: "npm:^0.10.0-beta1" - moment: "npm:2.30.1" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/sparql-endpoint@npm:1.1.4, @semapps/sparql-endpoint@workspace:packages/sparql-endpoint": - version: 0.0.0-use.local - resolution: "@semapps/sparql-endpoint@workspace:packages/sparql-endpoint" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - moleculer-web: "npm:^0.10.0-beta1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/sync@npm:1.1.4, @semapps/sync@workspace:packages/sync": - version: 0.0.0-use.local - resolution: "@semapps/sync@workspace:packages/sync" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/triplestore@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/triplestore@npm:1.0.10" - dependencies: - "@semapps/middlewares": "npm:1.0.10" - "@semapps/mime-types": "npm:1.0.10" - jsonld: "npm:^3.3.2" - moleculer: "npm:^0.14.29" - negotiator: "npm:^0.6.2" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/c205ea8c85d5a6d9914c3c9f5cafe0f9bc4c3cc3e424b63db2173942fad6c7a5e5082126600ea9a2e7a246d21f5d4b905f82302ec2f042734ea400cd5f00c9f1 - languageName: node - linkType: hard - -"@semapps/triplestore@npm:1.1.4, @semapps/triplestore@workspace:packages/triplestore": - version: 0.0.0-use.local - resolution: "@semapps/triplestore@workspace:packages/triplestore" - dependencies: - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - jsonld: "npm:^3.3.2" - negotiator: "npm:^0.6.2" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/void@npm:1.1.4, @semapps/void@workspace:packages/void": - version: 0.0.0-use.local - resolution: "@semapps/void@workspace:packages/void" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - jsonld-streaming-serializer: "npm:^1.2.0" - n3: "npm:^1.8.0" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webacl@npm:1.1.4, @semapps/webacl@workspace:packages/webacl": - version: 0.0.0-use.local - resolution: "@semapps/webacl@workspace:packages/webacl" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@types/url-join": "npm:^4.0.1" - jsonld-streaming-serializer: "npm:^1.2.0" - n3: "npm:^1.8.0" - rdf-parse: "npm:^1.7.0" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webfinger@npm:1.1.4, @semapps/webfinger@workspace:packages/webfinger": - version: 0.0.0-use.local - resolution: "@semapps/webfinger@workspace:packages/webfinger" - dependencies: - "@semapps/mime-types": "npm:1.1.4" - node-fetch: "npm:^2.6.6" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webhooks@workspace:packages/webhooks": - version: 0.0.0-use.local - resolution: "@semapps/webhooks@workspace:packages/webhooks" - dependencies: - "@semapps/ldp": "npm:1.0.10" - "@semapps/triplestore": "npm:1.0.10" - moleculer-db: "npm:^0.8.15" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webid@npm:1.1.4, @semapps/webid@workspace:packages/webid": - version: 0.0.0-use.local - resolution: "@semapps/webid@workspace:packages/webid" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@sigstore/bundle@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/bundle@npm:2.3.2" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10c0/872a95928236bd9950a2ecc66af1c60a82f6b482a62a20d0f817392d568a60739a2432cad70449ac01e44e9eaf85822d6d9ebc6ade6cb3e79a7d62226622eb5d - languageName: node - linkType: hard - -"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": - version: 1.1.0 - resolution: "@sigstore/core@npm:1.1.0" - checksum: 10c0/3b3420c1bd17de0371e1ac7c8f07a2cbcd24d6b49ace5bbf2b63f559ee08c4a80622a4d1c0ae42f2c9872166e9cb111f33f78bff763d47e5ef1efc62b8e457ea - languageName: node - linkType: hard - -"@sigstore/protobuf-specs@npm:^0.3.2": - version: 0.3.3 - resolution: "@sigstore/protobuf-specs@npm:0.3.3" - checksum: 10c0/e0a68795fa19e437fca2c3993e5a57e989642d65434beda54b29017c1629176cc8abeb81bb1e0923259cdfb19fe1fee6f1b8680a8f8240dc14c7a7de2bbae7af - languageName: node - linkType: hard - -"@sigstore/sign@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/sign@npm:2.3.2" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - make-fetch-happen: "npm:^13.0.1" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - checksum: 10c0/a1e7908f3e4898f04db4d713fa10ddb3ae4f851592c9b554f1269073211e1417528b5088ecee60f27039fde5a5426ae573481d77cfd7e4395d2a0ddfcf5f365f - languageName: node - linkType: hard - -"@sigstore/tuf@npm:^2.3.4": - version: 2.3.4 - resolution: "@sigstore/tuf@npm:2.3.4" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - tuf-js: "npm:^2.2.1" - checksum: 10c0/97839882d787196517933df5505fae4634975807cc7adcd1783c7840c2a9729efb83ada47556ec326d544b9cb0d1851af990dc46eebb5fe7ea17bf7ce1fc0b8c - languageName: node - linkType: hard - -"@sigstore/verify@npm:^1.2.1": - version: 1.2.1 - resolution: "@sigstore/verify@npm:1.2.1" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.1.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10c0/af06580a8d5357c31259da1ac7323137054e0ac41e933278d95a4bc409a4463620125cb4c00b502f6bc32fdd68c2293019391b0d31ed921ee3852a9e84358628 - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.34.0": - version: 0.34.38 - resolution: "@sinclair/typebox@npm:0.34.38" - checksum: 10c0/c1b9a1547c64de01ff5c89351baf289d2d5f19cfef3ae30fe4748a103eb58d0842618318543cd3de964cb0370d5a859e24aba231ade9b43ee2ef4d0bb4db7084 - languageName: node - linkType: hard - -"@sindresorhus/is@npm:^4.0.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.1": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: "npm:4.0.8" - checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^13.0.0": - version: 13.0.5 - resolution: "@sinonjs/fake-timers@npm:13.0.5" - dependencies: - "@sinonjs/commons": "npm:^3.0.1" - checksum: 10c0/a707476efd523d2138ef6bba916c83c4a377a8372ef04fad87499458af9f01afc58f4f245c5fd062793d6d70587309330c6f96947b5bd5697961c18004dc3e26 - languageName: node - linkType: hard - -"@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.6 - resolution: "@szmarczak/http-timer@npm:4.0.6" - dependencies: - defer-to-connect: "npm:^2.0.0" - checksum: 10c0/73946918c025339db68b09abd91fa3001e87fc749c619d2e9c2003a663039d4c3cb89836c98a96598b3d47dec2481284ba85355392644911f5ecd2336536697f - languageName: node - linkType: hard - -"@tufjs/canonical-json@npm:2.0.0": - version: 2.0.0 - resolution: "@tufjs/canonical-json@npm:2.0.0" - checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 - languageName: node - linkType: hard - -"@tufjs/models@npm:2.0.1": - version: 2.0.1 - resolution: "@tufjs/models@npm:2.0.1" - dependencies: - "@tufjs/canonical-json": "npm:2.0.0" - minimatch: "npm:^9.0.4" - checksum: 10c0/ad9e82fd921954501fd90ed34ae062254637595577ad13fdc1e076405c0ea5ee7d8aebad09e63032972fd92b07f1786c15b24a195a171fc8ac470ca8e2ffbcc4 - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:^0.10.0": - version: 0.10.0 - resolution: "@tybys/wasm-util@npm:0.10.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/044feba55c1e2af703aa4946139969badb183ce1a659a75ed60bc195a90e73a3f3fc53bcd643497c9954597763ddb051fec62f80962b2ca6fc716ba897dc696e - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:^0.9.0": - version: 0.9.0 - resolution: "@tybys/wasm-util@npm:0.9.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.20.5": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" - dependencies: - "@babel/types": "npm:^7.0.0" - checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" - dependencies: - "@babel/parser": "npm:^7.1.0" - "@babel/types": "npm:^7.0.0" - checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*": - version: 7.20.6 - resolution: "@types/babel__traverse@npm:7.20.6" - dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 - languageName: node - linkType: hard - -"@types/cacheable-request@npm:^6.0.1": - version: 6.0.3 - resolution: "@types/cacheable-request@npm:6.0.3" - dependencies: - "@types/http-cache-semantics": "npm:*" - "@types/keyv": "npm:^3.1.4" - "@types/node": "npm:*" - "@types/responselike": "npm:^1.0.0" - checksum: 10c0/10816a88e4e5b144d43c1d15a81003f86d649776c7f410c9b5e6579d0ad9d4ca71c541962fb403077388b446e41af7ae38d313e46692144985f006ac5e11fa03 - languageName: node - linkType: hard - -"@types/dotenv-flow@npm:^3.3.3": - version: 3.3.3 - resolution: "@types/dotenv-flow@npm:3.3.3" - checksum: 10c0/a67ecdec769e0e5bf376219ee80a2ffab423d9120dd121b538860d666bf46af07ff336860a7db2b1d41fcdd2dd006fc0ec6fa98f82cd01e566c37b00038b91ec - languageName: node - linkType: hard - -"@types/http-cache-semantics@npm:*": - version: 4.0.4 - resolution: "@types/http-cache-semantics@npm:4.0.4" - checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 - languageName: node - linkType: hard - -"@types/http-link-header@npm:^1.0.1": - version: 1.0.7 - resolution: "@types/http-link-header@npm:1.0.7" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ffde4514a286ee62fab86bd5164958f5c9ad9d8012eaeb4f5536efa6157e6cf9f93121d5a39bf160c3712554d945300a223a9f8b1f3fb08cc70b73f539767338 - languageName: node - linkType: hard - -"@types/ioredis@npm:^4.27.0": - version: 4.28.10 - resolution: "@types/ioredis@npm:4.28.10" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ff680fef6750721c465ee9d6060d3229e49e5b217d68503c4972c4b869b8f84b91cbd9b7d5195a40fb0bff6ab9a4f5e24a2cc17a368ddb0bfe2dfd4eb5fc1872 - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "npm:*" - checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.4": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "npm:*" - checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee - languageName: node - linkType: hard - -"@types/jest@npm:^30.0.0": - version: 30.0.0 - resolution: "@types/jest@npm:30.0.0" - dependencies: - expect: "npm:^30.0.0" - pretty-format: "npm:^30.0.0" - checksum: 10c0/20c6ce574154bc16f8dd6a97afacca4b8c4921a819496a3970382031c509ebe87a1b37b152a1b8475089b82d8ca951a9e95beb4b9bf78fbf579b1536f0b65969 - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.9": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac - languageName: node - linkType: hard - -"@types/jsonld@npm:1.5.15": - version: 1.5.15 - resolution: "@types/jsonld@npm:1.5.15" - checksum: 10c0/d01fbf07c10f4fc53a5b85f28a5691cf7cea4f5f041e0266c5e8d9e4ca94cd410ef427129b2bd930065f675104cbf0a36a7792ba42d3c9b0ec7305c9f01d34c4 - languageName: node - linkType: hard - -"@types/keyv@npm:^3.1.4": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ff8f54fc49621210291f815fe5b15d809fd7d032941b3180743440bd507ecdf08b9e844625fa346af568c84bf34114eb378dcdc3e921a08ba1e2a08d7e3c809c - languageName: node - linkType: hard - -"@types/luxon@npm:~3.6.0": - version: 3.6.2 - resolution: "@types/luxon@npm:3.6.2" - checksum: 10c0/7572ee52b3d3e9dd10464b90561a728b90f34b9a257751cc3ce23762693dd1d14fa98b7f103e2efe2c6f49033331f91de5681ffd65cca88618cefe555be326db - languageName: node - linkType: hard - -"@types/minimatch@npm:^3.0.3": - version: 3.0.5 - resolution: "@types/minimatch@npm:3.0.5" - checksum: 10c0/a1a19ba342d6f39b569510f621ae4bbe972dc9378d15e9a5e47904c440ee60744f5b09225bc73be1c6490e3a9c938eee69eb53debf55ce1f15761201aa965f97 - languageName: node - linkType: hard - -"@types/minimist@npm:^1.2.0": - version: 1.2.5 - resolution: "@types/minimist@npm:1.2.5" - checksum: 10c0/3f791258d8e99a1d7d0ca2bda1ca6ea5a94e5e7b8fc6cde84dd79b0552da6fb68ade750f0e17718f6587783c24254bbca0357648dd59dc3812c150305cabdc46 - languageName: node - linkType: hard - -"@types/n3@npm:^1.4.4": - version: 1.21.1 - resolution: "@types/n3@npm:1.21.1" - dependencies: - "@rdfjs/types": "npm:^1.1.0" - "@types/node": "npm:*" - checksum: 10c0/be0236650cc702207590e5ad37d9ae62a3c74ae74914afed2d929c5eaae7dc4a251f6f44c5f36be317f2e404f02e63ed360ebf041651d5dac3e63867193bf66e - languageName: node - linkType: hard - -"@types/node-fetch@npm:^2.6.13": - version: 2.6.13 - resolution: "@types/node-fetch@npm:2.6.13" - dependencies: - "@types/node": "npm:*" - form-data: "npm:^4.0.4" - checksum: 10c0/6313c89f62c50bd0513a6839cdff0a06727ac5495ccbb2eeda51bb2bbbc4f3c0a76c0393a491b7610af703d3d2deb6cf60e37e59c81ceeca803ffde745dbf309 - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 22.10.7 - resolution: "@types/node@npm:22.10.7" - dependencies: - undici-types: "npm:~6.20.0" - checksum: 10c0/c941b4689dfc4044b64a5f601306cbcb0c7210be853ba378a5dd44137898c45accedd796ee002ad9407024cac7ecaf5049304951cb1d80ce3d7cebbbae56f20e - languageName: node - linkType: hard - -"@types/node@npm:^13.1.0": - version: 13.13.52 - resolution: "@types/node@npm:13.13.52" - checksum: 10c0/9224aaea219fe7f8b903039bb146d4c38b391d0166a8226a1efa2d43a35b5b7dddfe021c32941bb454a1543da94921c112687934da88e2a019f4bd44f9d517b5 - languageName: node - linkType: hard - -"@types/node@npm:^18.0.0": - version: 18.19.71 - resolution: "@types/node@npm:18.19.71" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/9f9b4a1c4e2db2994ef36f165322b3bb807466e3f92751ed52a40af0212917bc6ecd12dc6775eb829176b71b26570bea9c6a0a2d9e3ae6b496721c71934244db - languageName: node - linkType: hard - -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.4 - resolution: "@types/normalize-package-data@npm:2.4.4" - checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 - languageName: node - linkType: hard - -"@types/parse-link-header@npm:^1.0.0": - version: 1.0.1 - resolution: "@types/parse-link-header@npm:1.0.1" - checksum: 10c0/88b38f5a51083e512a9b23ba13a37543867508927544dbfd08b20ba81cafdc678a320db83c360fbff79689af0147dcbd8ad27a429a0d0f4c28145f47c708a637 - languageName: node - linkType: hard - -"@types/readable-stream@npm:^2.3.11": - version: 2.3.15 - resolution: "@types/readable-stream@npm:2.3.15" - dependencies: - "@types/node": "npm:*" - safe-buffer: "npm:~5.1.1" - checksum: 10c0/789e0948a8fd2f2cbf880a0f8c95601ac2fd8782a5a8fe653f68fad7fc3a74f44e8559484e331c1ff5d5b00fa467bec97557bb683aa833a3b29a69506f7aee59 - languageName: node - linkType: hard - -"@types/responselike@npm:^1.0.0": - version: 1.0.3 - resolution: "@types/responselike@npm:1.0.3" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/a58ba341cb9e7d74f71810a88862da7b2a6fa42e2a1fc0ce40498f6ea1d44382f0640117057da779f74c47039f7166bf48fad02dc876f94e005c7afa50f5e129 - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.12": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa - languageName: node - linkType: hard - -"@types/sparqljs@npm:^3.1.2": - version: 3.1.12 - resolution: "@types/sparqljs@npm:3.1.12" - dependencies: - "@rdfjs/types": "npm:>=1.0.0" - checksum: 10c0/832bb888a99d852f194c6fc1a2160992a769b3c4291424b7e22d50b29377692168d2cbd180cc4ed5a30d0cf1effffcfc0fc9155ea6628851c231e3ed1d28b4e2 - languageName: node - linkType: hard - -"@types/stack-utils@npm:^2.0.3": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c - languageName: node - linkType: hard - -"@types/streamify-string@npm:^1.0.4": - version: 1.0.4 - resolution: "@types/streamify-string@npm:1.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/5686610fb3d7b242ff6dd01ca6b9925296b4425c3a94f605bd71eeb5c746991e15131b42a81637f937c3de4f5894f42bb65d18a2f61a6b4ded50d055a9b206e2 - languageName: node - linkType: hard - -"@types/url-join@npm:^4.0.1": - version: 4.0.3 - resolution: "@types/url-join@npm:4.0.3" - checksum: 10c0/7f0f86693070355ce731ec3861d47c03eaae09ab0ea1a72dde6b38a2a17089941acc59bac9ea2472376b6f96e189478da0a7ed29e2d282d1543382e92408d6ca - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.33": - version: 17.0.33 - resolution: "@types/yargs@npm:17.0.33" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^7.1.1": - version: 7.18.0 - resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/type-utils": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.3.1" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - "@typescript-eslint/parser": ^7.0.0 - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^7.5.0": - version: 7.18.0 - resolution: "@typescript-eslint/parser@npm:7.18.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/scope-manager@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/type-utils@npm:7.18.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/types@npm:7.18.0" - checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/utils@npm:7.18.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - peerDependencies: - eslint: ^8.56.0 - checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:^5.10.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.1 - resolution: "@ungap/structured-clone@npm:1.2.1" - checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.3.0": - version: 1.3.0 - resolution: "@ungap/structured-clone@npm:1.3.0" - checksum: 10c0/0fc3097c2540ada1fc340ee56d58d96b5b536a2a0dab6e3ec17d4bfc8c4c86db345f61a375a8185f9da96f01c69678f836a2b57eeaa9e4b8eeafd26428e57b0a - languageName: node - linkType: hard - -"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-android-arm64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-x64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" - dependencies: - "@napi-rs/wasm-runtime": "npm:^0.2.11" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@yarnpkg/lockfile@npm:^1.1.0": - version: 1.1.0 - resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda - languageName: node - linkType: hard - -"@yarnpkg/parsers@npm:3.0.0-rc.46": - version: 3.0.0-rc.46 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.46" - dependencies: - js-yaml: "npm:^3.10.0" - tslib: "npm:^2.4.0" - checksum: 10c0/c7f421c6885142f351459031c093fb2e79abcce6f4a89765a10e600bb7ab122949c54bcea2b23de9572a2b34ba29f822b17831c1c43ba50373ceb8cb5b336667 - languageName: node - linkType: hard - -"@yarnpkg/parsers@npm:3.0.2": - version: 3.0.2 - resolution: "@yarnpkg/parsers@npm:3.0.2" - dependencies: - js-yaml: "npm:^3.10.0" - tslib: "npm:^2.4.0" - checksum: 10c0/a0c340e13129643162423d7e666061c0b39b143bfad3fc5a74c7d92a30fd740f6665d41cd4e61832c20375889d793eea1d1d103cacb39ed68f7acd168add8c53 - languageName: node - linkType: hard - -"@zkochan/js-yaml@npm:0.0.6": - version: 0.0.6 - resolution: "@zkochan/js-yaml@npm:0.0.6" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/5ce27ae75fb1db9657d4065bf6b380b4c0f756feb1bdf42bfde40551a74bcc0ec918f748cbdbd5d95b7107d00bc2f731ee731b5cfe93acb6f7da5639b16aa1f8 - languageName: node - linkType: hard - -"@zkochan/js-yaml@npm:0.0.7": - version: 0.0.7 - resolution: "@zkochan/js-yaml@npm:0.0.7" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/c8b3525717912811f9422ed50e94c5751ed6f771eb1b7e5cde097f14835654931e2bdaecb1e5fc37b51cf8d822410a307f16dd1581d46149398c30215f3f9bac - languageName: node - linkType: hard - -"JSONStream@npm:^1.3.3, JSONStream@npm:^1.3.5": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: "npm:^1.2.0" - through: "npm:>=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 - languageName: node - linkType: hard - -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 - languageName: node - linkType: hard - -"abbrev@npm:^3.0.0": - version: 3.0.1 - resolution: "abbrev@npm:3.0.1" - checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf - languageName: node - linkType: hard - -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: "npm:^5.0.0" - checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 - languageName: node - linkType: hard - -"acorn@npm:^7.1.1": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 - languageName: node - linkType: hard - -"acorn@npm:^8.14.0, acorn@npm:^8.9.0": - version: 8.14.0 - resolution: "acorn@npm:8.14.0" - bin: - acorn: bin/acorn - checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 - languageName: node - linkType: hard - -"add-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "add-stream@npm:1.0.0" - checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc - languageName: node - linkType: hard - -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: "npm:4" - checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.3 - resolution: "agent-base@npm:7.1.3" - checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0, aggregate-error@npm:^3.1.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 - languageName: node - linkType: hard - -"ajv@npm:^6.12.3, ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.1.0 - resolution: "ansi-regex@npm:6.1.0" - checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c - languageName: node - linkType: hard - -"anymatch@npm:^3.1.3": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - -"aproba@npm:2.0.0, aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 - languageName: node - linkType: hard - -"are-docs-informative@npm:^0.0.2": - version: 0.0.2 - resolution: "are-docs-informative@npm:0.0.2" - checksum: 10c0/f0326981bd699c372d268b526b170a28f2e1aec2cf99d7de0686083528427ecdf6ae41fef5d9988e224a5616298af747ad8a76e7306b0a7c97cc085a99636d60 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: "npm:^1.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e - languageName: node - linkType: hard - -"args@npm:^5.0.3": - version: 5.0.3 - resolution: "args@npm:5.0.3" - dependencies: - camelcase: "npm:5.0.0" - chalk: "npm:2.4.2" - leven: "npm:2.1.0" - mri: "npm:1.1.4" - checksum: 10c0/213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "array-buffer-byte-length@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - is-array-buffer: "npm:^3.0.5" - checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d - languageName: node - linkType: hard - -"array-differ@npm:^3.0.0": - version: 3.0.0 - resolution: "array-differ@npm:3.0.0" - checksum: 10c0/c0d924cc2b7e3f5a0e6ae932e8941c5fddc0412bcecf8d5152641910e60f5e1c1e87da2b32083dec2f92f9a8f78e916ea68c22a0579794ba49886951ae783123 - languageName: node - linkType: hard - -"array-ify@npm:^1.0.0": - version: 1.0.0 - resolution: "array-ify@npm:1.0.0" - checksum: 10c0/75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c - languageName: node - linkType: hard - -"array-includes@npm:^3.1.8": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - is-string: "npm:^1.0.7" - checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"array.prototype.findlastindex@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.2": - version: 1.3.3 - resolution: "array.prototype.flat@npm:1.3.3" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": - version: 1.3.3 - resolution: "array.prototype.flatmap@npm:1.3.3" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 - languageName: node - linkType: hard - -"array.prototype.reduce@npm:^1.0.6": - version: 1.0.7 - resolution: "array.prototype.reduce@npm:1.0.7" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-array-method-boxes-properly: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - is-string: "npm:^1.0.7" - checksum: 10c0/97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2 - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.4": - version: 1.0.4 - resolution: "arraybuffer.prototype.slice@npm:1.0.4" - dependencies: - array-buffer-byte-length: "npm:^1.0.1" - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - is-array-buffer: "npm:^3.0.4" - checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 - languageName: node - linkType: hard - -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 10c0/c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab - languageName: node - linkType: hard - -"arrify@npm:^2.0.1": - version: 2.0.1 - resolution: "arrify@npm:2.0.1" - checksum: 10c0/3fb30b5e7c37abea1907a60b28a554d2f0fc088757ca9bf5b684786e583fdf14360721eb12575c1ce6f995282eab936712d3c4389122682eafab0e0b57f78dbb - languageName: node - linkType: hard - -"asap@npm:~2.0.3": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d - languageName: node - linkType: hard - -"asn1@npm:^0.2.6, asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" - dependencies: - safer-buffer: "npm:~2.1.0" - checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 - languageName: node - linkType: hard - -"assert-never@npm:^1.2.1": - version: 1.4.0 - resolution: "assert-never@npm:1.4.0" - checksum: 10c0/494db08b89fb43d6231c9b4c48da22824f1912d88992bf0268e43b3dad0f64bd56d380addbb997d2dea7d859421d5e2904e8bd01243794f2bb5bfbc8d32d1fc6 - languageName: node - linkType: hard - -"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": - version: 1.0.0 - resolution: "assert-plus@npm:1.0.0" - checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 - languageName: node - linkType: hard - -"async@npm:^3.1.0, async@npm:^3.2.3": - version: 3.2.6 - resolution: "async@npm:3.2.6" - checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 - languageName: node - linkType: hard - -"asynciterator@npm:^3.2.0": - version: 3.9.0 - resolution: "asynciterator@npm:3.9.0" - checksum: 10c0/62e4c76ca2f2bbc8f3eae6a685c9b5c8ed82afd969f24cfb9aff1347b50d5e92a7dae61d2a3c24e834f193b303082d855cf688720059d6236cc06650a4fe2c22 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" - dependencies: - possible-typed-array-names: "npm:^1.0.0" - checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 - languageName: node - linkType: hard - -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 - languageName: node - linkType: hard - -"aws4@npm:^1.8.0": - version: 1.13.2 - resolution: "aws4@npm:1.13.2" - checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 - languageName: node - linkType: hard - -"axios@npm:^1.5.1, axios@npm:^1.7.4": - version: 1.7.9 - resolution: "axios@npm:1.7.9" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.0" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/b7a41e24b59fee5f0f26c1fc844b45b17442832eb3a0fb42dd4f1430eb4abc571fe168e67913e8a1d91c993232bd1d1ab03e20e4d1fee8c6147649b576fc1b0b - languageName: node - linkType: hard - -"babel-jest@npm:30.0.5, babel-jest@npm:^30.0.5": - version: 30.0.5 - resolution: "babel-jest@npm:30.0.5" - dependencies: - "@jest/transform": "npm:30.0.5" - "@types/babel__core": "npm:^7.20.5" - babel-plugin-istanbul: "npm:^7.0.0" - babel-preset-jest: "npm:30.0.1" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - slash: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.11.0 - checksum: 10c0/48fcdbf97519216f8897c4d83c0d2a64dffd90e4876b386e4ea4530021aaedbd7253de65a71d554cb57fdeb7bd8509bed43a6c016eb150e49e1fbe1236248f0f - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^7.0.0": - version: 7.0.0 - resolution: "babel-plugin-istanbul@npm:7.0.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@istanbuljs/load-nyc-config": "npm:^1.0.0" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-instrument: "npm:^6.0.2" - test-exclude: "npm:^6.0.0" - checksum: 10c0/79c37bd59ea9bcb16218e874993621e24048776fac7ee72eabe78f0909200851bdb93b32f6eba5b463206f15a1ee7ad40a725af8447952321ae1fdf14e740fe9 - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:30.0.1": - version: 30.0.1 - resolution: "babel-plugin-jest-hoist@npm:30.0.1" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.27.3" - "@types/babel__core": "npm:^7.20.5" - checksum: 10c0/49087f45c8ac359d68c622f4bd471300376b0ca2b6bd6ecaa1bd254ea87eda8fa3ce6144848e3bbabad337d276474a47e2ac3f6272f82e1f2337924ff49a02bd - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.14": - version: 0.4.14 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" - dependencies: - "@babel/compat-data": "npm:^7.27.7" - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.13.0": - version: 0.13.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.6.5": - version: 0.6.5 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d - languageName: node - linkType: hard - -"babel-plugin-transform-import-meta@npm:^2.3.3": - version: 2.3.3 - resolution: "babel-plugin-transform-import-meta@npm:2.3.3" - dependencies: - "@babel/template": "npm:^7.25.9" - tslib: "npm:^2.8.1" - peerDependencies: - "@babel/core": ^7.10.0 - checksum: 10c0/184275ef4f1c14a79e46fa2084e5743fbcfbaa52a9372f713e0e97e45aab4ac5be214c7eb4893fb9ea0088d32913772651776c660bee38bd2c8d52ef92750c07 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-env@npm:1.0.3": - version: 1.0.3 - resolution: "babel-plugin-transform-vite-meta-env@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - checksum: 10c0/fd602e8e9b64b06c93106b295a75f41a89a527d825ac3984baafab428108d3b1a12b6280e0bf19a58bda25e65e839a67f71bf1d916424fc81201dc14de241b64 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-glob@npm:1.1.2": - version: 1.1.2 - resolution: "babel-plugin-transform-vite-meta-glob@npm:1.1.2" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - glob: "npm:^10.3.10" - checksum: 10c0/1c3262dcba1548a3f478c77d9175b9e09c79ce257f0a9d2993d5a3bf74d5857f14825079c5430bc627f6dfca7a91fedcbe042580deab71062ec75f73ad54d7b2 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-hot@npm:1.0.0": - version: 1.0.0 - resolution: "babel-plugin-transform-vite-meta-hot@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - checksum: 10c0/718176522cfbdb6f1dfcd40431c99f89bfafa74bd52c3a96c03e63e06b1797eb599e397e54c0eeebdb2fcdcfe60a63ae66b08775e2c1c52297708e3caedebac6 - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.1.0": - version: 1.2.0 - resolution: "babel-preset-current-node-syntax@npm:1.2.0" - dependencies: - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0 || ^8.0.0-0 - checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 - languageName: node - linkType: hard - -"babel-preset-jest@npm:30.0.1": - version: 30.0.1 - resolution: "babel-preset-jest@npm:30.0.1" - dependencies: - babel-plugin-jest-hoist: "npm:30.0.1" - babel-preset-current-node-syntax: "npm:^1.1.0" - peerDependencies: - "@babel/core": ^7.11.0 - checksum: 10c0/33da0094965929b1742b02e55272b544f189cd487d55bbba60e68d96d62d48f466264fe51f65950454829d4f2271541f2433e1c1c5e6a7ff5b9e91f1303471b7 - languageName: node - linkType: hard - -"babel-preset-vite@npm:^1.1.3": - version: 1.1.3 - resolution: "babel-preset-vite@npm:1.1.3" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - babel-plugin-transform-vite-meta-env: "npm:1.0.3" - babel-plugin-transform-vite-meta-glob: "npm:1.1.2" - babel-plugin-transform-vite-meta-hot: "npm:1.0.0" - checksum: 10c0/380bc48988b5fe94b372eb72ba695410f644d9e4375e6dfc15f313e6d4b9bce2284ec0373e9f481f44a884e4a3820ab63b05dcd532cf78a1772e873431cfc8d6 - languageName: node - linkType: hard - -"babel-walk@npm:3.0.0-canary-5": - version: 3.0.0-canary-5 - resolution: "babel-walk@npm:3.0.0-canary-5" - dependencies: - "@babel/types": "npm:^7.9.6" - checksum: 10c0/17b689874d15c37714cedf6797dd9321dcb998d8e0dda9a8fe8c8bbbf128bbdeb8935cf56e8630d6b67eae76d2a0bc1e470751e082c3b0e30b80d58beafb5e64 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"base-x@npm:^3.0.2": - version: 3.0.10 - resolution: "base-x@npm:3.0.10" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/a13a34b71439ee5381667efa630b3bf640cf17f632c5ba01990483367592e72f247d7fb4f8c6d0e3ff8c0fb7224b3ac682ff5be09b87063a45b3968f0457e563 - languageName: node - linkType: hard - -"base58-universal@npm:^2.0.0": - version: 2.0.0 - resolution: "base58-universal@npm:2.0.0" - checksum: 10c0/f21fd50904e1f2d083832e39269058ffbd95592ad27fc2acc53ad3d9d7eacfa82c4e655181e0fd8a817619f4c925a42baca877276dd73e755d30f52def748ab6 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf - languageName: node - linkType: hard - -"base64url-universal@npm:^1.0.1": - version: 1.1.0 - resolution: "base64url-universal@npm:1.1.0" - dependencies: - base64url: "npm:^3.0.0" - checksum: 10c0/d1408b3062c7a73cca75c6cc47eaefc47089ca20e019f5b6c3ab4641d7a87caec3e8e1fb17165b63380bef924f62f59dc7f257586490d5718c8c352f1dfc98e2 - languageName: node - linkType: hard - -"base64url-universal@npm:^2.0.0": - version: 2.0.0 - resolution: "base64url-universal@npm:2.0.0" - dependencies: - base64url: "npm:^3.0.1" - checksum: 10c0/6143326c1b5011d987d410a7451fcacad33af9282f9e7d06a21e1d4d7ed9d884e6c09a8f0d178f6c9ef3b11f8cda10ece4c84768e43dc9cb4dc47d1b5056de40 - languageName: node - linkType: hard - -"base64url@npm:^3.0.0, base64url@npm:^3.0.1": - version: 3.0.1 - resolution: "base64url@npm:3.0.1" - checksum: 10c0/5ca9d6064e9440a2a45749558dddd2549ca439a305793d4f14a900b7256b5f4438ef1b7a494e1addc66ced5d20f5c010716d353ed267e4b769e6c78074991241 - languageName: node - linkType: hard - -"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": - version: 1.0.2 - resolution: "bcrypt-pbkdf@npm:1.0.2" - dependencies: - tweetnacl: "npm:^0.14.3" - checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 - languageName: node - linkType: hard - -"bcrypt@npm:^5.0.1": - version: 5.1.1 - resolution: "bcrypt@npm:5.1.1" - dependencies: - "@mapbox/node-pre-gyp": "npm:^1.0.11" - node-addon-api: "npm:^5.0.0" - checksum: 10c0/743231158c866bddc46f25eb8e9617fe38bc1a6f5f3052aba35e361d349b7f8fb80e96b45c48a4c23c45c29967ccd11c81cf31166454fc0ab019801c336cab40 - languageName: node - linkType: hard - -"before-after-hook@npm:^2.2.0": - version: 2.2.3 - resolution: "before-after-hook@npm:2.2.3" - checksum: 10c0/0488c4ae12df758ca9d49b3bb27b47fd559677965c52cae7b335784724fb8bf96c42b6e5ba7d7afcbc31facb0e294c3ef717cc41c5bc2f7bd9e76f8b90acd31c - languageName: node - linkType: hard - -"bin-links@npm:^4.0.4": - version: 4.0.4 - resolution: "bin-links@npm:4.0.4" - dependencies: - cmd-shim: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - read-cmd-shim: "npm:^4.0.0" - write-file-atomic: "npm:^5.0.0" - checksum: 10c0/feb664e786429289d189c19c193b28d855c2898bc53b8391306cbad2273b59ccecb91fd31a433020019552c3bad3a1e0eeecca1c12e739a12ce2ca94f7553a17 - languageName: node - linkType: hard - -"bl@npm:^4.0.3, bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: "npm:^5.5.0" - inherits: "npm:^2.0.4" - readable-stream: "npm:^3.4.0" - checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f - languageName: node - linkType: hard - -"bluebird@npm:^3.0.0, bluebird@npm:^3.1.1, bluebird@npm:^3.7.2": - version: 3.7.2 - resolution: "bluebird@npm:3.7.2" - checksum: 10c0/680de03adc54ff925eaa6c7bb9a47a0690e8b5de60f4792604aae8ed618c65e6b63a7893b57ca924beaf53eee69c5af4f8314148c08124c550fe1df1add897d2 - languageName: node - linkType: hard - -"body-parser@npm:^1.19.0": - version: 1.20.3 - resolution: "body-parser@npm:1.20.3" - dependencies: - bytes: "npm:3.1.2" - content-type: "npm:~1.0.5" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - on-finished: "npm:2.4.1" - qs: "npm:6.13.0" - raw-body: "npm:2.5.2" - type-is: "npm:~1.6.18" - unpipe: "npm:1.0.0" - checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 - languageName: node - linkType: hard - -"boolbase@npm:~1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"browserslist@npm:^4.24.0": - version: 4.24.4 - resolution: "browserslist@npm:4.24.4" - dependencies: - caniuse-lite: "npm:^1.0.30001688" - electron-to-chromium: "npm:^1.5.73" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.1" - bin: - browserslist: cli.js - checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 - languageName: node - linkType: hard - -"browserslist@npm:^4.25.1": - version: 4.25.1 - resolution: "browserslist@npm:4.25.1" - dependencies: - caniuse-lite: "npm:^1.0.30001726" - electron-to-chromium: "npm:^1.5.173" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.3" - bin: - browserslist: cli.js - checksum: 10c0/acba5f0bdbd5e72dafae1e6ec79235b7bad305ed104e082ed07c34c38c7cb8ea1bc0f6be1496958c40482e40166084458fc3aee15111f15faa79212ad9081b2a - languageName: node - linkType: hard - -"bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: "npm:^3.0.2" - checksum: 10c0/613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: "npm:^0.4.0" - checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 - languageName: node - linkType: hard - -"buffer-equal-constant-time@npm:1.0.1": - version: 1.0.1 - resolution: "buffer-equal-constant-time@npm:1.0.1" - checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 - languageName: node - linkType: hard - -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.1.13" - checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e - languageName: node - linkType: hard - -"buffer@npm:^6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.2.1" - checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 - languageName: node - linkType: hard - -"buildcheck@npm:~0.0.6": - version: 0.0.6 - resolution: "buildcheck@npm:0.0.6" - checksum: 10c0/8cbdb89f41bc484b8325f4828db4135b206a0dffb641eb6cdb2b7022483c45dd0e5aac6d820c9a67bdd2caab3a02c76d7ceec7bd9ec494b5a2270d2806b01a76 - languageName: node - linkType: hard - -"bull@npm:^3.15.0": - version: 3.29.3 - resolution: "bull@npm:3.29.3" - dependencies: - cron-parser: "npm:^2.13.0" - debuglog: "npm:^1.0.0" - get-port: "npm:^5.1.1" - ioredis: "npm:^4.27.0" - lodash: "npm:^4.17.21" - p-timeout: "npm:^3.2.0" - promise.prototype.finally: "npm:^3.1.2" - semver: "npm:^7.3.2" - util.promisify: "npm:^1.0.1" - uuid: "npm:^8.3.0" - checksum: 10c0/6860a17a2abc45bfa887c8fed0f666da2291d382dea3b5be581b82ba992e6edc487d55b5cf2e668f29e7123930958d2bdefae5a2bb003414767d4f209ebc2b4f - languageName: node - linkType: hard - -"busboy@npm:^0.3.1": - version: 0.3.1 - resolution: "busboy@npm:0.3.1" - dependencies: - dicer: "npm:0.3.0" - checksum: 10c0/15b3382816f657302956ba68e48342891b4f36ae1164f1ad47d96302dd2cda634672513d03c7e5dde0dc90e2889becf3fa32f9b3b391d0f8ab4a5a675b5b5581 - languageName: node - linkType: hard - -"byte-size@npm:8.1.1": - version: 8.1.1 - resolution: "byte-size@npm:8.1.1" - checksum: 10c0/83170a16820fde48ebaef93bf6b2e86c5f72041f76e44eba1f3c738cceb699aeadf11088198944d5d7c6f970b465ab1e3dddc2e60bfb49a74374f3447a8db5b9 - languageName: node - linkType: hard - -"bytes@npm:3.1.2, bytes@npm:^3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e - languageName: node - linkType: hard - -"cacache@npm:^18.0.0, cacache@npm:^18.0.3": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" - dependencies: - "@npmcli/fs": "npm:^3.1.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f - languageName: node - linkType: hard - -"cacache@npm:^19.0.1": - version: 19.0.1 - resolution: "cacache@npm:19.0.1" - dependencies: - "@npmcli/fs": "npm:^4.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" - unique-filename: "npm:^4.0.0" - checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c - languageName: node - linkType: hard - -"cacheable-lookup@npm:^5.0.3": - version: 5.0.4 - resolution: "cacheable-lookup@npm:5.0.4" - checksum: 10c0/a6547fb4954b318aa831cbdd2f7b376824bc784fb1fa67610e4147099e3074726072d9af89f12efb69121415a0e1f2918a8ddd4aafcbcf4e91fbeef4a59cd42c - languageName: node - linkType: hard - -"cacheable-request@npm:^7.0.2": - version: 7.0.4 - resolution: "cacheable-request@npm:7.0.4" - dependencies: - clone-response: "npm:^1.0.2" - get-stream: "npm:^5.1.0" - http-cache-semantics: "npm:^4.0.0" - keyv: "npm:^4.0.0" - lowercase-keys: "npm:^2.0.0" - normalize-url: "npm:^6.0.1" - responselike: "npm:^2.0.0" - checksum: 10c0/0834a7d17ae71a177bc34eab06de112a43f9b5ad05ebe929bec983d890a7d9f2bc5f1aa8bb67ea2b65e07a3bc74bea35fa62dd36dbac52876afe36fdcf83da41 - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": - version: 1.0.1 - resolution: "call-bind-apply-helpers@npm:1.0.1" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": - version: 1.0.8 - resolution: "call-bind@npm:1.0.8" - dependencies: - call-bind-apply-helpers: "npm:^1.0.0" - es-define-property: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.2" - checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": - version: 1.0.3 - resolution: "call-bound@npm:1.0.3" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf - languageName: node - linkType: hard - -"callsites@npm:^3.0.0, callsites@npm:^3.1.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"camelcase-keys@npm:^6.2.2": - version: 6.2.2 - resolution: "camelcase-keys@npm:6.2.2" - dependencies: - camelcase: "npm:^5.3.1" - map-obj: "npm:^4.0.0" - quick-lru: "npm:^4.0.1" - checksum: 10c0/bf1a28348c0f285c6c6f68fb98a9d088d3c0269fed0cdff3ea680d5a42df8a067b4de374e7a33e619eb9d5266a448fe66c2dd1f8e0c9209ebc348632882a3526 - languageName: node - linkType: hard - -"camelcase@npm:5.0.0": - version: 5.0.0 - resolution: "camelcase@npm:5.0.0" - checksum: 10c0/515f1ce911d65949708d9e179f1a40af71eb7de668230a0c85961a35590f7da39af79cfb48d834883dbcc7995bdb7dd6bae8027b101e37a10d95337ec8732800 - languageName: node - linkType: hard - -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"camelcase@npm:^6.3.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001688": - version: 1.0.30001695 - resolution: "caniuse-lite@npm:1.0.30001695" - checksum: 10c0/acf90a767051fdd8083711b3ff9f07a28149c55e394115d8f874f149aa4f130e6bc50cea1dd94fe03035b9ebbe13b64f446518a6d2e19f72650962bdff44b2c5 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001726": - version: 1.0.30001731 - resolution: "caniuse-lite@npm:1.0.30001731" - checksum: 10c0/d8cddf817d5bec8e7c2106affdbf1bfc3923463ca16697c992b2efeb043e6a5d9dcb70cda913bc6acf9112fd66f9e80279316c08e7800359116925066a63fdfa - languageName: node - linkType: hard - -"canonicalize@npm:^1.0.1": - version: 1.0.8 - resolution: "canonicalize@npm:1.0.8" - checksum: 10c0/6fafcfa73855a49c86eed26d2f23734713a542a3107a23a6ab16fb22b6cee6bb2d92ad32b2244d52594bd69bc08bec820413911cd566dcc5399048012ce26a83 - languageName: node - linkType: hard - -"cas@git+https://github.com/joshchan/node-cas.git": - version: 0.0.5 - resolution: "cas@https://github.com/joshchan/node-cas.git#commit=344a8bfba9d054e2e378adaf95b720c898ae48a2" - dependencies: - cheerio: "npm:0.19.0" - checksum: 10c0/03467fd69a10bd1b03cbca35f25b2249855b99857e908aeb54727cb8d8f17658fa909f7b1296a77eaf7537dc24a0fa16f5da438a8f161260f189d0db1e60f5c6 - languageName: node - linkType: hard - -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 - languageName: node - linkType: hard - -"chalk@npm:2.4.2, chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:4.1.0": - version: 4.1.0 - resolution: "chalk@npm:4.1.0" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/3787bd65ecd98ab3a1acc3b4f71d006268a675875e49ee6ea75fb54ba73d268b97544368358c18c42445e408e076ae8ad5cec8fbad36942a2c7ac654883dc61e - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e - languageName: node - linkType: hard - -"character-parser@npm:^2.2.0": - version: 2.2.0 - resolution: "character-parser@npm:2.2.0" - dependencies: - is-regex: "npm:^1.0.3" - checksum: 10c0/5a8d3eff2c912a6878c84e2ebf9d42524e858aa7e1a1c7e8bb79ab54da109ad008fe9057a9d2b3230541d7ff858eda98983a2ae15db57ba01af2e989d29e932e - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"cheerio@npm:0.19.0": - version: 0.19.0 - resolution: "cheerio@npm:0.19.0" - dependencies: - css-select: "npm:~1.0.0" - dom-serializer: "npm:~0.1.0" - entities: "npm:~1.1.1" - htmlparser2: "npm:~3.8.1" - lodash: "npm:^3.2.0" - checksum: 10c0/af96cc6a6b595334ed7c1a47b1a999dfad20645a563acdc8bf5338b3774cf050c99b6f4c9040ef0f4c03b7c915e3d3735bedcbb95968d9aecf9cf2e44dcf4896 - languageName: node - linkType: hard - -"cheerio@npm:^0.22.0": - version: 0.22.0 - resolution: "cheerio@npm:0.22.0" - dependencies: - css-select: "npm:~1.2.0" - dom-serializer: "npm:~0.1.0" - entities: "npm:~1.1.1" - htmlparser2: "npm:^3.9.1" - lodash.assignin: "npm:^4.0.9" - lodash.bind: "npm:^4.1.4" - lodash.defaults: "npm:^4.0.1" - lodash.filter: "npm:^4.4.0" - lodash.flatten: "npm:^4.2.0" - lodash.foreach: "npm:^4.3.0" - lodash.map: "npm:^4.4.0" - lodash.merge: "npm:^4.4.0" - lodash.pick: "npm:^4.2.1" - lodash.reduce: "npm:^4.4.0" - lodash.reject: "npm:^4.4.0" - lodash.some: "npm:^4.4.0" - checksum: 10c0/b067fadb3d0ada1f614ce27b2795c206df2c612ab066393f833c798ba29c73a610a3202567d2223658743026f5385cda61f6b52370b22f28a924e52883933340 - languageName: node - linkType: hard - -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a - languageName: node - linkType: hard - -"ci-info@npm:^4.0.0": - version: 4.1.0 - resolution: "ci-info@npm:4.1.0" - checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 - languageName: node - linkType: hard - -"ci-info@npm:^4.2.0": - version: 4.3.0 - resolution: "ci-info@npm:4.3.0" - checksum: 10c0/60d3dfe95d75c01454ec1cfd5108617dd598a28a2a3e148bd7e1523c1c208b5f5a3007cafcbe293e6fd0a5a310cc32217c5dc54743eeabc0a2bec80072fc055c - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^2.1.0": - version: 2.1.0 - resolution: "cjs-module-lexer@npm:2.1.0" - checksum: 10c0/91cf28686dc3948e4a06dfa03a2fccb14b7a97471ffe7ae0124f62060ddf2de28e8e997f60007babe6e122b1b06a47c01a1b72cc015f185824d9cac3ccfa5533 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - -"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: "npm:^3.1.0" - checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 - languageName: node - linkType: hard - -"cli-spinners@npm:2.6.1": - version: 2.6.1 - resolution: "cli-spinners@npm:2.6.1" - checksum: 10c0/6abcdfef59aa68e6b51376d87d257f9120a0a7120a39dd21633702d24797decb6dc747dff2217c88732710db892b5053c5c672d221b6c4d13bbcb5372e203596 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.5.0": - version: 2.9.2 - resolution: "cli-spinners@npm:2.9.2" - checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 - languageName: node - linkType: hard - -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 10c0/125a62810e59a2564268c80fdff56c23159a7690c003e34aeb2e68497dccff26911998ff49c33916fcfdf71e824322cc3953e3f7b48b27267c7a062c81348a9a - languageName: node - linkType: hard - -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 - languageName: node - linkType: hard - -"clone-deep@npm:4.0.1": - version: 4.0.1 - resolution: "clone-deep@npm:4.0.1" - dependencies: - is-plain-object: "npm:^2.0.4" - kind-of: "npm:^6.0.2" - shallow-clone: "npm:^3.0.0" - checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 - languageName: node - linkType: hard - -"clone-response@npm:^1.0.2": - version: 1.0.3 - resolution: "clone-response@npm:1.0.3" - dependencies: - mimic-response: "npm:^1.0.0" - checksum: 10c0/06a2b611824efb128810708baee3bd169ec9a1bf5976a5258cd7eb3f7db25f00166c6eee5961f075c7e38e194f373d4fdf86b8166ad5b9c7e82bbd2e333a6087 - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b - languageName: node - linkType: hard - -"cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: 10c0/d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 - languageName: node - linkType: hard - -"cmd-shim@npm:6.0.3, cmd-shim@npm:^6.0.0": - version: 6.0.3 - resolution: "cmd-shim@npm:6.0.3" - checksum: 10c0/dc09fe0bf39e86250529456d9a87dd6d5208d053e449101a600e96dc956c100e0bc312cdb413a91266201f3bd8057d4abf63875cafb99039553a1937d8f3da36 - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.2": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: "npm:^1.0.0" - simple-swizzle: "npm:^0.2.2" - checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 - languageName: node - linkType: hard - -"color-support@npm:1.1.3, color-support@npm:^1.1.2": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 - languageName: node - linkType: hard - -"color@npm:^4.2.3": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: "npm:^2.0.1" - color-string: "npm:^1.9.0" - checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 - languageName: node - linkType: hard - -"columnify@npm:1.6.0": - version: 1.6.0 - resolution: "columnify@npm:1.6.0" - dependencies: - strip-ansi: "npm:^6.0.1" - wcwidth: "npm:^1.0.0" - checksum: 10c0/25b90b59129331bbb8b0c838f8df69924349b83e8eab9549f431062a20a39094b8d744bb83265be38fd5d03140ce4bfbd85837c293f618925e83157ae9535f1d - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^2.15.1, commander@npm:^2.20.3": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 - languageName: node - linkType: hard - -"comment-parser@npm:1.4.1": - version: 1.4.1 - resolution: "comment-parser@npm:1.4.1" - checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd - languageName: node - linkType: hard - -"common-ancestor-path@npm:^1.0.1": - version: 1.0.1 - resolution: "common-ancestor-path@npm:1.0.1" - checksum: 10c0/390c08d2a67a7a106d39499c002d827d2874966d938012453fd7ca34cd306881e2b9d604f657fa7a8e6e4896d67f39ebc09bf1bfd8da8ff318e0fb7a8752c534 - languageName: node - linkType: hard - -"compare-func@npm:^2.0.0": - version: 2.0.0 - resolution: "compare-func@npm:2.0.0" - dependencies: - array-ify: "npm:^1.0.0" - dot-prop: "npm:^5.1.0" - checksum: 10c0/78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 - languageName: node - linkType: hard - -"component-emitter@npm:^1.2.0": - version: 1.3.1 - resolution: "component-emitter@npm:1.3.1" - checksum: 10c0/e4900b1b790b5e76b8d71b328da41482118c0f3523a516a41be598dc2785a07fd721098d9bf6e22d89b19f4fa4e1025160dc00317ea111633a3e4f75c2b86032 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"concat-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "concat-stream@npm:2.0.0" - dependencies: - buffer-from: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.0.2" - typedarray: "npm:^0.0.6" - checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a - languageName: node - linkType: hard - -"confusing-browser-globals@npm:^1.0.10": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e - languageName: node - linkType: hard - -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 - languageName: node - linkType: hard - -"consolidate@npm:^0.14.2": - version: 0.14.5 - resolution: "consolidate@npm:0.14.5" - dependencies: - bluebird: "npm:^3.1.1" - checksum: 10c0/9affd54c3013932e0c475c9a3fd431f8b2dd81d2ef9c8267c9c99941e5f763cfb3e7719625783615c9e231f1bb3b7646b4362a60fc8b625a3b9ebe6f51ac4888 - languageName: node - linkType: hard - -"constantinople@npm:^4.0.1": - version: 4.0.1 - resolution: "constantinople@npm:4.0.1" - dependencies: - "@babel/parser": "npm:^7.6.0" - "@babel/types": "npm:^7.6.1" - checksum: 10c0/15129adef19b1af2c3ade8bd38f97c34781bf461472a30ab414384b28d072be83070c8d2175787c045ef7c222c415101ae609936e7903427796a0c0eca8449fd - languageName: node - linkType: hard - -"content-type@npm:~1.0.5": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af - languageName: node - linkType: hard - -"conventional-changelog-angular@npm:7.0.0": - version: 7.0.0 - resolution: "conventional-changelog-angular@npm:7.0.0" - dependencies: - compare-func: "npm:^2.0.0" - checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e - languageName: node - linkType: hard - -"conventional-changelog-core@npm:5.0.1": - version: 5.0.1 - resolution: "conventional-changelog-core@npm:5.0.1" - dependencies: - add-stream: "npm:^1.0.0" - conventional-changelog-writer: "npm:^6.0.0" - conventional-commits-parser: "npm:^4.0.0" - dateformat: "npm:^3.0.3" - get-pkg-repo: "npm:^4.2.1" - git-raw-commits: "npm:^3.0.0" - git-remote-origin-url: "npm:^2.0.0" - git-semver-tags: "npm:^5.0.0" - normalize-package-data: "npm:^3.0.3" - read-pkg: "npm:^3.0.0" - read-pkg-up: "npm:^3.0.0" - checksum: 10c0/c026da415ea58346c167e58f8dd717592e92afc897aa604189a6d69f48b6943e7a656b2c83433810feea32dda117b0914a7f5860ed338a21f6ee9b0f56788b37 - languageName: node - linkType: hard - -"conventional-changelog-preset-loader@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-changelog-preset-loader@npm:3.0.0" - checksum: 10c0/5de23c4aa8b8526c3542fd5abe9758d56eed79821f32cc16d1fdf480cecc44855edbe4680113f229509dcaf4b97cc41e786ac8e3b0822b44fd9d0b98542ed0e0 - languageName: node - linkType: hard - -"conventional-changelog-writer@npm:^6.0.0": - version: 6.0.1 - resolution: "conventional-changelog-writer@npm:6.0.1" - dependencies: - conventional-commits-filter: "npm:^3.0.0" - dateformat: "npm:^3.0.3" - handlebars: "npm:^4.7.7" - json-stringify-safe: "npm:^5.0.1" - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - split: "npm:^1.0.1" - bin: - conventional-changelog-writer: cli.js - checksum: 10c0/50790b0d92e06c5ab1c02cc4eb2ecd74575244d31cfacea1885d7c8afeae1bc7bbc169140fe062f2438b9952400762240b796e59521c0246278859296b323338 - languageName: node - linkType: hard - -"conventional-commits-filter@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-commits-filter@npm:3.0.0" - dependencies: - lodash.ismatch: "npm:^4.4.0" - modify-values: "npm:^1.0.1" - checksum: 10c0/9d43cf9029bf39b70b394c551846a57b6f0473028ba5628c38bd447672655cc27bb80ba502d9a7e41335f63ad62b754cb26579f3d4bae7398dfc092acbb32578 - languageName: node - linkType: hard - -"conventional-commits-parser@npm:^4.0.0": - version: 4.0.0 - resolution: "conventional-commits-parser@npm:4.0.0" - dependencies: - JSONStream: "npm:^1.3.5" - is-text-path: "npm:^1.0.1" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - conventional-commits-parser: cli.js - checksum: 10c0/12e390cc80ad8a825c5775a329b95e11cf47a6df7b8a3875d375e28b8cb27c4f32955842ea73e4e357cff9757a6be99fdffe4fda87a23e9d8e73f983425537a0 - languageName: node - linkType: hard - -"conventional-recommended-bump@npm:7.0.1": - version: 7.0.1 - resolution: "conventional-recommended-bump@npm:7.0.1" - dependencies: - concat-stream: "npm:^2.0.0" - conventional-changelog-preset-loader: "npm:^3.0.0" - conventional-commits-filter: "npm:^3.0.0" - conventional-commits-parser: "npm:^4.0.0" - git-raw-commits: "npm:^3.0.0" - git-semver-tags: "npm:^5.0.0" - meow: "npm:^8.1.2" - bin: - conventional-recommended-bump: cli.js - checksum: 10c0/ff751a256ddfbec62efd5a32de059b01659e945073793c6766143a8242864fd8099804a90bbf1e6a61928ade3d12292d6f66f721a113630de392d54eb7f0b0c3 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b - languageName: node - linkType: hard - -"cookie-signature@npm:1.0.7": - version: 1.0.7 - resolution: "cookie-signature@npm:1.0.7" - checksum: 10c0/e7731ad2995ae2efeed6435ec1e22cdd21afef29d300c27281438b1eab2bae04ef0d1a203928c0afec2cee72aa36540b8747406ebe308ad23c8e8cc3c26c9c51 - languageName: node - linkType: hard - -"cookie@npm:0.7.2": - version: 0.7.2 - resolution: "cookie@npm:0.7.2" - checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 - languageName: node - linkType: hard - -"cookiejar@npm:^2.1.0": - version: 2.1.4 - resolution: "cookiejar@npm:2.1.4" - checksum: 10c0/2dae55611c6e1678f34d93984cbd4bda58f4fe3e5247cc4993f4a305cd19c913bbaf325086ed952e892108115073a747596453d3dc1c34947f47f731818b8ad1 - languageName: node - linkType: hard - -"core-js-compat@npm:^3.43.0": - version: 3.44.0 - resolution: "core-js-compat@npm:3.44.0" - dependencies: - browserslist: "npm:^4.25.1" - checksum: 10c0/5de4b042b8bb232b8390be3079030de5c7354610f136ed3eb91310a44455a78df02cfcf49b2fd05d5a5aa2695460620abf1b400784715f7482ed4770d40a68b2 - languageName: node - linkType: hard - -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 - languageName: node - linkType: hard - -"cosmiconfig@npm:9.0.0": - version: 9.0.0 - resolution: "cosmiconfig@npm:9.0.0" - dependencies: - env-paths: "npm:^2.2.1" - import-fresh: "npm:^3.3.0" - js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.2.0" - peerDependencies: - typescript: ">=4.9.5" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee - languageName: node - linkType: hard - -"cpu-features@npm:~0.0.10": - version: 0.0.10 - resolution: "cpu-features@npm:0.0.10" - dependencies: - buildcheck: "npm:~0.0.6" - nan: "npm:^2.19.0" - node-gyp: "npm:latest" - checksum: 10c0/0c4a12904657b22477ffbcfd2b4b2bdd45b174f283616b18d9e1ade495083f9f6098493feb09f4ae2d0b36b240f9ecd32cfb4afe210cf0d0f8f0cc257bd58e54 - languageName: node - linkType: hard - -"credentials-context@npm:^1.0.0": - version: 1.0.0 - resolution: "credentials-context@npm:1.0.0" - checksum: 10c0/ceefd9cba384fed7e2cfe85d8e9fee15da27ef8989ddcecb7cc8a678fa83d691e834100cf0280deb52349f09f5da1fb3b3ba144404faeabea44b0130651ac74d - languageName: node - linkType: hard - -"cron-parser@npm:^2.13.0": - version: 2.18.0 - resolution: "cron-parser@npm:2.18.0" - dependencies: - is-nan: "npm:^1.3.0" - moment-timezone: "npm:^0.5.31" - checksum: 10c0/1361cf0af8a749a355c7dd45ec85d94f8b1b768e6ce19955fea38d72b22874c0c63add070a1fe543a4ee4fa5229b6ae43760934df0d4aed6499581108657df25 - languageName: node - linkType: hard - -"cron-parser@npm:^4.2.0, cron-parser@npm:^4.2.1, cron-parser@npm:^4.3.0": - version: 4.9.0 - resolution: "cron-parser@npm:4.9.0" - dependencies: - luxon: "npm:^3.2.1" - checksum: 10c0/348622bdcd1a15695b61fc33af8a60133e5913a85cf99f6344367579e7002896514ba3b0a9d6bb569b02667d6b06836722bf2295fcd101b3de378f71d37bed0b - languageName: node - linkType: hard - -"cron@npm:^1.8.2": - version: 1.8.3 - resolution: "cron@npm:1.8.3" - dependencies: - luxon: "npm:^1.23.x" - checksum: 10c0/f3cd0960c34bebe8ac70404120ad1822bceb4cca216b0951a997e5a673c8b140d73b567633248485811cfced99926cdf4ff624e067cf26ec72d5cfce06f0468c - languageName: node - linkType: hard - -"cron@npm:^4.1.4": - version: 4.3.0 - resolution: "cron@npm:4.3.0" - dependencies: - "@types/luxon": "npm:~3.6.0" - luxon: "npm:~3.6.0" - checksum: 10c0/859805a56ce6af19177a0abff3688e917d2124c0fa086234333d20fd4ca6efe333af2ab4ba6ba06c3aa68c6b2eec30e375c795e97e735c70fcac126057332f10 - languageName: node - linkType: hard - -"cross-fetch@npm:^3.0.5, cross-fetch@npm:^3.0.6": - version: 3.2.0 - resolution: "cross-fetch@npm:3.2.0" - dependencies: - node-fetch: "npm:^2.7.0" - checksum: 10c0/d8596adf0269130098a676f6739a0922f3cc7b71cc89729925411ebe851a87026171c82ea89154c4811c9867c01c44793205a52e618ce2684650218c7fbeeb9f - languageName: node - linkType: hard - -"cross-spawn@npm:^5.1.0": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: "npm:^4.0.1" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10c0/1918621fddb9f8c61e02118b2dbf81f611ccd1544ceaca0d026525341832b8511ce2504c60f935dbc06b35e5ef156fe8c1e72708c27dd486f034e9c0e1e07201 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"crypto-ld@npm:^3.7.0": - version: 3.9.0 - resolution: "crypto-ld@npm:3.9.0" - dependencies: - base64url-universal: "npm:^1.0.1" - bs58: "npm:^4.0.1" - node-forge: "npm:~0.10.0" - semver: "npm:^6.2.0" - sodium-native: "npm:^3.2.0" - dependenciesMeta: - sodium-native: - optional: true - checksum: 10c0/78fd545e802db3b0ade0bacf177dde7c52dd24d801faca79a7b5b7d6226d114db7fc1307397ff119798709376d28c3271e08e457723720c141ab4f50e47473e1 - languageName: node - linkType: hard - -"crypto-ld@npm:^7.0.0": - version: 7.0.0 - resolution: "crypto-ld@npm:7.0.0" - checksum: 10c0/67fac3bf5c52d71e02ae436a305f223376746cb43d2aa6550764d2885e15e8802267c8fd6a451c4255b90b58eeab1c036b6ee6e88f21425620a3d5ecc8b36d92 - languageName: node - linkType: hard - -"css-select@npm:~1.0.0": - version: 1.0.0 - resolution: "css-select@npm:1.0.0" - dependencies: - boolbase: "npm:~1.0.0" - css-what: "npm:1.0" - domutils: "npm:1.4" - nth-check: "npm:~1.0.0" - checksum: 10c0/2311812bb619d39263f620a7f5f3900c08cc25a5a0817b76e6f677dbe5b062a434cdac7f5de0bfc025cd249de53c509ddc87c77c62c99466b2a891f7df935338 - languageName: node - linkType: hard - -"css-select@npm:~1.2.0": - version: 1.2.0 - resolution: "css-select@npm:1.2.0" - dependencies: - boolbase: "npm:~1.0.0" - css-what: "npm:2.1" - domutils: "npm:1.5.1" - nth-check: "npm:~1.0.1" - checksum: 10c0/16e91cd4a8606e76eb2d93ded43e2d20fe315effa7e1dedf16e81fab5c6bbd18b394f78cb59c04e2dddc7d4c68e31a0617b7f4f196dff48398cf3ac83e78475c - languageName: node - linkType: hard - -"css-what@npm:1.0": - version: 1.0.0 - resolution: "css-what@npm:1.0.0" - checksum: 10c0/dbcba5c7251e11643fd531d6cfd625007ac147485c1004d8a9e6c2d768ab43ab1f2f57da5f73df235990cd30d2d80fdb64d54f4c943baec460a2b2beaf646808 - languageName: node - linkType: hard - -"css-what@npm:2.1": - version: 2.1.3 - resolution: "css-what@npm:2.1.3" - checksum: 10c0/4f1a25855be8bdfebdd431ccb084f6481951408dbf076eebf7a1c045ae45dd5651b32fe55deaa16a59e98eb25d5bb066dcf6bdff7aa3cc2ed5bdbe5fe1aa7fd7 - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - -"dargs@npm:^7.0.0": - version: 7.0.0 - resolution: "dargs@npm:7.0.0" - checksum: 10c0/ec7f6a8315a8fa2f8b12d39207615bdf62b4d01f631b96fbe536c8ad5469ab9ed710d55811e564d0d5c1d548fc8cb6cc70bf0939f2415790159f5a75e0f96c92 - languageName: node - linkType: hard - -"dashdash@npm:^1.12.0": - version: 1.14.1 - resolution: "dashdash@npm:1.14.1" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a - languageName: node - linkType: hard - -"dashify@npm:^2.0.0": - version: 2.0.0 - resolution: "dashify@npm:2.0.0" - checksum: 10c0/b9ab76cbd9739b6dba4359083cc9a670e6a0876f90ab3409b9984cf386b82a28a89009afe15d13ce62f97bc84ce49be2fe85f3a6791481a8d31e962cd0f0e710 - languageName: node - linkType: hard - -"data-uri-to-buffer@npm:^4.0.0": - version: 4.0.1 - resolution: "data-uri-to-buffer@npm:4.0.1" - checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b - languageName: node - linkType: hard - -"data-view-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-buffer@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.2" - checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c - languageName: node - linkType: hard - -"data-view-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-byte-length@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.2" - checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 - languageName: node - linkType: hard - -"data-view-byte-offset@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-offset@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 - languageName: node - linkType: hard - -"datauri@npm:^2.0.0": - version: 2.0.0 - resolution: "datauri@npm:2.0.0" - dependencies: - image-size: "npm:^0.7.3" - mimer: "npm:^1.0.0" - checksum: 10c0/3f70d6e51585657d12dc4e2342623998fc227b2464d87b25d440e2c6e996a1f67647d59025d3978ba1a38a24719d7eb3cd1656d3287ef93d9fe87b80aefded79 - languageName: node - linkType: hard - -"dateformat@npm:^3.0.3": - version: 3.0.3 - resolution: "dateformat@npm:3.0.3" - checksum: 10c0/2effb8bef52ff912f87a05e4adbeacff46353e91313ad1ea9ed31412db26849f5a0fcc7e3ce36dbfb84fc6c881a986d5694f84838ad0da7000d5150693e78678 - languageName: node - linkType: hard - -"debug@npm:2.6.9, debug@npm:^2.2.0": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: "npm:2.0.0" - checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7": - version: 4.4.0 - resolution: "debug@npm:4.4.0" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de - languageName: node - linkType: hard - -"debug@npm:^3.1.0, debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: "npm:^2.1.1" - checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a - languageName: node - linkType: hard - -"debug@npm:^4.4.1": - version: 4.4.1 - resolution: "debug@npm:4.4.1" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 - languageName: node - linkType: hard - -"debuglog@npm:^1.0.0": - version: 1.0.1 - resolution: "debuglog@npm:1.0.1" - checksum: 10c0/d98ac9abe6a528fcbb4d843b1caf5a9116998c76e1263d8ff4db2c086aa96fa7ea4c752a81050fa2e4304129ef330e6e4dc9dd4d47141afd7db80bf699f08219 - languageName: node - linkType: hard - -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: "npm:^1.1.0" - map-obj: "npm:^1.0.0" - checksum: 10c0/4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d - languageName: node - linkType: hard - -"decamelize@npm:^1.1.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"decompress-response@npm:^6.0.0": - version: 6.0.0 - resolution: "decompress-response@npm:6.0.0" - dependencies: - mimic-response: "npm:^3.1.0" - checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e - languageName: node - linkType: hard - -"dedent@npm:1.5.3": - version: 1.5.3 - resolution: "dedent@npm:1.5.3" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 - languageName: node - linkType: hard - -"dedent@npm:^1.6.0": - version: 1.6.0 - resolution: "dedent@npm:1.6.0" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/671b8f5e390dd2a560862c4511dd6d2638e71911486f78cb32116551f8f2aa6fcaf50579ffffb2f866d46b5b80fd72470659ca5760ede8f967619ef7df79e8a5 - languageName: node - linkType: hard - -"deep-extend@npm:^0.5.1": - version: 0.5.1 - resolution: "deep-extend@npm:0.5.1" - checksum: 10c0/a0b86d1ff2d62b7fe531a568bf5fef3f9fe477ada35e3d97310ab989cb588acde607283ef587a4552eaf05c3491045536ddf5741021523574d93de472c61d24f - languageName: node - linkType: hard - -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: "npm:^1.0.2" - checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a - languageName: node - linkType: hard - -"defer-to-connect@npm:^2.0.0": - version: 2.0.1 - resolution: "defer-to-connect@npm:2.0.1" - checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 - languageName: node - linkType: hard - -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.0.1" - checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 - languageName: node - linkType: hard - -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - object-keys: "npm:^1.1.1" - checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 - languageName: node - linkType: hard - -"denque@npm:^1.1.0": - version: 1.5.1 - resolution: "denque@npm:1.5.1" - checksum: 10c0/9e6fc1a63e1c9ded38325290302fef40e5ad28471ad8c66d68eaea623ef847bd25fc75a7c3f47396206dc967922615999066470a364e1786f2758d61337872b7 - languageName: node - linkType: hard - -"depd@npm:2.0.0, depd@npm:~2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c - languageName: node - linkType: hard - -"deprecation@npm:^2.0.0": - version: 2.3.1 - resolution: "deprecation@npm:2.3.1" - checksum: 10c0/23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032 - languageName: node - linkType: hard - -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 - languageName: node - linkType: hard - -"detect-indent@npm:^5.0.0": - version: 5.0.0 - resolution: "detect-indent@npm:5.0.0" - checksum: 10c0/58d985dd5b4d5e5aad6fe7d8ecc74538fa92c807c894794b8505569e45651bf01a38755b65d9d3d17e512239a26d3131837cbef43cf4226968d5abf175bbcc9d - languageName: node - linkType: hard - -"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": - version: 2.0.3 - resolution: "detect-libc@npm:2.0.3" - checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 - languageName: node - linkType: hard - -"detect-newline@npm:^3.1.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d - languageName: node - linkType: hard - -"dicer@npm:0.3.0": - version: 0.3.0 - resolution: "dicer@npm:0.3.0" - dependencies: - streamsearch: "npm:0.1.2" - checksum: 10c0/4486f0448233145216cfadd5f6bbb4c26c3a28824da5344322b06051632e99d6af2b44f893fa8b30f1749ad175b4e565d301c760d0437226d9e41ccdb6546f35 - languageName: node - linkType: hard - -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 - languageName: node - linkType: hard - -"doctypes@npm:^1.1.0": - version: 1.1.0 - resolution: "doctypes@npm:1.1.0" - checksum: 10c0/b3f9d597ad8b9ac6aeba9d64df61f0098174f7570e3d34f7ee245ebc736c7bee122d9738a18e22010b98983fd9a340d63043d3841f02d8a7742a2d96d2c72610 - languageName: node - linkType: hard - -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: "npm:^2.0.1" - entities: "npm:^2.0.0" - checksum: 10c0/5cb595fb77e1a23eca56742f47631e6f4af66ce1982c7ed28b3d0ef21f1f50304c067adc29d3eaf824c572be022cee88627d0ac9b929408f24e923f3c7bed37b - languageName: node - linkType: hard - -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.2.0" - entities: "npm:^2.0.0" - checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 - languageName: node - linkType: hard - -"dom-serializer@npm:^2.0.0": - version: 2.0.0 - resolution: "dom-serializer@npm:2.0.0" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.2" - entities: "npm:^4.2.0" - checksum: 10c0/d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 - languageName: node - linkType: hard - -"dom-serializer@npm:~0.1.0": - version: 0.1.1 - resolution: "dom-serializer@npm:0.1.1" - dependencies: - domelementtype: "npm:^1.3.0" - entities: "npm:^1.1.1" - checksum: 10c0/bb710d0a49dbe7b1019e8bf314102495e8894b9da188d00187c0ac52939ded630bc5f9eacc97bfa462d535cd321c734c0b02fefd5e4d93162ab886dccc6666f3 - languageName: node - linkType: hard - -"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 10c0/6d4f5761060a21eaf3c96545501e9d188745c7e1c31b8d141bf15d8748feeadba868f4ea32877751b8678b286fb1afbe6ae905ca3fb8f0214d8322e482cdbec0 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 - languageName: node - linkType: hard - -"domhandler@npm:2.3": - version: 2.3.0 - resolution: "domhandler@npm:2.3.0" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/f434a1c08392821751b85081fd8ff11b17d7fd6e5da59335af87ee038b816be24d35a12f45d85034e3e137158beb031d5a3df21fcd05a7dd4490e2f01a6d0e82 - languageName: node - linkType: hard - -"domhandler@npm:^2.3.0": - version: 2.4.2 - resolution: "domhandler@npm:2.4.2" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/6670cab73e97e3c6771dcf22b537db3f6a0be0ad6b370f03bb5f1b585d3b563d326787fdabe1190b7ca9d81c804e9b3f8a1431159c27c44f6c05f94afa92be2d - languageName: node - linkType: hard - -"domhandler@npm:^3.0.0": - version: 3.3.0 - resolution: "domhandler@npm:3.3.0" - dependencies: - domelementtype: "npm:^2.0.1" - checksum: 10c0/376e6462a6144121f6ae50c9c1b8e0b22d2e0c68f9fb2ef6e57a5f4f9395854b1258cb638c58b171ee291359a5f41a4a57f403954db976484a59ffcee4c1e405 - languageName: node - linkType: hard - -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: "npm:^2.2.0" - checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b - languageName: node - linkType: hard - -"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": - version: 5.0.3 - resolution: "domhandler@npm:5.0.3" - dependencies: - domelementtype: "npm:^2.3.0" - checksum: 10c0/bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a - languageName: node - linkType: hard - -"domutils@npm:1.4": - version: 1.4.3 - resolution: "domutils@npm:1.4.3" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/ce345ccc3a964aa6f5415a4fd9b3a11db743e8ac5c4383d7ad3dd53fe7a8f23ee03dca580209d8005f49261ddab976082bcd5652e913bcb6044b8c959fb5401b - languageName: node - linkType: hard - -"domutils@npm:1.5, domutils@npm:1.5.1": - version: 1.5.1 - resolution: "domutils@npm:1.5.1" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10c0/8707a18c974be54d33fd846d174d523ddf4955b2fcc1ec713cbe6ff490f60da22106b153fea6269332477eb81dc1a25a83f5b2afaf78b6dc9e2161fd7b80f7ba - languageName: node - linkType: hard - -"domutils@npm:^1.5.1": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10c0/437fcd2d6d6be03f488152e73c6f953e289c58496baa22be9626b2b46f9cfd40486ae77d144487ff6b102929a3231cdb9a8bf8ef485fb7b7c30c985daedc77eb - languageName: node - linkType: hard - -"domutils@npm:^2.0.0, domutils@npm:^2.5.2, domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: "npm:^1.0.1" - domelementtype: "npm:^2.2.0" - domhandler: "npm:^4.2.0" - checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db - languageName: node - linkType: hard - -"domutils@npm:^3.0.1": - version: 3.2.2 - resolution: "domutils@npm:3.2.2" - dependencies: - dom-serializer: "npm:^2.0.0" - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - checksum: 10c0/47938f473b987ea71cd59e59626eb8666d3aa8feba5266e45527f3b636c7883cca7e582d901531961f742c519d7514636b7973353b648762b2e3bedbf235fada - languageName: node - linkType: hard - -"dot-prop@npm:^5.1.0": - version: 5.3.0 - resolution: "dot-prop@npm:5.3.0" - dependencies: - is-obj: "npm:^2.0.0" - checksum: 10c0/93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 - languageName: node - linkType: hard - -"dotenv-expand@npm:~10.0.0": - version: 10.0.0 - resolution: "dotenv-expand@npm:10.0.0" - checksum: 10c0/298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e - languageName: node - linkType: hard - -"dotenv-expand@npm:~11.0.6": - version: 11.0.7 - resolution: "dotenv-expand@npm:11.0.7" - dependencies: - dotenv: "npm:^16.4.5" - checksum: 10c0/d80b8a7be085edf351270b96ac0e794bc3ddd7f36157912939577cb4d33ba6492ebee349d59798b71b90e36f498d24a2a564fb4aa00073b2ef4c2a3a49c467b1 - languageName: node - linkType: hard - -"dotenv-flow@npm:^3.1.0": - version: 3.3.0 - resolution: "dotenv-flow@npm:3.3.0" - dependencies: - dotenv: "npm:^8.6.0" - checksum: 10c0/64f367f66532bdd2abad84360ff37668d8718e9362b442ba293ed518b573449c6e8d15e3e50001f7bac4f2c932287a5c8c5e98435b252f230f67bcc30cd27b87 - languageName: node - linkType: hard - -"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": - version: 16.4.7 - resolution: "dotenv@npm:16.4.7" - checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462 - languageName: node - linkType: hard - -"dotenv@npm:^8.6.0": - version: 8.6.0 - resolution: "dotenv@npm:8.6.0" - checksum: 10c0/6750431dea8efbd54b9f2d9681b04e1ccc7989486461dcf058bb708d9e3d63b04115fcdf8840e38ad1e24a4a2e1e7c1560626c5e3ac7bc09371b127c49e2d45f - languageName: node - linkType: hard - -"dotenv@npm:~16.3.1": - version: 16.3.2 - resolution: "dotenv@npm:16.3.2" - checksum: 10c0/a87d62cef0810b670cb477db1a24a42a093b6b428c9e65c185ce1d6368ad7175234b13547718ba08da18df43faae4f814180cc0366e11be1ded2277abc4dd22e - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"duplexer@npm:^0.1.1": - version: 0.1.2 - resolution: "duplexer@npm:0.1.2" - checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"ecc-jsbn@npm:~0.1.1": - version: 0.1.2 - resolution: "ecc-jsbn@npm:0.1.2" - dependencies: - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.1.0" - checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 - languageName: node - linkType: hard - -"ecdsa-sig-formatter@npm:1.0.11": - version: 1.0.11 - resolution: "ecdsa-sig-formatter@npm:1.0.11" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c - languageName: node - linkType: hard - -"ed25519-signature-2018-context@npm:^1.1.0": - version: 1.1.0 - resolution: "ed25519-signature-2018-context@npm:1.1.0" - checksum: 10c0/c0fb62dd448de59f9cb45ac55f026b793b8da9c0dbe83014d0ddf73d50ea78e37e6bf88b9445f2301a6ead3a42031ef5839f625e3186169d07897e19a056de7c - languageName: node - linkType: hard - -"ed25519-signature-2020-context@npm:^1.1.0": - version: 1.1.0 - resolution: "ed25519-signature-2020-context@npm:1.1.0" - checksum: 10c0/7e5fba0ad8c1979412c45439654c0e1ac05372305760ad7c53e6b8d9a8106ed2f109e57ef19a7f0b23ea0efd69fee9c045d38280d18be11ef3dd68a433e55c46 - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 - languageName: node - linkType: hard - -"ejs@npm:^3.1.7": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.173": - version: 1.5.194 - resolution: "electron-to-chromium@npm:1.5.194" - checksum: 10c0/7d72617857055d54552380b34be411933966fa1156dc8653e321d14e82e2af84114bac607e9e2926f885d560b2697a324981e4204d3da4e0f9604d4a468eeba1 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.73": - version: 1.5.84 - resolution: "electron-to-chromium@npm:1.5.84" - checksum: 10c0/8362d556360eba420ea3475a7878c8fa8507a42c4ebfbf44108f6acc4edbe30a1cde79e95613bdc9ae6e7d73bf1776347cf7f615c1a220f63e34a0fa029568e0 - languageName: node - linkType: hard - -"email-templates@npm:^2.7.1": - version: 2.7.1 - resolution: "email-templates@npm:2.7.1" - dependencies: - bluebird: "npm:^3.0.0" - consolidate: "npm:^0.14.2" - debug: "npm:^2.2.0" - glob: "npm:^6.0.0" - juice: "npm:^4.1.0" - lodash: "npm:^4.0.1" - checksum: 10c0/dad652679e8da4ae47a86fa8d7bcd708fab4aa866b4a397605b7f55a437d2cf8b3b05d9dc4a04d39d2773364d09fe17e092b1e9b3673eb8c1f9d97735b4607d0 - languageName: node - linkType: hard - -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec - languageName: node - linkType: hard - -"encodeurl@npm:~2.0.0": - version: 2.0.0 - resolution: "encodeurl@npm:2.0.0" - checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: "npm:^1.4.0" - checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.15.0": - version: 5.18.0 - resolution: "enhanced-resolve@npm:5.18.0" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10c0/5fcc264a6040754ab5b349628cac2bb5f89cee475cbe340804e657a5b9565f70e6aafb338d5895554eb0ced9f66c50f38a255274a0591dcb64ee17c549c459ce - languageName: node - linkType: hard - -"enquirer@npm:~2.3.6": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: "npm:^4.1.1" - checksum: 10c0/8e070e052c2c64326a2803db9084d21c8aaa8c688327f133bf65c4a712586beb126fd98c8a01cfb0433e82a4bd3b6262705c55a63e0f7fb91d06b9cedbde9a11 - languageName: node - linkType: hard - -"entities@npm:1.0": - version: 1.0.0 - resolution: "entities@npm:1.0.0" - checksum: 10c0/fd382add860bab507c942a054ef98445028bf988d16f53cbae24c70533c280d4ea116a5bc6308f6ca66901818faf4f495316f9873c6337af7cffaaf3859da407 - languageName: node - linkType: hard - -"entities@npm:^1.1.1, entities@npm:~1.1.1": - version: 1.1.2 - resolution: "entities@npm:1.1.2" - checksum: 10c0/5b12fa8c4fb942f88af6f8791bbe7be0a59ebd91c8933cee091d94455efd1eeb200418c7b1bc8dd0f74cdd4db8cf4538eb043db14cfd1919130c25d8c6095215 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 - languageName: node - linkType: hard - -"entities@npm:^3.0.1": - version: 3.0.1 - resolution: "entities@npm:3.0.1" - checksum: 10c0/2d93f48fd86de0b0ed8ee34456aa47b4e74a916a5e663cfcc7048302e2c7e932002926daf5a00ad6d5691e3c90673a15d413704d86d7e1b9532f9bc00d975590 - languageName: node - linkType: hard - -"entities@npm:^4.2.0, entities@npm:^4.4.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"envinfo@npm:7.13.0": - version: 7.13.0 - resolution: "envinfo@npm:7.13.0" - bin: - envinfo: dist/cli.js - checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce - languageName: node - linkType: hard - -"es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9": - version: 1.23.9 - resolution: "es-abstract@npm:1.23.9" - dependencies: - array-buffer-byte-length: "npm:^1.0.2" - arraybuffer.prototype.slice: "npm:^1.0.4" - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - data-view-buffer: "npm:^1.0.2" - data-view-byte-length: "npm:^1.0.2" - data-view-byte-offset: "npm:^1.0.1" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-set-tostringtag: "npm:^2.1.0" - es-to-primitive: "npm:^1.3.0" - function.prototype.name: "npm:^1.1.8" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.0" - get-symbol-description: "npm:^1.1.0" - globalthis: "npm:^1.0.4" - gopd: "npm:^1.2.0" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - internal-slot: "npm:^1.1.0" - is-array-buffer: "npm:^3.0.5" - is-callable: "npm:^1.2.7" - is-data-view: "npm:^1.0.2" - is-regex: "npm:^1.2.1" - is-shared-array-buffer: "npm:^1.0.4" - is-string: "npm:^1.1.1" - is-typed-array: "npm:^1.1.15" - is-weakref: "npm:^1.1.0" - math-intrinsics: "npm:^1.1.0" - object-inspect: "npm:^1.13.3" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.7" - own-keys: "npm:^1.0.1" - regexp.prototype.flags: "npm:^1.5.3" - safe-array-concat: "npm:^1.1.3" - safe-push-apply: "npm:^1.0.0" - safe-regex-test: "npm:^1.1.0" - set-proto: "npm:^1.0.0" - string.prototype.trim: "npm:^1.2.10" - string.prototype.trimend: "npm:^1.0.9" - string.prototype.trimstart: "npm:^1.0.8" - typed-array-buffer: "npm:^1.0.3" - typed-array-byte-length: "npm:^1.0.3" - typed-array-byte-offset: "npm:^1.0.4" - typed-array-length: "npm:^1.0.7" - unbox-primitive: "npm:^1.1.0" - which-typed-array: "npm:^1.1.18" - checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b - languageName: node - linkType: hard - -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 10c0/4b7617d3fbd460d6f051f684ceca6cf7e88e6724671d9480388d3ecdd72119ddaa46ca31f2c69c5426a82e4b3091c1e81867c71dcdc453565cd90005ff2c382d - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.0.0, es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.5.3": - version: 1.6.0 - resolution: "es-module-lexer@npm:1.6.0" - checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.2": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" - dependencies: - hasown: "npm:^2.0.0" - checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.3.0": - version: 1.3.0 - resolution: "es-to-primitive@npm:1.3.0" - dependencies: - is-callable: "npm:^1.2.7" - is-date-object: "npm:^1.0.5" - is-symbol: "npm:^1.0.4" - checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b - languageName: node - linkType: hard - -"es6-error@npm:^4.1.1": - version: 4.1.1 - resolution: "es6-error@npm:4.1.1" - checksum: 10c0/357663fb1e845c047d548c3d30f86e005db71e122678f4184ced0693f634688c3f3ef2d7de7d4af732f734de01f528b05954e270f06aa7d133679fb9fe6600ef - languageName: node - linkType: hard - -"escalade@npm:^3.1.1, escalade@npm:^3.2.0": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 - languageName: node - linkType: hard - -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - -"eslint-config-airbnb-base@npm:^15.0.0": - version: 15.0.0 - resolution: "eslint-config-airbnb-base@npm:15.0.0" - dependencies: - confusing-browser-globals: "npm:^1.0.10" - object.assign: "npm:^4.1.2" - object.entries: "npm:^1.1.5" - semver: "npm:^6.3.0" - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f - languageName: node - linkType: hard - -"eslint-config-airbnb@npm:^19.0.4": - version: 19.0.4 - resolution: "eslint-config-airbnb@npm:19.0.4" - dependencies: - eslint-config-airbnb-base: "npm:^15.0.0" - object.assign: "npm:^4.1.2" - object.entries: "npm:^1.1.5" - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.28.0 - eslint-plugin-react-hooks: ^4.3.0 - checksum: 10c0/867feeda45c4b480b1b8eff8fabc1bb107e837da8b48e5039e0c175ae6ad34af383b1924fc163bbfcef24a324e6651b1515e5bd12cbcbb19535a8838e2544a02 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^9.1.0": - version: 9.1.0 - resolution: "eslint-config-prettier@npm:9.1.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: "npm:^3.2.7" - is-core-module: "npm:^2.13.0" - resolve: "npm:^1.22.4" - checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 - languageName: node - linkType: hard - -"eslint-import-resolver-typescript@npm:^3.6.1": - version: 3.7.0 - resolution: "eslint-import-resolver-typescript@npm:3.7.0" - dependencies: - "@nolyfill/is-core-module": "npm:1.0.39" - debug: "npm:^4.3.7" - enhanced-resolve: "npm:^5.15.0" - fast-glob: "npm:^3.3.2" - get-tsconfig: "npm:^4.7.5" - is-bun-module: "npm:^1.0.2" - is-glob: "npm:^4.0.3" - stable-hash: "npm:^0.0.4" - peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - eslint-plugin-import-x: "*" - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - checksum: 10c0/b1dec542a31486b3b5730f71f08a8ee2ac4915dbc4aa1493fd15bc8fcadcb029772ab39a425824c235045b3a7e629290a339d4a7e7f3dd32b24e715106352d40 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.12.0": - version: 2.12.0 - resolution: "eslint-module-utils@npm:2.12.0" - dependencies: - debug: "npm:^3.2.7" - peerDependenciesMeta: - eslint: - optional: true - checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 - languageName: node - linkType: hard - -"eslint-plugin-es@npm:^3.0.0": - version: 3.0.1 - resolution: "eslint-plugin-es@npm:3.0.1" - dependencies: - eslint-utils: "npm:^2.0.0" - regexpp: "npm:^3.0.0" - peerDependencies: - eslint: ">=4.19.1" - checksum: 10c0/12ae730aa9603e680af048e1653aac15e529411b68b8d0da6e290700b17c695485af7c3f5360f531f80970786cab7288c2c1d4a58c35ec1bb89649897c016c4a - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.29.1": - version: 2.31.0 - resolution: "eslint-plugin-import@npm:2.31.0" - dependencies: - "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.8" - array.prototype.findlastindex: "npm:^1.2.5" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" - debug: "npm:^3.2.7" - doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.0" - hasown: "npm:^2.0.2" - is-core-module: "npm:^2.15.1" - is-glob: "npm:^4.0.3" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.0" - semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.8" - tsconfig-paths: "npm:^3.15.0" - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a - languageName: node - linkType: hard - -"eslint-plugin-jest@npm:^27.9.0": - version: 27.9.0 - resolution: "eslint-plugin-jest@npm:27.9.0" - dependencies: - "@typescript-eslint/utils": "npm:^5.10.0" - peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: "*" - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 10c0/b8b09f7d8ba3d84a8779a6e95702a6e4dce45ab034e4edf5ddb631e77cd38dcdf791dfd9228e0a0d1d80d1eb2d278deb62ad2ec39f10fb8fd43cec07304e0c38 - languageName: node - linkType: hard - -"eslint-plugin-jsdoc@npm:^48.2.1": - version: 48.11.0 - resolution: "eslint-plugin-jsdoc@npm:48.11.0" - dependencies: - "@es-joy/jsdoccomment": "npm:~0.46.0" - are-docs-informative: "npm:^0.0.2" - comment-parser: "npm:1.4.1" - debug: "npm:^4.3.5" - escape-string-regexp: "npm:^4.0.0" - espree: "npm:^10.1.0" - esquery: "npm:^1.6.0" - parse-imports: "npm:^2.1.1" - semver: "npm:^7.6.3" - spdx-expression-parse: "npm:^4.0.0" - synckit: "npm:^0.9.1" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/f78bac109e62f838c14f90ebd572a06a865f2896a16201c9324cb92be25b5ba8deb54ee1d8ea36232ee53a41c177d5d5ac80662c0fe2479d1e1e1e7633385659 - languageName: node - linkType: hard - -"eslint-plugin-node@npm:^11.1.0": - version: 11.1.0 - resolution: "eslint-plugin-node@npm:11.1.0" - dependencies: - eslint-plugin-es: "npm:^3.0.0" - eslint-utils: "npm:^2.0.0" - ignore: "npm:^5.1.1" - minimatch: "npm:^3.0.4" - resolve: "npm:^1.10.1" - semver: "npm:^6.1.0" - peerDependencies: - eslint: ">=5.16.0" - checksum: 10c0/c7716adac4020cb852fd2410dcd8bdb13a227004de77f96d7f9806d0cf2274f24e0920a7ca73bcd72d90003696c1f17fdd9fe3ca218e64ee03dc2b840e4416fa - languageName: node - linkType: hard - -"eslint-plugin-prettier@npm:^5.1.3": - version: 5.2.3 - resolution: "eslint-plugin-prettier@npm:5.2.3" - dependencies: - prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.9.1" - peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" - peerDependenciesMeta: - "@types/eslint": - optional: true - eslint-config-prettier: - optional: true - checksum: 10c0/60d9c03491ec6080ac1d71d0bee1361539ff6beb9b91ac98cfa7176c9ed52b7dbe7119ebee5b441b479d447d17d802a4a492ee06095ef2f22c460e3dd6459302 - languageName: node - linkType: hard - -"eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^4.1.1" - checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 - languageName: node - linkType: hard - -"eslint-utils@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" - dependencies: - eslint-visitor-keys: "npm:^1.1.0" - checksum: 10c0/69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^1.1.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 - languageName: node - linkType: hard - -"eslint@npm:^8.2.0": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.1" - "@humanwhocodes/config-array": "npm:^0.13.0" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" - bin: - eslint: bin/eslint.js - checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 - languageName: node - linkType: hard - -"espree@npm:^10.1.0": - version: 10.3.0 - resolution: "espree@npm:10.3.0" - dependencies: - acorn: "npm:^8.14.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2, esquery@npm:^1.6.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 - languageName: node - linkType: hard - -"etag@npm:^1.8.1, etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 - languageName: node - linkType: hard - -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b - languageName: node - linkType: hard - -"eventemitter2@npm:^6.4.9": - version: 6.4.9 - resolution: "eventemitter2@npm:6.4.9" - checksum: 10c0/b2adf7d9f1544aa2d95ee271b0621acaf1e309d85ebcef1244fb0ebc7ab0afa6ffd5e371535d0981bc46195ad67fd6ff57a8d1db030584dee69aa5e371a27ea7 - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.4": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b - languageName: node - linkType: hard - -"events@npm:^3.3.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 - languageName: node - linkType: hard - -"execa@npm:5.0.0": - version: 5.0.0 - resolution: "execa@npm:5.0.0" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/e110add7ca0de63aea415385ebad7236c8de281d5d9a916dbd69f59009dac3d5d631e6252c2ea5d0258220b0d22acf25649b2caf05fa162eaa1401339fc69ba4 - languageName: node - linkType: hard - -"execa@npm:^5.1.1": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f - languageName: node - linkType: hard - -"exit-x@npm:^0.2.2": - version: 0.2.2 - resolution: "exit-x@npm:0.2.2" - checksum: 10c0/212a7a095ca5540e9581f1ef2d1d6a40df7a6027c8cc96e78ce1d16b86d1a88326d4a0eff8dff2b5ec1e68bb0c1edd5d0dfdde87df1869bf7514d4bc6a5cbd72 - languageName: node - linkType: hard - -"expand-template@npm:^2.0.3": - version: 2.0.3 - resolution: "expand-template@npm:2.0.3" - checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 - languageName: node - linkType: hard - -"expect-type@npm:^1.2.2": - version: 1.2.2 - resolution: "expect-type@npm:1.2.2" - checksum: 10c0/6019019566063bbc7a690d9281d920b1a91284a4a093c2d55d71ffade5ac890cf37a51e1da4602546c4b56569d2ad2fc175a2ccee77d1ae06cb3af91ef84f44b - languageName: node - linkType: hard - -"expect@npm:30.0.5, expect@npm:^30.0.0": - version: 30.0.5 - resolution: "expect@npm:30.0.5" - dependencies: - "@jest/expect-utils": "npm:30.0.5" - "@jest/get-type": "npm:30.0.1" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - checksum: 10c0/e08e4ced2856a0898b3a4e8d09aab7f8e2212cde701e41a560c3ab7e9053517947ff1a762fc425dbe0c48ed54e131aa7190de67a402f98b4e5ada23eb21c0a9f - languageName: node - linkType: hard - -"expo-server-sdk@npm:^3.4.0": - version: 3.13.0 - resolution: "expo-server-sdk@npm:3.13.0" - dependencies: - node-fetch: "npm:^2.6.0" - promise-limit: "npm:^2.7.0" - promise-retry: "npm:^2.0.1" - checksum: 10c0/08fbebd2d6a38ff9af37c9dc0a3d9a33c16dff6908078716cd887fbf8d08d50167d9fa4ec7713e452935c6ede8f29233d533b166e91118eb0db56280282645f4 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 - languageName: node - linkType: hard - -"express-session@npm:^1.17.0": - version: 1.18.1 - resolution: "express-session@npm:1.18.1" - dependencies: - cookie: "npm:0.7.2" - cookie-signature: "npm:1.0.7" - debug: "npm:2.6.9" - depd: "npm:~2.0.0" - on-headers: "npm:~1.0.2" - parseurl: "npm:~1.3.3" - safe-buffer: "npm:5.2.1" - uid-safe: "npm:~2.1.5" - checksum: 10c0/7999f128df1528430044c97bb1aac95093afaee86c5fa54b2890c4aad9898d79745301f8c90c2df057d6dfe7af7f8ee220340bf5eb53dca5eff37e52cc2fbec7 - languageName: node - linkType: hard - -"extend@npm:^3.0.0, extend@npm:~3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 - languageName: node - linkType: hard - -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"extsprintf@npm:1.3.0": - version: 1.3.0 - resolution: "extsprintf@npm:1.3.0" - checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 - languageName: node - linkType: hard - -"extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-diff@npm:^1.1.2": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 - languageName: node - linkType: hard - -"fastest-validator@npm:^1.19.0": - version: 1.19.0 - resolution: "fastest-validator@npm:1.19.0" - checksum: 10c0/86dc0620a3cb593378f90017e45c4843a9f40442a1df84ce76cdf68f205dbf45a194aee1ed68d25391ec15ad4b23febf3e4fda9d2f6218e9655cc649beaf0d15 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.18.0 - resolution: "fastq@npm:1.18.0" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.2": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: "npm:2.1.1" - checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 - languageName: node - linkType: hard - -"fdir@npm:^6.4.4": - version: 6.4.6 - resolution: "fdir@npm:6.4.6" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 - languageName: node - linkType: hard - -"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": - version: 3.2.0 - resolution: "fetch-blob@npm:3.2.0" - dependencies: - node-domexception: "npm:^1.0.0" - web-streams-polyfill: "npm:^3.0.3" - checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 - languageName: node - linkType: hard - -"figures@npm:3.2.0, figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd - languageName: node - linkType: hard - -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: "npm:^5.0.1" - checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^2.0.0": - version: 2.1.0 - resolution: "find-up@npm:2.1.0" - dependencies: - locate-path: "npm:^2.0.0" - checksum: 10c0/c080875c9fe28eb1962f35cbe83c683796a0321899f1eed31a37577800055539815de13d53495049697d3ba313013344f843bb9401dd337a1b832be5edfc6840 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.3" - rimraf: "npm:^3.0.2" - checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 - languageName: node - linkType: hard - -"flat@npm:^5.0.2": - version: 5.0.2 - resolution: "flat@npm:5.0.2" - bin: - flat: cli.js - checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.3.2 - resolution: "flatted@npm:3.3.2" - checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6, follow-redirects@npm:^1.5.1": - version: 1.15.9 - resolution: "follow-redirects@npm:1.15.9" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: "npm:^1.1.3" - checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 - languageName: node - linkType: hard - -"forever-agent@npm:~0.6.1": - version: 0.6.1 - resolution: "forever-agent@npm:0.6.1" - checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c - languageName: node - linkType: hard - -"form-data@npm:^2.3.1": - version: 2.5.2 - resolution: "form-data@npm:2.5.2" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - safe-buffer: "npm:^5.2.1" - checksum: 10c0/af7cb13fc8423ff95fd59c62d101c84b5458a73e1e426b0bc459afbf5b93b1e447dc6c225ac31c6df59f36b209904a3f1a10b4eb9e7a17e0fe394019749142cc - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.1 - resolution: "form-data@npm:4.0.1" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - mime-types: "npm:^2.1.12" - checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"form-data@npm:~2.3.2": - version: 2.3.3 - resolution: "form-data@npm:2.3.3" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 - languageName: node - linkType: hard - -"formdata-polyfill@npm:^4.0.10": - version: 4.0.10 - resolution: "formdata-polyfill@npm:4.0.10" - dependencies: - fetch-blob: "npm:^3.1.2" - checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 - languageName: node - linkType: hard - -"formidable@npm:^1.2.0": - version: 1.2.6 - resolution: "formidable@npm:1.2.6" - checksum: 10c0/9ebc45f434785051d4ecab28be3356c7a172a112119f5dd7aafc393ab7f6a6f3baa2446e5215ce21bf094c4c24dfb4bf483117d07961862e04ad11a25b9b577b - languageName: node - linkType: hard - -"fresh@npm:0.5.2, fresh@npm:^0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a - languageName: node - linkType: hard - -"front-matter@npm:^4.0.2": - version: 4.0.2 - resolution: "front-matter@npm:4.0.2" - dependencies: - js-yaml: "npm:^3.13.1" - checksum: 10c0/7a0df5ca37428dd563c057bc17a8940481fe53876609bcdc443a02ce463c70f1842c7cb4628b80916de46a253732794b36fb6a31105db0f185698a93acee4011 - languageName: node - linkType: hard - -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 - languageName: node - linkType: hard - -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": - version: 11.3.0 - resolution: "fs-extra@npm:11.3.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a - languageName: node - linkType: hard - -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 - languageName: node - linkType: hard - -"fs-extra@npm:^9.0.1": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: "npm:^1.0.0" - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"fsevents@npm:^2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": - version: 1.1.8 - resolution: "function.prototype.name@npm:1.1.8" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - functions-have-names: "npm:^1.2.3" - hasown: "npm:^2.0.2" - is-callable: "npm:^1.2.7" - checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.3": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca - languageName: node - linkType: hard - -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: "npm:^1.0.3 || ^2.0.0" - color-support: "npm:^1.1.2" - console-control-strings: "npm:^1.0.0" - has-unicode: "npm:^2.0.1" - object-assign: "npm:^4.1.1" - signal-exit: "npm:^3.0.0" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - wide-align: "npm:^1.1.2" - checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7": - version: 1.2.7 - resolution: "get-intrinsic@npm:1.2.7" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - function-bind: "npm:^1.1.2" - get-proto: "npm:^1.0.0" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be - languageName: node - linkType: hard - -"get-pkg-repo@npm:^4.2.1": - version: 4.2.1 - resolution: "get-pkg-repo@npm:4.2.1" - dependencies: - "@hutson/parse-repository-url": "npm:^3.0.0" - hosted-git-info: "npm:^4.0.0" - through2: "npm:^2.0.0" - yargs: "npm:^16.2.0" - bin: - get-pkg-repo: src/cli.js - checksum: 10c0/1338d2e048a594da4a34e7dd69d909376d72784f5ba50963a242b4b35db77533786f618b3f6a9effdee2af20af4917a3b7cf12533b4575d7f9c163886be1fb62 - languageName: node - linkType: hard - -"get-port@npm:5.1.1, get-port@npm:^5.1.1": - version: 5.1.1 - resolution: "get-port@npm:5.1.1" - checksum: 10c0/2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c - languageName: node - linkType: hard - -"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"get-stdin@npm:^7.0.0": - version: 7.0.0 - resolution: "get-stdin@npm:7.0.0" - checksum: 10c0/84d7850d17727f14d582670c4222b167317da43b296b88717abca989b6192eb80f66ca62833d63e749b3c984f3f9113cb6794dc9ecccb29969b8162565162033 - languageName: node - linkType: hard - -"get-stream@npm:6.0.0": - version: 6.0.0 - resolution: "get-stream@npm:6.0.0" - checksum: 10c0/7cd835cb9180041e7be2cc3de236e5db9f2144515921aeb60ae78d3a46f9944439d654c2aae5b0191e41eb6e2500f0237494a2e6c0790367183f788d1c9f6dd6 - languageName: node - linkType: hard - -"get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" - dependencies: - pump: "npm:^3.0.0" - checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.1.0": - version: 1.1.0 - resolution: "get-symbol-description@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b - languageName: node - linkType: hard - -"get-tsconfig@npm:^4.7.5": - version: 4.9.0 - resolution: "get-tsconfig@npm:4.9.0" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/b1b83a2f65aa589cd99036c21de928bea7424be6575a2736cb4de5fb5760c874d64ac69809f4691c1262a4e3c72c646fd2cb758e406acbff7f37ee86301943ee - languageName: node - linkType: hard - -"getpass@npm:^0.1.1": - version: 0.1.7 - resolution: "getpass@npm:0.1.7" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f - languageName: node - linkType: hard - -"git-raw-commits@npm:^3.0.0": - version: 3.0.0 - resolution: "git-raw-commits@npm:3.0.0" - dependencies: - dargs: "npm:^7.0.0" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - git-raw-commits: cli.js - checksum: 10c0/2a5db2e4b5b1ef7b6ecbdc175e559920a5400cbdb8d36f130aaef3588bfd74d8650b354a51ff89e0929eadbb265a00078a6291ff26248a525f0b2f079b001bf6 - languageName: node - linkType: hard - -"git-remote-origin-url@npm:^2.0.0": - version: 2.0.0 - resolution: "git-remote-origin-url@npm:2.0.0" - dependencies: - gitconfiglocal: "npm:^1.0.0" - pify: "npm:^2.3.0" - checksum: 10c0/3a846ce98ed36b2d0b801e8ec1ab299a236cfc6fa264bfdf9f42301abfdfd8715c946507fd83a10b9db449eb609ac6f8a2a341daf52e3af0000367487f486355 - languageName: node - linkType: hard - -"git-semver-tags@npm:^5.0.0": - version: 5.0.1 - resolution: "git-semver-tags@npm:5.0.1" - dependencies: - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - bin: - git-semver-tags: cli.js - checksum: 10c0/7cacba2f4ac19c0ccb8e6bb7301409376e5a2cc178692667afff453e6fe81f79b5f3f5040343e2be127a2f34977528d354de2aa32430917e90b64884debd3102 - languageName: node - linkType: hard - -"git-up@npm:^7.0.0": - version: 7.0.0 - resolution: "git-up@npm:7.0.0" - dependencies: - is-ssh: "npm:^1.4.0" - parse-url: "npm:^8.1.0" - checksum: 10c0/a3fa02e1a63c7c824b5ebbf23f4a9a6b34dd80031114c5dd8adb7ef53493642e39d3d80dfef4025a452128400c35c2c138d20a0f6ae5d7d7ef70d9ba13083d34 - languageName: node - linkType: hard - -"git-url-parse@npm:14.0.0": - version: 14.0.0 - resolution: "git-url-parse@npm:14.0.0" - dependencies: - git-up: "npm:^7.0.0" - checksum: 10c0/d360cf23c6278e302b74603f3dc490c3fe22e533d58b7f35e0295fad9af209ce5046a55950ccbf2f0d18de7931faefb4353e3f3fd3dda87fce77b409d48e0ba9 - languageName: node - linkType: hard - -"gitconfiglocal@npm:^1.0.0": - version: 1.0.0 - resolution: "gitconfiglocal@npm:1.0.0" - dependencies: - ini: "npm:^1.3.2" - checksum: 10c0/cfcb16344834113199f209f2758ced778dc30e075ddb49b5dde659b4dd2deadee824db0a1b77e1303cb594d9e8b2240da18c67705f657aa76affb444aa349005 - languageName: node - linkType: hard - -"github-from-package@npm:0.0.0": - version: 0.0.0 - resolution: "github-from-package@npm:0.0.0" - checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 - languageName: node - linkType: hard - -"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:7.1.4": - version: 7.1.4 - resolution: "glob@npm:7.1.4" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.0.4" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/7f6fcbf600eb2298cce34c65f6d8bbe6933ddd4f88aa5b38a9c6feec82b615bb33b63b120725303e89c4b50284413c21d2ff883414717a5c7d0c9f7cd7a0e5fe - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e - languageName: node - linkType: hard - -"glob@npm:^6.0.0": - version: 6.0.4 - resolution: "glob@npm:6.0.4" - dependencies: - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:2 || 3" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/520146ebce0f4594b8357338f86281b38ee14214debce398a2902176a28f18e0f98911ea48516d85022de64fbbaa57f074aa13715d1daa5d70e21b82cea22183 - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"glob@npm:^9.2.0": - version: 9.3.5 - resolution: "glob@npm:9.3.5" - dependencies: - fs.realpath: "npm:^1.0.0" - minimatch: "npm:^8.0.2" - minipass: "npm:^4.2.4" - path-scurry: "npm:^1.6.1" - checksum: 10c0/2f6c2b9ee019ee21dc258ae97a88719614591e4c979cb4580b1b9df6f0f778a3cb38b4bdaf18dfa584637ea10f89a3c5f2533a5e449cf8741514ad18b0951f2e - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd - languageName: node - linkType: hard - -"globalthis@npm:^1.0.4": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" - dependencies: - define-properties: "npm:^1.2.1" - gopd: "npm:^1.0.1" - checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 - languageName: node - linkType: hard - -"globby@npm:11.1.0, globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"google-libphonenumber@npm:^3.2.26": - version: 3.2.40 - resolution: "google-libphonenumber@npm:3.2.40" - checksum: 10c0/997857e0dfdd39b169171cfee72ba268e9b0f9c655317701e21f61b2725d48384df3b2dea6977b49fb47efbde319fd71a1f2ec46589e91ab832ada9f54793cff - languageName: node - linkType: hard - -"gopd@npm:^1.0.1, gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"got@npm:^11.8.0": - version: 11.8.6 - resolution: "got@npm:11.8.6" - dependencies: - "@sindresorhus/is": "npm:^4.0.0" - "@szmarczak/http-timer": "npm:^4.0.5" - "@types/cacheable-request": "npm:^6.0.1" - "@types/responselike": "npm:^1.0.0" - cacheable-lookup: "npm:^5.0.3" - cacheable-request: "npm:^7.0.2" - decompress-response: "npm:^6.0.0" - http2-wrapper: "npm:^1.0.0-beta.5.2" - lowercase-keys: "npm:^2.0.0" - p-cancelable: "npm:^2.0.0" - responselike: "npm:^2.0.0" - checksum: 10c0/754dd44877e5cf6183f1e989ff01c648d9a4719e357457bd4c78943911168881f1cfb7b2cb15d885e2105b3ad313adb8f017a67265dd7ade771afdb261ee8cb1 - languageName: node - linkType: hard - -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 - languageName: node - linkType: hard - -"handlebars@npm:^4.7.7": - version: 4.7.8 - resolution: "handlebars@npm:4.7.8" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.2" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d - languageName: node - linkType: hard - -"har-schema@npm:^2.0.0": - version: 2.0.0 - resolution: "har-schema@npm:2.0.0" - checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 - languageName: node - linkType: hard - -"har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" - dependencies: - ajv: "npm:^6.12.3" - har-schema: "npm:^2.0.0" - checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e - languageName: node - linkType: hard - -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: 10c0/febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.2": - version: 1.1.0 - resolution: "has-bigints@npm:1.1.0" - checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: "npm:^1.0.0" - checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 - languageName: node - linkType: hard - -"has-proto@npm:^1.2.0": - version: 1.2.0 - resolution: "has-proto@npm:1.2.0" - dependencies: - dunder-proto: "npm:^1.0.0" - checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c - languageName: node - linkType: hard - -"hash.js@npm:^1.1.7": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: "npm:^2.0.3" - minimalistic-assert: "npm:^1.0.1" - checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 - languageName: node - linkType: hard - -"hasown@npm:^2.0.0, hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"he@npm:^1.0.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 - languageName: node - linkType: hard - -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 - languageName: node - linkType: hard - -"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: "npm:^6.0.0" - checksum: 10c0/150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 - languageName: node - linkType: hard - -"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": - version: 7.0.2 - resolution: "hosted-git-info@npm:7.0.2" - dependencies: - lru-cache: "npm:^10.0.1" - checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 - languageName: node - linkType: hard - -"html-to-text@npm:^2.1.0": - version: 2.1.3 - resolution: "html-to-text@npm:2.1.3" - dependencies: - he: "npm:^1.0.0" - htmlparser: "npm:^1.7.7" - optimist: "npm:^0.6.1" - underscore: "npm:^1.8.3" - underscore.string: "npm:^3.2.3" - bin: - html-to-text: ./bin/cli.js - checksum: 10c0/bd37935b7370b8fb294efb96af1517f8554285349fa376d6e8b77ed3db6a1300dd30c0513d99a1640b9ba9758bf18c8d2b68f60abdfc4481872748dffe4b06fa - languageName: node - linkType: hard - -"htmlparser2@npm:^3.9.1": - version: 3.10.1 - resolution: "htmlparser2@npm:3.10.1" - dependencies: - domelementtype: "npm:^1.3.1" - domhandler: "npm:^2.3.0" - domutils: "npm:^1.5.1" - entities: "npm:^1.1.1" - inherits: "npm:^2.0.1" - readable-stream: "npm:^3.1.1" - checksum: 10c0/b1424536ff062088501efa06a2afd478545d3134a5ad2e28bbe02dc2d092784982286b90f1c87fa3d86692958dbfb8936352dfd71d1cb2ff7cb61208c00fcdb1 - languageName: node - linkType: hard - -"htmlparser2@npm:^4.0.0": - version: 4.1.0 - resolution: "htmlparser2@npm:4.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^3.0.0" - domutils: "npm:^2.0.0" - entities: "npm:^2.0.0" - checksum: 10c0/a2d8d12ba45534a657d1965b71d4d581e521d14b7fc966ef031722cdd3895a23ce769fed63024e796538b3fc370e894b3a2f5b5071e54120905a6111cd3f88b0 - languageName: node - linkType: hard - -"htmlparser2@npm:^6.0.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.0.0" - domutils: "npm:^2.5.2" - entities: "npm:^2.0.0" - checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 - languageName: node - linkType: hard - -"htmlparser2@npm:^7.0.0": - version: 7.2.0 - resolution: "htmlparser2@npm:7.2.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.2.2" - domutils: "npm:^2.8.0" - entities: "npm:^3.0.1" - checksum: 10c0/7e1fa7f3b2635f2a1c5272765e25aab33b241d84a43e9d27f28a0b7166b51a8025dec40a6a29af38d6a698a2f1d2983cb43e5c61d4e07ec5aa9df672a7460e16 - languageName: node - linkType: hard - -"htmlparser2@npm:^8.0.0": - version: 8.0.2 - resolution: "htmlparser2@npm:8.0.2" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - domutils: "npm:^3.0.1" - entities: "npm:^4.4.0" - checksum: 10c0/609cca85886d0bf2c9a5db8c6926a89f3764596877492e2caa7a25a789af4065bc6ee2cdc81807fe6b1d03a87bf8a373b5a754528a4cc05146b713c20575aab4 - languageName: node - linkType: hard - -"htmlparser2@npm:~3.8.1": - version: 3.8.3 - resolution: "htmlparser2@npm:3.8.3" - dependencies: - domelementtype: "npm:1" - domhandler: "npm:2.3" - domutils: "npm:1.5" - entities: "npm:1.0" - readable-stream: "npm:1.1" - checksum: 10c0/253a673976c1e2c2b8429e45830a5a89c3f23bb6dd34f5958aefbb104a8caf1268515b535277714deb034d894aa0bd315e901cbf2ec906e8ed0d1e49b2d73b3e - languageName: node - linkType: hard - -"htmlparser@npm:^1.7.7": - version: 1.7.7 - resolution: "htmlparser@npm:1.7.7" - checksum: 10c0/b4ef1d2031f1370f274f646f824da10c8d946e671001d92878a4db77332abe84541667728063bb374a2742659b9549fd7d2e7ecdf71605ff016ef18b328becf5 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc - languageName: node - linkType: hard - -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: "npm:2.0.0" - inherits: "npm:2.0.4" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - toidentifier: "npm:1.0.1" - checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 - languageName: node - linkType: hard - -"http-link-header@npm:^1.0.2, http-link-header@npm:^1.1.1": - version: 1.1.3 - resolution: "http-link-header@npm:1.1.3" - checksum: 10c0/56698a9d3aee4d5319d1cdfe62ef5d7179f179ec1e6432d23c9e6a0c896be642ba47a4985a45419cff91008032aef920aca9df94ff9e763e646c83bf54b7243d - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"http-signature-header@npm:^1.3.1": - version: 1.3.1 - resolution: "http-signature-header@npm:1.3.1" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/c44fb0129322c3a7825f589c82fa37d546a0cdc9d06052545208d8c0edda240aa4888e07d667d5c221e94bd583d016250829c8a510114da0d3643185ec8236b5 - languageName: node - linkType: hard - -"http-signature@npm:^1.3.4": - version: 1.4.0 - resolution: "http-signature@npm:1.4.0" - dependencies: - assert-plus: "npm:^1.0.0" - jsprim: "npm:^2.0.2" - sshpk: "npm:^1.18.0" - checksum: 10c0/b9806f5a9ed82a146589837d175c43b596b1cc8c9431665e83d47c152aa8a4629dd1b1e050f8f56e7f17f62cf97b58e888775093310441ddee5f105f28646b2b - languageName: node - linkType: hard - -"http-signature@npm:~1.2.0": - version: 1.2.0 - resolution: "http-signature@npm:1.2.0" - dependencies: - assert-plus: "npm:^1.0.0" - jsprim: "npm:^1.2.2" - sshpk: "npm:^1.7.0" - checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 - languageName: node - linkType: hard - -"http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.3 - resolution: "http2-wrapper@npm:1.0.3" - dependencies: - quick-lru: "npm:^5.1.1" - resolve-alpn: "npm:^1.0.0" - checksum: 10c0/6a9b72a033e9812e1476b9d776ce2f387bc94bc46c88aea0d5dab6bd47d0a539b8178830e77054dd26d1142c866d515a28a4dc7c3ff4232c88ff2ebe4f5d12d1 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: "npm:6" - debug: "npm:4" - checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a - languageName: node - linkType: hard - -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb - languageName: node - linkType: hard - -"ignore-walk@npm:^6.0.4": - version: 6.0.5 - resolution: "ignore-walk@npm:6.0.5" - dependencies: - minimatch: "npm:^9.0.0" - checksum: 10c0/8bd6d37c82400016c7b6538b03422dde8c9d7d3e99051c8357dd205d499d42828522fb4fbce219c9c21b4b069079445bacdc42bbd3e2e073b52856c2646d8a39 - languageName: node - linkType: hard - -"ignore@npm:^5.0.4, ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.3.1": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"image-size@npm:^0.7.3": - version: 0.7.5 - resolution: "image-size@npm:0.7.5" - bin: - image-size: bin/image-size.js - checksum: 10c0/74e978c525e7d777df145bc66cfc4a4a7aa56de8e5daead3a69b0872082dbe385deb4a3b80799810df9e34b2031467412ae28810f2f65ec2e5fe08b895aa3491 - languageName: node - linkType: hard - -"immediate@npm:~3.0.5": - version: 3.0.6 - resolution: "immediate@npm:3.0.6" - checksum: 10c0/f8ba7ede69bee9260241ad078d2d535848745ff5f6995c7c7cb41cfdc9ccc213f66e10fa5afb881f90298b24a3f7344b637b592beb4f54e582770cdce3f1f039 - languageName: node - linkType: hard - -"immutable@npm:^3.8.2": - version: 3.8.2 - resolution: "immutable@npm:3.8.2" - checksum: 10c0/fb6a2999ad3bda9e51741721e42547076dd492635ee4df9241224055fe953ec843583a700088cc4915f23dc326e5084f4e17f1bbd7388c3e872ef5a242e0ac5e - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 - languageName: node - linkType: hard - -"import-local@npm:3.1.0": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 - languageName: node - linkType: hard - -"import-local@npm:^3.2.0": - version: 3.2.0 - resolution: "import-local@npm:3.2.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"ini@npm:^1.3.2, ini@npm:^1.3.8, ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a - languageName: node - linkType: hard - -"ini@npm:^4.1.3": - version: 4.1.3 - resolution: "ini@npm:4.1.3" - checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 - languageName: node - linkType: hard - -"init-package-json@npm:6.0.3": - version: 6.0.3 - resolution: "init-package-json@npm:6.0.3" - dependencies: - "@npmcli/package-json": "npm:^5.0.0" - npm-package-arg: "npm:^11.0.0" - promzard: "npm:^1.0.0" - read: "npm:^3.0.1" - semver: "npm:^7.3.5" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/a80f024ee041a2cf4d3062ba936abf015cbc32bda625cabe994d1fa4bd942bb9af37a481afd6880d340d3e94d90bf97bed1a0a877cc8c7c9b48e723c2524ae74 - languageName: node - linkType: hard - -"inquirer@npm:^8.2.4": - version: 8.2.6 - resolution: "inquirer@npm:8.2.6" - dependencies: - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.1.1" - cli-cursor: "npm:^3.1.0" - cli-width: "npm:^3.0.0" - external-editor: "npm:^3.0.3" - figures: "npm:^3.0.0" - lodash: "npm:^4.17.21" - mute-stream: "npm:0.0.8" - ora: "npm:^5.4.1" - run-async: "npm:^2.4.0" - rxjs: "npm:^7.5.5" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - through: "npm:^2.3.6" - wrap-ansi: "npm:^6.0.1" - checksum: 10c0/eb5724de1778265323f3a68c80acfa899378cb43c24cdcb58661386500e5696b6b0b6c700e046b7aa767fe7b4823c6f04e6ddc268173e3f84116112529016296 - languageName: node - linkType: hard - -"internal-slot@npm:^1.1.0": - version: 1.1.0 - resolution: "internal-slot@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - hasown: "npm:^2.0.2" - side-channel: "npm:^1.1.0" - checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 - languageName: node - linkType: hard - -"ioredis@npm:^4.27.0": - version: 4.28.5 - resolution: "ioredis@npm:4.28.5" - dependencies: - cluster-key-slot: "npm:^1.1.0" - debug: "npm:^4.3.1" - denque: "npm:^1.1.0" - lodash.defaults: "npm:^4.2.0" - lodash.flatten: "npm:^4.4.0" - lodash.isarguments: "npm:^3.1.0" - p-map: "npm:^2.1.0" - redis-commands: "npm:1.7.0" - redis-errors: "npm:^1.2.0" - redis-parser: "npm:^3.0.0" - standard-as-callback: "npm:^2.1.0" - checksum: 10c0/6fd12957d2906f83d8aa662ba78d084df16dc7c1a0e6e18c512302ac94339dcd5936d2e7cd6f89e9e7b511e3cf96617ca2fdea63aa4679bfdf48aa2be441ad76 - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: "npm:1.1.0" - sprintf-js: "npm:^1.1.3" - checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc - languageName: node - linkType: hard - -"ipaddr.js@npm:^2.2.0": - version: 2.2.0 - resolution: "ipaddr.js@npm:2.2.0" - checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 - languageName: node - linkType: hard - -"is-arguments@npm:^1.0.4": - version: 1.2.0 - resolution: "is-arguments@npm:1.2.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": - version: 3.0.5 - resolution: "is-array-buffer@npm:3.0.5" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 - languageName: node - linkType: hard - -"is-async-function@npm:^2.0.0": - version: 2.1.0 - resolution: "is-async-function@npm:2.1.0" - dependencies: - call-bound: "npm:^1.0.3" - get-proto: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.2" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/5209b858c6d18d88a9fb56dea202a050d53d4b722448cc439fdca859b36e23edf27ee8c18958ba49330f1a71b8846576273f4581e1c0bb9d403738129d852fdb - languageName: node - linkType: hard - -"is-bigint@npm:^1.1.0": - version: 1.1.0 - resolution: "is-bigint@npm:1.1.0" - dependencies: - has-bigints: "npm:^1.0.2" - checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 - languageName: node - linkType: hard - -"is-boolean-object@npm:^1.2.1": - version: 1.2.1 - resolution: "is-boolean-object@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 - languageName: node - linkType: hard - -"is-bun-module@npm:^1.0.2": - version: 1.3.0 - resolution: "is-bun-module@npm:1.3.0" - dependencies: - semver: "npm:^7.6.3" - checksum: 10c0/2966744188fcd28e0123c52158c7073973f88babfa9ab04e2846ec5862d6b0f8f398df6413429d930f7c5ee6111ce2cbfb3eb8652d9ec42d4a37dc5089a866fb - languageName: node - linkType: hard - -"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f - languageName: node - linkType: hard - -"is-ci@npm:3.0.1": - version: 3.0.1 - resolution: "is-ci@npm:3.0.1" - dependencies: - ci-info: "npm:^3.2.0" - bin: - is-ci: bin.js - checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0, is-core-module@npm:^2.5.0": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd - languageName: node - linkType: hard - -"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": - version: 1.0.2 - resolution: "is-data-view@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.6" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 - languageName: node - linkType: hard - -"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": - version: 1.1.0 - resolution: "is-date-object@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc - languageName: node - linkType: hard - -"is-expression@npm:^4.0.0": - version: 4.0.0 - resolution: "is-expression@npm:4.0.0" - dependencies: - acorn: "npm:^7.1.1" - object-assign: "npm:^4.1.1" - checksum: 10c0/541831d39d3e7bfc8cecd966d6b0f3c0e6d9055342f17b634fb23e74f51ce90f1bfc3cf231c722fe003a61e8d4f0b9e07244fdaba57f4fc70a163c74006fd5a0 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-finalizationregistry@npm:^1.1.0": - version: 1.1.1 - resolution: "is-finalizationregistry@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d - languageName: node - linkType: hard - -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": - version: 1.1.0 - resolution: "is-generator-function@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - get-proto: "npm:^1.0.0" - has-tostringtag: "npm:^1.0.2" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 10c0/dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d - languageName: node - linkType: hard - -"is-map@npm:^2.0.3": - version: 2.0.3 - resolution: "is-map@npm:2.0.3" - checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc - languageName: node - linkType: hard - -"is-nan@npm:^1.3.0": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - checksum: 10c0/8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 - languageName: node - linkType: hard - -"is-number-object@npm:^1.1.1": - version: 1.1.1 - resolution: "is-number-object@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 - languageName: node - linkType: hard - -"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 10c0/daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: "npm:^3.0.1" - checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 - languageName: node - linkType: hard - -"is-plain-object@npm:^5.0.0": - version: 5.0.0 - resolution: "is-plain-object@npm:5.0.0" - checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c - languageName: node - linkType: hard - -"is-promise@npm:^2.0.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-regex@npm:^1.0.3, is-regex@npm:^1.2.1": - version: 1.2.1 - resolution: "is-regex@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - gopd: "npm:^1.2.0" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 - languageName: node - linkType: hard - -"is-set@npm:^2.0.3": - version: 2.0.3 - resolution: "is-set@npm:2.0.3" - checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.4": - version: 1.0.4 - resolution: "is-shared-array-buffer@npm:1.0.4" - dependencies: - call-bound: "npm:^1.0.3" - checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db - languageName: node - linkType: hard - -"is-ssh@npm:^1.4.0": - version: 1.4.0 - resolution: "is-ssh@npm:1.4.0" - dependencies: - protocols: "npm:^2.0.1" - checksum: 10c0/3eb30d1bcb4507cd25562e7ac61a1c0aa31772134c67cec9c3afe6f4d57ec17e8c2892600a608e8e583f32f53f36465b8968c0305f2855cfbff95acfd049e113 - languageName: node - linkType: hard - -"is-stream@npm:2.0.0": - version: 2.0.0 - resolution: "is-stream@npm:2.0.0" - checksum: 10c0/687f6bbd2b995573d33e6b40b2cbc8b9186a751aa3151c23e6fd2c4ca352e323a6dc010b09103f89c9ca0bf5c8c38f3fa8b74d5d9acd1c44f1499874d7e844f9 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 - languageName: node - linkType: hard - -"is-string@npm:^1.0.7, is-string@npm:^1.1.1": - version: 1.1.1 - resolution: "is-string@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": - version: 1.1.1 - resolution: "is-symbol@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.2" - has-symbols: "npm:^1.1.0" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e - languageName: node - linkType: hard - -"is-text-path@npm:^1.0.1": - version: 1.0.1 - resolution: "is-text-path@npm:1.0.1" - dependencies: - text-extensions: "npm:^1.0.0" - checksum: 10c0/61c8650c29548febb6bf69e9541fc11abbbb087a0568df7bc471ba264e95fb254def4e610631cbab4ddb0a1a07949d06416f4ebeaf37875023fb184cdb87ee84 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": - version: 1.1.15 - resolution: "is-typed-array@npm:1.1.15" - dependencies: - which-typed-array: "npm:^1.1.16" - checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 - languageName: node - linkType: hard - -"is-typedarray@npm:~1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec - languageName: node - linkType: hard - -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 - languageName: node - linkType: hard - -"is-weakmap@npm:^2.0.2": - version: 2.0.2 - resolution: "is-weakmap@npm:2.0.2" - checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": - version: 1.1.0 - resolution: "is-weakref@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b - languageName: node - linkType: hard - -"is-weakset@npm:^2.0.3": - version: 2.0.4 - resolution: "is-weakset@npm:2.0.4" - dependencies: - call-bound: "npm:^1.0.3" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 - languageName: node - linkType: hard - -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e - languageName: node - linkType: hard - -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd - languageName: node - linkType: hard - -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db - languageName: node - linkType: hard - -"isstream@npm:^0.1.2, isstream@npm:~0.1.2": - version: 0.1.2 - resolution: "isstream@npm:0.1.2" - checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2": - version: 6.0.3 - resolution: "istanbul-lib-instrument@npm:6.0.3" - dependencies: - "@babel/core": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^7.5.4" - checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^4.0.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^5.0.0": - version: 5.0.6 - resolution: "istanbul-lib-source-maps@npm:5.0.6" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.23" - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.7 - resolution: "istanbul-reports@npm:3.1.7" - dependencies: - html-escaper: "npm:^2.0.0" - istanbul-lib-report: "npm:^3.0.0" - checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.9.2 - resolution: "jake@npm:10.9.2" - dependencies: - async: "npm:^3.2.3" - chalk: "npm:^4.0.2" - filelist: "npm:^1.0.4" - minimatch: "npm:^3.1.2" - bin: - jake: bin/cli.js - checksum: 10c0/c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31 - languageName: node - linkType: hard - -"jest-changed-files@npm:30.0.5": - version: 30.0.5 - resolution: "jest-changed-files@npm:30.0.5" - dependencies: - execa: "npm:^5.1.1" - jest-util: "npm:30.0.5" - p-limit: "npm:^3.1.0" - checksum: 10c0/41ce090f324e8450443327f19f772a9c3f225b4b1374ba9704358f0c8b8cd91fd134fa41df7db4d278428ab974c432abc3eca9484e67c8f18528974378fddef6 - languageName: node - linkType: hard - -"jest-circus@npm:30.0.5": - version: 30.0.5 - resolution: "jest-circus@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/expect": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - co: "npm:^4.6.0" - dedent: "npm:^1.6.0" - is-generator-fn: "npm:^2.1.0" - jest-each: "npm:30.0.5" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - p-limit: "npm:^3.1.0" - pretty-format: "npm:30.0.5" - pure-rand: "npm:^7.0.0" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.6" - checksum: 10c0/028204897eee7bef2d04eea0216b48f94e3da77ff1d12b0e3a5e265e8e73bcd31192cec70282aa1ece91150c00fcb5662c2c68e86b3892cffbfbe7058fa7f4e5 - languageName: node - linkType: hard - -"jest-cli@npm:30.0.5": - version: 30.0.5 - resolution: "jest-cli@npm:30.0.5" - dependencies: - "@jest/core": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - exit-x: "npm:^0.2.2" - import-local: "npm:^3.2.0" - jest-config: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - yargs: "npm:^17.7.2" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: ./bin/jest.js - checksum: 10c0/bfcd7212db7825d06afaf01c19bd7168190e22220d300b6db31b3885943a31361e98c4a1bde466146368ad503ae6257a9630bc35b4a43ff0631d7a3f95b63e45 - languageName: node - linkType: hard - -"jest-config@npm:30.0.5": - version: 30.0.5 - resolution: "jest-config@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@jest/get-type": "npm:30.0.1" - "@jest/pattern": "npm:30.0.1" - "@jest/test-sequencer": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - babel-jest: "npm:30.0.5" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - deepmerge: "npm:^4.3.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - jest-circus: "npm:30.0.5" - jest-docblock: "npm:30.0.1" - jest-environment-node: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-runner: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - micromatch: "npm:^4.0.8" - parse-json: "npm:^5.2.0" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - strip-json-comments: "npm:^3.1.1" - peerDependencies: - "@types/node": "*" - esbuild-register: ">=3.4.0" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - esbuild-register: - optional: true - ts-node: - optional: true - checksum: 10c0/da68048801e6f6622bf6e9a361dcfb3859017bbd58fabcf53bade41157bdf31cc35a1bd3dab1e3cca86e69da23e2c27c7aa5e308efc04564a454e23de6f22062 - languageName: node - linkType: hard - -"jest-diff@npm:30.0.5": - version: 30.0.5 - resolution: "jest-diff@npm:30.0.5" - dependencies: - "@jest/diff-sequences": "npm:30.0.1" - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - pretty-format: "npm:30.0.5" - checksum: 10c0/b218ced37b7676f578ea866762f04caa74901bdcf3f593872aa9a4991a586302651a1d16bb0386772adacc7580a452ec621359af75d733c0b50ea947fe1881d3 - languageName: node - linkType: hard - -"jest-diff@npm:>=29.4.3 < 30, jest-diff@npm:^29.4.1": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.6.3" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 - languageName: node - linkType: hard - -"jest-docblock@npm:30.0.1": - version: 30.0.1 - resolution: "jest-docblock@npm:30.0.1" - dependencies: - detect-newline: "npm:^3.1.0" - checksum: 10c0/f9bad2651db8afa029867ea7a40f422c9d73c67657360297371846a314a40c8786424be00483261df9137499f52c2af28cd458fbd15a7bf7fac8775b4bcd6ee1 - languageName: node - linkType: hard - -"jest-each@npm:30.0.5": - version: 30.0.5 - resolution: "jest-each@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - jest-util: "npm:30.0.5" - pretty-format: "npm:30.0.5" - checksum: 10c0/fe7509bfd8b0c8553bbdaffda5d3b674a4da870c5ce9fe69c1ca8111d9e0f21a8f265799eba0f927581d16f4810e5eb5bebfd7e51f5f137cbef08cc44d8fd9cd - languageName: node - linkType: hard - -"jest-environment-node@npm:30.0.5": - version: 30.0.5 - resolution: "jest-environment-node@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/fake-timers": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - checksum: 10c0/1b608597f0755814e7c24b9ed2a45abc2340cfd8f8d3691caf929f332facd9c62ac5092e7f01056708a0ca41ae0458b6d442fd1ae9f6d21b7b416b252e1ae210 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b - languageName: node - linkType: hard - -"jest-haste-map@npm:30.0.5": - version: 30.0.5 - resolution: "jest-haste-map@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - anymatch: "npm:^3.1.3" - fb-watchman: "npm:^2.0.2" - fsevents: "npm:^2.3.3" - graceful-fs: "npm:^4.2.11" - jest-regex-util: "npm:30.0.1" - jest-util: "npm:30.0.5" - jest-worker: "npm:30.0.5" - micromatch: "npm:^4.0.8" - walker: "npm:^1.0.8" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/eab5d85d820f149bcf4bf4e0c49316f48973c85d39b4c3a2e08f57504f069afe9b0f1665e556330a98c6fc6bd5a6932767b466c1c96124fa0161aef017ab17b3 - languageName: node - linkType: hard - -"jest-leak-detector@npm:30.0.5": - version: 30.0.5 - resolution: "jest-leak-detector@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - pretty-format: "npm:30.0.5" - checksum: 10c0/04207ab6f44dec22d3d656b5f3b4f334440f4c01ccd21c55474f26706530244d34b8dc9922c9449e00e8649e5da1b8de4aca58c9895c9de19951d5ecdc0ff113 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:30.0.5": - version: 30.0.5 - resolution: "jest-matcher-utils@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - jest-diff: "npm:30.0.5" - pretty-format: "npm:30.0.5" - checksum: 10c0/231d891b29bfc218f2f5739c10873b6671426e31ad1c5538eed1531e62608fd3f60d32f41821332a6cf41f1614fd37361434c754fdd49c849b35ef2e5156c02e - languageName: node - linkType: hard - -"jest-message-util@npm:30.0.5": - version: 30.0.5 - resolution: "jest-message-util@npm:30.0.5" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@jest/types": "npm:30.0.5" - "@types/stack-utils": "npm:^2.0.3" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - micromatch: "npm:^4.0.8" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.6" - checksum: 10c0/38b710c127db6c79c36d690377d9f9f1e3c2e4b2d2e60f3b82a5b4da70efb1f4783c6cf0cf1f6be6e3b7fb2d2aed889583d2430f65afc09e7e6d68aa5fa981dc - languageName: node - linkType: hard - -"jest-mock@npm:30.0.5": - version: 30.0.5 - resolution: "jest-mock@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-util: "npm:30.0.5" - checksum: 10c0/207fd79297f514a8e26ede9b4b5035e70212b8850a2f460b51d3cc58e8e7c9585bd2dbc5df2475a3321c4cd114b90e0b24190f00d6eeb88c8f088a8ed00416d5 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.3": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac - languageName: node - linkType: hard - -"jest-regex-util@npm:30.0.1": - version: 30.0.1 - resolution: "jest-regex-util@npm:30.0.1" - checksum: 10c0/f30c70524ebde2d1012afe5ffa5691d5d00f7d5ba9e43d588f6460ac6fe96f9e620f2f9b36a02d0d3e7e77bc8efb8b3450ae3b80ac53c8be5099e01bf54f6728 - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:30.0.5": - version: 30.0.5 - resolution: "jest-resolve-dependencies@npm:30.0.5" - dependencies: - jest-regex-util: "npm:30.0.1" - jest-snapshot: "npm:30.0.5" - checksum: 10c0/7c72ef30d2e2e5c9564c53f55679184a4fe460f4d5c48eb5edc476000f17ee392341ae0c21b3ce9e531a1bff00924ebcda4fcd5b1406071c6a7b2b109fd3cf33 - languageName: node - linkType: hard - -"jest-resolve@npm:30.0.5": - version: 30.0.5 - resolution: "jest-resolve@npm:30.0.5" - dependencies: - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-pnp-resolver: "npm:^1.2.3" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - slash: "npm:^3.0.0" - unrs-resolver: "npm:^1.7.11" - checksum: 10c0/6edea75db950131513cd642743d4c5dd36c209c94652e469eebc86fdf85eb579a7614c30262668fcd429e1c841f1d17a26831259db69c17dffd0718c37f69196 - languageName: node - linkType: hard - -"jest-runner@npm:30.0.5": - version: 30.0.5 - resolution: "jest-runner@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/environment": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - emittery: "npm:^0.13.1" - exit-x: "npm:^0.2.2" - graceful-fs: "npm:^4.2.11" - jest-docblock: "npm:30.0.1" - jest-environment-node: "npm:30.0.5" - jest-haste-map: "npm:30.0.5" - jest-leak-detector: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-resolve: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-watcher: "npm:30.0.5" - jest-worker: "npm:30.0.5" - p-limit: "npm:^3.1.0" - source-map-support: "npm:0.5.13" - checksum: 10c0/5da84e4f393cc4b0c2b86a7058c154e524bc91947867f892d252300d06c595058690a61ffdbfa74381498f4ebb9cc7d8d967a62f53cb5f5383ec59fb5ed21d91 - languageName: node - linkType: hard - -"jest-runtime@npm:30.0.5": - version: 30.0.5 - resolution: "jest-runtime@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/fake-timers": "npm:30.0.5" - "@jest/globals": "npm:30.0.5" - "@jest/source-map": "npm:30.0.1" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - cjs-module-lexer: "npm:^2.1.0" - collect-v8-coverage: "npm:^1.0.2" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - slash: "npm:^3.0.0" - strip-bom: "npm:^4.0.0" - checksum: 10c0/c1afa36da0582172e9a73d69fcc23fd433efc8a7d0328ba5fee45858dc85cb01410b47ba53540bb3758277eb84bb5a42e872bc58d2e5a3cad533f4b33e3abe61 - languageName: node - linkType: hard - -"jest-snapshot@npm:30.0.5": - version: 30.0.5 - resolution: "jest-snapshot@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@babel/generator": "npm:^7.27.5" - "@babel/plugin-syntax-jsx": "npm:^7.27.1" - "@babel/plugin-syntax-typescript": "npm:^7.27.1" - "@babel/types": "npm:^7.27.3" - "@jest/expect-utils": "npm:30.0.5" - "@jest/get-type": "npm:30.0.1" - "@jest/snapshot-utils": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - babel-preset-current-node-syntax: "npm:^1.1.0" - chalk: "npm:^4.1.2" - expect: "npm:30.0.5" - graceful-fs: "npm:^4.2.11" - jest-diff: "npm:30.0.5" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - pretty-format: "npm:30.0.5" - semver: "npm:^7.7.2" - synckit: "npm:^0.11.8" - checksum: 10c0/2bda246367373003abfbd66de261bfd355618926c28261d7ffcdfac0c4c7a7f575c9f598745b0b59eb2cfa8907889dcc07db3ad65d940061275d490c1eb3e1fe - languageName: node - linkType: hard - -"jest-util@npm:30.0.5": - version: 30.0.5 - resolution: "jest-util@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - graceful-fs: "npm:^4.2.11" - picomatch: "npm:^4.0.2" - checksum: 10c0/d3808b5f7720044d0464664c795e2b795ed82edf3b5871db74b8b603c3a0a38107668730348d26f92920ca3b8245a99cbbc2c93e77d0abb1f5e27524079a4ba8 - languageName: node - linkType: hard - -"jest-validate@npm:30.0.5": - version: 30.0.5 - resolution: "jest-validate@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - "@jest/types": "npm:30.0.5" - camelcase: "npm:^6.3.0" - chalk: "npm:^4.1.2" - leven: "npm:^3.1.0" - pretty-format: "npm:30.0.5" - checksum: 10c0/739a5df57befd763ba40693c9c1d7e93234af44ca21226a42272fbf87dea076a23848072b46871ce02cc0f2614f8ad41542e98965b405320276102b4de35b063 - languageName: node - linkType: hard - -"jest-watcher@npm:30.0.5": - version: 30.0.5 - resolution: "jest-watcher@npm:30.0.5" - dependencies: - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.3.2" - chalk: "npm:^4.1.2" - emittery: "npm:^0.13.1" - jest-util: "npm:30.0.5" - string-length: "npm:^4.0.2" - checksum: 10c0/5c26617c53e6314e2143806cbc8c1cdca7100cc8de3241c7debf7b5feb0df17bdc9a92ee4a4efa953a261d8806ffd7f6c89e72d567236e62492dd554eaa91f97 - languageName: node - linkType: hard - -"jest-worker@npm:30.0.5": - version: 30.0.5 - resolution: "jest-worker@npm:30.0.5" - dependencies: - "@types/node": "npm:*" - "@ungap/structured-clone": "npm:^1.3.0" - jest-util: "npm:30.0.5" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.1.1" - checksum: 10c0/50a724b39b8691168a456544f32ef8e937c827cd6d326fa0bc27df786c80af1e1f16d9f2d9cc800af4baac85a0f9e9ed78fbd4a06f13eb32e72ec66d11b85f38 - languageName: node - linkType: hard - -"jest@npm:^30.0.5": - version: 30.0.5 - resolution: "jest@npm:30.0.5" - dependencies: - "@jest/core": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - import-local: "npm:^3.2.0" - jest-cli: "npm:30.0.5" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: ./bin/jest.js - checksum: 10c0/eff3980ebe0257f1d5a0e94b0df27fc689563539138cc9220dadcb57543e30601cea6b79cbd68a5a5bcdc69501a8a670493495cf4b1d2076796697f8a7937d4c - languageName: node - linkType: hard - -"jose@npm:^2.0.5": - version: 2.0.7 - resolution: "jose@npm:2.0.7" - dependencies: - "@panva/asn1.js": "npm:^1.0.0" - checksum: 10c0/228406f4635debd05922fa565a85c42c086426c1af03c4db2ce247d84f240d3f5985efa9540e6c90c89bab56476b1d1a0be2199740d1f497a37b075bbe2307e8 - languageName: node - linkType: hard - -"jose@npm:^5.2.0": - version: 5.9.6 - resolution: "jose@npm:5.9.6" - checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d - languageName: node - linkType: hard - -"js-stringify@npm:^1.0.2": - version: 1.0.2 - resolution: "js-stringify@npm:1.0.2" - checksum: 10c0/a450c04fde3a7e1c27f1c3c4300433f8d79322f9e3c2e76266843cef8c0b5a69b5f11b5f173212b2f15f2df09e068ef7ddf46ef775e2486f3006a6f4e912578d - languageName: node - linkType: hard - -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f - languageName: node - linkType: hard - -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 - languageName: node - linkType: hard - -"jsbn@npm:~0.1.0": - version: 0.1.1 - resolution: "jsbn@npm:0.1.1" - checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 - languageName: node - linkType: hard - -"jsdoc-type-pratt-parser@npm:~4.0.0": - version: 4.0.0 - resolution: "jsdoc-type-pratt-parser@npm:4.0.0" - checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 - languageName: node - linkType: hard - -"jsesc@npm:^3.0.2": - version: 3.1.0 - resolution: "jsesc@npm:3.1.0" - bin: - jsesc: bin/jsesc - checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 - languageName: node - linkType: hard - -"jsesc@npm:~3.0.2": - version: 3.0.2 - resolution: "jsesc@npm:3.0.2" - bin: - jsesc: bin/jsesc - checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 - languageName: node - linkType: hard - -"json-parse-better-errors@npm:^1.0.1": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": - version: 3.0.2 - resolution: "json-parse-even-better-errors@npm:3.0.2" - checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - -"json-schema@npm:0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 - languageName: node - linkType: hard - -"json-stringify-nice@npm:^1.1.4": - version: 1.1.4 - resolution: "json-stringify-nice@npm:1.1.4" - checksum: 10c0/13673b67ba9e7fde75a103cade0b0d2dd0d21cd3b918de8d8f6cd59d48ad8c78b0e85f6f4a5842073ddfc91ebdde5ef7c81c7f51945b96a33eaddc5d41324b87 - languageName: node - linkType: hard - -"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": - version: 5.0.1 - resolution: "json-stringify-safe@npm:5.0.1" - checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 - languageName: node - linkType: hard - -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: "npm:^1.2.0" - bin: - json5: lib/cli.js - checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f - languageName: node - linkType: hard - -"json5@npm:^2.2.2, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c - languageName: node - linkType: hard - -"jsonc-parser@npm:3.2.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 10c0/5a12d4d04dad381852476872a29dcee03a57439574e4181d91dca71904fcdcc5e8e4706c0a68a2c61ad9810e1e1c5806b5100d52d3e727b78f5cdc595401045b - languageName: node - linkType: hard - -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.6" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 - languageName: node - linkType: hard - -"jsonld-context-parser@npm:^2.0.0, jsonld-context-parser@npm:^2.1.2, jsonld-context-parser@npm:^2.1.3, jsonld-context-parser@npm:^2.4.0": - version: 2.4.0 - resolution: "jsonld-context-parser@npm:2.4.0" - dependencies: - "@types/http-link-header": "npm:^1.0.1" - "@types/node": "npm:^18.0.0" - cross-fetch: "npm:^3.0.6" - http-link-header: "npm:^1.0.2" - relative-to-absolute-iri: "npm:^1.0.5" - bin: - jsonld-context-parse: bin/jsonld-context-parse.js - checksum: 10c0/7d27257ac4a18698cf2750798d59f9fb956e13999c91536ceb0d5f2480b2b6b26c7966fe1f60a7d507d381a3bf460d209a3e3a23e2854c4821d010cf36718b21 - languageName: node - linkType: hard - -"jsonld-signatures@npm:^11.2.1, jsonld-signatures@npm:^11.3.0, jsonld-signatures@npm:^11.3.2": - version: 11.5.0 - resolution: "jsonld-signatures@npm:11.5.0" - dependencies: - "@digitalbazaar/security-context": "npm:^1.0.0" - jsonld: "npm:^8.0.0" - rdf-canonize: "npm:^4.0.1" - serialize-error: "npm:^8.1.0" - checksum: 10c0/a624ef4706c91064ba19dd3f1bb2a43f40cabd68f38e1c3e57fb0cea830b5ff4763364a00197313ccf704f571295803220d5c20d40df371562d84de98c5df9a0 - languageName: node - linkType: hard - -"jsonld-signatures@npm:^5.0.0": - version: 5.2.0 - resolution: "jsonld-signatures@npm:5.2.0" - dependencies: - base64url: "npm:^3.0.1" - crypto-ld: "npm:^3.7.0" - jsonld: "npm:^2.0.2" - node-forge: "npm:^0.10.0" - security-context: "npm:^4.0.0" - serialize-error: "npm:^5.0.0" - checksum: 10c0/c9966118b9ad0af8be9bed8b42cfa8fe67d57c7ef29b7dbf7b889902c5bc1f1c19527d724316666dca49a6a1e72b3b37e09be6ab77d3b74f8dd4c39b2ef8f61c - languageName: node - linkType: hard - -"jsonld-streaming-parser@npm:^2.4.0, jsonld-streaming-parser@npm:^2.4.2": - version: 2.4.3 - resolution: "jsonld-streaming-parser@npm:2.4.3" - dependencies: - "@rdfjs/types": "npm:*" - "@types/http-link-header": "npm:^1.0.1" - canonicalize: "npm:^1.0.1" - http-link-header: "npm:^1.0.2" - jsonld-context-parser: "npm:^2.1.3" - jsonparse: "npm:^1.3.1" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/f678e3b6f80471b95400b4d89b7a456e1ff798ace41a5312597e9c2d20a61b17aada2dc20364c3192806eba6abd651cd5c377fae0b9417f45187179ff6af862c - languageName: node - linkType: hard - -"jsonld-streaming-serializer@npm:^1.2.0": - version: 1.3.0 - resolution: "jsonld-streaming-serializer@npm:1.3.0" - dependencies: - "@rdfjs/types": "npm:*" - jsonld-context-parser: "npm:^2.0.0" - checksum: 10c0/c0e692a3c579a49e18af60f5d70cffef4a7e1637090c129150742feb0719e88bdfa6d73a5f0a095dd5cba72b6057fca22c0f50644e5dc5cd62d1ddc7ed3051ae - languageName: node - linkType: hard - -"jsonld@npm:^2.0.2": - version: 2.0.2 - resolution: "jsonld@npm:2.0.2" - dependencies: - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^5.1.1" - rdf-canonize: "npm:^1.0.2" - request: "npm:^2.88.0" - semver: "npm:^6.3.0" - xmldom: "npm:0.1.19" - checksum: 10c0/d5648d74aab4316b13acfb1dfe087443a0f8b7022b94732867d01a3fbd50f1ce0bec073412da883dfa760641a22e778304e27f098de7f23ea27c8503e188edf2 - languageName: node - linkType: hard - -"jsonld@npm:^3.3.2": - version: 3.3.2 - resolution: "jsonld@npm:3.3.2" - dependencies: - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^5.1.1" - object.fromentries: "npm:^2.0.2" - rdf-canonize: "npm:^2.0.1" - request: "npm:^2.88.0" - semver: "npm:^6.3.0" - xmldom: "npm:0.1.19" - checksum: 10c0/f89f4e5170a49505d552525abe37c4257a72171ca41f4c6ec38f12c021d6e6e41a473c38edee0f4bbda2af6e58d900c998bf875a4194f1e2b27e90cb8e95ef7c - languageName: node - linkType: hard - -"jsonld@npm:^8.0.0, jsonld@npm:^8.1.0, jsonld@npm:^8.3.1": - version: 8.3.3 - resolution: "jsonld@npm:8.3.3" - dependencies: - "@digitalbazaar/http-client": "npm:^3.4.1" - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^6.0.0" - rdf-canonize: "npm:^3.4.0" - checksum: 10c0/ca8c18f65a50c61deec2951533bf05b709fd8e937e2f0cb549683d7e9934df7649b6e2f6f99f0dafe7bf8dd6ae95a257306cdb37fb705ef5ee0a7439d85581c2 - languageName: node - linkType: hard - -"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": - version: 1.3.1 - resolution: "jsonparse@npm:1.3.1" - checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 - languageName: node - linkType: hard - -"jsonwebtoken@npm:^9.0.2": - version: 9.0.2 - resolution: "jsonwebtoken@npm:9.0.2" - dependencies: - jws: "npm:^3.2.2" - lodash.includes: "npm:^4.3.0" - lodash.isboolean: "npm:^3.0.3" - lodash.isinteger: "npm:^4.0.4" - lodash.isnumber: "npm:^3.0.3" - lodash.isplainobject: "npm:^4.0.6" - lodash.isstring: "npm:^4.0.1" - lodash.once: "npm:^4.0.0" - ms: "npm:^2.1.1" - semver: "npm:^7.5.4" - checksum: 10c0/d287a29814895e866db2e5a0209ce730cbc158441a0e5a70d5e940eb0d28ab7498c6bf45029cc8b479639bca94056e9a7f254e2cdb92a2f5750c7f358657a131 - languageName: node - linkType: hard - -"jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: "npm:1.0.0" - extsprintf: "npm:1.3.0" - json-schema: "npm:0.4.0" - verror: "npm:1.10.0" - checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af - languageName: node - linkType: hard - -"jsprim@npm:^2.0.2": - version: 2.0.2 - resolution: "jsprim@npm:2.0.2" - dependencies: - assert-plus: "npm:1.0.0" - extsprintf: "npm:1.3.0" - json-schema: "npm:0.4.0" - verror: "npm:1.10.0" - checksum: 10c0/677be2d41df536c92c6d0114a492ef197084018cfbb1a3e10b1fa1aad889564b2e3a7baa6af7949cc2d73678f42368b0be165a26bd4e4de6883a30dd6a24e98d - languageName: node - linkType: hard - -"jstransformer@npm:1.0.0": - version: 1.0.0 - resolution: "jstransformer@npm:1.0.0" - dependencies: - is-promise: "npm:^2.0.0" - promise: "npm:^7.0.1" - checksum: 10c0/11f9b4f368a55878dd7973154cd83b0adca27f974d21217728652530775b2bec281e92109de66f0c9e37c76af796d5b76b33f3e38363214a83d102d523a7285b - languageName: node - linkType: hard - -"juice@npm:^4.1.0": - version: 4.3.2 - resolution: "juice@npm:4.3.2" - dependencies: - cheerio: "npm:^0.22.0" - commander: "npm:^2.15.1" - cross-spawn: "npm:^5.1.0" - deep-extend: "npm:^0.5.1" - mensch: "npm:^0.3.3" - slick: "npm:^1.12.2" - web-resource-inliner: "npm:^4.2.1" - bin: - juice: bin/juice - checksum: 10c0/5ab6cb687740fd52260daf3d8c4c01fbec02c4da805574ae2f9d2947a472d950137aae4a48092a56f9acf007de486af7cced60d9d9ec2cbfc4fbc6c19c081363 - languageName: node - linkType: hard - -"just-diff-apply@npm:^5.2.0": - version: 5.5.0 - resolution: "just-diff-apply@npm:5.5.0" - checksum: 10c0/d7b85371f2a5a17a108467fda35dddd95264ab438ccec7837b67af5913c57ded7246039d1df2b5bc1ade034ccf815b56d69786c5f1e07383168a066007c796c0 - languageName: node - linkType: hard - -"just-diff@npm:^6.0.0": - version: 6.0.2 - resolution: "just-diff@npm:6.0.2" - checksum: 10c0/1931ca1f0cea4cc480172165c189a84889033ad7a60bee302268ba8ca9f222b43773fd5f272a23ee618d43d85d3048411f06b635571a198159e9a85bb2495f5c - languageName: node - linkType: hard - -"jwa@npm:^1.4.1": - version: 1.4.1 - resolution: "jwa@npm:1.4.1" - dependencies: - buffer-equal-constant-time: "npm:1.0.1" - ecdsa-sig-formatter: "npm:1.0.11" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 - languageName: node - linkType: hard - -"jws@npm:^3.2.2": - version: 3.2.2 - resolution: "jws@npm:3.2.2" - dependencies: - jwa: "npm:^1.4.1" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff - languageName: node - linkType: hard - -"keyv@npm:^4.0.0, keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 - languageName: node - linkType: hard - -"kleur@npm:^4.1.4, kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"ky-universal@npm:^0.11.0": - version: 0.11.0 - resolution: "ky-universal@npm:0.11.0" - dependencies: - abort-controller: "npm:^3.0.0" - node-fetch: "npm:^3.2.10" - peerDependencies: - ky: ">=0.31.4" - web-streams-polyfill: ">=3.2.1" - peerDependenciesMeta: - web-streams-polyfill: - optional: true - checksum: 10c0/d71a1cae6d79c93808eda3b021eea91df064ac972f0391b45aa0913cdc48bdcad9c33452d68de021bd32c1b5abe15090229ae4a45fa28f7babb8e77e39ae1596 - languageName: node - linkType: hard - -"ky@npm:^0.33.3": - version: 0.33.3 - resolution: "ky@npm:0.33.3" - checksum: 10c0/5ba8de4c97c2abe5fb1b7d1b20252f95a7b249254af03cdfac670b9615de6b2b4af747bf363a1b918d2650c4cc83259578105f8eadd284f4e1c4261081e29640 - languageName: node - linkType: hard - -"lerna@npm:^8.0.1": - version: 8.1.9 - resolution: "lerna@npm:8.1.9" - dependencies: - "@lerna/create": "npm:8.1.9" - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" - "@octokit/plugin-enterprise-rest": "npm:6.0.1" - "@octokit/rest": "npm:19.0.11" - aproba: "npm:2.0.0" - byte-size: "npm:8.1.1" - chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" - cmd-shim: "npm:6.0.3" - color-support: "npm:1.1.3" - columnify: "npm:1.6.0" - console-control-strings: "npm:^1.1.0" - conventional-changelog-angular: "npm:7.0.0" - conventional-changelog-core: "npm:5.0.1" - conventional-recommended-bump: "npm:7.0.1" - cosmiconfig: "npm:9.0.0" - dedent: "npm:1.5.3" - envinfo: "npm:7.13.0" - execa: "npm:5.0.0" - fs-extra: "npm:^11.2.0" - get-port: "npm:5.1.1" - get-stream: "npm:6.0.0" - git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - globby: "npm:11.1.0" - graceful-fs: "npm:4.2.11" - has-unicode: "npm:2.0.1" - import-local: "npm:3.1.0" - ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" - is-ci: "npm:3.0.1" - is-stream: "npm:2.0.0" - jest-diff: "npm:>=29.4.3 < 30" - js-yaml: "npm:4.1.0" - libnpmaccess: "npm:8.0.6" - libnpmpublish: "npm:9.0.9" - load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" - make-dir: "npm:4.0.0" - minimatch: "npm:3.0.5" - multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" - p-map: "npm:4.0.0" - p-map-series: "npm:2.1.0" - p-pipe: "npm:3.1.0" - p-queue: "npm:6.6.2" - p-reduce: "npm:2.1.0" - p-waterfall: "npm:2.1.1" - pacote: "npm:^18.0.6" - pify: "npm:5.0.0" - read-cmd-shim: "npm:4.0.0" - resolve-from: "npm:5.0.0" - rimraf: "npm:^4.4.1" - semver: "npm:^7.3.8" - set-blocking: "npm:^2.0.0" - signal-exit: "npm:3.0.7" - slash: "npm:3.0.0" - ssri: "npm:^10.0.6" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - strong-log-transformer: "npm:2.1.0" - tar: "npm:6.2.1" - temp-dir: "npm:1.0.0" - typescript: "npm:>=3 < 6" - upath: "npm:2.0.1" - uuid: "npm:^10.0.0" - validate-npm-package-license: "npm:3.0.4" - validate-npm-package-name: "npm:5.0.1" - wide-align: "npm:1.1.5" - write-file-atomic: "npm:5.0.1" - write-pkg: "npm:4.0.0" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - bin: - lerna: dist/cli.js - checksum: 10c0/e3362d66324f5ee9606dbdb332a6b09eeb2df6378177e36a1bbcf532927d921beb4d25dbcc717c4adf3a7dcd67e0bcee67bedf81fdbe7e78bbecce310358d762 - languageName: node - linkType: hard - -"leven@npm:2.1.0": - version: 2.1.0 - resolution: "leven@npm:2.1.0" - checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e - languageName: node - linkType: hard - -"libnpmaccess@npm:8.0.6": - version: 8.0.6 - resolution: "libnpmaccess@npm:8.0.6" - dependencies: - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - checksum: 10c0/0b63c7cb44e024b0225dae8ebfe5166a0be8a9420c1b5fb6a4f1c795e9eabbed0fff5984ab57167c5634145de018008cbeeb27fe6f808f611ba5ba1b849ec3d6 - languageName: node - linkType: hard - -"libnpmpublish@npm:9.0.9": - version: 9.0.9 - resolution: "libnpmpublish@npm:9.0.9" - dependencies: - ci-info: "npm:^4.0.0" - normalize-package-data: "npm:^6.0.1" - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - proc-log: "npm:^4.2.0" - semver: "npm:^7.3.7" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.6" - checksum: 10c0/5e4bae455d33fb7402b8b8fcc505d89a1d60ff4b7dc47dd9ba318426c00400e1892fd0435d8db6baab808f64d7f226cbf8d53792244ffad1df7fc2f94f3237fc - languageName: node - linkType: hard - -"lie@npm:3.1.1": - version: 3.1.1 - resolution: "lie@npm:3.1.1" - dependencies: - immediate: "npm:~3.0.5" - checksum: 10c0/d62685786590351b8e407814acdd89efe1cb136f05cb9236c5a97b2efdca1f631d2997310ad2d565c753db7596799870140e4777c9c9b8c44a0f6bf42d1804a1 - languageName: node - linkType: hard - -"lines-and-columns@npm:2.0.3": - version: 2.0.3 - resolution: "lines-and-columns@npm:2.0.3" - checksum: 10c0/09525c10010a925b7efe858f1dd3184eeac34f0a9bc34993075ec490efad71e948147746b18e9540279cc87cd44085b038f986903db3de65ffe96d38a7b91c4c - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d - languageName: node - linkType: hard - -"lines-and-columns@npm:~2.0.3": - version: 2.0.4 - resolution: "lines-and-columns@npm:2.0.4" - checksum: 10c0/4db28bf065cd7ad897c0700f22d3d0d7c5ed6777e138861c601c496d545340df3fc19e18bd04ff8d95a246a245eb55685b82ca2f8c2ca53a008e9c5316250379 - languageName: node - linkType: hard - -"load-json-file@npm:6.2.0": - version: 6.2.0 - resolution: "load-json-file@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.15" - parse-json: "npm:^5.0.0" - strip-bom: "npm:^4.0.0" - type-fest: "npm:^0.6.0" - checksum: 10c0/fcb46ef75bab917f37170ba76781a1690bf67144bb53931cb0ed8e4aa20ca439e9c354fcf3594aed531f47dbeb4a49800acab7fdffd553c402ac40c987706d7b - languageName: node - linkType: hard - -"load-json-file@npm:^4.0.0": - version: 4.0.0 - resolution: "load-json-file@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.2" - parse-json: "npm:^4.0.0" - pify: "npm:^3.0.0" - strip-bom: "npm:^3.0.0" - checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 - languageName: node - linkType: hard - -"localforage@npm:^1.9.0": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" - dependencies: - lie: "npm:3.1.1" - checksum: 10c0/00f19f1f97002e6721587ed5017f502d58faf80dae567d5065d4d1ee0caf0762f40d2e2dba7f0ef7d3f14ee6203242daae9ecad97359bfc10ecff36df11d85a3 - languageName: node - linkType: hard - -"locate-path@npm:^2.0.0": - version: 2.0.0 - resolution: "locate-path@npm:2.0.0" - dependencies: - p-locate: "npm:^2.0.0" - path-exists: "npm:^3.0.0" - checksum: 10c0/24efa0e589be6aa3c469b502f795126b26ab97afa378846cb508174211515633b770aa0ba610cab113caedab8d2a4902b061a08aaed5297c12ab6f5be4df0133 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: "npm:^5.0.0" - checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 - languageName: node - linkType: hard - -"lodash.assignin@npm:^4.0.9": - version: 4.2.0 - resolution: "lodash.assignin@npm:4.2.0" - checksum: 10c0/40ac405acf5d6daf27fd40b50c99f823641a9ceba6bd282b18cb9989149204af584b5671f336587c2a263e367c3a2d1105cbf7bdc5ea33cbd0f829b02b16578a - languageName: node - linkType: hard - -"lodash.bind@npm:^4.1.4": - version: 4.2.1 - resolution: "lodash.bind@npm:4.2.1" - checksum: 10c0/e47ae564101c43940fab7f102dd9fb056ae6cc534a3b7bfbaecdf7216dac904ad762150e66a80d1bd5430da7eed4df90ba93996bb24030fad096b698d2ae15af - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 - languageName: node - linkType: hard - -"lodash.defaults@npm:^4.0.1, lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 10c0/d5b77aeb702caa69b17be1358faece33a84497bcca814897383c58b28a2f8dfc381b1d9edbec239f8b425126a3bbe4916223da2a576bb0411c2cefd67df80707 - languageName: node - linkType: hard - -"lodash.filter@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.filter@npm:4.6.0" - checksum: 10c0/bb65002f3ee02b94400b9d8728a46d3ac9fc3eb7df387b3c642f36eff82d716714283ca674889a29edae3c28ea8a4048e6c7bb90598670ab9c97b5d125bffda2 - languageName: node - linkType: hard - -"lodash.flatten@npm:^4.2.0, lodash.flatten@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.flatten@npm:4.4.0" - checksum: 10c0/97e8f0d6b61fe4723c02ad0c6e67e51784c4a2c48f56ef283483e556ad01594cf9cec9c773e177bbbdbdb5d19e99b09d2487cb6b6e5dc405c2693e93b125bd3a - languageName: node - linkType: hard - -"lodash.foreach@npm:^4.3.0": - version: 4.5.0 - resolution: "lodash.foreach@npm:4.5.0" - checksum: 10c0/bd9cc83e87e805b21058ce6cf718dd22db137c7ca08eddbd608549db59989911c571b7195707f615cb37f27bb4f9a9fa9980778940d768c24095f5a04b244c84 - languageName: node - linkType: hard - -"lodash.includes@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.includes@npm:4.3.0" - checksum: 10c0/7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b - languageName: node - linkType: hard - -"lodash.isarguments@npm:^3.1.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: 10c0/5e8f95ba10975900a3920fb039a3f89a5a79359a1b5565e4e5b4310ed6ebe64011e31d402e34f577eca983a1fc01ff86c926e3cbe602e1ddfc858fdd353e62d8 - languageName: node - linkType: hard - -"lodash.isboolean@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isboolean@npm:3.0.3" - checksum: 10c0/0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7 - languageName: node - linkType: hard - -"lodash.isinteger@npm:^4.0.4": - version: 4.0.4 - resolution: "lodash.isinteger@npm:4.0.4" - checksum: 10c0/4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7 - languageName: node - linkType: hard - -"lodash.ismatch@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.ismatch@npm:4.4.0" - checksum: 10c0/8f96a5dc4b8d3fc5a033dcb259d0c3148a1044fa4d02b4a0e8dce0fa1f2ef3ec4ac131e20b5cb2c985a4e9bcb1c37c0aa5af2cef70094959389617347b8fc645 - languageName: node - linkType: hard - -"lodash.isnumber@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isnumber@npm:3.0.3" - checksum: 10c0/2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d - languageName: node - linkType: hard - -"lodash.isplainobject@npm:^4.0.6": - version: 4.0.6 - resolution: "lodash.isplainobject@npm:4.0.6" - checksum: 10c0/afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb - languageName: node - linkType: hard - -"lodash.isstring@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.isstring@npm:4.0.1" - checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 - languageName: node - linkType: hard - -"lodash.map@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.map@npm:4.6.0" - checksum: 10c0/919fe767fa58d3f8369ddd84346636eda71c88a8ef6bde1ca0d87dd37e71614da2ed8bcfc3018ca5b7741ebaf7c01c2d7078b510dca8ab6a0d0ecafd3dc1abcb - languageName: node - linkType: hard - -"lodash.merge@npm:^4.4.0, lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 - languageName: node - linkType: hard - -"lodash.once@npm:^4.0.0": - version: 4.1.1 - resolution: "lodash.once@npm:4.1.1" - checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 - languageName: node - linkType: hard - -"lodash.pick@npm:^4.2.1": - version: 4.4.0 - resolution: "lodash.pick@npm:4.4.0" - checksum: 10c0/a04c460b95d1aaa44e9513d1dacf72ea74d838da843e45831de9de64c303f13cdde1859702a6f4dcef417816898ffd47c6ae0614c957ac70245bed2809b8d2e2 - languageName: node - linkType: hard - -"lodash.reduce@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reduce@npm:4.6.0" - checksum: 10c0/5d2dab823523a1a7f81eb5f4c1edcc03aab55504b1299a2385737389644ba6d2ad219169dfc5c16632a67a345d925ef6a5e8816b4e18a36f94ed66f8e7740b36 - languageName: node - linkType: hard - -"lodash.reject@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reject@npm:4.6.0" - checksum: 10c0/653b5beb1641aeac8bd734775ef6517706897c49197dbe548788558c243434a89dd94b971866b04a0a1df411534db85e96ab7daeb8accf53650119a78de7355f - languageName: node - linkType: hard - -"lodash.some@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.some@npm:4.6.0" - checksum: 10c0/9d3cdb1c8a2ed3d19b02ce146d4962a7859016f752b40fc143d78d3e70985259d6bea71c2c31b8e78f492830f49d755f1be2cdbf85461c54a523089e0c8c0e75 - languageName: node - linkType: hard - -"lodash.unescape@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.unescape@npm:4.0.1" - checksum: 10c0/b050d4e71a1459a397e615833ea296dd679e851ae13f7b2c91d6c2a5cd9a07e9a5be070a1cac3e27ee1c0dd0433d13bc8d3eda426c205cb5c2704a7c077f062a - languageName: node - linkType: hard - -"lodash@npm:^3.2.0": - version: 3.10.1 - resolution: "lodash@npm:3.10.1" - checksum: 10c0/f5f6d3d87503c3f1db27d49b30a00bb38dc1bd9de716c5febe8970259cc7b447149a0e320452ccaf5996a7a4abd63d94df341bb91bd8d336584ad518d8eab144 - languageName: node - linkType: hard - -"lodash@npm:^4.0.1, lodash@npm:^4.17.15, lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: "npm:^4.1.0" - is-unicode-supported: "npm:^0.1.0" - checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 - languageName: node - linkType: hard - -"long-timeout@npm:0.1.1": - version: 0.1.1 - resolution: "long-timeout@npm:0.1.1" - checksum: 10c0/a62240cc8f449d7a00081e817ae543fb1ded4d9fc05492e9fa8d6868cb33b2c9d5d71176a6f8be4473df7ba4b208460b3073b0e05069c3ec286122f3e4b5747f - languageName: node - linkType: hard - -"lowercase-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "lowercase-keys@npm:2.0.0" - checksum: 10c0/f82a2b3568910509da4b7906362efa40f5b54ea14c2584778ddb313226f9cbf21020a5db35f9b9a0e95847a9b781d548601f31793d736b22a2b8ae8eb9ab1082 - languageName: node - linkType: hard - -"lru-cache@npm:10.1.0": - version: 10.1.0 - resolution: "lru-cache@npm:10.1.0" - checksum: 10c0/778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^4.0.1": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: "npm:^1.0.2" - yallist: "npm:^2.1.2" - checksum: 10c0/1ca5306814e5add9ec63556d6fd9b24a4ecdeaef8e9cea52cbf30301e6b88c8d8ddc7cab45b59b56eb763e6c45af911585dc89925a074ab65e1502e3fe8103cf - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 - languageName: node - linkType: hard - -"luxon@npm:^1.23.x": - version: 1.28.1 - resolution: "luxon@npm:1.28.1" - checksum: 10c0/5c561ce4364bb2301ca5811c74d11a9e087f82164109c7997dc8f0959e64d51259d8e630914dca2edc6702525ce5ab066a4b85caa19d04be71f10e79ffe2bc84 - languageName: node - linkType: hard - -"luxon@npm:^3.2.1": - version: 3.5.0 - resolution: "luxon@npm:3.5.0" - checksum: 10c0/335789bba95077db831ef99894edadeb23023b3eb2137a1b56acd0d290082b691cf793143d69e30bc069ec95f0b49f36419f48e951c68014f19ffe12045e3494 - languageName: node - linkType: hard - -"luxon@npm:~3.6.0": - version: 3.6.1 - resolution: "luxon@npm:3.6.1" - checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5 - languageName: node - linkType: hard - -"make-dir@npm:4.0.0, make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: "npm:^7.5.3" - checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 - languageName: node - linkType: hard - -"make-dir@npm:^2.1.0": - version: 2.1.0 - resolution: "make-dir@npm:2.1.0" - dependencies: - pify: "npm:^4.0.1" - semver: "npm:^5.6.0" - checksum: 10c0/ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 - languageName: node - linkType: hard - -"make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: "npm:^6.0.0" - checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa - languageName: node - linkType: hard - -"make-error@npm:^1.3.6": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f - languageName: node - linkType: hard - -"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" - dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" - http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e - languageName: node - linkType: hard - -"make-fetch-happen@npm:^14.0.3": - version: 14.0.3 - resolution: "make-fetch-happen@npm:14.0.3" - dependencies: - "@npmcli/agent": "npm:^3.0.0" - cacache: "npm:^19.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^4.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^12.0.0" - checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: "npm:1.0.5" - checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c - languageName: node - linkType: hard - -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: 10c0/ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 - languageName: node - linkType: hard - -"map-obj@npm:^4.0.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: 10c0/1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 - languageName: node - linkType: hard - -"memory-streams@npm:^0.1.3": - version: 0.1.3 - resolution: "memory-streams@npm:0.1.3" - dependencies: - readable-stream: "npm:~1.0.2" - checksum: 10c0/05d1ceff6b420e580ea7b1d8454e42118b06696cbe70c2d5ffc5e0b7df72a4a2152fa4e18216da10d8d5abbd2b2b409b354a8bb6489b30ae854c0dd998c84406 - languageName: node - linkType: hard - -"mensch@npm:^0.3.3": - version: 0.3.4 - resolution: "mensch@npm:0.3.4" - checksum: 10c0/177f9c1cb1acd93da98a971288a5da99f819ac06de19ca450040b18ddf8728c7ae0ce22309fadbbfd4ceb773bc5c03bf1cb93ceb91441da9e76e010d314da2ea - languageName: node - linkType: hard - -"meow@npm:^8.1.2": - version: 8.1.2 - resolution: "meow@npm:8.1.2" - dependencies: - "@types/minimist": "npm:^1.2.0" - camelcase-keys: "npm:^6.2.2" - decamelize-keys: "npm:^1.1.0" - hard-rejection: "npm:^2.1.0" - minimist-options: "npm:4.1.0" - normalize-package-data: "npm:^3.0.0" - read-pkg-up: "npm:^7.0.1" - redent: "npm:^3.0.0" - trim-newlines: "npm:^3.0.0" - type-fest: "npm:^0.18.0" - yargs-parser: "npm:^20.2.3" - checksum: 10c0/9a8d90e616f783650728a90f4ea1e5f763c1c5260369e6596b52430f877f4af8ecbaa8c9d952c93bbefd6d5bda4caed6a96a20ba7d27b511d2971909b01922a2 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"methods@npm:^1.1.1, methods@npm:^1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 - languageName: node - linkType: hard - -"microdata-rdf-streaming-parser@npm:^1.2.0": - version: 1.2.0 - resolution: "microdata-rdf-streaming-parser@npm:1.2.0" - dependencies: - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^6.0.0" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.2" - checksum: 10c0/fc54e45b78d9186061b6bcb915e1e2ae5796ee92e8aaeee9e548012f37487c618361e7e96f95cd8958a2bfab22dde51ddec290366b1c6b6069b94a9aa0a01f73 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mime@npm:1.6.0, mime@npm:^1.4.1": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 - languageName: node - linkType: hard - -"mimer@npm:^1.0.0": - version: 1.1.1 - resolution: "mimer@npm:1.1.1" - bin: - mimer: bin/mimer - checksum: 10c0/e832bd0d45fc2ce76b0de70f9fb8ca5c59f74b987a19d9d417a43175a67646a80846e825956cc8fdb05eae7651496b9c344fb09f5c5f52f9e4786b8291ae528c - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 - languageName: node - linkType: hard - -"mimic-response@npm:^1.0.0": - version: 1.0.1 - resolution: "mimic-response@npm:1.0.1" - checksum: 10c0/c5381a5eae997f1c3b5e90ca7f209ed58c3615caeee850e85329c598f0c000ae7bec40196580eef1781c60c709f47258131dab237cad8786f8f56750594f27fa - languageName: node - linkType: hard - -"mimic-response@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-response@npm:3.1.0" - checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 - languageName: node - linkType: hard - -"min-indent@npm:^1.0.0": - version: 1.0.1 - resolution: "min-indent@npm:1.0.1" - checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd - languageName: node - linkType: hard - -"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimatch@npm:3.0.5": - version: 3.0.5 - resolution: "minimatch@npm:3.0.5" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/f398652d0d260137c289c270a4ac98ebe0a27cd316fa0fac72b096e96cbdc89f71d80d47ac7065c716ba3b0b730783b19180bd85a35f9247535d2adfe96bba76 - languageName: node - linkType: hard - -"minimatch@npm:9.0.3": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 - languageName: node - linkType: hard - -"minimatch@npm:^8.0.2": - version: 8.0.4 - resolution: "minimatch@npm:8.0.4" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/a0a394c356dd5b4cb7f821720841a82fa6f07c9c562c5b716909d1b6ec5e56a7e4c4b5029da26dd256b7d2b3a3f38cbf9ddd8680e887b9b5282b09c05501c1ca - languageName: node - linkType: hard - -"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - kind-of: "npm:^6.0.3" - checksum: 10c0/7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"minimist@npm:~0.0.1": - version: 0.0.10 - resolution: "minimist@npm:0.0.10" - checksum: 10c0/c505a020144b6e49f2b1c7d1e378f3692b7102e989b4a49338fc171eb4229ddddb430e779ff803dcb11854050e3fe3c2298962a7d73c20df7c2044c92b2ba1da - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b - languageName: node - linkType: hard - -"minipass-fetch@npm:^4.0.0": - version: 4.0.1 - resolution: "minipass-fetch@npm:4.0.1" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^3.0.1" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^4.2.4": - version: 4.2.8 - resolution: "minipass@npm:4.2.8" - checksum: 10c0/4ea76b030d97079f4429d6e8a8affd90baf1b6a1898977c8ccce4701c5a2ba2792e033abc6709373f25c2c4d4d95440d9d5e9464b46b7b76ca44d2ce26d939ce - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1": - version: 3.0.2 - resolution: "minizlib@npm:3.0.2" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 - languageName: node - linkType: hard - -"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": - version: 0.5.3 - resolution: "mkdirp-classic@npm:0.5.3" - checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf - languageName: node - linkType: hard - -"mkdirp@npm:^3.0.1": - version: 3.0.1 - resolution: "mkdirp@npm:3.0.1" - bin: - mkdirp: dist/cjs/src/bin.js - checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d - languageName: node - linkType: hard - -"modify-values@npm:^1.0.1": - version: 1.0.1 - resolution: "modify-values@npm:1.0.1" - checksum: 10c0/6acb1b82aaf7a02f9f7b554b20cbfc159f223a79c66b0a257511c5933d50b85e12ea1220b0a90a2af6f80bc29ff784f929a52a51881867a93ae6a12ce87a729a - languageName: node - linkType: hard - -"moleculer-bull@npm:^0.2.5": - version: 0.2.8 - resolution: "moleculer-bull@npm:0.2.8" - dependencies: - bull: "npm:^3.15.0" - lodash: "npm:^4.17.15" - peerDependencies: - moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 - checksum: 10c0/744170d331eb3ddefb34d86e3e5fba02942ed9223a3a2b7c4e7ee893eb49d89c479374dfc77a6d8803a805469856cd00fcb03f63ee718e97ab318d1329eedcef - languageName: node - linkType: hard - -"moleculer-db@npm:^0.8.15, moleculer-db@npm:^0.8.16": - version: 0.8.26 - resolution: "moleculer-db@npm:0.8.26" - dependencies: - "@seald-io/nedb": "npm:^3.0.0" - bluebird: "npm:^3.7.2" - flat: "npm:^5.0.2" - lodash: "npm:^4.17.21" - peerDependencies: - moleculer: ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 - checksum: 10c0/e4797651ecc59e1aa7855ab536fc0be3e6090c6b2f37c94dda37cb397fb8ef750f2325d565b85b55d926db789b05a011a13e0b885cbe9ce81b658fca99e78ef4 - languageName: node - linkType: hard - -"moleculer-mail@npm:^1.2.5": - version: 1.2.6 - resolution: "moleculer-mail@npm:1.2.6" - dependencies: - bluebird: "npm:^3.7.2" - email-templates: "npm:^2.7.1" - lodash: "npm:^4.17.21" - nodemailer: "npm:^4.6.7" - nodemailer-html-to-text: "npm:^2.1.0" - peerDependencies: - moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 - checksum: 10c0/3a8d8af4a7471e2e618470731b989f1c5c33fb4c944c72d7410a63582bcc48bb035c85f31cd62ab552b191043cac049ca972f2088c1c2f42e91f0db0ba8ea79b - languageName: node - linkType: hard - -"moleculer-schedule@npm:^0.2.3": - version: 0.2.3 - resolution: "moleculer-schedule@npm:0.2.3" - dependencies: - lodash: "npm:^4.17.21" - node-schedule: "npm:^2.0.0" - peerDependencies: - moleculer: ^0.14.13 - checksum: 10c0/63e3ae5c5cf4631a09358742c14941ad2ffa7051c552f52bbe0128e8dacd7bf3ce9688a434d94f39d63141d80b15828942e81c2cf0f9c4c4652791ecc469f4fb - languageName: node - linkType: hard - -"moleculer-web@npm:^0.10.0-beta1, moleculer-web@npm:^0.10.7": - version: 0.10.7 - resolution: "moleculer-web@npm:0.10.7" - dependencies: - "@fastify/busboy": "npm:^1.0.0" - body-parser: "npm:^1.19.0" - es6-error: "npm:^4.1.1" - etag: "npm:^1.8.1" - fresh: "npm:^0.5.2" - isstream: "npm:^0.1.2" - kleur: "npm:^4.1.4" - lodash: "npm:^4.17.21" - path-to-regexp: "npm:^3.1.0" - qs: "npm:^6.11.0" - serve-static: "npm:^1.14.1" - peerDependencies: - moleculer: ^0.13.0 || ^0.14.0 - checksum: 10c0/af4964522fcdac7d88d61f7e810fbd7fe4500b6d6c7882c0cf8f7a4b28ac4402a32136a7b0635d1d3ceac5a4abd9648056048c5516d9a7be234541c13076024b - languageName: node - linkType: hard - -"moleculer@npm:^0.14.17, moleculer@npm:^0.14.18, moleculer@npm:^0.14.29, moleculer@npm:^0.14.35": - version: 0.14.35 - resolution: "moleculer@npm:0.14.35" - dependencies: - args: "npm:^5.0.3" - eventemitter2: "npm:^6.4.9" - fastest-validator: "npm:^1.19.0" - glob: "npm:^7.2.0" - ipaddr.js: "npm:^2.2.0" - kleur: "npm:^4.1.5" - lodash: "npm:^4.17.21" - lru-cache: "npm:^6.0.0" - node-fetch: "npm:^2.6.7" - recursive-watch: "npm:^1.1.4" - peerDependencies: - amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 - avsc: ^5.0.0 - bunyan: ^1.0.0 - cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 - dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 - debug: ^4.0.0 - etcd3: ^1.0.0 - ioredis: ^4.0.0 || ^5.0.0 - jaeger-client: ^3.0.0 - kafka-node: ^5.0.0 - log4js: ^6.0.0 - mqtt: ^4.0.0 || ^5.0.0 - msgpack5: ^5.0.0 || ^6.0.0 - nats: ^1.0.0 || ^2.0.0 - node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 - notepack.io: ^2.0.0 || ^3.0.0 - pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - protobufjs: ^6.0.0 || ^7.0.0 - redlock: ^4.0.0 - rhea-promise: ^1.0.0 || ^2.0.0 - thrift: ^0.12.0 || ^0.16.0 - winston: ^3.0.0 - peerDependenciesMeta: - amqplib: - optional: true - avsc: - optional: true - bunyan: - optional: true - cbor-x: - optional: true - dd-trace: - optional: true - debug: - optional: true - etcd3: - optional: true - ioredis: - optional: true - jaeger-client: - optional: true - kafka-node: - optional: true - log4js: - optional: true - mqtt: - optional: true - msgpack5: - optional: true - nats: - optional: true - node-nats-streaming: - optional: true - notepack.io: - optional: true - pino: - optional: true - protobufjs: - optional: true - redlock: - optional: true - rhea-promise: - optional: true - thrift: - optional: true - winston: - optional: true - bin: - moleculer-runner: bin/moleculer-runner.js - moleculer-runner-esm: bin/moleculer-runner.mjs - checksum: 10c0/471cfd38994bf3e08abc39342413bb79ad5aab518b0fbc1329b74f3c6fb9ecff0826323e7030dfbd7ae20c5f94d3743bdaebbfe6eeb4a9faa8b02d0b7e990b29 - languageName: node - linkType: hard - -"moment-timezone@npm:^0.5.31": - version: 0.5.46 - resolution: "moment-timezone@npm:0.5.46" - dependencies: - moment: "npm:^2.29.4" - checksum: 10c0/003fd278d1aa3e63afff340a318735db80157b7a343e3f807cac10e026def214f0e71b52d582b89a11ee0a19f5d9f0da2752b7959d855429f2b715d4859d3722 - languageName: node - linkType: hard - -"moment@npm:2.30.1, moment@npm:^2.29.4": - version: 2.30.1 - resolution: "moment@npm:2.30.1" - checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a - languageName: node - linkType: hard - -"mri@npm:1.1.4": - version: 1.1.4 - resolution: "mri@npm:1.1.4" - checksum: 10c0/eb577c2ef60385aa287afdac777e536996f4fd3144250c201097e7ec121568139d482c92cb9a512f90e428d6dc3e9ba8e9de89bc204424cb96f187a4bdc465c1 - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"multimatch@npm:5.0.0": - version: 5.0.0 - resolution: "multimatch@npm:5.0.0" - dependencies: - "@types/minimatch": "npm:^3.0.3" - array-differ: "npm:^3.0.0" - array-union: "npm:^2.1.0" - arrify: "npm:^2.0.1" - minimatch: "npm:^3.0.4" - checksum: 10c0/252ffae6d19491c169c22fc30cf8a99f6031f94a3495f187d3430b06200e9f05a7efae90ab9d834f090834e0d9c979ab55e7ad21f61a37995d807b4b0ccdcbd1 - languageName: node - linkType: hard - -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: 10c0/18d06d92e5d6d45e2b63c0e1b8f25376af71748ac36f53c059baa8b76ffac31c5ab225480494e7d35d30215ecdb18fed26ec23cafcd2f7733f2f14406bcd19e2 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"n3@npm:^1.26.0": - version: 1.26.0 - resolution: "n3@npm:1.26.0" - dependencies: - buffer: "npm:^6.0.3" - readable-stream: "npm:^4.0.0" - checksum: 10c0/e8a399f9295ccbd4008113bebdbdb15e5ef824e2d396a94d70cc7c1a94261a72869622bd1d78b3e94ea48056d5cd1b42e3b6d8acd1e0261f387e94ac6403013d - languageName: node - linkType: hard - -"n3@npm:^1.6.3, n3@npm:^1.8.0": - version: 1.23.1 - resolution: "n3@npm:1.23.1" - dependencies: - buffer: "npm:^6.0.3" - queue-microtask: "npm:^1.1.2" - readable-stream: "npm:^4.0.0" - checksum: 10c0/9f7f179b3f358f37c284dc65907f4f12b079657d5eaea0ed4e0f1dc248e54caf68e3c62439c6a1d3d1b3eec06edb18e20aa7d12da494b49ff112f5dd72b0d414 - languageName: node - linkType: hard - -"nan@npm:^2.19.0, nan@npm:^2.20.0": - version: 2.22.0 - resolution: "nan@npm:2.22.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/d5d31aefdb218deba308d44867c5f432b4d3aabeb57c70a2b236d62652e9fee7044e5d5afd380d9fef022fe7ebb2f2d6c85ca3cbcac5031aaca3592c844526bb - languageName: node - linkType: hard - -"nanoid@npm:^3.3.8": - version: 3.3.8 - resolution: "nanoid@npm:3.3.8" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 - languageName: node - linkType: hard - -"napi-build-utils@npm:^1.0.1": - version: 1.0.2 - resolution: "napi-build-utils@npm:1.0.2" - checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 - languageName: node - linkType: hard - -"napi-postinstall@npm:^0.3.0": - version: 0.3.2 - resolution: "napi-postinstall@npm:0.3.2" - bin: - napi-postinstall: lib/cli.js - checksum: 10c0/77c67eb9871d24afe7bad30e6115c441d099d6a0e42dc1c49c4a722ff682425e08dc6dd2b03eca10db9b547e724c38fb51325c35039e7ac10dcb714bb88d7326 - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 - languageName: node - linkType: hard - -"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": - version: 0.6.4 - resolution: "negotiator@npm:0.6.4" - checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d - languageName: node - linkType: hard - -"node-abi@npm:^3.3.0": - version: 3.73.0 - resolution: "node-abi@npm:3.73.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/4cd237f2507f80048310f381198a07387b11cbaab7dfac61ccc40cdc83f2296c647df02b5ddfead9f40b845c696f0ce75fdaa01973d3f3f0686151e4f96d2c8c - languageName: node - linkType: hard - -"node-addon-api@npm:^5.0.0": - version: 5.1.0 - resolution: "node-addon-api@npm:5.1.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d - languageName: node - linkType: hard - -"node-domexception@npm:^1.0.0": - version: 1.0.0 - resolution: "node-domexception@npm:1.0.0" - checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b - languageName: node - linkType: hard - -"node-fetch@npm:2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/fcae80f5ac52fbf5012f5e19df2bd3915e67d3b3ad51cb5942943df2238d32ba15890fecabd0e166876a9f98a581ab50f3f10eb942b09405c49ef8da36b826c7 - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"node-fetch@npm:^3.2.10": - version: 3.3.2 - resolution: "node-fetch@npm:3.3.2" - dependencies: - data-uri-to-buffer: "npm:^4.0.0" - fetch-blob: "npm:^3.1.4" - formdata-polyfill: "npm:^4.0.10" - checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 - languageName: node - linkType: hard - -"node-forge@npm:^0.10.0, node-forge@npm:~0.10.0": - version: 0.10.0 - resolution: "node-forge@npm:0.10.0" - checksum: 10c0/9cbf9ac8fc3889a5a46b0248f7238ee4014770bf31d22e04c0c7f04ed91c8be4584c5f534cdf6037e99f236c636c925cba960501ed2b850e077512e152760663 - languageName: node - linkType: hard - -"node-gyp-build@npm:^4.3.0": - version: 4.8.4 - resolution: "node-gyp-build@npm:4.8.4" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 - languageName: node - linkType: hard - -"node-gyp@npm:^10.0.0": - version: 10.3.1 - resolution: "node-gyp@npm:10.3.1" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - tar: "npm:^6.2.1" - which: "npm:^4.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/87c3b50e1f6f5256b5d2879a8c064eefa53ed444bad2a20870be43bc189db7cbffe22c30af056046c6d904181d73881b1726fd391d2f6f79f89b991019f195ea - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 11.3.0 - resolution: "node-gyp@npm:11.3.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^14.0.3" - nopt: "npm:^8.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.4.3" - tinyglobby: "npm:^0.2.12" - which: "npm:^5.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/5f4ad5a729386f7b50096efd4934b06c071dbfbc7d7d541a66d6959a7dccd62f53ff3dc95fffb60bf99d8da1270e23769f82246fcaa6c5645a70c967ae9a3398 - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a - languageName: node - linkType: hard - -"node-machine-id@npm:1.1.12": - version: 1.1.12 - resolution: "node-machine-id@npm:1.1.12" - checksum: 10c0/ab2fea5f75a6f1ce3c76c5e0ae3903b631230e0a99b003d176568fff8ddbdf7b2943be96cd8d220c497ca0f6149411831f8a450601929f326781cb1b59bab7f8 - languageName: node - linkType: hard - -"node-releases@npm:^2.0.19": - version: 2.0.19 - resolution: "node-releases@npm:2.0.19" - checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa - languageName: node - linkType: hard - -"node-schedule@npm:^2.0.0": - version: 2.1.1 - resolution: "node-schedule@npm:2.1.1" - dependencies: - cron-parser: "npm:^4.2.0" - long-timeout: "npm:0.1.1" - sorted-array-functions: "npm:^1.3.0" - checksum: 10c0/6ec51b34b9e676740ac25298e4ced5ee46053379f0d3aad533e51d7e083bc24ced045df1772a95bf9d9cfdb81299340bbf551549a7c5eb6e4d2dc6468c85c70e - languageName: node - linkType: hard - -"nodemailer-html-to-text@npm:^2.1.0": - version: 2.1.0 - resolution: "nodemailer-html-to-text@npm:2.1.0" - dependencies: - html-to-text: "npm:^2.1.0" - checksum: 10c0/068d6aa086a46f7d137775b87dfa1177916f352a1c0c3d1b7959e8591fc98fabcaa5e1bec32ff71c536a01fd51914dfc93f2112a0ee27a3dbaf6ab31d2ebe88c - languageName: node - linkType: hard - -"nodemailer@npm:^4.6.7": - version: 4.7.0 - resolution: "nodemailer@npm:4.7.0" - checksum: 10c0/62a330b88f0982c1474adb92b909ad33620ff194c24977e43118b71ed7f9ff17b54a34f8e5db805001925f01f6c0b5356d3765b7bd9f5cc5a07dfc78ea57263a - languageName: node - linkType: hard - -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: "npm:1" - bin: - nopt: bin/nopt.js - checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 - languageName: node - linkType: hard - -"nopt@npm:^7.0.0, nopt@npm:^7.2.1": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 - languageName: node - linkType: hard - -"nopt@npm:^8.0.0": - version: 8.1.0 - resolution: "nopt@npm:8.1.0" - dependencies: - abbrev: "npm:^3.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef - languageName: node - linkType: hard - -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: "npm:^2.1.4" - resolve: "npm:^1.10.0" - semver: "npm:2 || 3 || 4 || 5" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 - languageName: node - linkType: hard - -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: "npm:^4.0.1" - is-core-module: "npm:^2.5.0" - semver: "npm:^7.3.4" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be - languageName: node - linkType: hard - -"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": - version: 6.0.2 - resolution: "normalize-package-data@npm:6.0.2" - dependencies: - hosted-git-info: "npm:^7.0.0" - semver: "npm:^7.3.5" - validate-npm-package-license: "npm:^3.0.4" - checksum: 10c0/7e32174e7f5575ede6d3d449593247183880122b4967d4ae6edb28cea5769ca025defda54fc91ec0e3c972fdb5ab11f9284606ba278826171b264cb16a9311ef - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - -"normalize-url@npm:^6.0.1": - version: 6.1.0 - resolution: "normalize-url@npm:6.1.0" - checksum: 10c0/95d948f9bdd2cfde91aa786d1816ae40f8262946e13700bf6628105994fe0ff361662c20af3961161c38a119dc977adeb41fc0b41b1745eb77edaaf9cb22db23 - languageName: node - linkType: hard - -"npm-bundled@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-bundled@npm:3.0.1" - dependencies: - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10c0/7975590a50b7ce80dd9f3eddc87f7e990c758f2f2c4d9313dd67a9aca38f1a5ac0abe20d514b850902c441e89d2346adfc3c6f1e9cbab3ea28ebb653c4442440 - languageName: node - linkType: hard - -"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": - version: 6.3.0 - resolution: "npm-install-checks@npm:6.3.0" - dependencies: - semver: "npm:^7.1.1" - checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 - languageName: node - linkType: hard - -"npm-normalize-package-bin@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-normalize-package-bin@npm:3.0.1" - checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 - languageName: node - linkType: hard - -"npm-package-arg@npm:11.0.2": - version: 11.0.2 - resolution: "npm-package-arg@npm:11.0.2" - dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/d730572e128980db45c97c184a454cb565283bf849484bf92e3b4e8ec2d08a21bd4b2cba9467466853add3e8c7d81e5de476904ac241f3ae63e6905dfc8196d4 - languageName: node - linkType: hard - -"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": - version: 11.0.3 - resolution: "npm-package-arg@npm:11.0.3" - dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a - languageName: node - linkType: hard - -"npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": - version: 8.0.2 - resolution: "npm-packlist@npm:8.0.2" - dependencies: - ignore-walk: "npm:^6.0.4" - checksum: 10c0/ac3140980b1475c2e9acd3d0ca1acd0f8660c357aed357f1a4ebff2270975e0280a3b1c4938e2f16bd68217853ceb5725cf8779ec3752dfcc546582751ceedff - languageName: node - linkType: hard - -"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": - version: 9.1.0 - resolution: "npm-pick-manifest@npm:9.1.0" - dependencies: - npm-install-checks: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - npm-package-arg: "npm:^11.0.0" - semver: "npm:^7.3.5" - checksum: 10c0/8765f4199755b381323da2bff2202b4b15b59f59dba0d1be3f2f793b591321cd19e1b5a686ef48d9753a6bd4868550da632541a45dfb61809d55664222d73e44 - languageName: node - linkType: hard - -"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": - version: 17.1.0 - resolution: "npm-registry-fetch@npm:17.1.0" - dependencies: - "@npmcli/redact": "npm:^2.0.0" - jsonparse: "npm:^1.3.1" - make-fetch-happen: "npm:^13.0.0" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minizlib: "npm:^2.1.2" - npm-package-arg: "npm:^11.0.0" - proc-log: "npm:^4.0.0" - checksum: 10c0/3f66214e106609fd2e92704e62ac929cba1424d4013fec50f783afbb81168b0dc14457d35c1716a77e30fc482c3576bdc4e4bc5c84a714cac59cf98f96a17f47 - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: "npm:^3.0.0" - checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac - languageName: node - linkType: hard - -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: "npm:^2.0.0" - console-control-strings: "npm:^1.1.0" - gauge: "npm:^3.0.0" - set-blocking: "npm:^2.0.0" - checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa - languageName: node - linkType: hard - -"nth-check@npm:~1.0.0, nth-check@npm:~1.0.1": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: "npm:~1.0.0" - checksum: 10c0/1a67ce53a99e276eea672f892d712b29f3e6802bbbef7285ffab72ecea4f972e8244defac1ebded0daffabf459def31355bb9c64e5657ac2ab032c13f185d0fd - languageName: node - linkType: hard - -"nx@npm:17.2.5, nx@npm:v17.2.5": - version: 17.2.5 - resolution: "nx@npm:17.2.5" - dependencies: - "@nrwl/tao": "npm:v17.2.5" - "@nx/nx-darwin-arm64": "npm:v17.2.5" - "@nx/nx-darwin-x64": "npm:v17.2.5" - "@nx/nx-freebsd-x64": "npm:v17.2.5" - "@nx/nx-linux-arm-gnueabihf": "npm:v17.2.5" - "@nx/nx-linux-arm64-gnu": "npm:v17.2.5" - "@nx/nx-linux-arm64-musl": "npm:v17.2.5" - "@nx/nx-linux-x64-gnu": "npm:v17.2.5" - "@nx/nx-linux-x64-musl": "npm:v17.2.5" - "@nx/nx-win32-arm64-msvc": "npm:v17.2.5" - "@nx/nx-win32-x64-msvc": "npm:v17.2.5" - "@yarnpkg/lockfile": "npm:^1.1.0" - "@yarnpkg/parsers": "npm:3.0.0-rc.46" - "@zkochan/js-yaml": "npm:0.0.6" - axios: "npm:^1.5.1" - chalk: "npm:^4.1.0" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:^8.0.1" - dotenv: "npm:~16.3.1" - dotenv-expand: "npm:~10.0.0" - enquirer: "npm:~2.3.6" - figures: "npm:3.2.0" - flat: "npm:^5.0.2" - fs-extra: "npm:^11.1.0" - glob: "npm:7.1.4" - ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" - js-yaml: "npm:4.1.0" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:~2.0.3" - minimatch: "npm:3.0.5" - node-machine-id: "npm:1.1.12" - npm-run-path: "npm:^4.0.1" - open: "npm:^8.4.0" - semver: "npm:7.5.3" - string-width: "npm:^4.2.3" - strong-log-transformer: "npm:^2.1.0" - tar-stream: "npm:~2.2.0" - tmp: "npm:~0.2.1" - tsconfig-paths: "npm:^4.1.2" - tslib: "npm:^2.3.0" - yargs: "npm:^17.6.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.6.7 - "@swc/core": ^1.3.85 - dependenciesMeta: - "@nx/nx-darwin-arm64": - optional: true - "@nx/nx-darwin-x64": - optional: true - "@nx/nx-freebsd-x64": - optional: true - "@nx/nx-linux-arm-gnueabihf": - optional: true - "@nx/nx-linux-arm64-gnu": - optional: true - "@nx/nx-linux-arm64-musl": - optional: true - "@nx/nx-linux-x64-gnu": - optional: true - "@nx/nx-linux-x64-musl": - optional: true - "@nx/nx-win32-arm64-msvc": - optional: true - "@nx/nx-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@swc-node/register": - optional: true - "@swc/core": - optional: true - bin: - nx: bin/nx.js - nx-cloud: bin/nx-cloud.js - checksum: 10c0/5438bd50e19a6fab01f4f08847045f4d9f67d446eed279027ca7de11a2f20ca9ad0a7e2ec195d8422d2c1f9e401eb3bb7bfd01e97c7c4cd933ed763949f6dbd4 - languageName: node - linkType: hard - -"nx@npm:>=17.1.2 < 21": - version: 20.3.2 - resolution: "nx@npm:20.3.2" - dependencies: - "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:20.3.2" - "@nx/nx-darwin-x64": "npm:20.3.2" - "@nx/nx-freebsd-x64": "npm:20.3.2" - "@nx/nx-linux-arm-gnueabihf": "npm:20.3.2" - "@nx/nx-linux-arm64-gnu": "npm:20.3.2" - "@nx/nx-linux-arm64-musl": "npm:20.3.2" - "@nx/nx-linux-x64-gnu": "npm:20.3.2" - "@nx/nx-linux-x64-musl": "npm:20.3.2" - "@nx/nx-win32-arm64-msvc": "npm:20.3.2" - "@nx/nx-win32-x64-msvc": "npm:20.3.2" - "@yarnpkg/lockfile": "npm:^1.1.0" - "@yarnpkg/parsers": "npm:3.0.2" - "@zkochan/js-yaml": "npm:0.0.7" - axios: "npm:^1.7.4" - chalk: "npm:^4.1.0" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:^8.0.1" - dotenv: "npm:~16.4.5" - dotenv-expand: "npm:~11.0.6" - enquirer: "npm:~2.3.6" - figures: "npm:3.2.0" - flat: "npm:^5.0.2" - front-matter: "npm:^4.0.2" - ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:2.0.3" - minimatch: "npm:9.0.3" - node-machine-id: "npm:1.1.12" - npm-run-path: "npm:^4.0.1" - open: "npm:^8.4.0" - ora: "npm:5.3.0" - resolve.exports: "npm:2.0.3" - semver: "npm:^7.5.3" - string-width: "npm:^4.2.3" - tar-stream: "npm:~2.2.0" - tmp: "npm:~0.2.1" - tsconfig-paths: "npm:^4.1.2" - tslib: "npm:^2.3.0" - yaml: "npm:^2.6.0" - yargs: "npm:^17.6.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.8.0 - "@swc/core": ^1.3.85 - dependenciesMeta: - "@nx/nx-darwin-arm64": - optional: true - "@nx/nx-darwin-x64": - optional: true - "@nx/nx-freebsd-x64": - optional: true - "@nx/nx-linux-arm-gnueabihf": - optional: true - "@nx/nx-linux-arm64-gnu": - optional: true - "@nx/nx-linux-arm64-musl": - optional: true - "@nx/nx-linux-x64-gnu": - optional: true - "@nx/nx-linux-x64-musl": - optional: true - "@nx/nx-win32-arm64-msvc": - optional: true - "@nx/nx-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@swc-node/register": - optional: true - "@swc/core": - optional: true - bin: - nx: bin/nx.js - nx-cloud: bin/nx-cloud.js - checksum: 10c0/e84b748f45cdce3f57a17b99627a8d2d7ff9c41a4eaa9b88775576b03e3dcd9d0f707f28303b05483fe9478dce58f2d7ecf9a29e8a12902a8247e73a4ae48755 - languageName: node - linkType: hard - -"oauth-sign@npm:~0.9.0": - version: 0.9.0 - resolution: "oauth-sign@npm:0.9.0" - checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-hash@npm:^2.0.1": - version: 2.2.0 - resolution: "object-hash@npm:2.2.0" - checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.3 - resolution: "object-inspect@npm:1.13.3" - checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d - languageName: node - linkType: hard - -"object.assign@npm:^4.1.2, object.assign@npm:^4.1.7": - version: 4.1.7 - resolution: "object.assign@npm:4.1.7" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - has-symbols: "npm:^1.1.0" - object-keys: "npm:^1.1.1" - checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc - languageName: node - linkType: hard - -"object.entries@npm:^1.1.5": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.2, object.fromentries@npm:^2.0.8": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b - languageName: node - linkType: hard - -"object.getownpropertydescriptors@npm:^2.1.8": - version: 2.1.8 - resolution: "object.getownpropertydescriptors@npm:2.1.8" - dependencies: - array.prototype.reduce: "npm:^1.0.6" - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - gopd: "npm:^1.0.1" - safe-array-concat: "npm:^1.1.2" - checksum: 10c0/553e9562fd86637c9c169df23a56f1d810d8c9b580a6d4be11552c009f32469310c9347f3d10325abf0cd9cfe4afc521a1e903fbd24148ae7ec860e1e7c75cf3 - languageName: node - linkType: hard - -"object.groupby@npm:^1.0.3": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c - languageName: node - linkType: hard - -"object.values@npm:^1.2.0": - version: 1.2.1 - resolution: "object.values@npm:1.2.1" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 - languageName: node - linkType: hard - -"oidc-token-hash@npm:^5.0.1": - version: 5.0.3 - resolution: "oidc-token-hash@npm:5.0.3" - checksum: 10c0/d0dc0551406f09577874155cc83cf69c39e4b826293d50bb6c37936698aeca17d4bcee356ab910c859e53e83f2728a2acbd041020165191353b29de51fbca615 - languageName: node - linkType: hard - -"on-finished@npm:2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: "npm:1.1.1" - checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 - languageName: node - linkType: hard - -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f - languageName: node - linkType: hard - -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f - languageName: node - linkType: hard - -"open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" - dependencies: - define-lazy-prop: "npm:^2.0.0" - is-docker: "npm:^2.1.1" - is-wsl: "npm:^2.2.0" - checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 - languageName: node - linkType: hard - -"openid-client@npm:^4.7.4": - version: 4.9.1 - resolution: "openid-client@npm:4.9.1" - dependencies: - aggregate-error: "npm:^3.1.0" - got: "npm:^11.8.0" - jose: "npm:^2.0.5" - lru-cache: "npm:^6.0.0" - make-error: "npm:^1.3.6" - object-hash: "npm:^2.0.1" - oidc-token-hash: "npm:^5.0.1" - checksum: 10c0/88af2e7c17e62eaddd3f27e96567ef9c08dbd3266a6ff9c4e058128191d2d4ec07c49eaa523d9159953835fc90c59470270f6050872afb70c5c9576c387833e7 - languageName: node - linkType: hard - -"optimist@npm:^0.6.1": - version: 0.6.1 - resolution: "optimist@npm:0.6.1" - dependencies: - minimist: "npm:~0.0.1" - wordwrap: "npm:~0.0.2" - checksum: 10c0/8cb417328121e732dbfb4d94d53bb39b1406446b55323ed4ce787decc52394927e051ba879eb3ffa3171fe22a35ce13b460114b60effcead77443ee87c2f9b0f - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - dependencies: - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - word-wrap: "npm:^1.2.5" - checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 - languageName: node - linkType: hard - -"ora@npm:5.3.0": - version: 5.3.0 - resolution: "ora@npm:5.3.0" - dependencies: - bl: "npm:^4.0.3" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - log-symbols: "npm:^4.0.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10c0/30d5f3218eb75b0a2028c5fb9aa88e83e38a2f1745ab56839abb06c3ba31bae35f768f4e72c4f9e04e2a66be6a898e9312e8cf85c9333e1e3613eabb8c7cdf57 - languageName: node - linkType: hard - -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: "npm:^4.1.0" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - is-unicode-supported: "npm:^0.1.0" - log-symbols: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10c0/10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"own-keys@npm:^1.0.1": - version: 1.0.1 - resolution: "own-keys@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.2.6" - object-keys: "npm:^1.1.1" - safe-push-apply: "npm:^1.0.0" - checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a - languageName: node - linkType: hard - -"p-cancelable@npm:^2.0.0": - version: 2.1.1 - resolution: "p-cancelable@npm:2.1.1" - checksum: 10c0/8c6dc1f8dd4154fd8b96a10e55a3a832684c4365fb9108056d89e79fbf21a2465027c04a59d0d797b5ffe10b54a61a32043af287d5c4860f1e996cbdbc847f01 - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 - languageName: node - linkType: hard - -"p-limit@npm:^1.1.0": - version: 1.3.0 - resolution: "p-limit@npm:1.3.0" - dependencies: - p-try: "npm:^1.0.0" - checksum: 10c0/5c1b1d53d180b2c7501efb04b7c817448e10efe1ba46f4783f8951994d5027e4cd88f36ad79af50546682594c4ebd11702ac4b9364c47f8074890e2acad0edee - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-locate@npm:^2.0.0": - version: 2.0.0 - resolution: "p-locate@npm:2.0.0" - dependencies: - p-limit: "npm:^1.1.0" - checksum: 10c0/82da4be88fb02fd29175e66021610c881938d3cc97c813c71c1a605fac05617d57fd5d3b337494a6106c0edb2a37c860241430851411f1b265108cead34aee67 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: "npm:^3.0.2" - checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a - languageName: node - linkType: hard - -"p-map-series@npm:2.1.0": - version: 2.1.0 - resolution: "p-map-series@npm:2.1.0" - checksum: 10c0/302ca686a61c498b227fc45d4e2b2e5bfd20a03f4156a976d94c4ff7decf9cd5a815fa6846b43b37d587ffa8d4671ff2bd596fa83fe8b9113b5102da94940e2a - languageName: node - linkType: hard - -"p-map@npm:4.0.0, p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - -"p-map@npm:^2.1.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c - languageName: node - linkType: hard - -"p-pipe@npm:3.1.0": - version: 3.1.0 - resolution: "p-pipe@npm:3.1.0" - checksum: 10c0/9b3076828ea7e9469c0f92c78fa44096726208d547efdb2d6148cbe135d1a70bd449de5be13e234dd669d9515343bd68527b316bf9d5639cee639e2fdde20aaf - languageName: node - linkType: hard - -"p-queue@npm:6.6.2": - version: 6.6.2 - resolution: "p-queue@npm:6.6.2" - dependencies: - eventemitter3: "npm:^4.0.4" - p-timeout: "npm:^3.2.0" - checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e - languageName: node - linkType: hard - -"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": - version: 2.1.0 - resolution: "p-reduce@npm:2.1.0" - checksum: 10c0/27b8ff0fb044995507a06cd6357dffba0f2b98862864745972562a21885d7906ce5c794036d2aaa63ef6303158e41e19aed9f19651dfdafb38548ecec7d0de15 - languageName: node - linkType: hard - -"p-timeout@npm:^3.2.0": - version: 3.2.0 - resolution: "p-timeout@npm:3.2.0" - dependencies: - p-finally: "npm:^1.0.0" - checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 - languageName: node - linkType: hard - -"p-try@npm:^1.0.0": - version: 1.0.0 - resolution: "p-try@npm:1.0.0" - checksum: 10c0/757ba31de5819502b80c447826fac8be5f16d3cb4fbf9bc8bc4971dba0682e84ac33e4b24176ca7058c69e29f64f34d8d9e9b08e873b7b7bb0aa89d620fa224a - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"p-waterfall@npm:2.1.1": - version: 2.1.1 - resolution: "p-waterfall@npm:2.1.1" - dependencies: - p-reduce: "npm:^2.0.0" - checksum: 10c0/ccae582b75a3597018a375f8eac32b93e8bfb9fc22a8e5037787ef4ebf5958d7465c2d3cbe26443971fbbfda2bcb7b645f694b91f928fc9a71fa5031e6e33f85 - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"pacote@npm:^18.0.0, pacote@npm:^18.0.6": - version: 18.0.6 - resolution: "pacote@npm:18.0.6" - dependencies: - "@npmcli/git": "npm:^5.0.0" - "@npmcli/installed-package-contents": "npm:^2.0.1" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - "@npmcli/run-script": "npm:^8.0.0" - cacache: "npm:^18.0.0" - fs-minipass: "npm:^3.0.0" - minipass: "npm:^7.0.2" - npm-package-arg: "npm:^11.0.0" - npm-packlist: "npm:^8.0.0" - npm-pick-manifest: "npm:^9.0.0" - npm-registry-fetch: "npm:^17.0.0" - proc-log: "npm:^4.0.0" - promise-retry: "npm:^2.0.1" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - bin: - pacote: bin/index.js - checksum: 10c0/d80907375dd52a521255e0debca1ba9089ad8fd7acdf16c5a5db2ea2a5bb23045e2bcf08d1648b1ebc40fcc889657db86ff6187ff5f8d2fc312cd6ad1ec4c6ac - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"parse-conflict-json@npm:^3.0.0": - version: 3.0.1 - resolution: "parse-conflict-json@npm:3.0.1" - dependencies: - json-parse-even-better-errors: "npm:^3.0.0" - just-diff: "npm:^6.0.0" - just-diff-apply: "npm:^5.2.0" - checksum: 10c0/610b37181229ce3e945125c3a9548ec24d1de2d697a7ea3ef0f2660cccc6613715c2ba4bdbaf37c565133d6b61758703618a2c63d1ee29f97fd33c70a8aae323 - languageName: node - linkType: hard - -"parse-imports@npm:^2.1.1": - version: 2.2.1 - resolution: "parse-imports@npm:2.2.1" - dependencies: - es-module-lexer: "npm:^1.5.3" - slashes: "npm:^3.0.12" - checksum: 10c0/bc541ce4ef2ff77d53247de39a956e0ee7a1a4b9b175c3e0f898222fe7994595f011491154db4ed408cbaf5049ede9d0b6624125565be208e973a54420cbe069 - languageName: node - linkType: hard - -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: "npm:^1.3.1" - json-parse-better-errors: "npm:^1.0.1" - checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": "npm:^7.0.0" - error-ex: "npm:^1.3.1" - json-parse-even-better-errors: "npm:^2.3.0" - lines-and-columns: "npm:^1.1.6" - checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 - languageName: node - linkType: hard - -"parse-link-header@npm:^1.0.1": - version: 1.0.1 - resolution: "parse-link-header@npm:1.0.1" - dependencies: - xtend: "npm:~4.0.1" - checksum: 10c0/7d0c1f94b4d400ac8605e6d18aced0139e15a08f3dc886567894953727db82bb387febb9a7a6837a4809ca75abd32364bb54d447c050db4a017754ff8949c1fa - languageName: node - linkType: hard - -"parse-path@npm:^7.0.0": - version: 7.0.0 - resolution: "parse-path@npm:7.0.0" - dependencies: - protocols: "npm:^2.0.0" - checksum: 10c0/e7646f6b998b083bbd40102643d803557ce4ae18ae1704e6cc7ae2525ea7c5400f4a3635aca3244cfe65ce4dd0ff77db1142dde4d080e8a80c364c4b3e8fe8d2 - languageName: node - linkType: hard - -"parse-srcset@npm:^1.0.2": - version: 1.0.2 - resolution: "parse-srcset@npm:1.0.2" - checksum: 10c0/2f268e3d110d4c53d06ed2a8e8ee61a7da0cee13bf150819a6da066a8ca9b8d15b5600d6e6cae8be940e2edc50ee7c1e1052934d6ec858324065ecef848f0497 - languageName: node - linkType: hard - -"parse-url@npm:^8.1.0": - version: 8.1.0 - resolution: "parse-url@npm:8.1.0" - dependencies: - parse-path: "npm:^7.0.0" - checksum: 10c0/68b95afdf4bbf72e57c7ab66f8757c935fff888f7e2b0f1e06098b4faa19e06b6b743bddaed5bc8df4f0c2de6fc475355d787373b2fdd40092be9e4e4b996648 - languageName: node - linkType: hard - -"parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 - languageName: node - linkType: hard - -"passport-cas2@npm:0.0.12": - version: 0.0.12 - resolution: "passport-cas2@npm:0.0.12" - dependencies: - cas: "git+https://github.com/joshchan/node-cas.git" - passport-strategy: "npm:^1.0.0" - checksum: 10c0/86050abe8da35304efae98402f4b6be1be9793d43d78e30e83d7431e8ab5e389aa12c348d426144f53413ce6d19240227e7a7f22e7253c768d1f6cabf34b3409 - languageName: node - linkType: hard - -"passport-local@npm:^1.0.0": - version: 1.0.0 - resolution: "passport-local@npm:1.0.0" - dependencies: - passport-strategy: "npm:1.x.x" - checksum: 10c0/59becb988014921a5d6056470d9373c41db452fcf113323064f39d53baa6f184e72151bf269ca6770511f7f0260e13632dacc7b6afdbf60ebf63e90327e186d4 - languageName: node - linkType: hard - -"passport-strategy@npm:1.x.x, passport-strategy@npm:^1.0.0": - version: 1.0.0 - resolution: "passport-strategy@npm:1.0.0" - checksum: 10c0/cf4cd32e1bf2538a239651581292fbb91ccc83973cde47089f00d2014c24bed63d3e65af21da8ddef649a8896e089eb9c3ac9ca639f36c797654ae9ee4ed65e1 - languageName: node - linkType: hard - -"passport@npm:^0.4.1": - version: 0.4.1 - resolution: "passport@npm:0.4.1" - dependencies: - passport-strategy: "npm:1.x.x" - pause: "npm:0.0.1" - checksum: 10c0/aa1a8eb2e991368734ae1e33d354c94a02c5fcd27c4ef25c3c303b4f3df1e05512ac0159e608cedbfc8c544c166735a153124cfa3bd8d48fb01f5ded500f0c5f - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"path-to-regexp@npm:^3.1.0": - version: 3.3.0 - resolution: "path-to-regexp@npm:3.3.0" - checksum: 10c0/ffa0ebe7088d38d435a8d08b0fe6e8c93ceb2a81a65d4dd1d9a538f52e09d5e3474ed5f553cb3b180d894b0caa10698a68737ab599fd1e56b4663d1a64c9f77b - languageName: node - linkType: hard - -"path-to-regexp@npm:^6.2.0": - version: 6.3.0 - resolution: "path-to-regexp@npm:6.3.0" - checksum: 10c0/73b67f4638b41cde56254e6354e46ae3a2ebc08279583f6af3d96fe4664fc75788f74ed0d18ca44fa4a98491b69434f9eee73b97bb5314bd1b5adb700f5c18d6 - languageName: node - linkType: hard - -"path-type@npm:^3.0.0": - version: 3.0.0 - resolution: "path-type@npm:3.0.0" - dependencies: - pify: "npm:^3.0.0" - checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"pause@npm:0.0.1": - version: 0.0.1 - resolution: "pause@npm:0.0.1" - checksum: 10c0/f362655dfa7f44b946302c5a033148852ed5d05f744bd848b1c7eae6a543f743e79c7751ee896ba519fd802affdf239a358bb2ea5ca1b1c1e4e916279f83ab75 - languageName: node - linkType: hard - -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 - languageName: node - linkType: hard - -"pify@npm:5.0.0": - version: 5.0.0 - resolution: "pify@npm:5.0.0" - checksum: 10c0/9f6f3cd1f159652692f514383efe401a06473af35a699962230ad1c4c9796df5999961461fc1a3b81eed8e3e74adb8bd032474fb3f93eb6bdbd9f33328da1ed2 - languageName: node - linkType: hard - -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 - languageName: node - linkType: hard - -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf - languageName: node - linkType: hard - -"pirates@npm:^4.0.7": - version: 4.0.7 - resolution: "pirates@npm:4.0.7" - checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a - languageName: node - linkType: hard - -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: "npm:^4.0.0" - checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 - languageName: node - linkType: hard - -"possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.10": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e - languageName: node - linkType: hard - -"postcss@npm:^8.3.11": - version: 8.5.1 - resolution: "postcss@npm:8.5.1" - dependencies: - nanoid: "npm:^3.3.8" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 - languageName: node - linkType: hard - -"prebuild-install@npm:^7.1.1": - version: 7.1.2 - resolution: "prebuild-install@npm:7.1.2" - dependencies: - detect-libc: "npm:^2.0.0" - expand-template: "npm:^2.0.3" - github-from-package: "npm:0.0.0" - minimist: "npm:^1.2.3" - mkdirp-classic: "npm:^0.5.3" - napi-build-utils: "npm:^1.0.1" - node-abi: "npm:^3.3.0" - pump: "npm:^3.0.0" - rc: "npm:^1.2.7" - simple-get: "npm:^4.0.0" - tar-fs: "npm:^2.0.0" - tunnel-agent: "npm:^0.6.0" - bin: - prebuild-install: bin.js - checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd - languageName: node - linkType: hard - -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: "npm:^1.1.2" - checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab - languageName: node - linkType: hard - -"prettier@npm:^3.1.1": - version: 3.4.2 - resolution: "prettier@npm:3.4.2" - bin: - prettier: bin/prettier.cjs - checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 - languageName: node - linkType: hard - -"pretty-format@npm:30.0.5, pretty-format@npm:^30.0.0": - version: 30.0.5 - resolution: "pretty-format@npm:30.0.5" - dependencies: - "@jest/schemas": "npm:30.0.5" - ansi-styles: "npm:^5.2.0" - react-is: "npm:^18.3.1" - checksum: 10c0/9f6cf1af5c3169093866c80adbfdad32f69c692b62f24ba3ca8cdec8519336123323f896396f9fa40346a41b197c5f6be15aec4d8620819f12496afaaca93f81 - languageName: node - linkType: hard - -"pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f - languageName: node - linkType: hard - -"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 - languageName: node - linkType: hard - -"proc-log@npm:^5.0.0": - version: 5.0.0 - resolution: "proc-log@npm:5.0.0" - checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 - languageName: node - linkType: hard - -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 - languageName: node - linkType: hard - -"proggy@npm:^2.0.0": - version: 2.0.0 - resolution: "proggy@npm:2.0.0" - checksum: 10c0/1bfc14fa95769e6dd7e91f9d3cae8feb61e6d833ed7210d87ee5413bfa068f4ee7468483da96b2f138c40a7e91a2307f5d5d2eb6de9761c21e266a34602e6a5f - languageName: node - linkType: hard - -"promise-all-reject-late@npm:^1.0.0": - version: 1.0.1 - resolution: "promise-all-reject-late@npm:1.0.1" - checksum: 10c0/f1af0c7b0067e84d64751148ee5bb6c3e84f4a4d1316d6fe56261e1d2637cf71b49894bcbd2c6daf7d45afb1bc99efc3749be277c3e0518b70d0c5a29d037011 - languageName: node - linkType: hard - -"promise-call-limit@npm:^3.0.1": - version: 3.0.2 - resolution: "promise-call-limit@npm:3.0.2" - checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 - languageName: node - linkType: hard - -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc - languageName: node - linkType: hard - -"promise-limit@npm:^2.7.0": - version: 2.7.0 - resolution: "promise-limit@npm:2.7.0" - checksum: 10c0/ce220a7e11c8d0541940a3d99cc424bd16a18451b295a263f6dbaa998585d2d1afa71fcb7bb29078a61e214d2f13d96e9b082e96e8e357fbe5c5936ef2459cba - languageName: node - linkType: hard - -"promise-polyfill@npm:^1.1.6": - version: 1.1.6 - resolution: "promise-polyfill@npm:1.1.6" - checksum: 10c0/055859bba9da0b26994c6521473794cd3bd523f7cf61c5554c4a279ff86a3c11be21d222995d469efffa9b26b96577535286ded5566e4dc4d7c26338dfdf52c7 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"promise.prototype.finally@npm:^3.1.2": - version: 3.1.8 - resolution: "promise.prototype.finally@npm:3.1.8" - dependencies: - call-bind: "npm:^1.0.5" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" - es-errors: "npm:^1.0.0" - set-function-name: "npm:^2.0.1" - checksum: 10c0/5d56eaa3531c3fc03fdd5eef3b3270b3098ff158a4c82261331c9dca3f4f2b5e1c86a2a6a34e752ea978b8736cc7c130dda78ce53f8933d456c24a3c5749482e - languageName: node - linkType: hard - -"promise@npm:^7.0.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: "npm:~2.0.3" - checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f - languageName: node - linkType: hard - -"promzard@npm:^1.0.0": - version: 1.0.2 - resolution: "promzard@npm:1.0.2" - dependencies: - read: "npm:^3.0.1" - checksum: 10c0/d53c4ecb8b606b7e4bdeab14ac22c5f81a57463d29de1b8fe43bbc661106d9e4a79d07044bd3f69bde82c7ebacba7307db90a9699bc20482ce637bdea5fb8e4b - languageName: node - linkType: hard - -"protocols@npm:^2.0.0, protocols@npm:^2.0.1": - version: 2.0.1 - resolution: "protocols@npm:2.0.1" - checksum: 10c0/016cc58a596e401004a028a2f7005e3444bf89ee8f606409c411719374d1e8bba0464fc142a065cce0d19f41669b2f7ffe25a8bde4f16ce3b6eb01fabc51f2e7 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 10c0/5a91ce114c64ed3a6a553aa7d2943868811377388bb31447f9d8028271bae9b05b340fe0b6961a64e45b9c72946aeb0a4ab635e8f7cb3715ffd0ff2beeb6a679 - languageName: node - linkType: hard - -"psl@npm:^1.1.28": - version: 1.15.0 - resolution: "psl@npm:1.15.0" - dependencies: - punycode: "npm:^2.3.1" - checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a - languageName: node - linkType: hard - -"pug-attrs@npm:^3.0.0": - version: 3.0.0 - resolution: "pug-attrs@npm:3.0.0" - dependencies: - constantinople: "npm:^4.0.1" - js-stringify: "npm:^1.0.2" - pug-runtime: "npm:^3.0.0" - checksum: 10c0/28178e91c05e8eb9130861c78dccc61eae3e1610931346065bd32ad0b08b023a8dcf2470c3b2409ba45a5098d6d7ed15687717e91cf77770c6381a18626e5194 - languageName: node - linkType: hard - -"pug-code-gen@npm:^3.0.3": - version: 3.0.3 - resolution: "pug-code-gen@npm:3.0.3" - dependencies: - constantinople: "npm:^4.0.1" - doctypes: "npm:^1.1.0" - js-stringify: "npm:^1.0.2" - pug-attrs: "npm:^3.0.0" - pug-error: "npm:^2.1.0" - pug-runtime: "npm:^3.0.1" - void-elements: "npm:^3.1.0" - with: "npm:^7.0.0" - checksum: 10c0/517a93930dbc80bc7fa5f60ff324229a07cc5ab70ed9d344ce105e2fe24de68db5121c8457a9ba99cdc8d48dd18779dd34956ebfcab009b3c1c6843a3cade109 - languageName: node - linkType: hard - -"pug-error@npm:^2.0.0, pug-error@npm:^2.1.0": - version: 2.1.0 - resolution: "pug-error@npm:2.1.0" - checksum: 10c0/bbce339b17fab9890de84975c0cd8723a847bf65f35653d3ebcf77018e8ad91529d56e978ab80f4c64c9f4f07ef9e56e7a9fda3be44249c344a93ba11fccff79 - languageName: node - linkType: hard - -"pug-filters@npm:^4.0.0": - version: 4.0.0 - resolution: "pug-filters@npm:4.0.0" - dependencies: - constantinople: "npm:^4.0.1" - jstransformer: "npm:1.0.0" - pug-error: "npm:^2.0.0" - pug-walk: "npm:^2.0.0" - resolve: "npm:^1.15.1" - checksum: 10c0/7ddd62f5eb97f5242858bd56d93ffed387fef3742210a53770c980020cf91a34384b84b7fc8f0de185b43dfa77de2c4d0f63f575a4c5b3887fdef4e64b8d559d - languageName: node - linkType: hard - -"pug-lexer@npm:^5.0.1": - version: 5.0.1 - resolution: "pug-lexer@npm:5.0.1" - dependencies: - character-parser: "npm:^2.2.0" - is-expression: "npm:^4.0.0" - pug-error: "npm:^2.0.0" - checksum: 10c0/24195a5681953ab91c6a3ccd80a643f760dddb65e2f266bf8ccba145018ba0271536efe1572de2c2224163eb00873c2f1df0ad7ea7aa8bcbf79a66b586ca8435 - languageName: node - linkType: hard - -"pug-linker@npm:^4.0.0": - version: 4.0.0 - resolution: "pug-linker@npm:4.0.0" - dependencies: - pug-error: "npm:^2.0.0" - pug-walk: "npm:^2.0.0" - checksum: 10c0/db754ff34cdd4ba9d9e2d9535cce2a74178f2172e848a5fa6381907cb5bfaa0d39d4cc3eb29893d35fc1c417e83ae3cfd434640ba7d3b635c63199104fae976c - languageName: node - linkType: hard - -"pug-load@npm:^3.0.0": - version: 3.0.0 - resolution: "pug-load@npm:3.0.0" - dependencies: - object-assign: "npm:^4.1.1" - pug-walk: "npm:^2.0.0" - checksum: 10c0/2a7659dfaf9872dd25d851f85e4c27fa447d907b1db3540030cd844614159ff181e067d8f2bedf90eb6b5b1ff03747253859ecbbb822e40f4834b15591d4e108 - languageName: node - linkType: hard - -"pug-parser@npm:^6.0.0": - version: 6.0.0 - resolution: "pug-parser@npm:6.0.0" - dependencies: - pug-error: "npm:^2.0.0" - token-stream: "npm:1.0.0" - checksum: 10c0/faa6cec43afdeb2705eb8c68dfdb2e65836238df8043ae55295ffb72450b8c7a990ea1be60adbde19f58988b9e1d18a84ea42453e2c4f104d0031f78fda737b2 - languageName: node - linkType: hard - -"pug-runtime@npm:^3.0.0, pug-runtime@npm:^3.0.1": - version: 3.0.1 - resolution: "pug-runtime@npm:3.0.1" - checksum: 10c0/0db8166d2e17695a6941d1de81dcb21c8a52921299b1e03bf6a0a3d2b0036b51cf98101b3937b731c745e8d3e0268cb0b728c02f61a80a25fcfaa15c594fb1be - languageName: node - linkType: hard - -"pug-strip-comments@npm:^2.0.0": - version: 2.0.0 - resolution: "pug-strip-comments@npm:2.0.0" - dependencies: - pug-error: "npm:^2.0.0" - checksum: 10c0/ca498adedaeba51dd836b20129bbd161e2d5a397a2baaa553b1e74e888caa2258dcd7326396fc6f8fed8c7b7f906cfebc4c386ccbee8888a27b2ca0d4d86d206 - languageName: node - linkType: hard - -"pug-walk@npm:^2.0.0": - version: 2.0.0 - resolution: "pug-walk@npm:2.0.0" - checksum: 10c0/005d63177bcf057f5a618b182f6d4600afb039200b07a381a0d89288a2b3126e763a0a6c40b758eab0731c8e63cad1bbcb46d96803b9ae9cfc879f6ef5a0f8f4 - languageName: node - linkType: hard - -"pug@npm:^3.0.2": - version: 3.0.3 - resolution: "pug@npm:3.0.3" - dependencies: - pug-code-gen: "npm:^3.0.3" - pug-filters: "npm:^4.0.0" - pug-lexer: "npm:^5.0.1" - pug-linker: "npm:^4.0.0" - pug-load: "npm:^3.0.0" - pug-parser: "npm:^6.0.0" - pug-runtime: "npm:^3.0.1" - pug-strip-comments: "npm:^2.0.0" - checksum: 10c0/bda53d3a6deea1d348cd5ab17427c77f3d74165510ad16f4fd182cc63618ad09388ecda317d17122ee890c8a68f9a54b96221fce7f44a332e463fdbb10a9d1e2 - languageName: node - linkType: hard - -"pump@npm:^3.0.0": - version: 3.0.2 - resolution: "pump@npm:3.0.2" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 - languageName: node - linkType: hard - -"pure-rand@npm:^7.0.0": - version: 7.0.1 - resolution: "pure-rand@npm:7.0.1" - checksum: 10c0/9cade41030f5ec95f5d55a11a71404cd6f46b69becaad892097cd7f58e2c6248cd0a933349ca7d21336ab629f1da42ffe899699b671bc4651600eaf6e57f837e - languageName: node - linkType: hard - -"qs@npm:6.13.0": - version: 6.13.0 - resolution: "qs@npm:6.13.0" - dependencies: - side-channel: "npm:^1.0.6" - checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 - languageName: node - linkType: hard - -"qs@npm:^6.11.0, qs@npm:^6.5.1": - version: 6.14.0 - resolution: "qs@npm:6.14.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c - languageName: node - linkType: hard - -"qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.1.2, queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"quick-lru@npm:^4.0.1": - version: 4.0.1 - resolution: "quick-lru@npm:4.0.1" - checksum: 10c0/f9b1596fa7595a35c2f9d913ac312fede13d37dc8a747a51557ab36e11ce113bbe88ef4c0154968845559a7709cb6a7e7cbe75f7972182451cd45e7f057a334d - languageName: node - linkType: hard - -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da - languageName: node - linkType: hard - -"random-bytes@npm:~1.0.0": - version: 1.0.0 - resolution: "random-bytes@npm:1.0.0" - checksum: 10c0/71e7a600e0976e9ebc269793a0577d47b965fa678fcc9e9623e427f909d1b3669db5b3a178dbf61229f0724ea23dba64db389f0be0ba675c6a6b837c02f29b8f - languageName: node - linkType: hard - -"range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 - languageName: node - linkType: hard - -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: "npm:3.1.2" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - unpipe: "npm:1.0.0" - checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 - languageName: node - linkType: hard - -"rc@npm:^1.2.7": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: "npm:^0.6.0" - ini: "npm:~1.3.0" - minimist: "npm:^1.2.0" - strip-json-comments: "npm:~2.0.1" - bin: - rc: ./cli.js - checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 - languageName: node - linkType: hard - -"rdf-canonize@npm:^1.0.2": - version: 1.2.0 - resolution: "rdf-canonize@npm:1.2.0" - dependencies: - node-forge: "npm:^0.10.0" - semver: "npm:^6.3.0" - checksum: 10c0/d0955b79caa43c60a74c544163486bdb1b7462e8c4373e9bfae36afc93fb849271fb4fe2c228613d24b9c9f22195b5ed17f1cc6787538853e3dec1d0df1d3d10 - languageName: node - linkType: hard - -"rdf-canonize@npm:^2.0.1": - version: 2.0.1 - resolution: "rdf-canonize@npm:2.0.1" - dependencies: - semver: "npm:^6.3.0" - setimmediate: "npm:^1.0.5" - checksum: 10c0/2a3e158c8a2354aa5682d341c420d815b421325979c06d02e00f45dd7f3b4ef751dd0d072b227a16ebd1e5dbb1f82226a58d5b9cc6cfd246fc53fc04f7b613d0 - languageName: node - linkType: hard - -"rdf-canonize@npm:^3.4.0": - version: 3.4.0 - resolution: "rdf-canonize@npm:3.4.0" - dependencies: - setimmediate: "npm:^1.0.5" - checksum: 10c0/c78ccd8ff99abf749005f6c596d5ceb16edd7a9508e430cd636b89fba8f75e5698f2dd8294aeca389463b1f983326f8d50c9d4ad0a9195cf945f02731a720dea - languageName: node - linkType: hard - -"rdf-canonize@npm:^4.0.1": - version: 4.0.1 - resolution: "rdf-canonize@npm:4.0.1" - dependencies: - setimmediate: "npm:^1.0.5" - checksum: 10c0/8f6040847c5731817cc5ad95ca16caa588fba76c94ee3b24f282c9a3054f36226560bcb33bed8a173903960af1b9937e21db6e0dc2e90caa749682fff8228250 - languageName: node - linkType: hard - -"rdf-data-factory@npm:^1.1.0, rdf-data-factory@npm:^1.1.2": - version: 1.1.3 - resolution: "rdf-data-factory@npm:1.1.3" - dependencies: - "@rdfjs/types": "npm:^1.0.0" - checksum: 10c0/b5f5db1417afd72e690c60b0eb19388b0ed519e8d732419ccee4d3a5c15fa8cfd1b16380c9692dec26245a9bbf5ce2cb07360645d60e995337c34796da0c990a - languageName: node - linkType: hard - -"rdf-data-model@npm:^1.0.0": - version: 1.0.0 - resolution: "rdf-data-model@npm:1.0.0" - bin: - rdf-data-model-test: ./bin/test.js - checksum: 10c0/36a1a4961a186f832bc89d4831c3adafb7dbb9305e144ea7cc2a2df27c8a7df6d546f2481931f95eb081299a32d2223f7c4163d3cd18492773b443f1c938bdbc - languageName: node - linkType: hard - -"rdf-isomorphic@npm:^1.3.0": - version: 1.3.1 - resolution: "rdf-isomorphic@npm:1.3.1" - dependencies: - "@rdfjs/types": "npm:*" - hash.js: "npm:^1.1.7" - rdf-string: "npm:^1.6.0" - rdf-terms: "npm:^1.7.0" - checksum: 10c0/6da5545654045b643d12510e946677a6d724282dfeb58f215c26fa46cae1c525bfad4820bda7765f49902ee0cc75cffbcf646ca1e984ec35d71c8008ad3e6e83 - languageName: node - linkType: hard - -"rdf-parse@npm:^1.7.0": - version: 1.9.1 - resolution: "rdf-parse@npm:1.9.1" - dependencies: - "@comunica/actor-http-native": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-microdata": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-rdfa": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-script": "npm:~1.22.0" - "@comunica/actor-rdf-parse-jsonld": "npm:^1.22.0" - "@comunica/actor-rdf-parse-n3": "npm:~1.22.0" - "@comunica/actor-rdf-parse-rdfxml": "npm:~1.22.0" - "@comunica/actor-rdf-parse-xml-rdfa": "npm:~1.22.0" - "@comunica/bus-http": "npm:~1.22.0" - "@comunica/bus-init": "npm:~1.22.0" - "@comunica/bus-rdf-parse": "npm:~1.22.0" - "@comunica/bus-rdf-parse-html": "npm:~1.22.0" - "@comunica/core": "npm:~1.22.0" - "@comunica/mediator-combine-union": "npm:~1.22.0" - "@comunica/mediator-number": "npm:~1.22.0" - "@comunica/mediator-race": "npm:~1.22.0" - "@rdfjs/types": "npm:*" - stream-to-string: "npm:^1.2.0" - checksum: 10c0/b9d99f2ce16abc870e90425f626ce25ff861d389ebd1a8644313367c562551fb695c2088ea9ea72402d178238b89f67235d79d68a8e0819b2c1cad79fd9e3bea - languageName: node - linkType: hard - -"rdf-string@npm:^1.6.0": - version: 1.6.3 - resolution: "rdf-string@npm:1.6.3" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/d7fca91d659f1631708670efefe4d8243b55f18a74adb384b385f7562d3c1a7c7f0a64da09c094e08aced8dc9cfd870eadbec4fe97030d78a90ec69187f6a53c - languageName: node - linkType: hard - -"rdf-terms@npm:^1.7.0": - version: 1.11.0 - resolution: "rdf-terms@npm:1.11.0" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - rdf-string: "npm:^1.6.0" - checksum: 10c0/9603eef8b05c8254f1d12a75db894de85eb291fd1cff167d5dd4a3854ff7677ad6baea9ebbb164bc0ad0cbe37ab4317e96de61e98297937ea9237956ac951fab - languageName: node - linkType: hard - -"rdfa-streaming-parser@npm:^1.5.0": - version: 1.5.0 - resolution: "rdfa-streaming-parser@npm:1.5.0" - dependencies: - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^6.0.0" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.2" - checksum: 10c0/d2482dce371d90ca3c19b97b57b9c17ad07be5990bc6c11ec9b4a57f761ff5433567555ed87fa66144412a9239053d0b7cee85c370e4f02098b0338c2da971ba - languageName: node - linkType: hard - -"rdfxml-streaming-parser@npm:^1.5.0": - version: 1.5.0 - resolution: "rdfxml-streaming-parser@npm:1.5.0" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.0" - sax: "npm:^1.2.4" - checksum: 10c0/37a75a10608051f433d3c267b91f495f310ad1a65d7897b6c823311702c8ab2a11b2b54b64869fc2564f2792e426714c1cca478eb0105ce658caafdd78353d66 - languageName: node - linkType: hard - -"react-is@npm:^18.0.0, react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 - languageName: node - linkType: hard - -"read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": - version: 4.0.0 - resolution: "read-cmd-shim@npm:4.0.0" - checksum: 10c0/e62db17ec9708f1e7c6a31f0a46d43df2069d85cf0df3b9d1d99e5ed36e29b1e8b2f8a427fd8bbb9bc40829788df1471794f9b01057e4b95ed062806e4df5ba9 - languageName: node - linkType: hard - -"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": - version: 3.0.2 - resolution: "read-package-json-fast@npm:3.0.2" - dependencies: - json-parse-even-better-errors: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10c0/37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 - languageName: node - linkType: hard - -"read-pkg-up@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg-up@npm:3.0.0" - dependencies: - find-up: "npm:^2.0.0" - read-pkg: "npm:^3.0.0" - checksum: 10c0/2cd0a180260b0d235990e6e9c8c2330a03882d36bc2eba8930e437ef23ee52a68a894e7e1ccb1c33f03bcceb270a861ee5f7eac686f238857755e2cddfb48ffd - languageName: node - linkType: hard - -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: "npm:^4.1.0" - read-pkg: "npm:^5.2.0" - type-fest: "npm:^0.8.1" - checksum: 10c0/82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 - languageName: node - linkType: hard - -"read-pkg@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg@npm:3.0.0" - dependencies: - load-json-file: "npm:^4.0.0" - normalize-package-data: "npm:^2.3.2" - path-type: "npm:^3.0.0" - checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 - languageName: node - linkType: hard - -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" - dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^2.5.0" - parse-json: "npm:^5.0.0" - type-fest: "npm:^0.6.0" - checksum: 10c0/b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb - languageName: node - linkType: hard - -"read@npm:^3.0.1": - version: 3.0.1 - resolution: "read@npm:3.0.1" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/af524994ff7cf94aa3ebd268feac509da44e58be7ed2a02775b5ee6a7d157b93b919e8c5ead91333f86a21fbb487dc442760bc86354c18b84d334b8cec33723a - languageName: node - linkType: hard - -"readable-stream-node-to-web@npm:^1.0.1": - version: 1.0.1 - resolution: "readable-stream-node-to-web@npm:1.0.1" - checksum: 10c0/9ad4bde9ac06b7dc0b202f77ba632ee012c4782a40139d7a78ecea9d5503867181ab9871e40576891f1adde35203b795e3b46ce30c5fbbab3421404d93561442 - languageName: node - linkType: hard - -"readable-stream@npm:1.1": - version: 1.1.13 - resolution: "readable-stream@npm:1.1.13" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.1" - isarray: "npm:0.0.1" - string_decoder: "npm:~0.10.x" - checksum: 10c0/fb8edd73a37e58fdb35d006370c6cde2912c993483479fe9be232ee0aa8f0b12058f0662602760c7a678887415198888c2f8d864b7ba6ab57683e1b3774d9e66 - languageName: node - linkType: hard - -"readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa - languageName: node - linkType: hard - -"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: "npm:^2.0.3" - string_decoder: "npm:^1.1.1" - util-deprecate: "npm:^1.0.1" - checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 - languageName: node - linkType: hard - -"readable-stream@npm:^4.0.0": - version: 4.7.0 - resolution: "readable-stream@npm:4.7.0" - dependencies: - abort-controller: "npm:^3.0.0" - buffer: "npm:^6.0.3" - events: "npm:^3.3.0" - process: "npm:^0.11.10" - string_decoder: "npm:^1.3.0" - checksum: 10c0/fd86d068da21cfdb10f7a4479f2e47d9c0a9b0c862fc0c840a7e5360201580a55ac399c764b12a4f6fa291f8cee74d9c4b7562e0d53b3c4b2769f2c98155d957 - languageName: node - linkType: hard - -"readable-stream@npm:~1.0.2": - version: 1.0.34 - resolution: "readable-stream@npm:1.0.34" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.1" - isarray: "npm:0.0.1" - string_decoder: "npm:~0.10.x" - checksum: 10c0/02272551396ed8930ddee1a088bdf0379f0f7cc47ac49ed8804e998076cb7daec9fbd2b1fd9c0490ec72e56e8bb3651abeb8080492b8e0a9c3f2158330908ed6 - languageName: node - linkType: hard - -"readable-web-to-node-stream@npm:^3.0.2": - version: 3.0.2 - resolution: "readable-web-to-node-stream@npm:3.0.2" - dependencies: - readable-stream: "npm:^3.6.0" - checksum: 10c0/533d5cd1580232a2c753e52a245be13fc552e6f82c5053a8a8da7ea1063d73a34f936a86b3d4433cdb4a13dd683835cfc87f230936cb96d329a1e28b6040f42e - languageName: node - linkType: hard - -"recursive-watch@npm:^1.1.4": - version: 1.1.4 - resolution: "recursive-watch@npm:1.1.4" - dependencies: - ttl: "npm:^1.3.0" - bin: - recursive-watch: ./bin.js - checksum: 10c0/6bd6da1d85eb09a08bb9b4631fc5e2b79383d252d897c6fd3d0d5e3c334b0bb3ac6b4d1d64c169ef52814552410802fd7404ddabe55327e4d2a21a601925ef2f - languageName: node - linkType: hard - -"redent@npm:^3.0.0": - version: 3.0.0 - resolution: "redent@npm:3.0.0" - dependencies: - indent-string: "npm:^4.0.0" - strip-indent: "npm:^3.0.0" - checksum: 10c0/d64a6b5c0b50eb3ddce3ab770f866658a2b9998c678f797919ceb1b586bab9259b311407280bd80b804e2a7c7539b19238ae6a2a20c843f1a7fcff21d48c2eae - languageName: node - linkType: hard - -"redis-commands@npm:1.7.0": - version: 1.7.0 - resolution: "redis-commands@npm:1.7.0" - checksum: 10c0/c78b46d8d6e811f422961878538c57048a451ab56760d3f1657a7c8f29aaae42cc23890f75655556a59ec67611022e18cb443d2976e6c55036934bfe783aa60e - languageName: node - linkType: hard - -"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": - version: 1.2.0 - resolution: "redis-errors@npm:1.2.0" - checksum: 10c0/5b316736e9f532d91a35bff631335137a4f974927bb2fb42bf8c2f18879173a211787db8ac4c3fde8f75ed6233eb0888e55d52510b5620e30d69d7d719c8b8a7 - languageName: node - linkType: hard - -"redis-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "redis-parser@npm:3.0.0" - dependencies: - redis-errors: "npm:^1.0.0" - checksum: 10c0/ee16ac4c7b2a60b1f42a2cdaee22b005bd4453eb2d0588b8a4939718997ae269da717434da5d570fe0b05030466eeb3f902a58cf2e8e1ca058bf6c9c596f632f - languageName: node - linkType: hard - -"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": - version: 1.0.10 - resolution: "reflect.getprototypeof@npm:1.0.10" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.9" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.1" - which-builtin-type: "npm:^1.2.1" - checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.2.0": - version: 10.2.0 - resolution: "regenerate-unicode-properties@npm:10.2.0" - dependencies: - regenerate: "npm:^1.4.2" - checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.3": - version: 1.5.4 - resolution: "regexp.prototype.flags@npm:1.5.4" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - set-function-name: "npm:^2.0.2" - checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 - languageName: node - linkType: hard - -"regexpp@npm:^3.0.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: 10c0/d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710 - languageName: node - linkType: hard - -"regexpu-core@npm:^6.2.0": - version: 6.2.0 - resolution: "regexpu-core@npm:6.2.0" - dependencies: - regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.2.0" - regjsgen: "npm:^0.8.0" - regjsparser: "npm:^0.12.0" - unicode-match-property-ecmascript: "npm:^2.0.0" - unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 - languageName: node - linkType: hard - -"regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "regjsgen@npm:0.8.0" - checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd - languageName: node - linkType: hard - -"regjsparser@npm:^0.12.0": - version: 0.12.0 - resolution: "regjsparser@npm:0.12.0" - dependencies: - jsesc: "npm:~3.0.2" - bin: - regjsparser: bin/parser - checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b - languageName: node - linkType: hard - -"relative-to-absolute-iri@npm:^1.0.0, relative-to-absolute-iri@npm:^1.0.2, relative-to-absolute-iri@npm:^1.0.5": - version: 1.0.7 - resolution: "relative-to-absolute-iri@npm:1.0.7" - checksum: 10c0/8301941bb1c33818fd312d6729c91cbed47ee960963a35048e7331d88e5ded6eaaae608c33d3840ddcb959310dbf5041dfa5165540faba99334c5c53de721013 - languageName: node - linkType: hard - -"request@npm:^2.88.0": - version: 2.88.2 - resolution: "request@npm:2.88.2" - dependencies: - aws-sign2: "npm:~0.7.0" - aws4: "npm:^1.8.0" - caseless: "npm:~0.12.0" - combined-stream: "npm:~1.0.6" - extend: "npm:~3.0.2" - forever-agent: "npm:~0.6.1" - form-data: "npm:~2.3.2" - har-validator: "npm:~5.1.3" - http-signature: "npm:~1.2.0" - is-typedarray: "npm:~1.0.0" - isstream: "npm:~0.1.2" - json-stringify-safe: "npm:~5.0.1" - mime-types: "npm:~2.1.19" - oauth-sign: "npm:~0.9.0" - performance-now: "npm:^2.1.0" - qs: "npm:~6.5.2" - safe-buffer: "npm:^5.1.2" - tough-cookie: "npm:~2.5.0" - tunnel-agent: "npm:^0.6.0" - uuid: "npm:^3.3.2" - checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"resolve-alpn@npm:^1.0.0": - version: 1.2.1 - resolution: "resolve-alpn@npm:1.2.1" - checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: "npm:^5.0.0" - checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab - languageName: node - linkType: hard - -"resolve.exports@npm:2.0.3": - version: 2.0.3 - resolution: "resolve.exports@npm:2.0.3" - checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d - languageName: node - linkType: hard - -"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.15.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4": - version: 1.22.10 - resolution: "resolve@npm:1.22.10" - dependencies: - is-core-module: "npm:^2.16.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.15.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": - version: 1.22.10 - resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 - languageName: node - linkType: hard - -"responselike@npm:^2.0.0": - version: 2.0.1 - resolution: "responselike@npm:2.0.1" - dependencies: - lowercase-keys: "npm:^2.0.0" - checksum: 10c0/360b6deb5f101a9f8a4174f7837c523c3ec78b7ca8a7c1d45a1062b303659308a23757e318b1e91ed8684ad1205721142dd664d94771cd63499353fd4ee732b5 - languageName: node - linkType: hard - -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: bin.js - checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 - languageName: node - linkType: hard - -"rimraf@npm:^4.4.1": - version: 4.4.1 - resolution: "rimraf@npm:4.4.1" - dependencies: - glob: "npm:^9.2.0" - bin: - rimraf: dist/cjs/src/bin.js - checksum: 10c0/8c5e142d26d8b222be9dc9a1a41ba48e95d8f374e813e66a8533e87c6180174fcb3f573b9b592eca12740ebf8b78526d136acd971d4a790763d6f2232c34fa24 - languageName: node - linkType: hard - -"rsync@npm:^0.6.1": - version: 0.6.1 - resolution: "rsync@npm:0.6.1" - checksum: 10c0/90f6717177ae681d357806153aa27e0598c605ffe01a6c24671f96994146a594c9eebf7251b772e94ca1d1a673628dce4836e6771f0c20e0f41a57c18ccd2da7 - languageName: node - linkType: hard - -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^7.5.5": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 - languageName: node - linkType: hard - -"safe-array-concat@npm:^1.1.2, safe-array-concat@npm:^1.1.3": - version: 1.1.3 - resolution: "safe-array-concat@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.6" - has-symbols: "npm:^1.1.0" - isarray: "npm:^2.0.5" - checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d - languageName: node - linkType: hard - -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 - languageName: node - linkType: hard - -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - -"safe-push-apply@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-push-apply@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - isarray: "npm:^2.0.5" - checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 - languageName: node - linkType: hard - -"safe-regex-test@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex-test@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - is-regex: "npm:^1.2.1" - checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:^2.1.2, safer-buffer@npm:~2.1.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"sanitize-html@npm:^2.6.1": - version: 2.14.0 - resolution: "sanitize-html@npm:2.14.0" - dependencies: - deepmerge: "npm:^4.2.2" - escape-string-regexp: "npm:^4.0.0" - htmlparser2: "npm:^8.0.0" - is-plain-object: "npm:^5.0.0" - parse-srcset: "npm:^1.0.2" - postcss: "npm:^8.3.11" - checksum: 10c0/7e001ab18d09ce5c4d0dbb6837c7a36f132874267e5b724cdef79b21188b55e652a591d79d297f9473aaf80cf96bb1894c3fa1046ccba977ed9aa365d6eb3a5c - languageName: node - linkType: hard - -"sax@npm:^1.2.4": - version: 1.4.1 - resolution: "sax@npm:1.4.1" - checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c - languageName: node - linkType: hard - -"security-context@npm:^4.0.0": - version: 4.0.0 - resolution: "security-context@npm:4.0.0" - checksum: 10c0/234e466945bdaf8dedf9538ebb88b6041485076de3ce74af4fa9ad90ecb38df59ffd050aac888c513484de3a45a7e09c603692e72c0dcbce24f024e2ed03ac3c - languageName: node - linkType: hard - -"semapps-middleware@workspace:.": - version: 0.0.0-use.local - resolution: "semapps-middleware@workspace:." - dependencies: - "@types/dotenv-flow": "npm:^3.3.3" - "@types/ioredis": "npm:^4.27.0" - "@types/node-fetch": "npm:^2.6.13" - "@types/streamify-string": "npm:^1.0.4" - "@typescript-eslint/eslint-plugin": "npm:^7.1.1" - "@typescript-eslint/parser": "npm:^7.5.0" - eslint: "npm:^8.2.0" - eslint-config-airbnb: "npm:^19.0.4" - eslint-config-prettier: "npm:^9.1.0" - eslint-import-resolver-typescript: "npm:^3.6.1" - eslint-plugin-import: "npm:^2.29.1" - eslint-plugin-jest: "npm:^27.9.0" - eslint-plugin-jsdoc: "npm:^48.2.1" - eslint-plugin-node: "npm:^11.1.0" - eslint-plugin-prettier: "npm:^5.1.3" - lerna: "npm:^8.0.1" - moleculer: "npm:^0.14.35" - nx: "npm:17.2.5" - prettier: "npm:^3.1.1" - typescript: "npm:^5.9.2" - languageName: unknown - linkType: soft - -"semapps-tests@workspace:tests": - version: 0.0.0-use.local - resolution: "semapps-tests@workspace:tests" - dependencies: - "@babel/core": "npm:^7.28.0" - "@babel/plugin-transform-runtime": "npm:^7.28.0" - "@babel/preset-env": "npm:^7.28.0" - "@babel/preset-typescript": "npm:^7.27.1" - "@jest/globals": "npm:^30.0.5" - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/activitypub": "npm:1.1.4" - "@semapps/auth": "npm:1.1.4" - "@semapps/core": "npm:1.1.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/inference": "npm:1.1.4" - "@semapps/jsonld": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/sync": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - "@types/ioredis": "npm:^4.27.0" - "@types/jest": "npm:^30.0.0" - babel-jest: "npm:^30.0.5" - babel-plugin-transform-import-meta: "npm:^2.3.3" - babel-preset-vite: "npm:^1.1.3" - dotenv-flow: "npm:^3.1.0" - expect-type: "npm:^1.2.2" - fs-extra: "npm:^9.0.1" - http-link-header: "npm:^1.1.1" - ioredis: "npm:^4.27.0" - jest: "npm:^30.0.5" - lru-cache: "npm:10.1.0" - moleculer: "npm:^0.14.35" - moleculer-web: "npm:^0.10.7" - node-fetch: "npm:^2.6.6" - rdf-data-model: "npm:^1.0.0" - supertest: "npm:^4.0.2" - url-join: "npm:^4.0.1" - wait-for-expect: "npm:^3.0.2" - languageName: unknown - linkType: soft - -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 - languageName: node - linkType: hard - -"semver@npm:7.5.3": - version: 7.5.3 - resolution: "semver@npm:7.5.3" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10c0/4cf3bab7e8cf8c2ae521fc4bcc50a4d6912a836360796b23b9f1c26f45d27a73f870e47664df4770bde0dd60dc4d4781a05fd49fe91d72376ea5519b9e791459 - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d - languageName: node - linkType: hard - -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf - languageName: node - linkType: hard - -"semver@npm:^7.7.2": - version: 7.7.2 - resolution: "semver@npm:7.7.2" - bin: - semver: bin/semver.js - checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea - languageName: node - linkType: hard - -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" - dependencies: - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - mime: "npm:1.6.0" - ms: "npm:2.1.3" - on-finished: "npm:2.4.1" - range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 - languageName: node - linkType: hard - -"serialize-error@npm:^5.0.0": - version: 5.0.0 - resolution: "serialize-error@npm:5.0.0" - dependencies: - type-fest: "npm:^0.8.0" - checksum: 10c0/6934419798421a14536178d7ab70b9676dc747813817ec9841c96aeb87759f436a71feb241593c6f6aa9a697c0429285aef892d459e7d8cd5156b1d35f1606a1 - languageName: node - linkType: hard - -"serialize-error@npm:^8.1.0": - version: 8.1.0 - resolution: "serialize-error@npm:8.1.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/8cfd89f43ca93e283c5f1d16178a536bdfac9bc6029f4a9df988610cc399bc4f2478d1f10ce40b9dff66b863a5158a19b438fbec929045c96d92174f6bca1e88 - languageName: node - linkType: hard - -"serve-static@npm:^1.14.1": - version: 1.16.2 - resolution: "serve-static@npm:1.16.2" - dependencies: - encodeurl: "npm:~2.0.0" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.3" - send: "npm:0.19.0" - checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.2": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c - languageName: node - linkType: hard - -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - functions-have-names: "npm:^1.2.3" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 - languageName: node - linkType: hard - -"set-proto@npm:^1.0.0": - version: 1.0.0 - resolution: "set-proto@npm:1.0.0" - dependencies: - dunder-proto: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a - languageName: node - linkType: hard - -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc - languageName: node - linkType: hard - -"shallow-clone@npm:^3.0.0": - version: 3.0.1 - resolution: "shallow-clone@npm:3.0.1" - dependencies: - kind-of: "npm:^6.0.2" - checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e - languageName: node - linkType: hard - -"sharp@npm:^0.31.2": - version: 0.31.3 - resolution: "sharp@npm:0.31.3" - dependencies: - color: "npm:^4.2.3" - detect-libc: "npm:^2.0.1" - node-addon-api: "npm:^5.0.0" - node-gyp: "npm:latest" - prebuild-install: "npm:^7.1.1" - semver: "npm:^7.3.8" - simple-get: "npm:^4.0.1" - tar-fs: "npm:^2.1.1" - tunnel-agent: "npm:^0.6.0" - checksum: 10c0/22cab24b7145546f25cd5e2a27841880405335ddeeb4e05be6e32d4221baac4fd89d0fb31c397a0cea31b6f1b6b139d4eb49d036cdba1f33175ffa0b1a4eccfc - languageName: node - linkType: hard - -"shebang-command@npm:^1.2.0": - version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: "npm:^1.0.0" - checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"sigstore@npm:^2.2.0": - version: 2.3.1 - resolution: "sigstore@npm:2.3.1" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - "@sigstore/sign": "npm:^2.3.2" - "@sigstore/tuf": "npm:^2.3.4" - "@sigstore/verify": "npm:^1.2.1" - checksum: 10c0/8906b1074130d430d707e46f15c66eb6996891dc0d068705f1884fb1251a4a367f437267d44102cdebcee34f1768b3f30131a2ec8fb7aac74ba250903a459aa7 - languageName: node - linkType: hard - -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 - languageName: node - linkType: hard - -"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: "npm:^6.0.0" - once: "npm:^1.3.1" - simple-concat: "npm:^1.0.0" - checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: "npm:^0.3.1" - checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 - languageName: node - linkType: hard - -"slash@npm:3.0.0, slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slashes@npm:^3.0.12": - version: 3.0.12 - resolution: "slashes@npm:3.0.12" - checksum: 10c0/71ca2a1fcd1ab6814b0fdb8cf9c33a3d54321deec2aa8d173510f0086880201446021a9b9e6a18561f7c472b69a2145977c6a8fb9c53a8ff7be31778f203d175 - languageName: node - linkType: hard - -"slick@npm:^1.12.2": - version: 1.12.2 - resolution: "slick@npm:1.12.2" - checksum: 10c0/fea97c36b2bdcd1b80caea150cd8135dc9d3ffe659bbe04fa6f4b4dff373f5d5aef09a8ef384b331c3fdd9567faf447b75b850ab35d2c69ff8a8a92def3d49e1 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" - dependencies: - ip-address: "npm:^9.0.5" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 - languageName: node - linkType: hard - -"sodium-native@npm:^3.2.0": - version: 3.4.1 - resolution: "sodium-native@npm:3.4.1" - dependencies: - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.3.0" - checksum: 10c0/b67de94d80a234d348e3bbcd27f39243f974dfdb5e2538b146433c5f2a42ce4697ce3bf5dff8a2803dab16486167e8cc755af426ff2934cb5ca393cb5b116c77 - languageName: node - linkType: hard - -"sort-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "sort-keys@npm:2.0.0" - dependencies: - is-plain-obj: "npm:^1.0.0" - checksum: 10c0/c11a6313995cb67ccf35fed4b1f6734176cc1d1e350ee311c061a2340ada4f7e23b046db064d518b63adba98c0f763739920c59fb4659a0b8482ec7a1f255081 - languageName: node - linkType: hard - -"sorted-array-functions@npm:^1.3.0": - version: 1.3.0 - resolution: "sorted-array-functions@npm:1.3.0" - checksum: 10c0/d94e3401a2bc1689dc913f56939621c892a3ff1288e984e85689a6c6e46b0ec16f65edc8b47d46b0f09d06857f67ca245553b462da597619102b9fad270476d9 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: "npm:^1.0.0" - source-map: "npm:^0.6.0" - checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e - languageName: node - linkType: hard - -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 - languageName: node - linkType: hard - -"sparqlalgebrajs@npm:^3.0.1": - version: 3.0.3 - resolution: "sparqlalgebrajs@npm:3.0.3" - dependencies: - "@rdfjs/types": "npm:*" - "@types/sparqljs": "npm:^3.1.2" - fast-deep-equal: "npm:^3.1.3" - minimist: "npm:^1.2.5" - rdf-data-factory: "npm:^1.1.0" - rdf-isomorphic: "npm:^1.3.0" - rdf-string: "npm:^1.6.0" - sparqljs: "npm:^3.4.2" - bin: - sparqlalgebrajs: bin/sparqlalgebrajs.js - checksum: 10c0/4074b864f72857303cbabe2771e790e28429cd732d89d61e541fa3629a333c239b5878e286b88001eb539fd2237e5d57273bff6dae2206da74a7c647f8cfef1d - languageName: node - linkType: hard - -"sparqljs@npm:^3.4.2, sparqljs@npm:^3.5.2": - version: 3.7.3 - resolution: "sparqljs@npm:3.7.3" - dependencies: - rdf-data-factory: "npm:^1.1.2" - bin: - sparqljs: bin/sparql-to-json - checksum: 10c0/733323136c490e6454ced4cdd02023054a8893c3bf9e739ccd39f526a96ef5edcf42352c4f0cf2c90847292a239dfe4c68bd35f044699e2f585601a0c56c1c70 - languageName: node - linkType: hard - -"sparqljson-parse@npm:^1.5.1": - version: 1.7.0 - resolution: "sparqljson-parse@npm:1.7.0" - dependencies: - "@rdfjs/types": "npm:*" - "@types/node": "npm:^13.1.0" - JSONStream: "npm:^1.3.3" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/010c94b9bc37e545c3fe2f90c53ac033a652d76bd8075e21bf9fd9d6c78c92081d67c20b3384208e937c2695ff9d849fca8344597fe95653960fe5390f605ecc - languageName: node - linkType: hard - -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: "npm:^3.0.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.5.0 - resolution: "spdx-exceptions@npm:2.5.0" - checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^4.0.0": - version: 4.0.0 - resolution: "spdx-expression-parse@npm:4.0.0" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.21 - resolution: "spdx-license-ids@npm:3.0.21" - checksum: 10c0/ecb24c698d8496aa9efe23e0b1f751f8a7a89faedcdfcbfabae772b546c2db46ccde8f3bc447a238eb86bbcd4f73fea88720ef3b8394f7896381bec3d7736411 - languageName: node - linkType: hard - -"speakingurl@npm:^14.0.1": - version: 14.0.1 - resolution: "speakingurl@npm:14.0.1" - checksum: 10c0/1de1d1b938a7c4d9e79593ff7a26d312ec04a7c3234ca40b7f9b8106daf74ea9d2110a077f5db97ecf3762b83069e3ccbf9694431b51d4fcfd863f0b3333c342 - languageName: node - linkType: hard - -"split2@npm:^3.2.2": - version: 3.2.2 - resolution: "split2@npm:3.2.2" - dependencies: - readable-stream: "npm:^3.0.0" - checksum: 10c0/2dad5603c52b353939befa3e2f108f6e3aff42b204ad0f5f16dd12fd7c2beab48d117184ce6f7c8854f9ee5ffec6faae70d243711dd7d143a9f635b4a285de4e - languageName: node - linkType: hard - -"split@npm:^1.0.1": - version: 1.0.1 - resolution: "split@npm:1.0.1" - dependencies: - through: "npm:2" - checksum: 10c0/7f489e7ed5ff8a2e43295f30a5197ffcb2d6202c9cf99357f9690d645b19c812bccf0be3ff336fea5054cda17ac96b91d67147d95dbfc31fbb5804c61962af85 - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.1, sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb - languageName: node - linkType: hard - -"ssh2-sftp-client@npm:^7.2.1": - version: 7.2.3 - resolution: "ssh2-sftp-client@npm:7.2.3" - dependencies: - concat-stream: "npm:^2.0.0" - promise-retry: "npm:^2.0.1" - ssh2: "npm:^1.8.0" - checksum: 10c0/780da50d87789af1f943490b1ad11797cf60f20761345c14ba920b90fec845a7fc8e11093ea26ddb4619ea3727fa75d71ca21dca72e6d4f3b7324c985b31801e - languageName: node - linkType: hard - -"ssh2@npm:^1.8.0": - version: 1.16.0 - resolution: "ssh2@npm:1.16.0" - dependencies: - asn1: "npm:^0.2.6" - bcrypt-pbkdf: "npm:^1.0.2" - cpu-features: "npm:~0.0.10" - nan: "npm:^2.20.0" - dependenciesMeta: - cpu-features: - optional: true - nan: - optional: true - checksum: 10c0/d336a85d87501c64ba230b6c1a2901a9b0e376fe7f7a1640a7f8dbdafe674b2e1a5dc6236ffd1329969dc0cf03cd57759b28743075e61229a984065ee1d56bed - languageName: node - linkType: hard - -"sshpk@npm:^1.18.0, sshpk@npm:^1.7.0": - version: 1.18.0 - resolution: "sshpk@npm:1.18.0" - dependencies: - asn1: "npm:~0.2.3" - assert-plus: "npm:^1.0.0" - bcrypt-pbkdf: "npm:^1.0.0" - dashdash: "npm:^1.12.0" - ecc-jsbn: "npm:~0.1.1" - getpass: "npm:^0.1.1" - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.0.2" - tweetnacl: "npm:~0.14.0" - bin: - sshpk-conv: bin/sshpk-conv - sshpk-sign: bin/sshpk-sign - sshpk-verify: bin/sshpk-verify - checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0, ssri@npm:^10.0.6": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 - languageName: node - linkType: hard - -"ssri@npm:^12.0.0": - version: 12.0.0 - resolution: "ssri@npm:12.0.0" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d - languageName: node - linkType: hard - -"stable-hash@npm:^0.0.4": - version: 0.0.4 - resolution: "stable-hash@npm:0.0.4" - checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0 - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.6": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a - languageName: node - linkType: hard - -"standard-as-callback@npm:^2.1.0": - version: 2.1.0 - resolution: "standard-as-callback@npm:2.1.0" - checksum: 10c0/012677236e3d3fdc5689d29e64ea8a599331c4babe86956bf92fc5e127d53f85411c5536ee0079c52c43beb0026b5ce7aa1d834dd35dd026e82a15d1bcaead1f - languageName: node - linkType: hard - -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 - languageName: node - linkType: hard - -"stream-to-string@npm:^1.2.0": - version: 1.2.1 - resolution: "stream-to-string@npm:1.2.1" - dependencies: - promise-polyfill: "npm:^1.1.6" - checksum: 10c0/08b764a17ad7615f5daa188120448dc4d06b097a3c515e337378e1653bc815ad25d388a44e0e2b98b7637841913c42a6734c1f60d142b2e7827f4b41d62d112a - languageName: node - linkType: hard - -"streamify-string@npm:^1.0.1": - version: 1.0.1 - resolution: "streamify-string@npm:1.0.1" - checksum: 10c0/d6b72771ab8a8a15e822a636e3bbe9debe34aa59901cc90a6b8e27cd6f02d52f0335704ed32c4cd69b2dab0a192f503877d53718a51282fe4901f7e9092c8b5b - languageName: node - linkType: hard - -"streamsearch@npm:0.1.2": - version: 0.1.2 - resolution: "streamsearch@npm:0.1.2" - checksum: 10c0/408a3db5b5643c1d6eb65c9d8ccc011b4857bfca41946d808b7f165b5b85f47755b2ff56ec1c4bbbeb5a496afcde9adfea12f9f67bd09ff3f04ae3f1f58d37c6 - languageName: node - linkType: hard - -"string-length@npm:^4.0.2": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: "npm:^1.0.2" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c - languageName: node - linkType: hard - -"string-template@npm:^1.0.0": - version: 1.0.0 - resolution: "string-template@npm:1.0.0" - checksum: 10c0/7c07ab5b4274a50b1f077a47769044b9a8f0a5a4a47811cf3f9ba5acc9d2ff1231d593a93983ea554c3211fb09949e805912f9ce9d7688990eeb41d5008b95d2 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"string.prototype.trim@npm:^1.2.10": - version: 1.2.10 - resolution: "string.prototype.trim@npm:1.2.10" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - define-data-property: "npm:^1.1.4" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-object-atoms: "npm:^1.0.0" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": - version: 1.0.9 - resolution: "string.prototype.trimend@npm:1.0.9" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: "npm:~5.2.0" - checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d - languageName: node - linkType: hard - -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: 10c0/1c628d78f974aa7539c496029f48e7019acc32487fc695464f9d6bdfec98edd7d933a06b3216bc2016918f6e75074c611d84430a53cb0e43071597d6c1ac5e25 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f - languageName: node - linkType: hard - -"strip-indent@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-indent@npm:3.0.0" - dependencies: - min-indent: "npm:^1.0.0" - checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd - languageName: node - linkType: hard - -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 - languageName: node - linkType: hard - -"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": - version: 2.1.0 - resolution: "strong-log-transformer@npm:2.1.0" - dependencies: - duplexer: "npm:^0.1.1" - minimist: "npm:^1.2.0" - through: "npm:^2.3.4" - bin: - sl-log-transformer: bin/sl-log-transformer.js - checksum: 10c0/3c3b8aa8f34d661910563ff996412e2f527fc814e699a376854b554d4a4294ab7e285b4e2c08a080a7b19c5600a9b93a98798d3ac600fe3de545ca6605c07829 - languageName: node - linkType: hard - -"superagent@npm:^3.8.3": - version: 3.8.3 - resolution: "superagent@npm:3.8.3" - dependencies: - component-emitter: "npm:^1.2.0" - cookiejar: "npm:^2.1.0" - debug: "npm:^3.1.0" - extend: "npm:^3.0.0" - form-data: "npm:^2.3.1" - formidable: "npm:^1.2.0" - methods: "npm:^1.1.1" - mime: "npm:^1.4.1" - qs: "npm:^6.5.1" - readable-stream: "npm:^2.3.5" - checksum: 10c0/e467c39aee7aa57dc2e45b5c7c76d70a7ad4fff8d3d2b57a2da0edfaca0e598562fc9f8f74a1383661744f68b3dfd2cca388a3000b41d6c2d8e0e5d031d152fe - languageName: node - linkType: hard - -"supertest@npm:^4.0.2": - version: 4.0.2 - resolution: "supertest@npm:4.0.2" - dependencies: - methods: "npm:^1.1.2" - superagent: "npm:^3.8.3" - checksum: 10c0/436ab991ae9242e695374d0006bf2dd16fbbab287966d0176c92eaf8f9a124a839a0ff6db22f46d1de0faeec3752ff8ebfbe051681c050032acab9f4af192399 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - -"supports-color@npm:^8.1.1": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - -"synckit@npm:^0.11.8": - version: 0.11.11 - resolution: "synckit@npm:0.11.11" - dependencies: - "@pkgr/core": "npm:^0.2.9" - checksum: 10c0/f0761495953d12d94a86edf6326b3a565496c72f9b94c02549b6961fb4d999f4ca316ce6b3eb8ed2e4bfc5056a8de65cda0bd03a233333a35221cd2fdc0e196b - languageName: node - linkType: hard - -"synckit@npm:^0.9.1": - version: 0.9.2 - resolution: "synckit@npm:0.9.2" - dependencies: - "@pkgr/core": "npm:^0.1.0" - tslib: "npm:^2.6.2" - checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59 - languageName: node - linkType: hard - -"tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 - languageName: node - linkType: hard - -"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": - version: 2.1.2 - resolution: "tar-fs@npm:2.1.2" - dependencies: - chownr: "npm:^1.1.1" - mkdirp-classic: "npm:^0.5.2" - pump: "npm:^3.0.0" - tar-stream: "npm:^2.1.4" - checksum: 10c0/9c704bd4a53be7565caf34ed001d1428532457fe3546d8fc1233f0f0882c3d2403f8602e8046e0b0adeb31fe95336572a69fb28851a391523126b697537670fc - languageName: node - linkType: hard - -"tar-stream@npm:^2.1.4, tar-stream@npm:~2.2.0": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" - dependencies: - bl: "npm:^4.0.3" - end-of-stream: "npm:^1.4.1" - fs-constants: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.1.1" - checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 - languageName: node - linkType: hard - -"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 - languageName: node - linkType: hard - -"tar@npm:^7.4.3": - version: 7.4.3 - resolution: "tar@npm:7.4.3" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.0.1" - mkdirp: "npm:^3.0.1" - yallist: "npm:^5.0.0" - checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d - languageName: node - linkType: hard - -"temp-dir@npm:1.0.0": - version: 1.0.0 - resolution: "temp-dir@npm:1.0.0" - checksum: 10c0/648669d5e154d1961217784c786acadccf0156519c19e0aceda7edc76f5bdfa32a40dd7f88ebea9238ed6e3dedf08b846161916c8947058c384761351be90a8e - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": "npm:^0.1.2" - glob: "npm:^7.1.4" - minimatch: "npm:^3.0.4" - checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 - languageName: node - linkType: hard - -"text-decoding@npm:^1.0.0": - version: 1.0.0 - resolution: "text-decoding@npm:1.0.0" - checksum: 10c0/290dbd6111f39a4020b3e2384de614f90051eff3cd11176329fda0a40ac0b0a07e6820b9aeb4b0b7c2cc7869b62cd3b25944c71e9e16b628bcf57299ab84e311 - languageName: node - linkType: hard - -"text-extensions@npm:^1.0.0": - version: 1.9.0 - resolution: "text-extensions@npm:1.9.0" - checksum: 10c0/9ad5a9f723a871e2d884e132d7e93f281c60b5759c95f3f6b04704856548715d93a36c10dbaf5f12b91bf405f0cf3893bf169d4d143c0f5509563b992d385443 - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c - languageName: node - linkType: hard - -"through2@npm:^2.0.0": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: "npm:~2.3.6" - xtend: "npm:~4.0.1" - checksum: 10c0/cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade - languageName: node - linkType: hard - -"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.12": - version: 0.2.14 - resolution: "tinyglobby@npm:0.2.14" - dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"tmp@npm:~0.2.1": - version: 0.2.3 - resolution: "tmp@npm:0.2.3" - checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 - languageName: node - linkType: hard - -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"toidentifier@npm:1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 - languageName: node - linkType: hard - -"token-stream@npm:1.0.0": - version: 1.0.0 - resolution: "token-stream@npm:1.0.0" - checksum: 10c0/c1924a89686fc035d579cbe856da12306571d5fe7408eeeebe80df7c25c5cc644b8ae102d5cbc0f085d0e105f391d1a48dc0e568520434c5b444ea6c7de2b822 - languageName: node - linkType: hard - -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: "npm:^1.1.28" - punycode: "npm:^2.1.1" - checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"treeverse@npm:^3.0.0": - version: 3.0.0 - resolution: "treeverse@npm:3.0.0" - checksum: 10c0/286479b9c05a8fb0538ee7d67a5502cea7704f258057c784c9c1118a2f598788b2c0f7a8d89e74648af88af0225b31766acecd78e6060736f09b21dd3fa255db - languageName: node - linkType: hard - -"trim-newlines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-newlines@npm:3.0.1" - checksum: 10c0/03cfefde6c59ff57138412b8c6be922ecc5aec30694d784f2a65ef8dcbd47faef580b7de0c949345abdc56ec4b4abf64dd1e5aea619b200316e471a3dd5bf1f6 - languageName: node - linkType: hard - -"ts-api-utils@npm:^1.3.0": - version: 1.4.3 - resolution: "ts-api-utils@npm:1.4.3" - peerDependencies: - typescript: ">=4.2.0" - checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a - languageName: node - linkType: hard - -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": "npm:^0.0.29" - json5: "npm:^1.0.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 - languageName: node - linkType: hard - -"tsconfig-paths@npm:^4.1.2": - version: 4.2.0 - resolution: "tsconfig-paths@npm:4.2.0" - dependencies: - json5: "npm:^2.2.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/09a5877402d082bb1134930c10249edeebc0211f36150c35e1c542e5b91f1047b1ccf7da1e59babca1ef1f014c525510f4f870de7c9bda470c73bb4e2721b3ea - languageName: node - linkType: hard - -"tslib@npm:^1.8.1": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 - languageName: node - linkType: hard - -"ttl@npm:^1.3.0": - version: 1.3.1 - resolution: "ttl@npm:1.3.1" - checksum: 10c0/097d898ceedc4fcdcd767c28c880096c78f5d69ecf6ddd95a0b465abc61f486c8f4f9dda2d527cb159a7d51f3bbdaeb703fff71b6f968a3d12396046ecd6d13c - languageName: node - linkType: hard - -"tuf-js@npm:^2.2.1": - version: 2.2.1 - resolution: "tuf-js@npm:2.2.1" - dependencies: - "@tufjs/models": "npm:2.0.1" - debug: "npm:^4.3.4" - make-fetch-happen: "npm:^13.0.1" - checksum: 10c0/7c17b097571f001730d7be0aeaec6bec46ed2f25bf73990b1133c383d511a1ce65f831e5d6d78770940a85b67664576ff0e4c98e5421bab6d33ff36e4be500c8 - languageName: node - linkType: hard - -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a - languageName: node - linkType: hard - -"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": - version: 0.14.5 - resolution: "tweetnacl@npm:0.14.5" - checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 - languageName: node - linkType: hard - -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd - languageName: node - linkType: hard - -"type-fest@npm:^0.18.0": - version: 0.18.1 - resolution: "type-fest@npm:0.18.1" - checksum: 10c0/303f5ecf40d03e1d5b635ce7660de3b33c18ed8ebc65d64920c02974d9e684c72483c23f9084587e9dd6466a2ece1da42ddc95b412a461794dd30baca95e2bac - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"type-fest@npm:^0.4.1": - version: 0.4.1 - resolution: "type-fest@npm:0.4.1" - checksum: 10c0/2e65f43209492638244842f70d86e7325361c92dd1cc8e3bf5728c96b980305087fa5ba60652e9053d56c302ef4f1beb9652a91b72a50da0ea66c6b851f3b9cb - languageName: node - linkType: hard - -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: 10c0/0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 - languageName: node - linkType: hard - -"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 - languageName: node - linkType: hard - -"type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: "npm:0.3.0" - mime-types: "npm:~2.1.24" - checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d - languageName: node - linkType: hard - -"typed-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-buffer@npm:1.0.3" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-typed-array: "npm:^1.1.14" - checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 - languageName: node - linkType: hard - -"typed-array-byte-length@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-byte-length@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.8" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-proto: "npm:^1.2.0" - is-typed-array: "npm:^1.1.14" - checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e - languageName: node - linkType: hard - -"typed-array-byte-offset@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-byte-offset@npm:1.0.4" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-proto: "npm:^1.2.0" - is-typed-array: "npm:^1.1.15" - reflect.getprototypeof: "npm:^1.0.9" - checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.7": - version: 1.0.7 - resolution: "typed-array-length@npm:1.0.7" - dependencies: - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - is-typed-array: "npm:^1.1.13" - possible-typed-array-names: "npm:^1.0.0" - reflect.getprototypeof: "npm:^1.0.6" - checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 - languageName: node - linkType: hard - -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412 - languageName: node - linkType: hard - -"typescript@npm:>=3 < 6": - version: 5.7.3 - resolution: "typescript@npm:5.7.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa - languageName: node - linkType: hard - -"typescript@npm:^5.9.2": - version: 5.9.2 - resolution: "typescript@npm:5.9.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": - version: 5.7.3 - resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": - version: 5.9.2 - resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e - languageName: node - linkType: hard - -"uglify-js@npm:^3.1.4": - version: 3.19.3 - resolution: "uglify-js@npm:3.19.3" - bin: - uglifyjs: bin/uglifyjs - checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 - languageName: node - linkType: hard - -"uid-safe@npm:~2.1.5": - version: 2.1.5 - resolution: "uid-safe@npm:2.1.5" - dependencies: - random-bytes: "npm:~1.0.0" - checksum: 10c0/ec96862e859fd12175f3da7fda9d1359a2cf412fd521e10837cbdc6d554774079ce252f366981df9401283841c8924782f6dbee8f82a3a81f805ed8a8584595d - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.1.0": - version: 1.1.0 - resolution: "unbox-primitive@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - has-bigints: "npm:^1.0.2" - has-symbols: "npm:^1.1.0" - which-boxed-primitive: "npm:^1.1.1" - checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 - languageName: node - linkType: hard - -"underscore.string@npm:^3.2.3": - version: 3.3.6 - resolution: "underscore.string@npm:3.3.6" - dependencies: - sprintf-js: "npm:^1.1.1" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/172319c7ef5436587e6f0fb5afe0b2e6b50f723a4070c7fb3454c5dfa5398ed3b7042c049eac2826bdd44d37cbd16b2b965d0ccc1597fde354b1d3a846fd4a39 - languageName: node - linkType: hard - -"underscore@npm:^1.8.3": - version: 1.13.7 - resolution: "underscore@npm:1.13.7" - checksum: 10c0/fad2b4aac48847674aaf3c30558f383399d4fdafad6dd02dd60e4e1b8103b52c5a9e5937e0cc05dacfd26d6a0132ed0410ab4258241240757e4a4424507471cd - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 - languageName: node - linkType: hard - -"undici-types@npm:~6.20.0": - version: 6.20.0 - resolution: "undici-types@npm:6.20.0" - checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf - languageName: node - linkType: hard - -"undici@npm:^5.21.2": - version: 5.28.5 - resolution: "undici@npm:5.28.5" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/4dfaa13089fe4c0758f84ec0d34b257e58608e6be3aa540f493b9864b39e3fdcd0a1ace38e434fe79db55f833aa30bcfddd8d6cbe3e0982b0dcae8ec17b65e08 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.1 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" - checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: "npm:^2.0.0" - unicode-property-aliases-ecmascript: "npm:^2.0.0" - checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.2.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" - checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f - languageName: node - linkType: hard - -"unique-filename@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-filename@npm:4.0.0" - dependencies: - unique-slug: "npm:^5.0.0" - checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 - languageName: node - linkType: hard - -"unique-slug@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-slug@npm:5.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 - languageName: node - linkType: hard - -"universal-user-agent@npm:^6.0.0": - version: 6.0.1 - resolution: "universal-user-agent@npm:6.0.1" - checksum: 10c0/5c9c46ffe19a975e11e6443640ed4c9e0ce48fcc7203325757a8414ac49940ebb0f4667f2b1fa561489d1eb22cb2d05a0f7c82ec20c5cba42e58e188fb19b187 - languageName: node - linkType: hard - -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unpipe@npm:1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c - languageName: node - linkType: hard - -"unrs-resolver@npm:^1.7.11": - version: 1.11.1 - resolution: "unrs-resolver@npm:1.11.1" - dependencies: - "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" - "@unrs/resolver-binding-android-arm64": "npm:1.11.1" - "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" - "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" - "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" - napi-postinstall: "npm:^0.3.0" - dependenciesMeta: - "@unrs/resolver-binding-android-arm-eabi": - optional: true - "@unrs/resolver-binding-android-arm64": - optional: true - "@unrs/resolver-binding-darwin-arm64": - optional: true - "@unrs/resolver-binding-darwin-x64": - optional: true - "@unrs/resolver-binding-freebsd-x64": - optional: true - "@unrs/resolver-binding-linux-arm-gnueabihf": - optional: true - "@unrs/resolver-binding-linux-arm-musleabihf": - optional: true - "@unrs/resolver-binding-linux-arm64-gnu": - optional: true - "@unrs/resolver-binding-linux-arm64-musl": - optional: true - "@unrs/resolver-binding-linux-ppc64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-musl": - optional: true - "@unrs/resolver-binding-linux-s390x-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-musl": - optional: true - "@unrs/resolver-binding-wasm32-wasi": - optional: true - "@unrs/resolver-binding-win32-arm64-msvc": - optional: true - "@unrs/resolver-binding-win32-ia32-msvc": - optional: true - "@unrs/resolver-binding-win32-x64-msvc": - optional: true - checksum: 10c0/c91b112c71a33d6b24e5c708dab43ab80911f2df8ee65b87cd7a18fb5af446708e98c4b415ca262026ad8df326debcc7ca6a801b2935504d87fd6f0b9d70dce1 - languageName: node - linkType: hard - -"upath@npm:2.0.1": - version: 2.0.1 - resolution: "upath@npm:2.0.1" - checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.1": - version: 1.1.2 - resolution: "update-browserslist-db@npm:1.1.2" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.3": - version: 1.1.3 - resolution: "update-browserslist-db@npm:1.1.3" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - -"url-join@npm:^4.0.1": - version: 4.0.1 - resolution: "url-join@npm:4.0.1" - checksum: 10c0/ac65e2c7c562d7b49b68edddcf55385d3e922bc1dd5d90419ea40b53b6de1607d1e45ceb71efb9d60da02c681d13c6cb3a1aa8b13fc0c989dfc219df97ee992d - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 - languageName: node - linkType: hard - -"util.promisify@npm:^1.0.1": - version: 1.1.3 - resolution: "util.promisify@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-data-property: "npm:^1.1.4" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - for-each: "npm:^0.3.3" - get-intrinsic: "npm:^1.2.6" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - object.getownpropertydescriptors: "npm:^2.1.8" - safe-array-concat: "npm:^1.1.3" - checksum: 10c0/b7a2f721222ffc26f8a12a1cdc44a81b16a614b81f2d6f71f50c8b214a20afe8324d5f0700f04759d6ea33446ba0730e4ef0b4e2c4f4ef5adca16dabd502fa2b - languageName: node - linkType: hard - -"util@npm:^0.12.4": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 - languageName: node - linkType: hard - -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" - bin: - uuid: dist/bin/uuid - checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe - languageName: node - linkType: hard - -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 - languageName: node - linkType: hard - -"uuid@npm:^8.3.0": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 - languageName: node - linkType: hard - -"uuid@npm:^9.0.1": - version: 9.0.1 - resolution: "uuid@npm:9.0.1" - bin: - uuid: dist/bin/uuid - checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^9.0.1": - version: 9.3.0 - resolution: "v8-to-istanbul@npm:9.3.0" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.12" - "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^2.0.0" - checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 - languageName: node - linkType: hard - -"valid-data-url@npm:^2.0.0": - version: 2.0.0 - resolution: "valid-data-url@npm:2.0.0" - checksum: 10c0/4e34ccf43139656770ce8474b2a49aa825ab793811ef37713041fa63e24197b02715908bbd40edacc247c592a1b0fa8d3f8279983655c6417eed5bf444eb1d7a - languageName: node - linkType: hard - -"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: "npm:^3.0.0" - spdx-expression-parse: "npm:^3.0.0" - checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f - languageName: node - linkType: hard - -"validate-npm-package-name@npm:5.0.1, validate-npm-package-name@npm:^5.0.0": - version: 5.0.1 - resolution: "validate-npm-package-name@npm:5.0.1" - checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 - languageName: node - linkType: hard - -"vc-js@npm:^0.6.4": - version: 0.6.4 - resolution: "vc-js@npm:0.6.4" - dependencies: - commander: "npm:^2.20.3" - credentials-context: "npm:^1.0.0" - debug: "npm:^4.1.1" - fs-extra: "npm:^8.1.0" - get-stdin: "npm:^7.0.0" - jsonld: "npm:^2.0.2" - jsonld-signatures: "npm:^5.0.0" - supports-color: "npm:^7.1.0" - bin: - vc-js: bin/vc-js - checksum: 10c0/04b33fce6688c293ed078c09aa5a68f41a27cff0f298338290c1a3bd7db8a51e805f6220c89d3d15925d3621f2f00270f19891feed1d5bf32b8880d87484c3f4 - languageName: node - linkType: hard - -"verror@npm:1.10.0": - version: 1.10.0 - resolution: "verror@npm:1.10.0" - dependencies: - assert-plus: "npm:^1.0.0" - core-util-is: "npm:1.0.2" - extsprintf: "npm:^1.2.0" - checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d - languageName: node - linkType: hard - -"void-elements@npm:^3.1.0": - version: 3.1.0 - resolution: "void-elements@npm:3.1.0" - checksum: 10c0/0b8686f9f9aa44012e9bd5eabf287ae0cde409b9a2854c5a2335cb83920c957668ac5876e3f0d158dd424744ac411a7270e64128556b451ed3bec875ef18534d - languageName: node - linkType: hard - -"wait-for-expect@npm:^3.0.2": - version: 3.0.2 - resolution: "wait-for-expect@npm:3.0.2" - checksum: 10c0/9616b82381f6571a0f3ed235a62ecdaf529816c9eef04f665ee1b8b515c3b7e1dc90d781111b6284bb777f45c4742f6c058d549a44d9d6e367ffd4d34f5f3b9e - languageName: node - linkType: hard - -"walk-up-path@npm:^3.0.1": - version: 3.0.1 - resolution: "walk-up-path@npm:3.0.1" - checksum: 10c0/3184738e0cf33698dd58b0ee4418285b9c811e58698f52c1f025435a85c25cbc5a63fee599f1a79cb29ca7ef09a44ec9417b16bfd906b1a37c305f7aa20ee5bc - languageName: node - linkType: hard - -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: "npm:1.0.12" - checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e - languageName: node - linkType: hard - -"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: "npm:^1.0.3" - checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 - languageName: node - linkType: hard - -"web-resource-inliner@npm:^4.2.1": - version: 4.3.4 - resolution: "web-resource-inliner@npm:4.3.4" - dependencies: - async: "npm:^3.1.0" - chalk: "npm:^2.4.2" - datauri: "npm:^2.0.0" - htmlparser2: "npm:^4.0.0" - lodash.unescape: "npm:^4.0.1" - request: "npm:^2.88.0" - safer-buffer: "npm:^2.1.2" - valid-data-url: "npm:^2.0.0" - xtend: "npm:^4.0.2" - checksum: 10c0/2e7b87449ceea0220398c0c509396302a71c9b429968187a61f4fc704de428f593ff5f671335ad6d3b4a3aa0752911ad0ee9c30789cffb687176352be238bb57 - languageName: node - linkType: hard - -"web-streams-node@npm:^0.4.0": - version: 0.4.0 - resolution: "web-streams-node@npm:0.4.0" - dependencies: - is-stream: "npm:^1.1.0" - readable-stream-node-to-web: "npm:^1.0.1" - web-streams-ponyfill: "npm:^1.4.1" - checksum: 10c0/356292e85f1b9afa39a0470f6abf1ab3866504371862bce4851a9ab99f8510fc06c1c0f8490536ca2ae02797f63dec4d186482468ab2cc547e4c1a8546b4b2e3 - languageName: node - linkType: hard - -"web-streams-polyfill@npm:^3.0.3": - version: 3.3.3 - resolution: "web-streams-polyfill@npm:3.3.3" - checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f - languageName: node - linkType: hard - -"web-streams-ponyfill@npm:^1.4.1": - version: 1.4.2 - resolution: "web-streams-ponyfill@npm:1.4.2" - checksum: 10c0/bcaed7e8c6359511f2e07054d399675441f8baf05075ed171f7781020731c71a3455fbd4a70a4038a461aa82941d3186679d0c74bfeaa855537db973da390f6c - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - -"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": - version: 1.1.1 - resolution: "which-boxed-primitive@npm:1.1.1" - dependencies: - is-bigint: "npm:^1.1.0" - is-boolean-object: "npm:^1.2.1" - is-number-object: "npm:^1.1.1" - is-string: "npm:^1.1.1" - is-symbol: "npm:^1.1.1" - checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe - languageName: node - linkType: hard - -"which-builtin-type@npm:^1.2.1": - version: 1.2.1 - resolution: "which-builtin-type@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - function.prototype.name: "npm:^1.1.6" - has-tostringtag: "npm:^1.0.2" - is-async-function: "npm:^2.0.0" - is-date-object: "npm:^1.1.0" - is-finalizationregistry: "npm:^1.1.0" - is-generator-function: "npm:^1.0.10" - is-regex: "npm:^1.2.1" - is-weakref: "npm:^1.0.2" - isarray: "npm:^2.0.5" - which-boxed-primitive: "npm:^1.1.0" - which-collection: "npm:^1.0.2" - which-typed-array: "npm:^1.1.16" - checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 - languageName: node - linkType: hard - -"which-collection@npm:^1.0.2": - version: 1.0.2 - resolution: "which-collection@npm:1.0.2" - dependencies: - is-map: "npm:^2.0.3" - is-set: "npm:^2.0.3" - is-weakmap: "npm:^2.0.2" - is-weakset: "npm:^2.0.3" - checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.2": - version: 1.1.18 - resolution: "which-typed-array@npm:1.1.18" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c - languageName: node - linkType: hard - -"which@npm:^1.2.9": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: "npm:^2.0.0" - bin: - which: ./bin/which - checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a - languageName: node - linkType: hard - -"which@npm:^5.0.0": - version: 5.0.0 - resolution: "which@npm:5.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b - languageName: node - linkType: hard - -"wide-align@npm:1.1.5, wide-align@npm:^1.1.2": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: "npm:^1.0.2 || 2 || 3 || 4" - checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 - languageName: node - linkType: hard - -"with@npm:^7.0.0": - version: 7.0.2 - resolution: "with@npm:7.0.2" - dependencies: - "@babel/parser": "npm:^7.9.6" - "@babel/types": "npm:^7.9.6" - assert-never: "npm:^1.2.1" - babel-walk: "npm:3.0.0-canary-5" - checksum: 10c0/99289e49afc4b1776afae0ef85e84cfa775e8e07464d2b9853a31b0822347031d1cf77f287d25adc8c3f81e4fa68f4ee31526a9c95d4981ba08a1fe24dee111a - languageName: node - linkType: hard - -"word-wrap@npm:^1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 - languageName: node - linkType: hard - -"wordwrap@npm:~0.0.2": - version: 0.0.3 - resolution: "wordwrap@npm:0.0.3" - checksum: 10c0/b3b212f8b2167091f59bc60929ada2166eb157abb6c8c82e2a705fe5aa5876440c3966ab39eb6c7bcb2ff0ac0c8d9fba726a9c2057b83bd65cdc1858f9d816ce - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.0.1": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": - version: 5.0.1 - resolution: "write-file-atomic@npm:5.0.1" - dependencies: - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^4.0.1" - checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d - languageName: node - linkType: hard - -"write-file-atomic@npm:^2.4.2": - version: 2.4.3 - resolution: "write-file-atomic@npm:2.4.3" - dependencies: - graceful-fs: "npm:^4.1.11" - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^3.0.2" - checksum: 10c0/8cb4bba0c1ab814a9b127844da0db4fb8c5e06ddbe6317b8b319377c73b283673036c8b9360120062898508b9428d81611cf7fa97584504a00bc179b2a580b92 - languageName: node - linkType: hard - -"write-json-file@npm:^3.2.0": - version: 3.2.0 - resolution: "write-json-file@npm:3.2.0" - dependencies: - detect-indent: "npm:^5.0.0" - graceful-fs: "npm:^4.1.15" - make-dir: "npm:^2.1.0" - pify: "npm:^4.0.1" - sort-keys: "npm:^2.0.0" - write-file-atomic: "npm:^2.4.2" - checksum: 10c0/3eadcb6e832ac34dbba37d4eea8871d9fef0e0d77c486b13ed5f81d84a8fcecd9e1a04277e2691eb803c2bed39c2a315e98b96f492c271acee2836acc6276043 - languageName: node - linkType: hard - -"write-pkg@npm:4.0.0": - version: 4.0.0 - resolution: "write-pkg@npm:4.0.0" - dependencies: - sort-keys: "npm:^2.0.0" - type-fest: "npm:^0.4.1" - write-json-file: "npm:^3.2.0" - checksum: 10c0/8e20db5fa444dad04e3703c18d8e0f89679caa60accbee5da9ea3aa076430b3f32d99f50d8860d29044245775795455c62d12d16a7856d407e30df7b79f39505 - languageName: node - linkType: hard - -"xmldom@npm:0.1.19": - version: 0.1.19 - resolution: "xmldom@npm:0.1.19" - checksum: 10c0/e0634db88f7485285ce0381112b28c2136b6754109e6e0f49576a9e52c2dc6f22f9558cd37126a6f18d15c9da6cd55a546dd223f8e9643326358e3eb38d23da2 - languageName: node - linkType: hard - -"xtend@npm:^4.0.2, xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 - languageName: node - linkType: hard - -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: 10c0/0b9e25aa00adf19e01d2bcd4b208aee2b0db643d9927131797b7af5ff69480fc80f1c3db738cbf3946f0bddf39d8f2d0a5709c644fd42d4aa3a4e6e786c087b5 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard - -"yaml@npm:^2.6.0": - version: 2.7.0 - resolution: "yaml@npm:2.7.0" - bin: - yaml: bin.mjs - checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 - languageName: node - linkType: hard - -"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 - languageName: node - linkType: hard - -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 - languageName: node - linkType: hard - -"yargs@npm:17.7.2, yargs@npm:^17.6.2, yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: "npm:^8.0.1" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.1.1" - checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 - languageName: node - linkType: hard - -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - dependencies: - cliui: "npm:^7.0.2" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.0" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^20.2.2" - checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" + integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== + +"@babel/core@^7.23.9", "@babel/core@^7.27.4", "@babel/core@^7.28.0": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" + integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.4" + "@babel/types" "^7.28.4" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.27.5", "@babel/generator@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" + integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== + dependencies: + "@babel/parser" "^7.28.3" + "@babel/types" "^7.28.2" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz#3e747434ea007910c320c4d39a6b46f20f371d46" + integrity sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.3" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" + integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" + lodash.debounce "^4.0.8" + resolve "^1.22.10" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-member-expression-to-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" + integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helper-wrap-function@^7.27.1": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" + integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== + dependencies: + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" + +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" + integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== + dependencies: + "@babel/types" "^7.28.4" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" + integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz#373f6e2de0016f73caf8f27004f61d167743742a" + integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" + +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-block-scoping@^7.28.0": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz#e19ac4ddb8b7858bac1fd5c1be98a994d9726410" + integrity sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-static-block@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852" + integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-classes@^7.28.3": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" + integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.4" + +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" + +"@babel/plugin-transform-destructuring@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" + integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.0" + +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + +"@babel/plugin-transform-exponentiation-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" + integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== + dependencies: + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-logical-assignment-operators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" + integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-systemjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" + integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-object-rest-spread@^7.28.0": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" + integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.4" + +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" + integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regenerator@^7.28.3": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" + integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-runtime@^7.28.0": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz#f5990a1b2d2bde950ed493915e0719841c8d0eaa" + integrity sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typescript@^7.27.1": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" + integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/preset-env@^7.28.0": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.3.tgz#2b18d9aff9e69643789057ae4b942b1654f88187" + integrity sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg== + dependencies: + "@babel/compat-data" "^7.28.0" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.0" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.3" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.0" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.3" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" + integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.27.1" + +"@babel/runtime@^7.13.9": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== + +"@babel/template@^7.25.9", "@babel/template@^7.27.1", "@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" + integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.4.4", "@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" + integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@comunica/actor-abstract-mediatyped@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.22.0.tgz#e61a4dad537096a84a9684bf7cd6ec1b8fda2368" + integrity sha512-+KQLPpx8GFqrhWFfuvrsA4Rjlfbo/QOIo2IvzSgmDwy6YVQZXaSQiNQv/BnrnedaFCf2ONV+w+PMLqXgzn8N9A== + +"@comunica/actor-http-native@~1.22.0": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@comunica/actor-http-native/-/actor-http-native-1.22.1.tgz#60671bc654d6e63c4775f9dd678fd3c67fbfc214" + integrity sha512-BdB+hvQ9CJF9tI42hNhcvTMagOty+jw21LIQDJWI628xMcXZ88BJaUX0Ulc7g2nrWH97ZRm5+KjLC4Zf+OGwZg== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@types/parse-link-header" "^1.0.0" + cross-fetch "^3.0.5" + follow-redirects "^1.5.1" + parse-link-header "^1.0.1" + +"@comunica/actor-rdf-parse-html-microdata@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.22.0.tgz#a4476bc1430e7e367f5b733eeb71eea3ca26e041" + integrity sha512-OdB3Z7ZCtVAcsVU2Vs0ytGbiz0eYkeBwVA3k0vGVhSN3ygng5Thj+t8jxG6QWHlLvaIXfJFh0x57qY5tXkr8uQ== + dependencies: + microdata-rdf-streaming-parser "^1.2.0" + +"@comunica/actor-rdf-parse-html-rdfa@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.22.0.tgz#d7ea6b5e0cb27321990b387348ecb2131ffcfefa" + integrity sha512-yVjYLpm9rbpPiqU1OE4Yioyk/YHtO6ywVMbdOPUNLeOwrtWou8vKX0Xh4UUR24Qrt8nuhE+p0kCJiZZtM1PmSQ== + dependencies: + rdfa-streaming-parser "^1.5.0" + +"@comunica/actor-rdf-parse-html-script@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.22.0.tgz#8bbaabd28c05b6fb6d400c8858ef8e1647fcade1" + integrity sha512-gQSY56wkS/uftRyjQf+/dQFRpA/jZ6z2o2RgGbQc2avgKTkhaiTtPxpfO1oarLskm1sPlQOFo24ZwqUSqjOwcA== + dependencies: + "@comunica/bus-rdf-parse-html" "^1.22.0" + "@rdfjs/types" "*" + relative-to-absolute-iri "^1.0.5" + +"@comunica/actor-rdf-parse-html@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.22.0.tgz#b217e491f77ee4853190c2ab0613c3cf46dbd71e" + integrity sha512-U9pznSpQ1POSH+ekOke3lYKO0fsUbNdv1g1nfuWz/MV3xMCF/d2f3CVBjXRSx9qwyb/2zUrOjBCJRrYkfZ6geQ== + dependencies: + "@comunica/bus-rdf-parse-html" "^1.22.0" + "@rdfjs/types" "*" + htmlparser2 "^7.0.0" + +"@comunica/actor-rdf-parse-jsonld@^1.22.0": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.22.1.tgz#7f071607fe42dd2c5668ce6d744c5fd976ef889d" + integrity sha512-MFFhJ6eGyO40Be80zsFKAbRjkPXr80PvCqvVKsEstdv3u9C6GFV3nqZpCwvsVCz22IPQhW+rzb8ZyasmgHnurA== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@rdfjs/types" "*" + jsonld-context-parser "^2.1.2" + jsonld-streaming-parser "^2.4.0" + stream-to-string "^1.2.0" + +"@comunica/actor-rdf-parse-n3@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.22.0.tgz#c027a84980e2891e5696cd16ac6c01b0c9d62496" + integrity sha512-qHrGfh5k/pZa4imy7m9gJ1kt9aW1uxXqLDKnLKvR2l0m09YiEx/YOYWr1Wtu1YtH/Yyc13OX4mo/OwaE5PfrHQ== + dependencies: + "@types/n3" "^1.4.4" + n3 "^1.6.3" + +"@comunica/actor-rdf-parse-rdfxml@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.22.0.tgz#ea7260db32d409d6568a2e3422fbe7eb0ff10512" + integrity sha512-k47WEAZ6qKEhf1eBZZeI5aVywlrUUKP3BKHw2zKJUjuWq5k+w/rp2WALCyt0Owtb37UlJbET3fTlUhXKvT+2aw== + dependencies: + rdfxml-streaming-parser "^1.5.0" + +"@comunica/actor-rdf-parse-xml-rdfa@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.22.0.tgz#6bf1248e057b7137060db16438da8ab13282ffbc" + integrity sha512-y315YcZTz7AizKf8Jl022IocAJIh3OHSlzNrRNH3zB7i/ch+WHj1VL9pjIf6y77PD4BR75EdeoQCPafpm5Gsbg== + dependencies: + rdfa-streaming-parser "^1.5.0" + +"@comunica/bus-http@~1.22.0": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@comunica/bus-http/-/bus-http-1.22.1.tgz#0ac597826a9aa4e5b230edc62250e6bc445fc46a" + integrity sha512-CZ0NDWZH0k0FOshuRQJzYr3Z+2ZM1vqr9ZepONuaoYDwyKaxl29xPs3hNfjSy6YawjEQP+elr/WDc3TxKIpu8g== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@types/readable-stream" "^2.3.11" + is-stream "^2.0.0" + readable-web-to-node-stream "^3.0.2" + web-streams-node "^0.4.0" + +"@comunica/bus-init@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-init/-/bus-init-1.22.0.tgz#b75976f6e59ad66eb6e7f45dd5257f9486b852dc" + integrity sha512-NIfEJLI8EYFdTWJB0PV/lxPagStPl+gUj3LtOnovcF1ZhC5rgcJSC/tq1r04n0TziY2KVangnLDsF4752LjD6g== + +"@comunica/bus-rdf-parse-html@^1.22.0", "@comunica/bus-rdf-parse-html@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.22.0.tgz#6854946ca7bfecd1f962bf8535b8b112ced93420" + integrity sha512-zqdLdF5qvru1vnzN4t9eXpJhi6khKm1ZWhUovBB9pfYnnyGRCQCPlFpcgJPrD8JfKd6nTvhgdLB5QcAbBb1I0A== + dependencies: + "@rdfjs/types" "*" + +"@comunica/bus-rdf-parse@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.22.0.tgz#e94d93b3d941017f20bb3786fb0f7edbe047934e" + integrity sha512-ohZGlabX5K+dEmn+v4BzP+IZVyRc1ovWItHDLznnRqsHQr8W19WPG21lEFh5kk2MK4YnyQWmlUax1Yxrg7cbXg== + dependencies: + "@comunica/actor-abstract-mediatyped" "^1.22.0" + "@rdfjs/types" "*" + +"@comunica/context-entries@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/context-entries/-/context-entries-1.22.0.tgz#31e61298cf93289449ee67197789baa27b89c591" + integrity sha512-HOYr1HdhgavxABpw8saZa9pueLAeGVVd/6cZ3FWcYnH3CvfQu6Ima06Gd00QdIAiGjQm01qQcWCxp0xURiqLKg== + +"@comunica/core@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/core/-/core-1.22.0.tgz#b60bde5e202a48bfb577a237a4ae6d756166477a" + integrity sha512-tgozygRFTd6t6l0YyvfVUWNC+KXWiTlBclkxtzFioQsplKvUSvg1TPjopRk8hhAvMaNRGMNBK2ZafNaqNTkI4w== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@comunica/types" "^1.22.0" + immutable "^3.8.2" + +"@comunica/mediator-combine-union@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-combine-union/-/mediator-combine-union-1.22.0.tgz#665ca2f5d31bf4805259b93fede7ccbf8810e3a3" + integrity sha512-iUHmEGgWVmk02e80uB7w8xZ5vgTLpiqzrImvbokolJzWcVbobVCUkq8DUxzz3FJbNVRGipZUFrOqkRPAuAX6FA== + +"@comunica/mediator-number@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-number/-/mediator-number-1.22.0.tgz#81c4b5526663f0ab266662370d6232517d6cb253" + integrity sha512-KDPlJEvj0Lu+JygGXjnH8pf33k01lJ+wgzUlWK216jZJ1Px2lTlfc/COhSqi/e0y+k4ZSBcxx0gnjt2awMpbrQ== + +"@comunica/mediator-race@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-race/-/mediator-race-1.22.0.tgz#ffe852edb3e163817f4d12ebadd4464561cbdb40" + integrity sha512-hIMaHyf9M4jOS0199OURSVgWFmzkyF2K2keuAb+iHoCH3UUcUnWjPOL1TrdkxvaUnrxmsBWR9SXbnqgMnhIsiQ== + +"@comunica/types@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/types/-/types-1.22.0.tgz#ba984437d80d37c52636049325a1a16f6368a142" + integrity sha512-ZQ8p+ZvMAKmdq6Hz2QwqIQ2JScwRMotiWz0iSw2zYHsYQOhVmLg7HSMzMHpWNEA5UWzO/A5A+Co/ONXMhlnx3g== + dependencies: + "@rdfjs/types" "*" + asynciterator "^3.2.0" + immutable "^3.8.2" + sparqlalgebrajs "^3.0.1" + +"@digitalbazaar/credentials-context@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/credentials-context/-/credentials-context-3.2.0.tgz#c5efa74744c25be8d3a7d26b1d4d2fd349b19ae8" + integrity sha512-WruXZAF182pCYq/z2JPJ4N4mVDu6pd/hr7widdCqbKekA53BXHoX7XhL9tmRmQ8kfmkaStBfla67QHhkchWYBQ== + +"@digitalbazaar/data-integrity@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz#3fe9eee7bbe750da8977866c8f8ded16bf7d4ce2" + integrity sha512-ohIieLfgtPQU9BYfj0eKNiz55/ZDOk5YSE9FN/Hn0eXzI8WQzLkzRvC8pvBnzuzXDgCsjPdSqYvzok5PoClMBQ== + dependencies: + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + jsonld-signatures "^11.3.0" + +"@digitalbazaar/ed25519-multikey@^1.0.0", "@digitalbazaar/ed25519-multikey@^1.1.0", "@digitalbazaar/ed25519-multikey@^1.3.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-multikey/-/ed25519-multikey-1.3.1.tgz#905620b8809d39cbab8af880c05059dbcbb05509" + integrity sha512-55qIbOaAyswVCFfZ70ap7SN2bDSwYmcVbUtGCrpVF/CjuJ8IPqf6z8fDPJzB+CE7Q896SaZlcDukz4LOwIRCPA== + dependencies: + "@noble/ed25519" "^1.6.0" + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + +"@digitalbazaar/ed25519-signature-2020@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-signature-2020/-/ed25519-signature-2020-5.4.0.tgz#a5dc3d357299c5c94463688d5c157cfc21d8d9fc" + integrity sha512-dHjOv41wiKLoPaE1S9g4NCMKNnelYtBa5fCJKwrqo+cPlLuKcEhtD7w/uuc5non7bf/GX5sa5YfDI/sRUOS6iw== + dependencies: + "@digitalbazaar/ed25519-multikey" "^1.1.0" + "@digitalbazaar/ed25519-verification-key-2020" "^4.1.0" + base58-universal "^2.0.0" + ed25519-signature-2020-context "^1.1.0" + jsonld-signatures "^11.3.0" + +"@digitalbazaar/ed25519-verification-key-2020@^4.1.0", "@digitalbazaar/ed25519-verification-key-2020@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.2.0.tgz#4a394c7c137ead8edf415c83bbd3c40b73c95b49" + integrity sha512-urEVTYkt+uYD8GjdoS6gkm2sKBich1hqx42b6vvUOmNgF0agZ95JlUjiJXEx+VOwu7WSjJSnEBph2Qatkrk1CA== + dependencies: + "@noble/ed25519" "^1.6.0" + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + crypto-ld "^7.0.0" + +"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/-/eddsa-rdfc-2022-cryptosuite-1.2.0.tgz#9c282d5f558ecce4d336e9947b06d45c58615cc9" + integrity sha512-a3PyICe1SI55SgHXgtPRYpzmZ2FMtloQDkVcbhUZ9dpoLcZg5TqsS4U7ap2ggCD4MUXz7uz6ErikJf76Iwyd0g== + dependencies: + "@digitalbazaar/ed25519-multikey" "^1.0.0" + jsonld "^8.1.0" + rdf-canonize "^4.0.1" + +"@digitalbazaar/http-client@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@digitalbazaar/http-client/-/http-client-3.4.1.tgz#5116fc44290d647cfe4b615d1f3fad9d6005e44d" + integrity sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g== + dependencies: + ky "^0.33.3" + ky-universal "^0.11.0" + undici "^5.21.2" + +"@digitalbazaar/security-context@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@digitalbazaar/security-context/-/security-context-1.0.1.tgz#badc4b8da03411a32d4e7321ce7c4b355776b410" + integrity sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA== + +"@digitalbazaar/vc@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/vc/-/vc-7.2.0.tgz#68b8597f8ac7e709b76be8343963943129f0c125" + integrity sha512-Fpa7MG+/pxwV0vJbstKJc1DLrVzFYz7mlqZfRMkFOodR0YvVp3GGdiybCKtj7oxv/cuskzuqB/MFmDhq8tEd9g== + dependencies: + "@digitalbazaar/credentials-context" "^3.2.0" + ed25519-signature-2018-context "^1.1.0" + jsonld "^8.3.3" + jsonld-signatures "^11.5.0" + +"@emnapi/core@^1.1.0", "@emnapi/core@^1.4.3": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.5.0.tgz#85cd84537ec989cebb2343606a1ee663ce4edaf0" + integrity sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg== + dependencies: + "@emnapi/wasi-threads" "1.1.0" + tslib "^2.4.0" + +"@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.3": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.5.0.tgz#9aebfcb9b17195dce3ab53c86787a6b7d058db73" + integrity sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" + integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== + dependencies: + tslib "^2.4.0" + +"@es-joy/jsdoccomment@~0.46.0": + version "0.46.0" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz#47a2ee4bfc0081f252e058272dfab680aaed464d" + integrity sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ== + dependencies: + comment-parser "1.4.1" + esquery "^1.6.0" + jsdoc-type-pratt-parser "~4.0.0" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@fastify/busboy@^1.0.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.2.1.tgz#9c6db24a55f8b803b5222753b24fe3aea2ba9ca3" + integrity sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q== + dependencies: + text-decoding "^1.0.0" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@inquirer/external-editor@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.2.tgz#dc16e7064c46c53be09918db639ff780718c071a" + integrity sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ== + dependencies: + chardet "^2.1.0" + iconv-lite "^0.7.0" + +"@ioredis/commands@^1.0.2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.4.0.tgz#9f657d51cdd5d2fdb8889592aa4a355546151f25" + integrity sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@30.1.2": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-30.1.2.tgz#3d32b966454d57874520b27647129228a654c995" + integrity sha512-BGMAxj8VRmoD0MoA/jo9alMXSRoqW8KPeqOfEo1ncxnRLatTBCpRoOwlwlEMdudp68Q6WSGwYrrLtTGOh8fLzw== + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + jest-message-util "30.1.0" + jest-util "30.0.5" + slash "^3.0.0" + +"@jest/core@30.1.3": + version "30.1.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-30.1.3.tgz#c097dcead36ac6ccee2825a35078163465f8b79d" + integrity sha512-LIQz7NEDDO1+eyOA2ZmkiAyYvZuo6s1UxD/e2IHldR6D7UYogVq3arTmli07MkENLq6/3JEQjp0mA8rrHHJ8KQ== + dependencies: + "@jest/console" "30.1.2" + "@jest/pattern" "30.0.1" + "@jest/reporters" "30.1.3" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + ci-info "^4.2.0" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-changed-files "30.0.5" + jest-config "30.1.3" + jest-haste-map "30.1.0" + jest-message-util "30.1.0" + jest-regex-util "30.0.1" + jest-resolve "30.1.3" + jest-resolve-dependencies "30.1.3" + jest-runner "30.1.3" + jest-runtime "30.1.3" + jest-snapshot "30.1.2" + jest-util "30.0.5" + jest-validate "30.1.0" + jest-watcher "30.1.3" + micromatch "^4.0.8" + pretty-format "30.0.5" + slash "^3.0.0" + +"@jest/diff-sequences@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz#0ededeae4d071f5c8ffe3678d15f3a1be09156be" + integrity sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw== + +"@jest/environment@30.1.2": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-30.1.2.tgz#f1bd73a7571f96104a3ff2007747c2ce12b5c038" + integrity sha512-N8t1Ytw4/mr9uN28OnVf0SYE2dGhaIxOVYcwsf9IInBKjvofAjbFRvedvBBlyTYk2knbJTiEjEJ2PyyDIBnd9w== + dependencies: + "@jest/fake-timers" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + jest-mock "30.0.5" + +"@jest/expect-utils@30.1.2": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-30.1.2.tgz#88ea18040f707c9fadb6fd9e77568cae5266cee8" + integrity sha512-HXy1qT/bfdjCv7iC336ExbqqYtZvljrV8odNdso7dWK9bSeHtLlvwWWC3YSybSPL03Gg5rug6WLCZAZFH72m0A== + dependencies: + "@jest/get-type" "30.1.0" + +"@jest/expect@30.1.2": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-30.1.2.tgz#35283e8bd083aab6cc26d4d30aeeacb5e7190a0f" + integrity sha512-tyaIExOwQRCxPCGNC05lIjWJztDwk2gPDNSDGg1zitXJJ8dC3++G/CRjE5mb2wQsf89+lsgAgqxxNpDLiCViTA== + dependencies: + expect "30.1.2" + jest-snapshot "30.1.2" + +"@jest/fake-timers@30.1.2": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-30.1.2.tgz#cb0df6995034d50c6973ffd3ffdaa1353a816c41" + integrity sha512-Beljfv9AYkr9K+ETX9tvV61rJTY706BhBUtiaepQHeEGfe0DbpvUA5Z3fomwc5Xkhns6NWrcFDZn+72fLieUnA== + dependencies: + "@jest/types" "30.0.5" + "@sinonjs/fake-timers" "^13.0.0" + "@types/node" "*" + jest-message-util "30.1.0" + jest-mock "30.0.5" + jest-util "30.0.5" + +"@jest/get-type@30.1.0": + version "30.1.0" + resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc" + integrity sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA== + +"@jest/globals@30.1.2", "@jest/globals@^30.0.5": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-30.1.2.tgz#821cad7d8ef3dc145979088bb0bfbc1f81a5d8ce" + integrity sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A== + dependencies: + "@jest/environment" "30.1.2" + "@jest/expect" "30.1.2" + "@jest/types" "30.0.5" + jest-mock "30.0.5" + +"@jest/pattern@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.0.1.tgz#d5304147f49a052900b4b853dedb111d080e199f" + integrity sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA== + dependencies: + "@types/node" "*" + jest-regex-util "30.0.1" + +"@jest/reporters@30.1.3": + version "30.1.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-30.1.3.tgz#015b5838b3edf60f6e995186cd805b7fcbac86b3" + integrity sha512-VWEQmJWfXMOrzdFEOyGjUEOuVXllgZsoPtEHZzfdNz18RmzJ5nlR6kp8hDdY8dDS1yGOXAY7DHT+AOHIPSBV0w== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "30.1.2" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@jridgewell/trace-mapping" "^0.3.25" + "@types/node" "*" + chalk "^4.1.2" + collect-v8-coverage "^1.0.2" + exit-x "^0.2.2" + glob "^10.3.10" + graceful-fs "^4.2.11" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^5.0.0" + istanbul-reports "^3.1.3" + jest-message-util "30.1.0" + jest-util "30.0.5" + jest-worker "30.1.0" + slash "^3.0.0" + string-length "^4.0.2" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@30.0.5": + version "30.0.5" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.5.tgz#7bdf69fc5a368a5abdb49fd91036c55225846473" + integrity sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA== + dependencies: + "@sinclair/typebox" "^0.34.0" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/snapshot-utils@30.1.2": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/snapshot-utils/-/snapshot-utils-30.1.2.tgz#320500eba29a25c33e9ec968154e521873624309" + integrity sha512-vHoMTpimcPSR7OxS2S0V1Cpg8eKDRxucHjoWl5u4RQcnxqQrV3avETiFpl8etn4dqxEGarBeHbIBety/f8mLXw== + dependencies: + "@jest/types" "30.0.5" + chalk "^4.1.2" + graceful-fs "^4.2.11" + natural-compare "^1.4.0" + +"@jest/source-map@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-30.0.1.tgz#305ebec50468f13e658b3d5c26f85107a5620aaa" + integrity sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + callsites "^3.1.0" + graceful-fs "^4.2.11" + +"@jest/test-result@30.1.3": + version "30.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-30.1.3.tgz#69fe7ff93da8c0c47bae245727e0ce23571d058e" + integrity sha512-P9IV8T24D43cNRANPPokn7tZh0FAFnYS2HIfi5vK18CjRkTDR9Y3e1BoEcAJnl4ghZZF4Ecda4M/k41QkvurEQ== + dependencies: + "@jest/console" "30.1.2" + "@jest/types" "30.0.5" + "@types/istanbul-lib-coverage" "^2.0.6" + collect-v8-coverage "^1.0.2" + +"@jest/test-sequencer@30.1.3": + version "30.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-30.1.3.tgz#df64038d46150e704ed07c5fee4626609f518089" + integrity sha512-82J+hzC0qeQIiiZDThh+YUadvshdBswi5nuyXlEmXzrhw5ZQSRHeQ5LpVMD/xc8B3wPePvs6VMzHnntxL+4E3w== + dependencies: + "@jest/test-result" "30.1.3" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + slash "^3.0.0" + +"@jest/transform@30.1.2": + version "30.1.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-30.1.2.tgz#42624a9c89f2427cd413b989aaf9f6aeb58cae56" + integrity sha512-UYYFGifSgfjujf1Cbd3iU/IQoSd6uwsj8XHj5DSDf5ERDcWMdJOPTkHWXj4U+Z/uMagyOQZ6Vne8C4nRIrCxqA== + dependencies: + "@babel/core" "^7.27.4" + "@jest/types" "30.0.5" + "@jridgewell/trace-mapping" "^0.3.25" + babel-plugin-istanbul "^7.0.0" + chalk "^4.1.2" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + jest-regex-util "30.0.1" + jest-util "30.0.5" + micromatch "^4.0.8" + pirates "^4.0.7" + slash "^3.0.0" + write-file-atomic "^5.0.1" + +"@jest/types@30.0.5": + version "30.0.5" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.0.5.tgz#29a33a4c036e3904f1cfd94f6fe77f89d2e1cc05" + integrity sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ== + dependencies: + "@jest/pattern" "30.0.1" + "@jest/schemas" "30.0.5" + "@types/istanbul-lib-coverage" "^2.0.6" + "@types/istanbul-reports" "^3.0.4" + "@types/node" "*" + "@types/yargs" "^17.0.33" + chalk "^4.1.2" + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@lerna/create@8.2.4": + version "8.2.4" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.2.4.tgz#59a050f58681e9236db38cc5bcc6986ae79d1389" + integrity sha512-A8AlzetnS2WIuhijdAzKUyFpR5YbLLfV3luQ4lzBgIBgRfuoBDZeF+RSZPhra+7A6/zTUlrbhKZIOi/MNhqgvQ== + dependencies: + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + execa "5.0.0" + fs-extra "^11.2.0" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "6.0.3" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-reduce "^2.1.0" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.4" + set-blocking "^2.0.0" + signal-exit "3.0.7" + slash "^3.0.0" + ssri "^10.0.6" + string-width "^4.2.3" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" + +"@mapbox/node-pre-gyp@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@napi-rs/wasm-runtime@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz#d27788176f250d86e498081e3c5ff48a17606918" + integrity sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== + dependencies: + "@emnapi/core" "^1.1.0" + "@emnapi/runtime" "^1.1.0" + "@tybys/wasm-util" "^0.9.0" + +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2" + integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.10.0" + +"@noble/ed25519@^1.6.0": + version "1.7.5" + resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.5.tgz#94df8bdb9fec9c4644a56007eecb57b0e9fbd0d7" + integrity sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + +"@npmcli/agent@^2.0.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" + integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/arborist@7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" + integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.1" + "@npmcli/installed-package-contents" "^2.1.0" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^7.1.1" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.1.0" + "@npmcli/query" "^3.1.0" + "@npmcli/redact" "^2.0.0" + "@npmcli/run-script" "^8.1.0" + bin-links "^4.0.4" + cacache "^18.0.3" + common-ancestor-path "^1.0.1" + hosted-git-info "^7.0.2" + json-parse-even-better-errors "^3.0.2" + json-stringify-nice "^1.1.4" + lru-cache "^10.2.2" + minimatch "^9.0.4" + nopt "^7.2.1" + npm-install-checks "^6.2.0" + npm-package-arg "^11.0.2" + npm-pick-manifest "^9.0.1" + npm-registry-fetch "^17.0.1" + pacote "^18.0.6" + parse-conflict-json "^3.0.0" + proc-log "^4.2.0" + proggy "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^3.0.1" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.6" + treeverse "^3.0.0" + walk-up-path "^3.0.1" + +"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" + integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^5.0.0": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" + integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== + dependencies: + "@npmcli/promise-spawn" "^7.0.0" + ini "^4.1.3" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" + proc-log "^4.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^4.0.0" + +"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" + integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/map-workspaces@^3.0.2": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" + integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== + dependencies: + "@npmcli/name-from-folder" "^2.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + read-package-json-fast "^3.0.0" + +"@npmcli/metavuln-calculator@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf" + integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g== + dependencies: + cacache "^18.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^18.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + +"@npmcli/name-from-folder@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/package-json@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" + integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" + +"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" + integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" + +"@npmcli/promise-spawn@^7.0.0": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" + integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== + dependencies: + which "^4.0.0" + +"@npmcli/query@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" + integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== + dependencies: + postcss-selector-parser "^6.0.10" + +"@npmcli/redact@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" + integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== + +"@npmcli/run-script@8.1.0", "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" + integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" + proc-log "^4.0.0" + which "^4.0.0" + +"@nrwl/tao@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-17.2.5.tgz#48b941569f83a1669023aeecaaf64f0ea09b5aec" + integrity sha512-hA89BirzFb2MBm26ZPTTJ/RWRjmZ9R39J8321kVEldehStluA4E5zobNd7MJVp77fBK/CCTlIhFeUEP9qmxhZA== + dependencies: + nx v17.2.5 + tslib "^2.3.0" + +"@nx/devkit@>=17.1.2 < 21": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-20.8.2.tgz#4bed032a06ac37910fae5e231849283b8ac415fb" + integrity sha512-rr9p2/tZDQivIpuBUpZaFBK6bZ+b5SAjZk75V4tbCUqGW3+5OPuVvBPm+X+7PYwUF6rwSpewxkjWNeGskfCe+Q== + dependencies: + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + minimatch "9.0.3" + semver "^7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@nx/nx-darwin-arm64@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.2.tgz#16b20a4aac4228f30124551a1eceb03d5f8330e7" + integrity sha512-t+bmCn6sRPNGU6hnSyWNvbQYA/KgsxGZKYlaCLRwkNhI2akModcBUqtktJzCKd1XHDqs6EkEFBWjFr8/kBEkSg== + +"@nx/nx-darwin-arm64@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.5.tgz#411b861cb0a98540082b7639dbaaa9f48044a25a" + integrity sha512-AGF/XnMkXymS8xYMsbeyNKZWKflfU8TTqEJqlcADMHYcr8OD1Jyq1YYHp/vvPBWqEhUL4bx3GPspQn5YiiCrWw== + +"@nx/nx-darwin-x64@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.2.tgz#06a203a695509e4a6f05a82cb40cc00438a19b3a" + integrity sha512-pt/wmDLM31Es8/EzazlyT5U+ou2l60rfMNFGCLqleHEQ0JUTc0KWnOciBLbHIQFiPsCQZJFEKyfV5V/ncePmmw== + +"@nx/nx-darwin-x64@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.5.tgz#94900e137763b03abeb41f2279e214ea606ad9a8" + integrity sha512-YQQG+kijDNedE6bwEIeKWtVQOxJD+NHW69z6sb/S+ub8NO293YgNtYXgilet9RwOKBubeSyBqWr+yYbRhOuz+A== + +"@nx/nx-freebsd-x64@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.2.tgz#c7c9ae6e331ca97571f6a048c0f69aa6c5fd2479" + integrity sha512-joZxFbgJfkHkB9uMIJr73Gpnm9pnpvr0XKGbWC409/d2x7q1qK77tKdyhGm+A3+kaZFwstNVPmCUtUwJYyU6LA== + +"@nx/nx-freebsd-x64@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.5.tgz#731ffa2f70142a28ce33fd59ef564e24ba94ee5f" + integrity sha512-AzcYELtNDukSTtO6zTAuu9pUI2634/2ZFLdS15C9cqUrK0XNvBcbj6R1KNGjgaBDUJc9H49+fqU8VnLPpJjBKQ== + +"@nx/nx-linux-arm-gnueabihf@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.2.tgz#a6ae89115efb7601baa4c3421649ee785d6aa3a9" + integrity sha512-98O/qsxn4vIMPY/FyzvmVrl7C5yFhCUVk0/4PF+PA2SvtQ051L1eMRY6bq/lb69qfN6szJPZ41PG5mPx0NeLZw== + +"@nx/nx-linux-arm-gnueabihf@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.5.tgz#4d21f74981baeb7528ff2259a5a433e14af6d8f8" + integrity sha512-24Q5N4krcSV6rbFYGRRgbHTc2eSDoJSWesvAtxAW5Sgh6+wAuqFKVwLwY9ZOn1GQwlySB87YwzH2BMkOfEuorw== + +"@nx/nx-linux-arm64-gnu@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.2.tgz#e9a4676d830783ecad5d5bfaf7bf2579c519321c" + integrity sha512-h6a+HxwfSpxsi4KpxGgPh9GDBmD2E+XqGCdfYpobabxqEBvlnIlJyuDhlRR06cTWpuNXHpRdrVogmV6m/YbtDg== + +"@nx/nx-linux-arm64-gnu@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.5.tgz#067d2e9adccbd1bff4dbad7ac1338c02ddb3bf9c" + integrity sha512-ty08Jnhk/eCVzxdm6o9EaGAZQ4t1WQCO9I/FjriEqtt4e5If6YKJPGjRzu/1OCvppv4d7j0SEN6FiyGkESpBPw== + +"@nx/nx-linux-arm64-musl@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.2.tgz#621657dc85c1cb042102f4ed4976cc5823fccea1" + integrity sha512-4Ev+jM0VAxDHV/dFgMXjQTCXS4I8W4oMe7FSkXpG8RUn6JK659DC8ExIDPoGIh+Cyqq6r6mw1CSia+ciQWICWQ== + +"@nx/nx-linux-arm64-musl@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.5.tgz#7257b80b3e36070136d06d38f7a45d5732146c80" + integrity sha512-iW/hOgkpELTTu53UYNYAUvs5dAXDR94P50HZFvTQeTQH6xr8igMdOBFdApYFZIjD7IrKqNBSeAiyl4TyI6vFag== + +"@nx/nx-linux-x64-gnu@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.2.tgz#2b7b893a931b26a8688304d5352bdef0a2431194" + integrity sha512-nR0ev+wxu+nQYRd7bhqggOxK7UfkV6h+Ko1mumUFyrM5GvPpz/ELhjJFSnMcOkOMcvH0b6G5uTBJvN1XWCkbmg== + +"@nx/nx-linux-x64-gnu@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.5.tgz#21d0ed9ecb8fc3742ba5220a4f2a6f4e0d9780d4" + integrity sha512-BJi195AOHSHurMrPzT2mNGslIDn4LVxfKKdiRqVeOvQxT3cZij4fzPTUYxdOFnrWU5YPfW4A9p3ydFz8MDapOg== + +"@nx/nx-linux-x64-musl@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.2.tgz#4188df5b222d6f42fff1e436d494a46af1d30b0b" + integrity sha512-ost41l5yc2aq2Gc9bMMpaPi/jkXqbXEMEPHrxWKuKmaek3K2zbVDQzvBBNcQKxf/mlCsrqN4QO0mKYSRRqag5A== + +"@nx/nx-linux-x64-musl@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.5.tgz#ed68c1df2521259ef1e522f034af63eaa19771ea" + integrity sha512-r1TrCFvdAIvogNry3Oy0IrWT2Ed5nZHR0lcuW5ImF0HinMmH/o4Ey7Q4IRo5hB88gxq4AUTWt+WoQbImIvoGPg== + +"@nx/nx-win32-arm64-msvc@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.2.tgz#6d2122a1c827c100e89698f4a878410833911748" + integrity sha512-0SEOqT/daBG5WtM9vOGilrYaAuf1tiALdrFavY62+/arXYxXemUKmRI5qoKDTnvoLMBGkJs6kxhMO5b7aUXIvQ== + +"@nx/nx-win32-arm64-msvc@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.5.tgz#151c69871e59b061eace5ef9dedac2b684be4fa3" + integrity sha512-TyMH8mys+r4Vgq5LYE6zY70LsL2F7JC85O+jHeVPR0vDNGm5Nb/UHobT5Y/PLpLxIx0aIeRuu6VI3j3oh1JhNw== + +"@nx/nx-win32-x64-msvc@20.8.2": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.2.tgz#60f4c381ad62369ff7ede9336d92262352514bc1" + integrity sha512-iIsY+tVqes/NOqTbJmggL9Juie/iaDYlWgXA9IUv88FE9thqWKhVj4/tCcPjsOwzD+1SVna3YISEEFsx5UV4ew== + +"@nx/nx-win32-x64-msvc@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.5.tgz#89d2ffa519f8ab4e17469b7d65e353d787feb52e" + integrity sha512-I/LWvNasB+iUEzIeejbuaeeezMCfMjpDBsiPdnS5nfHMVnTOrIbfzQOWLWUr+/7R0fYl1BXTp352iaD+M10Agw== + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + +"@octokit/core@^5.0.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.2.tgz#252805732de9b4e8e4f658d34b80c4c9b2534761" + integrity sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0" + integrity sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw== + dependencies: + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.1.tgz#79d9f3d0c96a8fd13d64186fe5c33606d48b79cc" + integrity sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g== + dependencies: + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" + integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== + +"@octokit/plugin-enterprise-rest@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@11.4.4-cjs.2": + version "11.4.4-cjs.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz#979a10d577bce7a393e8e65953887e42b0a05000" + integrity sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw== + dependencies: + "@octokit/types" "^13.7.0" + +"@octokit/plugin-request-log@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz#98a3ca96e0b107380664708111864cb96551f958" + integrity sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA== + +"@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1": + version "13.3.2-cjs.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz#d0a142ff41d8f7892b6ccef45979049f51ecaa8d" + integrity sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ== + dependencies: + "@octokit/types" "^13.8.0" + +"@octokit/request-error@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805" + integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== + dependencies: + "@octokit/types" "^13.1.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486" + integrity sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw== + dependencies: + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@20.1.2": + version "20.1.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-20.1.2.tgz#1d74d0c72ade0d64f7c5416448d5c885f5e3ccc4" + integrity sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA== + dependencies: + "@octokit/core" "^5.0.2" + "@octokit/plugin-paginate-rest" "11.4.4-cjs.2" + "@octokit/plugin-request-log" "^4.0.0" + "@octokit/plugin-rest-endpoint-methods" "13.3.2-cjs.1" + +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0": + version "13.10.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" + integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== + dependencies: + "@octokit/openapi-types" "^24.2.0" + +"@panva/asn1.js@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" + integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.2.tgz#1cf95080bb7072fafaa3cb13b442fab4695c3893" + integrity sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ== + +"@pkgr/core@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" + integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== + +"@rdfjs/data-model@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@rdfjs/data-model/-/data-model-1.3.4.tgz#2b1b3e52755ab1283bf66aa2d3ac97fd8a0332c2" + integrity sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ== + dependencies: + "@rdfjs/types" ">=1.0.1" + +"@rdfjs/types@*", "@rdfjs/types@>=1.0.0", "@rdfjs/types@>=1.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-2.0.1.tgz#f10b50ceffff00b961c4265e60ac9f74550251da" + integrity sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA== + dependencies: + "@types/node" "*" + +"@rdfjs/types@^1.0.0": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-1.1.2.tgz#9c2f9848c44c26d383bed2a808571de3b93b808d" + integrity sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg== + dependencies: + "@types/node" "*" + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@seald-io/binary-search-tree@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz#165a9a456eaa30d15885b25db83861bcce2c6a74" + integrity sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA== + +"@seald-io/nedb@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@seald-io/nedb/-/nedb-3.1.0.tgz#6105345a18596f6f9d69f46d7f572efdae32af8e" + integrity sha512-5G0hCQGJjOelOutvW1l4VD581XMhTPxpj1BUaCWTEM2MPXR9TzIr0MKMnEjnTA5nEKfujPyvVW7iF3etm1/gKQ== + dependencies: + "@seald-io/binary-search-tree" "^1.0.2" + localforage "^1.9.0" + util "^0.12.4" + +"@sigstore/bundle@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" + integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + +"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" + integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== + +"@sigstore/protobuf-specs@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz#7dd46d68b76c322873a2ef7581ed955af6f4dcde" + integrity sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ== + +"@sigstore/sign@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" + integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + make-fetch-happen "^13.0.1" + proc-log "^4.2.0" + promise-retry "^2.0.1" + +"@sigstore/tuf@^2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" + integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + tuf-js "^2.2.1" + +"@sigstore/verify@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" + integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.1.0" + "@sigstore/protobuf-specs" "^0.3.2" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinclair/typebox@^0.34.0": + version "0.34.41" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.41.tgz#aa51a6c1946df2c5a11494a2cdb9318e026db16c" + integrity sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sinonjs/commons@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^13.0.0": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz#36b9dbc21ad5546486ea9173d6bea063eb1717d5" + integrity sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw== + dependencies: + "@sinonjs/commons" "^3.0.1" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" + integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.4" + +"@tybys/wasm-util@^0.10.0": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== + dependencies: + tslib "^2.4.0" + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + +"@types/babel__core@^7.1.12", "@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== + dependencies: + "@babel/types" "^7.28.2" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/dotenv-flow@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@types/dotenv-flow/-/dotenv-flow-3.3.3.tgz#d8bdbb08f35c0a62869b8ce72796055569a44258" + integrity sha512-aJjBsKw4bfGjvaRwrxBtEOfYZxCAq+LiFTpZ4DGTEK2b9eLVt/IAClapSxMfgV4Mi/2bIBKKjoTCO0lOh4ACLg== + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/http-link-header@^1.0.1": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.7.tgz#bb1a1671a8c6d93717e0057072e9253113fdc875" + integrity sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw== + dependencies: + "@types/node" "*" + +"@types/ioredis@^4.27.0": + version "4.28.10" + resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.28.10.tgz#40ceb157a4141088d1394bb87c98ed09a75a06ff" + integrity sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^30.0.0": + version "30.0.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-30.0.0.tgz#5e85ae568006712e4ad66f25433e9bdac8801f1d" + integrity sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA== + dependencies: + expect "^30.0.0" + pretty-format "^30.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/jsonld@1.5.15": + version "1.5.15" + resolved "https://registry.yarnpkg.com/@types/jsonld/-/jsonld-1.5.15.tgz#55dde3077c23986e5f2a3b62356d667bfb03fc71" + integrity sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/luxon@~3.7.0": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.7.1.tgz#ef51b960ff86801e4e2de80c68813a96e529d531" + integrity sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/n3@^1.4.4": + version "1.26.0" + resolved "https://registry.yarnpkg.com/@types/n3/-/n3-1.26.0.tgz#7ba7792b7fe534ecc44863e6adbc60d926ea09ff" + integrity sha512-ugCaNuBvnSVBE0mEbHQ+2g5dC05EujW/XLhHDvI6a0q6cajJrQosy4CWF+B/O1kxH8lYDR60lBTC0duXXsE+VA== + dependencies: + "@rdfjs/types" "*" + "@types/node" "*" + +"@types/node-fetch@^2.6.13": + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== + dependencies: + "@types/node" "*" + form-data "^4.0.4" + +"@types/node@*", "@types/node@^24.5.2": + version "24.5.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.2.tgz#52ceb83f50fe0fcfdfbd2a9fab6db2e9e7ef6446" + integrity sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ== + dependencies: + undici-types "~7.12.0" + +"@types/node@^13.1.0": + version "13.13.52" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" + integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== + +"@types/node@^18.0.0": + version "18.19.127" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.127.tgz#7c2e47fa79ad7486134700514d4a975c4607f09d" + integrity sha512-gSjxjrnKXML/yo0BO099uPixMqfpJU0TKYjpfLU7TrtA2WWDki412Np/RSTPRil1saKBhvVVKzVx/p/6p94nVA== + dependencies: + undici-types "~5.26.4" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/parse-link-header@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.1.tgz#6eade790736a050b9242c7c6b2fceda9b3dc394a" + integrity sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg== + +"@types/readable-stream@^2.3.11": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.1.tgz#3ce3af1a5524ef327d2da9e4fd8b6d95c8d70528" + integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA== + +"@types/sparqljs@^3.1.2": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@types/sparqljs/-/sparqljs-3.1.12.tgz#29a030615a3aed6eb05fbd618ecf58ab345506f8" + integrity sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ== + dependencies: + "@rdfjs/types" ">=1.0.0" + +"@types/stack-utils@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/streamify-string@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/streamify-string/-/streamify-string-1.0.4.tgz#93254a61c44e2760b450ccec520ef9c4de5247f2" + integrity sha512-lFME26GYMkG5C9ydkqaIZ9Jnylk0yhEO2MYpKCf1CifCq32alaXfhi3HcquydYnOGM/VTb9S++JRFZ44rBvRZQ== + dependencies: + "@types/node" "*" + +"@types/url-join@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.3.tgz#09ede6753b846a274301b9bd3a6ed117050daecd" + integrity sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.33": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^7.1.1": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^7.5.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0", "@ungap/structured-clone@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@unrs/resolver-binding-android-arm-eabi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz#9f5b04503088e6a354295e8ea8fe3cb99e43af81" + integrity sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw== + +"@unrs/resolver-binding-android-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz#7414885431bd7178b989aedc4d25cccb3865bc9f" + integrity sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g== + +"@unrs/resolver-binding-darwin-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz#b4a8556f42171fb9c9f7bac8235045e82aa0cbdf" + integrity sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g== + +"@unrs/resolver-binding-darwin-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz#fd4d81257b13f4d1a083890a6a17c00de571f0dc" + integrity sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ== + +"@unrs/resolver-binding-freebsd-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz#d2513084d0f37c407757e22f32bd924a78cfd99b" + integrity sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz#844d2605d057488d77fab09705f2866b86164e0a" + integrity sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz#204892995cefb6bd1d017d52d097193bc61ddad3" + integrity sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw== + +"@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz#023eb0c3aac46066a10be7a3f362e7b34f3bdf9d" + integrity sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ== + +"@unrs/resolver-binding-linux-arm64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz#9e6f9abb06424e3140a60ac996139786f5d99be0" + integrity sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz#b111417f17c9d1b02efbec8e08398f0c5527bb44" + integrity sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz#92ffbf02748af3e99873945c9a8a5ead01d508a9" + integrity sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ== + +"@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz#0bec6f1258fc390e6b305e9ff44256cb207de165" + integrity sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew== + +"@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz#577843a084c5952f5906770633ccfb89dac9bc94" + integrity sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg== + +"@unrs/resolver-binding-linux-x64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz#36fb318eebdd690f6da32ac5e0499a76fa881935" + integrity sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w== + +"@unrs/resolver-binding-linux-x64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz#bfb9af75f783f98f6a22c4244214efe4df1853d6" + integrity sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA== + +"@unrs/resolver-binding-wasm32-wasi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz#752c359dd875684b27429500d88226d7cc72f71d" + integrity sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz#ce5735e600e4c2fbb409cd051b3b7da4a399af35" + integrity sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw== + +"@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz#72fc57bc7c64ec5c3de0d64ee0d1810317bc60a6" + integrity sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ== + +"@unrs/resolver-binding-win32-x64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz#538b1e103bf8d9864e7b85cc96fa8d6fb6c40777" + integrity sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@yarnpkg/parsers@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.2.tgz#48a1517a0f49124827f4c37c284a689c607b2f32" + integrity sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +"@zkochan/js-yaml@0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz#4b0cb785220d7c28ce0ec4d0804deb5d821eae89" + integrity sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.3.3, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.15.0, acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + +aggregate-error@^3.0.0, aggregate-error@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0, ansi-styles@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + +anymatch@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +"aproba@^1.0.3 || ^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" + integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== + +are-docs-informative@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +args@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" + integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== + dependencies: + camelcase "5.0.0" + chalk "2.4.2" + leven "2.1.0" + mri "1.1.4" + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.reduce@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz#42f97f5078daedca687d4463fd3c05cbfd83da57" + integrity sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + is-string "^1.1.1" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1@^0.2.6, asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-never@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.4.0.tgz#b0d4988628c87f35eb94716cc54422a63927e175" + integrity sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA== + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +async@^3.1.0, async@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +asynciterator@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-3.9.0.tgz#6e9a69623c4cec07e4cd85130416d52899f4e93f" + integrity sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +axios@^1.5.1, axios@^1.8.3: + version "1.12.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" + integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" + +babel-jest@30.1.2, babel-jest@^30.0.5: + version "30.1.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.1.2.tgz#decd53b3a0cafca49443f93fb7a2c0fba55510da" + integrity sha512-IQCus1rt9kaSh7PQxLYRY5NmkNrNlU2TpabzwV7T2jljnpdHOcmnYYv8QmE04Li4S3a2Lj8/yXyET5pBarPr6g== + dependencies: + "@jest/transform" "30.1.2" + "@types/babel__core" "^7.20.5" + babel-plugin-istanbul "^7.0.0" + babel-preset-jest "30.0.1" + chalk "^4.1.2" + graceful-fs "^4.2.11" + slash "^3.0.0" + +babel-plugin-istanbul@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz#d8b518c8ea199364cf84ccc82de89740236daf92" + integrity sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-instrument "^6.0.2" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz#f271b2066d2c1fb26a863adb8e13f85b06247125" + integrity sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.3" + "@types/babel__core" "^7.20.5" + +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== + dependencies: + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" + +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + +babel-plugin-transform-import-meta@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-import-meta/-/babel-plugin-transform-import-meta-2.3.3.tgz#863de841f7df37e2bf39a057572a24e4f65f3c51" + integrity sha512-bbh30qz1m6ZU1ybJoNOhA2zaDvmeXMnGNBMVMDOJ1Fni4+wMBoy/j7MTRVmqAUCIcy54/rEnr9VEBsfcgbpm3Q== + dependencies: + "@babel/template" "^7.25.9" + tslib "^2.8.1" + +babel-plugin-transform-vite-meta-env@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vite-meta-env/-/babel-plugin-transform-vite-meta-env-1.0.3.tgz#cbf81becc95b71dcc170ee4863cb7f6919ed99bb" + integrity sha512-eyfuDEXrMu667TQpmctHeTlJrZA6jXYHyEJFjcM0yEa60LS/LXlOg2PBbMb8DVS+V9CnTj/j9itdlDVMcY2zEg== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + +babel-plugin-transform-vite-meta-glob@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vite-meta-glob/-/babel-plugin-transform-vite-meta-glob-1.1.2.tgz#6bccd7b695f445d8c73a5dd47fa50c85ba5395f3" + integrity sha512-o984FUo++WYnfgUaC8ymzmNPng5Kda5A6j6PFC0uOqhFXlAsD6mNhEBhaNzbUGfq/aPcyeGo67fYXlg20rh9aA== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + glob "^10.3.10" + +babel-plugin-transform-vite-meta-hot@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vite-meta-hot/-/babel-plugin-transform-vite-meta-hot-1.0.0.tgz#d806de0b1f9826eb3fe0c4e82996973d818895df" + integrity sha512-qF7T46bDG5UPPOfy4MFgQJyd3mZvm1sGOR2gZ4lIHy6DEcxAVTIt39/adAn89il44CvwestshuEybKPMR+L/Tg== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + +babel-preset-current-node-syntax@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz#7d28db9531bce264e846c8483d54236244b8ae88" + integrity sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw== + dependencies: + babel-plugin-jest-hoist "30.0.1" + babel-preset-current-node-syntax "^1.1.0" + +babel-preset-vite@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-vite/-/babel-preset-vite-1.1.3.tgz#9cbc685fe04d52cd3956d095e664ed1e1262364f" + integrity sha512-xSt/EiezzeMd4RI2hjMCNyn/FGzGeroKODPMAUTsgpeHC4dFf2qiCQfyNuiNzn1OwoF4n+NYSsORhUN5G/2KTA== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + babel-plugin-transform-vite-meta-env "1.0.3" + babel-plugin-transform-vite-meta-glob "1.1.2" + babel-plugin-transform-vite-meta-hot "1.0.0" + +babel-walk@3.0.0-canary-5: + version "3.0.0-canary-5" + resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" + integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== + dependencies: + "@babel/types" "^7.9.6" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== + dependencies: + safe-buffer "^5.0.1" + +base58-universal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base58-universal/-/base58-universal-2.0.0.tgz#243c8256591afa7d5210f87ad1655e05081f4be4" + integrity sha512-BgkgF8zVLOAygszG4W8NkLm7iXrw80VYAOcedrzANrIhS14+4W6zVqjyGTFUBM/FpqkHUt8aAYd4DbBBfn3zKg== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64url-universal@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-1.1.0.tgz#94da6356c1d43ead55b1d91c045c0a5b09ec8181" + integrity sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA== + dependencies: + base64url "^3.0.0" + +base64url-universal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-2.0.0.tgz#6023785c0e349a90de1cf396e8a4519750a4e67b" + integrity sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw== + dependencies: + base64url "^3.0.1" + +base64url@^3.0.0, base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +baseline-browser-mapping@^2.8.3: + version "2.8.6" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz#c37dea4291ed8d01682f85661dbe87967028642e" + integrity sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw== + +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bcrypt@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.1.tgz#0f732c6dcb4e12e5b70a25e326a72965879ba6e2" + integrity sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.11" + node-addon-api "^5.0.0" + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bin-links@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" + integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== + dependencies: + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.0.0, bluebird@^3.1.1, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@^1.19.0: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.24.0, browserslist@^4.25.3: + version "4.26.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.2.tgz#7db3b3577ec97f1140a52db4936654911078cef3" + integrity sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A== + dependencies: + baseline-browser-mapping "^2.8.3" + caniuse-lite "^1.0.30001741" + electron-to-chromium "^1.5.218" + node-releases "^2.0.21" + update-browserslist-db "^1.1.3" + +bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-equal-constant-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buildcheck@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== + +bull@^3.15.0: + version "3.29.3" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" + integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== + dependencies: + cron-parser "^2.13.0" + debuglog "^1.0.0" + get-port "^5.1.1" + ioredis "^4.27.0" + lodash "^4.17.21" + p-timeout "^3.2.0" + promise.prototype.finally "^3.1.2" + semver "^7.3.2" + util.promisify "^1.0.1" + uuid "^8.3.0" + +busboy@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" + integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== + dependencies: + dicer "0.3.0" + +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== + +bytes@3.1.2, bytes@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^18.0.0, cacache@^18.0.3: + version "18.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.0, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0, callsites@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001741: + version "1.0.30001743" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz#50ff91a991220a1ee2df5af00650dd5c308ea7cd" + integrity sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw== + +canonicalize@^1.0.1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" + integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== + +"cas@https://github.com/joshchan/node-cas": + version "0.0.5" + resolved "https://github.com/joshchan/node-cas#344a8bfba9d054e2e378adaf95b720c898ae48a2" + dependencies: + cheerio "0.19.0" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +chalk@2.4.2, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== + dependencies: + is-regex "^1.0.3" + +chardet@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.0.tgz#1007f441a1ae9f9199a4a67f6e978fb0aa9aa3fe" + integrity sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA== + +cheerio@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925" + integrity sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ== + dependencies: + css-select "~1.0.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "~3.8.1" + lodash "^3.2.0" + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA== + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +ci-info@^4.0.0, ci-info@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.0.tgz#c39b1013f8fdbd28cd78e62318357d02da160cd7" + integrity sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ== + +cjs-module-lexer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz#586e87d4341cb2661850ece5190232ccdebcff8b" + integrity sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + +cmd-shim@6.0.3, cmd-shim@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" + integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@1.1.3, color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +columnify@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.15.1, commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +comment-parser@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +consolidate@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" + integrity sha512-PZFskfj64QnpKVK9cPdY36pyWEhZNM+srRVqtwMiVTlnViSoZcvX35PpBhhUcyLTHXYvz7pZRmxvsqwzJqg9kA== + dependencies: + bluebird "^3.1.1" + +constantinople@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" + integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== + dependencies: + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.1" + +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +conventional-changelog-angular@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== + +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" + +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== + +cookie@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +cookiejar@^2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + +core-js-compat@^3.43.0: + version "3.45.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.45.1.tgz#424f3f4af30bf676fd1b67a579465104f64e9c7a" + integrity sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA== + dependencies: + browserslist "^4.25.3" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + +cpu-features@~0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== + dependencies: + buildcheck "~0.0.6" + nan "^2.19.0" + +credentials-context@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/credentials-context/-/credentials-context-1.0.0.tgz#a63cb4b7e0a4ca4460d247b7c9370a58b10ebac9" + integrity sha512-rF3GPhTUGY58xlpuVRif/1i0BxVpynpmFdGNS81S2ezdKPSKoFke5ZOZWB8ZUvGi8bV8CuDM+ZcM/uf4z0PQVQ== + +cron-parser@^2.13.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" + integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== + dependencies: + is-nan "^1.3.0" + moment-timezone "^0.5.31" + +cron-parser@^4.2.0, cron-parser@^4.2.1, cron-parser@^4.3.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" + integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== + dependencies: + luxon "^3.2.1" + +cron@^1.8.2: + version "1.8.3" + resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.3.tgz#2a61d7b15848716885834ec56ac072f4b9744ebd" + integrity sha512-JYR/QZFklJCIPndBLfd/2nU1nSlCMrUdtQ2mGLXSVM/qqqEK7DOrFR0gsEiyeqs0PdWrs0ve1ggH4V7XksDwXg== + dependencies: + luxon "^1.23.x" + +cron@^4.1.4: + version "4.3.3" + resolved "https://registry.yarnpkg.com/cron/-/cron-4.3.3.tgz#d37cfcbc73ba34a50d9d9ce9b653ae60837377d7" + integrity sha512-B/CJj5yL3sjtlun6RtYHvoSB26EmQ2NUmhq9ZiJSyKIM4K/fqfh9aelDFlIayD2YMeFZqWLi9hHV+c+pq2Djkw== + dependencies: + "@types/luxon" "~3.7.0" + luxon "~3.7.0" + +cross-fetch@^3.0.5, cross-fetch@^3.0.6: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + dependencies: + node-fetch "^2.7.0" + +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-ld@^3.7.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-3.9.0.tgz#4f42849a143b5d65f28b018d80bc0fee6cd37ba8" + integrity sha512-PFE7V6A2QNnUp6iiPVEZI4p8wsztkEWLbY1BAXVnclm/aw4KGwpJ+1Ds4vQUCJ5BsWxj15fwE5rHQ8AWaWB2nw== + dependencies: + base64url-universal "^1.0.1" + bs58 "^4.0.1" + node-forge "~0.10.0" + semver "^6.2.0" + optionalDependencies: + sodium-native "^3.2.0" + +crypto-ld@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-7.0.0.tgz#ad593cce31da84e60bd14fd2b25221f97e8a3b74" + integrity sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw== + +css-select@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0" + integrity sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw== + dependencies: + boolbase "~1.0.0" + css-what "1.0" + domutils "1.4" + nth-check "~1.0.0" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA== + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c" + integrity sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw== + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +dashify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dashify/-/dashify-2.0.0.tgz#fff270ca2868ca427fee571de35691d6e437a648" + integrity sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A== + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +datauri@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/datauri/-/datauri-2.0.0.tgz#ff0ee23729935a6bcc81f301621bed3e692bf3c7" + integrity sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g== + dependencies: + image-size "^0.7.3" + mimer "^1.0.0" + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +dedent@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.0.tgz#c1f9445335f0175a96587be245a282ff451446ca" + integrity sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ== + +deep-extend@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" + integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2, deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^1.1.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.0.tgz#3ca811f60a7b504b0480e5008adacc660b0b8c4f" + integrity sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg== + +detect-newline@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +dicer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== + dependencies: + streamsearch "0.1.2" + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + integrity sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ== + dependencies: + domelementtype "1" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domhandler@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@1.4: + version "1.4.3" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f" + integrity sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w== + dependencies: + domelementtype "1" + +domutils@1.5, domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + +dotenv-expand@~11.0.6: + version "11.0.7" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" + integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== + dependencies: + dotenv "^16.4.5" + +dotenv-flow@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dotenv-flow/-/dotenv-flow-3.3.0.tgz#e22341c035d5672b923bf76feb35999f728ee456" + integrity sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A== + dependencies: + dotenv "^8.6.0" + +dotenv@^16.4.5: + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== + +dotenv@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +dotenv@~16.3.1: + version "16.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" + integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== + +dotenv@~16.4.5: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ed25519-signature-2018-context@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz#68002ea7497c32e8170667cfd67468dedf7d220e" + integrity sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA== + +ed25519-signature-2020-context@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz#b2f724f07db154ddf0fd6605410d88736e56fd07" + integrity sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.7: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.5.218: + version "1.5.223" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.223.tgz#cf9b1aebba1c8ee5e50d1c9e198229e15bc87b28" + integrity sha512-qKm55ic6nbEmagFlTFczML33rF90aU+WtrJ9MdTCThrcvDNdUHN4p6QfVN78U06ZmguqXIyMPyYhw2TrbDUwPQ== + +email-templates@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-2.7.1.tgz#d7e5641fec0944c9b68a6d272d28e5685b3b223c" + integrity sha512-WJ0csXaBK3gV90dwBco5d3liu/XSH1jPEn3qfLDES/AsxOoMv4IRqp/MsQduKBexJZ81577OUbrdgnzvK2Kk9Q== + dependencies: + bluebird "^3.0.0" + consolidate "^0.14.2" + debug "^2.2.0" + glob "^6.0.0" + juice "^4.1.0" + lodash "^4.0.1" + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + integrity sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ== + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0, env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.3, es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.0.0, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.5.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb@^19.0.4: + version "19.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== + dependencies: + eslint-config-airbnb-base "^15.0.0" + object.assign "^4.1.2" + object.entries "^1.1.5" + +eslint-config-prettier@^9.1.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91" + integrity sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.6.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz#23dac32efa86a88e2b8232eb244ac499ad636db2" + integrity sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^2.0.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.13" + unrs-resolver "^1.6.2" + +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.29.1: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" + semver "^6.3.1" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" + +eslint-plugin-jest@^27.9.0: + version "27.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" + integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsdoc@^48.2.1: + version "48.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz#7c8dae6ce0d814aff54b87fdb808f02635691ade" + integrity sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA== + dependencies: + "@es-joy/jsdoccomment" "~0.46.0" + are-docs-informative "^0.0.2" + comment-parser "1.4.1" + debug "^4.3.5" + escape-string-regexp "^4.0.0" + espree "^10.1.0" + esquery "^1.6.0" + parse-imports "^2.1.1" + semver "^7.6.3" + spdx-expression-parse "^4.0.0" + synckit "^0.9.1" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-prettier@^5.1.3: + version "5.5.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c" + integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.11.7" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^8.2.0: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^10.1.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2, esquery@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@^1.8.1, etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter2@^6.4.9: + version "6.4.9" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" + integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit-x@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exit-x/-/exit-x-0.2.2.tgz#1f9052de3b8d99a696b10dad5bced9bdd5c3aa64" + integrity sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +expect-type@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.2.tgz#c030a329fb61184126c8447585bc75a7ec6fbff3" + integrity sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA== + +expect@30.1.2, expect@^30.0.0: + version "30.1.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-30.1.2.tgz#094909c2443f76b9e208fafac4a315aaaf924580" + integrity sha512-xvHszRavo28ejws8FpemjhwswGj4w/BetHIL8cU49u4sGyXDw2+p3YbeDbj6xzlxi6kWTjIRSTJ+9sNXPnF0Zg== + dependencies: + "@jest/expect-utils" "30.1.2" + "@jest/get-type" "30.1.0" + jest-matcher-utils "30.1.2" + jest-message-util "30.1.0" + jest-mock "30.0.5" + jest-util "30.0.5" + +expo-server-sdk@^3.4.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/expo-server-sdk/-/expo-server-sdk-3.15.0.tgz#372afc98a3881f60c83063e71e889005ec50ddb5" + integrity sha512-Y71mQ7yeDhq6miHzn4kwRQOjqvBBsWeFXvyS9PYc6uqO/+UiYvrw3vMQiQqRxg2y0qgn9jMsvjf8T+mukSH85A== + dependencies: + node-fetch "^2.6.0" + promise-limit "^2.7.0" + promise-retry "^2.0.1" + +exponential-backoff@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91" + integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== + +express-session@^1.17.0: + version "1.18.2" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.18.2.tgz#34db6252611b57055e877036eea09b4453dec5d8" + integrity sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A== + dependencies: + cookie "0.7.2" + cookie-signature "1.0.7" + debug "2.6.9" + depd "~2.0.0" + on-headers "~1.1.0" + parseurl "~1.3.3" + safe-buffer "5.2.1" + uid-safe "~2.1.5" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastest-validator@^1.19.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastest-validator/-/fastest-validator-1.19.1.tgz#f2c54bddb985c05317206c6d233df3060a0db015" + integrity sha512-eXiPCYOsuS5OWI+OVH9whu4LDGqO4cE7jUnZyQ8jV3rXfmC0OghQACOtYjTDxsVnblzvXIHGuizjFg0csiLE6g== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fdir@^6.4.3, fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.15.6, follow-redirects@^1.5.1: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^2.3.1: + version "2.5.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.5.tgz#a5f6364ad7e4e67e95b4a07e2d8c6f711c74f624" + integrity sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.35" + safe-buffer "^5.2.1" + +form-data@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +formidable@^1.2.0: + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + +fresh@0.5.2, fresh@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +front-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-4.0.2.tgz#b14e54dc745cfd7293484f3210d15ea4edd7f4d5" + integrity sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== + dependencies: + js-yaml "^3.13.1" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.1.0, fs-extra@^11.2.0: + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@5.1.1, get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-tsconfig@^4.10.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== + dependencies: + resolve-pkg-maps "^1.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== + dependencies: + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== + dependencies: + meow "^8.1.2" + semver "^7.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-14.0.0.tgz#18ce834726d5fbca0c25a4555101aa277017418f" + integrity sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@6.0.2, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^10.2.2, glob@^10.3.10: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +google-libphonenumber@^3.2.26: + version "3.2.43" + resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.43.tgz#c1e5107ab9c6e3848dc2108e380bde08da80931c" + integrity sha512-TbIX/UC3BFRJwCxbBeCPwuRC4Qws9Jz/CECmfTM1t9RFoI3X6eRThurv6AYr9wSrt640IA9KFIHuAD/vlyjqRw== + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^11.8.0: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@2.0.1, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== + dependencies: + lru-cache "^10.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-to-text@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-2.1.3.tgz#e50dbe4e4079912dbedcde05d278388edb8eea91" + integrity sha512-mafVvNjY6lrVrdT73ssJT4fWCtiLR8QVZDPurHbO/yT0KK7mVCpEGi+0g6jzwj4G41o4++9A48cZOSQBwvWd8Q== + dependencies: + he "^1.0.0" + htmlparser "^1.7.7" + optimist "^0.6.1" + underscore "^1.8.3" + underscore.string "^3.2.3" + +htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +htmlparser2@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + +htmlparser2@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" + integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + +htmlparser2@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +htmlparser2@~3.8.1: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + integrity sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q== + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + +htmlparser@^1.7.7: + version "1.7.7" + resolved "https://registry.yarnpkg.com/htmlparser/-/htmlparser-1.7.7.tgz#19e7b3997ff6fbac99ae5a7d2766489efe7e2d0e" + integrity sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ== + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-link-header@^1.0.2, http-link-header@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.1.3.tgz#b367b7a0ad1cf14027953f31aa1df40bb433da2a" + integrity sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ== + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-signature-header@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-signature-header/-/http-signature-header-1.3.1.tgz#0a2327651e444ab687d05ae437ef9f3f55983cf3" + integrity sha512-UpKpxfRlCWRK41j+MfRHHvjDWMLX67gY7pUNGQbXi13fsTZcvUHrgbhbiJtHDvGGxe5nQVYlTW7fKypMSmgXKQ== + dependencies: + assert-plus "^1.0.0" + +http-signature@^1.3.4: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.18.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.0.tgz#c50cd80e6746ca8115eb98743afa81aa0e147a3e" + integrity sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" + integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== + dependencies: + minimatch "^9.0.0" + +ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +image-size@^0.7.3: + version "0.7.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" + integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +immutable@^3.8.2: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +import-local@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.8, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" + integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== + +init-package-json@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.3.tgz#2552fba75b6eed2495dc97f44183e2e5a5bcf8b0" + integrity sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w== + dependencies: + "@npmcli/package-json" "^5.0.0" + npm-package-arg "^11.0.0" + promzard "^1.0.0" + read "^3.0.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + +inquirer@^8.2.4: + version "8.2.7" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.7.tgz#62f6b931a9b7f8735dc42db927316d8fb6f71de8" + integrity sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA== + dependencies: + "@inquirer/external-editor" "^1.0.0" + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +ioredis@^4.27.0: + version "4.30.1" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.30.1.tgz#664e4f3dcbe12d6169bbb2a1fe92adb5de6cefa5" + integrity sha512-17Ed70njJ7wT7JZsdTVLb0j/cmwHwfQCFu+AP6jY7nFKd+CA7MBW7nX121mM64eT8S9ekAVtYYt8nGQPmm3euA== + dependencies: + "@ioredis/commands" "^1.0.2" + cluster-key-slot "^1.1.0" + debug "^4.3.1" + denque "^1.1.0" + lodash.defaults "^4.2.0" + lodash.flatten "^4.4.0" + lodash.isarguments "^3.1.0" + p-map "^2.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ip-address@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.0.1.tgz#a8180b783ce7788777d796286d61bce4276818ed" + integrity sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA== + +ipaddr.js@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.4" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.4.tgz#1ee5553818511915685d33bb13d31bf854e5059d" + integrity sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-bun-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== + dependencies: + semver "^7.7.1" + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1, is-core-module@^2.5.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-expression@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" + integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== + dependencies: + acorn "^7.1.1" + object-assign "^4.1.1" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.10, is-generator-function@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-nan@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-promise@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-regex@^1.0.3, is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-ssh@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.1.tgz#76de1cdbe8f92a8b905d1a172b6bc09704c20396" + integrity sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg== + dependencies: + protocols "^2.0.1" + +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@^0.1.2, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" + integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== + dependencies: + "@jridgewell/trace-mapping" "^0.3.23" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + +istanbul-reports@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.9.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.4.tgz#d626da108c63d5cfb00ab5c25fadc7e0084af8e6" + integrity sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA== + dependencies: + async "^3.2.6" + filelist "^1.0.4" + picocolors "^1.1.1" + +jest-changed-files@30.0.5: + version "30.0.5" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-30.0.5.tgz#ec448f83bd9caa894dd7da8707f207c356a19924" + integrity sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A== + dependencies: + execa "^5.1.1" + jest-util "30.0.5" + p-limit "^3.1.0" + +jest-circus@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-30.1.3.tgz#7ee0089f22b2b3e72ab04aee8e037c364a6d73d1" + integrity sha512-Yf3dnhRON2GJT4RYzM89t/EXIWNxKTpWTL9BfF3+geFetWP4XSvJjiU1vrWplOiUkmq8cHLiwuhz+XuUp9DscA== + dependencies: + "@jest/environment" "30.1.2" + "@jest/expect" "30.1.2" + "@jest/test-result" "30.1.3" + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + co "^4.6.0" + dedent "^1.6.0" + is-generator-fn "^2.1.0" + jest-each "30.1.0" + jest-matcher-utils "30.1.2" + jest-message-util "30.1.0" + jest-runtime "30.1.3" + jest-snapshot "30.1.2" + jest-util "30.0.5" + p-limit "^3.1.0" + pretty-format "30.0.5" + pure-rand "^7.0.0" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-cli@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-30.1.3.tgz#3fb8dea88886379eb95a08f954bfc2ed17a9be4f" + integrity sha512-G8E2Ol3OKch1DEeIBl41NP7OiC6LBhfg25Btv+idcusmoUSpqUkbrneMqbW9lVpI/rCKb/uETidb7DNteheuAQ== + dependencies: + "@jest/core" "30.1.3" + "@jest/test-result" "30.1.3" + "@jest/types" "30.0.5" + chalk "^4.1.2" + exit-x "^0.2.2" + import-local "^3.2.0" + jest-config "30.1.3" + jest-util "30.0.5" + jest-validate "30.1.0" + yargs "^17.7.2" + +jest-config@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-30.1.3.tgz#10bcf4cd979119bfac6a130fb79d837057ce33d4" + integrity sha512-M/f7gqdQEPgZNA181Myz+GXCe8jXcJsGjCMXUzRj22FIXsZOyHNte84e0exntOvdPaeh9tA0w+B8qlP2fAezfw== + dependencies: + "@babel/core" "^7.27.4" + "@jest/get-type" "30.1.0" + "@jest/pattern" "30.0.1" + "@jest/test-sequencer" "30.1.3" + "@jest/types" "30.0.5" + babel-jest "30.1.2" + chalk "^4.1.2" + ci-info "^4.2.0" + deepmerge "^4.3.1" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-circus "30.1.3" + jest-docblock "30.0.1" + jest-environment-node "30.1.2" + jest-regex-util "30.0.1" + jest-resolve "30.1.3" + jest-runner "30.1.3" + jest-util "30.0.5" + jest-validate "30.1.0" + micromatch "^4.0.8" + parse-json "^5.2.0" + pretty-format "30.0.5" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@30.1.2: + version "30.1.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.1.2.tgz#8ff4217e5b63fef49a5b37462999d8f5299a4eb4" + integrity sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ== + dependencies: + "@jest/diff-sequences" "30.0.1" + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + pretty-format "30.0.5" + +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-30.0.1.tgz#545ff59f2fa88996bd470dba7d3798a8421180b1" + integrity sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA== + dependencies: + detect-newline "^3.1.0" + +jest-each@30.1.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-30.1.0.tgz#228756d5ea9e4dcb462fc2e90a44ec27dd482d23" + integrity sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ== + dependencies: + "@jest/get-type" "30.1.0" + "@jest/types" "30.0.5" + chalk "^4.1.2" + jest-util "30.0.5" + pretty-format "30.0.5" + +jest-environment-node@30.1.2: + version "30.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-30.1.2.tgz#ae2f20442f8abc3c6b20120dc789fa38faff568f" + integrity sha512-w8qBiXtqGWJ9xpJIA98M0EIoq079GOQRQUyse5qg1plShUCQ0Ek1VTTcczqKrn3f24TFAgFtT+4q3aOXvjbsuA== + dependencies: + "@jest/environment" "30.1.2" + "@jest/fake-timers" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + jest-mock "30.0.5" + jest-util "30.0.5" + jest-validate "30.1.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@30.1.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-30.1.0.tgz#e54d84e07fac15ea3a98903b735048e36d7d2ed3" + integrity sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg== + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + anymatch "^3.1.3" + fb-watchman "^2.0.2" + graceful-fs "^4.2.11" + jest-regex-util "30.0.1" + jest-util "30.0.5" + jest-worker "30.1.0" + micromatch "^4.0.8" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.3" + +jest-leak-detector@30.1.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-30.1.0.tgz#8b86e7c5f1e3e4f2a32d930ec769103ad0985874" + integrity sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g== + dependencies: + "@jest/get-type" "30.1.0" + pretty-format "30.0.5" + +jest-matcher-utils@30.1.2: + version "30.1.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz#3f1b63949f740025aff740c6c6a1b653ae370fbb" + integrity sha512-7ai16hy4rSbDjvPTuUhuV8nyPBd6EX34HkBsBcBX2lENCuAQ0qKCPb/+lt8OSWUa9WWmGYLy41PrEzkwRwoGZQ== + dependencies: + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + jest-diff "30.1.2" + pretty-format "30.0.5" + +jest-message-util@30.1.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.1.0.tgz#653a9bb1a33306eddf13455ce0666ba621b767c4" + integrity sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@jest/types" "30.0.5" + "@types/stack-utils" "^2.0.3" + chalk "^4.1.2" + graceful-fs "^4.2.11" + micromatch "^4.0.8" + pretty-format "30.0.5" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-mock@30.0.5: + version "30.0.5" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.0.5.tgz#ef437e89212560dd395198115550085038570bdd" + integrity sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ== + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + jest-util "30.0.5" + +jest-pnp-resolver@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b" + integrity sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA== + +jest-resolve-dependencies@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.3.tgz#04bbe95c9f4af51046dde940698d7121b49d0167" + integrity sha512-DNfq3WGmuRyHRHfEet+Zm3QOmVFtIarUOQHHryKPc0YL9ROfgWZxl4+aZq/VAzok2SS3gZdniP+dO4zgo59hBg== + dependencies: + jest-regex-util "30.0.1" + jest-snapshot "30.1.2" + +jest-resolve@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-30.1.3.tgz#cc1019b28374ca7bcf7e58d57a4300449f390ec5" + integrity sha512-DI4PtTqzw9GwELFS41sdMK32Ajp3XZQ8iygeDMWkxlRhm7uUTOFSZFVZABFuxr0jvspn8MAYy54NxZCsuCTSOw== + dependencies: + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + jest-pnp-resolver "^1.2.3" + jest-util "30.0.5" + jest-validate "30.1.0" + slash "^3.0.0" + unrs-resolver "^1.7.11" + +jest-runner@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-30.1.3.tgz#3253a0faab8f404aa9e0010911e8acbaf220865b" + integrity sha512-dd1ORcxQraW44Uz029TtXj85W11yvLpDuIzNOlofrC8GN+SgDlgY4BvyxJiVeuabA1t6idjNbX59jLd2oplOGQ== + dependencies: + "@jest/console" "30.1.2" + "@jest/environment" "30.1.2" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + emittery "^0.13.1" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-docblock "30.0.1" + jest-environment-node "30.1.2" + jest-haste-map "30.1.0" + jest-leak-detector "30.1.0" + jest-message-util "30.1.0" + jest-resolve "30.1.3" + jest-runtime "30.1.3" + jest-util "30.0.5" + jest-watcher "30.1.3" + jest-worker "30.1.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-30.1.3.tgz#bca7cb48d53c5b5ae21399e7a65e21271f500004" + integrity sha512-WS8xgjuNSphdIGnleQcJ3AKE4tBKOVP+tKhCD0u+Tb2sBmsU8DxfbBpZX7//+XOz81zVs4eFpJQwBNji2Y07DA== + dependencies: + "@jest/environment" "30.1.2" + "@jest/fake-timers" "30.1.2" + "@jest/globals" "30.1.2" + "@jest/source-map" "30.0.1" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + cjs-module-lexer "^2.1.0" + collect-v8-coverage "^1.0.2" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + jest-message-util "30.1.0" + jest-mock "30.0.5" + jest-regex-util "30.0.1" + jest-resolve "30.1.3" + jest-snapshot "30.1.2" + jest-util "30.0.5" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@30.1.2: + version "30.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-30.1.2.tgz#4001a94d8394bb077a1c96246f0107c81aba4f12" + integrity sha512-4q4+6+1c8B6Cy5pGgFvjDy/Pa6VYRiGu0yQafKkJ9u6wQx4G5PqI2QR6nxTl43yy7IWsINwz6oT4o6tD12a8Dg== + dependencies: + "@babel/core" "^7.27.4" + "@babel/generator" "^7.27.5" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/types" "^7.27.3" + "@jest/expect-utils" "30.1.2" + "@jest/get-type" "30.1.0" + "@jest/snapshot-utils" "30.1.2" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + babel-preset-current-node-syntax "^1.1.0" + chalk "^4.1.2" + expect "30.1.2" + graceful-fs "^4.2.11" + jest-diff "30.1.2" + jest-matcher-utils "30.1.2" + jest-message-util "30.1.0" + jest-util "30.0.5" + pretty-format "30.0.5" + semver "^7.7.2" + synckit "^0.11.8" + +jest-util@30.0.5: + version "30.0.5" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.0.5.tgz#035d380c660ad5f1748dff71c4105338e05f8669" + integrity sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g== + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + ci-info "^4.2.0" + graceful-fs "^4.2.11" + picomatch "^4.0.2" + +jest-validate@30.1.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-30.1.0.tgz#585aae6c9ee1ac138dbacbece8a7838ca7773e60" + integrity sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA== + dependencies: + "@jest/get-type" "30.1.0" + "@jest/types" "30.0.5" + camelcase "^6.3.0" + chalk "^4.1.2" + leven "^3.1.0" + pretty-format "30.0.5" + +jest-watcher@30.1.3: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-30.1.3.tgz#2f381da5c2c76a46c46ba2108e6607c585421dc0" + integrity sha512-6jQUZCP1BTL2gvG9E4YF06Ytq4yMb4If6YoQGRR6PpjtqOXSP3sKe2kqwB6SQ+H9DezOfZaSLnmka1NtGm3fCQ== + dependencies: + "@jest/test-result" "30.1.3" + "@jest/types" "30.0.5" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + emittery "^0.13.1" + jest-util "30.0.5" + string-length "^4.0.2" + +jest-worker@30.1.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.1.0.tgz#a89c36772be449d4bdb60697fb695a1673b12ac2" + integrity sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA== + dependencies: + "@types/node" "*" + "@ungap/structured-clone" "^1.3.0" + jest-util "30.0.5" + merge-stream "^2.0.0" + supports-color "^8.1.1" + +jest@^30.0.5: + version "30.1.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-30.1.3.tgz#c962290f65c32d44a0624f785b2d780835525a23" + integrity sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ== + dependencies: + "@jest/core" "30.1.3" + "@jest/types" "30.0.5" + import-local "^3.2.0" + jest-cli "30.1.3" + +jose@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.7.tgz#3aabbaec70bff313c108b9406498a163737b16ba" + integrity sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg== + dependencies: + "@panva/asn1.js" "^1.0.0" + +jose@^5.2.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/jose/-/jose-5.10.0.tgz#c37346a099d6467c401351a9a0c2161e0f52c4be" + integrity sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg== + +js-stringify@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdoc-type-pratt-parser@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" + integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== + +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" + integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonld-context-parser@^2.0.0, jsonld-context-parser@^2.1.2, jsonld-context-parser@^2.1.3, jsonld-context-parser@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz#fae15a56c5ceabd1c4520ab1a9cc12c9a0a8b67d" + integrity sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA== + dependencies: + "@types/http-link-header" "^1.0.1" + "@types/node" "^18.0.0" + cross-fetch "^3.0.6" + http-link-header "^1.0.2" + relative-to-absolute-iri "^1.0.5" + +jsonld-signatures@^11.3.0, jsonld-signatures@^11.3.2, jsonld-signatures@^11.5.0: + version "11.5.0" + resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz#020ad488bd1977c5169de3d2a4cc28a76dec2663" + integrity sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw== + dependencies: + "@digitalbazaar/security-context" "^1.0.0" + jsonld "^8.0.0" + rdf-canonize "^4.0.1" + serialize-error "^8.1.0" + +jsonld-signatures@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-5.2.0.tgz#2f6210c3aad0a50f925991ce3e91c78856c0752d" + integrity sha512-/dGgMElXc3oBS+/OUwMc3DTK4riHKLE9Lk7NF1Upz2ZlBTNfnOw5uLRkFQOJFBDqDEm5hK6hIfkoC/rCWFh9tQ== + dependencies: + base64url "^3.0.1" + crypto-ld "^3.7.0" + jsonld "^2.0.2" + node-forge "^0.10.0" + security-context "^4.0.0" + serialize-error "^5.0.0" + +jsonld-streaming-parser@^2.4.0, jsonld-streaming-parser@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz#d8faa1df6dc3b760fb9455602edc5f001d756ef0" + integrity sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A== + dependencies: + "@rdfjs/types" "*" + "@types/http-link-header" "^1.0.1" + canonicalize "^1.0.1" + http-link-header "^1.0.2" + jsonld-context-parser "^2.1.3" + jsonparse "^1.3.1" + rdf-data-factory "^1.1.0" + +jsonld-streaming-serializer@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.3.0.tgz#e42ec6ffefc5b80cc1bd17e8eee7943242f17a4d" + integrity sha512-QGflpxpwmr659ExvAQ5TFAY9BmJQiL/yF/MDRrP5oVWHcBBLhbPjUqDv//y2OvJxUY3UQYMXulTwzmYb1ttv2Q== + dependencies: + "@rdfjs/types" "*" + jsonld-context-parser "^2.0.0" + +jsonld@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-2.0.2.tgz#f5d0631de828ce6dee3a14f08cbdc6a53174cd15" + integrity sha512-/TQzRe75/3h2khu57IUojha5oat+M82bm8RYw0jLhlmmPrW/kTWAZ9nGzKPfZWnPYnVVJJMQVc/pU8HCmpv9xg== + dependencies: + canonicalize "^1.0.1" + lru-cache "^5.1.1" + rdf-canonize "^1.0.2" + request "^2.88.0" + semver "^6.3.0" + xmldom "0.1.19" + +jsonld@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-3.3.2.tgz#f8688b349385ff5c755e83c7f60a9cf834078fc0" + integrity sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw== + dependencies: + canonicalize "^1.0.1" + lru-cache "^5.1.1" + object.fromentries "^2.0.2" + rdf-canonize "^2.0.1" + request "^2.88.0" + semver "^6.3.0" + xmldom "0.1.19" + +jsonld@^8.0.0, jsonld@^8.1.0, jsonld@^8.3.3: + version "8.3.3" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-8.3.3.tgz#08cc927833c8684e42319d4697cc8199c0908ffc" + integrity sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg== + dependencies: + "@digitalbazaar/http-client" "^3.4.1" + canonicalize "^1.0.1" + lru-cache "^6.0.0" + rdf-canonize "^3.4.0" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonwebtoken@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +juice@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/juice/-/juice-4.3.2.tgz#0a199e5f66f4f7f5cae4c079ebba81b0c2f4d1e0" + integrity sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g== + dependencies: + cheerio "^0.22.0" + commander "^2.15.1" + cross-spawn "^5.1.0" + deep-extend "^0.5.1" + mensch "^0.3.3" + slick "^1.12.2" + web-resource-inliner "^4.2.1" + +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== + +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== + +jwa@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.2.tgz#16011ac6db48de7b102777e57897901520eec7b9" + integrity sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw== + dependencies: + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^4.1.4, kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +ky-universal@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.11.0.tgz#f5edf857865aaaea416a1968222148ad7d9e4017" + integrity sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw== + dependencies: + abort-controller "^3.0.0" + node-fetch "^3.2.10" + +ky@^0.33.3: + version "0.33.3" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.33.3.tgz#bf1ad322a3f2c3428c13cfa4b3af95e6c4a2f543" + integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== + +lerna@^8.0.1: + version "8.2.4" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.2.4.tgz#cb902f7772bf159b3612d7f63631e58302cb6fa5" + integrity sha512-0gaVWDIVT7fLfprfwpYcQajb7dBJv3EGavjG7zvJ+TmGx3/wovl5GklnSwM2/WeE0Z2wrIz7ndWhBcDUHVjOcQ== + dependencies: + "@lerna/create" "8.2.4" + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + envinfo "7.13.0" + execa "5.0.0" + fs-extra "^11.2.0" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "6.0.3" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "8.0.6" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + set-blocking "^2.0.0" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^10.0.6" + string-width "^4.2.3" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" + +leven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libnpmaccess@8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.6.tgz#73be4c236258babc0a0bca6d3b6a93a6adf937cf" + integrity sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw== + dependencies: + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + +libnpmpublish@9.0.9: + version "9.0.9" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.9.tgz#e737378c09f09738377d2a276734be35cffb85e2" + integrity sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg== + dependencies: + ci-info "^4.0.0" + normalize-package-data "^6.0.1" + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + proc-log "^4.2.0" + semver "^7.3.7" + sigstore "^2.2.0" + ssri "^10.0.6" + +lie@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== + dependencies: + immediate "~3.0.5" + +lines-and-columns@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lines-and-columns@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + +load-json-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +localforage@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" + integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== + dependencies: + lie "3.1.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== + +lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + +lodash.merge@^4.4.0, lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== + +lodash.unescape@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg== + +lodash@^3.2.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ== + +lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +long-timeout@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" + integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + +lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +luxon@^1.23.x: + version "1.28.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.1.tgz#528cdf3624a54506d710290a2341aa8e6e6c61b0" + integrity sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw== + +luxon@^3.2.1, luxon@~3.7.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" + integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== + +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" + integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + proc-log "^4.2.0" + promise-retry "^2.0.1" + ssri "^10.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memory-streams@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/memory-streams/-/memory-streams-0.1.3.tgz#d9b0017b4b87f1d92f55f2745c9caacb1dc93ceb" + integrity sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA== + dependencies: + readable-stream "~1.0.2" + +mensch@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd" + integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g== + +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.1, methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +microdata-rdf-streaming-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.2.0.tgz#130967af0be59ce8ddf5fef4588a0ffa44a17d69" + integrity sha512-cMLNLEcS0mPaiA9iwq6BnsQK9sx2uBwjpRZIEvMRBNJpbvV58f8AFtPeYzNFh3OPyX9B49NYJ77bB0jNAUCurw== + dependencies: + "@rdfjs/types" "*" + htmlparser2 "^6.0.0" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.2" + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimer@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mimer/-/mimer-1.1.1.tgz#f880cef5009e58d4755a98bfd7b3f6de1ce168f4" + integrity sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw== + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" + integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +moleculer-bull@^0.2.5: + version "0.2.8" + resolved "https://registry.yarnpkg.com/moleculer-bull/-/moleculer-bull-0.2.8.tgz#304bd9f0ac8143c1202e5d0a5d328ec11434c05c" + integrity sha512-ayVIqVmc6HVD6SL0RLsmMYqDnnPqwrcEWAPpY31kbUIfU3CBH2grGaqA5adyZBNCo4gQz09+4O9m+Hqxls06Ag== + dependencies: + bull "^3.15.0" + lodash "^4.17.15" + +moleculer-db@^0.8.15, moleculer-db@^0.8.16: + version "0.8.29" + resolved "https://registry.yarnpkg.com/moleculer-db/-/moleculer-db-0.8.29.tgz#36836cafa83f7f12321958a5fc0062fe5a1c0553" + integrity sha512-0e94ia5gkI9Ls2MJ+kAuZsafC0dCFqbaN7FIuoftTizaG+Vixafpj8ezXhGrIPQ1PmOKASSdn0IhkSjzyuc9Gg== + dependencies: + "@seald-io/nedb" "^3.0.0" + lodash "^4.17.21" + +moleculer-mail@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/moleculer-mail/-/moleculer-mail-1.2.6.tgz#e92029b54747eaba620a7636227bf58e8e8a2146" + integrity sha512-i1r1lraG6JTHOeHgUxrP5nQEfvxhldZkYjlcNTgu6blvdv0aWe2GqK6/p+D/dPum4jY6QEKaNB6twI8N+nTAmA== + dependencies: + bluebird "^3.7.2" + email-templates "^2.7.1" + lodash "^4.17.21" + nodemailer "^4.6.7" + nodemailer-html-to-text "^2.1.0" + +moleculer-schedule@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/moleculer-schedule/-/moleculer-schedule-0.2.3.tgz#2aec032431fb5fafcd03c04c25f651bad4b02fe9" + integrity sha512-cFHpnHe56y6grSQov9KR1Y8OGmIFImOPelsR2poMdCulgRC49kThKDxBx11ZwASCNx/UtadmaLJ+sX8xRnuGFQ== + dependencies: + lodash "^4.17.21" + node-schedule "^2.0.0" + +moleculer-web@^0.10.0-beta1, moleculer-web@^0.10.7: + version "0.10.8" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.8.tgz#1b13528a592d53e8f104e43dcff3efbc4bcddd92" + integrity sha512-kQtyN8AccdBqSZUh+PRLYmLPy7RBd48j/raA5682wNDo1fPEKdCHa8d7tUjtmI53gELkQZKCv3GckyMqdxZYXQ== + dependencies: + "@fastify/busboy" "^1.0.0" + body-parser "^1.19.0" + es6-error "^4.1.1" + etag "^1.8.1" + fresh "^0.5.2" + isstream "^0.1.2" + kleur "^4.1.4" + lodash "^4.17.21" + path-to-regexp "^3.1.0" + qs "^6.11.0" + serve-static "^1.14.1" + +moleculer@^0.14.35: + version "0.14.35" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.35.tgz#529fe5fad8b85645d54a99a010a924b136ce6a3f" + integrity sha512-KB4qs0zNTjE9z7Bl27FFLPaWkAsUFJajF2njozJeor1phFCAYP5S1JsWOSrnUBTtsH7SX4gTw8tGRdcgh1eyVQ== + dependencies: + args "^5.0.3" + eventemitter2 "^6.4.9" + fastest-validator "^1.19.0" + glob "^7.2.0" + ipaddr.js "^2.2.0" + kleur "^4.1.5" + lodash "^4.17.21" + lru-cache "^6.0.0" + node-fetch "^2.6.7" + recursive-watch "^1.1.4" + +moment-timezone@^0.5.31: + version "0.5.48" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" + integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw== + dependencies: + moment "^2.29.4" + +moment@2.30.1, moment@^2.29.4: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mri@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +n3@^1.26.0, n3@^1.6.3, n3@^1.8.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/n3/-/n3-1.26.0.tgz#3d69de04bee680b9ebec9dbc1033dc1e6934d351" + integrity sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w== + dependencies: + buffer "^6.0.3" + readable-stream "^4.0.0" + +nan@^2.19.0, nan@^2.23.0: + version "2.23.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.23.0.tgz#24aa4ddffcc37613a2d2935b97683c1ec96093c6" + integrity sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +napi-build-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== + +napi-postinstall@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.3.tgz#93d045c6b576803ead126711d3093995198c6eb9" + integrity sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-abi@^3.3.0: + version "3.77.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.77.0.tgz#3ad90d5c9d45663420e5aa4ff58dbf4e3625419a" + integrity sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ== + dependencies: + semver "^7.3.5" + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +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.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.0, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^3.2.10: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-forge@^0.10.0, node-forge@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp-build@^4.3.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +node-gyp@^10.0.0: + version "10.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a" + integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + tar "^6.2.1" + which "^4.0.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + +node-releases@^2.0.21: + version "2.0.21" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.21.tgz#f59b018bc0048044be2d4c4c04e4c8b18160894c" + integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== + +node-schedule@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3" + integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ== + dependencies: + cron-parser "^4.2.0" + long-timeout "0.1.1" + sorted-array-functions "^1.3.0" + +nodemailer-html-to-text@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz#996decccc9aff6371ec36e3633b18ed75e0fc8f2" + integrity sha512-oaNLWoMyeC5Y8DbtYSwBRHTJVdkojKfiP6J4hh8+10Oih0QoAUqEsnM0WbFA13yhbzjyp1yXBNiDl0QV7BpoRA== + dependencies: + html-to-text "^2.1.0" + +nodemailer@^4.6.7: + version "4.7.0" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.7.0.tgz#4420e06abfffd77d0618f184ea49047db84f4ad8" + integrity sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@^7.0.0, nopt@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== + dependencies: + abbrev "^2.0.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== + dependencies: + hosted-git-info "^7.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" + integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.2.tgz#1ef8006c4a9e9204ddde403035f7ff7d718251ca" + integrity sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: + version "11.0.3" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" + integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@8.0.2, npm-packlist@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" + integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== + dependencies: + ignore-walk "^6.0.4" + +npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" + integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" + semver "^7.3.5" + +npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1" + integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA== + dependencies: + "@npmcli/redact" "^2.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^4.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +nth-check@~1.0.0, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nx@17.2.5, nx@v17.2.5: + version "17.2.5" + resolved "https://registry.yarnpkg.com/nx/-/nx-17.2.5.tgz#fc34bda5fec6b5b0eb65d17c85cb7128e9b028f8" + integrity sha512-bMjl6V+h2Pb7k/iieebQskFqiB5Z7VQgdFJNI6ScMfoMhClWVuF+/fdhxrlN4IaiWHHnZ/KDr7h4kc7puFLr9w== + dependencies: + "@nrwl/tao" v17.2.5 + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.6" + axios "^1.5.1" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + jest-diff "^29.4.1" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" v17.2.5 + "@nx/nx-darwin-x64" v17.2.5 + "@nx/nx-freebsd-x64" v17.2.5 + "@nx/nx-linux-arm-gnueabihf" v17.2.5 + "@nx/nx-linux-arm64-gnu" v17.2.5 + "@nx/nx-linux-arm64-musl" v17.2.5 + "@nx/nx-linux-x64-gnu" v17.2.5 + "@nx/nx-linux-x64-musl" v17.2.5 + "@nx/nx-win32-arm64-msvc" v17.2.5 + "@nx/nx-win32-x64-msvc" v17.2.5 + +"nx@>=17.1.2 < 21": + version "20.8.2" + resolved "https://registry.yarnpkg.com/nx/-/nx-20.8.2.tgz#c70f504fee1804015034d0f7b2c51871a25bda3a" + integrity sha512-mDKpbH3vEpUFDx0rrLh+tTqLq1PYU8KiD/R7OVZGd1FxQxghx2HOl32MiqNsfPcw6AvKlXhslbwIESV+N55FLQ== + dependencies: + "@napi-rs/wasm-runtime" "0.2.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.2" + "@zkochan/js-yaml" "0.0.7" + axios "^1.8.3" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + front-matter "^4.0.2" + ignore "^5.0.4" + jest-diff "^29.4.1" + jsonc-parser "3.2.0" + lines-and-columns "2.0.3" + minimatch "9.0.3" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + ora "5.3.0" + resolve.exports "2.0.3" + semver "^7.5.3" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yaml "^2.6.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "20.8.2" + "@nx/nx-darwin-x64" "20.8.2" + "@nx/nx-freebsd-x64" "20.8.2" + "@nx/nx-linux-arm-gnueabihf" "20.8.2" + "@nx/nx-linux-arm64-gnu" "20.8.2" + "@nx/nx-linux-arm64-musl" "20.8.2" + "@nx/nx-linux-x64-gnu" "20.8.2" + "@nx/nx-linux-x64-musl" "20.8.2" + "@nx/nx-win32-arm64-msvc" "20.8.2" + "@nx/nx-win32-x64-msvc" "20.8.2" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== + +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + +object.fromentries@^2.0.2, object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.getownpropertydescriptors@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +oidc-token-hash@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.1.1.tgz#d35e31ca26d3a26678f5e9bda100b095ab58011f" + integrity sha512-D7EmwxJV6DsEB6vOFLrBM2OzsVgQzgPWyHlV2OOAVj772n+WTXpudC9e9u5BVKQnYwaD30Ivhi9b+4UeBcGu9g== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +openid-client@^4.7.4: + version "4.9.1" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-4.9.1.tgz#4f00a9d1566c0fa08f0dd5986cf0e6b1e5d14186" + integrity sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w== + dependencies: + aggregate-error "^3.1.0" + got "^11.8.0" + jose "^2.0.5" + lru-cache "^6.0.0" + make-error "^1.3.6" + object-hash "^2.0.1" + oidc-token-hash "^5.0.1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g== + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" + integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@4.0.0, p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-pipe@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pacote@^18.0.0, pacote@^18.0.6: + version "18.0.6" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" + integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A== + dependencies: + "@npmcli/git" "^5.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/package-json" "^5.1.0" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^8.0.0" + cacache "^18.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^17.0.0" + proc-log "^4.0.0" + promise-retry "^2.0.1" + sigstore "^2.2.0" + ssri "^10.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-conflict-json@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== + dependencies: + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + +parse-imports@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/parse-imports/-/parse-imports-2.2.1.tgz#0a6e8b5316beb5c9905f50eb2bbb8c64a4805642" + integrity sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ== + dependencies: + es-module-lexer "^1.5.3" + slashes "^3.0.12" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-link-header@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" + integrity sha512-Z0gpfHmwCIKDr5rRzjypL+p93aHVWO7e+0rFcUl9E3sC67njjs+xHFenuboSXZGlvYtmQqRzRaE3iFpTUnLmFQ== + dependencies: + xtend "~4.0.1" + +parse-path@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.1.0.tgz#41fb513cb122831807a4c7b29c8727947a09d8c6" + integrity sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw== + dependencies: + protocols "^2.0.0" + +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +passport-cas2@0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/passport-cas2/-/passport-cas2-0.0.12.tgz#aca3364a02d158a01ca7fadd71c6c26fd8ee9370" + integrity sha512-ck/6x2lb6eYhlC/9lmw7ZTgqzSiJmYB0px7H2B00kpRZlBQuds9yPzFMi7kBWtgFpTDf0o+rwQMUYga8yO/jIg== + dependencies: + cas "https://github.com/joshchan/node-cas" + passport-strategy "^1.0.0" + +passport-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== + dependencies: + passport-strategy "1.x.x" + +passport-strategy@1.x.x, passport-strategy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== + +passport@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" + integrity sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg== + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== + +path-to-regexp@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" + integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +pify@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +postcss-selector-parser@^6.0.10: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss@^8.3.11: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prebuild-install@^7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^2.0.0" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.1.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" + integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== + +pretty-format@30.0.5, pretty-format@^30.0.0: + version "30.0.5" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.0.5.tgz#e001649d472800396c1209684483e18a4d250360" + integrity sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw== + dependencies: + "@jest/schemas" "30.0.5" + ansi-styles "^5.2.0" + react-is "^18.3.1" + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" + integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +proggy@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" + integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" + integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-limit@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26" + integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw== + +promise-polyfill@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-1.1.6.tgz#cd04eff46f5c95c3a7d045591d79b5e3e01f12d7" + integrity sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promise.prototype.finally@^3.1.2: + version "3.1.8" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz#b97bc1bbca74dc21b6e978c85a70752a7a0b7c3a" + integrity sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + set-function-name "^2.0.1" + +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +promzard@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.2.tgz#2226e7c6508b1da3471008ae17066a7c3251e660" + integrity sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ== + dependencies: + read "^3.0.1" + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.2.tgz#822e8fcdcb3df5356538b3e91bfd890b067fd0a4" + integrity sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +pug-attrs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" + integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== + dependencies: + constantinople "^4.0.1" + js-stringify "^1.0.2" + pug-runtime "^3.0.0" + +pug-code-gen@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.3.tgz#58133178cb423fe1716aece1c1da392a75251520" + integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw== + dependencies: + constantinople "^4.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.2" + pug-attrs "^3.0.0" + pug-error "^2.1.0" + pug-runtime "^3.0.1" + void-elements "^3.1.0" + with "^7.0.0" + +pug-error@^2.0.0, pug-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.1.0.tgz#17ea37b587b6443d4b8f148374ec27b54b406e55" + integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg== + +pug-filters@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" + integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== + dependencies: + constantinople "^4.0.1" + jstransformer "1.0.0" + pug-error "^2.0.0" + pug-walk "^2.0.0" + resolve "^1.15.1" + +pug-lexer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" + integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== + dependencies: + character-parser "^2.2.0" + is-expression "^4.0.0" + pug-error "^2.0.0" + +pug-linker@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" + integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== + dependencies: + pug-error "^2.0.0" + pug-walk "^2.0.0" + +pug-load@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" + integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== + dependencies: + object-assign "^4.1.1" + pug-walk "^2.0.0" + +pug-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" + integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== + dependencies: + pug-error "^2.0.0" + token-stream "1.0.0" + +pug-runtime@^3.0.0, pug-runtime@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" + integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== + +pug-strip-comments@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" + integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== + dependencies: + pug-error "^2.0.0" + +pug-walk@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" + integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== + +pug@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.3.tgz#e18324a314cd022883b1e0372b8af3a1a99f7597" + integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g== + dependencies: + pug-code-gen "^3.0.3" + pug-filters "^4.0.0" + pug-lexer "^5.0.1" + pug-linker "^4.0.0" + pug-load "^3.0.0" + pug-parser "^6.0.0" + pug-runtime "^3.0.1" + pug-strip-comments "^2.0.0" + +pump@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-7.0.1.tgz#6f53a5a9e3e4a47445822af96821ca509ed37566" + integrity sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== + +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +qs@^6.11.0, qs@^6.5.1: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +rdf-canonize@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-1.2.0.tgz#9872b2cc6ed92a9969e834f9f042addaf0d4f7f9" + integrity sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw== + dependencies: + node-forge "^0.10.0" + semver "^6.3.0" + +rdf-canonize@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-2.0.1.tgz#12c9b8b41570cd669d9b152c9e679063478ba194" + integrity sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA== + dependencies: + semver "^6.3.0" + setimmediate "^1.0.5" + +rdf-canonize@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-3.4.0.tgz#87f88342b173cc371d812a07de350f0c1aa9f058" + integrity sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA== + dependencies: + setimmediate "^1.0.5" + +rdf-canonize@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-4.0.1.tgz#2b5a37f147d35b484b40ff2140245fc5985a9595" + integrity sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA== + dependencies: + setimmediate "^1.0.5" + +rdf-data-factory@^1.1.0, rdf-data-factory@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz#11b39e0c80e51bca83828b2ddaa686f733be966f" + integrity sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ== + dependencies: + "@rdfjs/types" "^1.0.0" + +rdf-data-model@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rdf-data-model/-/rdf-data-model-1.0.0.tgz#e768e1c2cd904c186471b20d1a4fce77c7712a4b" + integrity sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g== + +rdf-isomorphic@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz#cd6d433cd85bf79d903d5f0fdeea42a40eb27265" + integrity sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ== + dependencies: + "@rdfjs/types" "*" + hash.js "^1.1.7" + rdf-string "^1.6.0" + rdf-terms "^1.7.0" + +rdf-parse@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/rdf-parse/-/rdf-parse-1.9.1.tgz#6ec1d70a20d7e65b2c5a5acaee811f50b03940ac" + integrity sha512-W6ouYE+ufmCNFmXD1iGs5gUZH75jZekh/I5qF8a4Sl37BUc9mY0Jz5A0CV1tiKKhx+I+HYfxyX9VjOljD8rzgQ== + dependencies: + "@comunica/actor-http-native" "~1.22.0" + "@comunica/actor-rdf-parse-html" "~1.22.0" + "@comunica/actor-rdf-parse-html-microdata" "~1.22.0" + "@comunica/actor-rdf-parse-html-rdfa" "~1.22.0" + "@comunica/actor-rdf-parse-html-script" "~1.22.0" + "@comunica/actor-rdf-parse-jsonld" "^1.22.0" + "@comunica/actor-rdf-parse-n3" "~1.22.0" + "@comunica/actor-rdf-parse-rdfxml" "~1.22.0" + "@comunica/actor-rdf-parse-xml-rdfa" "~1.22.0" + "@comunica/bus-http" "~1.22.0" + "@comunica/bus-init" "~1.22.0" + "@comunica/bus-rdf-parse" "~1.22.0" + "@comunica/bus-rdf-parse-html" "~1.22.0" + "@comunica/core" "~1.22.0" + "@comunica/mediator-combine-union" "~1.22.0" + "@comunica/mediator-number" "~1.22.0" + "@comunica/mediator-race" "~1.22.0" + "@rdfjs/types" "*" + stream-to-string "^1.2.0" + +rdf-string@^1.6.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/rdf-string/-/rdf-string-1.6.3.tgz#5c3173fad13e6328698277fb8ff151e3423282ab" + integrity sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g== + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + +rdf-terms@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/rdf-terms/-/rdf-terms-1.11.0.tgz#0c2e3a2b43f1042959c9263af27dab08dc4b084d" + integrity sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ== + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + rdf-string "^1.6.0" + +rdfa-streaming-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz#34072e760aa07e6cddf210923888f9834354fb92" + integrity sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ== + dependencies: + "@rdfjs/types" "*" + htmlparser2 "^6.0.0" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.2" + +rdfxml-streaming-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz#485af3a01abc2dc49149b8758da9a12351d34348" + integrity sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ== + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.0" + sax "^1.2.4" + +react-is@^18.0.0, react-is@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +read-cmd-shim@4.0.0, read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" + integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== + dependencies: + mute-stream "^1.0.0" + +readable-stream-node-to-web@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz#8b7614faa1465ebfa0da9b9ca6303fa27073b7cf" + integrity sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ== + +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + integrity sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.3.5, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.0.0, readable-stream@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-stream@~1.0.2: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-web-to-node-stream@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz#392ba37707af5bf62d725c36c1b5d6ef4119eefc" + integrity sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw== + dependencies: + readable-stream "^4.7.0" + +recursive-watch@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/recursive-watch/-/recursive-watch-1.1.4.tgz#7a340f860dd715836a592f008cceba5a1dd0b734" + integrity sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ== + dependencies: + ttl "^1.3.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^6.2.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" + integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + dependencies: + jsesc "~3.1.0" + +relative-to-absolute-iri@^1.0.0, relative-to-absolute-iri@^1.0.2, relative-to-absolute-iri@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz#f2fd6ee60c78d9ffc4926bd20bdf84479b91d765" + integrity sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q== + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve.exports@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.15.1, resolve@^1.22.10, resolve@^1.22.4: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" + +rsync@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/rsync/-/rsync-0.6.1.tgz#3681a0098bd8750448f8bf9da1fee09f7763742b" + integrity sha512-39HcwWuM67CQ9tHloazShXWUOWa2m3SGqX6XQhQMSj0VCQMkSI9PodoxM7/+hKf2p4v2umbhfoarYqd1gwII/w== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-html@^2.6.1: + version "2.17.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.17.0.tgz#a8f66420a6be981d8fe412e3397cc753782598e4" + integrity sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA== + dependencies: + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + htmlparser2 "^8.0.0" + is-plain-object "^5.0.0" + parse-srcset "^1.0.2" + postcss "^8.3.11" + +sax@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + +security-context@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/security-context/-/security-context-4.0.0.tgz#e73f5d22bee9c7699a02eaaced359d001dc948e9" + integrity sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA== + +"semver@2 || 3 || 4 || 5", semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" + integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA== + dependencies: + type-fest "^0.8.0" + +serialize-error@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" + integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== + dependencies: + type-fest "^0.20.2" + +serve-static@^1.14.1: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +sharp@^0.31.2: + version "0.31.3" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" + integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^5.0.0" + prebuild-install "^7.1.1" + semver "^7.3.8" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" + integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + "@sigstore/sign" "^2.3.2" + "@sigstore/tuf" "^2.3.4" + "@sigstore/verify" "^1.2.1" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.4.tgz#a8d11a45a11600d6a1ecdff6363329e3648c3667" + integrity sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw== + dependencies: + is-arrayish "^0.3.1" + +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slashes@^3.0.12: + version "3.0.12" + resolved "https://registry.yarnpkg.com/slashes/-/slashes-3.0.12.tgz#3d664c877ad542dc1509eaf2c50f38d483a6435a" + integrity sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA== + +slick@^1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" + integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== + dependencies: + ip-address "^10.0.1" + smart-buffer "^4.2.0" + +sodium-native@^3.2.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-3.4.1.tgz#44616c07ccecea15195f553af88b3e574b659741" + integrity sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ== + dependencies: + node-gyp-build "^4.3.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sorted-array-functions@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" + integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sparqlalgebrajs@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sparqlalgebrajs/-/sparqlalgebrajs-3.0.3.tgz#a0b2b2ea2bacf97a74b4e3f3fc90be72b96d94a1" + integrity sha512-XFNhsO55bprayrM35h/jY0kzzuGc3oZ1On3kc+s7Un0BFQBXa046aLcMZFp4MYSvn7GtMe9eZ08ONFnBH5kEsQ== + dependencies: + "@rdfjs/types" "*" + "@types/sparqljs" "^3.1.2" + fast-deep-equal "^3.1.3" + minimist "^1.2.5" + rdf-data-factory "^1.1.0" + rdf-isomorphic "^1.3.0" + rdf-string "^1.6.0" + sparqljs "^3.4.2" + +sparqljs@^3.4.2, sparqljs@^3.5.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/sparqljs/-/sparqljs-3.7.3.tgz#075821d51ef4954284e36569503fe5558cfb71b0" + integrity sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg== + dependencies: + rdf-data-factory "^1.1.2" + +sparqljson-parse@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz#8844cae3b030864e459e37e6229bf394fc2dee14" + integrity sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw== + dependencies: + "@rdfjs/types" "*" + "@types/node" "^13.1.0" + JSONStream "^1.3.3" + rdf-data-factory "^1.1.0" + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== + +speakingurl@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" + integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssh2-sftp-client@^7.2.1: + version "7.2.3" + resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-7.2.3.tgz#b6533cb1202bb547dc3cfb53afb61ae60bde976a" + integrity sha512-Bmq4Uewu3e0XOwu5bnPbiS5KRQYv+dff5H6+85V4GZrPrt0Fkt1nUH+uXanyAkoNxUpzjnAPEEoLdOaBO9c3xw== + dependencies: + concat-stream "^2.0.0" + promise-retry "^2.0.1" + ssh2 "^1.8.0" + +ssh2@^1.8.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.17.0.tgz#dc686e8e3abdbd4ad95d46fa139615903c12258c" + integrity sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ== + dependencies: + asn1 "^0.2.6" + bcrypt-pbkdf "^1.0.2" + optionalDependencies: + cpu-features "~0.0.10" + nan "^2.23.0" + +sshpk@^1.18.0, sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^10.0.0, ssri@^10.0.6: + version "10.0.6" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" + integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== + dependencies: + minipass "^7.0.3" + +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== + +stack-utils@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + +stream-to-string@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.1.tgz#15cb325d88b33cc62accb032c7093f85eb785db2" + integrity sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA== + dependencies: + promise-polyfill "^1.1.6" + +streamify-string@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/streamify-string/-/streamify-string-1.0.1.tgz#9e220de33e1c475dd30e0206f5b1815cc6c9525b" + integrity sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw== + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== + +string-length@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-template@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96" + integrity sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg== + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supertest@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-4.0.2.tgz#c2234dbdd6dc79b6f15b99c8d6577b90e4ce3f36" + integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== + dependencies: + methods "^1.1.2" + superagent "^3.8.3" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.11.7, synckit@^0.11.8: + version "0.11.11" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" + integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== + dependencies: + "@pkgr/core" "^0.2.9" + +synckit@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.3.tgz#1cfd60d9e61f931e07fb7f56f474b5eb31b826a7" + integrity sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" + integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4, tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@6.2.1, tar@^6.1.11, tar@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-decoding@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" + integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, through@2.3.8, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinyglobby@0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + +tinyglobby@^0.2.13: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +tmp@~0.2.1: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +token-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" + integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +ttl@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ttl/-/ttl-1.3.1.tgz#d8fa510bedb6a956d85b60ec56a57339ae0d5b2c" + integrity sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA== + +tuf-js@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" + integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== + dependencies: + "@tufjs/models" "2.0.1" + debug "^4.3.4" + make-fetch-happen "^13.0.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.0, type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +"typescript@>=3 < 6", typescript@^5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +uid-safe@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== + dependencies: + random-bytes "~1.0.0" + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +underscore.string@^3.2.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" + integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== + dependencies: + sprintf-js "^1.1.1" + util-deprecate "^1.0.2" + +underscore@^1.8.3: + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici-types@~7.12.0: + version "7.12.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb" + integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ== + +undici@^5.21.2: + version "5.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" + integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== + dependencies: + "@fastify/busboy" "^2.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz#301d4f8a43d2b75c97adfad87c9dd5350c9475d1" + integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ== + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unrs-resolver@^1.6.2, unrs-resolver@^1.7.11: + version "1.11.1" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz#be9cd8686c99ef53ecb96df2a473c64d304048a9" + integrity sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg== + dependencies: + napi-postinstall "^0.3.0" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.11.1" + "@unrs/resolver-binding-android-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-x64" "1.11.1" + "@unrs/resolver-binding-freebsd-x64" "1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-arm64-musl" "1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl" "1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-musl" "1.11.1" + "@unrs/resolver-binding-wasm32-wasi" "1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc" "1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" + "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" + +upath@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.3.tgz#3d77cf56628b4aad743e5acde8e5c44cea7dbf1c" + integrity sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + for-each "^0.3.3" + get-intrinsic "^1.2.6" + has-proto "^1.2.0" + has-symbols "^1.1.0" + object.getownpropertydescriptors "^2.1.8" + safe-array-concat "^1.1.3" + +util@^0.12.4: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +uuid@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +valid-data-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-2.0.0.tgz#2220fa9f8d4e761ebd3f3bb02770f1212b810537" + integrity sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA== + +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@5.0.1, validate-npm-package-name@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== + +vc-js@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/vc-js/-/vc-js-0.6.4.tgz#49f408c590260d28c25a3ca4e30ece0de61c3ae1" + integrity sha512-ogwYys94k8mFyFZEn1Ru3nIA5Z/9C4iCU4grNWUYOYVWldcsn6UDp6erYFbaSkilzv7RK3cQu5N8prkxfHpZwA== + dependencies: + commander "^2.20.3" + credentials-context "^1.0.0" + debug "^4.1.1" + fs-extra "^8.1.0" + get-stdin "^7.0.0" + jsonld "^2.0.2" + jsonld-signatures "^5.0.0" + supports-color "^7.1.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +void-elements@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +wait-for-expect@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" + integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== + +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-resource-inliner@^4.2.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz#07e1b4bcbcbee1021251b018e902bac5713f1be0" + integrity sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA== + dependencies: + async "^3.1.0" + chalk "^2.4.2" + datauri "^2.0.0" + htmlparser2 "^4.0.0" + lodash.unescape "^4.0.1" + request "^2.88.0" + safer-buffer "^2.1.2" + valid-data-url "^2.0.0" + xtend "^4.0.2" + +web-streams-node@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/web-streams-node/-/web-streams-node-0.4.0.tgz#641e42d7a7c4df95785a774e2484ba93d36fd672" + integrity sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w== + dependencies: + is-stream "^1.1.0" + readable-stream-node-to-web "^1.0.1" + web-streams-ponyfill "^1.4.1" + +web-streams-polyfill@^3.0.3: + 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== + +web-streams-ponyfill@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz#0ae863cc5f7493903679f16b08cbf14d432b62f4" + integrity sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +wide-align@1.1.5, wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +with@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" + integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== + dependencies: + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + assert-never "^1.2.1" + babel-walk "3.0.0-canary-5" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@5.0.1, write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +xmldom@0.1.19: + version "0.1.19" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" + integrity sha512-pDyxjQSFQgNHkU+yjvoF+GXVGJU7e9EnOg/KcGMDihBIKjTsOeDYaECwC/O9bsUWKY+Sd9izfE43JXC46EOHKA== + +xtend@^4.0.2, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.6.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== + +yargs-parser@21.1.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@17.7.2, yargs@^17.6.2, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 6e4b7216402f5d3a73c78d7a2fbdb1ee1c9481c1 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 24 Sep 2025 16:28:49 +0200 Subject: [PATCH 086/165] Lower requirements to Node 22 --- src/middleware/tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 49212949a..22e9d92f0 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -54,7 +54,7 @@ }, "version": "1.1.3", "engines": { - "node": ">=24.0.0" + "node": ">=22" }, "type": "module" } From fb01f726e0ff7187d860faf5f7102c7c0883ddc0 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 29 Sep 2025 10:02:43 +0200 Subject: [PATCH 087/165] fix: tsconfig typeRoots config (fixes jest globals) --- src/middleware/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/tsconfig.json b/src/middleware/tsconfig.json index 4151f7087..4a4d54df2 100644 --- a/src/middleware/tsconfig.json +++ b/src/middleware/tsconfig.json @@ -20,7 +20,7 @@ "allowImportingTsExtensions": true, "outDir": "dist/", "rootDir": "./", - "typeRoots": ["node_modules/types", "types"] + "typeRoots": ["node_modules/@types", "types"] }, "exclude": ["**/dist"] } From 7c897e6ba2f0381b7aab357b7f6fefedcb0bd553 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 29 Sep 2025 10:06:40 +0200 Subject: [PATCH 088/165] chore: remove obsolete @ts-expect-error --- .../packages/activitypub/mixins/bot.ts | 1 - .../services/activitypub/subservices/actor.ts | 3 - .../services/activitypub/subservices/api.ts | 6 - .../subservices/collection/actions/get.ts | 4 - .../subservices/collection/index.ts | 2 - .../subservices/collections-registry.ts | 2 - .../services/activitypub/subservices/inbox.ts | 6 - .../activitypub/subservices/object.ts | 1 - .../activitypub/subservices/outbox.ts | 3 - src/middleware/packages/auth/mixins/auth.ts | 3 - .../packages/auth/services/account.ts | 3 - .../packages/auth/services/auth.local.ts | 7 +- src/middleware/packages/crypto/keys/keys.ts | 14 -- .../packages/crypto/keys/migration.ts | 1 - .../crypto/signature/http-signatures.ts | 5 - .../packages/crypto/signature/proxy.ts | 4 - .../data-integrity-service.ts | 6 - .../vc-credential-container.ts | 1 - .../vc-holder-service.ts | 4 - .../vc-issuer-service.ts | 5 - .../vc-presentation-container.ts | 1 - .../vc-verifier-service.ts | 8 - src/middleware/packages/inference/service.ts | 4 - .../packages/inference/subservices/remote.ts | 3 - .../packages/jsonld/services/api/index.ts | 2 - .../jsonld/services/context/actions/get.ts | 1 - .../jsonld/services/context/actions/merge.ts | 1 - .../services/context/actions/validate.ts | 1 - .../ldp/mixins/controlled-container.ts | 1 - .../packages/ldp/mixins/document-tagger.ts | 3 - src/middleware/packages/ldp/service.ts | 1 - .../packages/ldp/services/cache/index.ts | 10 -- .../ldp/services/container/actions/attach.ts | 4 - .../ldp/services/container/actions/clear.ts | 2 - .../ldp/services/container/actions/create.ts | 1 - .../container/actions/createAndAttach.ts | 9 +- .../ldp/services/container/actions/delete.ts | 3 - .../ldp/services/container/actions/detach.ts | 3 - .../ldp/services/container/actions/get.ts | 3 - .../ldp/services/container/actions/isEmpty.ts | 1 - .../ldp/services/container/actions/patch.ts | 5 - .../ldp/services/container/actions/post.ts | 4 - .../ldp/services/permissions/actions/check.ts | 2 - .../ldp/services/permissions/actions/has.ts | 4 - .../services/registry/actions/getByType.ts | 1 - .../ldp/services/registry/actions/getByUri.ts | 2 - .../ldp/services/registry/actions/getUri.ts | 1 - .../ldp/services/registry/actions/register.ts | 9 -- .../ldp/services/remote/actions/isRemote.ts | 4 - .../resource/actions/awaitCreateComplete.ts | 1 - .../ldp/services/resource/actions/create.ts | 3 - .../ldp/services/resource/actions/delete.ts | 3 - .../ldp/services/resource/actions/exist.ts | 2 - .../services/resource/actions/generateId.ts | 10 +- .../resource/actions/getContainers.ts | 2 - .../ldp/services/resource/actions/patch.ts | 4 - .../ldp/services/resource/actions/put.ts | 14 -- .../ldp/services/resource/actions/upload.ts | 2 - .../packages/ldp/services/resource/index.ts | 7 - .../ontologies/actions/prefixToUri.ts | 1 - .../packages/ontologies/actions/register.ts | 10 -- src/middleware/packages/ontologies/service.ts | 3 - .../packages/sparql-endpoint/service.ts | 6 - .../actions/countTriplesOfSubject.ts | 1 - .../actions/deleteOrphanBlankNodes.ts | 1 - .../packages/triplestore/actions/dropAll.ts | 2 - .../packages/triplestore/actions/insert.ts | 3 - .../packages/triplestore/actions/query.ts | 7 - .../triplestore/actions/tripleExist.ts | 2 - .../packages/triplestore/actions/update.ts | 4 - src/middleware/packages/void/service.ts | 2 - .../packages/webacl/bots/authorizer-bot.ts | 2 - .../packages/webacl/bots/groups-manager.ts | 2 - src/middleware/packages/webacl/service.ts | 1 - .../packages/webacl/services/cache/index.ts | 5 - .../services/group/actions/addMember.ts | 1 - .../webacl/services/group/actions/create.ts | 1 - .../webacl/services/group/actions/delete.ts | 1 - .../services/group/actions/getMembers.ts | 1 - .../webacl/services/group/actions/isMember.ts | 1 - .../services/group/actions/removeMember.ts | 1 - .../services/resource/actions/addRights.ts | 4 - .../services/resource/actions/getRights.ts | 1 - .../services/resource/actions/hasRights.ts | 1 - .../services/resource/actions/removeRights.ts | 3 - .../services/resource/actions/setRights.ts | 2 - .../tests/activitypub/actors.test.ts | 12 -- .../tests/activitypub/collection-api.test.ts | 16 -- .../tests/activitypub/collection.test.ts | 60 -------- .../tests/activitypub/follow.test.ts | 14 -- .../tests/activitypub/inbox.test.ts | 19 --- .../tests/activitypub/initialize.ts | 1 - src/middleware/tests/activitypub/like.test.ts | 9 -- .../tests/activitypub/message.test.ts | 11 -- .../tests/activitypub/object.test.ts | 18 --- .../tests/activitypub/outbox.test.ts | 23 --- .../tests/activitypub/shares.test.ts | 6 - src/middleware/tests/crypto/initialize.ts | 1 - src/middleware/tests/crypto/keys.test.ts | 138 ------------------ .../crypto/verifiable-credentials.test.ts | 38 ----- .../tests/interop/mirror-protected.test.ts | 10 -- src/middleware/tests/interop/mirror.test.ts | 17 --- .../tests/interop/patch-remote.test.ts | 10 -- .../tests/interop/remote-inference.test.ts | 9 -- src/middleware/tests/jsonld/initialize.ts | 1 - src/middleware/tests/jsonld/merge.test.ts | 2 - src/middleware/tests/ldp/api.test.ts | 40 ----- src/middleware/tests/ldp/binary.test.ts | 17 --- .../tests/ldp/container-path.test.ts | 2 - src/middleware/tests/ldp/container.test.ts | 33 ----- .../tests/ldp/content-negotiation.test.ts | 43 ------ src/middleware/tests/ldp/initialize.ts | 1 - src/middleware/tests/ldp/resource.test.ts | 44 ------ src/middleware/tests/ontologies/initialize.ts | 1 - .../tests/ontologies/ontologies.test.ts | 40 ----- src/middleware/tests/webId/webId.test.ts | 6 - src/middleware/tests/webacl/groupCRUD.test.ts | 14 -- src/middleware/tests/webacl/initialize.ts | 1 - src/middleware/tests/webacl/resource.test.ts | 31 ---- .../tests/webacl/resourceCRUD.test.ts | 12 -- .../tests/webacl/sparql-injection.test.ts | 6 - src/middleware/tests/webacl/utils.test.ts | 33 ----- 122 files changed, 4 insertions(+), 1027 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index 102425275..4c09cf138 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -79,7 +79,6 @@ const BotMixin = { 'activitypub.inbox.received': { handler(ctx) { if (this.inboxReceived) { - // @ts-expect-error TS(2339): Property 'recipients' does not exist on type 'Opti... Remove this comment to see the full error message if (ctx.params.recipients.includes(this.settings.actor.uri)) { // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message this.inboxReceived(ctx.params.activity); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 69e2f6cc1..f4387937c 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -21,7 +21,6 @@ const ActorService = { // If dataset is not in the meta, assume that actor is remote if ( !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri })) && - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. (!this.settings.podProvider || ctx.meta.dataset) ) { try { @@ -198,7 +197,6 @@ const ActorService = { events: { 'ldp.resource.created': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; if (this.isActor(newData)) { await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); @@ -210,7 +208,6 @@ const ActorService = { 'ldp.resource.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; if (this.isActor(oldData)) { await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index d34770aa7..ff83df983 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -51,7 +51,6 @@ const ApiService = { inbox: { async handler(ctx) { const { actorSlug, ...activity } = ctx.params; - // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. const { requestUrl } = ctx.meta; const { origin } = new URL(this.settings.baseUri); @@ -60,7 +59,6 @@ const ApiService = { ...activity }); - // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 202; } }, @@ -68,7 +66,6 @@ const ApiService = { outbox: { async handler(ctx) { let { actorSlug, ...activity } = ctx.params; - // @ts-expect-error TS(2339): Property 'requestUrl' does not exist on type '{}'. const { requestUrl } = ctx.meta; const { origin } = new URL(this.settings.baseUri); @@ -77,15 +74,12 @@ const ApiService = { ...activity }); - // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = { Location: activity.id || activity['@id'], 'Content-Length': 0 }; // We need to set this also here (in addition to above) or we get a Moleculer warning - // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. ctx.meta.$location = activity.id || activity['@id']; - // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 201; } } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 61a22b7db..e895ffe61 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -295,18 +295,14 @@ const Schema = { webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, async handler(ctx) { const { resourceUri: collectionUri, jsonContext } = ctx.params; - // @ts-expect-error TS(2339): Property 'queryString' does not exist on type '{}'... Remove this comment to see the full error message const beforeEq = ctx.params.beforeEq || ctx.meta.queryString?.beforeEq; // cursor param when moving backwards - // @ts-expect-error TS(2339): Property 'queryString' does not exist on type '{}'... Remove this comment to see the full error message const afterEq = ctx.params.afterEq || ctx.meta.queryString?.afterEq; // cursor param when moving forwards - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const localContext = await ctx.call('jsonld.context.get'); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 981c38a11..a87228f60 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -60,7 +60,6 @@ const CollectionService = { patch: { async handler(ctx) { const { resourceUri: collectionUri, triplesToAdd, triplesToRemove } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri, webId }); @@ -199,7 +198,6 @@ const CollectionService = { const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); if (!collectionExist) throw new Error( - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Cannot attach to a non-existing collection: ${collectionUri} (dataset: ${ctx.meta.dataset})` ); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 134d7a530..74b0dd40f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -283,7 +283,6 @@ const CollectionsRegistryService = { 'ldp.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; // Check if we need to create collection only if the type has changed if (this.hasTypeChanged(oldData, newData)) { @@ -302,7 +301,6 @@ const CollectionsRegistryService = { 'ldp.resource.patched': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, triplesAdded } = ctx.params; if (triplesAdded) { for (const triple of triplesAdded) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 5c34e7226..9f92831f8 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -43,7 +43,6 @@ const InboxService = { // Ensure the actor in the activity is the same as the posting actor // (When posting, the webId is the one of the poster) - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. if (activity.actor !== ctx.meta.webId) { throw new E.UnAuthorizedError('INVALID_ACTOR', 'Activity actor is not the same as the posting actor'); } @@ -62,7 +61,6 @@ const InboxService = { // We want the next operations to be done by the system // TODO check if we can avoid this, as this is a bad practice - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'system'; const collectionExists = await ctx.call('activitypub.collection.exist', { @@ -73,16 +71,12 @@ const InboxService = { throw new E.NotFoundError(); } - // @ts-expect-error TS(2339): Property 'skipSignatureValidation' does not exist ... Remove this comment to see the full error message if (!ctx.meta.skipSignatureValidation) { - // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. if (!ctx.meta.rawBody || !ctx.meta.originalHeaders) throw new Error(`Cannot validate HTTP signature because of missing meta (rawBody or originalHeaders)`); const validDigest = await ctx.call('signature.verifyDigest', { - // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. body: ctx.meta.rawBody, // Stored by parseRawBody middleware - // @ts-expect-error TS(2339): Property 'originalHeaders' does not exist on type ... Remove this comment to see the full error message headers: ctx.meta.originalHeaders }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 6dc4703a7..a4adb34c2 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -209,7 +209,6 @@ const ObjectService = { async handler(ctx) { // Check if tombstones are globally activated if (this.settings.activateTombstones) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, containersUris, oldData, dataset } = ctx.params; // If the resource was in no container, skip... diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index 804e56ef5..b220321f2 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -59,17 +59,14 @@ const OutboxService = { } // Ensure logged user is posting to his own outbox - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. if (ctx.meta.webId && ctx.meta.webId !== 'system' && actorUri !== ctx.meta.webId) { throw new E.UnAuthorizedError( 'UNAUTHORIZED', - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. `Forbidden to post to the outbox ${collectionUri} (webId ${ctx.meta.webId})` ); } if (this.settings.podProvider) { - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. ctx.meta.dataset = getSlugFromUri(actorUri); } diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index e4bec141e..51f248c60 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -123,7 +123,6 @@ const AuthMixin = { if (!token) { // No token - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.resolve(null); } @@ -131,7 +130,6 @@ const AuthMixin = { if (method === 'Bearer') { const payload = await ctx.call('auth.jwt.verifyServerSignedToken', { token }); if (payload) { - // @ts-expect-error TS(2339): Property 'tokenPayload' does not exist on type '{}... Remove this comment to see the full error message ctx.meta.tokenPayload = payload; // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = payload.webId; @@ -149,7 +147,6 @@ const AuthMixin = { } // No valid auth method given. - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.resolve(null); } diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 9ca247490..56445d212 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -54,7 +54,6 @@ const AuthAccountSchema = { // FORMAT AND VERIFY USERNAME if (username) { - // @ts-expect-error TS(2339): Property 'isSystemCall' does not exist on type '{}... Remove this comment to see the full error message if (!ctx.meta.isSystemCall) { const { isValid, error } = await this.isValidUsername(ctx, username); if (!isValid) throw new Error(error); @@ -222,7 +221,6 @@ const AuthAccountSchema = { findDatasetByWebId: { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const account = await ctx.call('auth.account.findByWebId', { webId }); return account?.username; @@ -231,7 +229,6 @@ const AuthAccountSchema = { findSettingsByWebId: { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { webId } = ctx.meta; const account = await ctx.call('auth.account.findByWebId', { webId }); diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index dd180603a..98dc084d3 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,7 +1,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-local'; -import { ServiceSchema } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; import AuthMailService from './mail.ts'; @@ -55,7 +55,6 @@ const AuthLocalService = { const { username, email, password, ...rest } = ctx.params; // This is going to get in our way otherwise when waiting for completions. - // @ts-expect-error TS(2339): Property 'skipObjectsWatcher' does not exist on ty... Remove this comment to see the full error message ctx.meta.skipObjectsWatcher = true; let accountData = await ctx.call('auth.account.create', { @@ -105,11 +104,8 @@ const AuthLocalService = { logout: { async handler(ctx) { - // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 302; - // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. ctx.meta.$location = ctx.params.redirectUrl || this.settings.formUrl; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.emit('auth.disconnected', { webId: ctx.meta.webId }); } }, @@ -123,7 +119,6 @@ const AuthLocalService = { formUrl.searchParams.set(key, value); } } - // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 302; // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. ctx.meta.$location = formUrl.toString(); diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index f92dd8e3a..e46ceec7f 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -87,7 +87,6 @@ const KeysService = { }, async handler(ctx) { const { keyType } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; // Get the key container, to search by type. @@ -154,17 +153,13 @@ const KeysService = { getMultikey: { params: { webId: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message keyType: { type: 'string', default: KEY_TYPES.ED25519 }, /** Add the secret key to the key object, if not set (or the public key id is provided), it will be removed. */ - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message withPrivateKey: { type: 'boolean', default: false } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { keyId, keyType, withPrivateKey, webId = ctx.meta.webId } = ctx.params; // Get key from parameters, id (URI) or the one associated with the webId (in that priority). @@ -200,9 +195,7 @@ const KeysService = { params: { webId: { type: 'string' }, keyType: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message attachToWebId: { type: 'boolean', default: false }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: true; }' is not ... Remove this comment to see the full error message publishKey: { type: 'boolean', default: true } }, async handler(ctx) { @@ -335,7 +328,6 @@ const KeysService = { params: { webId: { type: 'string' }, keyId: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true } }, async handler(ctx) { @@ -422,12 +414,10 @@ const KeysService = { publishPublicKeyLocally: { params: { keyId: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const privateKeyUri = ctx.params.keyId || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri: privateKeyUri })); @@ -463,13 +453,11 @@ const KeysService = { delete: { params: { resourceUri: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const resourceUri = ctx.params.resourceUri || ctx.params.keyObject?.id || ctx.params.keyObject?.['@id']; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId; const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri, webId })); @@ -510,7 +498,6 @@ const KeysService = { getRemotePublicKeys: { params: { webId: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "string"; optional: true; default: s... Remove this comment to see the full error message keyType: { type: 'string', optional: true, default: KEY_TYPES.RSA, nullable: true } }, async handler(ctx) { @@ -561,7 +548,6 @@ const KeysService = { */ getPublicKeyObject: { params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index 23e67df1b..b0b1e1a22 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -35,7 +35,6 @@ const KeysMigrationSchema = { this.logger.info(`=== Migrating keys from filesystem to LDP ===`); // This can cause deadlocks otherwise. - // @ts-expect-error TS(2339): Property 'skipObjectsWatcher' does not exist on ty... Remove this comment to see the full error message ctx.meta.skipObjectsWatcher = true; for (const { webId, username } of accounts) { diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 57bb519e3..799ef2068 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -122,15 +122,12 @@ const HttpSignatureService = { { parentCtx: ctx } ); if (isValid) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = actorUri; return Promise.resolve(); } - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.resolve(null); } @@ -146,11 +143,9 @@ const HttpSignatureService = { { parentCtx: ctx } ); if (isValid) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = actorUri; return Promise.resolve(); } - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 4517ffba3..2ec9bc3f6 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -47,7 +47,6 @@ const ProxyService = { const url = ctx.params.id; const method = ctx.params.method || 'GET'; const headers = JSON.parse(ctx.params.headers) || { accept: 'application/json' }; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const actorUri = ctx.meta.webId; // Only user can query his own proxy URL @@ -75,11 +74,8 @@ const ProxyService = { parentCtx: ctx } ); - // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = response.status; - // @ts-expect-error TS(2339): Property '$statusMessage' does not exist on type '... Remove this comment to see the full error message ctx.meta.$statusMessage = response.statusText; - // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = response.headers; return response.body; } catch (e) { diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 1bb7b1eb4..b3aa4ac37 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -42,17 +42,14 @@ const DataIntegrityService = { */ verifyObject: { params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, options: { type: 'object', optional: true, params: { - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message proofPurpose: { type: 'string', default: 'assertionMethod' } } }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message purpose: { type: 'object', optional: true } }, async handler(ctx) { @@ -80,13 +77,10 @@ const DataIntegrityService = { */ signObject: { params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message object: { type: 'object' }, options: { type: 'object', optional: true, params: { proofPurpose: { type: 'string', optional: true } } }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message purpose: { type: 'object', optional: true }, webId: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index 9a1f852ce..d0aaa7344 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -58,7 +58,6 @@ const VCCredentialsContainer = { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); - // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = { // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ...ctx.meta.$responseHeaders, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index c65ae6549..f116200a5 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -47,7 +47,6 @@ const VCHolderService = { presentation: { type: 'object', params: { - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message verifiableCredential: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }] }, '@context': { type: 'string', optional: true }, id: { type: 'string', optional: true }, @@ -60,14 +59,11 @@ const VCHolderService = { challenge: { type: 'string' }, domain: { type: 'string', optional: true }, proofPurpose: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message persist: { type: 'boolean', default: false } } }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message noAnonRead: { type: 'boolean', default: false }, webId: { type: 'string', optional: true } }, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index fabd6e890..7b18fbd8c 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -62,14 +62,12 @@ const VCCredentialService = { credential: { type: 'object', params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message credentialSubject: { type: 'object' }, '@context': { type: 'string', optional: true }, id: { type: 'string', optional: true }, type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array', items: 'string' }], optional: true }, validFrom: { type: 'string', optional: true }, validUntil: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message proof: { type: 'multi', optional: true, rules: [{ type: 'object' }, { type: 'array', items: 'object' }] } } }, @@ -77,14 +75,11 @@ const VCCredentialService = { type: 'object', default: {}, params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message proofPurpose: { type: 'object', optional: true } } }, webId: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; optional: true; default: ... Remove this comment to see the full error message noAnonRead: { type: 'boolean', optional: true, default: false }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message keyObject: { type: 'object', optional: true }, keyId: { type: 'string', optional: true } }, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index 6a65d6827..068bf815c 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -47,7 +47,6 @@ const VCPresentationContainer = { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); - // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ctx.meta.$responseHeaders = { // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ...ctx.meta.$responseHeaders, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 6d1d83340..28eeeff4e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -45,9 +45,7 @@ const VCPresentationService = { issuer: { type: 'string', optional: true }, validFrom: { type: 'string', optional: true }, validUntil: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message credentialSubject: { type: 'object' }, - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message proof: { type: 'multi', optional: true, rules: [{ type: 'object' }, { type: 'array', items: 'object' }] } } }, @@ -55,7 +53,6 @@ const VCPresentationService = { type: 'object', default: {}, params: { - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message proofPurpose: { type: 'string', default: 'assertionMethod' } } } @@ -89,7 +86,6 @@ const VCPresentationService = { */ verifyPresentation: { params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, options: { type: 'object', @@ -98,13 +94,10 @@ const VCPresentationService = { challenge: { type: 'string', optional: true }, domain: { type: 'string', optional: true }, proofPurpose: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message unsignedPresentation: { type: 'boolean', default: false } } }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message credentialPurpose: { type: 'object', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message presentationPurpose: { type: 'object', optional: true } }, async handler(ctx) { @@ -159,7 +152,6 @@ const VCPresentationService = { */ verifyCapabilityPresentation: { params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message verifiablePresentation: { type: 'object' }, options: { type: 'object', diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index ba80448cb..0cc0b61e0 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -153,7 +153,6 @@ const InferenceSchema = { events: { 'ldp.resource.created': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'newData' does not exist on type 'Optiona... Remove this comment to see the full error message let { newData } = ctx.params; newData = await ctx.call('jsonld.parser.expand', { input: newData }); @@ -186,7 +185,6 @@ const InferenceSchema = { 'ldp.resource.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message let { oldData } = ctx.params; oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); @@ -215,7 +213,6 @@ const InferenceSchema = { 'ldp.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message let { oldData, newData } = ctx.params; oldData = await ctx.call('jsonld.parser.expand', { input: oldData }); newData = await ctx.call('jsonld.parser.expand', { input: newData }); @@ -277,7 +274,6 @@ const InferenceSchema = { 'ldp.resource.patched': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'triplesAdded' does not exist on type 'Op... Remove this comment to see the full error message const { triplesAdded, triplesRemoved, skipInferenceCheck } = ctx.params; // If the patch is done following a remote inference offer diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index 72fe4fa84..197efe1cb 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -22,11 +22,8 @@ const InferenceRemoteSchema = { offerInference: { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message subject: { type: 'string', optional: false }, - // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message predicate: { type: 'string', optional: false }, - // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message object: { type: 'string', optional: false }, // @ts-expect-error TS(2322): Type '{ type: "boolean"; optional: false; }' is no... Remove this comment to see the full error message add: { type: 'boolean', optional: false } diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts index 771141ce3..701e1778a 100644 --- a/src/middleware/packages/jsonld/services/api/index.ts +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -23,10 +23,8 @@ const JsonldApiSchema = { actions: { getContext: { async handler(ctx) { - // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = 'application/ld+json'; // Set cache to 25s - // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseHeaders['Cache-Control'] = 'public, max-age=25, s-maxage=10'; diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index 6f29ce1e5..9521a212d 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -15,7 +15,6 @@ const Schema = { } } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const localContext = await this.actions.getLocal({}, { parentCtx: ctx }); // Include the local context only if it is not empty if (Object.keys(localContext['@context']).length > 0) { diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index 100219b87..70bde765e 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -6,7 +6,6 @@ const Schema = { params: { a: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index 3d34e7c19..5ad95d5bd 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -5,7 +5,6 @@ const Schema = { params: { context: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }] } }, diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 73fc305c4..e17f0c4fc 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -128,7 +128,6 @@ const Schema = { handler(ctx) { return ctx.call('ldp.registry.getUri', { path: this.settings.path, - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId: ctx.params?.webId || ctx.meta?.webId }); } diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 75e419445..494d56a5f 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,4 +1,3 @@ -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { dc } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import { getDatasetFromUri } from '../utils.ts'; @@ -73,10 +72,8 @@ const Schema = { events: { 'ldp.resource.created': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, webId, dataset } = ctx.params; this.actions.tagCreatedResource( - // @ts-expect-error TS(2339): Property 'impersonatedUser' does not exist on type... Remove this comment to see the full error message { resourceUri, newData, webId: ctx.meta.impersonatedUser || webId, dataset }, { parentCtx: ctx } ); diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 0f220430d..623e1d7a5 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,4 +1,3 @@ -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { ldp, semapps } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index c6ad9dd50..f1ef64053 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -49,7 +49,6 @@ const LdpCacheSchema = { events: { 'ldp.resource.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -57,7 +56,6 @@ const LdpCacheSchema = { 'ldp.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -65,7 +63,6 @@ const LdpCacheSchema = { 'ldp.resource.patched': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -73,7 +70,6 @@ const LdpCacheSchema = { 'ldp.container.attached': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -81,7 +77,6 @@ const LdpCacheSchema = { 'ldp.container.patched': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -89,7 +84,6 @@ const LdpCacheSchema = { 'ldp.container.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -97,7 +91,6 @@ const LdpCacheSchema = { 'ldp.container.detached': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri } = ctx.params; await this.actions.invalidateContainer({ containerUri }, { parentCtx: ctx }); } @@ -105,7 +98,6 @@ const LdpCacheSchema = { 'ldp.remote.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -113,7 +105,6 @@ const LdpCacheSchema = { 'ldp.remote.stored': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; await this.actions.invalidateResource({ resourceUri, dataset }, { parentCtx: ctx }); } @@ -122,7 +113,6 @@ const LdpCacheSchema = { 'webacl.resource.updated': { // Invalidate cache also when ACL rights are changed async handler(ctx) { - // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, dataset } = ctx.params; if (isContainer) { await this.actions.invalidateContainer({ containerUri: uri }, { parentCtx: ctx }); diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 8ad5baecd..fe8dd5117 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -15,19 +15,16 @@ const Schema = { }, async handler(ctx) { const { containerUri, resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId }); if (!resourceExists) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const childContainerExists = await this.actions.exist({ containerUri: resourceUri }, { parentCtx: ctx }); if (!childContainerExists) { throw new MoleculerError(`Cannot attach non-existing resource or container: ${resourceUri}`, 404, 'NOT_FOUND'); } } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const containerExists = await this.actions.exist({ containerUri, webId }, { parentCtx: ctx }); if (!containerExists) throw new Error(`Cannot attach to a non-existing container: ${containerUri}`); @@ -47,7 +44,6 @@ const Schema = { containerUri, resourceUri, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index 8ac70199a..93199b935 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -9,10 +9,8 @@ const Schema = { async handler(ctx) { let { containerUri, webId } = ctx.params; - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const resourcesUris = await this.actions.getUris({ containerUri }, { parentCtx: ctx }); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.info(`Deleting ${resourcesUris.length} resources...`); for (let resourceUri of resourcesUris) { diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index d4bfd8065..3e1df1a66 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -6,7 +6,6 @@ const Schema = { containerUri: { type: 'string' }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message options: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 0653dce60..3e0a29642 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -24,15 +24,12 @@ const Schema = { if (!exists) { let parentContainerUri; - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider && (!webId || webId === 'anon' || webId === 'system')) throw new Error(`The webId param is required in Pod provider config. Provided: ${webId}`); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const rootContainerUri = this.settings.podProvider ? await ctx.call('solid-storage.getUrl', { webId }) - : // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - urlJoin(this.settings.baseUrl, '/'); + : urlJoin(this.settings.baseUrl, '/'); const containerPath = containerUri.replace(rootContainerUri, '/'); @@ -41,7 +38,6 @@ const Schema = { parentContainerUri = getParentContainerUri(containerUri); // if it is the root container, add a trailing slash - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!this.settings.podProvider && urlJoin(parentContainerUri, '/') === rootContainerUri) { parentContainerUri = urlJoin(parentContainerUri, '/'); } @@ -50,7 +46,6 @@ const Schema = { if (!parentExists) { // Recursively create the parent containers, without title/description/permissions - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.actions.createAndAttach( { containerUri: parentContainerUri, options: { permissions: {} }, webId }, { parentCtx: ctx } @@ -59,14 +54,12 @@ const Schema = { } // Then create the container - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.actions.create( { containerUri, title, description, options, - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. webId: this.settings.podProvider ? webId : 'system' }, { parentCtx: ctx } diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index b55fc139a..688b33e03 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -4,13 +4,11 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message containerUri: 'string', webId: { type: 'string', optional: true } }, async handler(ctx) { const { containerUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Write', webId }); @@ -41,7 +39,6 @@ const Schema = { const returnValues = { containerUri, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, webId }; diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index 9f9cd021f..15ab84a41 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -10,7 +10,6 @@ const Schema = { }, async handler(ctx) { let { containerUri, resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const isRemoteContainer = await ctx.call('ldp.remote.isRemote', { resourceUri: containerUri }); @@ -19,7 +18,6 @@ const Schema = { if (isRemoteContainer) return; // indeed, we never have the root container on a mirror. containerUri = urlJoin(containerUri, '/'); } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const containerExists = await this.actions.exist({ containerUri, webId }, { parentCtx: ctx }); if (!containerExists && isRemoteContainer) return; if (!containerExists) throw new Error(`Cannot detach from a non-existing container: ${containerUri}`); @@ -36,7 +34,6 @@ const Schema = { webId }); - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!isRemoteContainer && !ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.detached', diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 811f426a6..52d495362 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -10,11 +10,8 @@ const Schema = { containerUri: { type: 'string', optional: true }, webId: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message filters: { type: 'object', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message doNotIncludeResources: { type: 'boolean', default: false }, - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index 74fd71c04..41e4dd696 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -11,7 +11,6 @@ const Schema = { }, async handler(ctx) { const { containerUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const { dataset } = ctx.meta; diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 9422ff063..d1df7fddd 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -25,12 +25,10 @@ const Schema = { containerUri: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToAdd: { type: 'array', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToRemove: { type: 'array', optional: true @@ -42,7 +40,6 @@ const Schema = { }, async handler(ctx) { const { containerUri, triplesToAdd, triplesToRemove } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourcesAdded = []; const resourcesRemoved = []; @@ -73,7 +70,6 @@ const Schema = { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (e.code === 404 && isMirror(resourceUri, this.settings.baseUrl)) { // We need to import the remote resource - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.info(`Importing ${resourceUri}...`); try { await ctx.call('ldp.remote.store', { @@ -117,7 +113,6 @@ const Schema = { } } } - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.patched', diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 30a878fe5..54b764aa1 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -15,12 +15,10 @@ const Schema = { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message resource: { type: 'object', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message file: { type: 'object', optional: true @@ -40,7 +38,6 @@ const Schema = { }, async handler(ctx) { let { resource, containerUri, slug, contentType, file, forcedResourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let isContainer = false; let expandedResource; @@ -81,7 +78,6 @@ const Schema = { const containerExist = await ctx.call('ldp.container.exist', { containerUri }); if (!containerExist) { throw new MoleculerError( - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Cannot create resource in non-existing container ${containerUri} (webId ${webId} / dataset ${ctx.meta.dataset})`, 400, 'BAD_REQUEST' diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index 2df8eb2fb..a53aaea9d 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -9,9 +9,7 @@ const Schema = { visibility: 'public', params: { uri: { type: 'string' }, - // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message type: { type: 'enum', values: ['resource', 'container', 'custom'], default: 'resource' }, - // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message mode: { type: 'enum', values: ['acl:Read', 'acl:Write', 'acl:Append', 'acl:Control'], default: 'acl:Read' }, webId: { type: 'string', optional: true } }, diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index 9cc05bdfa..6b37aac90 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -4,19 +4,15 @@ const Schema = { visibility: 'public', params: { uri: { type: 'string' }, - // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message type: { type: 'enum', values: ['resource', 'container', 'custom'], default: 'resource' }, - // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message mode: { type: 'enum', values: ['acl:Read', 'acl:Write', 'acl:Append', 'acl:Control'], default: 'acl:Read' }, webId: { type: 'string', optional: true } }, async handler(ctx) { const { uri, type, mode } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // If no authorizers have been registered, assume user can access everything - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.authorizers.length === 0) return true; if (webId === 'system') return true; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.ts b/src/middleware/packages/ldp/services/registry/actions/getByType.ts index 87670493d..79cdd706e 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByType.ts @@ -7,7 +7,6 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } }, async handler(ctx) { diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 7f075537c..6d8de91c4 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -24,12 +24,10 @@ const Schema = { if (containerUri) { const basePath = await ctx.call('ldp.getBasePath'); const path = new URL(containerUri).pathname.replace(basePath, '/'); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const registeredContainers = await this.actions.list({}, { parentCtx: ctx }); const containerOptions = // @ts-expect-error TS(18046): 'container' is of type 'unknown'. Object.values(registeredContainers).find(container => container.pathRegex.test(path)) || {}; - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. return { ...this.settings.defaultOptions, ...containerOptions }; } // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index a7a87091e..f5e43c45a 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -14,7 +14,6 @@ const Schema = { async handler(ctx) { const { path, webId } = ctx.params; - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider) { if (webId === 'system' || webId === 'anon') throw new Error(`You must provide a real webId param in Pod provider config. Received: ${webId}`); diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index 61765d32d..a5396ea11 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -13,28 +13,22 @@ const Schema = { fullPath: { type: 'string', optional: true }, name: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message acceptedTypes: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, shapeTreeUri: { type: 'string', optional: true }, excludeFromMirror: { type: 'boolean', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: true; }' is not ... Remove this comment to see the full error message activateTombstones: { type: 'boolean', default: true }, // @ts-expect-eslugParts(rror TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message permissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message newResourcesPermissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message controlledActions: { type: 'object', optional: true }, readOnly: { type: 'boolean', optional: true }, typeIndex: { type: 'string', optional: true } }, async handler(ctx) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. let options = { ...this.settings.defaultOptions, ...ctx.params }; // TODO Remove this when we stop using the type for the container path if (!options.acceptedTypes && options.shapeTreeUri) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const services = await this.broker.call('$node.services'); if (!services.some((s: any) => s.name === 'shape-trees') && !services.some((s: any) => s.name === 'shacl')) throw new Error('If you use shapeTreeUri in container options, you need the shape-trees and shacl service'); @@ -63,7 +57,6 @@ const Schema = { } // If the resource type is invalid, an error will be thrown here options.path = await ctx.call('ldp.container.getPath', { resourceType: options.acceptedTypes[0] }); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.debug( `Automatically generated the path ${options.path} for resource type ${options.acceptedTypes[0]}` ); @@ -81,13 +74,11 @@ const Schema = { if (options.podsContainer === true) { // Skip container creation for the root PODs container (it is not a real LDP container since no dataset have these data) - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. } else if (this.settings.podProvider) { // TODO see if we can base ourselves on a general config for the POD data path options.fullPath = pathJoin('/:username([^/.][^/]+)', 'data', options.path); } else { await ctx.call('ldp.container.createAndAttach', { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. containerUri: urlJoin(this.settings.baseUrl, options.path), options }); diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index 156baed68..94e24e679 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -9,19 +9,15 @@ const Schema = { }, async handler(ctx) { const { resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!urlJoin(resourceUri, '/').startsWith(this.settings.baseUrl)) { // The resource is on another server return true; } else { // If the resource is on the same Pod provider, it may be on a different Pod - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.settings.podProvider) { // For special URLs starting with a dot (such as /.well-known), don't check datasets - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '/.'))) return false; if (!dataset) diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index 0776cbbc8..fddbc5e80 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -6,7 +6,6 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message predicates: { type: 'array', optional: true }, delayMs: { type: 'number', optional: true }, maxTries: { type: 'number', optional: true }, diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index ecf5272a3..c288227bf 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -6,7 +6,6 @@ const { MoleculerError } = Errors; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, resourceUri: { type: 'string' }, webId: { @@ -20,7 +19,6 @@ const Schema = { }, async handler(ctx) { let { resource, resourceUri, contentType } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (contentType && contentType !== MIME_TYPES.JSON) @@ -68,7 +66,6 @@ const Schema = { resourceUri, newData, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 442ce00ed..2a20741ab 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -4,13 +4,11 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', webId: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { @@ -57,7 +55,6 @@ const Schema = { containersUris, oldData, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index cb2c62510..29666223a 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -4,13 +4,11 @@ const Schema = { visibility: 'public', params: { resourceUri: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: true; }' is not ... Remove this comment to see the full error message acceptTombstones: { type: 'boolean', default: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri, acceptTombstones } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index 124f01f60..0d63a6ee6 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -8,10 +8,8 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message containerUri: 'string', slug: { type: 'string', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message isContainer: { type: 'boolean', default: false } }, async handler(ctx) { @@ -26,15 +24,11 @@ const Schema = { } // Do not use the root container URI if the resource is a container - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if ((!this.settings.resourcesWithContainerPath || !containerUri) && !isContainer) { // Use the root container URI - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. containerUri = this.settings.podProvider - ? // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) - : // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - this.settings.baseUrl; + ? await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) + : this.settings.baseUrl; } let resourceAlreadyExists = await ctx.call('ldp.resource.exist', { diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index 02e9c7351..90022a837 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -4,13 +4,11 @@ import { getContainerFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', dataset: { type: 'string', optional: true } }, async handler(ctx) { const { resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset; // In the POD provider config, the root container with actors is not a real LDP container diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 0f9d8eb0a..376e23895 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -25,12 +25,10 @@ const Schema = { resourceUri: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToAdd: { type: 'array', optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "array"; optional: true; }' is not a... Remove this comment to see the full error message triplesToRemove: { type: 'array', optional: true @@ -46,7 +44,6 @@ const Schema = { }, async handler(ctx) { let { resourceUri, triplesToAdd, triplesToRemove, skipInferenceCheck, webId } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; if (await ctx.call('ldp.remote.isRemote', { resourceUri })) @@ -100,7 +97,6 @@ const Schema = { triplesRemoved: triplesToRemove, skipInferenceCheck, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index e2e64cddd..537d63ab9 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -7,7 +7,6 @@ const { MoleculerError } = Errors; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, @@ -23,7 +22,6 @@ const Schema = { async handler(ctx) { let { resource, contentType } = ctx.params; let { webId } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; let newData; @@ -37,7 +35,6 @@ const Schema = { if (await ctx.call('ldp.remote.isRemote', { resourceUri })) throw new MoleculerError( - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. `Remote resource ${resourceUri} cannot be modified (dataset: ${ctx.meta.dataset})`, 403, 'FORBIDDEN' @@ -70,22 +67,17 @@ const Schema = { let newTriples = await ctx.call('jsonld.parser.toQuads', { input: resource }); // blank nodes are convert to variable for sparql query (?variable) - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message oldTriples = this.convertBlankNodesToVars(oldTriples); - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message newTriples = this.convertBlankNodesToVars(newTriples); // same values blackNodes removing because those duplicated values blank nodes cause indiscriminate blank resultings in bug wahen trying to delete both - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message newTriples = this.removeDuplicatedVariables(newTriples); // Triples to add are reversed, so that blank nodes are linked to resource before being assigned data properties // Triples to remove are not reversed, because we want to remove the data properties before unlinking it from the resource // This is needed, otherwise we have permissions violations with the WebACL (orphan blank nodes cannot be edited, except as "system") - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message const triplesToAdd = this.getTriplesDifference(newTriples, oldTriples).reverse(); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const triplesToRemove = this.getTriplesDifference(oldTriples, newTriples); if (triplesToAdd.length === 0 && triplesToRemove.length === 0) { @@ -100,7 +92,6 @@ const Schema = { } // Keep track of blank nodes to use in WHERE clause - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message const newBlankNodes = this.getTriplesDifference(newTriples, oldTriples).filter( (triple: any) => triple.object.termType === 'Variable' ); @@ -110,14 +101,10 @@ const Schema = { // Generate the query let query = `WITH <${resourceUri}>\n`; - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (triplesToRemove.length > 0) query += `DELETE { ${this.triplesToString(triplesToRemove)} } `; - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; query += 'WHERE { '; - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (existingBlankNodes.length > 0) query += this.triplesToString(existingBlankNodes); - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (newBlankNodes.length > 0) query += this.bindNewBlankNodes(newBlankNodes); query += ` }`; @@ -141,7 +128,6 @@ const Schema = { } ); - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.resource.updated', diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index eda38ec4b..8be4050df 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -8,9 +8,7 @@ const { MoleculerError } = Errors; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string', - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message file: 'object' }, async handler(ctx) { diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index 6edc3a3e0..f71a77450 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -25,23 +25,16 @@ const LdpResourceSchema = { }, dependencies: ['triplestore', 'jsonld'], actions: { - // @ts-expect-error awaitCreateComplete: awaitCreateCompleteAction, - // @ts-expect-error create: createAction, - // @ts-expect-error delete: deleteAction, exist: existAction, - // @ts-expect-error generateId: generateIdAction, // @ts-expect-error get: getAction, getContainers: getContainersAction, - // @ts-expect-error getTypes: getTypesAction, - // @ts-expect-error patch: patchAction, - // @ts-expect-error put: putAction, // @ts-expect-error upload: uploadAction diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 52c04a1b9..9ad9cec21 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -6,7 +6,6 @@ const regexPrefix = /^([^:]+):([^:]+)$/gm; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message value: 'string' }, cache: true, diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index 7444cde62..7ecb57803 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -4,20 +4,15 @@ import { isURL, arrayOf } from '../utils.ts'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message prefix: 'string', - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message namespace: 'string', owl: { type: 'string', optional: true }, jsonldContext: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message preserveContextUri: { type: 'boolean', default: false }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message persist: { type: 'boolean', default: false } }, async handler(ctx) { @@ -32,7 +27,6 @@ const Schema = { } if (persist) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!this.settings.persistRegistry) throw new Error(`Cannot persist ontology because the persistRegistry setting is false`); if (owl || jsonldContext) throw new Error(`The owl and jsonldContext params cannot be persisted`); @@ -42,13 +36,11 @@ const Schema = { namespace }); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.ontologies[prefix] = { prefix, namespace }; } else { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.ontologies[prefix] = { prefix, namespace, @@ -58,9 +50,7 @@ const Schema = { }; } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (this.broker.cacher) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.broker.cacher.clean('ontologies.**'); // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.broker.cacher.clean('jsonld.context.**'); diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index ec3fdde94..eb2ae2bda 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -32,15 +32,12 @@ const OntologiesSchema = { await this.registerAll(); }, actions: { - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { uri: strin... Remove this comment to see the full error message findPrefix: findPrefixAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { prefix: st... Remove this comment to see the full error message findNamespace: findNamespaceAction, get: getAction, getPrefixes: getPrefixesAction, getRdfPrefixes: getRdfPrefixesAction, list: listAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { value: str... Remove this comment to see the full error message prefixToUri: prefixToUriAction, // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { prefix: st... Remove this comment to see the full error message register: registerAction diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 50fadee16..c881422de 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -25,16 +25,13 @@ const SparqlEndpointService = { actions: { query: { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'rawBody' does not exist on type '{}'. const query = ctx.params.query || ctx.meta.rawBody; - // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; if (this.settings.podProvider) { const [account] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); if (!account) throw new Error(`No account found with username ${ctx.params.username}`); - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { throw new Error(`You can only query your own SPARQL endpoint`); } @@ -45,13 +42,10 @@ const SparqlEndpointService = { accept, dataset: this.settings.podProvider ? ctx.params.username : undefined, // In Pod provider config, query as system when the Pod owner is querying his own data - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId: this.settings.ignoreAcl ? 'system' : ctx.meta.webId }); - // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message if (ctx.meta.$responseType === undefined) { - // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = ctx.meta.responseType || accept; } diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index 2af773908..2f58e187f 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -20,7 +20,6 @@ const Schema = { } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts index e80417735..6aa4e90da 100644 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts +++ b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts @@ -13,7 +13,6 @@ const Schema = { } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; const { graphName } = ctx.params; diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index 96906aa08..4757e48a1 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -14,9 +14,7 @@ const Schema = { } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 6a7e8e045..f0bb87456 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -4,7 +4,6 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message resource: { type: 'object' }, @@ -23,9 +22,7 @@ const Schema = { }, async handler(ctx) { const { resource, graphName } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; // Convert JSON-LD to N-Quads diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index d40b5c21e..c19198a2e 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -7,10 +7,8 @@ const Schema = { params: { query: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, - // @ts-expect-error TS(2322): Type '{ type: "string"; default: string; }' is not... Remove this comment to see the full error message accept: { type: 'string', default: MIME_TYPES.JSON @@ -26,22 +24,18 @@ const Schema = { }, async handler(ctx) { let { accept, query } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!dataset) throw new Error(`No dataset defined for triplestore query: ${query}`); if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) throw new Error(`The dataset ${dataset} doesn't exist`); - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (typeof query === 'object') query = this.generateSparqlQuery(query); const acceptNegotiatedType = negotiateType(accept); const acceptType = acceptNegotiatedType.mime; - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const response = await this.fetch(urlJoin(this.settings.url, dataset, 'query'), { body: query, headers: { @@ -54,7 +48,6 @@ const Schema = { // we don't use the property ctx.meta.$responseType because we are not in a HTTP API call here // we are in an moleculer Action. // we use a different name (without the $) and then retrieve this value in the API action (sparqlendpoint.query) to set the $responseType - // @ts-expect-error TS(2339): Property 'responseType' does not exist on type '{}... Remove this comment to see the full error message ctx.meta.responseType = response.headers.get('content-type'); const regex = /(CONSTRUCT|SELECT|ASK).*/gm; diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts index 9da86992b..eba7690e9 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -3,7 +3,6 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message triple: { type: 'object' }, @@ -22,7 +21,6 @@ const Schema = { }, async handler(ctx) { const { triple, graphName } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index 128df4166..abd49d0d9 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -6,7 +6,6 @@ const Schema = { params: { query: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message rules: [{ type: 'string' }, { type: 'object' }] }, webId: { @@ -20,16 +19,13 @@ const Schema = { }, async handler(ctx) { let { query } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. let dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.mainDataset; if (!dataset) throw new Error(`No dataset defined for triplestore update: ${query}`); if (dataset !== '*' && !(await ctx.call('triplestore.dataset.exist', { dataset }))) throw new Error(`The dataset ${dataset} doesn't exist`); - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message if (typeof query === 'object') query = this.generateSparqlQuery(query); // Handle wildcard diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index e99699dbb..797bb0e99 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -111,7 +111,6 @@ const VoidSchema = { getRemote: { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message serverUrl: { type: 'string', optional: false } }, async handler(ctx) { @@ -222,7 +221,6 @@ const VoidSchema = { addClassPartition(thisServer, p, graph, i); } - // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = accept; // TODO use Etag instead to keep track of changes in VOID diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index 0e0a13c2b..e93ed9dbe 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -33,7 +33,6 @@ const AuthorizerBotSchema = { events: { 'ldp.resource.created': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; for (const rule of this.settings.rules) { if (this.matchRule(rule, newData)) { @@ -64,7 +63,6 @@ const AuthorizerBotSchema = { 'ldp.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData, oldData } = ctx.params; for (const rule of this.settings.rules) { diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index 0cfd3fa10..c31148cf0 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -86,7 +86,6 @@ const GroupsManagerSchema = { 'ldp.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; if (this.isUser(newData)) { for (const rule of this.settings.rules) { @@ -112,7 +111,6 @@ const GroupsManagerSchema = { 'ldp.resource.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, oldData } = ctx.params; if (this.isUser(oldData)) { for (const rule of this.settings.rules) { diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index c82967479..9dcfffe2f 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -19,7 +19,6 @@ const WebaclSchema = { const { baseUrl, graphName, podProvider, superAdmins } = this.settings; this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "webacl.resource"; settings: { baseU... Remove this comment to see the full error message mixins: [WebAclResourceService], settings: { baseUrl, diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index f74f51931..1fda30993 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -70,7 +70,6 @@ const WebaclCacheSchema = { events: { 'webacl.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer, defaultRightsUpdated } = ctx.params; await this.actions.invalidateResourceRights( { uri, specificUriOnly: !isContainer || !defaultRightsUpdated }, @@ -81,7 +80,6 @@ const WebaclCacheSchema = { 'webacl.resource.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'uri' does not exist on type 'Optionalize... Remove this comment to see the full error message const { uri, isContainer } = ctx.params; await this.actions.invalidateResourceRights({ uri, specificUriOnly: !isContainer }, { parentCtx: ctx }); } @@ -89,7 +87,6 @@ const WebaclCacheSchema = { 'webacl.resource.user-deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; await this.actions.invalidateAllUserRights({ uri: webId }, { parentCtx: ctx }); } @@ -97,7 +94,6 @@ const WebaclCacheSchema = { 'webacl.group.member-added': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); await this.actions.invalidateAllUserRights({ uri: memberUri }, { parentCtx: ctx }); @@ -106,7 +102,6 @@ const WebaclCacheSchema = { 'webacl.group.member-removed': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'groupUri' does not exist on type 'Option... Remove this comment to see the full error message const { groupUri, memberUri } = ctx.params; await this.actions.invalidateResourceRights({ uri: groupUri, specificUriOnly: true }, { parentCtx: ctx }); // @ts-expect-error TS(2339): Property 'actions' does not exist on type 'Service... Remove this comment to see the full error message diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index f569ea666..49adaf53e 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -26,7 +26,6 @@ export const action = { }, async handler(ctx) { let { groupSlug, groupUri, memberUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 931b118ab..5baf7c756 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -32,7 +32,6 @@ export const action = { }, async handler(ctx) { let { groupUri, groupSlug } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri) { diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index 0598cbc57..b214fa263 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -23,7 +23,6 @@ export const action = { }, async handler(ctx) { let { groupSlug, groupUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 432943ec4..c3850feb0 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -20,7 +20,6 @@ export const action = { }, async handler(ctx) { let { groupSlug, groupUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 240253b16..310c683a4 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -14,7 +14,6 @@ export const action = { }, async handler(ctx) { let { groupSlug, groupUri, memberId } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 64e5ef7a9..1a7f8ce56 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -27,7 +27,6 @@ export const action = { }, async handler(ctx) { let { groupSlug, groupUri, memberUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index 15869a01b..48fd9e72e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -42,18 +42,14 @@ export const action = { webId: { type: 'string', optional: true }, // addedRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } // you will most likely prefer to use additionalRights instead. - // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message addedRights: { type: 'array', optional: true, min: 1 }, // newRights is used to add rights to a non existing resource. - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message newRights: { type: 'object', optional: true }, // additionalRights is used to add rights to an existing resource. - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: true; }' is not ... Remove this comment to see the full error message additionalRights: { type: 'object', optional: true } }, async handler(ctx) { let { webId, addedRights, resourceUri, newRights, additionalRights } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; let difference; diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 155d9d072..8c200432d 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -216,7 +216,6 @@ export const action = { }, async handler(ctx) { let { resourceUri, webId, accept, skipResourceCheck } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; accept = accept || MIME_TYPES.TURTLE; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index af712734f..5d36b8625 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -103,7 +103,6 @@ export const action = { rights: { type: 'object', optional: true, - // @ts-expect-error TS(2353): Object literal may only specify known properties, ... Remove this comment to see the full error message strict: true, props: { read: { type: 'boolean', optional: true }, diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 6c8d59631..ba068b7dd 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -6,16 +6,13 @@ const { MoleculerError } = Errors; export const action = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message resourceUri: { type: 'string', optional: false }, webId: { type: 'string', optional: true }, /** In nested json format (e.g. `{anon: {read: true}}`) */ - // @ts-expect-error TS(2322): Type '{ type: "object"; optional: false; }' is not... Remove this comment to see the full error message rights: { type: 'object', optional: false } }, async handler(ctx) { let { resourceUri, rights } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const aclUri = getAclUriFromResourceUri(this.settings.baseUrl, resourceUri); diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 21aa60e82..a1196b75a 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -40,13 +40,11 @@ export const action = { resourceUri: { type: 'string' }, webId: { type: 'string', optional: true }, // newRights is an array of objects of the form { auth: 'http://localhost:3000/_acl/container29#Control', p: 'http://www.w3.org/ns/auth/acl#agent', o: 'https://data.virtual-assembly.org/users/sebastien.rosset' } - // @ts-expect-error TS(2322): Type '{ type: "array"; optional: false; min: numbe... Remove this comment to see the full error message newRights: { type: 'array', optional: false, min: 1 } // minimum is one right : We cannot leave a resource without rights. }, async handler(ctx) { let { webId, newRights, resourceUri } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; const isContainer = await this.checkResourceOrContainerExists(ctx, resourceUri); diff --git a/src/middleware/tests/activitypub/actors.test.ts b/src/middleware/tests/activitypub/actors.test.ts index adc6e7439..d093831c7 100644 --- a/src/middleware/tests/activitypub/actors.test.ts +++ b/src/middleware/tests/activitypub/actors.test.ts @@ -1,17 +1,14 @@ import urlJoin from 'url-join'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(70000); const NUM_USERS = 1; -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Actors are correctly created', () => { let broker: any; const actors: any = []; let alice: any; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); @@ -26,26 +23,17 @@ describe('Actors are correctly created', () => { alice = actors[1]; }); - // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Actor has the required informations', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.type).toContain('Person'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.preferredUsername).toBe('alice'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.outbox).toBe(urlJoin(alice.id, 'outbox')); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.inbox).toBe(urlJoin(alice.id, 'inbox')); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.followers).toBe(urlJoin(alice.id, 'followers')); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.following).toBe(urlJoin(alice.id, 'following')); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(alice.publicKey).toMatchObject({ // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['https://www.w3.org/ns/auth/rsa#RSAKey', 'sec:VerificationMethod']), diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index bb9f2b2e6..d960a5318 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -4,7 +4,6 @@ import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; @@ -16,7 +15,6 @@ afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Collections API', () => { const items: any = []; // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message @@ -24,7 +22,6 @@ describe('Collections API', () => { let collectionUri: any; let localContext: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create ressources', async () => { for (let i = 0; i < 10; i++) { items.push( @@ -41,11 +38,9 @@ describe('Collections API', () => { }) ); } - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(items).toHaveLength(10); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create collection', async () => { localContext = await broker.call('jsonld.context.get'); @@ -60,10 +55,8 @@ describe('Collections API', () => { collectionUri = headers.get('Location'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collectionUri).not.toBeNull(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, @@ -74,7 +67,6 @@ describe('Collections API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Add item to collection', async () => { await fetchServer(collectionUri, { method: 'PATCH', @@ -87,7 +79,6 @@ describe('Collections API', () => { ` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, @@ -99,7 +90,6 @@ describe('Collections API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove item from collection', async () => { await fetchServer(collectionUri, { method: 'PATCH', @@ -112,7 +102,6 @@ describe('Collections API', () => { ` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, @@ -123,7 +112,6 @@ describe('Collections API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Paginated collection', async () => { const { headers } = await fetchServer(collectionsContainersUri, { method: 'POST', @@ -149,7 +137,6 @@ describe('Collections API', () => { ` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(paginatedCollectionUri)).resolves.toMatchObject({ json: { id: paginatedCollectionUri, @@ -162,7 +149,6 @@ describe('Collections API', () => { } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`) ).resolves.toMatchObject({ @@ -171,12 +157,10 @@ describe('Collections API', () => { type: 'CollectionPage', partOf: paginatedCollectionUri, next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[5])}`, - // @ts-expect-error TS(2304): Cannot find name 'expect'. items: expect.arrayContaining([items[9], items[8], items[7], items[6]]) } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[1])}`) ).resolves.toMatchObject({ diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index b2b1e6c52..082ef7e70 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -2,7 +2,6 @@ import urlJoin from 'url-join'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; @@ -10,19 +9,16 @@ beforeAll(async () => { broker = await initialize(3000, 'testData', 'settings'); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Collections', () => { const items: any = []; let collectionUri: any; let orderedCollectionUri: any; let cursorBasedCollectionUri: any; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // Create test items for (let i = 0; i < 10; i++) { @@ -81,16 +77,13 @@ describe('Collections', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Collection exists', async () => { const collectionExist = await broker.call('activitypub.collection.exist', { resourceUri: collectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collectionExist).toBeTruthy(); const collection = await broker.call('activitypub.collection.get', { resourceUri: collectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionUri, type: 'Collection', @@ -99,14 +92,12 @@ describe('Collections', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get collection with custom jsonContext', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: collectionUri, jsonContext: { as: 'https://www.w3.org/ns/activitystreams#' } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ '@id': collectionUri, '@type': 'as:Collection', @@ -115,18 +106,15 @@ describe('Collections', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ordered collection exists', async () => { const collectionExist = await broker.call('activitypub.collection.exist', { resourceUri: orderedCollectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collectionExist).toBeTruthy(); const collection = await broker.call('activitypub.collection.get', { resourceUri: orderedCollectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: orderedCollectionUri, type: 'OrderedCollection', @@ -137,7 +125,6 @@ describe('Collections', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Add and remove item from collection', async () => { await broker.call('activitypub.collection.add', { collectionUri, @@ -148,7 +135,6 @@ describe('Collections', () => { resourceUri: collectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionUri, type: 'Collection', @@ -165,7 +151,6 @@ describe('Collections', () => { resourceUri: collectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionUri, type: 'Collection', @@ -176,7 +161,6 @@ describe('Collections', () => { expect(collection.items).toBeUndefinedOrEmptyArray(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get collection with dereference items', async () => { const collectionWithDereferenceUri = await broker.call('activitypub.collection.post', { resource: { @@ -196,7 +180,6 @@ describe('Collections', () => { resourceUri: collectionWithDereferenceUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: collectionWithDereferenceUri, type: 'Collection', @@ -210,7 +193,6 @@ describe('Collections', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Items are sorted in descending order (default)', async () => { await broker.call('activitypub.collection.add', { collectionUri: orderedCollectionUri, @@ -236,14 +218,12 @@ describe('Collections', () => { resourceUri: orderedCollectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: orderedCollectionUri, orderedItems: [items[6], items[4], items[2], items[0]] }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Items are sorted in ascending order', async () => { const ascOrderedCollectionUri = await broker.call('activitypub.collection.post', { resource: { @@ -279,18 +259,15 @@ describe('Collections', () => { resourceUri: ascOrderedCollectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: ascOrderedCollectionUri, orderedItems: [items[0], items[2], items[4], items[6]] }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Pagination', () => { let paginatedCollectionUri: any; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // Create collection for pagination tests paginatedCollectionUri = await broker.call('activitypub.collection.post', { @@ -311,13 +288,11 @@ describe('Collections', () => { } }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should return first and last page links for unpaginated request', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: paginatedCollectionUri, first: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, @@ -325,49 +300,39 @@ describe('Collections', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should navigate forward with afterEq cursor', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, afterEq: items[9] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[5])}` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(4); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toEqual([items[9], items[8], items[7], items[6]]); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should navigate backward with beforeEq cursor', async () => { const collection = await broker.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, beforeEq: items[5] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[5])}`, type: 'CollectionPage', partOf: paginatedCollectionUri, prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[9])}` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(4); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toEqual([items[8], items[7], items[6], items[5]]); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Edge Cases', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle empty collection', async () => { const emptyCollectionUri = await broker.call('activitypub.collection.post', { resource: { @@ -382,20 +347,16 @@ describe('Collections', () => { resourceUri: emptyCollectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ id: emptyCollectionUri, type: 'Collection' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.first).toBeUndefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.last).toBeUndefined(); // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toBeUndefinedOrEmptyArray(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle collection with exactly itemsPerPage items', async () => { const exactCollectionUri = await broker.call('activitypub.collection.post', { resource: { @@ -419,18 +380,14 @@ describe('Collections', () => { afterEq: items[3] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection).toMatchObject({ type: 'CollectionPage', partOf: exactCollectionUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.next).toBeUndefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(4); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle last page with remaining items', async () => { // Get last page of main paginated collection (should have 2 items) const collection = await broker.call('activitypub.collection.get', { @@ -438,16 +395,12 @@ describe('Collections', () => { afterEq: items[1] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.items).toHaveLength(2); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(collection.next).toBeUndefined(); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Data Consistency', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should maintain consistent page size across navigation', async () => { // Navigate through all pages and verify each has correct size (except last) let cursor = items[9]; @@ -461,7 +414,6 @@ describe('Collections', () => { }); if (page.next) { - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(page.items).toHaveLength(4); } @@ -476,14 +428,11 @@ describe('Collections', () => { } // With 10 items and page size 4, we should have 3 pages - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(pageCount).toBe(3); // Should have seen all items exactly once - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(seenItems.size).toBe(10); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle navigation between pages consistently', async () => { // Forward navigation const firstPage = await broker.call('activitypub.collection.get', { @@ -504,19 +453,15 @@ describe('Collections', () => { }); // Verify we get back to the same items - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(firstPage.items).toEqual(prevPage.items); }); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Error Handling', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should return 404 when collection does not exist', async () => { // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const nonExistentUri = urlJoin(CONFIG.HOME_URL, 'as/collection/non-existent'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri: nonExistentUri @@ -524,11 +469,9 @@ describe('Collections', () => { ).rejects.toThrow('not found'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should return 404 when cursor not found in collection', async () => { // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const invalidCursorUri = urlJoin(CONFIG.HOME_URL, 'as/object/non-existent'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri: cursorBasedCollectionUri, @@ -537,9 +480,7 @@ describe('Collections', () => { ).rejects.toThrow('Cursor not found'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should reject when both beforeEq and afterEq are provided', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri: cursorBasedCollectionUri, @@ -549,7 +490,6 @@ describe('Collections', () => { ).rejects.toThrow('Cannot get a collection with both beforeEq and afterEq'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Should handle malformed collection URI', async () => { const malformedUri = 'not-a-valid-uri'; // @ts-expect-error TS(2304): Cannot find name 'expect'. diff --git a/src/middleware/tests/activitypub/follow.test.ts b/src/middleware/tests/activitypub/follow.test.ts index 75c7af347..cf4ee9e3b 100644 --- a/src/middleware/tests/activitypub/follow.test.ts +++ b/src/middleware/tests/activitypub/follow.test.ts @@ -2,7 +2,6 @@ import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50_000); const NUM_USERS = 2; @@ -13,7 +12,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe let bob: any; let followActivity: any; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -38,7 +36,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe bob = actors[2]; }); - // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -49,7 +46,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe } }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Follow user', async () => { followActivity = await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -62,7 +58,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) ).resolves.toBeTruthy(); @@ -80,11 +75,8 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), webId: bob.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.ACCEPT, actor: alice.id, @@ -96,7 +88,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Send message to followers', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -108,7 +99,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe content: 'My first message, happy to be part of the fediverse !' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity).toMatchObject({ type: ACTIVITY_TYPES.CREATE, object: { @@ -128,18 +118,14 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe webId: bob.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(2); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ id: createActivity.id }); }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Unfollow user', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, diff --git a/src/middleware/tests/activitypub/inbox.test.ts b/src/middleware/tests/activitypub/inbox.test.ts index e215a62df..fede19a01 100644 --- a/src/middleware/tests/activitypub/inbox.test.ts +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -2,7 +2,6 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50_000); let broker: any; let broker2: any; @@ -16,12 +15,10 @@ afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Permissions are correctly set on inbox', () => { let simon: any; let sebastien: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { username: 'srosset81', @@ -41,10 +38,8 @@ describe('Permissions are correctly set on inbox', () => { simon = await broker2.call('activitypub.actor.awaitCreateComplete', { actorUri: simonUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(sebastien).toMatchObject({ id: sebastienUri, - // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['Person', 'foaf:Person']), preferredUsername: 'srosset81', 'foaf:nick': 'srosset81', @@ -55,10 +50,8 @@ describe('Permissions are correctly set on inbox', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Inbox response for an actor that does not exist', async () => { const resourceUri = simon.inbox.replace('simonlouvet', 'unknown'); // 'http://localhost:3000/as/actor/simonlouvet/inbox', - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.get', { resourceUri, @@ -67,7 +60,6 @@ describe('Permissions are correctly set on inbox', () => { ).rejects.toThrow('not found'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post private message to friend', async () => { const item = await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -84,9 +76,7 @@ describe('Permissions are correctly set on inbox', () => { afterEq: item.id, webId: simon.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -104,9 +94,7 @@ describe('Permissions are correctly set on inbox', () => { afterEq: item.id, webId: sebastien.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -124,12 +112,10 @@ describe('Permissions are correctly set on inbox', () => { afterEq: item.id, webId: 'anon' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems.length).toBe(0); }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post public message', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -151,9 +137,7 @@ describe('Permissions are correctly set on inbox', () => { webId: simon.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(2); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -175,9 +159,7 @@ describe('Permissions are correctly set on inbox', () => { afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), webId: sebastien.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(2); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -199,7 +181,6 @@ describe('Permissions are correctly set on inbox', () => { afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems).toHaveLength(1); // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 1e72c2fd8..8a0be9c04 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -11,7 +11,6 @@ import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; import { dropDataset, clearQueue } from '../utils.ts'; -// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); const containers = [ { diff --git a/src/middleware/tests/activitypub/like.test.ts b/src/middleware/tests/activitypub/like.test.ts index edf29371c..2876e56d3 100644 --- a/src/middleware/tests/activitypub/like.test.ts +++ b/src/middleware/tests/activitypub/like.test.ts @@ -2,7 +2,6 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); const NUM_USERS = 2; @@ -13,7 +12,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( let bob: any; let aliceMessageUri: any; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -38,7 +36,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( bob = actors[2]; }); - // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -49,7 +46,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( } }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob likes Alice message', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -72,7 +68,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure the /likes collection has been created await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('ldp.resource.get', { resourceUri: aliceMessageUri @@ -84,7 +79,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure Bob has been added to the /likes collection await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }) ).resolves.toMatchObject({ @@ -95,7 +89,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure the note has been added to Bob's /liked collection await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` })).resolves.toMatchObject({ type: 'Collection', items: aliceMessageUri @@ -103,7 +96,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob undo his like', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -119,7 +111,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( // Ensure Bob has been removed from the /likes collection await waitForExpect(async () => { const likes = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(likes.items).toHaveLength(0); }); diff --git a/src/middleware/tests/activitypub/message.test.ts b/src/middleware/tests/activitypub/message.test.ts index 7e0909684..e3b37a20a 100644 --- a/src/middleware/tests/activitypub/message.test.ts +++ b/src/middleware/tests/activitypub/message.test.ts @@ -2,7 +2,6 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '@semapps/activitypub'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(70000); const NUM_USERS = 2; @@ -14,7 +13,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' let aliceMessageUri: any; let bobMessageUri: any; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { if (mode === 'single-server') { broker = await initialize(3000, 'testData', 'settings'); @@ -39,7 +37,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' bob = actors[2]; }); - // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -50,7 +47,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' } }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Alice send message to Bob', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -65,7 +61,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' // Check the object has been created const message = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(message).toMatchObject({ type: OBJECT_TYPES.NOTE, attributedTo: alice.id, @@ -73,11 +68,9 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); // Ensure the /replies collection has not been created yet - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(message.replies).not.toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob replies to Alice and his message appears in the /replies collection', async () => { const createActivity = await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -92,14 +85,12 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' bobMessageUri = createActivity.object.id; await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ replies: `${aliceMessageUri}/replies` }); }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }) ).resolves.toMatchObject({ @@ -114,7 +105,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob deletes his message to Alice', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, @@ -125,7 +115,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(alice.call('ldp.resource.get', { resourceUri: bobMessageUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Note', diff --git a/src/middleware/tests/activitypub/object.test.ts b/src/middleware/tests/activitypub/object.test.ts index 57fbf9dd4..873074918 100644 --- a/src/middleware/tests/activitypub/object.test.ts +++ b/src/middleware/tests/activitypub/object.test.ts @@ -3,7 +3,6 @@ import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; @@ -15,12 +14,10 @@ afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Create/Update/Delete objects', () => { let sebastien: any; let objectUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { username: 'srosset81', @@ -31,11 +28,9 @@ describe('Create/Update/Delete objects', () => { sebastien = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: sebastienUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(sebastienUri).toBe(`${CONFIG.HOME_URL}as/actor/srosset81`); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create object', async () => { const createActivity = await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -47,7 +42,6 @@ describe('Create/Update/Delete objects', () => { content: 'My first article, I hope there is no tipo' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity).toMatchObject({ type: ACTIVITY_TYPES.CREATE, actor: sebastien.id, @@ -59,13 +53,10 @@ describe('Create/Update/Delete objects', () => { to: sebastien.followers }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity.object).toHaveProperty('id'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(createActivity.object).not.toHaveProperty('current'); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('activitypub.collection.includes', { collectionUri: sebastien.outbox, itemUri: createActivity.id }) ).resolves.toBeTruthy(); @@ -75,13 +66,10 @@ describe('Create/Update/Delete objects', () => { // Check the object has been created in the container const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(object).toHaveProperty('type', OBJECT_TYPES.ARTICLE); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(object).toHaveProperty('id', objectUri); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Update object', async () => { const updateActivity = await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -96,7 +84,6 @@ describe('Create/Update/Delete objects', () => { to: sebastien.followers }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updateActivity).toMatchObject({ type: ACTIVITY_TYPES.UPDATE, actor: sebastien.id, @@ -107,14 +94,11 @@ describe('Create/Update/Delete objects', () => { }, to: sebastien.followers }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updateActivity.object).not.toHaveProperty('current'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updateActivity.object).not.toHaveProperty('name'); // Check the object has been updated const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(object).toMatchObject({ id: objectUri, type: OBJECT_TYPES.ARTICLE, @@ -122,7 +106,6 @@ describe('Create/Update/Delete objects', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete object', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -132,7 +115,6 @@ describe('Create/Update/Delete objects', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.resource.get', { resourceUri: objectUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Article', diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index 71ea79511..8b3b8b8b8 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -2,7 +2,6 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50_000); let broker: any; let broker2: any; @@ -16,12 +15,10 @@ afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Permissions are correctly set on outbox', () => { let simon: any; let sebastien: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create actor', async () => { const { webId: sebastienUri } = await broker.call('auth.signup', { username: 'srosset81', @@ -41,10 +38,8 @@ describe('Permissions are correctly set on outbox', () => { simon = await broker2.call('activitypub.actor.awaitCreateComplete', { actorUri: simonUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(sebastien).toMatchObject({ id: sebastienUri, - // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['Person', 'foaf:Person']), preferredUsername: 'srosset81', 'foaf:nick': 'srosset81', @@ -75,9 +70,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: sebastien.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -103,7 +96,6 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(0); }); @@ -117,7 +109,6 @@ describe('Permissions are correctly set on outbox', () => { // ).rejects.toThrow(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post private message to friend', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -138,9 +129,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -162,12 +151,10 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(0); }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post public message', async () => { await broker.call('activitypub.outbox.post', { collectionUri: sebastien.outbox, @@ -188,9 +175,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(2); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -212,9 +197,7 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outbox.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.CREATE, @@ -226,7 +209,6 @@ describe('Permissions are correctly set on outbox', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Object permissions change when friend is added to addressees', async () => { // Activity is visible to friend after Update. const activityUpdatedForFriend = await broker.call('activitypub.outbox.post', { @@ -240,7 +222,6 @@ describe('Permissions are correctly set on outbox', () => { name: 'Message is now visible to friend' } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(objectPrivateFirst?.id).toBe(activityUpdatedForFriend.object.id); // Get outbox as friend. @@ -254,7 +235,6 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outboxFetchedByFriend.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.UPDATE, @@ -275,11 +255,9 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: simon.id }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outboxFetchedByAnon.orderedItems[0].object?.name).toBe('Message is now visible to friend'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Object permissions change when public is added to addressees', async () => { // Activity is visible after update to public const activityUpdatedForPublic = await broker.call('activitypub.outbox.post', { @@ -293,7 +271,6 @@ describe('Permissions are correctly set on outbox', () => { name: 'Message is now public' } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(objectPrivateFirst.id).toBe(activityUpdatedForPublic.object.id); // Get outbox as anon. diff --git a/src/middleware/tests/activitypub/shares.test.ts b/src/middleware/tests/activitypub/shares.test.ts index 8ead130b8..5c35e3c58 100644 --- a/src/middleware/tests/activitypub/shares.test.ts +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -2,7 +2,6 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); const NUM_USERS = 2; @@ -37,7 +36,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', bob = actors[2]; }); - // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (mode === 'multi-server') { for (let i = 1; i <= NUM_USERS; i++) { @@ -48,7 +46,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', } }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob shares Alice message', async () => { const createActivity = await alice.call('activitypub.outbox.post', { collectionUri: alice.outbox, @@ -79,7 +76,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure the /shares collection has been created await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ shares: `${aliceMessageUri}/shares` }); @@ -87,7 +83,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', // Ensure only the public announce activity has been added to the /shares collection await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) ).resolves.toMatchObject({ @@ -97,7 +92,6 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob undo his share', async () => { await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index 095b21d9f..851111319 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -11,7 +11,6 @@ import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; -// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); const initialize = async (port: any, withOldKeyStore = false) => { diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index 6bf0d5e74..1278c2e12 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -3,7 +3,6 @@ import { arrayOf, waitForResource } from '@semapps/ldp'; import { wait } from '../utils.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(100_000); /** @type {import('moleculer').ServiceBroker} */ @@ -31,44 +30,30 @@ const setUp = async (withOldKeyStore: any) => { await wait(5000); }; -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('keys', () => { - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('with new service', () => { - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. await setUp(); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('RSA key', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('exists', async () => { const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPairs).toHaveLength(1); const keyPair = keyPairs[0]; - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['@id'] || keyPair.id).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.publicKeyPem).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.privateKeyPem).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.owner).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.controller).toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('public key present in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); @@ -76,21 +61,16 @@ describe('keys', () => { broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); const publicKeys = arrayOf(webIdDocument.publicKey); // There should only be one public key advertised in the webId by default. - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKeys.length).toBe(1); const matchingPublicKey = publicKeys.find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem); expect(matchingPublicKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(matchingPublicKey.owner).toBe(user.webId); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(matchingPublicKey.controller).toBe(user.webId); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('detach and attach to webId works', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, @@ -103,7 +83,6 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); @@ -114,19 +93,16 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) ).toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key deletable and new one addable', async () => { const [oldKeyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(oldKeyPair).toBeTruthy(); // Delete @@ -137,12 +113,10 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) ).toBeUndefined(); // Expect key not to be present in `/public-keys` container. - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.exist', { resourceUri: oldKeyPair['rdfs:seeAlso'], @@ -156,15 +130,10 @@ describe('keys', () => { keyType: KEY_TYPES.RSA, attachToWebId: true }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyPem).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.privateKeyPem).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyPem).not.toBe(oldKeyPair.publicKeyPem); // Expect webId to not have old key but new key. @@ -172,13 +141,11 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.publicKey).some( (publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem ) ).toBeFalsy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.publicKey).some( (publicKey: any) => publicKey.publicKeyPem === newKeyPair.publicKeyPem @@ -190,26 +157,19 @@ describe('keys', () => { resourceUri: newKeyPair['rdfs:seeAlso'], webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyPem).toBe(newKeyPair.publicKeyPem); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.owner).toBe(user.webId); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.privateKeyPem).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('private key is not accessible without authorization', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('keys.container.get', { resourceUri: keyPair['@id'] || keyPair.id, @@ -218,7 +178,6 @@ describe('keys', () => { ).rejects.toThrow('Forbidden'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('second key present in keys and public-keys container only', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -231,7 +190,6 @@ describe('keys', () => { resourceUri: keyPair['rdfs:seeAlso'], webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeTruthy(); // Should not be present in webId. @@ -239,13 +197,11 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('no second key addable to webId', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -259,11 +215,9 @@ describe('keys', () => { webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced rdfs:seeAlso). - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey.id || webIdDocument.publicKey['@id']).toBe(keyPair['rdfs:seeAlso']); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('third key not present in webId and public key container', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -272,7 +226,6 @@ describe('keys', () => { attachToWebId: false }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['rdfs:seeAlso']).toBeUndefined(); // Should not be present in webId. @@ -280,71 +233,51 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) ).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('keys.getOrCreateWebIdKeys returns key', async () => { const webIdKeys = await broker.call('keys.getOrCreateWebIdKeys', { webId: user.webId, keyType: KEY_TYPES.RSA }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdKeys).toHaveLength(1); webIdKeys.forEach((key: any) => { expect(key.publicKeyPem).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(key.privateKeyPem).toBeTruthy(); }); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('ED25519 key', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('exists', async () => { const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPairs).toHaveLength(1); const keyPair = keyPairs[0]; - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['@id'] || keyPair.id).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.publicKeyMultibase).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.secretKeyMultibase).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.owner).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.controller).toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('public key present in public-key container', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['rdfs:seeAlso']).toBeDefined(); const publicKey = await broker.call('keys.public-container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyMultibase).toBe(keyPair.publicKeyMultibase); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.secretKeyMultibase).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('public key present in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.assertionMethod).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find( (assertionMethod: any) => assertionMethod.publicKeyMultibase === keyPair.publicKeyMultibase @@ -352,7 +285,6 @@ describe('keys', () => { ).toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('detach and attach to webid works', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, @@ -365,7 +297,6 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find( (key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase @@ -378,7 +309,6 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.assertionMethod).find( (key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase @@ -386,13 +316,11 @@ describe('keys', () => { ).toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key deletable and new one addable', async () => { const [oldKeyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(oldKeyPair).toBeTruthy(); // Delete @@ -403,14 +331,12 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find( (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase ) ).toBeUndefined(); // Expect key not to be present in `/public-keys` container. - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.exist', { resourceUri: oldKeyPair['rdfs:seeAlso'], @@ -424,15 +350,10 @@ describe('keys', () => { keyType: KEY_TYPES.ED25519, attachToWebId: true }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyMultibase).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.secretKeyMultibase).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(newKeyPair.publicKeyMultibase).not.toBe(oldKeyPair.publicKeyMultibase); // Expect webId to not have old key but new key. @@ -440,13 +361,11 @@ describe('keys', () => { resourceUri: user.webId, webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.assertionMethod).some( (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase ) ).toBeFalsy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocumentNew.assertionMethod).some( (publicKey: any) => publicKey.publicKeyMultibase === newKeyPair.publicKeyMultibase @@ -458,26 +377,19 @@ describe('keys', () => { resourceUri: newKeyPair['rdfs:seeAlso'], webId: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyMultibase).toBe(newKeyPair.publicKeyMultibase); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.owner).toBe(user.webId); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.secretKeyMultibase).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('private key is not accessible without authorization', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('keys.container.get', { resourceUri: keyPair.id || keyPair['@id'], @@ -486,7 +398,6 @@ describe('keys', () => { ).rejects.toThrow('Forbidden'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('second addable to webId', async () => { const keyPair = await broker.call('keys.createKeyForActor', { webId: user.webId, @@ -501,34 +412,27 @@ describe('keys', () => { webId: user.webId }); // Expect the public key of the webId to be the key published in the public key container (referenced by rdfs:seeAlso). - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect( arrayOf(webIdDocument.assertionMethod).find((key: any) => (key.id || key['@id']) === keyPair['rdfs:seeAlso']) ).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.assertionMethod.length).toBeGreaterThan(1); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('keys.getOrCreateWebIdKeys returns keys', async () => { const webIdKeys = await broker.call('keys.getOrCreateWebIdKeys', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdKeys.length).toBeGreaterThan(0); webIdKeys.forEach((key: any) => { expect(key.publicKeyMultibase).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(key.secretKeyMultibase).toBeTruthy(); }); }); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Migration', () => { - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // Stop and create new broker without migration. if (broker) await broker.stop(); @@ -540,11 +444,8 @@ describe('keys', () => { let publicKeyPemBeforeMigration: any; let privateKeyPemBeforeMigration: any; - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Before migration', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('new keys service not usable before migration', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('keys.createKeyForActor', { webId: user.webId, @@ -557,117 +458,78 @@ describe('keys', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key gettable', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); // Save them for later validation publicKeyPemBeforeMigration = publicKey; privateKeyPemBeforeMigration = privateKey; }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key in webId', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.privateKey).toBeUndefined(); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('After migration', () => { - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { await broker.call('keys.migration.migrateKeysToDb'); // Wait for keys.migration.migrated event to have propagated. await wait(1000); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('With old service', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key gettable and the same as before', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBe(publicKeyPemBeforeMigration); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBe(privateKeyPemBeforeMigration); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key in webId', async () => { const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(privateKey).toBeDefined(); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument.privateKey).toBeUndefined(); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('With new service', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key gettable and remained the same', async () => { const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPairs).toHaveLength(1); const keyPair = keyPairs[0]; - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair).toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair['@id'] || keyPair.id).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.owner).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.controller).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.publicKeyPem).toBe(publicKeyPemBeforeMigration); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(keyPair.privateKeyPem).toBe(privateKeyPemBeforeMigration); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('key in webId', async () => { const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webIdDocument).toBeDefined(); const { publicKey } = webIdDocument; // There should only be one public key advertised in the webId by default. - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey).toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.owner).toBe(user.webId); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.controller).toBe(user.webId); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.publicKeyPem).toBe(keyPair.publicKeyPem); // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.privateKeyPem).toBeUndefined(); diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index aa1c055af..be294b357 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -2,7 +2,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import path from 'node:path'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(45_000); const getChallengeFrom = async (actor: any) => { @@ -57,23 +56,18 @@ const setUp = async (withOldKeyStore: any) => { craig = await setUpUser(broker, 'craig'); }; -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('verifiable credentials', () => { - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. await setUp(); await broker.call('crypto.vc.issuer.credential-container.waitForContainerCreation'); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('object integrity', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('object is signed and verifiable', async () => { const object = { '@context': { name: 'urn:some:name' }, @@ -89,11 +83,9 @@ describe('verifiable credentials', () => { body: JSON.stringify({ object: signedObject }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeTruthy(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('modified object verification fails', async () => { const object = { '@context': { name: 'urn:some:name' }, @@ -111,14 +103,11 @@ describe('verifiable credentials', () => { body: JSON.stringify({ object: signedObject }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('credentials', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('credential is signed and verifiable', async () => { const verifiableCredential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -138,11 +127,9 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiableCredential }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(true); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('verifying modified credential fails', async () => { const verifiableCredential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -156,7 +143,6 @@ describe('verifiable credentials', () => { } }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiableCredential.type).not.toBe('VALIDATION_ERROR'); delete verifiableCredential.credentialSubject.description; @@ -165,14 +151,11 @@ describe('verifiable credentials', () => { method: 'POST', body: JSON.stringify({ verifiableCredential }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.type).not.toBe('VALIDATION_ERROR'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('presentation is signed and verifiable', async () => { const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -200,7 +183,6 @@ describe('verifiable credentials', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiablePresentation.code).toBeUndefined(); const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'presentations/verify'), { @@ -208,11 +190,9 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(true); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('verifying unsigned presentation fails', async () => { const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -227,7 +207,6 @@ describe('verifiable credentials', () => { } }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(credential.type).not.toBe('VALIDATION_ERROR'); const verifiablePresentation = await bob.fetch(path.join(vcApiEndpoint, 'presentations'), { @@ -241,7 +220,6 @@ describe('verifiable credentials', () => { } }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiablePresentation.type).not.toBe('VALIDATION_ERROR'); delete verifiablePresentation.proof; @@ -250,11 +228,9 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('verifying modified presentation fails', async () => { const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -269,7 +245,6 @@ describe('verifiable credentials', () => { } }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(credential.type).not.toBe('VALIDATION_ERROR'); const verifiablePresentation = await bob.fetch(path.join(vcApiEndpoint, 'presentations'), { @@ -283,7 +258,6 @@ describe('verifiable credentials', () => { } }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(verifiablePresentation.type).not.toBe('VALIDATION_ERROR'); verifiablePresentation.verifiableCredential[0].credentialSubject.description = 'Modified!'; @@ -293,14 +267,11 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); }); - // @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('capabilities', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('first and second capability are created and presentation is verifiable', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -347,11 +318,9 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeTruthy(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('capability is open / has no credentialSubject and transferable', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -384,11 +353,9 @@ describe('verifiable credentials', () => { body: JSON.stringify({ verifiablePresentation }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeTruthy(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('second capability is deleted and presentation invalid.', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -439,11 +406,9 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('capability not invoked by holder invalid', async () => { const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { method: 'POST', @@ -477,15 +442,12 @@ describe('verifiable credentials', () => { { meta: { webId: alice.webId } } ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBe(false); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.error?.errors?.[0].message).toMatch( 'Invoker of capability is not the subject of the last capability' ); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('non-linked chain is invalid', async () => { const allCreds = await alice.fetch(path.join(vcApiEndpoint, 'credentials'), { method: 'GET' diff --git a/src/middleware/tests/interop/mirror-protected.test.ts b/src/middleware/tests/interop/mirror-protected.test.ts index 2da63c2c3..5ae1a17a6 100644 --- a/src/middleware/tests/interop/mirror-protected.test.ts +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -3,14 +3,12 @@ import waitForExpect from 'wait-for-expect'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let server1: any; let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); @@ -28,15 +26,12 @@ afterAll(async () => { if (server2) await server2.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Resource on server1 is shared with user on server2', () => { let resourceUri: any; let user2: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Server2 follow server1', async () => { await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server1.call('activitypub.collection.includes', { collectionUri: urlJoin(relay1, 'followers'), @@ -46,7 +41,6 @@ describe('Resource on server1 is shared with user on server2', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Protected resource on server1 is shared with a specific user on server2', async () => { const { webId } = await server2.call('auth.signup', { username: 'srosset81', @@ -91,9 +85,7 @@ describe('Resource on server1 is shared with user on server2', () => { webId: relay1 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.CREATE, actor: relay1, @@ -103,7 +95,6 @@ describe('Resource on server1 is shared with user on server2', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Protected resource is not shared anymore with a specific user', async () => { await server1.call('webacl.resource.removeRights', { resourceUri, @@ -127,7 +118,6 @@ describe('Resource on server1 is shared with user on server2', () => { webId: relay1 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox).not.toBeNull(); // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ diff --git a/src/middleware/tests/interop/mirror.test.ts b/src/middleware/tests/interop/mirror.test.ts index 901096364..938530d27 100644 --- a/src/middleware/tests/interop/mirror.test.ts +++ b/src/middleware/tests/interop/mirror.test.ts @@ -3,14 +3,12 @@ import waitForExpect from 'wait-for-expect'; import rdf from '@rdfjs/data-model'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(100000); let server1: any; let server2: any; const relay1 = 'http://localhost:3001/as/actor/relay'; const relay2 = 'http://localhost:3002/as/actor/relay'; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // @ts-expect-error TS(2554): Expected 5 arguments, but got 4. server1 = await initialize(3001, 'testData1', 'settings1', 1); @@ -28,14 +26,11 @@ afterAll(async () => { if (server2) await server2.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Server2 mirror server1', () => { let resourceUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Server2 follow server1', async () => { await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server1.call('activitypub.collection.includes', { collectionUri: urlJoin(relay1, 'followers'), @@ -45,17 +40,14 @@ describe('Server2 mirror server1', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Server1 resources container is mirrored on server2', async () => { await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.exist', { containerUri: 'http://localhost:3001/resources' }) ).resolves.toBeTruthy(); }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource posted on server1 is mirrored on server2', async () => { resourceUri = await server1.call('ldp.container.post', { resource: { @@ -69,14 +61,12 @@ describe('Server2 mirror server1', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3001/resources', resourceUri }) ).resolves.toBeTruthy(); }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -85,7 +75,6 @@ describe('Server2 mirror server1', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource updated on server1 is updated on server2', async () => { await server1.call('ldp.resource.put', { resource: { @@ -99,7 +88,6 @@ describe('Server2 mirror server1', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -108,7 +96,6 @@ describe('Server2 mirror server1', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource on server1 is patched on server2 container', async () => { await server2.call('ldp.container.patch', { containerUri: 'http://localhost:3002/resources', @@ -123,7 +110,6 @@ describe('Server2 mirror server1', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3002/resources', resourceUri }) ).resolves.toBeTruthy(); @@ -131,19 +117,16 @@ describe('Server2 mirror server1', () => { // Since server1 is mirrored by server2, we don't need to mark it as singleMirroredResource await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.not.toHaveProperty( 'semapps:singleMirroredResource' ); }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource deleted on server1 is deleted on server2', async () => { await server1.call('ldp.resource.delete', { resourceUri }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3001/resources', resourceUri }) ).resolves.toBeFalsy(); diff --git a/src/middleware/tests/interop/patch-remote.test.ts b/src/middleware/tests/interop/patch-remote.test.ts index 566242e64..8074852b8 100644 --- a/src/middleware/tests/interop/patch-remote.test.ts +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -2,7 +2,6 @@ import waitForExpect from 'wait-for-expect'; import rdf from '@rdfjs/data-model'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let server1: any; let server2: any; @@ -19,11 +18,9 @@ afterAll(async () => { if (server2) await server2.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Server2 imports a single resource from server1', () => { let resourceUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource is posted on server1', async () => { resourceUri = await server1.call('ldp.container.post', { resource: { @@ -37,14 +34,12 @@ describe('Server2 imports a single resource from server1', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server1.call('ldp.container.includes', { containerUri: 'http://localhost:3001/resources', resourceUri }) ).resolves.toBeTruthy(); }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource is imported on server2', async () => { await server2.call('ldp.container.patch', { containerUri: 'http://localhost:3002/resources', @@ -59,14 +54,12 @@ describe('Server2 imports a single resource from server1', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( server2.call('ldp.container.includes', { containerUri: 'http://localhost:3002/resources', resourceUri }) ).resolves.toBeTruthy(); }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -76,7 +69,6 @@ describe('Server2 imports a single resource from server1', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource updated on server1 is updated on server2', async () => { await server1.call('ldp.resource.put', { resource: { @@ -93,7 +85,6 @@ describe('Server2 imports a single resource from server1', () => { await server2.call('ldp.remote.runCron'); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.remote.get', { resourceUri, strategy: 'cacheOnly' })).resolves.toMatchObject({ id: resourceUri, type: 'pair:Resource', @@ -103,7 +94,6 @@ describe('Server2 imports a single resource from server1', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource deleted on server1 is deleted on server2', async () => { await server1.call('ldp.resource.delete', { resourceUri }); diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index a2ce3bd1c..d2bb1b91d 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -3,7 +3,6 @@ import { triple, namedNode } from 'rdf-data-model'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(100000); let server1: any; let server2: any; @@ -20,12 +19,10 @@ afterAll(async () => { if (server2) await server2.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('An inference is added between server1 et server2', () => { let resourceUri1: any; let resourceUri2: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is added on create', async () => { resourceUri1 = await server1.call('ldp.container.post', { resource: { @@ -53,7 +50,6 @@ describe('An inference is added between server1 et server2', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.toMatchObject({ id: resourceUri1, 'pair:hasPart': resourceUri2 @@ -61,7 +57,6 @@ describe('An inference is added between server1 et server2', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is added through patch', async () => { await server1.call('ldp.resource.patch', { resourceUri: resourceUri1, @@ -75,7 +70,6 @@ describe('An inference is added between server1 et server2', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server2.call('ldp.resource.get', { resourceUri: resourceUri2 })).resolves.toMatchObject({ id: resourceUri2, 'pair:inspiredBy': resourceUri1 @@ -83,7 +77,6 @@ describe('An inference is added between server1 et server2', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is removed through put', async () => { // Do not includes the new pair:inspiredBy property = remove it await server2.call('ldp.resource.put', { @@ -101,14 +94,12 @@ describe('An inference is added between server1 et server2', () => { }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( 'pair:hasInspired' ); }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('An remote relationship is removed through delete', async () => { await server2.call('ldp.resource.delete', { resourceUri: resourceUri2 }); diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index 2587a0d30..005d66db0 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -43,7 +43,6 @@ export default async (cacher: any, persistRegistry: any) => { }); broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { url: CONFIG.SPARQL_ENDPOINT, diff --git a/src/middleware/tests/jsonld/merge.test.ts b/src/middleware/tests/jsonld/merge.test.ts index df1a9171d..1ab6515a8 100644 --- a/src/middleware/tests/jsonld/merge.test.ts +++ b/src/middleware/tests/jsonld/merge.test.ts @@ -1,10 +1,8 @@ import initialize from '../ontologies/initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(10000); let broker: any; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { // @ts-expect-error TS(2554): Expected 1 arguments, but got 2. broker = await initialize(false, false); diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 3932be76b..e1f947c85 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -5,21 +5,17 @@ import { fetchServer } from '../utils.ts'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('LDP handling through API', () => { // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); @@ -27,7 +23,6 @@ describe('LDP handling through API', () => { let subContainerUri: any; let subResourceUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create resource', async () => { const { headers } = await fetchServer(containerUri, { method: 'POST', @@ -43,13 +38,10 @@ describe('LDP handling through API', () => { resourceUri = headers.get('Location'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(resourceUri).not.toBeNull(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { '@type': 'pair:Project', @@ -59,10 +51,8 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource with JsonLdContext header', async () => { // Use string - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { headers: new fetch.Headers({ @@ -76,7 +66,6 @@ describe('LDP handling through API', () => { }); // Use object - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { headers: new fetch.Headers({ @@ -90,7 +79,6 @@ describe('LDP handling through API', () => { }); // Use array - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { headers: new fetch.Headers({ @@ -107,9 +95,7 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), @@ -123,9 +109,7 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with JsonLdContext header', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(containerUri, { headers: new fetch.Headers({ @@ -146,7 +130,6 @@ describe('LDP handling through API', () => { }); // See https://www.w3.org/TR/ldp/#prefer-parameters - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with minimal representation', async () => { const { json, headers } = await fetchServer(containerUri, { headers: new fetch.Headers({ @@ -154,13 +137,10 @@ describe('LDP handling through API', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json['ldp:contains']).toBeUndefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Preference-Applied')).toBe('return=representation'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Replace resource', async () => { await fetchServer(resourceUri, { method: 'PUT', @@ -175,17 +155,14 @@ describe('LDP handling through API', () => { const { json } = await fetchServer(resourceUri); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json).toMatchObject({ '@type': 'pair:Project', 'pair:description': 'myProjectUpdated' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json['pair:label']).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Patch resource', async () => { await fetchServer(resourceUri, { method: 'PATCH', @@ -204,7 +181,6 @@ describe('LDP handling through API', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { '@type': 'pair:Project', @@ -214,7 +190,6 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Patch resource with blank nodes', async () => { await fetchServer(resourceUri, { method: 'PATCH', @@ -232,7 +207,6 @@ describe('LDP handling through API', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { '@type': 'pair:Project', @@ -246,9 +220,7 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete resource', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(resourceUri, { method: 'DELETE' @@ -257,12 +229,10 @@ describe('LDP handling through API', () => { status: 204 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(resourceUri)).resolves.toMatchObject({ status: 404 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), @@ -271,7 +241,6 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create sub-container', async () => { const { headers } = await fetchServer(containerUri, { method: 'POST', @@ -294,7 +263,6 @@ describe('LDP handling through API', () => { // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(subContainerUri).toBe(urlJoin(CONFIG.HOME_URL, 'resources', 'sub-resources')); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ json: { '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), @@ -304,7 +272,6 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create resource in sub-container', async () => { const { headers } = await fetchServer(subContainerUri, { method: 'POST', @@ -322,7 +289,6 @@ describe('LDP handling through API', () => { const { json } = await fetchServer(containerUri); // Sub-containers appear as ldp:Resource - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json).toMatchObject({ 'ldp:contains': [ { @@ -333,10 +299,8 @@ describe('LDP handling through API', () => { }); // The content of sub-containers is not displayed - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(json['ldp:contains'][0]['ldp:contains']).toBeUndefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ json: { 'dc:title': 'Sub-resources', @@ -352,7 +316,6 @@ describe('LDP handling through API', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete sub-container', async () => { // Give write permission on sub-container, or we won't be able to delete it as anonymous await broker.call('webacl.resource.addRights', { @@ -365,7 +328,6 @@ describe('LDP handling through API', () => { } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(subContainerUri, { method: 'DELETE' @@ -376,13 +338,11 @@ describe('LDP handling through API', () => { // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ status: 404 }); }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index f83e8ada8..508227378 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -10,11 +10,9 @@ import * as CONFIG from '../config.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); @@ -23,13 +21,11 @@ afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Binary handling of LDP server', () => { let fileUri: any; let filePath: any; let fileName: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post image to container', async () => { const readStream = fs.createReadStream(pathJoin(__dirname, 'av-icon.png')); @@ -43,17 +39,14 @@ describe('Binary handling of LDP server', () => { }); fileUri = headers.get('Location'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(fileUri).not.toBeNull(); filePath = fileUri.replace(CONFIG.HOME_URL, ''); fileName = getSlugFromUri(fileUri); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container', async () => { // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ @@ -72,7 +65,6 @@ describe('Binary handling of LDP server', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get image as binary (via API)', async () => { const { headers, body } = await fetchServer(fileUri, { headers: new fetch.Headers({ @@ -80,20 +72,14 @@ describe('Binary handling of LDP server', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Content-Length')).toBe('3181'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Cache-Control')).toBe('public, max-age=31536000'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(headers.get('Content-Type')).toBe('image/png'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toContain('PNG'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get image as resource (via Moleculer action)', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ '@id': fileUri, '@type': 'semapps:File', @@ -103,9 +89,7 @@ describe('Binary handling of LDP server', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete image', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( fetchServer(fileUri, { method: 'DELETE' @@ -114,7 +98,6 @@ describe('Binary handling of LDP server', () => { status: 204 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(fs.existsSync(pathJoin(__dirname, '../uploads/files/av-icon.png'))).toBeFalsy(); // @ts-expect-error TS(2304): Cannot find name 'expect'. diff --git a/src/middleware/tests/ldp/container-path.test.ts b/src/middleware/tests/ldp/container-path.test.ts index 41908fe4e..f4dbe6d6b 100644 --- a/src/middleware/tests/ldp/container-path.test.ts +++ b/src/middleware/tests/ldp/container-path.test.ts @@ -1,10 +1,8 @@ import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(10000); let broker: any; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 26848953a..0d5c0b48f 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -2,11 +2,9 @@ import waitForExpect from 'wait-for-expect'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); @@ -15,31 +13,24 @@ afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('LDP container tests', () => { let resourceUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure container created in LdpService settings exists', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}resources` })).resolves.toBe( true ); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create a new container', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}objects` })).resolves.toBe( false ); await broker.call('ldp.container.create', { containerUri: `${CONFIG.HOME_URL}objects`, webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}objects` })).resolves.toBe(true); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}objects` @@ -50,35 +41,29 @@ describe('LDP container tests', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create a sub-container and attach it to the root container', async () => { await broker.call('ldp.container.createAndAttach', { containerUri: `${CONFIG.HOME_URL}parent/child`, webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}parent` }) ).resolves.toBeTruthy(); // Intermediate containers have no permissions - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}parent` })).rejects.toThrow(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}parent/child` }) ).resolves.toBeTruthy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}`, webId: 'system' }) ).resolves.toMatchObject({ - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'ldp:contains': expect.arrayContaining([ { '@id': `${CONFIG.HOME_URL}parent`, @@ -87,14 +72,12 @@ describe('LDP container tests', () => { ]) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}parent`, webId: 'system' }) ).resolves.toMatchObject({ - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'ldp:contains': expect.arrayContaining([ { '@id': `${CONFIG.HOME_URL}parent/child`, @@ -104,7 +87,6 @@ describe('LDP container tests', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post a resource in a container', async () => { resourceUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -117,7 +99,6 @@ describe('LDP container tests', () => { } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` @@ -135,9 +116,7 @@ describe('LDP container tests', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post a resource in a non-existing container', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, @@ -152,9 +131,7 @@ describe('LDP container tests', () => { ).rejects.toThrow(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Attach a resource to a non-existing container', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.attach', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, @@ -163,9 +140,7 @@ describe('LDP container tests', () => { ).rejects.toThrow('Cannot attach to a non-existing container'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with jsonContext param', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -192,7 +167,6 @@ describe('LDP container tests', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container with filters param', async () => { await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -206,7 +180,6 @@ describe('LDP container tests', () => { }); // Get without filters param - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` @@ -225,7 +198,6 @@ describe('LDP container tests', () => { }); // Get with filters param - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -244,18 +216,15 @@ describe('LDP container tests', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container without resources', async () => { const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources`, doNotIncludeResources: true }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(container['ldp:contained']).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Detach a resource from a container', async () => { await broker.call('ldp.container.detach', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -263,7 +232,6 @@ describe('LDP container tests', () => { }); // Project 1 should have disappeared from the container - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` @@ -279,7 +247,6 @@ describe('LDP container tests', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Clear container', async () => { await broker.call('ldp.container.clear', { containerUri: `${CONFIG.HOME_URL}resources` diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index d68e1e260..08c1e34ba 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -5,21 +5,17 @@ import { fetchServer } from '../utils.ts'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Content negotiation', () => { // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); @@ -28,7 +24,6 @@ describe('Content negotiation', () => { let project3Uri: any; let project4Uri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in JSON-LD', async () => { const { headers } = await fetchServer(containerUri, { method: 'POST', @@ -44,11 +39,9 @@ describe('Content negotiation', () => { projectUri = headers.get('Location'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(projectUri).not.toBeNull(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource in Turtle format', async () => { const { body } = await fetchServer(projectUri, { headers: new fetch.Headers({ @@ -56,15 +49,11 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource in N-Triples format', async () => { const { body } = await fetchServer(projectUri, { headers: new fetch.Headers({ @@ -72,21 +61,17 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${projectUri}>.* ` ) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp(`<${projectUri}>.* "myProject"`) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${projectUri}>.* "myLabel"`)); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container in Turtle format', async () => { const { body } = await fetchServer(containerUri, { headers: new fetch.Headers({ @@ -94,20 +79,14 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:Container, ldp:BasicContainer`)); - // @ts-expect-error expect(body).toMatch(new RegExp(`ldp:contains <${projectUri}>`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get container in N-Triples format', async () => { const { body } = await fetchServer(containerUri, { headers: new fetch.Headers({ @@ -115,21 +94,17 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${containerUri}> ` ) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${containerUri}> ` ) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${containerUri}> <${projectUri}>`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch( new RegExp( `<${projectUri}>.* ` @@ -137,7 +112,6 @@ describe('Content negotiation', () => { ); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in Turtle format', async () => { const { headers, status } = await fetchServer(containerUri, { method: 'POST', @@ -151,7 +125,6 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(201); project2Uri = headers.get('Location'); @@ -159,7 +132,6 @@ describe('Content negotiation', () => { const project2 = await broker.call('ldp.resource.get', { resourceUri: project2Uri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project2Uri, @@ -168,7 +140,6 @@ describe('Content negotiation', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in N-Triples format', async () => { const { headers, status } = await fetchServer(containerUri, { method: 'POST', @@ -181,7 +152,6 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(201); project3Uri = headers.get('Location'); @@ -189,7 +159,6 @@ describe('Content negotiation', () => { const project2 = await broker.call('ldp.resource.get', { resourceUri: project3Uri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project3Uri, @@ -198,7 +167,6 @@ describe('Content negotiation', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Update resource in Turtle format', async () => { const { status } = await fetchServer(project2Uri, { method: 'PUT', @@ -213,13 +181,11 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(204); const project2 = await broker.call('ldp.resource.get', { resourceUri: project2Uri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project2Uri, @@ -229,7 +195,6 @@ describe('Content negotiation', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Update resource in N-Triples format', async () => { const { status } = await fetchServer(project3Uri, { method: 'PUT', @@ -243,13 +208,11 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(204); const project3 = await broker.call('ldp.resource.get', { resourceUri: project3Uri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project3).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project3Uri, @@ -259,7 +222,6 @@ describe('Content negotiation', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource with sub-resources in Turtle format', async () => { const { headers, status } = await fetchServer(containerUri, { method: 'POST', @@ -277,7 +239,6 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(status).toBe(201); project4Uri = headers.get('Location'); @@ -300,7 +261,6 @@ describe('Content negotiation', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource with sub-resources in Turtle format', async () => { const { body } = await fetchServer(project4Uri, { headers: new fetch.Headers({ @@ -308,11 +268,8 @@ describe('Content negotiation', () => { }) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${project4Uri}> a pair:Project`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label "myProject 4"`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`<${project4Uri}#task1> a pair:Task`)); // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(body).toMatch(new RegExp(`pair:label "myTask 1"`)); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index c180935e6..80a096928 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -10,7 +10,6 @@ import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; -// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); // Give write permission on all containers to anonymous users diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index a374ba1a5..b22cf5c42 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -3,11 +3,9 @@ import { quad, namedNode, blankNode, literal } from 'rdf-data-model'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(50000); let broker: any; -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(); }); @@ -16,12 +14,10 @@ afterAll(async () => { if (broker) await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Resource CRUD operations', () => { let project1: any; let project2: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource in container', async () => { project1Uri = await broker.call('ldp.container.post', { resource: { @@ -51,28 +47,23 @@ describe('Resource CRUD operations', () => { expect(project1Uri).toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get resource', async () => { project1 = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project1).toMatchObject({ '@context': 'http://localhost:3000/.well-known/context.jsonld', '@id': project1['@id'], '@type': 'pair:Project', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:affiliates': expect.arrayContaining([ 'http://localhost:3000/users/guillaume', 'http://localhost:3000/users/sebastien' ]), 'pair:description': 'myProject', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.objectContaining({ 'pair:description': 'The place to be', 'pair:label': 'Paris' }), 'pair:label': 'myTitle' }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Put resource', async () => { await broker.call('ldp.resource.put', { resource: { @@ -92,7 +83,6 @@ describe('Resource CRUD operations', () => { const updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -100,13 +90,10 @@ describe('Resource CRUD operations', () => { 'pair:label': 'Nantes' } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:label']).toBeUndefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:hasLocation']['pair:description']).toBeUndefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Put resource with multiple blank nodes including same values', async () => { const resourceUpdated = { '@context': { @@ -131,11 +118,9 @@ describe('Resource CRUD operations', () => { let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Nantes' @@ -145,9 +130,7 @@ describe('Resource CRUD operations', () => { } ]) }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:label']).toBeUndefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:hasLocation']['pair:description']).toBeUndefined(); resourceUpdated.hasLocation = [ @@ -160,7 +143,6 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -185,11 +167,9 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Compiegne' @@ -219,7 +199,6 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -245,11 +224,9 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Compiegne', @@ -269,7 +246,6 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject['pair:hasLocation']).toBeUndefined(); // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message @@ -281,7 +257,6 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'petr:openingTimesDay': { @@ -300,10 +275,8 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'petr:openingTimesDay': expect.arrayContaining([ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' }, { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } @@ -311,7 +284,6 @@ describe('Resource CRUD operations', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post resource with multiple blank nodes with 2 imbrications blank nodes', async () => { const resourceToPost = { '@context': { @@ -335,7 +307,6 @@ describe('Resource CRUD operations', () => { project2 = await broker.call('ldp.resource.get', { resourceUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project2).toMatchObject({ 'pair:hasLocation': { 'pair:label': 'Paris', @@ -368,7 +339,6 @@ describe('Resource CRUD operations', () => { const project3 = await broker.call('ldp.resource.get', { resourceUri: resourceUri3 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project3).toMatchObject({ 'pair:hasLocation': [ { @@ -409,7 +379,6 @@ describe('Resource CRUD operations', () => { const project4 = await broker.call('ldp.resource.get', { resourceUri: resourceUri4 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project4).toMatchObject({ 'pair:hasLocation': [ { @@ -428,7 +397,6 @@ describe('Resource CRUD operations', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Put resource with multiple blank nodes with 2 imbrications blank nodes', async () => { const resourceUpdated = { '@context': { @@ -456,10 +424,8 @@ describe('Resource CRUD operations', () => { let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { 'pair:label': 'Paris', @@ -495,7 +461,6 @@ describe('Resource CRUD operations', () => { updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:hasLocation': { @@ -508,7 +473,6 @@ describe('Resource CRUD operations', () => { }); // Ensure dereferenced resources with IDs are not deleted by PUT - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('PUT resource with ID', async () => { const themeUri = await broker.call('ldp.container.post', { containerUri: 'http://localhost:3000/themes', @@ -552,7 +516,6 @@ describe('Resource CRUD operations', () => { // Ensure the theme has not been deleted const theme = await broker.call('ldp.resource.get', { resourceUri: themeUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(theme).toMatchObject({ '@id': themeUri, '@type': 'pair:Theme', @@ -560,7 +523,6 @@ describe('Resource CRUD operations', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('PATCH resource', async () => { const projectUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -595,7 +557,6 @@ describe('Resource CRUD operations', () => { const project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project).toMatchObject({ '@id': projectUri, 'pair:label': 'SemApps', @@ -603,7 +564,6 @@ describe('Resource CRUD operations', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('PATCH resource with blank nodes', async () => { const projectUri = await broker.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}resources`, @@ -636,7 +596,6 @@ describe('Resource CRUD operations', () => { let project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project).toMatchObject({ '@id': projectUri, 'pair:label': 'ActivityPods', @@ -665,11 +624,9 @@ describe('Resource CRUD operations', () => { project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project).toMatchObject({ '@id': projectUri, 'pair:label': 'ActivityPods', - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'pair:hasLocation': expect.arrayContaining([ { '@type': 'pair:Place', @@ -683,7 +640,6 @@ describe('Resource CRUD operations', () => { }); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Delete resource', async () => { await broker.call('ldp.resource.delete', { resourceUri: project1['@id'] diff --git a/src/middleware/tests/ontologies/initialize.ts b/src/middleware/tests/ontologies/initialize.ts index 2210e27cd..f7d742126 100644 --- a/src/middleware/tests/ontologies/initialize.ts +++ b/src/middleware/tests/ontologies/initialize.ts @@ -43,7 +43,6 @@ export default async (cacher: any) => { }); broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message mixins: [TripleStoreService], settings: { url: CONFIG.SPARQL_ENDPOINT, diff --git a/src/middleware/tests/ontologies/ontologies.test.ts b/src/middleware/tests/ontologies/ontologies.test.ts index 5d8198d1b..e3426c376 100644 --- a/src/middleware/tests/ontologies/ontologies.test.ts +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -7,7 +7,6 @@ import ont2 from './ontologies/ont2.json' with { type: 'json' }; import ont3 from './ontologies/ont3.json' with { type: 'json' }; import ont4 from './ontologies/ont4.json' with { type: 'json' }; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(10000); // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); @@ -15,51 +14,38 @@ const localContextUri = urlJoin(CONFIG.HOME_URL, '.well-known/context.jsonld'); describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) => { let broker: any; - // @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { broker = await initialize(cacher); }); - // @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { if (broker) await broker.stop(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a new ontology', async () => { await broker.call('ontologies.register', { ...ont1 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: ont1.prefix })).resolves.toMatchObject(ont1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { namespace: ont1.namespace })).resolves.toMatchObject(ont1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { uri: `${ont1.namespace}MyClass` })).resolves.toMatchObject(ont1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([expect.objectContaining(ont1)]) ); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register the same ontology', async () => { await broker.call('ontologies.register', { ...ont1, owl: 'https://www.w3.org/ns/ontology1.ttl' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont1' })).resolves.toMatchObject({ ...ont1, owl: 'https://www.w3.org/ns/ontology1.ttl' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([ - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ ...ont1, owl: 'https://www.w3.org/ns/ontology1.ttl' @@ -67,27 +53,20 @@ describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) ]) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('jsonld.context.get')).resolves.toEqual([ont1.jsonldContext]); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a 2nd ontology', async () => { await broker.call('ontologies.register', { ...ont2 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont2' })).resolves.toMatchObject(ont2); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([expect.objectContaining(ont1), expect.objectContaining(ont2)]) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('jsonld.context.get')).resolves.toEqual([ont1.jsonldContext, localContextUri]); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetch(localContextUri).then(res => res.json())).resolves.toEqual({ '@context': { ont2: 'https://www.w3.org/ns/ontology2#' @@ -95,31 +74,22 @@ describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a 3nd ontology', async () => { await broker.call('ontologies.register', { ...ont3 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont3' })).resolves.toMatchObject(ont3); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.list')).resolves.toEqual( - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.arrayContaining([ - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining(ont1), - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining(ont2), - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining(ont3) ]) ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('jsonld.context.get')).resolves.toEqual([ont1.jsonldContext, localContextUri]); // Only the ontologies 2 and 3 should be included - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(fetch(localContextUri).then(res => res.json())).resolves.toEqual({ '@context': { ont2: 'https://www.w3.org/ns/ontology2#', @@ -133,43 +103,33 @@ describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Register a 4th ontology with persist option', async () => { await broker.call('ontologies.register', { ...ont4, persist: true }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.get', { prefix: 'ont4' })).resolves.toMatchObject(ont4); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Find prefixes with prefix.cc', async () => { let result = await broker.call('ontologies.findPrefix', { uri: 'http://xmlns.com/foaf/0.1/name' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result).toBe('foaf'); result = await broker.call('ontologies.findPrefix', { uri: 'http://xmlns.com/foaf/0.1/' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result).toBe('foaf'); result = await broker.call('ontologies.findPrefix', { uri: 'http://xmlns.com/foaf' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result).toBeNull(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ontologies.findPrefix', { uri: 'foaf:name' })).rejects.toThrow(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get RDF prefixes', async () => { const rdfPrefixes = await broker.call('ontologies.getRdfPrefixes'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rdfPrefixes).toBe( 'PREFIX ont1: \nPREFIX ont2: \nPREFIX ont3: \nPREFIX ont4: ' ); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get prefixes', async () => { const prefixes = await broker.call('ontologies.getPrefixes'); diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts index 41fc504a9..1ff98b542 100644 --- a/src/middleware/tests/webId/webId.test.ts +++ b/src/middleware/tests/webId/webId.test.ts @@ -7,7 +7,6 @@ import { dropDataset } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const broker = new ServiceBroker({ @@ -20,11 +19,9 @@ const broker = new ServiceBroker({ cacher: CONFIG.ACTIVATE_CACHE }); -// @ts-expect-error TS(2304): Cannot find name 'beforeAll'. beforeAll(async () => { await dropDataset(CONFIG.MAIN_DATASET); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ mixins: [CoreService], settings: { @@ -52,14 +49,11 @@ beforeAll(async () => { await broker.start(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('WebId user creation', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Create user and get WebId', async () => { const profileData = { email: 'my.mail@example.org', diff --git a/src/middleware/tests/webacl/groupCRUD.test.ts b/src/middleware/tests/webacl/groupCRUD.test.ts index 9386c16f8..b851c533c 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.ts +++ b/src/middleware/tests/webacl/groupCRUD.test.ts @@ -2,7 +2,6 @@ import urlJoin from 'url-join'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; @@ -10,14 +9,11 @@ beforeAll(async () => { broker = await initialize(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('middleware CRUD group with perms', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as anonymous to webacl.group.create succeeds', async () => { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup5' }); @@ -25,7 +21,6 @@ describe('middleware CRUD group with perms', () => { expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup5')); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as user to webacl.group.create succeeds', async () => { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); @@ -33,40 +28,31 @@ describe('middleware CRUD group with perms', () => { expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup10')); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call to webacl.group.addMember succeeds. checks also getMembers', async () => { await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user1' }); await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user2' }); const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup5' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(members).toEqual(expect.arrayContaining(['http://test/user1', 'http://test/user2'])); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as anonymous to webacl.group.delete fails - access denied', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup10' })).rejects.toThrow(); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as another user than creator to webacl.group.delete fails - access denied', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user2' }) ).rejects.toThrow(); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as user to webacl.group.delete succeeds', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user3' }) ).resolves.not.toThrow(); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure a call as anonymous to webacl.group.delete succeeds for a group created anonymously', async () => { // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup5' })).resolves.not.toThrow(); diff --git a/src/middleware/tests/webacl/initialize.ts b/src/middleware/tests/webacl/initialize.ts index edc2a7a3f..d100c1ac2 100644 --- a/src/middleware/tests/webacl/initialize.ts +++ b/src/middleware/tests/webacl/initialize.ts @@ -8,7 +8,6 @@ import { fileURLToPath } from 'url'; import { dropDataset } from '../utils.ts'; import * as CONFIG from '../config.ts'; -// @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message const __dirname = path.dirname(fileURLToPath(import.meta.url)); const initialize = async () => { diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts index e8796275e..d92caae7b 100644 --- a/src/middleware/tests/webacl/resource.test.ts +++ b/src/middleware/tests/webacl/resource.test.ts @@ -3,7 +3,6 @@ import waitForExpect from 'wait-for-expect'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; @@ -13,17 +12,14 @@ beforeAll(async () => { broker = await initialize(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Permissions check on a specific resource', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions let resourceUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Get/patch/put/delete resource without permission', async () => { // When posting as system, no permissions are given on the resource resourceUri = await broker.call('ldp.container.post', { @@ -35,7 +31,6 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.get', { resourceUri, @@ -43,7 +38,6 @@ describe('Permissions check on a specific resource', () => { }) ).rejects.toThrow('Forbidden'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -58,7 +52,6 @@ describe('Permissions check on a specific resource', () => { }) ).rejects.toThrow('Forbidden'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -70,7 +63,6 @@ describe('Permissions check on a specific resource', () => { }) ).rejects.toThrow('Forbidden'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.delete', { resourceUri, @@ -79,7 +71,6 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow('Forbidden'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice read permission on resource', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -89,7 +80,6 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.get', { resourceUri, @@ -97,7 +87,6 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri, @@ -106,7 +95,6 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow('Forbidden'); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice read permission on container', async () => { await broker.call('webacl.resource.addRights', { resourceUri: containerUri, @@ -116,7 +104,6 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.get', { containerUri, @@ -124,11 +111,8 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toMatchObject({ id: containerUri, - // @ts-expect-error TS(2304): Cannot find name 'expect'. type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), - // @ts-expect-error TS(2304): Cannot find name 'expect'. 'ldp:contains': expect.arrayContaining([ - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ id: resourceUri }) @@ -136,7 +120,6 @@ describe('Permissions check on a specific resource', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Bob default read permission on container', async () => { await broker.call('webacl.resource.addRights', { resourceUri: containerUri, @@ -158,9 +141,7 @@ describe('Permissions check on a specific resource', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Post data without append permission on container', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.post', { containerUri, @@ -173,7 +154,6 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice append permission on container', async () => { await broker.call('webacl.resource.addRights', { resourceUri: containerUri, @@ -183,7 +163,6 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.container.post', { containerUri, @@ -196,7 +175,6 @@ describe('Permissions check on a specific resource', () => { ).resolves.toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice append permission on resource', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -206,7 +184,6 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -221,7 +198,6 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -236,7 +212,6 @@ describe('Permissions check on a specific resource', () => { ).resolves.toBeDefined(); // We cannot remove content with acl:Append permission - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -252,7 +227,6 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow(); // We cannot remove content with acl:Append permission - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -265,7 +239,6 @@ describe('Permissions check on a specific resource', () => { ).rejects.toThrow(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice write permission on resource', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -275,7 +248,6 @@ describe('Permissions check on a specific resource', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.patch', { resourceUri, @@ -290,7 +262,6 @@ describe('Permissions check on a specific resource', () => { }) ).resolves.toBeDefined(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('ldp.resource.put', { resource: { @@ -303,9 +274,7 @@ describe('Permissions check on a specific resource', () => { ).resolves.toBeDefined(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Give Alice control permission on resource', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.addRights', { resourceUri, diff --git a/src/middleware/tests/webacl/resourceCRUD.test.ts b/src/middleware/tests/webacl/resourceCRUD.test.ts index 2f680baa4..b80482fb3 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.ts +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -4,7 +4,6 @@ import { fetchServer } from '../utils.ts'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; let broker: any; @@ -13,16 +12,12 @@ beforeAll(async () => { broker = await initialize(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('middleware CRUD resource with perms', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('A call to ldp.container.post fails if anonymous user, because container access denied', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call( 'ldp.container.post', @@ -44,7 +39,6 @@ describe('middleware CRUD resource with perms', () => { let resourceUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('A call to ldp.container.post creates some default permissions', async () => { resourceUri = await broker.call( 'ldp.container.post', @@ -58,13 +52,11 @@ describe('middleware CRUD resource with perms', () => { { meta: { webId: ALICE_WEBID } } ); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(broker.call('ldp.resource.get', { resourceUri, webId: ALICE_WEBID })).resolves.toMatchObject({ type: 'Event', name: 'My event #1' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -84,13 +76,11 @@ describe('middleware CRUD resource with perms', () => { }); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('The ACL URI is returned in headers of GET and HEAD calls', async () => { let result = await fetchServer(resourceUri, { method: 'GET' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result.headers.get('Link')).toMatch( // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` @@ -100,14 +90,12 @@ describe('middleware CRUD resource with perms', () => { method: 'HEAD' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result.headers.get('Link')).toMatch( // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` ); }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('A call to ldp.resource.delete removes all its permissions', async () => { await broker.call('ldp.resource.delete', { resourceUri, diff --git a/src/middleware/tests/webacl/sparql-injection.test.ts b/src/middleware/tests/webacl/sparql-injection.test.ts index f2065d5ee..4d2fd5623 100644 --- a/src/middleware/tests/webacl/sparql-injection.test.ts +++ b/src/middleware/tests/webacl/sparql-injection.test.ts @@ -2,7 +2,6 @@ import urlJoin from 'url-join'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); let broker: any; @@ -10,14 +9,11 @@ beforeAll(async () => { broker = await initialize(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('pentest for the ACL groups API', () => { - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure an injection with > in addMember fails', async () => { try { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); @@ -48,7 +44,6 @@ describe('pentest for the ACL groups API', () => { expect(e.type).toEqual('SPARQL_INJECTION'); const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup1' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(members).toEqual(expect.arrayContaining(['http://localhost:3000/users/info1'])); // clean up @@ -56,7 +51,6 @@ describe('pentest for the ACL groups API', () => { } }, 20000); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Ensure an injection with \\x3C in addMember fails', async () => { try { const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts index e77d621b2..1609691fc 100644 --- a/src/middleware/tests/webacl/utils.test.ts +++ b/src/middleware/tests/webacl/utils.test.ts @@ -1,7 +1,6 @@ import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -// @ts-expect-error TS(2304): Cannot find name 'jest'. jest.setTimeout(20000); const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; @@ -11,17 +10,14 @@ beforeAll(async () => { broker = await initialize(); }); -// @ts-expect-error TS(2304): Cannot find name 'afterAll'. afterAll(async () => { await broker.stop(); }); -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message describe('Test various actions of the webacl.resource service', () => { const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions let resourceUri: any; - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Alice see her rights correctly', async () => { resourceUri = await broker.call('ldp.container.post', { containerUri, @@ -41,7 +37,6 @@ describe('Test various actions of the webacl.resource service', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -56,14 +51,10 @@ describe('Test various actions of the webacl.resource service', () => { const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: ALICE_WEBID }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights['@graph']).toHaveLength(3); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights).toMatchObject({ - // @ts-expect-error TS(2304): Cannot find name 'expect'. '@graph': expect.arrayContaining([ - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Read', '@type': 'acl:Authorization', @@ -72,7 +63,6 @@ describe('Test various actions of the webacl.resource service', () => { 'acl:agentClass': 'foaf:Agent', 'acl:mode': 'acl:Read' }), - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Write', '@type': 'acl:Authorization', @@ -80,7 +70,6 @@ describe('Test various actions of the webacl.resource service', () => { 'acl:agent': ALICE_WEBID, 'acl:mode': 'acl:Write' }), - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Control', '@type': 'acl:Authorization', @@ -92,11 +81,9 @@ describe('Test various actions of the webacl.resource service', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Anonymous user cannot see Alice rights', async () => { const rights = await broker.call('webacl.resource.getRights', { resourceUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri @@ -108,14 +95,10 @@ describe('Test various actions of the webacl.resource service', () => { control: false }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights['@graph']).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights).toMatchObject({ - // @ts-expect-error TS(2304): Cannot find name 'expect'. '@graph': expect.arrayContaining([ - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Read', '@type': 'acl:Authorization', @@ -127,7 +110,6 @@ describe('Test various actions of the webacl.resource service', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Bob can see his rights but not Alice rights', async () => { await broker.call('webacl.resource.addRights', { resourceUri, @@ -137,7 +119,6 @@ describe('Test various actions of the webacl.resource service', () => { webId: 'system' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -152,14 +133,10 @@ describe('Test various actions of the webacl.resource service', () => { const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights['@graph']).toHaveLength(2); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(rights).toMatchObject({ - // @ts-expect-error TS(2304): Cannot find name 'expect'. '@graph': expect.arrayContaining([ - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Read', '@type': 'acl:Authorization', @@ -168,7 +145,6 @@ describe('Test various actions of the webacl.resource service', () => { 'acl:agentClass': 'foaf:Agent', 'acl:mode': 'acl:Read' }), - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect.objectContaining({ '@id': '#Write', '@type': 'acl:Authorization', @@ -180,9 +156,7 @@ describe('Test various actions of the webacl.resource service', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Resource is public according to isPublic action', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.isPublic', { resourceUri @@ -190,9 +164,7 @@ describe('Test various actions of the webacl.resource service', () => { ).resolves.toBeTruthy(); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Alice and Bob is returned by getUsersWithReadRights action', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.getUsersWithReadRights', { resourceUri @@ -200,7 +172,6 @@ describe('Test various actions of the webacl.resource service', () => { ).resolves.toContain(ALICE_WEBID, BOB_WEBID); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove write permission for Bob', async () => { await broker.call('webacl.resource.removeRights', { resourceUri, @@ -210,7 +181,6 @@ describe('Test various actions of the webacl.resource service', () => { webId: ALICE_WEBID // Alice has acl:Control permission }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -224,13 +194,11 @@ describe('Test various actions of the webacl.resource service', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove all permissions for Alice', async () => { await broker.call('webacl.resource.deleteAllUserRights', { webId: ALICE_WEBID }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( broker.call('webacl.resource.hasRights', { resourceUri, @@ -244,7 +212,6 @@ describe('Test various actions of the webacl.resource service', () => { }); }); - // @ts-expect-error TS(2582): Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message test('Remove all permissions for resource', async () => { await broker.call('webacl.resource.deleteAllRights', { resourceUri From 4180de337b24abe1d74b7ba93a57d395f9f979a3 Mon Sep 17 00:00:00 2001 From: Laurin Weger <59744144+Laurin-W@users.noreply.github.com> Date: Mon, 29 Sep 2025 11:35:05 +0200 Subject: [PATCH 089/165] fix: edd25519 getByType --- src/middleware/packages/crypto/keys/keys.ts | 9 +++++++-- src/middleware/tests/crypto/keys.test.ts | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index e46ceec7f..03228a56b 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -1,7 +1,6 @@ import fetch from 'node-fetch'; import { generateKeyPair } from 'crypto'; import rdf from '@rdfjs/data-model'; -import { MIME_TYPES } from '@semapps/mime-types'; import { sec } from '@semapps/ontologies'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; @@ -92,10 +91,16 @@ const KeysService = { // Get the key container, to search by type. const container = await ctx.call('keys.container.list', { webId }); + // Because edd2519 multikeys are allowed to have one key only, we filter like that. + // TODO: We only support those keys anyways. If we support other ones in the future, + // we need to refactor. + const keyTypeToFilterBy = keyType === KEY_TYPES.ED25519 ? 'sec:Multikey' : keyType; + // Check if key type is present. const matchedKeys = container['ldp:contains'].filter( (keyResource: any) => - arrayOf(keyResource.type || keyResource['@type']).includes(keyType) && keyResource.controller === webId + arrayOf(keyResource.type || keyResource['@type']).includes(keyTypeToFilterBy) && + keyResource.controller === webId ); return matchedKeys; diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index 1278c2e12..c1275b9da 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -531,7 +531,6 @@ describe('keys', () => { expect(publicKey.owner).toBe(user.webId); expect(publicKey.controller).toBe(user.webId); expect(publicKey.publicKeyPem).toBe(keyPair.publicKeyPem); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(publicKey.privateKeyPem).toBeUndefined(); }); }); From f7aa4b02298765c9e32a68d0dcb78d5e5bfa72ec Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 14 Oct 2025 15:03:57 +0200 Subject: [PATCH 090/165] Refactor named-graph.create action to handle URI generation --- .../subservices/collections-registry.ts | 3 +-- src/middleware/packages/ldp/service.ts | 18 +++++-------- .../ldp/services/container/actions/create.ts | 1 - .../ldp/services/container/actions/post.ts | 17 ++++-------- .../packages/ldp/services/container/index.ts | 13 ++++++++-- .../packages/ldp/services/resource/index.ts | 6 ++--- .../packages/triplestore/package.json | 1 + .../triplestore/subservices/named-graph.ts | 26 ++++++++++++++----- website/docs/middleware/ldp/resource.md | 16 ------------ 9 files changed, 46 insertions(+), 55 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 74b0dd40f..e887c8f08 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -71,8 +71,7 @@ const CollectionsRegistryService = { }, contentType: MIME_TYPES.JSON, webId: this.settings.podProvider ? getWebIdFromUri(objectUri) : 'system', - permissions, // Handled by the WebAclMiddleware, if present - forcedResourceUri: path ? collectionUri : undefined // Bypass the automatic URI generation + permissions // Handled by the WebAclMiddleware, if present }); // Attach it to the object diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 623e1d7a5..f8bd56912 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -17,29 +17,23 @@ const LdpSchema = { podProvider: false, defaultContainerOptions: {}, preferredViewForResource: null, - resourcesWithContainerPath: true, + allowSlugs: true, binary: { maxSize: '50Mb' } }, dependencies: ['ldp.container', 'ldp.resource', 'ldp.registry', 'ontologies', 'jsonld'], async created() { - const { - baseUrl, - containers, - podProvider, - defaultContainerOptions, - preferredViewForResource, - resourcesWithContainerPath, - binary - } = this.settings; + const { baseUrl, containers, podProvider, defaultContainerOptions, preferredViewForResource, allowSlugs, binary } = + this.settings; // @ts-expect-error TS(2322): Type '{ name: "ldp.container"; settings: { baseUrl... Remove this comment to see the full error message this.broker.createService({ mixins: [LdpContainerService], settings: { baseUrl, - podProvider + podProvider, + allowSlugs }, hooks: this.schema.hooksContainer || {} }); @@ -51,7 +45,7 @@ const LdpSchema = { baseUrl, podProvider, preferredViewForResource, - resourcesWithContainerPath, + allowSlugs, binary }, hooks: this.schema.hooksResource || {} diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 3e1df1a66..13f070ed8 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -11,7 +11,6 @@ const Schema = { }, async handler(ctx) { const { containerUri, title, description, options } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('triplestore.insert', { diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 54b764aa1..104f7a09e 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -30,14 +30,10 @@ const Schema = { webId: { type: 'string', optional: true - }, - forcedResourceUri: { - type: 'string', - optional: true } }, async handler(ctx) { - let { resource, containerUri, slug, contentType, file, forcedResourceUri } = ctx.params; + let { resource, containerUri, slug, contentType, file } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let isContainer = false; let expandedResource; @@ -84,12 +80,10 @@ const Schema = { ); } - // The forcedResourceUri param allows Moleculer service to bypass URI generation - // It is used by ActivityStreams collections to provide URIs like {actorUri}/inbox - // TODO Use UUIDs for containers and collections https://github.com/assemblee-virtuelle/semapps/issues/1266 - const resourceUri = - forcedResourceUri || (await ctx.call('ldp.resource.generateId', { containerUri, slug, isContainer })); - await ctx.call('triplestore.named-graph.create', { uri: resourceUri }); + const resourceUri = await ctx.call('triplestore.named-graph.create', { + baseUrl: await this.getBaseUrl(ctx), + slug: this.settings.allowSlugs ? slug : undefined + }); // We must add this first, otherwise side effects will not find the container of the created resource // But this create race conditions, especially when testing, since uncreated resources are linked to containers @@ -148,7 +142,6 @@ const Schema = { throw e; } - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit( 'ldp.container.attached', diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index 593c01abf..ee20de5d8 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -1,4 +1,5 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; +import urlJoin from 'url-join'; import attachAction from './actions/attach.ts'; import clearAction from './actions/clear.ts'; import createAction from './actions/create.ts'; @@ -20,7 +21,8 @@ const LdpContainerSchema = { name: 'ldp.container' as const, settings: { baseUrl: null, - podProvider: false + podProvider: false, + allowSlugs: true }, dependencies: ['triplestore', 'jsonld'], actions: { @@ -40,6 +42,13 @@ const LdpContainerSchema = { post: postAction, patch: patchAction }, + methods: { + async getBaseUrl(ctx) { + return this.settings.podProvider + ? await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) + : this.settings.baseUrl; + } + }, hooks: { before: { '*'(ctx) { diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index f71a77450..c88ae53da 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import awaitCreateCompleteAction from './actions/awaitCreateComplete.ts'; import getAction from './actions/get.ts'; import createAction from './actions/create.ts'; @@ -6,7 +6,6 @@ import patchAction from './actions/patch.ts'; import putAction from './actions/put.ts'; import deleteAction from './actions/delete.ts'; import existAction from './actions/exist.ts'; -import generateIdAction from './actions/generateId.ts'; import getContainersAction from './actions/getContainers.ts'; import getTypesAction from './actions/getTypes.ts'; import uploadAction from './actions/upload.ts'; @@ -19,6 +18,7 @@ const LdpResourceSchema = { baseUrl: null, podProvider: false, preferredViewForResource: null, + allowSlugs: true, binary: { maxSize: '50Mb' } @@ -29,14 +29,12 @@ const LdpResourceSchema = { create: createAction, delete: deleteAction, exist: existAction, - generateId: generateIdAction, // @ts-expect-error get: getAction, getContainers: getContainersAction, getTypes: getTypesAction, patch: patchAction, put: putAction, - // @ts-expect-error upload: uploadAction }, hooks: { diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 0c1f36eba..81de956e7 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -12,6 +12,7 @@ "node-fetch": "^2.6.6", "sparqljs": "^3.5.2", "sparqljson-parse": "^1.5.1", + "speakingurl": "^14.0.1", "string-template": "^1.0.0", "url-join": "^4.0.1", "uuid": "^9.0.1" diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index 21e02b983..8d76c5037 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -1,5 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; +import createSlug from 'speakingurl'; +import urlJoin from 'url-join'; import { ServiceSchema } from 'moleculer'; const NamedGraphService = { @@ -7,15 +9,27 @@ const NamedGraphService = { actions: { create: { async handler(ctx) { - // TODO Do not allow to pass the named graph URI on creation - let { uri } = ctx.params; + let { baseUrl, slug } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; - if (!uri) uuidv4(); + // Ensure the slug does not contain special characters + if (slug) slug = createSlug(slug, { lang: 'en', custom: { '.': '.' } }); - if (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })) { - throw new Error(`Cannot create named graph as it already exists`); - } + // Find an URI that does not already exists + let uri; + let counter = 0; + do { + if (slug) { + if (counter > 0) { + counter += 1; + uri = urlJoin(baseUrl, slug + counter); + } else { + uri = urlJoin(baseUrl, slug); + } + } else { + uri = urlJoin(baseUrl, uuidv4()); + } + } while (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })); await ctx.call('triplestore.update', { query: `INSERT DATA { GRAPH <${uri}> {} }`, diff --git a/website/docs/middleware/ldp/resource.md b/website/docs/middleware/ldp/resource.md index 63d46d038..cb2c7f9a8 100644 --- a/website/docs/middleware/ldp/resource.md +++ b/website/docs/middleware/ldp/resource.md @@ -64,22 +64,6 @@ Delete the whole resource and detach it from its container `Boolean` -### `generateId` - -Finds an unique ID for a resource - -##### Parameters - -| Property | Type | Default | Description | -| -------------- | --------- | ------------ | ---------------------------------------------------- | -| `containerUri` | `String` | **required** | URI of the container where to create the resource | -| `slug` | `String` | | Preferred slug (will be "slugified") | -| `isContainer` | `Boolean` | `false` | Set to true if you want to generate a container's ID | - -##### Return values - -Full available URI - ### `get` - Get a resource by its URI From 6a5b91a6bca163c05cf181f65db8e15bc115fc2e Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 17 Oct 2025 17:08:32 +0200 Subject: [PATCH 091/165] Various fixes --- src/middleware/.eslintrc.json | 2 +- .../services/activitypub/subservices/actor.ts | 2 +- .../container/actions/createAndAttach.ts | 1 - .../ldp/services/resource/actions/patch.ts | 18 ----- src/middleware/packages/ldp/utils.ts | 3 + .../triplestore/subservices/named-graph.ts | 2 +- .../packages/webacl/middlewares/webacl.ts | 4 +- website/docs/middleware/solid/type-indexes.md | 34 ++++----- .../middleware/solid/type-registrations.md | 70 ------------------- website/sidebars.js | 3 +- 10 files changed, 27 insertions(+), 112 deletions(-) delete mode 100644 website/docs/middleware/solid/type-registrations.md diff --git a/src/middleware/.eslintrc.json b/src/middleware/.eslintrc.json index 529d0d152..f40759567 100644 --- a/src/middleware/.eslintrc.json +++ b/src/middleware/.eslintrc.json @@ -90,7 +90,7 @@ "import/no-unresolved": "off", "import/no-useless-path-segments": "warn", "import/order": "warn", - "jest/no-conditional-expect": "warn", + "jest/no-conditional-expect": "off", "jsdoc/require-jsdoc": "off", "jsdoc/require-param": "off", "jsdoc/require-returns": "off", diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index f4387937c..017b76613 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -106,7 +106,7 @@ const ActorService = { insert: [ { type: 'graph', - name: namedNode(actorUri), + name: rdf.namedNode(actorUri), triples: [ rdf.quad( rdf.namedNode(actorUri), diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 3e0a29642..8cef4fad2 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -67,7 +67,6 @@ const Schema = { // Then attach the container to its parent container if (parentContainerUri) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.actions.attach( { containerUri: parentContainerUri, diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 376e23895..abbac57d9 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -3,22 +3,6 @@ import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; -function checkTriplesSubjectIsResource(triples: any, resourceUri: any) { - for (const triple of triples) { - switch (triple.subject.termType) { - case 'NamedNode': - // Ensure the subject is the same as the patched resource - if (triple.subject.value !== resourceUri) { - throw new MoleculerError('The SPARQL request must modify only the patched resource', 400, 'BAD_REQUEST'); - } - break; - case 'BlankNode': - // Accept blank nodes, as they are necessarily linked to the patched resource - break; - } - } -} - const Schema = { visibility: 'public', params: { @@ -69,7 +53,6 @@ const Schema = { }; if (triplesToRemove) { - checkTriplesSubjectIsResource(triplesToRemove, resourceUri); // @ts-expect-error TS(2345): Argument of type '{ updateType: string; delete: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'delete', @@ -78,7 +61,6 @@ const Schema = { } if (triplesToAdd) { - checkTriplesSubjectIsResource(triplesToAdd, resourceUri); // @ts-expect-error TS(2345): Argument of type '{ updateType: string; insert: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'insert', diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index ecd254860..88f343652 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -45,6 +45,8 @@ const isURL = (value: any) => (typeof value === 'string' || value instanceof Str const isURI = (value: any) => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); +const isWebId = (value: any) => value !== 'system' && value !== 'anon' && isURL(value); + const buildFiltersQuery = (filters: any) => { let query = ''; if (filters) { @@ -176,6 +178,7 @@ export { buildFiltersQuery, isURL, isURI, + isWebId, isObject, getSlugFromUri, getContainerFromUri, diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index 8d76c5037..f0fd3cc41 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -13,7 +13,7 @@ const NamedGraphService = { const dataset = ctx.params.dataset || ctx.meta.dataset; // Ensure the slug does not contain special characters - if (slug) slug = createSlug(slug, { lang: 'en', custom: { '.': '.' } }); + if (slug) slug = createSlug(slug, { lang: 'en', custom: { '.': '.', '/': '/' } }); // Find an URI that does not already exists let uri; diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index b2a891cad..d4da52a35 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -101,8 +101,8 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se case 'ldp.container.create': { // On start, container permissions are passed as parameters because the registry is not up yet let permissions; - if (ctx.params.options?.permissions) { - permissions = ctx.params.options?.permissions; + if (ctx.params.options) { + permissions = ctx.params.options?.permissions || defaultContainerOptions.permissions; } else { const options = await ctx.call('ldp.registry.getByUri', { containerUri: ctx.params.containerUri }); permissions = options?.permissions || defaultContainerOptions.permissions; diff --git a/website/docs/middleware/solid/type-indexes.md b/website/docs/middleware/solid/type-indexes.md index f9ef95a10..cee390bbf 100644 --- a/website/docs/middleware/solid/type-indexes.md +++ b/website/docs/middleware/solid/type-indexes.md @@ -1,5 +1,5 @@ --- -title: TypeIndexesService +title: TypeIndexService --- This service automatically create a public [TypeIndex](https://github.com/solid/type-indexes) after a user creation, and it attaches it to its WebID with the `solid:publicTypeIndex` predicate. It will also automatically [register a type](./type-registrations.md#register) for every [controlled LDP container](../ldp/controlled-container.md). @@ -8,30 +8,32 @@ This service automatically create a public [TypeIndex](https://github.com/solid/ The following service actions are available: -### `createAndAttachToWebId` +### `getContainersUris` -Create a public TypeIndex and attach it to the given WebID. +Get the URIs of all LDP containers associated with a given type. ##### Parameters -| Property | Type | Default | Description | -| -------- | ----- | ------------ | -------------------------------- | -| `webId` | `URI` | **required** | WebID to attach the TypeIndex to | +| Property | Type | Default | Description | +| -------- | ----- | ------------ | ---------------------------------------------------- | +| `type` | `URI` | **required** | The type to look for (can be prefixed or a full URI) | +| `webId` | `URI` | **required** | WebID of the user with the TypeIndex | -### `findByWebID` +##### Return -Get the URL of the Pod attached with the provided WebID +An array of LDP containers URIs. -##### Parameters +### `getTypes` -| Property | Type | Default | Description | -| -------- | ----- | ------------ | ---------------------------------- | -| `webId` | `URI` | **required** | WebID the TypeIndex is attached to | +Get the types associated with a given LDP container. -##### Return +##### Parameters -The URI of the public TypeIndex +| Property | Type | Default | Description | +| -------------- | ----- | ------------ | ------------------------------------ | +| `containerUri` | `URI` | **required** | The URI of the container to look for | +| `webId` | `URI` | **required** | WebID of the user with the TypeIndex | -### `migrate` +##### Return -Go through all existing accounts, create public TypeIndexes, and generate TypeRegistrations for all controlled LDP containers. +A TypeRegistration diff --git a/website/docs/middleware/solid/type-registrations.md b/website/docs/middleware/solid/type-registrations.md deleted file mode 100644 index f0729e72f..000000000 --- a/website/docs/middleware/solid/type-registrations.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: TypeRegistrationsService ---- - -This service is automatically created by the [TypeIndexesService](./type-indexes.md). - -## Actions - -The following service actions are available: - -### `register` - -Register a type with its container, and attach it to the public TypeIndex linked with the provided WebID. If a TypeRegistration already exist for the container, simply attach the new type. - -##### Parameters - -| Property | Type | Default | Description | -| -------------- | ----- | ------------ | ---------------------------------------------------- | -| `type` | `URI` | **required** | The type to register (can be prefixed or a full URI) | -| `containerUri` | `URI` | **required** | The URI of the container associated with this type | -| `webId` | `URI` | **required** | WebID of the user with the TypeIndex | - -### `getByType` - -Get a list of TypeRegistrations associated with a given type - -##### Parameters - -| Property | Type | Default | Description | -| -------- | ----- | ------------ | ---------------------------------------------------- | -| `type` | `URI` | **required** | The type to look for (can be prefixed or a full URI) | -| `webId` | `URI` | **required** | WebID of the user with the TypeIndex | - -##### Return - -An array of TypeRegistrations - -### `findContainersUris` - -Get the URIs of all LDP containers associated with a given type. - -##### Parameters - -| Property | Type | Default | Description | -| -------- | ----- | ------------ | ---------------------------------------------------- | -| `type` | `URI` | **required** | The type to look for (can be prefixed or a full URI) | -| `webId` | `URI` | **required** | WebID of the user with the TypeIndex | - -##### Return - -An array of LDP containers URIs. - -### `getByContainerUri` - -Get the TypeRegistration associated with a given LDP container - -##### Parameters - -| Property | Type | Default | Description | -| -------------- | ----- | ------------ | ------------------------------------ | -| `containerUri` | `URI` | **required** | The URI of the container to look for | -| `webId` | `URI` | **required** | WebID of the user with the TypeIndex | - -##### Return - -A TypeRegistration - -### `addMissing` - -Go through all existing accounts and generate TypeRegistrations for all controlled LDP containers. diff --git a/website/sidebars.js b/website/sidebars.js index 3482afb4c..cf80b68e7 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -76,8 +76,7 @@ module.exports = { }, items: [ 'middleware/solid/pod', - 'middleware/solid/type-indexes', - 'middleware/solid/type-registrations', + 'middleware/solid/type-index', 'middleware/solid/notifications-provider', 'middleware/solid/notifications-listener' ] From 47d8555daeb21b149751d97ca24084a2c15dfb07 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 20 Oct 2025 15:40:50 +0200 Subject: [PATCH 092/165] Refactor TypeIndex. Working controlled containers and resources --- .../subservices/collections-registry.ts | 2 +- .../activitypub/subservices/object.ts | 39 +- .../packages/activitypub/services/relay.ts | 10 +- src/middleware/packages/core/package.json | 1 + src/middleware/packages/core/service.ts | 11 + .../packages/crypto/keys/key-container.ts | 1 + .../crypto/keys/public-key-container.ts | 1 + src/middleware/packages/ldp/index.ts | 4 +- .../ldp/mixins/controlled-container.ts | 16 +- .../ldp/mixins/controlled-resource.ts | 134 +++++++ src/middleware/packages/ldp/service.ts | 3 +- .../services/registry/actions/getByType.ts | 27 -- .../services/registry/actions/getByTypes.ts | 24 ++ .../ldp/services/registry/actions/getByUri.ts | 25 +- .../ldp/services/registry/actions/getUri.ts | 25 +- .../ldp/services/registry/actions/register.ts | 55 ++- .../ldp/services/registry/defaultOptions.ts | 5 +- .../packages/ldp/services/registry/index.ts | 28 +- .../ldp/services/resource/actions/create.ts | 7 +- src/middleware/packages/ldp/types.ts | 42 +++ src/middleware/packages/solid/index.ts | 4 +- .../solid/services/preferences-file.ts | 16 +- .../services/type-index/private-type-index.ts | 51 +++ .../services/type-index/public-type-index.ts | 51 +++ .../solid/services/type-index/type-index.ts | 202 +++++++++++ .../solid/services/type-index/type-indexes.ts | 228 ------------ .../services/type-index/type-registrations.ts | 341 ------------------ .../packages/sync/services/synchronizer.ts | 23 +- .../tests/ldp/controlled-container.test.ts | 91 +++++ .../tests/ldp/controlled-resource.test.ts | 69 ++++ src/middleware/tests/ldp/initialize.ts | 19 +- src/middleware/tests/package.json | 1 + .../middleware/ldp/controlled-resource.md | 77 ++++ .../ldp/single-resource-container.md | 75 ---- website/sidebars.js | 2 +- 35 files changed, 869 insertions(+), 841 deletions(-) create mode 100644 src/middleware/packages/ldp/mixins/controlled-resource.ts delete mode 100644 src/middleware/packages/ldp/services/registry/actions/getByType.ts create mode 100644 src/middleware/packages/ldp/services/registry/actions/getByTypes.ts create mode 100644 src/middleware/packages/ldp/types.ts create mode 100644 src/middleware/packages/solid/services/type-index/private-type-index.ts create mode 100644 src/middleware/packages/solid/services/type-index/public-type-index.ts create mode 100644 src/middleware/packages/solid/services/type-index/type-index.ts delete mode 100644 src/middleware/packages/solid/services/type-index/type-indexes.ts delete mode 100644 src/middleware/packages/solid/services/type-index/type-registrations.ts create mode 100644 src/middleware/tests/ldp/controlled-container.test.ts create mode 100644 src/middleware/tests/ldp/controlled-resource.test.ts create mode 100644 website/docs/middleware/ldp/controlled-resource.md delete mode 100644 website/docs/middleware/ldp/single-resource-container.md diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index e887c8f08..25de2c8a5 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -122,7 +122,7 @@ const CollectionsRegistryService = { for (let dataset of datasets) { // Find all containers where we want to attach this collection - const containers = await ctx.call('ldp.registry.getByType', { type: collection.attachToTypes, dataset }); + const containers = await ctx.call('ldp.registry.getByTypes', { types: collection.attachToTypes, dataset }); for (const container of Object.values(containers)) { // @ts-expect-error TS(18046): 'container' is of type 'unknown'. const containerUri = urlJoin(this.settings.baseUri, container.fullPath); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index a4adb34c2..1079b268c 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,6 +1,7 @@ import { getType } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; +import { arrayOf } from '../../../utils.ts'; const ObjectService = { name: 'activitypub.object' as const, @@ -57,43 +58,21 @@ const ObjectService = { // If the object passed is an URI, this is an announcement and there is nothing to process if (typeof activity.object === 'string') break; - const types = await ctx.call('jsonld.parser.expandTypes', { - types: activity.object.type || activity.object['@type'], - context: activity['@context'] - }); + const types = arrayOf(activity.object['@type'] || activity.object.type); - // TODO: attach to all matching containers - let container; - let containerUri; - - if (this.settings.podProvider) { - // If this is a Pod provider, find the container with the type-registrations service - for (const type of types) { - const containersUris = await ctx.call('type-registrations.findContainersUris', { - type, - webId: actorUri - }); - if (containersUris.length > 0) { - containerUri = containersUris[0]; - continue; - } - } - } else { - // Otherwise try to find it with the LdpRegistry - container = await ctx.call('ldp.registry.getByType', { type: types }); - if (container) { - containerUri = await ctx.call('ldp.registry.getUri', { - path: container.path, - webId: actorUri - }); - } - } + const [containerUri] = await ctx.call('type-index.getContainersUris', { + type: types[0], + webId: actorUri + }); if (!containerUri) throw new Error( `Cannot create resource of type "${types.join(', ')}", no matching containers were found!` ); + // Find if the container is controlled + const container = await ctx.call('ldp.registry.getByTypes', { types }); + objectUri = await ctx.call( container?.controlledActions?.post || 'ldp.container.post', { diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts index fc2e33ab7..44ba961aa 100644 --- a/src/middleware/packages/activitypub/services/relay.ts +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -1,5 +1,4 @@ import urlJoin from 'url-join'; -import { MIME_TYPES } from '@semapps/mime-types'; import { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { delay } from '../utils.ts'; @@ -14,19 +13,18 @@ const RelayService = { }, dependencies: ['activitypub', 'activitypub.follow', 'auth.account', 'ldp.container', 'ldp.registry'], async started() { - let appsContainer; + let containerUri: string; do { - appsContainer = await this.broker.call('ldp.registry.getByType', { type: ACTOR_TYPES.APPLICATION }); - if (!appsContainer) { + containerUri = await this.broker.call('ldp.registry.getUri', { type: ACTOR_TYPES.APPLICATION }); + if (!containerUri) { this.logger.warn("Waiting for a container that accepts the 'Application' type..."); await delay(3000); } - } while (!appsContainer); + } while (!containerUri); const actorSettings = this.settings.actor; const actorExist = await this.broker.call('auth.account.usernameExists', { username: actorSettings.username }); - const containerUri = await this.broker.call('ldp.registry.getUri', { path: appsContainer.path }); const actorUri = urlJoin(containerUri, actorSettings.username); // Creating the local actor 'relay' diff --git a/src/middleware/packages/core/package.json b/src/middleware/packages/core/package.json index a953ade03..bff87a55f 100644 --- a/src/middleware/packages/core/package.json +++ b/src/middleware/packages/core/package.json @@ -10,6 +10,7 @@ "@semapps/jsonld": "1.2.0", "@semapps/ldp": "1.2.0", "@semapps/ontologies": "1.2.0", + "@semapps/solid": "1.2.0", "@semapps/sparql-endpoint": "1.2.0", "@semapps/triplestore": "1.2.0", "@semapps/void": "1.2.0", diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 3e8b8e6e7..3911d3960 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -7,6 +7,7 @@ import { LdpService, DocumentTaggerMixin } from '@semapps/ldp'; import { OntologiesService } from '@semapps/ontologies'; import { SparqlEndpointService } from '@semapps/sparql-endpoint'; import { TripleStoreService } from '@semapps/triplestore'; +import { TypeIndexService } from '@semapps/solid'; import { VoidService } from '@semapps/void'; import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; @@ -44,6 +45,7 @@ const CoreService = { ldp: {}, signature: {}, sparqlEndpoint: {}, + typeIndex: {}, void: {}, webacl: {}, webfinger: {}, @@ -138,6 +140,15 @@ const CoreService = { }); } + if (this.settings.typeIndex !== false) { + this.broker.createService({ + mixins: [TypeIndexService], + settings: { + ...this.settings.typeIndex + } + }); + } + if (this.settings.signature !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: any; ... Remove this comment to see the full error message this.broker.createService({ diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index 171339cf1..50f09f348 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -42,6 +42,7 @@ const KeysContainerSchema = { }; }, excludeFromMirror: true, + typeIndex: 'private', // Disallow PATCH & PUT, to prevent keys from being overwritten controlledActions: { get: 'keys.container.get', // Returns key object with context and type required by Multikey spec. diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index 539f6549a..9ab25725d 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -42,6 +42,7 @@ const KeysPublicContainerSchema = { }; }, excludeFromMirror: false, + typeIndex: 'public', // Disallow PATCH & PUT, to prevent keys from being overwritten controlledActions: { get: 'keys.container.get', // Returns key object with context and type required by Multikey spec. diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index fa79bc1cc..f5344648c 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -6,12 +6,12 @@ import LdpRegistryService from './services/registry/index.ts'; import LdpResourceService from './services/resource/index.ts'; import PermissionsService from './services/permissions/index.ts'; import ControlledContainerMixin from './mixins/controlled-container.ts'; +import ControlledResourceMixin from './mixins/controlled-resource.ts'; import DereferenceMixin from './mixins/dereference.ts'; import ImageProcessorMixin from './mixins/image-processor.ts'; import MimeTypesMixin from './mixins/mime-types.ts'; import DocumentTaggerMixin from './mixins/document-tagger.ts'; import DisassemblyMixin from './mixins/disassembly.ts'; -import SingleResourceContainerMixin from './mixins/single-resource-container.ts'; import SpecialEndpointMixin from './mixins/special-endpoint.ts'; import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; import defaultContainerOptions from './services/registry/defaultOptions.ts'; @@ -27,12 +27,12 @@ export { LdpResourceService, PermissionsService, ControlledContainerMixin, + ControlledResourceMixin, DereferenceMixin, ImageProcessorMixin, MimeTypesMixin, DocumentTaggerMixin, DisassemblyMixin, - SingleResourceContainerMixin, SpecialEndpointMixin, OrphanFilesDeletionMixin, defaultContainerOptions, diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index e17f0c4fc..f4a051973 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,5 +1,5 @@ import { ServiceSchema } from 'moleculer'; -import { delay, getParentContainerUri } from '../utils.ts'; +import { arrayOf, delay, getParentContainerUri } from '../utils.ts'; const Schema = { settings: { @@ -19,7 +19,7 @@ const Schema = { async started() { const { path, controlledActions, ...rest } = this.settings; - const registration = await this.broker.call('ldp.registry.register', { + await this.broker.call('ldp.registry.register', { path, name: this.name, controlledActions: { @@ -35,9 +35,6 @@ const Schema = { }, ...rest }); - - // If no path was defined in the settings, set the automatically generated path (so that it can be used below) - if (!path) this.settings.path = registration.path; }, actions: { post: { @@ -89,7 +86,7 @@ const Schema = { }, getHeaderLinks: { - handler(ctx) { + handler() { return []; } }, @@ -125,9 +122,9 @@ const Schema = { }, getContainerUri: { - handler(ctx) { - return ctx.call('ldp.registry.getUri', { - path: this.settings.path, + async handler(ctx) { + return await ctx.call('ldp.registry.getUri', { + type: arrayOf(this.settings.acceptedTypes)[0], webId: ctx.params?.webId || ctx.meta?.webId }); } @@ -141,7 +138,6 @@ const Schema = { if (!containerUri) { containerUri = await this.actions.getContainerUri( - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. { webId: ctx.params.webId || ctx.meta.webId }, { parentCtx: ctx } ); diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts new file mode 100644 index 000000000..6da314e76 --- /dev/null +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -0,0 +1,134 @@ +import { ServiceSchema, Errors } from 'moleculer'; +import { arrayOf, delay, getDatasetFromUri, getType, isWebId } from '../utils.ts'; + +const { MoleculerError } = Errors; + +const ControlledResourceMixin = { + settings: { + slug: null, + initialValue: {}, + permissions: {}, + controlledActions: {} + }, + dependencies: ['ldp', 'triplestore.named-graph', 'webacl.resource'], + async started() { + if (!this.settings.podProvider) { + await this.actions.create({}); + } + }, + actions: { + create: { + async handler(ctx) { + const { webId } = ctx.params; + + const resourceExist = await this.actions.exist({ webId }, { parentCtx: ctx }); + + if (!resourceExist) { + let resource = this.settings.initialValue; + + const baseUrl = await ctx.call('ldp.getSetting', { key: 'baseUrl' }); + const allowSlugs = await ctx.call('ldp.getSetting', { key: 'allowSlugs' }); + const resourceUri = await ctx.call('triplestore.named-graph.create', { + baseUrl, + slug: allowSlugs ? this.settings.slug : undefined + }); + + await ctx.call('ldp.resource.create', { + resourceUri, + resource: { '@id': resourceUri, ...resource }, + webId: 'system' + }); + + if (this.settings.permissions) { + await ctx.call('webacl.resource.addRights', { + resourceUri, + additionalRights: this.settings.permissions, + webId: 'system' + }); + } + + return resourceUri; + } + } + }, + + getUri: { + async handler(ctx) { + const { webId } = ctx.params; + const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { + types: arrayOf(getType(this.settings.initialValue)) + }); + + const results = await ctx.call('triplestore.query', { + query: ` + SELECT ?resourceUri + WHERE { + GRAPH ?resourceUri { + ?resourceUri a ${expandedTypes.map(t => `<${t}>`).join(', ')} . + } + } + `, + dataset: isWebId(webId) ? getDatasetFromUri(webId) : undefined + }); + + return results[0]?.resourceUri.value; + } + }, + + exist: { + async handler(ctx) { + const { webId } = ctx.params; + const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); + return !!resourceUri; + } + }, + + get: { + async handler(ctx) { + const { webId } = ctx.params; + const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); + if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); + return await ctx.call('ldp.resource.get', { resourceUri, ...ctx.params }); + } + }, + + patch: { + async handler(ctx) { + const { webId } = ctx.params; + const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); + if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); + return await ctx.call('ldp.resource.patch', { resourceUri, ...ctx.params }); + } + }, + + waitForCreation: { + async handler(ctx) { + const { webId } = ctx.params; + let resourceUri; + let attempts = 0; + + do { + attempts += 1; + if (attempts > 1) await delay(1000); + resourceUri = await this.actions.getUri({ webId }); + } while (!resourceUri || attempts > 30); + + if (!resourceUri) throw new Error(`Resource still had not been created after 30s`); + + return resourceUri; + } + } + }, + events: { + 'auth.registered': { + async handler(ctx) { + if (this.settings.podProvider) { + const { webId } = ctx.params; + await this.actions.create({ webId }); + } + } + } + } +} satisfies Partial; + +export default ControlledResourceMixin; diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index f8bd56912..5d085265f 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -60,12 +60,13 @@ const LdpSchema = { } }); + // @ts-expect-error TS(2322): Type '{ name: "ldp.registry"; settings: { baseUrl:... Remove this comment to see the full error message this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "ldp.registry"; settings: { baseUrl:... Remove this comment to see the full error message mixins: [LdpRegistryService], settings: { baseUrl, containers, + allowSlugs, defaultOptions: defaultContainerOptions, podProvider } diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.ts b/src/middleware/packages/ldp/services/registry/actions/getByType.ts deleted file mode 100644 index 79cdd706e..000000000 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ActionSchema } from 'moleculer'; - -/** - * Find the container options for a resource type - * This only returns containers registered with the LDP registry, not the ones registered with the TypeIndex. - */ -const Schema = { - visibility: 'public', - params: { - type: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } - }, - async handler(ctx) { - const { type } = ctx.params; - const types = await ctx.call('jsonld.parser.expandTypes', { types: type }); - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - const registeredContainers = await this.actions.list({}, { parentCtx: ctx }); - - return Object.values(registeredContainers).find(container => - types.some((t: any) => - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. - Array.isArray(container.acceptedTypes) ? container.acceptedTypes.includes(t) : container.acceptedTypes === t - ) - ); - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts new file mode 100644 index 000000000..5a652a84f --- /dev/null +++ b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts @@ -0,0 +1,24 @@ +import { ActionSchema } from 'moleculer'; +import { arrayOf } from '../../../utils.ts'; +import { ContainerOptions } from '../../../types.ts'; + +/** + * Find the container options for a resource type + */ +const Schema = { + visibility: 'public', + params: { + types: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } + }, + // cache: true, + async handler(ctx) { + const { types } = ctx.params; + const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); + + return Object.values(this.registeredContainers).find(container => + expandedTypes.some((t: any) => arrayOf(container.acceptedTypes).includes(t)) + ); + } +} satisfies ActionSchema; + +export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 6d8de91c4..67eff2945 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,14 +1,16 @@ import { ActionSchema } from 'moleculer'; +import { getWebIdFromUri } from '../../../utils.ts'; /** - * Find the container options for a container URI + * Find the container options for a container or resource URI */ -const Schema = { +const GetByUriAction = { visibility: 'public', params: { containerUri: { type: 'string', optional: true }, resourceUri: { type: 'string', optional: true } }, + // cache: true, async handler(ctx) { let { containerUri, resourceUri } = ctx.params; @@ -22,17 +24,18 @@ const Schema = { } if (containerUri) { - const basePath = await ctx.call('ldp.getBasePath'); - const path = new URL(containerUri).pathname.replace(basePath, '/'); - const registeredContainers = await this.actions.list({}, { parentCtx: ctx }); - const containerOptions = - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. - Object.values(registeredContainers).find(container => container.pathRegex.test(path)) || {}; + const types = await ctx.call('type-index.getTypes', { + containerUri, + webId: this.settings.podProvider ? getWebIdFromUri(containerUri) : undefined + }); + + const containerOptions = await this.actions.getByTypes({ types }, { parentCtx: ctx }); + return { ...this.settings.defaultOptions, ...containerOptions }; + } else { + return this.settings.defaultOptions; } - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return this.settings.defaultOptions; } } satisfies ActionSchema; -export default Schema; +export default GetByUriAction; diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index f5e43c45a..bb88b1425 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,29 +1,22 @@ -import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; /** - * Get the container URI based on its path - * In Pod provider config, the webId is required to find the Pod root + * Get the container URI based on its type + * Short cut to the TypeIndexService */ -const Schema = { +const GetUriAction = { visibility: 'public', params: { - path: { type: 'string' }, + type: { type: 'string' }, webId: { type: 'string', optional: true } }, async handler(ctx) { - const { path, webId } = ctx.params; + const { type, webId } = ctx.params; - if (this.settings.podProvider) { - if (webId === 'system' || webId === 'anon') - throw new Error(`You must provide a real webId param in Pod provider config. Received: ${webId}`); - const podUrl = await ctx.call('solid-storage.getUrl', { webId }); - return urlJoin(podUrl, path); - } else { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return urlJoin(this.settings.baseUrl, path); - } + const containersUris = await ctx.call('type-index.getContainersUris', { type, webId }); + + return containersUris?.[0]; } } satisfies ActionSchema; -export default Schema; +export default GetUriAction; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index a5396ea11..3ba1cc97f 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,23 +1,16 @@ -import urlJoin from 'url-join'; -import pathModule from 'path'; -import { pathToRegexp } from 'path-to-regexp'; import { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; -const pathJoin = pathModule.join; - const Schema = { visibility: 'public', params: { path: { type: 'string', optional: true }, - fullPath: { type: 'string', optional: true }, name: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, acceptedTypes: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, shapeTreeUri: { type: 'string', optional: true }, excludeFromMirror: { type: 'boolean', optional: true }, activateTombstones: { type: 'boolean', default: true }, - // @ts-expect-eslugParts(rror TS(2322): Type '{ type: "object"; }' is not assignable to ty... Remove this comment to see the full error message permissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, newResourcesPermissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, controlledActions: { type: 'object', optional: true }, @@ -27,7 +20,7 @@ const Schema = { async handler(ctx) { let options = { ...this.settings.defaultOptions, ...ctx.params }; - // TODO Remove this when we stop using the type for the container path + // Find the type from the shape tree if necessary if (!options.acceptedTypes && options.shapeTreeUri) { const services = await this.broker.call('$node.services'); if (!services.some((s: any) => s.name === 'shape-trees') && !services.some((s: any) => s.name === 'shacl')) @@ -46,25 +39,11 @@ const Schema = { options.acceptedTypes = options.acceptedTypes && (await ctx.call('jsonld.parser.expandTypes', { types: options.acceptedTypes })); - // If no path is provided, automatically find it based on the acceptedTypes - if (!options.path) { - if (!options.acceptedTypes || options.acceptedTypes.length !== 1) { - throw new Error( - `If no path is set for the ControlledContainerMixin, you must set one (and only one) acceptedTypes. Provided: ${arrayOf( - options?.acceptedTypes - ).join(', ')}` - ); - } - // If the resource type is invalid, an error will be thrown here - options.path = await ctx.call('ldp.container.getPath', { resourceType: options.acceptedTypes[0] }); - this.logger.debug( - `Automatically generated the path ${options.path} for resource type ${options.acceptedTypes[0]}` - ); - } - - if (!options.fullPath) options.fullPath = options.path; if (!options.name) options.name = options.path; + // If slugs are not allowed, we must registered this container with the type index + if ((!this.settings.allowSlugs || !options.path) && !options.typeIndex) options.typeIndex = 'public'; + if (options.jsonContext) { throw new Error('The jsonContext container option has been deprecated, please remove it'); } @@ -75,19 +54,29 @@ const Schema = { if (options.podsContainer === true) { // Skip container creation for the root PODs container (it is not a real LDP container since no dataset have these data) } else if (this.settings.podProvider) { - // TODO see if we can base ourselves on a general config for the POD data path - options.fullPath = pathJoin('/:username([^/.][^/]+)', 'data', options.path); + // In Pod provider mode, the container is created when a new user is created } else { - await ctx.call('ldp.container.createAndAttach', { - containerUri: urlJoin(this.settings.baseUrl, options.path), - options + await this.broker.waitForServices(['type-index']); + let [containerUri] = await ctx.call('type-index.getContainersUris', { + type: arrayOf(options.acceptedTypes)[0], + isPrivate: options.typeIndex === 'private' }); - } - options.pathRegex = pathToRegexp(options.fullPath); + if (containerUri && (await ctx.call('ldp.container.exist', { containerUri }))) { + this.logger.info(`Container for type ${options.acceptedTypes} already exists, skipping...`); + } else { + this.logger.info(`Creating container for ${options.acceptedTypes}...`); + + containerUri = await ctx.call('triplestore.named-graph.create', { + baseUrl: this.settings.baseUrl, + slug: this.settings.allowSlugs ? options.path : undefined // TODO allow path in slug + }); + + await ctx.call('ldp.container.createAndAttach', { containerUri, options }); + } + } // Save the options - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.registeredContainers[options.name] = options; ctx.emit('ldp.registry.registered', { container: options }, { meta: { webId: null, dataset: null } }); diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.ts b/src/middleware/packages/ldp/services/registry/defaultOptions.ts index f8a2cdab4..012eeb20a 100644 --- a/src/middleware/packages/ldp/services/registry/defaultOptions.ts +++ b/src/middleware/packages/ldp/services/registry/defaultOptions.ts @@ -1,6 +1,9 @@ +import { ContainerOptions } from '../../types.ts'; + const Schema = { readOnly: false, excludeFromMirror: false, + typeIndex: 'public', permissions: (webId: any) => { switch (webId) { case 'anon': @@ -65,6 +68,6 @@ const Schema = { } }, controlledActions: {} -}; +} as Partial; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 06f152377..2547a31de 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -1,11 +1,11 @@ -import urlJoin from 'url-join'; import { ServiceSchema } from 'moleculer'; -import getByTypeAction from './actions/getByType.ts'; +import getByTypesAction from './actions/getByTypes.ts'; import getByUriAction from './actions/getByUri.ts'; import getUriAction from './actions/getUri.ts'; import listAction from './actions/list.ts'; import registerAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; +import { ContainerOptions } from '../../types.ts'; const LdpRegistrySchema = { name: 'ldp.registry' as const, @@ -13,18 +13,19 @@ const LdpRegistrySchema = { baseUrl: null, containers: [], defaultOptions, + allowSlugs: true, podProvider: false }, dependencies: ['ldp.container', 'api'], actions: { - getByType: getByTypeAction, + getByTypes: getByTypesAction, getByUri: getByUriAction, getUri: getUriAction, list: listAction, register: registerAction }, async started() { - this.registeredContainers = {}; + this.registeredContainers = {} as { [name: string]: ContainerOptions }; if (this.settings.podProvider) { // The auth.account service is a dependency only in POD provider config await this.broker.waitForServices(['auth.account']); @@ -39,26 +40,29 @@ const LdpRegistrySchema = { events: { 'auth.registered': { async handler(ctx) { - const { webId, accountData } = ctx.params; + const { webId } = ctx.params; // We want to add user's containers only in Pod provider config if (this.settings.podProvider) { const storageUrl: string = await ctx.call('solid-storage.getUrl', { webId }); - const registeredContainers = await this.actions.list({ dataset: accountData.username }, { parentCtx: ctx }); - // Go through each registered container. - for (const options of Object.values(registeredContainers)) { + for (const options of Object.values(this.registeredContainers)) { try { - this.logger.info('Trying to register container', options.path); + this.logger.info(`Creating container ${options.name}...`); + + const containerUri = await ctx.call('triplestore.named-graph.create', { + baseUrl: storageUrl, + slug: this.settings.allowSlugs ? options.path : undefined + }); + await ctx.call('ldp.container.createAndAttach', { - containerUri: urlJoin(storageUrl, options.path), + containerUri, options, webId }); - this.logger.info('SUCCESS FOR PATH', options.path); } catch (error) { - // pass + this.logger.warn(`Could not create container ${options.name}...`); } } } diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index c288227bf..9338904be 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -27,11 +27,6 @@ const Schema = { if (await ctx.call('ldp.remote.isRemote', { resourceUri })) throw new MoleculerError('Remote resources cannot be created', 403, 'FORBIDDEN'); - const { controlledActions } = { - ...(await ctx.call('ldp.registry.getByUri', { resourceUri })), - ...ctx.params - }; - const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); if (resourceExist) { throw new MoleculerError(`A resource already exist with URI ${resourceUri}`, 400, 'BAD_REQUEST'); @@ -53,6 +48,7 @@ const Schema = { }); // TODO See if using controlledAction is still necessary now blank nodes are automatically detected + const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); const newData = await ctx.call( (controlledActions && controlledActions.get) || 'ldp.resource.get', { @@ -69,7 +65,6 @@ const Schema = { dataset: ctx.meta.dataset }; - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.created', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts new file mode 100644 index 000000000..6c338f966 --- /dev/null +++ b/src/middleware/packages/ldp/types.ts @@ -0,0 +1,42 @@ +interface ControlledActions { + post: string; + list: string; + get: string; + getHeaderLinks: string; + create: string; + patch: string; + put: string; + delete: string; +} + +export interface WacPermission { + uri?: string; // For users and groups + read: boolean; + write: boolean; + append: boolean; + control: boolean; +} + +export interface WacPermissionObject { + anon?: WacPermission; + anyUser?: WacPermission; + user?: WacPermission; + group?: WacPermission; +} + +export type WacPermissionFunction = (webId: string) => WacPermissionObject; + +export interface ContainerOptions { + path?: string; + name?: string; + accept?: string; // Check if this is still used + acceptedTypes?: string | string[]; + shapeTreeUri?: string; + readOnly?: boolean; + activateTombstones?: boolean; + excludeFromMirror?: boolean; + permissions?: WacPermissionFunction | WacPermissionObject; + newResourcesPermissions?: WacPermissionFunction | WacPermissionObject; + controlledActions?: ControlledActions; + typeIndex?: 'private' | 'public'; +} diff --git a/src/middleware/packages/solid/index.ts b/src/middleware/packages/solid/index.ts index d84949694..e55a03049 100644 --- a/src/middleware/packages/solid/index.ts +++ b/src/middleware/packages/solid/index.ts @@ -4,7 +4,7 @@ import NotificationsProviderService from './services/notifications/provider.ts'; import NotificationsListenerService from './services/notifications/listener.ts'; import PreferencesFileService from './services/preferences-file.ts'; import StorageService from './services/storage.ts'; -import TypeIndexesService from './services/type-index/type-indexes.ts'; +import TypeIndexService from './services/type-index/type-index.ts'; export { AuthorizerService, @@ -13,5 +13,5 @@ export { NotificationsListenerService, PreferencesFileService, StorageService, - TypeIndexesService + TypeIndexService }; diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index 33752ebab..191e4a1bc 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -1,18 +1,16 @@ -import { SingleResourceContainerMixin } from '@semapps/ldp'; +import { ControlledResourceMixin } from '@semapps/ldp'; import { pim } from '@semapps/ontologies'; import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; const SolidPreferencesFileSchema = { name: 'solid-preferences-file' as const, - mixins: [SingleResourceContainerMixin], + mixins: [ControlledResourceMixin], settings: { - acceptedTypes: ['pim:ConfigurationFile'], - permissions: {}, - newResourcesPermissions: {}, - excludeFromMirror: true, - activateTombstones: false, - podProvider: true + initialValue: { + type: 'pim:ConfigurationFile' + }, + permissions: {} }, dependencies: ['ontologies'], async started() { @@ -20,7 +18,7 @@ const SolidPreferencesFileSchema = { }, hooks: { after: { - async post(ctx, res) { + async create(ctx, res) { await ctx.call('ldp.resource.patch', { resourceUri: ctx.params.webId, triplesToAdd: [ diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts new file mode 100644 index 000000000..25fd022de --- /dev/null +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -0,0 +1,51 @@ +import { ControlledResourceMixin, isWebId } from '@semapps/ldp'; +import rdf from '@rdfjs/data-model'; +import { ServiceSchema } from 'moleculer'; + +const PrivateTypeIndexService = { + name: 'private-type-index' as const, + mixins: [ControlledResourceMixin], + settings: { + slug: 'private-type-index', + initialValue: { + '@type': ['solid:TypeIndex', 'solid:UnlistedDocument'] + }, + permissions: {} + }, + hooks: { + after: { + async create(ctx, res) { + const { webId } = ctx.params; + const resourceUri = res; + + if (isWebId(webId)) { + await this.broker.waitForServices('solid-preferences-file'); + const preferencesUri = await ctx.call('solid-preferences-file.getUri', { webId }); + + if (preferencesUri) { + await ctx.call('solid-preferences-file.patch', { + triplesToAdd: [ + rdf.quad( + rdf.namedNode(preferencesUri), + rdf.namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), + rdf.namedNode(resourceUri) + ) + ], + webId + }); + } + } + } + } + } +} satisfies ServiceSchema; + +export default PrivateTypeIndexService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [PrivateTypeIndexService.name]: typeof PrivateTypeIndexService; + } + } +} diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts new file mode 100644 index 000000000..a53e02a7d --- /dev/null +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -0,0 +1,51 @@ +import { ControlledResourceMixin, isWebId } from '@semapps/ldp'; +import rdf from '@rdfjs/data-model'; +import { ServiceSchema } from 'moleculer'; + +const PublicTypeIndexService = { + name: 'public-type-index' as const, + mixins: [ControlledResourceMixin], + settings: { + slug: 'public-type-index', + initialValue: { + '@type': ['solid:TypeIndex', 'solid:ListedDocument'] + }, + permissions: { + anon: { + read: true + } + } + }, + hooks: { + after: { + async create(ctx, res) { + const { webId } = ctx.params; + const resourceUri = res; + + if (isWebId(webId)) { + await ctx.call('ldp.resource.patch', { + resourceUri: webId, + triplesToAdd: [ + rdf.quad( + rdf.namedNode(webId), + rdf.namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), + rdf.namedNode(resourceUri) + ) + ], + webId + }); + } + } + } + } +} satisfies ServiceSchema; + +export default PublicTypeIndexService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [PublicTypeIndexService.name]: typeof PublicTypeIndexService; + } + } +} diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts new file mode 100644 index 000000000..668b90dc7 --- /dev/null +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -0,0 +1,202 @@ +import rdf from '@rdfjs/data-model'; +import { arrayOf, getDatasetFromUri, getSlugFromUri, isWebId } from '@semapps/ldp'; +import { solid, skos, apods } from '@semapps/ontologies'; +import { ServiceSchema } from 'moleculer'; +import PublicTypeIndexService from './public-type-index.ts'; +import PrivateTypeIndexService from './private-type-index.ts'; + +const TypeIndexService = { + name: 'type-index' as const, + dependencies: ['ontologies', 'public-type-index', 'private-type-index'], + created() { + this.broker.createService(PublicTypeIndexService); + this.broker.createService(PrivateTypeIndexService); + }, + async started() { + await this.broker.call('ontologies.register', solid); + await this.broker.call('ontologies.register', skos); + await this.broker.call('ontologies.register', apods); + }, + actions: { + register: { + visibility: 'public', + params: { + types: { type: 'array' }, + containerUri: { type: 'string' }, + webId: { type: 'string' }, + isPrivate: { type: 'boolean', default: false } + }, + async handler(ctx) { + let { types, containerUri, webId, isPrivate } = ctx.params; + + const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); + const oldExpandedTypes = await this.actions.getTypes({ containerUri, webId }); + + if (oldExpandedTypes.length > 0) { + throw new Error('Not implemented'); + // const newExpandedTypes = expandedTypes.filter((t: any) => !oldExpandedTypes.includes(t)); + + // if (newExpandedTypes.length > 0) { + // for (const expandedType of newExpandedTypes) { + // this.logger.info(`Adding type ${expandedType} to type registration ${existingRegistration.id}`); + // await this.actions.patch({ + // resourceUri: existingRegistration.id, + // triplesToAdd: [ + // rdf.quad( + // rdf.namedNode(existingRegistration.id), + // rdf.namedNode('http://www.w3.org/ns/solid/terms#forClass'), + // rdf.namedNode(expandedType) + // ) + // ], + // webId + // }); + // } + // } else { + // this.logger.info(`The container ${containerUri} is already registered. Skipping...`); + // } + } else { + const typeIndexUri = await ctx.call(`${isPrivate ? 'private' : 'public'}-type-index.getUri`, { webId }); + + // Generate a hash based on the container URI (which should be unique !) + const typeRegistrationUri = `${typeIndexUri}#${getSlugFromUri(containerUri)}`; + + // Add the type registration + await ctx.call( + 'ldp.resource.patch', + { + resourceUri: typeIndexUri, + triplesToAdd: [ + rdf.quad( + rdf.namedNode(typeRegistrationUri), + rdf.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), + rdf.namedNode('http://www.w3.org/ns/solid/terms#TypeRegistration') + ), + rdf.quad( + rdf.namedNode(typeRegistrationUri), + rdf.namedNode('http://www.w3.org/ns/solid/terms#instanceContainer'), + rdf.namedNode(containerUri) + ), + ...expandedTypes.map(type => + rdf.quad( + rdf.namedNode(typeRegistrationUri), + rdf.namedNode('http://www.w3.org/ns/solid/terms#forClass'), + rdf.namedNode(type) + ) + ) + ], + webId + }, + { parentCtx: ctx } + ); + } + + // Invalidate the whole cache + if (this.broker.cacher) await this.broker.cacher.clean(`type-index.**`); + } + }, + + getTypes: { + visibility: 'public', + params: { + containerUri: { type: 'string' }, + webId: { type: 'string', optional: true }, + isPrivate: { type: 'boolean', optional: true } + }, + cache: true, + async handler(ctx) { + const { containerUri, webId, isPrivate } = ctx.params; + + // If isPrivate is not defined, search in both type indexes + let typeIndexUris = []; + if (isPrivate === false || isPrivate === undefined) + typeIndexUris.push(await ctx.call(`public-type-index.getUri`, { webId })); + if (isPrivate === true || isPrivate === undefined) + typeIndexUris.push(await ctx.call(`private-type-index.getUri`, { webId })); + + const results = await ctx.call('triplestore.query', { + query: ` + PREFIX solid: + SELECT ?type + WHERE { + VALUES ?typeIndexUri { ${typeIndexUris.map(uri => `<${uri}>`).join(' ')} } + GRAPH ?typeIndexUri { + ?typeRegistrationUri a solid:TypeRegistration . + ?typeRegistrationUri solid:forClass ?type . + ?typeRegistrationUri solid:instanceContainer <${containerUri}> . + } + } + `, + webId: 'system', + dataset: isWebId(webId) ? getDatasetFromUri(webId) : undefined + }); + + return arrayOf(results).map((r: any) => r.type.value); + } + }, + + getContainersUris: { + visibility: 'public', + params: { + type: { type: 'string' }, + webId: { type: 'string', optional: true }, + isPrivate: { type: 'boolean', optional: true } + }, + cache: true, + async handler(ctx) { + const { type, webId, isPrivate } = ctx.params; + + const [expandedType] = await ctx.call('jsonld.parser.expandTypes', { types: [type] }); + + // If isPrivate is not defined, search in both type indexes + let typeIndexUris = []; + if (isPrivate === false || isPrivate === undefined) + typeIndexUris.push(await ctx.call(`public-type-index.getUri`, { webId })); + if (isPrivate === true || isPrivate === undefined) + typeIndexUris.push(await ctx.call(`private-type-index.getUri`, { webId })); + + const results = await ctx.call('triplestore.query', { + query: ` + PREFIX solid: + SELECT ?containerUri + WHERE { + VALUES ?typeIndexUri { ${typeIndexUris.map(uri => `<${uri}>`).join(' ')} } + GRAPH ?typeIndexUri { + ?typeRegistrationUri a solid:TypeRegistration . + ?typeRegistrationUri solid:forClass <${expandedType}> . + ?typeRegistrationUri solid:instanceContainer ?containerUri + } + } + `, + webId: 'system', + dataset: isWebId(webId) ? getDatasetFromUri(webId) : undefined + }); + + return results.map((r: any) => r.containerUri.value); + } + } + }, + events: { + 'ldp.container.created': { + async handler(ctx) { + const { containerUri, options, webId } = ctx.params; + + const serviceName = `${options.typeIndex === 'private' ? 'private' : 'public'}-type-index`; + + await this.broker.waitForServices([serviceName]); + await ctx.call(`${serviceName}.waitForCreation`, { webId }); + + await this.actions.register( + { + types: arrayOf(options?.acceptedTypes), + containerUri, + webId, + isPrivate: options.typeIndex === 'private' + }, + { parentCtx: ctx } + ); + } + } + } +} satisfies Partial; + +export default TypeIndexService; diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts deleted file mode 100644 index af3e2b3f6..000000000 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@semapps/ldp'; -import { solid, skos, apods } from '@semapps/ontologies'; -import { MIME_TYPES } from '@semapps/mime-types'; -import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; -import TypeRegistrationsService from './type-registrations.ts'; - -const TypeIndexesSchema = { - name: 'type-indexes' as const, - mixins: [ControlledContainerMixin, DereferenceMixin], - settings: { - acceptedTypes: ['solid:TypeIndex'], - permissions: {}, - newResourcesPermissions: {}, - excludeFromMirror: true, - activateTombstones: false, - // DereferenceMixin settings - dereferencePlan: [{ property: 'solid:hasTypeRegistration' }] - }, - dependencies: ['ontologies'], - created() { - // @ts-expect-error TS(2322): Type '{ name: "type-registrations"; mixins: { sett... Remove this comment to see the full error message - this.broker.createService({ - mixins: [TypeRegistrationsService] - }); - }, - async started() { - await this.broker.call('ontologies.register', solid); - // The following ontologies are used for the type description - await this.broker.call('ontologies.register', skos); - await this.broker.call('ontologies.register', apods); - }, - actions: { - createPublicIndex: { - async handler(ctx) { - const { webId } = ctx.params; - - const indexUri = await this.actions.post( - { - resource: { - type: ['solid:TypeIndex', 'solid:ListedDocument'] - }, - webId - }, - { parentCtx: ctx } - ); - - // Give anonymous read permission - await ctx.call('webacl.resource.addRights', { - resourceUri: indexUri, - additionalRights: { - anon: { - read: true - } - }, - webId: 'system' - }); - - await ctx.call('ldp.resource.patch', { - resourceUri: webId, - triplesToAdd: [ - rdf.quad( - rdf.namedNode(webId), - rdf.namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), - rdf.namedNode(indexUri) - ) - ], - webId - }); - } - }, - - createPrivateIndex: { - async handler(ctx) { - const { webId } = ctx.params; - - if (!(await this.preferencesFileAvailable())) - throw new Error(`The private type index requires the SolidPreferencesFile service`); - - const preferencesUri = await ctx.call('solid-preferences-file.getResourceUri', { webId }); - if (!preferencesUri) throw new Error(`No preferences file found for user ${webId}`); - - const privateIndex = await this.actions.getPrivateIndex({ webId }); - if (privateIndex) throw new Error(`A private index already exist for user ${webId}`); - - const indexUri = await this.actions.post( - { - resource: { - type: ['solid:TypeIndex', 'solid:UnlistedDocument'] - }, - contentType: MIME_TYPES.JSON, - webId - }, - { parentCtx: ctx } - ); - - await ctx.call('solid-preferences-file.patch', { - resourceUri: preferencesUri, - triplesToAdd: [ - rdf.quad( - rdf.namedNode(preferencesUri), - rdf.namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), - rdf.namedNode(indexUri) - ) - ], - webId - }); - } - }, - - getPublicIndex: { - async handler(ctx) { - const { webId } = ctx.params; - - const user = await ctx.call('ldp.resource.get', { - resourceUri: webId, - webId - }); - - return user['solid:publicTypeIndex']; - } - }, - - getPrivateIndex: { - async handler(ctx) { - const { webId } = ctx.params; - - if (!(await this.preferencesFileAvailable())) - throw new Error(`The private type index requires the SolidPreferencesFile service`); - - const preferencesFileUri = await ctx.call('solid-preferences-file.get', { webId }); - - return preferencesFileUri?.['solid:privateTypeIndex']; - } - }, - - waitForIndexCreation: { - async handler(ctx) { - const { type, webId } = ctx.params; - let indexUri; - let attempts = 0; - - do { - attempts += 1; - if (attempts > 1) await delay(1000); - try { - indexUri = - type === 'private' - ? await this.actions.getPrivateIndex({ webId }) - : await this.actions.getPublicIndex({ webId }); - } catch (e) { - // Ignore 404 errors - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code !== 404) throw e; - } - } while (!indexUri || attempts > 30); - - if (!indexUri) - throw new Error( - `${type === 'private' ? 'Private' : 'Public'} TypeIndex still has not been created after 30s` - ); - - return indexUri; - } - }, - - awaitCreateComplete: { - /** - * Wait until all type registrations have been created for the newly-created user - */ - async handler(ctx) { - const { webId } = ctx.params; - - const containers = await ctx.call('ldp.registry.list'); - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. - const numContainersWithTypeIndex = Object.values(containers).filter(container => container.typeIndex).length; - - let numTypeRegistrations; - let attempts = 0; - do { - attempts += 1; - if (attempts > 1) await delay(1000); - const typeRegistrationsContainer = await ctx.call('type-registrations.list', { webId }); - numTypeRegistrations = arrayOf(typeRegistrationsContainer['ldp:contains']).length; - if (attempts > 30) - throw new Error( - `After 30s, user ${webId} has only ${numTypeRegistrations} types registrations. Expecting ${numContainersWithTypeIndex}` - ); - } while (numTypeRegistrations < numContainersWithTypeIndex); - } - } - }, - methods: { - async preferencesFileAvailable() { - const services = await this.broker.call('$node.services'); - return services.some((s: any) => s.name === 'solid-preferences-file'); - } - }, - events: { - 'auth.registered': { - async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message - const { webId } = ctx.params; - - // Wait until the /solid/type-index container has been created for the user - const indexesContainerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); - await this.actions.waitForContainerCreation({ containerUri: indexesContainerUri }, { parentCtx: ctx }); - - // Wait until the /solid/type-registration container has been created for the user - const registrationsContainerUri = await ctx.call('type-registrations.getContainerUri', { webId }); - await ctx.call('type-registrations.waitForContainerCreation', { containerUri: registrationsContainerUri }); - - await this.actions.createPublicIndex({ webId }, { parentCtx: ctx }); - await this.actions.createPrivateIndex({ webId }, { parentCtx: ctx }); - } - } - } -} satisfies ServiceSchema; - -export default TypeIndexesSchema; - -declare global { - export namespace Moleculer { - export interface AllServices { - [TypeIndexesSchema.name]: typeof TypeIndexesSchema; - } - } -} diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts deleted file mode 100644 index 7ab235a5e..000000000 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ /dev/null @@ -1,341 +0,0 @@ -import urlJoin from 'url-join'; -import rdf from '@rdfjs/data-model'; -import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; - -const TypeRegistrationsSchema = { - name: 'type-registrations' as const, - mixins: [ControlledContainerMixin], - settings: { - acceptedTypes: ['solid:TypeRegistration'], - permissions: {}, - newResourcesPermissions: {}, - excludeFromMirror: true, - activateTombstones: false - }, - actions: { - register: { - visibility: 'public', - params: { - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message - types: { type: 'array' }, - containerUri: { type: 'string' }, - webId: { type: 'string' }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; default: false; }' is not... Remove this comment to see the full error message - isPrivate: { type: 'boolean', default: false } - }, - async handler(ctx) { - let { types, containerUri, webId, isPrivate } = ctx.params; - - // Wait for the container with type registrations to be created - const typeRegistrationsContainerUri = await this.actions.getContainerUri({ webId }); - await this.actions.waitForContainerCreation({ containerUri: typeRegistrationsContainerUri }); - - const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); - - // Check if the provided container is already registered - const existingRegistration = await this.actions.getByContainerUri({ containerUri, webId }); - - if (existingRegistration) { - const oldExpandedTypes = await ctx.call('jsonld.parser.expandTypes', { - types: existingRegistration['solid:forClass'] - }); - - const newExpandedTypes = expandedTypes.filter((t: any) => !oldExpandedTypes.includes(t)); - - if (newExpandedTypes.length > 0) { - for (const expandedType of newExpandedTypes) { - this.logger.info(`Adding type ${expandedType} to type registration ${existingRegistration.id}`); - await this.actions.patch({ - resourceUri: existingRegistration.id, - triplesToAdd: [ - rdf.quad( - rdf.namedNode(existingRegistration.id), - rdf.namedNode('http://www.w3.org/ns/solid/terms#forClass'), - rdf.namedNode(expandedType) - ) - ], - webId - }); - } - } else { - this.logger.info(`The container ${containerUri} is already registered. Skipping...`); - } - } else { - // Create the type registration - const registrationUri = await this.actions.post( - { - resource: { - type: 'solid:TypeRegistration', - 'solid:forClass': expandedTypes, - 'solid:instanceContainer': containerUri - }, - webId - }, - { parentCtx: ctx } - ); - - // Give anonymous read permission to public type registrations - if (!isPrivate) { - await ctx.call('webacl.resource.addRights', { - resourceUri: registrationUri, - additionalRights: { - anon: { - read: true - } - }, - webId: 'system' - }); - } - - // Find the public or private TypeIndex linked with the WebId - const indexUri = isPrivate - ? await ctx.call('type-indexes.getPrivateIndex', { webId }) - : await ctx.call('type-indexes.getPublicIndex', { webId }); - if (!indexUri) - throw new Error(`No ${isPrivate ? 'private' : 'public'} type index associated with webId ${webId}`); - - // Attach it to the TypeIndex - await ctx.call('type-indexes.patch', { - resourceUri: indexUri, - triplesToAdd: [ - rdf.quad( - rdf.namedNode(indexUri), - rdf.namedNode('http://www.w3.org/ns/solid/terms#hasTypeRegistration'), - rdf.namedNode(registrationUri) - ) - ], - webId - }); - - return registrationUri; - } - } - }, - - /** - * Bind an application to a certain type of resources - * If no other app is bound with this type yet, it will be marked as the default app - * Otherwise, the app will be added to the list of available apps, that the user can switch to - */ - bindApp: { - visibility: 'public', - params: { - containerUri: { type: 'string' }, - appUri: { type: 'string' }, - webId: { type: 'string' } - }, - async handler(ctx) { - const { containerUri, appUri, webId } = ctx.params; - - let registration = await this.actions.getByContainerUri({ containerUri, webId }, { parentCtx: ctx }); - if (!registration) throw new Error(`No registration found for container ${containerUri}`); - - // Add the app to available apps - registration['apods:availableApps'] = [...new Set([...arrayOf(registration['apods:availableApps']), appUri])]; - - // If no default app is defined for this type, use this one - if (!registration['apods:defaultApp']) registration['apods:defaultApp'] = appUri; - - await ctx.call('type-registrations.put', { resource: registration, webId }); - } - }, - - /** - * Unbind an application from a certain type of resource (Mirror of the above action.) - */ - unbindApp: { - visibility: 'public', - params: { - containerUri: { type: 'string' }, - appUri: { type: 'string' }, - webId: { type: 'string' } - }, - async handler(ctx) { - const { containerUri, appUri, webId } = ctx.params; - - let registration = await this.actions.getByContainerUri({ containerUri, webId }, { parentCtx: ctx }); - if (!registration) throw new Error(`No registration found for container ${containerUri}`); - - // Remove the app from available apps - registration['apods:availableApps'] = arrayOf(registration['apods:availableApps']).filter(a => a !== appUri); - - if (registration['apods:defaultApp'] === appUri) { - // If there are other available apps for this type, set the first one as the default app - registration['apods:defaultApp'] = - registration['apods:availableApps'].length > 0 - ? registration['apods:availableApps'][0] - : (registration['apods:defaultApp'] = undefined); - } - - await ctx.call('type-registrations.put', { - resource: registration, - webId - }); - } - }, - - getByType: { - visibility: 'public', - params: { - type: { type: 'string' }, - webId: { type: 'string' } - }, - async handler(ctx) { - const { type, webId } = ctx.params; - - const [expandedType] = await ctx.call('jsonld.parser.expandTypes', { types: [type] }); - - const filteredContainer = await this.actions.list( - { - filters: { 'http://www.w3.org/ns/solid/terms#forClass': expandedType }, - webId - }, - { parentCtx: ctx } - ); - - // There can be several TypeRegistration per type - return arrayOf(filteredContainer['ldp:contains']); - } - }, - - getByContainerUri: { - visibility: 'public', - params: { - containerUri: { type: 'string' }, - webId: { type: 'string' } - }, - async handler(ctx) { - const { containerUri, webId } = ctx.params; - - const filteredContainer = await this.actions.list( - { - filters: { 'http://www.w3.org/ns/solid/terms#instanceContainer': containerUri }, - webId - }, - { parentCtx: ctx } - ); - - // There should be only one TypeRegistration per container - return arrayOf(filteredContainer['ldp:contains'])[0]; - } - }, - - findContainersUris: { - visibility: 'public', - params: { - type: { type: 'string' }, - webId: { type: 'string' } - }, - async handler(ctx) { - const { type, webId } = ctx.params; - - const registrations = await this.actions.getByType({ type, webId }, { parentCtx: ctx }); - - return registrations.map((r: any) => r['solid:instanceContainer']); - } - }, - - /** - * Reset the public and private registries of the given user - * Based on the information found on the LDP registry - */ - resetFromRegistry: { - visibility: 'public', - params: { - webId: { type: 'string' } - }, - async handler(ctx) { - const { webId } = ctx.params; - - // Delete all existing type registration of the given user - // We don't use ldp.container.clear to ensure the delete hook below is called - - const typeRegistrationsContainerUri = await this.actions.getContainerUri({ webId }); - const typeRegistrationsUris = await ctx.call('ldp.container.getUris', { - containerUri: typeRegistrationsContainerUri - }); - - for (const typeRegistrationUri of typeRegistrationsUris) { - await this.actions.delete({ resourceUri: typeRegistrationUri, webId: 'system' }); - } - - // Go through each registered container and register back the type registration - - const registeredContainers = await ctx.call('ldp.registry.list'); - const podUrl = await ctx.call('solid-storage.getUrl', { webId }); - - for (const options of Object.values(registeredContainers)) { - // @ts-expect-error TS(18046): 'options' is of type 'unknown'. - if (options.typeIndex) { - // @ts-expect-error TS(18046): 'options' is of type 'unknown'. - const containerUri = urlJoin(podUrl, options.path); - await this.actions.register( - { - // @ts-expect-error TS(18046): 'options' is of type 'unknown'. - types: arrayOf(options.acceptedTypes), - containerUri, - webId, - // @ts-expect-error TS(18046): 'options' is of type 'unknown'. - isPrivate: options.typeIndex === 'private' - }, - { parentCtx: ctx } - ); - } - } - } - } - }, - events: { - 'ldp.container.created': { - async handler(ctx) { - // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message - const { containerUri, options, webId } = ctx.params; - - if (options?.typeIndex) { - await ctx.call('type-indexes.waitForIndexCreation', { type: options.typeIndex, webId }); - - await this.actions.register( - { - types: arrayOf(options?.acceptedTypes), - containerUri, - webId, - isPrivate: options.typeIndex === 'private' - }, - { parentCtx: ctx } - ); - } - } - } - }, - hooks: { - after: { - async delete(ctx, res) { - const { resourceUri, dataset } = res; - - // Detach the type registration from the index - await ctx.call('triplestore.update', { - query: ` - DELETE WHERE { - ?typeIndex <${resourceUri}> . - } - `, - dataset, - webId: 'system' - }); - - return res; - } - } - } -} satisfies ServiceSchema; - -export default TypeRegistrationsSchema; - -declare global { - export namespace Moleculer { - export interface AllServices { - [TypeRegistrationsSchema.name]: typeof TypeRegistrationsSchema; - } - } -} diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index 80c4d5f0d..b9ce5e152 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -100,25 +100,10 @@ const SynchronizerService = { // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message if (this.settings.attachToLocalContainers) { - let containerUri; - - // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message - if (this.settings.podProvider) { - // If this is a Pod provider, try to find the container with the type-registrations service - [containerUri] = await ctx.call('type-registrations.findContainersUris', { - type, - webId: recipientUri - }); - } else { - // Otherwise try to find it with the LdpRegistry - const container = await ctx.call('ldp.registry.getByType', { type }); - if (container) { - containerUri = await ctx.call('ldp.registry.getUri', { - path: container.path, - webId: recipientUri - }); - } - } + const containerUri = await ctx.call('ldp.registry.getUri', { + type, + webId: recipientUri + }); if (containerUri) { await ctx.call('ldp.container.attach', { containerUri, resourceUri, webId: recipientUri }); diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts new file mode 100644 index 000000000..2376ca82a --- /dev/null +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -0,0 +1,91 @@ +import urlJoin from 'url-join'; +import { ControlledContainerMixin } from '@semapps/ldp'; +import * as CONFIG from '../config.ts'; +import initialize from './initialize.ts'; +import { fetchServer } from '../utils.ts'; + +jest.setTimeout(50000); +let broker: any; + +describe.each([true, false])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { + beforeAll(async () => { + broker = await initialize(allowSlugs); + + broker.createService({ + name: 'videos', + mixins: [ControlledContainerMixin], + settings: { + path: '/videos', // Will be ignored when slugs are not allowed + acceptedTypes: ['as:Video'] + } + }); + + await broker.start(); + }); + + afterAll(async () => { + if (broker) await broker.stop(); + }); + + let containerUri: string; + let numContainers: number; + let numRegisteredContainers: number; + + test('The container is registered and created', async () => { + await broker.call('videos.waitForContainerCreation'); + + const registeredContainers = await broker.call('ldp.registry.list', { type: 'as:Video' }); + expect(registeredContainers.videos).not.toBeUndefined(); + numRegisteredContainers = registeredContainers.length; + + const containersUris = await broker.call('ldp.container.getAll'); + // With slugs, the WebIdService generates a /foaf and a /foaf/person containers + expect(containersUris.length).toBe(allowSlugs ? 7 : 6); + numContainers = containersUris.length; + + if (allowSlugs) { + expect(containersUris).toEqual( + expect.arrayContaining([ + urlJoin(CONFIG.HOME_URL!, '/foaf'), + urlJoin(CONFIG.HOME_URL!, '/foaf/person'), + urlJoin(CONFIG.HOME_URL!, '/key'), + urlJoin(CONFIG.HOME_URL!, '/public-key'), + urlJoin(CONFIG.HOME_URL!, '/videos'), + urlJoin(CONFIG.HOME_URL!, '/') + ]) + ); + } + + containerUri = await broker.call('ldp.registry.getUri', { type: 'as:Video' }); + expect(containerUri).not.toBeUndefined(); + + await expect(broker.call('ldp.container.exist', { containerUri })).resolves.toBe(true); + }); + + test('Restart broker and check container is still here', async () => { + await broker.stop(); + await broker.start(); + + // No new container has been registered + const registeredContainers = await broker.call('ldp.registry.list', { type: 'as:Video' }); + expect(registeredContainers.length).toBe(numRegisteredContainers); + + // No new container has been created + const containersUris = await broker.call('ldp.container.getAll'); + expect(containersUris.length).toBe(numContainers); + + // The container URI has not changed + await expect(broker.call('ldp.registry.getUri', { type: 'as:Video' })).resolves.toBe(containerUri); + }); + + test('Get registered container through API', async () => { + await expect(fetchServer(containerUri)).resolves.toMatchObject({ + status: 200, + json: { + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'ldp:contains': [] + } + }); + }); +}); diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts new file mode 100644 index 000000000..d577f32cd --- /dev/null +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -0,0 +1,69 @@ +import { ControlledResourceMixin } from '@semapps/ldp'; +import initialize from './initialize.ts'; +import { fetchServer } from '../utils.ts'; + +jest.setTimeout(50000); +let broker: any; + +describe.each([true, false])('ControlledResourceMixin with allowSlugs: %s', (allowSlugs: boolean) => { + beforeAll(async () => { + broker = await initialize(allowSlugs); + + broker.createService({ + name: 'address-book', + mixins: [ControlledResourceMixin], + settings: { + slug: 'address-book', + initialValue: { + '@type': 'vcard:AddressBook', + 'vcard:title': 'My address book' + }, + permissions: { + anon: { + read: true + } + } + }, + hooks: { + after: { + async get(ctx, res) { + res['vcard:note'] = 'This is added by the service'; + return res; + } + } + } + }); + + await broker.start(); + }); + + afterAll(async () => { + if (broker) await broker.stop(); + }); + + let controlledResourceUri: string; + + test('Get the controlled resource', async () => { + await broker.call('address-book.waitForCreation'); + + controlledResourceUri = await broker.call('address-book.getUri'); + expect(controlledResourceUri).not.toBeUndefined(); + + await expect(broker.call('address-book.get')).resolves.toMatchObject({ + type: 'vcard:AddressBook', + 'vcard:title': 'My address book', + 'vcard:note': 'This is added by the service' + }); + }); + + test('Get the controlled resource through API', async () => { + await expect(fetchServer(controlledResourceUri)).resolves.toMatchObject({ + status: 200, + json: { + type: 'vcard:AddressBook', + 'vcard:title': 'My address book', + 'vcard:note': 'This is added by the service' + } + }); + }); +}); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 80a096928..cd0d12017 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -1,8 +1,8 @@ -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import fs from 'fs'; import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; -import { pair, petr } from '@semapps/ontologies'; +import { as, pair, petr, solid, vcard } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { ControlledContainerMixin } from '@semapps/ldp'; @@ -47,7 +47,7 @@ const containers = [ } ]; -const initialize = async () => { +const initialize = async (allowSlugs = true) => { await dropDataset(CONFIG.MAIN_DATASET); const uploadsPath = pathJoin(__dirname, '../uploads'); @@ -66,8 +66,8 @@ const initialize = async () => { } }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message mixins: [CoreService], settings: { baseUrl: CONFIG.HOME_URL, @@ -79,14 +79,15 @@ const initialize = async () => { mainDataset: CONFIG.MAIN_DATASET, secure: false // TODO Remove when we move to Fuseki 5 }, - containers, - ontologies: [pair, petr], + containers: [], + ontologies: [as, pair, petr, solid, vcard], activitypub: false, mirror: false, void: false, webfinger: false, - webid: { - path: '/users' + webid: false, + ldp: { + allowSlugs } } }); @@ -122,8 +123,6 @@ const initialize = async () => { } }); - await broker.start(); - return broker; }; diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 56b57a483..29772ed0b 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -21,6 +21,7 @@ "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", + "@semapps/solid": "1.2.0", "@semapps/sync": "1.2.0", "@semapps/triplestore": "1.2.0", "@semapps/webacl": "1.2.0", diff --git a/website/docs/middleware/ldp/controlled-resource.md b/website/docs/middleware/ldp/controlled-resource.md new file mode 100644 index 000000000..3e830287b --- /dev/null +++ b/website/docs/middleware/ldp/controlled-resource.md @@ -0,0 +1,77 @@ +--- +title: ControlledResourceMixin +--- + +This mixin is very similar to [ControlledContainerMixin](./controlled-container.md) except that it is for a single resource. This resource will be created on start, or when the storage is created in the case of Pod provider config. The content of the resource can be defined with the `initialValue` setting. The `get`, `patch` and `put` actions can be called without a `resourceUri`. + +## Usage + +```js +const { ControlledResourceMixin } = require('@semapps/ldp'); + +module.exports = { + name: 'address-book', + mixins: [ControlledResourceMixin], + settings: { + initialValue: { + '@type': 'vcard:AddressBook', + 'vcard:title': 'My address book' + }, + permissions: {}, + readOnly: false + } +}; +``` + +## Settings + +All settings relative to this mixin should be set in a `imageProcessor` key. + +| Property | Type | Default | Description | +| -------------- | --------- | ------- | ------------------------------------------------------------------------------ | +| `path` | `String` | | If not specified, or if the `allowSlugs` setting is false, a UUID will be used | +| `initialValue` | `Object` | {} | Value for the resources to be created | +| `permissions` | `Object` | {} | Permissions to be applied | +| `readOnly` | `Boolean` | false | If true, it will not be possible to call the PUT/PATCH method on this resource | + +## Actions + +The following service actions are available: + +### `create` + +Automatically called on start, or when the storage is created in the case of Pod provider config + +##### Parameters + +| Property | Type | Default | Description | +| -------- | ----- | ------- | ------------------------------------------------------- | +| `webId` | `URI` | | User doing the action (required in Pod provider config) | + +### `getUri` + +Return the URI of the single resource + +##### Parameters + +| Property | Type | Default | Description | +| -------- | ----- | ------- | ------------------------------------------------------- | +| `webId` | `URI` | | User doing the action (required in Pod provider config) | + +##### Return values + +The URI of the single resource + +### `waitForCreation` + +Wait for the resource to be created, by checking if it exists every second for 30s. + +##### Parameters + +| Property | Type | Default | Description | +| -------- | ----- | ------- | ------------------------------------------------------- | +| `webId` | `URI` | | User doing the action (required in Pod provider config) | + +##### Return values + +The URI of the single resource diff --git a/website/docs/middleware/ldp/single-resource-container.md b/website/docs/middleware/ldp/single-resource-container.md deleted file mode 100644 index 026a638c3..000000000 --- a/website/docs/middleware/ldp/single-resource-container.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: SingleResourceContainerMixin ---- - -This mixin is very similar to [ControlledContainerMixin](./controlled-container.md) except that the container will contain a single resource. This resource will be created on start, or when the storage is created in the case of Pod provider config. The content of the resource can be defined with the `initialValue` setting. The `get`, `patch` and `put` actions can be called without a `resourceUri`. - -## Usage - -```js -const { SingleResourceContainerMixin } = require('@semapps/ldp'); - -module.exports = { - name: 'bot', - mixins: [SingleResourceContainerMixin], - settings: { - acceptedTypes: ['Application'], - initialValue: { - name: 'Super bot' - } - // Other container options... - } -}; -``` - -## Settings - -All [container options](index.md#container-options) are accepted. - -These container options are overridden with the following values: - -- `readOnly`: true -- `excludeFromMirror`: true -- `activateTombstones`: false - -## Actions - -he following service actions are available: - -### `initializeResource` - -Automatically called on start, or when the storage is created in the case of Pod provider config - -##### Parameters - -| Property | Type | Default | Description | -| -------- | ----- | ------- | ------------------------------------------------------- | -| `webId` | `URI` | | User doing the action (required in Pod provider config) | - -### `getResourceUri` - -Return the URI of the single resource - -##### Parameters - -| Property | Type | Default | Description | -| -------- | ----- | ------- | ------------------------------------------------------- | -| `webId` | `URI` | | User doing the action (required in Pod provider config) | - -##### Return values - -The URI of the single resource - -### `waitForResourceCreation` - -Wait for the resource to be created, by checking if it exists every second for 30s. - -##### Parameters - -| Property | Type | Default | Description | -| -------- | ----- | ------- | ------------------------------------------------------- | -| `webId` | `URI` | | User doing the action (required in Pod provider config) | - -##### Return values - -The URI of the single resource diff --git a/website/sidebars.js b/website/sidebars.js index cf80b68e7..6cd9ecafa 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -59,7 +59,7 @@ module.exports = { 'middleware/ldp/registry', 'middleware/ldp/permissions', 'middleware/ldp/controlled-container', - 'middleware/ldp/single-resource-container', + 'middleware/ldp/controlled-resource', 'middleware/ldp/document-tagger', 'middleware/ldp/image-processor', 'middleware/ldp/dereference' From 1378223203fd78caf8c1f465300045b20ea41e10 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 21 Oct 2025 12:44:31 +0200 Subject: [PATCH 093/165] Working tests --- .../services/activitypub/subservices/api.ts | 19 +-- .../activitypub/subservices/object.ts | 5 +- src/middleware/packages/ldp/index.ts | 4 +- .../ldp/mixins/controlled-container.ts | 7 +- .../ldp/mixins/controlled-resource.ts | 38 +++-- .../ldp/mixins/single-resource-container.ts | 123 --------------- .../services/registry/actions/getByTypes.ts | 10 +- .../ldp/services/registry/actions/getByUri.ts | 27 ++-- .../ldp/services/registry/actions/getUri.ts | 16 +- .../ldp/services/registry/actions/list.ts | 6 +- .../ldp/services/registry/actions/register.ts | 73 ++++----- .../ldp/services/registry/defaultOptions.ts | 9 +- .../packages/ldp/services/registry/index.ts | 101 ++++++++---- .../ldp/services/resource/actions/create.ts | 10 +- src/middleware/packages/ldp/types.ts | 10 +- .../services/type-index/private-type-index.ts | 3 +- .../services/type-index/public-type-index.ts | 3 +- .../solid/services/type-index/type-index.ts | 147 +++++++++++------- src/middleware/packages/void/service.ts | 9 +- .../packages/webacl/middlewares/webacl.ts | 44 +++--- .../actions/refreshContainersRights.ts | 9 +- .../webacl/services/resource/index.ts | 1 - src/middleware/packages/webid/service.ts | 1 - .../tests/ldp/controlled-container.test.ts | 12 +- .../tests/ldp/controlled-resource.test.ts | 2 +- 25 files changed, 326 insertions(+), 363 deletions(-) delete mode 100644 src/middleware/packages/ldp/mixins/single-resource-container.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index ff83df983..f24c877fd 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -1,7 +1,6 @@ import urlJoin from 'url-join'; import path from 'path'; -import { arrayOf } from '@semapps/ldp'; - +import { arrayOf, Registration } from '@semapps/ldp'; import { parseUrl, parseHeader, @@ -12,7 +11,6 @@ import { parseFile, saveDatasetMeta } from '@semapps/middlewares'; - import { ServiceSchema } from 'moleculer'; import { FULL_ACTOR_TYPES } from '../../../constants.ts'; @@ -35,12 +33,10 @@ const ApiService = { await this.broker.call('api.addRoute', { route: this.getBoxesRoute(path.join(basePath, `/:actorSlug`)) }); } else { // If some actor containers are already registered, add the corresponding API routes - const registeredContainers = await this.broker.call('ldp.registry.list'); - for (const container of Object.values(registeredContainers)) { - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. - if (arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { + const registrations: { [name: string]: Registration } = await this.broker.call('ldp.registry.list'); + for (const registration of Object.values(registrations)) { + if (arrayOf(registration.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { await this.broker.call('api.addRoute', { - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) }); } @@ -87,8 +83,7 @@ const ApiService = { events: { 'ldp.registry.registered': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'container' does not exist on type 'Optio... Remove this comment to see the full error message - const { container } = ctx.params; + const { registration } = ctx.params; const { pathname: basePath } = new URL(this.settings.baseUri); const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { key: 'resourcesWithContainerPath' @@ -96,10 +91,10 @@ const ApiService = { if ( !this.settings.podProvider && resourcesWithContainerPath && - arrayOf(container.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) + arrayOf(registration.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) ) { await ctx.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) + route: this.getBoxesRoute(path.join(basePath, `${registration.fullPath}/:actorSlug`)) }); } } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 1079b268c..907315b8f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -60,10 +60,11 @@ const ObjectService = { const types = arrayOf(activity.object['@type'] || activity.object.type); - const [containerUri] = await ctx.call('type-index.getContainersUris', { + const [containerUri] = (await ctx.call('type-index.getUris', { type: types[0], + isContainer: true, webId: actorUri - }); + })) as string[]; if (!containerUri) throw new Error( diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index f5344648c..a9ef8fce1 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -16,6 +16,7 @@ import SpecialEndpointMixin from './mixins/special-endpoint.ts'; import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; import defaultContainerOptions from './services/registry/defaultOptions.ts'; import LdpAdapter from './adapter.ts'; +import { Registration } from './types.ts'; export * from './utils.ts'; export { @@ -36,5 +37,6 @@ export { SpecialEndpointMixin, OrphanFilesDeletionMixin, defaultContainerOptions, - LdpAdapter + LdpAdapter, + Registration }; diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index f4a051973..f2a9f2952 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,7 +1,7 @@ import { ServiceSchema } from 'moleculer'; import { arrayOf, delay, getParentContainerUri } from '../utils.ts'; -const Schema = { +const ControlledContainerMixin = { settings: { path: null, acceptedTypes: null, @@ -11,8 +11,6 @@ const Schema = { readOnly: false, excludeFromMirror: false, activateTombstones: true, - podsContainer: false, - podProvider: false, typeIndex: undefined }, dependencies: ['ldp'], @@ -22,6 +20,7 @@ const Schema = { await this.broker.call('ldp.registry.register', { path, name: this.name, + isContainer: true, controlledActions: { post: `${this.name}.post`, list: `${this.name}.list`, @@ -168,4 +167,4 @@ const Schema = { } } satisfies Partial; -export default Schema; +export default ControlledContainerMixin; diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index 6da314e76..62257b174 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -8,13 +8,33 @@ const ControlledResourceMixin = { slug: null, initialValue: {}, permissions: {}, - controlledActions: {} + controlledActions: {}, + typeIndex: 'public' }, - dependencies: ['ldp', 'triplestore.named-graph', 'webacl.resource'], + dependencies: ['ldp'], async started() { - if (!this.settings.podProvider) { - await this.actions.create({}); + const { initialValue, controlledActions, typeIndex } = this.settings; + + this.registration = { + name: this.name, + acceptedTypes: getType(initialValue), + isContainer: false, + controlledActions: { + get: `${this.name}.get`, + patch: `${this.name}.patch`, + ...controlledActions + }, + typeIndex + }; + + const podProvider = await this.broker.call('ldp.getSetting', { key: 'podProvider' }); + if (!podProvider) { + // Do not await to avoid a circular dependency (for the public/private type indexes) + this.actions.create({}); } + + // Do not await to avoid a circular dependency (for the public/private type indexes) + this.broker.call('ldp.registry.register', this.registration); }, actions: { create: { @@ -33,20 +53,14 @@ const ControlledResourceMixin = { slug: allowSlugs ? this.settings.slug : undefined }); + // We pass the registration as a parameter so that the TypeIndexService can get them back in the ldp.resource.created event await ctx.call('ldp.resource.create', { resourceUri, resource: { '@id': resourceUri, ...resource }, + options: this.registration, webId: 'system' }); - if (this.settings.permissions) { - await ctx.call('webacl.resource.addRights', { - resourceUri, - additionalRights: this.settings.permissions, - webId: 'system' - }); - } - return resourceUri; } } diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts deleted file mode 100644 index d08f37336..000000000 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { ServiceSchema, Errors } from 'moleculer'; -import ControlledContainerMixin from './controlled-container.ts'; -import { delay } from '../utils.ts'; - -const { MoleculerError } = Errors; - -const Schema = { - mixins: [ControlledContainerMixin], - settings: { - initialValue: {}, - // Override default settings of ControlledContainerMixin - readOnly: true, - excludeFromMirror: true, - activateTombstones: false - }, - async started() { - if (!this.settings.acceptedTypes) - this.settings.acceptedTypes = this.settings.resource.type || this.settings.resource['@type']; - - if (!this.settings.podProvider) { - await this.actions.initializeResource({ webId: 'system' }); - } - }, - actions: { - initializeResource: { - async handler(ctx) { - const { webId } = ctx.params; - - const containerUri = await this.actions.getContainerUri({ webId }, { parentCtx: ctx }); - await this.actions.waitForContainerCreation({ containerUri }, { parentCtx: ctx }); - - let resource = this.settings.initialValue; - if (!resource.type && !resource['@type']) resource.type = this.settings.acceptedTypes; - - return await this.actions.post({ containerUri, resource, webId }, { parentCtx: ctx }); - } - }, - - getResourceUri: { - async handler(ctx) { - const containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri }); - return resourcesUris[0]; - } - }, - - exist: { - async handler(ctx) { - const resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - return !!resourceUri; - } - }, - - waitForResourceCreation: { - async handler(ctx) { - const { webId } = ctx.params; - let resource; - let attempts = 0; - - do { - attempts += 1; - if (attempts > 1) await delay(1000); - const resourceUri = await this.actions.getResourceUri({ webId }); - - // Now wait for resources to have been effectively created, because when we call the ldp.container.post action, - // the ldp:contains predicate is added first (to ensure WAC permissions work) and then the resource is created - if (resourceUri) { - try { - resource = await this.actions.get( - { resourceUri, webId: 'system' }, - { parentCtx: ctx, meta: { $cache: false } } - ); - } catch (e) { - // Ignore - } - } - } while (!resource || attempts > 30); - - if (!resource) throw new Error(`Resource still had not been created after 30s`); - - return resource.id || resource['@id']; - } - } - }, - hooks: { - before: { - async get(ctx) { - if (!ctx.params.resourceUri) { - // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message - ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); - } - }, - async patch(ctx) { - if (!ctx.params.resourceUri) { - // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message - ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); - } - }, - async put(ctx) { - if (!ctx.params.resourceUri) { - // @ts-expect-error TS(2339): Property 'getResourceUri' does not exist on type '... Remove this comment to see the full error message - ctx.params.resourceUri = await this.actions.getResourceUri({ webId: ctx.params.webId }, { parentCtx: ctx }); - if (!ctx.params.resourceUri) throw new MoleculerError('Resource not found', 404, 'NOT_FOUND'); - } - } - } - }, - events: { - 'auth.registered': { - async handler(ctx) { - if (this.settings.podProvider) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message - const { webId } = ctx.params; - await this.actions.initializeResource({ webId }); - } - } - } - } -} satisfies Partial; - -export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts index 5a652a84f..bda942cbc 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts @@ -1,24 +1,22 @@ import { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; -import { ContainerOptions } from '../../../types.ts'; /** * Find the container options for a resource type */ -const Schema = { +const GetByTypesAction = { visibility: 'public', params: { types: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } }, - // cache: true, async handler(ctx) { const { types } = ctx.params; const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); - return Object.values(this.registeredContainers).find(container => - expandedTypes.some((t: any) => arrayOf(container.acceptedTypes).includes(t)) + return Object.values(this.registrations).find(registration => + expandedTypes.some((t: any) => arrayOf(registration.acceptedTypes).includes(t)) ); } } satisfies ActionSchema; -export default Schema; +export default GetByTypesAction; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 67eff2945..24faf9197 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -10,7 +10,6 @@ const GetByUriAction = { containerUri: { type: 'string', optional: true }, resourceUri: { type: 'string', optional: true } }, - // cache: true, async handler(ctx) { let { containerUri, resourceUri } = ctx.params; @@ -18,17 +17,25 @@ const GetByUriAction = { throw new Error('The param containerUri or resourceUri must be provided to ldp.registry.getByUri'); } - if (!containerUri) { - const containers = await ctx.call('ldp.resource.getContainers', { resourceUri }); - containerUri = containers[0]; - } + let types = await ctx.call('type-index.getTypes', { + uri: containerUri || resourceUri, + webId: this.settings.podProvider ? getWebIdFromUri(containerUri) : undefined + }); + + // If this a resource, check if its container is registered + if (!types && resourceUri) { + [containerUri] = await ctx.call('ldp.resource.getContainers', { resourceUri }); - if (containerUri) { - const types = await ctx.call('type-index.getTypes', { - containerUri, - webId: this.settings.podProvider ? getWebIdFromUri(containerUri) : undefined - }); + if (containerUri) { + types = await ctx.call('type-index.getTypes', { + uri: containerUri, + isContainer: true, + webId: this.settings.podProvider ? getWebIdFromUri(containerUri) : undefined + }); + } + } + if (types) { const containerOptions = await this.actions.getByTypes({ types }, { parentCtx: ctx }); return { ...this.settings.defaultOptions, ...containerOptions }; diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index bb88b1425..c6e8d5f7d 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,21 +1,27 @@ import { ActionSchema } from 'moleculer'; /** - * Get the container URI based on its type - * Short cut to the TypeIndexService + * Get the container or resource URI based on its type + * Shortcut to the TypeIndexService */ const GetUriAction = { visibility: 'public', params: { type: { type: 'string' }, + isContainer: { type: 'boolean', default: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { - const { type, webId } = ctx.params; + const { type, isContainer, typeIndex, webId } = ctx.params; - const containersUris = await ctx.call('type-index.getContainersUris', { type, webId }); + const [uri] = (await ctx.call('type-index.getUris', { + type, + isContainer, + isPrivate: typeIndex === 'private', + webId + })) as string[]; - return containersUris?.[0]; + return uri; } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index 8e3d6a1db..f125fe0c0 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -1,10 +1,10 @@ import { ActionSchema } from 'moleculer'; -const Schema = { +const ListAction = { visibility: 'public', handler() { - return this.registeredContainers; + return this.registrations; } } satisfies ActionSchema; -export default Schema; +export default ListAction; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index 3ba1cc97f..9a688dc8e 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,11 +1,13 @@ import { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; +import { Registration } from '../../../types.ts'; -const Schema = { +const RegisterAction = { visibility: 'public', params: { - path: { type: 'string', optional: true }, name: { type: 'string', optional: true }, + isContainer: { type: 'boolean', default: true }, + path: { type: 'string', optional: true }, accept: { type: 'string', optional: true }, acceptedTypes: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, shapeTreeUri: { type: 'string', optional: true }, @@ -18,71 +20,60 @@ const Schema = { typeIndex: { type: 'string', optional: true } }, async handler(ctx) { - let options = { ...this.settings.defaultOptions, ...ctx.params }; + let registration: Registration = { ...this.settings.defaultOptions, ...ctx.params }; // Find the type from the shape tree if necessary - if (!options.acceptedTypes && options.shapeTreeUri) { + if (!registration.acceptedTypes && registration.shapeTreeUri) { const services = await this.broker.call('$node.services'); if (!services.some((s: any) => s.name === 'shape-trees') && !services.some((s: any) => s.name === 'shacl')) throw new Error('If you use shapeTreeUri in container options, you need the shape-trees and shacl service'); try { - const shapeUri = await ctx.call('shape-trees.getShapeUri', { resourceUri: options.shapeTreeUri }); + const shapeUri = await ctx.call('shape-trees.getShapeUri', { resourceUri: registration.shapeTreeUri }); const [shapeType] = await ctx.call('shacl.getTypes', { resourceUri: shapeUri }); - options.acceptedTypes = shapeType; + registration.acceptedTypes = shapeType; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - throw new Error(`Could not get type from shape ${options.shapeTreeUri}. Error: ${e.message}`); + throw new Error(`Could not get type from shape ${registration.shapeTreeUri}. Error: ${e.message}`); } } - options.acceptedTypes = - options.acceptedTypes && (await ctx.call('jsonld.parser.expandTypes', { types: options.acceptedTypes })); - - if (!options.name) options.name = options.path; - - // If slugs are not allowed, we must registered this container with the type index - if ((!this.settings.allowSlugs || !options.path) && !options.typeIndex) options.typeIndex = 'public'; + registration.acceptedTypes = + registration.acceptedTypes && + (await ctx.call('jsonld.parser.expandTypes', { types: registration.acceptedTypes })); - if (options.jsonContext) { - throw new Error('The jsonContext container option has been deprecated, please remove it'); - } + if (!registration.name && registration.path) registration.name = registration.path; // Ignore undefined options - Object.keys(options).forEach(key => (options[key] === undefined || options[key] === null) && delete options[key]); + Object.keys(registration).forEach( + key => (registration[key] === undefined || registration[key] === null) && delete registration[key] + ); - if (options.podsContainer === true) { - // Skip container creation for the root PODs container (it is not a real LDP container since no dataset have these data) - } else if (this.settings.podProvider) { - // In Pod provider mode, the container is created when a new user is created - } else { + // Create the container + // In Pod provider mode, the container is created when a new user is created + if (registration.isContainer && !this.settings.podProvider) { await this.broker.waitForServices(['type-index']); - let [containerUri] = await ctx.call('type-index.getContainersUris', { - type: arrayOf(options.acceptedTypes)[0], - isPrivate: options.typeIndex === 'private' - }); - - if (containerUri && (await ctx.call('ldp.container.exist', { containerUri }))) { - this.logger.info(`Container for type ${options.acceptedTypes} already exists, skipping...`); - } else { - this.logger.info(`Creating container for ${options.acceptedTypes}...`); - containerUri = await ctx.call('triplestore.named-graph.create', { - baseUrl: this.settings.baseUrl, - slug: this.settings.allowSlugs ? options.path : undefined // TODO allow path in slug - }); + let [uri] = (await ctx.call('type-index.getUris', { + type: arrayOf(registration.acceptedTypes)[0], + isContainer: true, + isPrivate: registration.typeIndex === 'private' + })) as string[]; - await ctx.call('ldp.container.createAndAttach', { containerUri, options }); + if (uri) { + this.logger.info(`Container for type ${registration.acceptedTypes} already exists, skipping...`); + } else { + await this.createContainer(registration); } } // Save the options - this.registeredContainers[options.name] = options; + this.registrations[registration.name] = registration; - ctx.emit('ldp.registry.registered', { container: options }, { meta: { webId: null, dataset: null } }); + ctx.emit('ldp.registry.registered', { registration }, { meta: { webId: null, dataset: null } }); - return options; + return registration; } } satisfies ActionSchema; -export default Schema; +export default RegisterAction; diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.ts b/src/middleware/packages/ldp/services/registry/defaultOptions.ts index 012eeb20a..4fd716c5f 100644 --- a/src/middleware/packages/ldp/services/registry/defaultOptions.ts +++ b/src/middleware/packages/ldp/services/registry/defaultOptions.ts @@ -1,10 +1,11 @@ -import { ContainerOptions } from '../../types.ts'; +import { Registration } from '../../types.ts'; const Schema = { readOnly: false, + isContainer: true, excludeFromMirror: false, typeIndex: 'public', - permissions: (webId: any) => { + permissions: webId => { switch (webId) { case 'anon': return { @@ -35,7 +36,7 @@ const Schema = { }; } }, - newResourcesPermissions: (webId: any) => { + newResourcesPermissions: webId => { switch (webId) { case 'anon': return { @@ -68,6 +69,6 @@ const Schema = { } }, controlledActions: {} -} as Partial; +} as Partial; export default Schema; diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 2547a31de..7ec4e8a21 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -1,11 +1,11 @@ import { ServiceSchema } from 'moleculer'; -import getByTypesAction from './actions/getByTypes.ts'; -import getByUriAction from './actions/getByUri.ts'; -import getUriAction from './actions/getUri.ts'; -import listAction from './actions/list.ts'; -import registerAction from './actions/register.ts'; +import GetByTypesAction from './actions/getByTypes.ts'; +import GetByUriAction from './actions/getByUri.ts'; +import GetUriAction from './actions/getUri.ts'; +import ListAction from './actions/list.ts'; +import RegisterAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; -import { ContainerOptions } from '../../types.ts'; +import { Registration } from '../../types.ts'; const LdpRegistrySchema = { name: 'ldp.registry' as const, @@ -18,14 +18,14 @@ const LdpRegistrySchema = { }, dependencies: ['ldp.container', 'api'], actions: { - getByTypes: getByTypesAction, - getByUri: getByUriAction, - getUri: getUriAction, - list: listAction, - register: registerAction + getByTypes: GetByTypesAction, + getByUri: GetByUriAction, + getUri: GetUriAction, + list: ListAction, + register: RegisterAction }, async started() { - this.registeredContainers = {} as { [name: string]: ContainerOptions }; + this.registrations = {} as { [name: string]: Registration }; if (this.settings.podProvider) { // The auth.account service is a dependency only in POD provider config await this.broker.waitForServices(['auth.account']); @@ -37,33 +37,66 @@ const LdpRegistrySchema = { await this.actions.register(container); } }, + methods: { + async createContainer(registration: Registration, webId) { + try { + this.logger.info(`Creating container ${registration.name}...`); + + const baseUrl = this.settings.podProvider + ? await this.broker.call('solid-storage.getUrl', { webId }) + : this.settings.baseUrl; + + const containerUri = await this.broker.call('triplestore.named-graph.create', { + baseUrl, + slug: this.settings.allowSlugs ? registration.path : undefined + }); + + await this.broker.call('ldp.container.createAndAttach', { + containerUri, + options: registration, + webId + }); + + return containerUri; + } catch (error) { + this.logger.warn(`Could not create container ${registration.name}...`); + } + } + // async createResource(registration: Registration, webId) { + // try { + // this.logger.info(`Creating resource ${registration.name}...`); + + // const baseUrl = this.settings.podProvider + // ? await this.broker.call('solid-storage.getUrl', { webId }) + // : this.settings.baseUrl; + + // const resourceUri = await this.broker.call('triplestore.named-graph.create', { + // baseUrl, + // slug: this.settings.allowSlugs ? registration.path : undefined + // }); + + // await this.broker.call('ldp.resource.create', { + // resourceUri, + // resource: { '@id': resourceUri, '@type': registration.acceptedTypes }, + // permissions: registration.permissions, + // webId: 'system' + // }); + // } catch (error) { + // this.logger.warn(`Could not create resource ${registration.name}...`); + // } + // } + }, events: { 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; - // We want to add user's containers only in Pod provider config - if (this.settings.podProvider) { - const storageUrl: string = await ctx.call('solid-storage.getUrl', { webId }); - - // Go through each registered container. - for (const options of Object.values(this.registeredContainers)) { - try { - this.logger.info(`Creating container ${options.name}...`); - - const containerUri = await ctx.call('triplestore.named-graph.create', { - baseUrl: storageUrl, - slug: this.settings.allowSlugs ? options.path : undefined - }); - - await ctx.call('ldp.container.createAndAttach', { - containerUri, - options, - webId - }); - } catch (error) { - this.logger.warn(`Could not create container ${options.name}...`); - } + for (const registration of Object.values(this.registrations as { [name: string]: Registration })) { + if (registration.isContainer) { + await this.createContainer(registration, webId); + } /*else { + await this.createResource(registration, webId); + }*/ } } } diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 9338904be..e7f32e1d1 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -15,10 +15,11 @@ const Schema = { contentType: { type: 'string', optional: true - } + }, + options: { type: 'object', optional: true } }, async handler(ctx) { - let { resource, resourceUri, contentType } = ctx.params; + let { resource, resourceUri, contentType, options } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (contentType && contentType !== MIME_TYPES.JSON) @@ -48,7 +49,7 @@ const Schema = { }); // TODO See if using controlledAction is still necessary now blank nodes are automatically detected - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); + const { controlledActions } = options || (await ctx.call('ldp.registry.getByUri', { resourceUri })); const newData = await ctx.call( (controlledActions && controlledActions.get) || 'ldp.resource.get', { @@ -62,7 +63,8 @@ const Schema = { resourceUri, newData, webId, - dataset: ctx.meta.dataset + dataset: ctx.meta.dataset, + options }; if (!ctx.meta.skipEmitEvent) { diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index 6c338f966..46d014af4 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -10,7 +10,6 @@ interface ControlledActions { } export interface WacPermission { - uri?: string; // For users and groups read: boolean; write: boolean; append: boolean; @@ -20,15 +19,16 @@ export interface WacPermission { export interface WacPermissionObject { anon?: WacPermission; anyUser?: WacPermission; - user?: WacPermission; - group?: WacPermission; + user?: { uri: string } & WacPermission; + group?: { uri: string } & WacPermission; } export type WacPermissionFunction = (webId: string) => WacPermissionObject; -export interface ContainerOptions { +export interface Registration { + name: string; + isContainer: boolean; path?: string; - name?: string; accept?: string; // Check if this is still used acceptedTypes?: string | string[]; shapeTreeUri?: string; diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index 25fd022de..bf7f1d676 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -10,7 +10,8 @@ const PrivateTypeIndexService = { initialValue: { '@type': ['solid:TypeIndex', 'solid:UnlistedDocument'] }, - permissions: {} + permissions: {}, + typeIndex: 'private' }, hooks: { after: { diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index a53e02a7d..4dfe85025 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -14,7 +14,8 @@ const PublicTypeIndexService = { anon: { read: true } - } + }, + typeIndex: 'public' }, hooks: { after: { diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index 668b90dc7..e34c6be98 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -22,44 +22,44 @@ const TypeIndexService = { visibility: 'public', params: { types: { type: 'array' }, - containerUri: { type: 'string' }, + uri: { type: 'string' }, webId: { type: 'string' }, + isContainer: { type: 'boolean', default: true }, isPrivate: { type: 'boolean', default: false } }, async handler(ctx) { - let { types, containerUri, webId, isPrivate } = ctx.params; + let { types, uri, webId, isContainer, isPrivate } = ctx.params; - const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); - const oldExpandedTypes = await this.actions.getTypes({ containerUri, webId }); + const expandedTypes: string[] = await ctx.call('jsonld.parser.expandTypes', { types }); + const oldExpandedTypes: string[] = await this.actions.getTypes({ uri, webId, isPrivate }); - if (oldExpandedTypes.length > 0) { - throw new Error('Not implemented'); - // const newExpandedTypes = expandedTypes.filter((t: any) => !oldExpandedTypes.includes(t)); - - // if (newExpandedTypes.length > 0) { - // for (const expandedType of newExpandedTypes) { - // this.logger.info(`Adding type ${expandedType} to type registration ${existingRegistration.id}`); - // await this.actions.patch({ - // resourceUri: existingRegistration.id, - // triplesToAdd: [ - // rdf.quad( - // rdf.namedNode(existingRegistration.id), - // rdf.namedNode('http://www.w3.org/ns/solid/terms#forClass'), - // rdf.namedNode(expandedType) - // ) - // ], - // webId - // }); - // } - // } else { - // this.logger.info(`The container ${containerUri} is already registered. Skipping...`); - // } - } else { - const typeIndexUri = await ctx.call(`${isPrivate ? 'private' : 'public'}-type-index.getUri`, { webId }); + const typeIndexUri = await ctx.call(`${isPrivate ? 'private' : 'public'}-type-index.getUri`, { webId }); - // Generate a hash based on the container URI (which should be unique !) - const typeRegistrationUri = `${typeIndexUri}#${getSlugFromUri(containerUri)}`; + // Use a hash based on the URI (which should be unique !) + const typeRegistrationUri = `${typeIndexUri}#${getSlugFromUri(uri)}`; + if (oldExpandedTypes.length > 0) { + const newExpandedTypes = expandedTypes.filter((t: any) => !oldExpandedTypes.includes(t)); + + if (newExpandedTypes.length > 0) { + for (const expandedType of newExpandedTypes) { + this.logger.info(`Adding type ${expandedType} to type registration ${typeRegistrationUri}`); + await this.actions.patch({ + resourceUri: typeIndexUri, + triplesToAdd: expandedTypes.map(type => + rdf.quad( + rdf.namedNode(typeRegistrationUri), + rdf.namedNode('http://www.w3.org/ns/solid/terms#forClass'), + rdf.namedNode(type) + ) + ), + webId + }); + } + } else { + this.logger.info(`The URI ${uri} is already registered. Skipping...`); + } + } else { // Add the type registration await ctx.call( 'ldp.resource.patch', @@ -73,8 +73,12 @@ const TypeIndexService = { ), rdf.quad( rdf.namedNode(typeRegistrationUri), - rdf.namedNode('http://www.w3.org/ns/solid/terms#instanceContainer'), - rdf.namedNode(containerUri) + rdf.namedNode( + isContainer + ? 'http://www.w3.org/ns/solid/terms#instanceContainer' + : 'http://www.w3.org/ns/solid/terms#instance' + ), + rdf.namedNode(uri) ), ...expandedTypes.map(type => rdf.quad( @@ -98,13 +102,13 @@ const TypeIndexService = { getTypes: { visibility: 'public', params: { - containerUri: { type: 'string' }, + uri: { type: 'string' }, webId: { type: 'string', optional: true }, isPrivate: { type: 'boolean', optional: true } }, cache: true, async handler(ctx) { - const { containerUri, webId, isPrivate } = ctx.params; + const { uri, webId, isPrivate } = ctx.params; // If isPrivate is not defined, search in both type indexes let typeIndexUris = []; @@ -118,11 +122,12 @@ const TypeIndexService = { PREFIX solid: SELECT ?type WHERE { - VALUES ?typeIndexUri { ${typeIndexUris.map(uri => `<${uri}>`).join(' ')} } + VALUES ?typeIndexUri { ${typeIndexUris.map(typeIndexUri => `<${typeIndexUri}>`).join(' ')} } + VALUES ?instancePredicate { solid:instanceContainer solid:instance } GRAPH ?typeIndexUri { ?typeRegistrationUri a solid:TypeRegistration . ?typeRegistrationUri solid:forClass ?type . - ?typeRegistrationUri solid:instanceContainer <${containerUri}> . + ?typeRegistrationUri ?instancePredicate <${uri}> . } } `, @@ -134,18 +139,19 @@ const TypeIndexService = { } }, - getContainersUris: { + getUris: { visibility: 'public', params: { type: { type: 'string' }, webId: { type: 'string', optional: true }, + isContainer: { type: 'boolean', optional: true }, isPrivate: { type: 'boolean', optional: true } }, cache: true, async handler(ctx) { - const { type, webId, isPrivate } = ctx.params; + const { type, webId, isContainer, isPrivate } = ctx.params; - const [expandedType] = await ctx.call('jsonld.parser.expandTypes', { types: [type] }); + const [expandedType] = (await ctx.call('jsonld.parser.expandTypes', { types: [type] })) as string[]; // If isPrivate is not defined, search in both type indexes let typeIndexUris = []; @@ -154,16 +160,22 @@ const TypeIndexService = { if (isPrivate === true || isPrivate === undefined) typeIndexUris.push(await ctx.call(`private-type-index.getUri`, { webId })); + // If isContainer is not defined, look for both containers and single resources + let instancePredicates = []; + if (isContainer === true || isContainer === undefined) instancePredicates.push('solid:instanceContainer'); + if (isContainer === false || isContainer === undefined) instancePredicates.push('solid:instance'); + const results = await ctx.call('triplestore.query', { query: ` PREFIX solid: - SELECT ?containerUri + SELECT ?uri WHERE { VALUES ?typeIndexUri { ${typeIndexUris.map(uri => `<${uri}>`).join(' ')} } + VALUES ?instancePredicate { ${instancePredicates.join(' ')} } GRAPH ?typeIndexUri { ?typeRegistrationUri a solid:TypeRegistration . ?typeRegistrationUri solid:forClass <${expandedType}> . - ?typeRegistrationUri solid:instanceContainer ?containerUri + ?typeRegistrationUri ?instancePredicate ?uri } } `, @@ -171,7 +183,7 @@ const TypeIndexService = { dataset: isWebId(webId) ? getDatasetFromUri(webId) : undefined }); - return results.map((r: any) => r.containerUri.value); + return results.map((r: any) => r.uri.value); } } }, @@ -180,20 +192,47 @@ const TypeIndexService = { async handler(ctx) { const { containerUri, options, webId } = ctx.params; - const serviceName = `${options.typeIndex === 'private' ? 'private' : 'public'}-type-index`; + if (options) { + const serviceName = `${options.typeIndex === 'private' ? 'private' : 'public'}-type-index`; - await this.broker.waitForServices([serviceName]); - await ctx.call(`${serviceName}.waitForCreation`, { webId }); + await this.broker.waitForServices([serviceName]); + await ctx.call(`${serviceName}.waitForCreation`, { webId }); - await this.actions.register( - { - types: arrayOf(options?.acceptedTypes), - containerUri, - webId, - isPrivate: options.typeIndex === 'private' - }, - { parentCtx: ctx } - ); + await this.actions.register( + { + types: arrayOf(options?.acceptedTypes), + uri: containerUri, + webId, + isContainer: true, + isPrivate: options.typeIndex === 'private' + }, + { parentCtx: ctx } + ); + } + } + }, + 'ldp.resource.created': { + async handler(ctx) { + const { resourceUri, options, webId } = ctx.params; + + // When a controlled resource is created, we pass the registration as a parameter + if (options) { + const serviceName = `${options.typeIndex === 'private' ? 'private' : 'public'}-type-index`; + + await this.broker.waitForServices([serviceName]); + await ctx.call(`${serviceName}.waitForCreation`, { webId }); + + await this.actions.register( + { + types: arrayOf(options?.acceptedTypes), + uri: resourceUri, + webId, + isContainer: false, + isPrivate: options.typeIndex === 'private' + }, + { parentCtx: ctx } + ); + } } } } diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 797bb0e99..9c50c91a0 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -3,7 +3,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { void as voidOntology } from '@semapps/ontologies'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; -import { createFragmentURL, arrayOf } from '@semapps/ldp'; +import { createFragmentURL, arrayOf, Registration } from '@semapps/ldp'; import { parseHeader } from '@semapps/middlewares'; import { ServiceSchema, Errors } from 'moleculer'; @@ -250,17 +250,14 @@ const VoidSchema = { methods: { async getContainers(ctx) { const { baseUrl } = this.settings; - const registeredContainers = await ctx.call('ldp.registry.list'); + const registrations = (await ctx.call('ldp.registry.list')) as { [name: string]: Registration }; const res = await Promise.all( - Object.values(registeredContainers) - // @ts-expect-error TS(18046): 'c' is of type 'unknown'. + Object.values(registrations) .filter(c => c.acceptedTypes) .map(async c => { const partition = { - // @ts-expect-error TS(18046): 'c' is of type 'unknown'. 'http://rdfs.org/ns/void#uriSpace': urlJoin(baseUrl, c.path), - // @ts-expect-error TS(18046): 'c' is of type 'unknown'. 'http://rdfs.org/ns/void#class': arrayOf(c.acceptedTypes) }; // @ts-expect-error TS(18046): 'c' is of type 'unknown'. diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index d4da52a35..2913cc8f2 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -15,26 +15,6 @@ const modifyActions = [ const tripleStoreActions = ['triplestore.insert', 'triplestore.query', 'triplestore.update', 'triplestore.dropAll']; -const addRightsToNewResource = async (ctx: any, resourceUri: any, webId: any) => { - const { newResourcesPermissions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); - const newRights = - typeof newResourcesPermissions === 'function' ? newResourcesPermissions(webId, ctx) : newResourcesPermissions; - - await ctx.call( - 'webacl.resource.addRights', - { - webId: 'system', - resourceUri, - newRights - }, - { - meta: { - skipObjectsWatcher: true - } - } - ); -}; - const addRightsToNewUser = async (ctx: any, userUri: any) => { // Manually add the permissions for the user resource now that we have its webId // First delete the default permissions added by the middleware when we called ldp.resource.create @@ -93,8 +73,30 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se */ switch (action.name) { case 'ldp.resource.create': { + // On start, resource permissions are passed as parameters because the registry is not up yet + let permissions; + if (ctx.params.options) { + permissions = ctx.params.options?.permissions || defaultContainerOptions.permissions; + } else { + const options = await ctx.call('ldp.registry.getByUri', { resourceUri: ctx.params.resourceUri }); + permissions = options?.newResourcesPermissions || defaultContainerOptions.permissions; + } + // We must add the permissions before inserting the resource - await addRightsToNewResource(ctx, ctx.params.resourceUri, webId); + await ctx.call( + 'webacl.resource.addRights', + { + webId: 'system', + resourceUri: ctx.params.resourceUri, + newRights: typeof permissions === 'function' ? permissions(webId, ctx) : permissions + }, + { + meta: { + skipObjectsWatcher: true + } + } + ); + break; } diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index efe7165e3..3b2366bc3 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,16 +1,16 @@ import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; +import { Registration } from '@semapps/ldp'; export const action = { visibility: 'public', async handler(ctx) { const { webId } = ctx.params; - const containers = await ctx.call('ldp.registry.list'); + const containers: { [name: string]: Registration } = await ctx.call('ldp.registry.list'); - // @ts-expect-error TS(2339): Property 'permissions' does not exist on type 'unk... Remove this comment to see the full error message - for (const { permissions, podsContainer, path } of Object.values(containers)) { - if (permissions && !podsContainer) { + for (const { permissions, path } of Object.values(containers)) { + if (permissions) { const baseUrl = this.settings.podProvider ? await ctx.call('solid-storage.getUrl', { webId }) : this.settings.baseUrl; @@ -51,7 +51,6 @@ export const action = { isContainer: true, removePublicRead, removeDefaultPublicRead, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index 86ce1ab6b..d0f858e6e 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -61,7 +61,6 @@ const WebaclResourceSchema = { getRights: getRights.action, hasRights: hasRights.action, isPublic: isPublic.action, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ resourceUri: { type: "string"... Remove this comment to see the full error message getUsersWithReadRights: getUsersWithReadRights.action, refreshContainersRights: refreshContainersRights.action, removeRights: removeRights.action, diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index bcb7e8eaf..604848d91 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -12,7 +12,6 @@ const WebIdService = { // ControlledContainerMixin path: '/foaf/person', acceptedTypes: ['http://xmlns.com/foaf/0.1/Person'], - podsContainer: false, // DereferenceMixin dereferencePlan: [ { diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 2376ca82a..7b5f6034d 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -7,7 +7,7 @@ import { fetchServer } from '../utils.ts'; jest.setTimeout(50000); let broker: any; -describe.each([true, false])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { +describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { beforeAll(async () => { broker = await initialize(allowSlugs); @@ -34,9 +34,9 @@ describe.each([true, false])('ControlledContainerMixin with allowSlugs: %s', (al test('The container is registered and created', async () => { await broker.call('videos.waitForContainerCreation'); - const registeredContainers = await broker.call('ldp.registry.list', { type: 'as:Video' }); - expect(registeredContainers.videos).not.toBeUndefined(); - numRegisteredContainers = registeredContainers.length; + const registrations = await broker.call('ldp.registry.list', { type: 'as:Video' }); + expect(registrations.videos).not.toBeUndefined(); + numRegisteredContainers = registrations.length; const containersUris = await broker.call('ldp.container.getAll'); // With slugs, the WebIdService generates a /foaf and a /foaf/person containers @@ -67,8 +67,8 @@ describe.each([true, false])('ControlledContainerMixin with allowSlugs: %s', (al await broker.start(); // No new container has been registered - const registeredContainers = await broker.call('ldp.registry.list', { type: 'as:Video' }); - expect(registeredContainers.length).toBe(numRegisteredContainers); + const registrations = await broker.call('ldp.registry.list', { type: 'as:Video' }); + expect(registrations.length).toBe(numRegisteredContainers); // No new container has been created const containersUris = await broker.call('ldp.container.getAll'); diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index d577f32cd..b917fd698 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -5,7 +5,7 @@ import { fetchServer } from '../utils.ts'; jest.setTimeout(50000); let broker: any; -describe.each([true, false])('ControlledResourceMixin with allowSlugs: %s', (allowSlugs: boolean) => { +describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (allowSlugs: boolean) => { beforeAll(async () => { broker = await initialize(allowSlugs); From 8ec70024463c4b161643402f236c928854beeba0 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 21 Oct 2025 12:53:49 +0200 Subject: [PATCH 094/165] Rename options to registration --- .../ldp/mixins/controlled-resource.ts | 2 +- .../ldp/services/container/actions/create.ts | 6 +++--- .../container/actions/createAndAttach.ts | 8 ++++---- .../packages/ldp/services/registry/index.ts | 2 +- .../ldp/services/resource/actions/create.ts | 9 ++++----- .../solid/services/type-index/type-index.ts | 20 +++++++++---------- .../packages/webacl/middlewares/webacl.ts | 17 ++++++++-------- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index 62257b174..3a52ab14c 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -57,7 +57,7 @@ const ControlledResourceMixin = { await ctx.call('ldp.resource.create', { resourceUri, resource: { '@id': resourceUri, ...resource }, - options: this.registration, + registration: this.registration, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 13f070ed8..a649a2520 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -6,11 +6,11 @@ const Schema = { containerUri: { type: 'string' }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, - options: { type: 'object', optional: true }, + registration: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { - const { containerUri, title, description, options } = ctx.params; + const { containerUri, title, description, registration } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('triplestore.insert', { @@ -24,7 +24,7 @@ const Schema = { webId: 'system' }); - ctx.emit('ldp.container.created', { containerUri, options, webId }); + ctx.emit('ldp.container.created', { containerUri, registration, webId }); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 8cef4fad2..29d9a7890 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -13,11 +13,11 @@ const Schema = { containerUri: { type: 'string' }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, - options: { type: 'object', optional: true }, + registration: { type: 'object', optional: true }, webId: { type: 'string', optional: true } // Required in Pod provider config }, async handler(ctx) { - const { containerUri, title, description, options, webId } = ctx.params; + const { containerUri, title, description, registration, webId } = ctx.params; const exists = await ctx.call('ldp.container.exist', { containerUri }); @@ -47,7 +47,7 @@ const Schema = { if (!parentExists) { // Recursively create the parent containers, without title/description/permissions await this.actions.createAndAttach( - { containerUri: parentContainerUri, options: { permissions: {} }, webId }, + { containerUri: parentContainerUri, registration: { permissions: {} }, webId }, { parentCtx: ctx } ); } @@ -59,7 +59,7 @@ const Schema = { containerUri, title, description, - options, + registration, webId: this.settings.podProvider ? webId : 'system' }, { parentCtx: ctx } diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 7ec4e8a21..f4be4a32b 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -53,7 +53,7 @@ const LdpRegistrySchema = { await this.broker.call('ldp.container.createAndAttach', { containerUri, - options: registration, + registration, webId }); diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index e7f32e1d1..d27061cfe 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -16,10 +16,10 @@ const Schema = { type: 'string', optional: true }, - options: { type: 'object', optional: true } + registration: { type: 'object', optional: true } }, async handler(ctx) { - let { resource, resourceUri, contentType, options } = ctx.params; + let { resource, resourceUri, contentType, registration } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; if (contentType && contentType !== MIME_TYPES.JSON) @@ -48,8 +48,7 @@ const Schema = { graphName: resourceUri }); - // TODO See if using controlledAction is still necessary now blank nodes are automatically detected - const { controlledActions } = options || (await ctx.call('ldp.registry.getByUri', { resourceUri })); + const { controlledActions } = registration || (await ctx.call('ldp.registry.getByUri', { resourceUri })); const newData = await ctx.call( (controlledActions && controlledActions.get) || 'ldp.resource.get', { @@ -64,7 +63,7 @@ const Schema = { newData, webId, dataset: ctx.meta.dataset, - options + registration }; if (!ctx.meta.skipEmitEvent) { diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index e34c6be98..feb053669 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -190,21 +190,21 @@ const TypeIndexService = { events: { 'ldp.container.created': { async handler(ctx) { - const { containerUri, options, webId } = ctx.params; + const { containerUri, registration, webId } = ctx.params; - if (options) { - const serviceName = `${options.typeIndex === 'private' ? 'private' : 'public'}-type-index`; + if (registration && registration.acceptedTypes) { + const serviceName = `${registration.typeIndex === 'private' ? 'private' : 'public'}-type-index`; await this.broker.waitForServices([serviceName]); await ctx.call(`${serviceName}.waitForCreation`, { webId }); await this.actions.register( { - types: arrayOf(options?.acceptedTypes), + types: arrayOf(registration.acceptedTypes), uri: containerUri, webId, isContainer: true, - isPrivate: options.typeIndex === 'private' + isPrivate: registration.typeIndex === 'private' }, { parentCtx: ctx } ); @@ -213,22 +213,22 @@ const TypeIndexService = { }, 'ldp.resource.created': { async handler(ctx) { - const { resourceUri, options, webId } = ctx.params; + const { resourceUri, registration, webId } = ctx.params; // When a controlled resource is created, we pass the registration as a parameter - if (options) { - const serviceName = `${options.typeIndex === 'private' ? 'private' : 'public'}-type-index`; + if (registration && registration.acceptedTypes) { + const serviceName = `${registration.typeIndex === 'private' ? 'private' : 'public'}-type-index`; await this.broker.waitForServices([serviceName]); await ctx.call(`${serviceName}.waitForCreation`, { webId }); await this.actions.register( { - types: arrayOf(options?.acceptedTypes), + types: arrayOf(registration.acceptedTypes), uri: resourceUri, webId, isContainer: false, - isPrivate: options.typeIndex === 'private' + isPrivate: registration.typeIndex === 'private' }, { parentCtx: ctx } ); diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 2913cc8f2..3843de438 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -75,11 +75,12 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se case 'ldp.resource.create': { // On start, resource permissions are passed as parameters because the registry is not up yet let permissions; - if (ctx.params.options) { - permissions = ctx.params.options?.permissions || defaultContainerOptions.permissions; + if (ctx.params.registration) { + // Use the permissions param (and not newResourcesPermission) because this is for controlled resources + permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; } else { - const options = await ctx.call('ldp.registry.getByUri', { resourceUri: ctx.params.resourceUri }); - permissions = options?.newResourcesPermissions || defaultContainerOptions.permissions; + const registration = await ctx.call('ldp.registry.getByUri', { resourceUri: ctx.params.resourceUri }); + permissions = registration?.newResourcesPermissions || defaultContainerOptions.permissions; } // We must add the permissions before inserting the resource @@ -103,11 +104,11 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se case 'ldp.container.create': { // On start, container permissions are passed as parameters because the registry is not up yet let permissions; - if (ctx.params.options) { - permissions = ctx.params.options?.permissions || defaultContainerOptions.permissions; + if (ctx.params.registration) { + permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; } else { - const options = await ctx.call('ldp.registry.getByUri', { containerUri: ctx.params.containerUri }); - permissions = options?.permissions || defaultContainerOptions.permissions; + const registration = await ctx.call('ldp.registry.getByUri', { containerUri: ctx.params.containerUri }); + permissions = registration?.permissions || defaultContainerOptions.permissions; } await ctx.call( From 5784e8359f4f77523ed988f94dedc5c2b04c88b1 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 28 Oct 2025 12:16:07 +0100 Subject: [PATCH 095/165] Big refactoring. All LDP tests passing --- .yarnrc | 5 - src/middleware/.yarnrc | 5 - src/middleware/.yarnrc.yml | 3 - .../packages/ldp/services/api/actions/post.ts | 1 + .../ldp/services/container/actions/create.ts | 15 +- .../container/actions/createAndAttach.ts | 83 --------- .../ldp/services/container/actions/get.ts | 1 - .../ldp/services/container/actions/getPath.ts | 46 ----- .../packages/ldp/services/container/index.ts | 6 +- .../ldp/services/link-header/actions/get.ts | 1 - .../ldp/services/registry/actions/getByUri.ts | 4 +- .../ldp/services/registry/actions/getUri.ts | 9 +- .../ldp/services/registry/actions/register.ts | 26 +-- .../packages/ldp/services/registry/index.ts | 87 +++------- .../services/resource/actions/generateId.ts | 2 +- src/middleware/packages/ldp/types.ts | 8 + .../packages/solid/services/storage.ts | 81 +++++---- .../solid/services/type-index/type-index.ts | 33 +--- .../packages/webacl/middlewares/webacl.ts | 98 +++++++---- .../actions/refreshContainersRights.ts | 2 +- src/middleware/tests/interop/initialize.ts | 15 +- .../tests/interop/remote-inference.test.ts | 12 +- src/middleware/tests/ldp/api.test.ts | 150 ++--------------- src/middleware/tests/ldp/binary.test.ts | 53 +++--- .../tests/ldp/container-path.test.ts | 40 ----- src/middleware/tests/ldp/container.test.ts | 126 ++++---------- .../tests/ldp/content-negotiation.test.ts | 70 ++++---- .../tests/ldp/controlled-container.test.ts | 66 ++++++-- .../tests/ldp/controlled-resource.test.ts | 3 +- src/middleware/tests/ldp/headers.test.ts | 70 ++++++-- src/middleware/tests/ldp/initialize.ts | 38 +---- src/middleware/tests/ldp/resource.test.ts | 158 ++++++++++-------- src/middleware/tests/package.json | 3 +- src/middleware/tests/webId/webId.test.ts | 3 +- src/middleware/yarn.lock | 8 +- 35 files changed, 497 insertions(+), 834 deletions(-) delete mode 100644 .yarnrc delete mode 100644 src/middleware/.yarnrc delete mode 100644 src/middleware/.yarnrc.yml delete mode 100644 src/middleware/packages/ldp/services/container/actions/createAndAttach.ts delete mode 100644 src/middleware/packages/ldp/services/container/actions/getPath.ts delete mode 100644 src/middleware/tests/ldp/container-path.test.ts diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index 85b738b8d..000000000 --- a/.yarnrc +++ /dev/null @@ -1,5 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -yarn-path ".yarn/releases/yarn-1.22.22.cjs" diff --git a/src/middleware/.yarnrc b/src/middleware/.yarnrc deleted file mode 100644 index 85b738b8d..000000000 --- a/src/middleware/.yarnrc +++ /dev/null @@ -1,5 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -yarn-path ".yarn/releases/yarn-1.22.22.cjs" diff --git a/src/middleware/.yarnrc.yml b/src/middleware/.yarnrc.yml deleted file mode 100644 index 1f5092607..000000000 --- a/src/middleware/.yarnrc.yml +++ /dev/null @@ -1,3 +0,0 @@ -nodeLinker: node-modules - -yarnPath: .yarn/releases/yarn-classic.cjs diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index 46ddf1027..158c15d9a 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -24,6 +24,7 @@ export default async function post(this: any, ctx: any) { input: ctx.meta.rawBody, options: { format: contentType } }); + delete resource.id; } resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index a649a2520..4f4487cb0 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -3,16 +3,25 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - containerUri: { type: 'string' }, + path: { type: 'string', optional: true }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, registration: { type: 'object', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { - const { containerUri, title, description, registration } = ctx.params; + let { path, title, description, registration } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + const baseUrl = this.settings.podProvider + ? await this.broker.call('solid-storage.getBaseUrl', { webId }) + : this.settings.baseUrl; + + const containerUri = await this.broker.call('triplestore.named-graph.create', { + baseUrl, + slug: this.settings.allowSlugs ? path || registration.path : undefined + }); + await ctx.call('triplestore.insert', { resource: { '@id': containerUri, @@ -25,6 +34,8 @@ const Schema = { }); ctx.emit('ldp.container.created', { containerUri, registration, webId }); + + return containerUri; } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts deleted file mode 100644 index 29d9a7890..000000000 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ /dev/null @@ -1,83 +0,0 @@ -import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; -import { getParentContainerUri } from '../../../utils.ts'; - -/** - * Create a container and attach it to its parent container(s) - * Recursively create the parent container(s) if they don't exist - * In Pod provider config, the webId is required to find the Pod root - */ -const Schema = { - visibility: 'public', - params: { - containerUri: { type: 'string' }, - title: { type: 'string', optional: true }, - description: { type: 'string', optional: true }, - registration: { type: 'object', optional: true }, - webId: { type: 'string', optional: true } // Required in Pod provider config - }, - async handler(ctx) { - const { containerUri, title, description, registration, webId } = ctx.params; - - const exists = await ctx.call('ldp.container.exist', { containerUri }); - - if (!exists) { - let parentContainerUri; - - if (this.settings.podProvider && (!webId || webId === 'anon' || webId === 'system')) - throw new Error(`The webId param is required in Pod provider config. Provided: ${webId}`); - - const rootContainerUri = this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId }) - : urlJoin(this.settings.baseUrl, '/'); - - const containerPath = containerUri.replace(rootContainerUri, '/'); - - // Create the parent container, if it doesn't exist yet - if (containerPath !== '/') { - parentContainerUri = getParentContainerUri(containerUri); - - // if it is the root container, add a trailing slash - if (!this.settings.podProvider && urlJoin(parentContainerUri, '/') === rootContainerUri) { - parentContainerUri = urlJoin(parentContainerUri, '/'); - } - - const parentExists = await ctx.call('ldp.container.exist', { containerUri: parentContainerUri }); - - if (!parentExists) { - // Recursively create the parent containers, without title/description/permissions - await this.actions.createAndAttach( - { containerUri: parentContainerUri, registration: { permissions: {} }, webId }, - { parentCtx: ctx } - ); - } - } - - // Then create the container - await this.actions.create( - { - containerUri, - title, - description, - registration, - webId: this.settings.podProvider ? webId : 'system' - }, - { parentCtx: ctx } - ); - - // Then attach the container to its parent container - if (parentContainerUri) { - await this.actions.attach( - { - containerUri: parentContainerUri, - resourceUri: containerUri, - webId: 'system' - }, - { parentCtx: ctx } - ); - } - } - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 52d495362..3c17011f4 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -19,7 +19,6 @@ const Schema = { }, async handler(ctx) { const { containerUri, accept, filters, doNotIncludeResources, jsonContext } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Read', webId }); diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.ts b/src/middleware/packages/ldp/services/container/actions/getPath.ts deleted file mode 100644 index 24010e197..000000000 --- a/src/middleware/packages/ldp/services/container/actions/getPath.ts +++ /dev/null @@ -1,46 +0,0 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'dash... Remove this comment to see the full error message -import dashify from 'dashify'; -import { ActionSchema } from 'moleculer'; -import { isURL } from '../../../utils.ts'; - -const Schema = { - visibility: 'public', - params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message - resourceType: 'string' - }, - async handler(ctx) { - const { resourceType } = ctx.params; - let ontology; - let prefix; - let className; - - // Match a string of type ldp:Container - const regex = /^([^:]+):([^:]+)$/gm; - - if (isURL(resourceType)) { - ontology = await ctx.call('ontologies.get', { uri: resourceType }); - if (ontology) { - prefix = ontology.prefix; - className = resourceType.replace(ontology.namespace, ''); - } - } else if (resourceType.match(regex)) { - const matchResults = regex.exec(resourceType); - // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. - prefix = matchResults[1]; - // @ts-expect-error TS(18047): 'matchResults' is possibly 'null'. - className = matchResults[2]; - ontology = await ctx.call('ontologies.get', { prefix }); - } else { - throw new Error(`The resourceType must an URI or prefixed type. Provided: ${resourceType}`); - } - - if (!ontology) { - throw new Error(`No registered ontology found for resourceType ${resourceType}`); - } - - return `/${prefix}/${dashify(className)}`; - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index ee20de5d8..c225261e3 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -3,14 +3,12 @@ import urlJoin from 'url-join'; import attachAction from './actions/attach.ts'; import clearAction from './actions/clear.ts'; import createAction from './actions/create.ts'; -import createAndAttachAction from './actions/createAndAttach.ts'; import deleteAction from './actions/delete.ts'; import detachAction from './actions/detach.ts'; import existAction from './actions/exist.ts'; import isEmptyAction from './actions/isEmpty.ts'; import getAction from './actions/get.ts'; import getAllAction from './actions/getAll.ts'; -import getPathAction from './actions/getPath.ts'; import getUrisAction from './actions/getUris.ts'; import includesAction from './actions/includes.ts'; import postAction from './actions/post.ts'; @@ -29,13 +27,11 @@ const LdpContainerSchema = { attach: attachAction, clear: clearAction, create: createAction, - createAndAttach: createAndAttachAction, delete: deleteAction, detach: detachAction, exist: existAction, get: getAction, getAll: getAllAction, - getPath: getPathAction, getUris: getUrisAction, includes: includesAction, isEmpty: isEmptyAction, @@ -45,7 +41,7 @@ const LdpContainerSchema = { methods: { async getBaseUrl(ctx) { return this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) + ? await ctx.call('solid-storage.getBaseUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) : this.settings.baseUrl; } }, diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index af620266f..1150597e7 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -10,7 +10,6 @@ const Schema = { const { uri } = ctx.params; const linkHeader = new LinkHeader(); - // @ts-expect-error TS(2488): Type 'string | number | boolean | any[] | Record s.name === 'shape-trees') && !services.some((s: any) => s.name === 'shacl')) - throw new Error('If you use shapeTreeUri in container options, you need the shape-trees and shacl service'); - - try { - const shapeUri = await ctx.call('shape-trees.getShapeUri', { resourceUri: registration.shapeTreeUri }); - const [shapeType] = await ctx.call('shacl.getTypes', { resourceUri: shapeUri }); - registration.acceptedTypes = shapeType; - } catch (e) { - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - throw new Error(`Could not get type from shape ${registration.shapeTreeUri}. Error: ${e.message}`); - } - } - registration.acceptedTypes = registration.acceptedTypes && (await ctx.call('jsonld.parser.expandTypes', { types: registration.acceptedTypes })); @@ -63,7 +46,14 @@ const RegisterAction = { if (uri) { this.logger.info(`Container for type ${registration.acceptedTypes} already exists, skipping...`); } else { - await this.createContainer(registration); + const containerUri = await ctx.call('ldp.container.create', { registration }); + + await ctx.call('type-index.register', { + types: arrayOf(registration.acceptedTypes), + uri: containerUri, + isContainer: true, + isPrivate: registration.typeIndex === 'private' + }); } } diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index f4be4a32b..13ed5268e 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -5,12 +5,13 @@ import GetUriAction from './actions/getUri.ts'; import ListAction from './actions/list.ts'; import RegisterAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; -import { Registration } from '../../types.ts'; +import { arrayOf } from '../../utils.ts'; +import { Registration, LdpRegistryServiceSettings } from '../../types.ts'; -const LdpRegistrySchema = { +const LdpRegistryService = { name: 'ldp.registry' as const, settings: { - baseUrl: null, + baseUrl: undefined, containers: [], defaultOptions, allowSlugs: true, @@ -30,61 +31,15 @@ const LdpRegistrySchema = { // The auth.account service is a dependency only in POD provider config await this.broker.waitForServices(['auth.account']); } - for (let container of this.settings.containers) { - // Ensure backward compatibility - if (typeof container === 'string') container = { path: container }; - // We await each container registration so they happen in order (root container first)git - await this.actions.register(container); - } + this.registerAll(); }, methods: { - async createContainer(registration: Registration, webId) { - try { - this.logger.info(`Creating container ${registration.name}...`); - - const baseUrl = this.settings.podProvider - ? await this.broker.call('solid-storage.getUrl', { webId }) - : this.settings.baseUrl; - - const containerUri = await this.broker.call('triplestore.named-graph.create', { - baseUrl, - slug: this.settings.allowSlugs ? registration.path : undefined - }); - - await this.broker.call('ldp.container.createAndAttach', { - containerUri, - registration, - webId - }); - - return containerUri; - } catch (error) { - this.logger.warn(`Could not create container ${registration.name}...`); + async registerAll() { + for (let container of this.settings.containers) { + // We await each registration so they happen in order + await this.actions.register(container); } } - // async createResource(registration: Registration, webId) { - // try { - // this.logger.info(`Creating resource ${registration.name}...`); - - // const baseUrl = this.settings.podProvider - // ? await this.broker.call('solid-storage.getUrl', { webId }) - // : this.settings.baseUrl; - - // const resourceUri = await this.broker.call('triplestore.named-graph.create', { - // baseUrl, - // slug: this.settings.allowSlugs ? registration.path : undefined - // }); - - // await this.broker.call('ldp.resource.create', { - // resourceUri, - // resource: { '@id': resourceUri, '@type': registration.acceptedTypes }, - // permissions: registration.permissions, - // webId: 'system' - // }); - // } catch (error) { - // this.logger.warn(`Could not create resource ${registration.name}...`); - // } - // } }, events: { 'auth.registered': { @@ -92,24 +47,34 @@ const LdpRegistrySchema = { const { webId } = ctx.params; if (this.settings.podProvider) { for (const registration of Object.values(this.registrations as { [name: string]: Registration })) { + // Controlled resources are created by the mixin if (registration.isContainer) { - await this.createContainer(registration, webId); - } /*else { - await this.createResource(registration, webId); - }*/ + const containerUri = await ctx.call('ldp.container.create', { + registration, + webId + }); + + await ctx.call('type-index.register', { + types: arrayOf(registration.acceptedTypes), + uri: containerUri, + webId, + isContainer: true, + isPrivate: registration.typeIndex === 'private' + }); + } } } } } } -} satisfies ServiceSchema; +} satisfies ServiceSchema; -export default LdpRegistrySchema; +export default LdpRegistryService; declare global { export namespace Moleculer { export interface AllServices { - [LdpRegistrySchema.name]: typeof LdpRegistrySchema; + [LdpRegistryService.name]: typeof LdpRegistryService; } } } diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index 0d63a6ee6..49df438b5 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -27,7 +27,7 @@ const Schema = { if ((!this.settings.resourcesWithContainerPath || !containerUri) && !isContainer) { // Use the root container URI containerUri = this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) + ? await ctx.call('solid-storage.getBaseUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) : this.settings.baseUrl; } diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index 46d014af4..61c36c9ed 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -40,3 +40,11 @@ export interface Registration { controlledActions?: ControlledActions; typeIndex?: 'private' | 'public'; } + +export interface LdpRegistryServiceSettings { + baseUrl?: string; + containers: Registration[]; + defaultOptions: Partial; + allowSlugs: boolean; + podProvider: boolean; +} diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index df83ba945..883b3e0c2 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,56 +1,59 @@ import urlJoin from 'url-join'; -import rdf from '@rdfjs/data-model'; import { pim } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; +import { getWebIdFromUri } from '@semapps/ldp'; const SolidStorageSchema = { name: 'solid-storage' as const, settings: { - baseUrl: null, - pathName: 'data' + baseUrl: null }, - dependencies: ['ontologies', 'ldp.registry'], + dependencies: ['ontologies'], async started() { if (!this.settings.baseUrl) throw new Error('The baseUrl setting of the solid-storage service is required'); await this.broker.call('ontologies.register', pim); - - // Register root container for the storage (/:username/data/) - // Do not await or we will have a circular dependency with the LdpRegistryService - this.broker.call('ldp.registry.register', { - path: '/', - excludeFromMirror: true, - permissions: {}, - newResourcesPermissions: {} - }); }, actions: { create: { + params: { + username: { type: 'string' } + }, async handler(ctx) { const { username } = ctx.params; - if (!username) throw new Error('Cannot create Solid storage without a username'); await ctx.call('triplestore.dataset.create', { dataset: username, secure: false // TODO Remove when we switch to Fuseki 5 }); - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + const webId = urlJoin(this.settings.baseUrl, username); + const storageUrl = await ctx.call('ldp.container.create', { path: '/data', webId }); + ctx.meta.dataset = username; - // Create the storage root container so that the LdpRegistryService can create the default containers - const storageRootUri = urlJoin(this.settings.baseUrl, username, this.settings.pathName); - await ctx.call('ldp.container.create', { containerUri: storageRootUri, webId: 'system' }); + return storageUrl; + } + }, - return storageRootUri; + getBaseUrl: { + params: { + webId: { type: 'string' } + }, + async handler(ctx) { + const { webId } = ctx.params; + return getWebIdFromUri(webId); } }, - getUrl: { + getRootContainerUri: { + params: { + webId: { type: 'string' } + }, async handler(ctx) { const { webId } = ctx.params; - // This is faster, but later we should use the 'pim:storage' property of the webId - return urlJoin(webId, this.settings.pathName); + const webIdData = await ctx.call('ldp.resource.get', { resourceUri: webId }); + return webIdData?.['pim:storage']; } } }, @@ -58,29 +61,12 @@ const SolidStorageSchema = { 'auth.registered': { async handler(ctx) { const { webId } = ctx.params; - this.logger.info('Storage event registration entered. WebId', webId); - - const storageUrl = await this.actions.getUrl({ webId }, { parentCtx: ctx }); - this.logger.info('Storage URL is', storageUrl, 'Patching to webId doc'); - - // Attach the storage URL to the webId - await ctx.call('ldp.resource.patch', { - resourceUri: webId, - triplesToAdd: [ - rdf.quad( - rdf.namedNode(webId), - rdf.namedNode('http://www.w3.org/ns/pim/space#storage'), - rdf.namedNode(storageUrl) - ) - ], - webId: 'system' - }); - this.logger.info('Storage URL patched. Now adding rights to store'); + const rootContainerUri = await this.actions.getRootContainerUri({ webId }, { parentCtx: ctx }); // Give full rights to user on his storage await ctx.call('webacl.resource.addRights', { - resourceUri: storageUrl, + resourceUri: rootContainerUri, additionalRights: { user: { uri: webId, @@ -99,8 +85,19 @@ const SolidStorageSchema = { }, webId: 'system' }); + } + }, + 'ldp.container.created': { + async handler(ctx) { + const { containerUri, webId } = ctx.params; + + const rootContainerUri = await this.actions.getRootContainerUri({ webId }, { parentCtx: ctx }); - this.logger.info('ACL rights added to ', storageUrl); + await ctx.call('ldp.container.attach', { + containerUri: rootContainerUri, + resourceUri: containerUri, + webId: 'system' + }); } } } diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index feb053669..ec8eb367d 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -23,7 +23,7 @@ const TypeIndexService = { params: { types: { type: 'array' }, uri: { type: 'string' }, - webId: { type: 'string' }, + webId: { type: 'string', optional: true }, isContainer: { type: 'boolean', default: true }, isPrivate: { type: 'boolean', default: false } }, @@ -53,7 +53,7 @@ const TypeIndexService = { rdf.namedNode(type) ) ), - webId + webId: isWebId(webId) ? webId : 'system' }); } } else { @@ -88,7 +88,7 @@ const TypeIndexService = { ) ) ], - webId + webId: isWebId(webId) ? webId : 'system' }, { parentCtx: ctx } ); @@ -106,7 +106,7 @@ const TypeIndexService = { webId: { type: 'string', optional: true }, isPrivate: { type: 'boolean', optional: true } }, - cache: true, + // cache: true, async handler(ctx) { const { uri, webId, isPrivate } = ctx.params; @@ -147,7 +147,7 @@ const TypeIndexService = { isContainer: { type: 'boolean', optional: true }, isPrivate: { type: 'boolean', optional: true } }, - cache: true, + // cache: true, async handler(ctx) { const { type, webId, isContainer, isPrivate } = ctx.params; @@ -188,29 +188,6 @@ const TypeIndexService = { } }, events: { - 'ldp.container.created': { - async handler(ctx) { - const { containerUri, registration, webId } = ctx.params; - - if (registration && registration.acceptedTypes) { - const serviceName = `${registration.typeIndex === 'private' ? 'private' : 'public'}-type-index`; - - await this.broker.waitForServices([serviceName]); - await ctx.call(`${serviceName}.waitForCreation`, { webId }); - - await this.actions.register( - { - types: arrayOf(registration.acceptedTypes), - uri: containerUri, - webId, - isContainer: true, - isPrivate: registration.typeIndex === 'private' - }, - { parentCtx: ctx } - ); - } - } - }, 'ldp.resource.created': { async handler(ctx) { const { resourceUri, registration, webId } = ctx.params; diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 3843de438..0c9f0459a 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -101,31 +101,31 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se break; } - case 'ldp.container.create': { - // On start, container permissions are passed as parameters because the registry is not up yet - let permissions; - if (ctx.params.registration) { - permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; - } else { - const registration = await ctx.call('ldp.registry.getByUri', { containerUri: ctx.params.containerUri }); - permissions = registration?.permissions || defaultContainerOptions.permissions; - } + // case 'ldp.container.create': { + // // On start, container permissions are passed as parameters because the registry is not up yet + // let permissions; + // if (ctx.params.registration) { + // permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; + // } else { + // const registration = await ctx.call('ldp.registry.getByUri', { containerUri: ctx.params.containerUri }); + // permissions = registration?.permissions || defaultContainerOptions.permissions; + // } - await ctx.call( - 'webacl.resource.addRights', - { - resourceUri: ctx.params.containerUri, - newRights: typeof permissions === 'function' ? permissions(webId, ctx) : permissions, - webId: 'system' - }, - { - meta: { - skipObjectsWatcher: true - } - } - ); - break; - } + // await ctx.call( + // 'webacl.resource.addRights', + // { + // resourceUri: ctx.params.containerUri, + // newRights: typeof permissions === 'function' ? permissions(webId, ctx) : permissions, + // webId: 'system' + // }, + // { + // meta: { + // skipObjectsWatcher: true + // } + // } + // ); + // break; + // } default: break; @@ -152,17 +152,17 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se } ); break; - case 'ldp.container.create': - await ctx.call( - 'webacl.resource.deleteAllRights', - { resourceUri: ctx.params.containerUri }, - { - meta: { - skipObjectsWatcher: true - } - } - ); - break; + // case 'ldp.container.create': + // await ctx.call( + // 'webacl.resource.deleteAllRights', + // { resourceUri: ctx.params.containerUri }, + // { + // meta: { + // skipObjectsWatcher: true + // } + // } + // ); + // break; default: break; } @@ -173,6 +173,34 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se * AFTER HOOKS */ switch (action.name) { + case 'ldp.container.create': { + const containerUri = actionReturnValue; + + // On start, container permissions are passed as parameters because the registry is not up yet + let permissions; + if (ctx.params.registration) { + permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; + } else { + const registration = await ctx.call('ldp.registry.getByUri', { containerUri }); + permissions = registration?.permissions || defaultContainerOptions.permissions; + } + + await ctx.call( + 'webacl.resource.addRights', + { + resourceUri: containerUri, + newRights: typeof permissions === 'function' ? permissions(webId, ctx) : permissions, + webId: 'system' + }, + { + meta: { + skipObjectsWatcher: true + } + } + ); + break; + } + case 'ldp.resource.delete': await ctx.call( 'webacl.resource.deleteAllRights', diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index 3b2366bc3..de0f580f0 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -12,7 +12,7 @@ export const action = { for (const { permissions, path } of Object.values(containers)) { if (permissions) { const baseUrl = this.settings.podProvider - ? await ctx.call('solid-storage.getUrl', { webId }) + ? await ctx.call('solid-storage.getBaseUrl', { webId }) : this.settings.baseUrl; const containerUri = urlJoin(baseUrl, path); diff --git a/src/middleware/tests/interop/initialize.ts b/src/middleware/tests/interop/initialize.ts index 76aa654db..1a9a0f5ba 100644 --- a/src/middleware/tests/interop/initialize.ts +++ b/src/middleware/tests/interop/initialize.ts @@ -2,8 +2,7 @@ import fse from 'fs-extra'; import path from 'path'; import urlJoin from 'url-join'; -import Redis from 'ioredis'; -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import { FULL_ACTOR_TYPES, RelayService } from '@semapps/activitypub'; import { AuthLocalService } from '@semapps/auth'; import { CoreService } from '@semapps/core'; @@ -31,11 +30,11 @@ const containers = [ ]; const initialize = async ( - port: any, - mainDataset: any, - accountsDataset: any, - queueServiceDb: any, - serverToMirror: any + port: number, + mainDataset: string, + accountsDataset: string, + queueServiceDb: number, + serverToMirror: string ) => { const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; @@ -67,8 +66,8 @@ const initialize = async ( } }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message mixins: [CoreService], settings: { baseUrl, diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index d2bb1b91d..0491392d6 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -1,5 +1,4 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'rdf-... Remove this comment to see the full error message -import { triple, namedNode } from 'rdf-data-model'; +import rdf from '@rdfjs/data-model'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; @@ -61,10 +60,10 @@ describe('An inference is added between server1 et server2', () => { await server1.call('ldp.resource.patch', { resourceUri: resourceUri1, triplesToAdd: [ - triple( - namedNode(resourceUri1), - namedNode('http://virtual-assembly.org/ontologies/pair#hasInspired'), - namedNode(resourceUri2) + rdf.quad( + rdf.namedNode(resourceUri1), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#hasInspired'), + rdf.namedNode(resourceUri2) ) ] }); @@ -104,7 +103,6 @@ describe('An inference is added between server1 et server2', () => { await server2.call('ldp.resource.delete', { resourceUri: resourceUri2 }); await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect(server1.call('ldp.resource.get', { resourceUri: resourceUri1 })).resolves.not.toHaveProperty( 'pair:hasPart' ); diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index e1f947c85..5d67cd12c 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -1,15 +1,14 @@ -import urlJoin from 'url-join'; import fetch from 'node-fetch'; import waitForExpect from 'wait-for-expect'; import { fetchServer } from '../utils.ts'; -import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); let broker: any; beforeAll(async () => { - broker = await initialize(); + broker = await initialize(false); + await broker.start(); }); afterAll(async () => { @@ -17,13 +16,15 @@ afterAll(async () => { }); describe('LDP handling through API', () => { - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); + let containerUri: string; let resourceUri: any; - let subContainerUri: any; - let subResourceUri: any; test('Create resource', async () => { + await waitForExpect(async () => { + containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + expect(containerUri).not.toBeUndefined(); + }); + const { headers } = await fetchServer(containerUri, { method: 'POST', body: { @@ -44,7 +45,7 @@ describe('LDP handling through API', () => { test('Get resource', async () => { await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { - '@type': 'pair:Project', + type: 'pair:Project', 'pair:description': 'myProject', 'pair:label': 'myLabel' } @@ -98,10 +99,10 @@ describe('LDP handling through API', () => { test('Get container', async () => { await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { - '@id': resourceUri, + id: resourceUri, 'pair:label': 'myLabel' } ] @@ -156,7 +157,7 @@ describe('LDP handling through API', () => { const { json } = await fetchServer(resourceUri); expect(json).toMatchObject({ - '@type': 'pair:Project', + type: 'pair:Project', 'pair:description': 'myProjectUpdated' }); @@ -183,7 +184,7 @@ describe('LDP handling through API', () => { await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { - '@type': 'pair:Project', + type: 'pair:Project', 'pair:description': 'myProjectPatched', 'pair:label': 'myLabel' } @@ -209,11 +210,11 @@ describe('LDP handling through API', () => { await expect(fetchServer(resourceUri)).resolves.toMatchObject({ json: { - '@type': 'pair:Project', + type: 'pair:Project', 'pair:description': 'myProjectPatched', 'pair:label': 'myLabel', 'pair:hasLocation': { - '@type': 'pair:Place', + type: 'pair:Place', 'pair:label': 'Paris' } } @@ -235,128 +236,9 @@ describe('LDP handling through API', () => { await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), - 'ldp:contains': [] - } - }); - }); - - test('Create sub-container', async () => { - const { headers } = await fetchServer(containerUri, { - method: 'POST', - body: { - '@context': { - dc: 'http://purl.org/dc/terms/', - ldp: 'http://www.w3.org/ns/ldp#' - }, - '@type': ['ldp:Container', 'ldp:BasicContainer'], - 'dc:title': 'Sub-resources', - 'dc:description': 'Used to test dynamic containers creation' - }, - headers: new fetch.Headers({ - Slug: 'sub-resources' - }) - }); - - subContainerUri = headers.get('Location'); - - // @ts-expect-error TS(2304): Cannot find name 'expect'. - expect(subContainerUri).toBe(urlJoin(CONFIG.HOME_URL, 'resources', 'sub-resources')); - - await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ - json: { - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), - 'dc:title': 'Sub-resources', - 'dc:description': 'Used to test dynamic containers creation' - } - }); - }); - - test('Create resource in sub-container', async () => { - const { headers } = await fetchServer(subContainerUri, { - method: 'POST', - body: { - '@context': { - '@vocab': 'http://virtual-assembly.org/ontologies/pair#' - }, - '@type': 'Project', - description: 'My sub-resource' - } - }); - - subResourceUri = headers.get('Location'); - - const { json } = await fetchServer(containerUri); - - // Sub-containers appear as ldp:Resource - expect(json).toMatchObject({ - 'ldp:contains': [ - { - '@id': subContainerUri, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource']) - } - ] - }); - - // The content of sub-containers is not displayed - expect(json['ldp:contains'][0]['ldp:contains']).toBeUndefined(); - - await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ - json: { - 'dc:title': 'Sub-resources', - 'dc:description': 'Used to test dynamic containers creation', - 'ldp:contains': [ - { - '@id': subResourceUri, - '@type': 'pair:Project', - 'pair:description': 'My sub-resource' - } - ] - } - }); - }); - - test('Delete sub-container', async () => { - // Give write permission on sub-container, or we won't be able to delete it as anonymous - await broker.call('webacl.resource.addRights', { - webId: 'system', - resourceUri: subContainerUri, - additionalRights: { - anon: { - write: true - } - } - }); - - await expect( - fetchServer(subContainerUri, { - method: 'DELETE' - }) - ).resolves.toMatchObject({ - status: 204 - }); - - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await waitForExpect(async () => { - await expect(fetchServer(subContainerUri)).resolves.toMatchObject({ - status: 404 - }); - }); - - await expect(fetchServer(containerUri)).resolves.toMatchObject({ - json: { - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [] } }); - - // Sub-resource should NOT be deleted with the sub-container - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(fetchServer(subResourceUri)).resolves.toMatchObject({ - json: { - '@type': 'pair:Project', - 'pair:description': 'My sub-resource' - } - }); }); }); diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 508227378..67cefe2b6 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; +import waitForExpect from 'wait-for-expect'; import fs from 'fs'; import path, { join as pathJoin } from 'path'; -import urlJoin from 'url-join'; import { getSlugFromUri } from '@semapps/ldp'; import { fileURLToPath } from 'url'; import { fetchServer } from '../utils.ts'; @@ -14,7 +14,8 @@ jest.setTimeout(20000); let broker: any; beforeAll(async () => { - broker = await initialize(); + broker = await initialize(false); + await broker.start(); }); afterAll(async () => { @@ -22,40 +23,42 @@ afterAll(async () => { }); describe('Binary handling of LDP server', () => { - let fileUri: any; - let filePath: any; - let fileName: any; + let fileUri: string | null; + let filePath: string | null; + let fileName: string | null; + let containerUri: string; test('Post image to container', async () => { + await waitForExpect(async () => { + containerUri = await broker.call('ldp.registry.getUri', { type: 'semapps:File', isContainer: true }); + expect(containerUri).not.toBeUndefined(); + }); + const readStream = fs.createReadStream(pathJoin(__dirname, 'av-icon.png')); - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - const { headers } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'files'), { + const { headers } = await fetchServer(containerUri, { method: 'POST', body: readStream, - headers: new fetch.Headers({ - 'Content-Type': 'image/png' - }) + headers: new fetch.Headers({ 'Content-Type': 'image/png' }) }); fileUri = headers.get('Location'); expect(fileUri).not.toBeNull(); - filePath = fileUri.replace(CONFIG.HOME_URL, ''); + filePath = fileUri.replace(CONFIG.HOME_URL!, ''); fileName = getSlugFromUri(fileUri); expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); }); test('Get container', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ + await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { - '@id': fileUri, - '@type': 'semapps:File', + id: fileUri, + type: 'semapps:File', 'semapps:fileName': fileName, 'semapps:localPath': `uploads/${filePath}`, 'semapps:mimeType': 'image/png' @@ -67,9 +70,7 @@ describe('Binary handling of LDP server', () => { test('Get image as binary (via API)', async () => { const { headers, body } = await fetchServer(fileUri, { - headers: new fetch.Headers({ - Accept: '*/*' - }) + headers: new fetch.Headers({ Accept: '*/*' }) }); expect(headers.get('Content-Length')).toBe('3181'); @@ -81,8 +82,8 @@ describe('Binary handling of LDP server', () => { test('Get image as resource (via Moleculer action)', async () => { await expect(broker.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ - '@id': fileUri, - '@type': 'semapps:File', + id: fileUri, + type: 'semapps:File', 'semapps:fileName': fileName, 'semapps:localPath': `uploads/${filePath}`, 'semapps:mimeType': 'image/png' @@ -100,15 +101,11 @@ describe('Binary handling of LDP server', () => { expect(fs.existsSync(pathJoin(__dirname, '../uploads/files/av-icon.png'))).toBeFalsy(); - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(fetchServer(fileUri)).resolves.toMatchObject({ - status: 404 - }); + await expect(fetchServer(fileUri)).resolves.toMatchObject({ status: 404 }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(fetchServer(urlJoin(CONFIG.HOME_URL, 'files'))).resolves.toMatchObject({ + await expect(fetchServer(containerUri)).resolves.toMatchObject({ json: { - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [] } }); diff --git a/src/middleware/tests/ldp/container-path.test.ts b/src/middleware/tests/ldp/container-path.test.ts deleted file mode 100644 index f4dbe6d6b..000000000 --- a/src/middleware/tests/ldp/container-path.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import initialize from './initialize.ts'; - -jest.setTimeout(10000); -let broker: any; - -beforeAll(async () => { - broker = await initialize(); -}); - -afterAll(async () => { - if (broker) await broker.stop(); -}); - -const successCases = { - 'ldp:Container': '/ldp/container', - 'http://www.w3.org/ns/ldp#Container': '/ldp/container', - 'pair:ProjectType': '/pair/project-type', - 'http://virtual-assembly.org/ontologies/pair#ProjectType': '/pair/project-type' -}; - -const errorCases = { - randomString: 'The resourceType must an URI or prefixed type. Provided: randomString', - 'test:': 'The resourceType must an URI or prefixed type. Provided: test:', - ':test': 'The resourceType must an URI or prefixed type. Provided: :test', - 'unknown:Event': 'No registered ontology found for resourceType unknown:Event', - 'http://www.w3.org/ns/unknown#Event': - 'No registered ontology found for resourceType http://www.w3.org/ns/unknown#Event' -}; - -// @ts-expect-error TS(2582): Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message -describe('Get container path', () => { - test.each(Object.keys(successCases))('Success with resourceType %s', async (resourceType: any) => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(broker.call('ldp.container.getPath', { resourceType })).resolves.toBe(successCases[resourceType]); - }); - test.each(Object.keys(errorCases))('Error With resourceType %s', async (resourceType: any) => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(broker.call('ldp.container.getPath', { resourceType })).rejects.toThrow(errorCases[resourceType]); - }); -}); diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 0d5c0b48f..aabfccae2 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -6,7 +6,8 @@ jest.setTimeout(20000); let broker: any; beforeAll(async () => { - broker = await initialize(); + broker = await initialize(false); + await broker.start(); }); afterAll(async () => { @@ -14,82 +15,32 @@ afterAll(async () => { }); describe('LDP container tests', () => { - let resourceUri: any; + let resourceUri: string; + let containerUri: string; test('Ensure container created in LdpService settings exists', async () => { - await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}resources` })).resolves.toBe( - true - ); - }); - - test('Create a new container', async () => { - await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}objects` })).resolves.toBe( - false - ); - - await broker.call('ldp.container.create', { containerUri: `${CONFIG.HOME_URL}objects`, webId: 'system' }); - - await expect(broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}objects` })).resolves.toBe(true); - - await expect( - broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}objects` - }) - ).resolves.toMatchObject({ - '@id': `${CONFIG.HOME_URL}objects`, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']) - }); - }); - - test('Create a sub-container and attach it to the root container', async () => { - await broker.call('ldp.container.createAndAttach', { - containerUri: `${CONFIG.HOME_URL}parent/child`, - webId: 'system' + await waitForExpect(async () => { + containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + expect(containerUri).not.toBeUndefined(); }); - await expect( - broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}parent` }) - ).resolves.toBeTruthy(); - - // Intermediate containers have no permissions - await expect(broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}parent` })).rejects.toThrow(); + await expect(broker.call('ldp.container.exist', { containerUri })).resolves.toBe(true); + }); - await expect( - broker.call('ldp.container.exist', { containerUri: `${CONFIG.HOME_URL}parent/child` }) - ).resolves.toBeTruthy(); + test('Create a new container', async () => { + const newContainerUri = await broker.call('ldp.container.create', { path: '/objects', webId: 'system' }); - await expect( - broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}`, - webId: 'system' - }) - ).resolves.toMatchObject({ - 'ldp:contains': expect.arrayContaining([ - { - '@id': `${CONFIG.HOME_URL}parent`, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource']) - } - ]) - }); + await expect(broker.call('ldp.container.exist', { containerUri: newContainerUri })).resolves.toBe(true); - await expect( - broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}parent`, - webId: 'system' - }) - ).resolves.toMatchObject({ - 'ldp:contains': expect.arrayContaining([ - { - '@id': `${CONFIG.HOME_URL}parent/child`, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer', 'ldp:Resource']) - } - ]) + await expect(broker.call('ldp.container.get', { containerUri: newContainerUri })).resolves.toMatchObject({ + id: newContainerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']) }); }); test('Post a resource in a container', async () => { resourceUri = await broker.call('ldp.container.post', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri: containerUri, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -101,15 +52,15 @@ describe('LDP container tests', () => { await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources` + containerUri: containerUri }) ).resolves.toMatchObject({ - '@id': `${CONFIG.HOME_URL}resources`, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { - '@id': resourceUri, - '@type': 'pair:Project', + id: resourceUri, + type: 'pair:Project', 'pair:label': 'My project' } ] @@ -143,7 +94,7 @@ describe('LDP container tests', () => { test('Get container with jsonContext param', async () => { await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri: containerUri, jsonContext: { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' } @@ -152,7 +103,7 @@ describe('LDP container tests', () => { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, - '@id': `${CONFIG.HOME_URL}resources`, + '@id': containerUri, '@type': expect.arrayContaining([ 'http://www.w3.org/ns/ldp#Container', 'http://www.w3.org/ns/ldp#BasicContainer' @@ -169,7 +120,7 @@ describe('LDP container tests', () => { test('Get container with filters param', async () => { await broker.call('ldp.container.post', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri: containerUri, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -182,11 +133,11 @@ describe('LDP container tests', () => { // Get without filters param await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources` + containerUri: containerUri }) ).resolves.toMatchObject({ - '@id': `${CONFIG.HOME_URL}resources`, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': expect.arrayContaining([ expect.objectContaining({ 'pair:label': 'My project' @@ -200,14 +151,14 @@ describe('LDP container tests', () => { // Get with filters param await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri: containerUri, filters: { 'pair:label': 'My project 2' } }) ).resolves.toMatchObject({ - '@id': `${CONFIG.HOME_URL}resources`, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { 'pair:label': 'My project 2' @@ -218,7 +169,7 @@ describe('LDP container tests', () => { test('Get container without resources', async () => { const container = await broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri: containerUri, doNotIncludeResources: true }); @@ -227,18 +178,18 @@ describe('LDP container tests', () => { test('Detach a resource from a container', async () => { await broker.call('ldp.container.detach', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri: containerUri, resourceUri }); // Project 1 should have disappeared from the container await expect( broker.call('ldp.container.get', { - containerUri: `${CONFIG.HOME_URL}resources` + containerUri: containerUri }) ).resolves.toMatchObject({ - '@id': `${CONFIG.HOME_URL}resources`, - '@type': expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { 'pair:label': 'My project 2' @@ -249,15 +200,12 @@ describe('LDP container tests', () => { test('Clear container', async () => { await broker.call('ldp.container.clear', { - containerUri: `${CONFIG.HOME_URL}resources` + containerUri: containerUri }); // Container should now be empty - // @ts-expect-error TS(2304): Cannot find name 'expect'. await waitForExpect(async () => { - const container = await broker.call('ldp.container.get', { containerUri: `${CONFIG.HOME_URL}resources` }); - - // @ts-expect-error TS(2304): Cannot find name 'expect'. + const container = await broker.call('ldp.container.get', { containerUri: containerUri }); expect(container['ldp:contains']).toHaveLength(0); }); }); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 08c1e34ba..a2ec144e6 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -1,15 +1,15 @@ -import urlJoin from 'url-join'; import fetch from 'node-fetch'; +import waitForExpect from 'wait-for-expect'; import { MIME_TYPES } from '@semapps/mime-types'; import { fetchServer } from '../utils.ts'; -import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); let broker: any; beforeAll(async () => { - broker = await initialize(); + broker = await initialize(false); + await broker.start(); }); afterAll(async () => { @@ -17,14 +17,18 @@ afterAll(async () => { }); describe('Content negotiation', () => { - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - const containerUri = urlJoin(CONFIG.HOME_URL, 'resources'); - let projectUri: any; - let project2Uri: any; - let project3Uri: any; - let project4Uri: any; + let containerUri: string; + let projectUri: string | null; + let project2Uri: string | null; + let project3Uri: string | null; + let project4Uri: string | null; test('Post resource in JSON-LD', async () => { + await waitForExpect(async () => { + containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + expect(containerUri).not.toBeUndefined(); + }); + const { headers } = await fetchServer(containerUri, { method: 'POST', body: { @@ -49,9 +53,9 @@ describe('Content negotiation', () => { }) }); - expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); - expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); - expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); + expect(body).toMatch(new RegExp(`pair:label "myLabel"`)); + expect(body).toMatch(new RegExp(`a pair:Project`)); + expect(body).toMatch(new RegExp(`pair:description "myProject"`)); }); test('Get resource in N-Triples format', async () => { @@ -79,12 +83,12 @@ describe('Content negotiation', () => { }) }); - expect(body).toMatch(new RegExp(`<${containerUri}> a ldp:Container, ldp:BasicContainer`)); + expect(body).toMatch(new RegExp(`a ldp:Container, ldp:BasicContainer`)); expect(body).toMatch(new RegExp(`ldp:contains <${projectUri}>`)); - expect(body).toMatch(new RegExp(`<${projectUri}> a pair:Project`)); - expect(body).toMatch(new RegExp(`pair:description.*"myProject"`)); - expect(body).toMatch(new RegExp(`pair:label.*"myLabel"`)); + expect(body).toMatch(new RegExp(`a pair:Project`)); + expect(body).toMatch(new RegExp(`pair:description "myProject"`)); + expect(body).toMatch(new RegExp(`pair:label "myLabel"`)); }); test('Get container in N-Triples format', async () => { @@ -133,9 +137,8 @@ describe('Content negotiation', () => { resourceUri: project2Uri }); expect(project2).toMatchObject({ - '@context': 'http://localhost:3000/.well-known/context.jsonld', - '@id': project2Uri, - '@type': 'pair:Project', + id: project2Uri, + type: 'pair:Project', 'pair:label': 'myProject 2' }); }); @@ -160,9 +163,8 @@ describe('Content negotiation', () => { resourceUri: project3Uri }); expect(project2).toMatchObject({ - '@context': 'http://localhost:3000/.well-known/context.jsonld', - '@id': project3Uri, - '@type': 'pair:Project', + id: project3Uri, + type: 'pair:Project', 'pair:label': 'myProject 3' }); }); @@ -187,9 +189,8 @@ describe('Content negotiation', () => { resourceUri: project2Uri }); expect(project2).toMatchObject({ - '@context': 'http://localhost:3000/.well-known/context.jsonld', - '@id': project2Uri, - '@type': 'pair:Project', + id: project2Uri, + type: 'pair:Project', 'pair:label': 'myProject 2 - updated', 'pair:description': 'A description' }); @@ -214,9 +215,8 @@ describe('Content negotiation', () => { resourceUri: project3Uri }); expect(project3).toMatchObject({ - '@context': 'http://localhost:3000/.well-known/context.jsonld', - '@id': project3Uri, - '@type': 'pair:Project', + id: project3Uri, + type: 'pair:Project', 'pair:label': 'myProject 3 - updated', 'pair:description': 'A description' }); @@ -249,12 +249,11 @@ describe('Content negotiation', () => { // In JSON-LD, blank nodes are automatically embedded expect(project4).toMatchObject({ - '@context': 'http://localhost:3000/.well-known/context.jsonld', - '@id': project4Uri, - '@type': 'pair:Project', + id: project4Uri, + type: 'pair:Project', 'pair:hasPart': { - '@id': `${project4Uri}#task1`, - '@type': 'pair:Task', + id: `${project4Uri}#task1`, + type: 'pair:Task', 'pair:label': 'myTask 1' }, 'pair:label': 'myProject 4' @@ -268,10 +267,9 @@ describe('Content negotiation', () => { }) }); - expect(body).toMatch(new RegExp(`<${project4Uri}> a pair:Project`)); + expect(body).toMatch(new RegExp(`a pair:Project`)); expect(body).toMatch(new RegExp(`pair:label "myProject 4"`)); - expect(body).toMatch(new RegExp(`<${project4Uri}#task1> a pair:Task`)); - // @ts-expect-error TS(2304): Cannot find name 'expect'. + expect(body).toMatch(new RegExp(`a pair:Task`)); expect(body).toMatch(new RegExp(`pair:label "myTask 1"`)); }); }); diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 7b5f6034d..f27e0d5c2 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -1,5 +1,7 @@ import urlJoin from 'url-join'; -import { ControlledContainerMixin } from '@semapps/ldp'; +import { Context } from 'moleculer'; +import { ControlledContainerMixin, delay } from '@semapps/ldp'; +import waitForExpect from 'wait-for-expect'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; import { fetchServer } from '../utils.ts'; @@ -7,7 +9,7 @@ import { fetchServer } from '../utils.ts'; jest.setTimeout(50000); let broker: any; -describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { +describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { beforeAll(async () => { broker = await initialize(allowSlugs); @@ -17,6 +19,18 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al settings: { path: '/videos', // Will be ignored when slugs are not allowed acceptedTypes: ['as:Video'] + }, + hooks: { + after: { + async list(ctx: Context, res: any) { + res['dc:creator'] = 'The video mixin'; + return res; + }, + async get(ctx: Context, res: any) { + res['dc:creator'] = 'The video mixin'; + return res; + } + } } }); @@ -28,30 +42,29 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al }); let containerUri: string; - let numContainers: number; - let numRegisteredContainers: number; test('The container is registered and created', async () => { - await broker.call('videos.waitForContainerCreation'); - - const registrations = await broker.call('ldp.registry.list', { type: 'as:Video' }); - expect(registrations.videos).not.toBeUndefined(); - numRegisteredContainers = registrations.length; + // Wait for all containers and resources to be registered + await waitForExpect(async () => { + const registrations = await broker.call('ldp.registry.list'); + expect(Object.keys(registrations).length).toBe(10); // 8 containers + 2 resources + expect(registrations.videos).not.toBeUndefined(); + }); const containersUris = await broker.call('ldp.container.getAll'); - // With slugs, the WebIdService generates a /foaf and a /foaf/person containers - expect(containersUris.length).toBe(allowSlugs ? 7 : 6); - numContainers = containersUris.length; + expect(containersUris.length).toBe(8); if (allowSlugs) { expect(containersUris).toEqual( expect.arrayContaining([ - urlJoin(CONFIG.HOME_URL!, '/foaf'), urlJoin(CONFIG.HOME_URL!, '/foaf/person'), urlJoin(CONFIG.HOME_URL!, '/key'), urlJoin(CONFIG.HOME_URL!, '/public-key'), urlJoin(CONFIG.HOME_URL!, '/videos'), - urlJoin(CONFIG.HOME_URL!, '/') + urlJoin(CONFIG.HOME_URL!, '/resources'), + urlJoin(CONFIG.HOME_URL!, '/places'), + urlJoin(CONFIG.HOME_URL!, '/themes'), + urlJoin(CONFIG.HOME_URL!, '/files') ]) ); } @@ -66,24 +79,41 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al await broker.stop(); await broker.start(); + // Give some time for the LdpRegistry to be called + await delay(3000); + // No new container has been registered - const registrations = await broker.call('ldp.registry.list', { type: 'as:Video' }); - expect(registrations.length).toBe(numRegisteredContainers); + await waitForExpect(async () => { + const registrations = await broker.call('ldp.registry.list'); + expect(Object.keys(registrations).length).toBe(10); + }); // No new container has been created - const containersUris = await broker.call('ldp.container.getAll'); - expect(containersUris.length).toBe(numContainers); + await waitForExpect(async () => { + const containersUris = await broker.call('ldp.container.getAll'); + expect(containersUris.length).toBe(8); + }); // The container URI has not changed await expect(broker.call('ldp.registry.getUri', { type: 'as:Video' })).resolves.toBe(containerUri); }); + test('Get registered container', async () => { + await expect(broker.call('videos.list')).resolves.toMatchObject({ + id: containerUri, + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'dc:creator': 'The video mixin', // Added by the ControlledContainerMixin + 'ldp:contains': [] + }); + }); + test('Get registered container through API', async () => { await expect(fetchServer(containerUri)).resolves.toMatchObject({ status: 200, json: { id: containerUri, type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'dc:creator': 'The video mixin', // Added by the ControlledContainerMixin 'ldp:contains': [] } }); diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index b917fd698..66b76aa91 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -1,9 +1,10 @@ import { ControlledResourceMixin } from '@semapps/ldp'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; import { fetchServer } from '../utils.ts'; jest.setTimeout(50000); -let broker: any; +let broker: ServiceBroker; describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (allowSlugs: boolean) => { beforeAll(async () => { diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index 521f709c4..1d5743cd7 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -1,14 +1,46 @@ import urlJoin from 'url-join'; import { parse as parseLinkHeader } from 'http-link-header'; +import { ServiceBroker } from 'moleculer'; +import waitForExpect from 'wait-for-expect'; +import { ControlledContainerMixin } from '@semapps/ldp'; import { fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; jest.setTimeout(20000); -let broker: any; +let broker: ServiceBroker; beforeAll(async () => { - broker = await initialize(); + broker = await initialize(false); + + broker.createService({ + name: 'event', + mixins: [ControlledContainerMixin], + settings: { + path: '/events', + acceptedTypes: ['pair:Event'], + permissions: { + anon: { + read: true, + write: true + } + } + }, + actions: { + getHeaderLinks: { + handler() { + return [ + { + uri: 'http://foo.bar', + rel: 'http://foo.baz' + } + ]; + } + } + } + }); + + await broker.start(); }); afterAll(async () => { @@ -16,9 +48,16 @@ afterAll(async () => { }); describe('Headers handling of LDP server', () => { + let placesContainerUri: string; + let eventsContainerUri: string; + test('Get headers', async () => { - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - const { headers: postHeaders } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'places'), { + await waitForExpect(async () => { + placesContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Place', isContainer: true }); + expect(placesContainerUri).not.toBeUndefined(); + }); + + const { headers: postHeaders } = await fetchServer(placesContainerUri, { method: 'POST', body: { '@type': 'pair:Place', @@ -30,25 +69,26 @@ describe('Headers handling of LDP server', () => { // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const resourcePath = new URL(resourceUri).pathname; - const { headers } = await fetchServer(resourceUri, { - method: 'HEAD' - }); + const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const parsedLinks = parseLinkHeader(headers.get('link')); expect(parsedLinks.refs).toMatchObject([ { - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - uri: urlJoin(CONFIG.HOME_URL, '_acl', resourcePath), + uri: urlJoin(CONFIG.HOME_URL!, '_acl', resourcePath), rel: 'acl' } ]); }); test('Get container-specific headers', async () => { - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - const { headers: postHeaders } = await fetchServer(urlJoin(CONFIG.HOME_URL, 'pair', 'event'), { + await waitForExpect(async () => { + eventsContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Event', isContainer: true }); + expect(eventsContainerUri).not.toBeUndefined(); + }); + + const { headers: postHeaders } = await fetchServer(eventsContainerUri, { method: 'POST', body: { '@type': 'pair:Event', @@ -60,17 +100,13 @@ describe('Headers handling of LDP server', () => { // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const resourcePath = new URL(resourceUri).pathname; - const { headers } = await fetchServer(resourceUri, { - method: 'HEAD' - }); + const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message const parsedLinks = parseLinkHeader(headers.get('link')); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(parsedLinks.refs).toMatchObject([ - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - { uri: urlJoin(CONFIG.HOME_URL, '_acl', resourcePath), rel: 'acl' }, + { uri: urlJoin(CONFIG.HOME_URL!, '_acl', resourcePath), rel: 'acl' }, { uri: 'http://foo.bar', rel: 'http://foo.baz' } ]); }); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index cd0d12017..2521fbc88 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -5,7 +5,6 @@ import { CoreService } from '@semapps/core'; import { as, pair, petr, solid, vcard } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; -import { ControlledContainerMixin } from '@semapps/ldp'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; import { dropDataset } from '../utils.ts'; @@ -23,31 +22,27 @@ const permissions = { const containers = [ { path: '/resources', - permissions - }, - { - path: '/resources2', - permissions - }, - { - path: '/organizations', + acceptedTypes: ['pair:Project'], permissions }, { path: '/places', + acceptedTypes: ['pair:Place'], permissions }, { path: '/themes', + acceptedTypes: ['pair:Theme'], permissions }, { path: '/files', + acceptedTypes: ['semapps:File'], permissions } ]; -const initialize = async (allowSlugs = true) => { +const initialize = async (allowSlugs = true): Promise => { await dropDataset(CONFIG.MAIN_DATASET); const uploadsPath = pathJoin(__dirname, '../uploads'); @@ -79,7 +74,7 @@ const initialize = async (allowSlugs = true) => { mainDataset: CONFIG.MAIN_DATASET, secure: false // TODO Remove when we move to Fuseki 5 }, - containers: [], + containers, ontologies: [as, pair, petr, solid, vcard], activitypub: false, mirror: false, @@ -102,27 +97,6 @@ const initialize = async (allowSlugs = true) => { } }); - broker.createService({ - name: 'event' as const, - mixins: [ControlledContainerMixin], - settings: { - acceptedTypes: ['pair:Event'], - permissions - }, - actions: { - getHeaderLinks: { - handler() { - return [ - { - uri: 'http://foo.bar', - rel: 'http://foo.baz' - } - ]; - } - } - } - }); - return broker; }; diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index b22cf5c42..ef64d7fb1 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,13 +1,13 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'rdf-... Remove this comment to see the full error message -import { quad, namedNode, blankNode, literal } from 'rdf-data-model'; -import * as CONFIG from '../config.ts'; +import rdf from '@rdfjs/data-model'; +import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; jest.setTimeout(50000); let broker: any; beforeAll(async () => { - broker = await initialize(); + broker = await initialize(false); + await broker.start(); }); afterAll(async () => { @@ -17,9 +17,17 @@ afterAll(async () => { describe('Resource CRUD operations', () => { let project1: any; let project2: any; + let containerUri: string; + let project1Uri: string; test('Post resource in container', async () => { + await waitForExpect(async () => { + containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + expect(containerUri).not.toBeUndefined(); + }); + project1Uri = await broker.call('ldp.container.post', { + containerUri, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -39,11 +47,9 @@ describe('Resource CRUD operations', () => { label: 'Paris', description: 'The place to be' } - }, - containerUri: `${CONFIG.HOME_URL}resources` + } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(project1Uri).toBeDefined(); }); @@ -51,9 +57,8 @@ describe('Resource CRUD operations', () => { project1 = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(project1).toMatchObject({ - '@context': 'http://localhost:3000/.well-known/context.jsonld', - '@id': project1['@id'], - '@type': 'pair:Project', + id: project1Uri, + type: 'pair:Project', 'pair:affiliates': expect.arrayContaining([ 'http://localhost:3000/users/guillaume', 'http://localhost:3000/users/sebastien' @@ -70,7 +75,7 @@ describe('Resource CRUD operations', () => { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, - '@id': project1['@id'], + '@id': project1Uri, description: 'myProjectUpdatedAgain', affiliates: { '@id': 'http://localhost:3000/users/pierre' @@ -81,7 +86,7 @@ describe('Resource CRUD operations', () => { } }); - const updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + const updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -100,7 +105,7 @@ describe('Resource CRUD operations', () => { petr: 'https://data.petr-msb.data-players.com/ontology#', '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, - '@id': project1['@id'], + '@id': project1Uri, description: 'myProjectUpdatedAgain', affiliates: { '@id': 'http://localhost:3000/users/pierre' @@ -116,7 +121,7 @@ describe('Resource CRUD operations', () => { }; await broker.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -141,7 +146,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -165,7 +170,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -197,7 +202,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -222,7 +227,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -244,7 +249,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject['pair:hasLocation']).toBeUndefined(); @@ -255,7 +260,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -273,7 +278,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -302,7 +307,7 @@ describe('Resource CRUD operations', () => { const resourceUri = await broker.call('ldp.container.post', { resource: resourceToPost, - containerUri: `${CONFIG.HOME_URL}resources2` + containerUri }); project2 = await broker.call('ldp.resource.get', { resourceUri }); @@ -334,7 +339,7 @@ describe('Resource CRUD operations', () => { const resourceUri3 = await broker.call('ldp.container.post', { resource: resourceToPost, - containerUri: `${CONFIG.HOME_URL}resources2` + containerUri }); const project3 = await broker.call('ldp.resource.get', { resourceUri: resourceUri3 }); @@ -374,7 +379,7 @@ describe('Resource CRUD operations', () => { const resourceUri4 = await broker.call('ldp.container.post', { resource: resourceToPost, - containerUri: `${CONFIG.HOME_URL}resources2` + containerUri }); const project4 = await broker.call('ldp.resource.get', { resourceUri: resourceUri4 }); @@ -402,7 +407,7 @@ describe('Resource CRUD operations', () => { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, - '@id': project2['@id'], + '@id': project2.id, description: 'myProjectUpdatedAgain', hasLocation: [ { @@ -422,7 +427,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); + let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2.id }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -459,7 +464,7 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2['@id'] }); + updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2.id }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -474,8 +479,10 @@ describe('Resource CRUD operations', () => { // Ensure dereferenced resources with IDs are not deleted by PUT test('PUT resource with ID', async () => { + const themeContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Theme', isContainer: true }); + const themeUri = await broker.call('ldp.container.post', { - containerUri: 'http://localhost:3000/themes', + containerUri: themeContainerUri, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -493,7 +500,7 @@ describe('Resource CRUD operations', () => { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, '@type': 'Project', - '@id': project1['@id'], + '@id': project1Uri, label: 'myTitle', hasTopic: { '@id': themeUri @@ -508,7 +515,7 @@ describe('Resource CRUD operations', () => { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, '@type': 'Project', - '@id': project1['@id'], + '@id': project1Uri, label: 'myTitle' } }); @@ -517,15 +524,15 @@ describe('Resource CRUD operations', () => { const theme = await broker.call('ldp.resource.get', { resourceUri: themeUri }); expect(theme).toMatchObject({ - '@id': themeUri, - '@type': 'pair:Theme', + id: themeUri, + type: 'pair:Theme', 'pair:label': 'Permaculture' }); }); test('PATCH resource', async () => { const projectUri = await broker.call('ldp.container.post', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -539,18 +546,22 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ - quad(namedNode(projectUri), namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('SemApps')), - quad( - namedNode(projectUri), - namedNode('http://virtual-assembly.org/ontologies/pair#comment'), - literal('An open source toolbox to help you easily build semantic web applications') + rdf.quad( + rdf.namedNode(projectUri), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#label'), + rdf.literal('SemApps') + ), + rdf.quad( + rdf.namedNode(projectUri), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#comment'), + rdf.literal('An open source toolbox to help you easily build semantic web applications') ) ], triplesToRemove: [ - quad( - namedNode(projectUri), - namedNode('http://virtual-assembly.org/ontologies/pair#label'), - literal('SemanticApps') + rdf.quad( + rdf.namedNode(projectUri), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#label'), + rdf.literal('SemanticApps') ) ] }); @@ -558,7 +569,7 @@ describe('Resource CRUD operations', () => { const project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ - '@id': projectUri, + id: projectUri, 'pair:label': 'SemApps', 'pair:comment': 'An open source toolbox to help you easily build semantic web applications' }); @@ -566,7 +577,7 @@ describe('Resource CRUD operations', () => { test('PATCH resource with blank nodes', async () => { const projectUri = await broker.call('ldp.container.post', { - containerUri: `${CONFIG.HOME_URL}resources`, + containerUri, resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -580,27 +591,31 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ - quad( - namedNode(projectUri), - namedNode('http://virtual-assembly.org/ontologies/pair#hasLocation'), - blankNode('b_0') + rdf.quad( + rdf.namedNode(projectUri), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#hasLocation'), + rdf.blankNode('b_0') ), - quad( - blankNode('b_0'), - namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), - namedNode('http://virtual-assembly.org/ontologies/pair#Place') + rdf.quad( + rdf.blankNode('b_0'), + rdf.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#Place') ), - quad(blankNode('b_0'), namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('Paris')) + rdf.quad( + rdf.blankNode('b_0'), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#label'), + rdf.literal('Paris') + ) ] }); let project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ - '@id': projectUri, + id: projectUri, 'pair:label': 'ActivityPods', 'pair:hasLocation': { - '@type': 'pair:Place', + type: 'pair:Place', 'pair:label': 'Paris' } }); @@ -608,32 +623,36 @@ describe('Resource CRUD operations', () => { await broker.call('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ - quad( - namedNode(projectUri), - namedNode('http://virtual-assembly.org/ontologies/pair#hasLocation'), - blankNode('b_0') + rdf.quad( + rdf.namedNode(projectUri), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#hasLocation'), + rdf.blankNode('b_0') ), - quad( - blankNode('b_0'), - namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), - namedNode('http://virtual-assembly.org/ontologies/pair#Place') + rdf.quad( + rdf.blankNode('b_0'), + rdf.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#Place') ), - quad(blankNode('b_0'), namedNode('http://virtual-assembly.org/ontologies/pair#label'), literal('Compiègne')) + rdf.quad( + rdf.blankNode('b_0'), + rdf.namedNode('http://virtual-assembly.org/ontologies/pair#label'), + rdf.literal('Compiègne') + ) ] }); project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ - '@id': projectUri, + id: projectUri, 'pair:label': 'ActivityPods', 'pair:hasLocation': expect.arrayContaining([ { - '@type': 'pair:Place', + type: 'pair:Place', 'pair:label': 'Paris' }, { - '@type': 'pair:Place', + type: 'pair:Place', 'pair:label': 'Compiègne' } ]) @@ -642,10 +661,9 @@ describe('Resource CRUD operations', () => { test('Delete resource', async () => { await broker.call('ldp.resource.delete', { - resourceUri: project1['@id'] + resourceUri: project1Uri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(broker.call('ldp.resource.get', { resourceUri: project1['@id'] })).rejects.toThrow(`not found`); + await expect(broker.call('ldp.resource.get', { resourceUri: project1Uri })).rejects.toThrow(`not found`); }); }); diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 29772ed0b..6998b81a4 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -36,10 +36,9 @@ "moleculer": "^0.14.35", "moleculer-web": "^0.10.7", "node-fetch": "^2.6.6", - "rdf-data-model": "^1.0.0", "supertest": "^4.0.2", "url-join": "^4.0.1", - "wait-for-expect": "^3.0.2" + "wait-for-expect": "^4.0.0" }, "devDependencies": { "@babel/core": "^7.28.0", diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts index 1ff98b542..4c7e3e14b 100644 --- a/src/middleware/tests/webId/webId.test.ts +++ b/src/middleware/tests/webId/webId.test.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import { CoreService } from '@semapps/core'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; @@ -64,7 +64,6 @@ describe('WebId user creation', () => { }; const webId = await broker.call('webid.createWebId', profileData); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(webId).toBe(`${CONFIG.HOME_URL}users/${profileData.nick}`); }, 20000); }); diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 3c9ff90e8..c0e0ca2c5 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -11525,10 +11525,10 @@ void-elements@^3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== -wait-for-expect@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" - integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== +wait-for-expect@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-4.0.0.tgz#c8204e1ee6a678381cd7651abe18309a6efa0a19" + integrity sha512-mcH2HYUUHhdFGHVJkgwkBxRihZO4VSuPyh6xhYHz7LEnYkcaLbTAEEsTpYiFw4UY45XdTZYYIaquuMucw9wWMw== walk-up-path@^3.0.1: version "3.0.1" From addb338a7bf6f1882e2df6a9a6c8f1a9a36fadf6 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 29 Oct 2025 17:23:46 +0100 Subject: [PATCH 096/165] Begin refactoring to stop using podProvider setting --- .../services/activitypub/subservices/actor.ts | 3 +- .../services/activitypub/subservices/api.ts | 7 +- src/middleware/packages/core/service.ts | 40 +++--- .../packages/crypto/signature/proxy.ts | 3 +- .../ldp/mixins/controlled-container.ts | 8 +- .../ldp/mixins/controlled-resource.ts | 67 ++++----- .../ldp/services/container/actions/create.ts | 4 +- .../services/registry/actions/getByTypes.ts | 4 +- .../ldp/services/registry/actions/getByUri.ts | 4 +- .../ldp/services/registry/actions/getUri.ts | 3 +- .../ldp/services/registry/actions/list.ts | 15 +- .../ldp/services/registry/actions/register.ts | 30 +--- .../packages/ldp/services/registry/index.ts | 38 +----- .../ldp/services/resource/actions/create.ts | 2 +- src/middleware/packages/ldp/types.ts | 4 +- .../packages/solid/services/storage.ts | 129 +++++++++++------- .../services/type-index/private-type-index.ts | 12 +- .../services/type-index/public-type-index.ts | 26 ++-- .../solid/services/type-index/type-index.ts | 37 +---- .../packages/sparql-endpoint/service.ts | 14 +- .../sync/middlewares/objects-watcher.ts | 12 +- src/middleware/packages/void/service.ts | 4 +- .../actions/refreshContainersRights.ts | 4 +- src/middleware/tests/ldp/api.test.ts | 1 + src/middleware/tests/ldp/binary.test.ts | 3 +- src/middleware/tests/ldp/container.test.ts | 2 + .../tests/ldp/content-negotiation.test.ts | 1 + .../tests/ldp/controlled-container.test.ts | 15 +- src/middleware/tests/ldp/headers.test.ts | 2 + src/middleware/tests/ldp/initialize.ts | 7 +- src/middleware/tests/ldp/resource.test.ts | 107 ++++++++------- 31 files changed, 296 insertions(+), 312 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 017b76613..622cbb37d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -124,7 +124,7 @@ const ActorService = { patterns: [ { type: 'graph', - name: namedNode(actorUri), + name: rdf.namedNode(actorUri), triples: [ rdf.quad( rdf.namedNode(actorUri), @@ -217,7 +217,6 @@ const ActorService = { 'auth.registered': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index f24c877fd..05a78619d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -33,11 +33,12 @@ const ApiService = { await this.broker.call('api.addRoute', { route: this.getBoxesRoute(path.join(basePath, `/:actorSlug`)) }); } else { // If some actor containers are already registered, add the corresponding API routes - const registrations: { [name: string]: Registration } = await this.broker.call('ldp.registry.list'); - for (const registration of Object.values(registrations)) { + const registrations: Registration[] = await this.broker.call('ldp.registry.list'); + for (const registration of registrations) { if (arrayOf(registration.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { + // TODO Don't use full path anymore await this.broker.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, `${container.fullPath}/:actorSlug`)) + route: this.getBoxesRoute(path.join(basePath, `${registration.fullPath}/:actorSlug`)) }); } } diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 3911d3960..7ed774387 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -1,14 +1,13 @@ import path from 'path'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import ApiGatewayService, { Errors as E } from 'moleculer-web'; -import { ActivityPubService, FULL_ACTOR_TYPES } from '@semapps/activitypub'; +import { ActivityPubService } from '@semapps/activitypub'; import { JsonLdService } from '@semapps/jsonld'; import { LdpService, DocumentTaggerMixin } from '@semapps/ldp'; import { OntologiesService } from '@semapps/ontologies'; import { SparqlEndpointService } from '@semapps/sparql-endpoint'; import { TripleStoreService } from '@semapps/triplestore'; -import { TypeIndexService } from '@semapps/solid'; -import { VoidService } from '@semapps/void'; +import { TypeIndexService, StorageService } from '@semapps/solid'; import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; import { KeysService, SignatureService } from '@semapps/crypto'; @@ -16,12 +15,6 @@ import { WebIdService } from '@semapps/webid'; import { ServiceSchema } from 'moleculer'; import { CoreServiceSettings } from './serviceTypes.js'; -const botsContainer = { - path: '/as/application', - acceptedTypes: [FULL_ACTOR_TYPES.APPLICATION], - readOnly: true -}; - const CoreService = { name: 'core' as const, settings: { @@ -31,7 +24,6 @@ const CoreService = { url: undefined, user: undefined, password: undefined, - mainDataset: undefined, fusekiBase: undefined }, // Optional @@ -61,6 +53,7 @@ const CoreService = { // Type support for settings could be given, once moleculer type definitions improve... settings: { baseUri: baseUrl, + podProvider: true, ...this.settings.activitypub } }); @@ -134,13 +127,23 @@ const CoreService = { mixins: this.settings.ldp.documentTagger !== false ? [DocumentTaggerMixin, LdpService] : [LdpService], settings: { baseUrl, - containers: containers || [botsContainer], + containers, + podProvider: true, ...this.settings.ldp } }); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: any; ... Remove this comment to see the full error message + this.broker.createService({ + mixins: [StorageService], + settings: { + baseUrl + } + }); + if (this.settings.typeIndex !== false) { + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: any; ... Remove this comment to see the full error message this.broker.createService({ mixins: [TypeIndexService], settings: { @@ -165,6 +168,7 @@ const CoreService = { mixins: [WebIdService], settings: { baseUrl, + podProvider: true, ...this.settings.webid } }); @@ -176,6 +180,7 @@ const CoreService = { mixins: [KeysService], settings: { actorsKeyPairsDir: path.resolve(baseDir, './actors'), + podProvider: true, ...this.settings.keys } }); @@ -186,6 +191,7 @@ const CoreService = { this.broker.createService({ mixins: [SparqlEndpointService], settings: { + podProvider: true, defaultAccept: 'application/ld+json', ...this.settings.sparqlEndpoint } @@ -214,23 +220,13 @@ const CoreService = { }); } - if (this.settings.void !== false) { - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "void"; settin... Remove this comment to see the full error message - this.broker.createService({ - mixins: [VoidService], - settings: { - baseUrl, - ...this.settings.void - } - }); - } - if (this.settings.webacl !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "webacl"; sett... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclService], settings: { baseUrl, + podProvider: true, ...this.settings.webacl } }); diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 2ec9bc3f6..2af02edd2 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -152,11 +152,10 @@ const ProxyService = { events: { 'auth.registered': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; if (this.settings.podProvider) { const services = await ctx.call('$node.services'); - if (services.filter((s: any) => s.name === 'activitypub.actor')) { + if (services.some((s: any) => s.name === 'activitypub.actor')) { await ctx.call('activitypub.actor.addEndpoint', { actorUri: webId, predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index f2a9f2952..e013cdfeb 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -17,7 +17,7 @@ const ControlledContainerMixin = { async started() { const { path, controlledActions, ...rest } = this.settings; - await this.broker.call('ldp.registry.register', { + this.registration = { path, name: this.name, isContainer: true, @@ -33,7 +33,9 @@ const ControlledContainerMixin = { ...this.settings.controlledActions }, ...rest - }); + }; + + await this.broker.call('ldp.registry.register', this.registration); }, actions: { post: { @@ -92,7 +94,7 @@ const ControlledContainerMixin = { create: { handler(ctx) { - return ctx.call('ldp.resource.create', ctx.params); + return ctx.call('ldp.resource.create', { registration: this.registration, ...ctx.params }); } }, diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index 3a52ab14c..4eea88666 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -20,6 +20,7 @@ const ControlledResourceMixin = { acceptedTypes: getType(initialValue), isContainer: false, controlledActions: { + create: `${this.name}.create`, get: `${this.name}.get`, patch: `${this.name}.patch`, ...controlledActions @@ -27,48 +28,48 @@ const ControlledResourceMixin = { typeIndex }; - const podProvider = await this.broker.call('ldp.getSetting', { key: 'podProvider' }); - if (!podProvider) { - // Do not await to avoid a circular dependency (for the public/private type indexes) - this.actions.create({}); - } - // Do not await to avoid a circular dependency (for the public/private type indexes) this.broker.call('ldp.registry.register', this.registration); }, actions: { create: { + params: { + webId: { type: 'string', optional: true } + }, async handler(ctx) { - const { webId } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; - const resourceExist = await this.actions.exist({ webId }, { parentCtx: ctx }); + let resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); - if (!resourceExist) { + if (!resourceUri) { let resource = this.settings.initialValue; - const baseUrl = await ctx.call('ldp.getSetting', { key: 'baseUrl' }); + const baseUrl = await ctx.call('solid-storage.getBaseUrl', { webId }); const allowSlugs = await ctx.call('ldp.getSetting', { key: 'allowSlugs' }); - const resourceUri = await ctx.call('triplestore.named-graph.create', { + resourceUri = await ctx.call('triplestore.named-graph.create', { baseUrl, slug: allowSlugs ? this.settings.slug : undefined }); - // We pass the registration as a parameter so that the TypeIndexService can get them back in the ldp.resource.created event await ctx.call('ldp.resource.create', { resourceUri, resource: { '@id': resourceUri, ...resource }, registration: this.registration, - webId: 'system' + webId }); - - return resourceUri; } + + return resourceUri; } }, getUri: { + params: { + webId: { type: 'string', optional: true } + }, async handler(ctx) { - const { webId } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; + const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types: arrayOf(getType(this.settings.initialValue)) }); @@ -82,7 +83,7 @@ const ControlledResourceMixin = { } } `, - dataset: isWebId(webId) ? getDatasetFromUri(webId) : undefined + dataset: getDatasetFromUri(webId) }); return results[0]?.resourceUri.value; @@ -90,16 +91,22 @@ const ControlledResourceMixin = { }, exist: { + params: { + webId: { type: 'string', optional: true } + }, async handler(ctx) { - const { webId } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); return !!resourceUri; } }, get: { + params: { + webId: { type: 'string', optional: true } + }, async handler(ctx) { - const { webId } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); return await ctx.call('ldp.resource.get', { resourceUri, ...ctx.params }); @@ -107,8 +114,11 @@ const ControlledResourceMixin = { }, patch: { + params: { + webId: { type: 'string', optional: true } + }, async handler(ctx) { - const { webId } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); return await ctx.call('ldp.resource.patch', { resourceUri, ...ctx.params }); @@ -116,15 +126,18 @@ const ControlledResourceMixin = { }, waitForCreation: { + params: { + webId: { type: 'string', optional: true } + }, async handler(ctx) { - const { webId } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; let resourceUri; let attempts = 0; do { attempts += 1; if (attempts > 1) await delay(1000); - resourceUri = await this.actions.getUri({ webId }); + resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); } while (!resourceUri || attempts > 30); if (!resourceUri) throw new Error(`Resource still had not been created after 30s`); @@ -132,16 +145,6 @@ const ControlledResourceMixin = { return resourceUri; } } - }, - events: { - 'auth.registered': { - async handler(ctx) { - if (this.settings.podProvider) { - const { webId } = ctx.params; - await this.actions.create({ webId }); - } - } - } } } satisfies Partial; diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 4f4487cb0..c458b6c64 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -14,10 +14,10 @@ const Schema = { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const baseUrl = this.settings.podProvider - ? await this.broker.call('solid-storage.getBaseUrl', { webId }) + ? await ctx.call('solid-storage.getBaseUrl', { webId }) : this.settings.baseUrl; - const containerUri = await this.broker.call('triplestore.named-graph.create', { + const containerUri = await ctx.call('triplestore.named-graph.create', { baseUrl, slug: this.settings.allowSlugs ? path || registration.path : undefined }); diff --git a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts index bda942cbc..54747591d 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts @@ -13,9 +13,7 @@ const GetByTypesAction = { const { types } = ctx.params; const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); - return Object.values(this.registrations).find(registration => - expandedTypes.some((t: any) => arrayOf(registration.acceptedTypes).includes(t)) - ); + return this.registrations.find(r => expandedTypes.some((t: any) => arrayOf(r.acceptedTypes).includes(t))); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 9427f8229..59e7f3b27 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -19,7 +19,7 @@ const GetByUriAction = { let types: string[] = await ctx.call('type-index.getTypes', { uri: containerUri || resourceUri, - webId: this.settings.podProvider ? getWebIdFromUri(containerUri) : undefined + webId: getWebIdFromUri(containerUri || resourceUri) }); // If this a resource, check if its container is registered @@ -30,7 +30,7 @@ const GetByUriAction = { types = await ctx.call('type-index.getTypes', { uri: containerUri, isContainer: true, - webId: this.settings.podProvider ? getWebIdFromUri(containerUri) : undefined + webId: getWebIdFromUri(containerUri) }); } } diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 44c34988e..3a037cd81 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -12,7 +12,8 @@ const GetUriAction = { webId: { type: 'string', optional: true } }, async handler(ctx) { - const { type, isContainer, webId } = ctx.params; + const { type, isContainer } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; const [uri] = (await ctx.call('type-index.getUris', { type, isContainer, webId })) as string[]; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index f125fe0c0..18fd743eb 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -2,8 +2,19 @@ import { ActionSchema } from 'moleculer'; const ListAction = { visibility: 'public', - handler() { - return this.registrations; + params: { + isContainer: 'boolean' + }, + handler(ctx) { + const { isContainer } = ctx.params; + + if (isContainer === true) { + return this.registrations.filter(r => r.isContainer); + } else if (isContainer === false) { + return this.registrations.filter(r => !r.isContainer); + } else { + return this.registrations; + } } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index 324c8a696..baede3e73 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,5 +1,4 @@ import { ActionSchema } from 'moleculer'; -import { arrayOf } from '../../../utils.ts'; import { Registration } from '../../../types.ts'; const RegisterAction = { @@ -32,33 +31,8 @@ const RegisterAction = { key => (registration[key] === undefined || registration[key] === null) && delete registration[key] ); - // Create the container - // In Pod provider mode, the container is created when a new user is created - if (registration.isContainer && !this.settings.podProvider) { - await this.broker.waitForServices(['type-index']); - - let [uri] = (await ctx.call('type-index.getUris', { - type: arrayOf(registration.acceptedTypes)[0], - isContainer: true, - isPrivate: registration.typeIndex === 'private' - })) as string[]; - - if (uri) { - this.logger.info(`Container for type ${registration.acceptedTypes} already exists, skipping...`); - } else { - const containerUri = await ctx.call('ldp.container.create', { registration }); - - await ctx.call('type-index.register', { - types: arrayOf(registration.acceptedTypes), - uri: containerUri, - isContainer: true, - isPrivate: registration.typeIndex === 'private' - }); - } - } - - // Save the options - this.registrations[registration.name] = registration; + // Keep in memory + this.registrations.push(registration); ctx.emit('ldp.registry.registered', { registration }, { meta: { webId: null, dataset: null } }); diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 13ed5268e..11cd7cda9 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -5,7 +5,6 @@ import GetUriAction from './actions/getUri.ts'; import ListAction from './actions/list.ts'; import RegisterAction from './actions/register.ts'; import defaultOptions from './defaultOptions.ts'; -import { arrayOf } from '../../utils.ts'; import { Registration, LdpRegistryServiceSettings } from '../../types.ts'; const LdpRegistryService = { @@ -26,44 +25,13 @@ const LdpRegistryService = { register: RegisterAction }, async started() { - this.registrations = {} as { [name: string]: Registration }; - if (this.settings.podProvider) { - // The auth.account service is a dependency only in POD provider config - await this.broker.waitForServices(['auth.account']); - } + this.registrations = [] as Registration[]; this.registerAll(); }, methods: { async registerAll() { - for (let container of this.settings.containers) { - // We await each registration so they happen in order - await this.actions.register(container); - } - } - }, - events: { - 'auth.registered': { - async handler(ctx) { - const { webId } = ctx.params; - if (this.settings.podProvider) { - for (const registration of Object.values(this.registrations as { [name: string]: Registration })) { - // Controlled resources are created by the mixin - if (registration.isContainer) { - const containerUri = await ctx.call('ldp.container.create', { - registration, - webId - }); - - await ctx.call('type-index.register', { - types: arrayOf(registration.acceptedTypes), - uri: containerUri, - webId, - isContainer: true, - isPrivate: registration.typeIndex === 'private' - }); - } - } - } + for (const registration of this.settings.containers) { + await this.actions.register(registration); } } } diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index d27061cfe..8e4299e75 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -53,7 +53,7 @@ const Schema = { (controlledActions && controlledActions.get) || 'ldp.resource.get', { resourceUri, - webId: 'system' // Avoid errors if the resource creator has no read rights + webId }, { meta: { $cache: false } } ); diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index 61c36c9ed..fe5b5d8f8 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -37,8 +37,8 @@ export interface Registration { excludeFromMirror?: boolean; permissions?: WacPermissionFunction | WacPermissionObject; newResourcesPermissions?: WacPermissionFunction | WacPermissionObject; - controlledActions?: ControlledActions; - typeIndex?: 'private' | 'public'; + controlledActions: ControlledActions; + typeIndex: 'private' | 'public'; } export interface LdpRegistryServiceSettings { diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 883b3e0c2..a932df503 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; -import { pim } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; -import { getWebIdFromUri } from '@semapps/ldp'; +import { pim } from '@semapps/ontologies'; +import { getWebIdFromUri, Registration, arrayOf } from '@semapps/ldp'; const SolidStorageSchema = { name: 'solid-storage' as const, @@ -27,12 +27,87 @@ const SolidStorageSchema = { secure: false // TODO Remove when we switch to Fuseki 5 }); + ctx.meta.dataset = username; + const webId = urlJoin(this.settings.baseUrl, username); - const storageUrl = await ctx.call('ldp.container.create', { path: '/data', webId }); - ctx.meta.dataset = username; + const rootContainerUri = await ctx.call('ldp.container.create', { path: '/data', webId }); + + // Create WebID + await ctx.call('webid.create', { + resourceUri: webId, + resource: { + '@id': webId, + '@type': 'foaf:Person', + 'foaf:nick': username, + 'pim:storage': rootContainerUri, + 'solid:oidcIssuer': this.settings.baseUrl.replace(/\/$/, '') // Remove trailing slash if it exists + }, + webId + }); + + // Create controlled resources (we do that first so that types indexes are created) + const resourceRegistrations: Registration[] = await ctx.call('ldp.registry.list', { isContainer: false }); + for (const resourceRegistration of Object.values(resourceRegistrations)) { + const { controlledActions } = resourceRegistration; + + const resourceUri = await ctx.call(controlledActions.create, { webId }); + + await ctx.call('type-index.register', { + types: arrayOf(resourceRegistration.acceptedTypes), + uri: resourceUri, + webId, + isContainer: false, + isPrivate: resourceRegistration.typeIndex === 'private' + }); + } + + // Create containers from registry + const containerRegistrations: Registration[] = await ctx.call('ldp.registry.list', { isContainer: true }); + for (const containerRegistration of Object.values(containerRegistrations)) { + const containerUri = await ctx.call('ldp.container.create', { + registration: containerRegistration, + webId + }); + + await ctx.call('ldp.container.attach', { + containerUri: rootContainerUri, + resourceUri: containerUri, + webId: 'system' + }); + + await ctx.call('type-index.register', { + types: arrayOf(containerRegistration.acceptedTypes), + uri: containerUri, + webId, + isContainer: true, + isPrivate: containerRegistration.typeIndex === 'private' + }); + } + + // Create account + await ctx.call('auth.account.create', { + username, + webId + }); + + // Give full rights on all containers + await ctx.call('webacl.resource.addRights', { + resourceUri: rootContainerUri, + additionalRights: { + user: { + uri: webId, + read: true, + write: true, + control: true + } + }, + webId: 'system' + }); + + ctx.emit('solid-storage.created', { webId }); - return storageUrl; + return { webId, username, rootContainerUri }; } }, @@ -56,50 +131,6 @@ const SolidStorageSchema = { return webIdData?.['pim:storage']; } } - }, - events: { - 'auth.registered': { - async handler(ctx) { - const { webId } = ctx.params; - - const rootContainerUri = await this.actions.getRootContainerUri({ webId }, { parentCtx: ctx }); - - // Give full rights to user on his storage - await ctx.call('webacl.resource.addRights', { - resourceUri: rootContainerUri, - additionalRights: { - user: { - uri: webId, - read: true, - write: true, - control: true - }, - default: { - user: { - uri: webId, - read: true, - write: true, - control: true - } - } - }, - webId: 'system' - }); - } - }, - 'ldp.container.created': { - async handler(ctx) { - const { containerUri, webId } = ctx.params; - - const rootContainerUri = await this.actions.getRootContainerUri({ webId }, { parentCtx: ctx }); - - await ctx.call('ldp.container.attach', { - containerUri: rootContainerUri, - resourceUri: containerUri, - webId: 'system' - }); - } - } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index bf7f1d676..b83b8728b 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -1,4 +1,4 @@ -import { ControlledResourceMixin, isWebId } from '@semapps/ldp'; +import { ControlledResourceMixin } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; @@ -19,10 +19,10 @@ const PrivateTypeIndexService = { const { webId } = ctx.params; const resourceUri = res; - if (isWebId(webId)) { - await this.broker.waitForServices('solid-preferences-file'); - const preferencesUri = await ctx.call('solid-preferences-file.getUri', { webId }); - + // Attach to preferences file, if available + const services = await ctx.call('$node.services'); + if (services.some(s => s.name === 'solid-preferences-file')) { + const preferencesUri: string = await ctx.call('solid-preferences-file.getUri', { webId }); if (preferencesUri) { await ctx.call('solid-preferences-file.patch', { triplesToAdd: [ @@ -36,6 +36,8 @@ const PrivateTypeIndexService = { }); } } + + return res; } } } diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index 4dfe85025..e71407608 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -23,19 +23,19 @@ const PublicTypeIndexService = { const { webId } = ctx.params; const resourceUri = res; - if (isWebId(webId)) { - await ctx.call('ldp.resource.patch', { - resourceUri: webId, - triplesToAdd: [ - rdf.quad( - rdf.namedNode(webId), - rdf.namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), - rdf.namedNode(resourceUri) - ) - ], - webId - }); - } + await ctx.call('ldp.resource.patch', { + resourceUri: webId, + triplesToAdd: [ + rdf.quad( + rdf.namedNode(webId), + rdf.namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), + rdf.namedNode(resourceUri) + ) + ], + webId + }); + + return res; } } } diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index ec8eb367d..3edaa0430 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -28,7 +28,8 @@ const TypeIndexService = { isPrivate: { type: 'boolean', default: false } }, async handler(ctx) { - let { types, uri, webId, isContainer, isPrivate } = ctx.params; + let { types, uri, isContainer, isPrivate } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; const expandedTypes: string[] = await ctx.call('jsonld.parser.expandTypes', { types }); const oldExpandedTypes: string[] = await this.actions.getTypes({ uri, webId, isPrivate }); @@ -108,7 +109,8 @@ const TypeIndexService = { }, // cache: true, async handler(ctx) { - const { uri, webId, isPrivate } = ctx.params; + const { uri, isPrivate } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; // If isPrivate is not defined, search in both type indexes let typeIndexUris = []; @@ -149,7 +151,8 @@ const TypeIndexService = { }, // cache: true, async handler(ctx) { - const { type, webId, isContainer, isPrivate } = ctx.params; + const { type, isContainer, isPrivate } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId; const [expandedType] = (await ctx.call('jsonld.parser.expandTypes', { types: [type] })) as string[]; @@ -180,38 +183,12 @@ const TypeIndexService = { } `, webId: 'system', - dataset: isWebId(webId) ? getDatasetFromUri(webId) : undefined + dataset: getDatasetFromUri(webId) }); return results.map((r: any) => r.uri.value); } } - }, - events: { - 'ldp.resource.created': { - async handler(ctx) { - const { resourceUri, registration, webId } = ctx.params; - - // When a controlled resource is created, we pass the registration as a parameter - if (registration && registration.acceptedTypes) { - const serviceName = `${registration.typeIndex === 'private' ? 'private' : 'public'}-type-index`; - - await this.broker.waitForServices([serviceName]); - await ctx.call(`${serviceName}.waitForCreation`, { webId }); - - await this.actions.register( - { - types: arrayOf(registration.acceptedTypes), - uri: resourceUri, - webId, - isContainer: false, - isPrivate: registration.typeIndex === 'private' - }, - { parentCtx: ctx } - ); - } - } - } } } satisfies Partial; diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index c881422de..c3aaa34f6 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -56,14 +56,16 @@ const SparqlEndpointService = { events: { 'auth.registered': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message const { webId } = ctx.params; if (this.settings.podProvider) { - await ctx.call('activitypub.actor.addEndpoint', { - actorUri: webId, - predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', - endpoint: urlJoin(webId, 'sparql') - }); + const services = await ctx.call('$node.services'); + if (services.some((s: any) => s.name === 'activitypub.actor')) { + await ctx.call('activitypub.actor.addEndpoint', { + actorUri: webId, + predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', + endpoint: urlJoin(webId, 'sparql') + }); + } } } } diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index 13a908189..de5fdfbbe 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -1,4 +1,5 @@ import { PUBLIC_URI, ACTIVITY_TYPES } from '@semapps/activitypub'; +import { Registration } from '@semapps/ldp'; const handledLdpActions = ['ldp.container.post', 'ldp.resource.put', 'ldp.resource.patch', 'ldp.resource.delete']; @@ -95,12 +96,11 @@ const ObjectsWatcherMiddleware = (config = {}) => { relayActor = await broker.call('activitypub.relay.getActor'); } - const containers = await broker.call('ldp.registry.list'); - for (const container of Object.values(containers)) { - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. - if (container.excludeFromMirror === true && !excludedContainersPathRegex.includes(container.pathRegex)) { - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. - excludedContainersPathRegex.push(container.pathRegex); + const registrations: Registration[] = await broker.call('ldp.registry.list'); + for (const registration of registrations) { + // TODO stop using pathRegex + if (registration.excludeFromMirror === true && !excludedContainersPathRegex.includes(registration.pathRegex)) { + excludedContainersPathRegex.push(registration.pathRegex); } } diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 9c50c91a0..3798ed588 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -250,10 +250,10 @@ const VoidSchema = { methods: { async getContainers(ctx) { const { baseUrl } = this.settings; - const registrations = (await ctx.call('ldp.registry.list')) as { [name: string]: Registration }; + const registrations: Registration[] = await ctx.call('ldp.registry.list'); const res = await Promise.all( - Object.values(registrations) + registrations .filter(c => c.acceptedTypes) .map(async c => { const partition = { diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index de0f580f0..82186a1c0 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -7,9 +7,9 @@ export const action = { async handler(ctx) { const { webId } = ctx.params; - const containers: { [name: string]: Registration } = await ctx.call('ldp.registry.list'); + const registrations: Registration[] = await ctx.call('ldp.registry.list'); - for (const { permissions, path } of Object.values(containers)) { + for (const { permissions, path } of registrations) { if (permissions) { const baseUrl = this.settings.podProvider ? await ctx.call('solid-storage.getBaseUrl', { webId }) diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 5d67cd12c..eb34a4a12 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -20,6 +20,7 @@ describe('LDP handling through API', () => { let resourceUri: any; test('Create resource', async () => { + // @ts-expect-error This expression is not callable await waitForExpect(async () => { containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 67cefe2b6..f042f5ea3 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -29,6 +29,7 @@ describe('Binary handling of LDP server', () => { let containerUri: string; test('Post image to container', async () => { + // @ts-expect-error This expression is not callable await waitForExpect(async () => { containerUri = await broker.call('ldp.registry.getUri', { type: 'semapps:File', isContainer: true }); expect(containerUri).not.toBeUndefined(); @@ -45,7 +46,7 @@ describe('Binary handling of LDP server', () => { fileUri = headers.get('Location'); expect(fileUri).not.toBeNull(); - filePath = fileUri.replace(CONFIG.HOME_URL!, ''); + filePath = fileUri!.replace(CONFIG.HOME_URL!, ''); fileName = getSlugFromUri(fileUri); expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index aabfccae2..6cd854b21 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -19,6 +19,7 @@ describe('LDP container tests', () => { let containerUri: string; test('Ensure container created in LdpService settings exists', async () => { + // @ts-expect-error This expression is not callable await waitForExpect(async () => { containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); @@ -204,6 +205,7 @@ describe('LDP container tests', () => { }); // Container should now be empty + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const container = await broker.call('ldp.container.get', { containerUri: containerUri }); expect(container['ldp:contains']).toHaveLength(0); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index a2ec144e6..2f62f5b4f 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -24,6 +24,7 @@ describe('Content negotiation', () => { let project4Uri: string | null; test('Post resource in JSON-LD', async () => { + // @ts-expect-error This expression is not callable await waitForExpect(async () => { containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index f27e0d5c2..15fb4e0f0 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { Context } from 'moleculer'; -import { ControlledContainerMixin, delay } from '@semapps/ldp'; +import { ControlledContainerMixin, delay, Registration } from '@semapps/ldp'; import waitForExpect from 'wait-for-expect'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; @@ -45,10 +45,11 @@ describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlu test('The container is registered and created', async () => { // Wait for all containers and resources to be registered + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const registrations = await broker.call('ldp.registry.list'); - expect(Object.keys(registrations).length).toBe(10); // 8 containers + 2 resources - expect(registrations.videos).not.toBeUndefined(); + const registrations: Registration[] = await broker.call('ldp.registry.list'); + expect(registrations).toBe(10); // 8 containers + 2 resources + expect(registrations.find(r => r.name === 'videos')).not.toBeUndefined(); }); const containersUris = await broker.call('ldp.container.getAll'); @@ -83,12 +84,14 @@ describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlu await delay(3000); // No new container has been registered + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const registrations = await broker.call('ldp.registry.list'); - expect(Object.keys(registrations).length).toBe(10); + const registrations: Registration[] = await broker.call('ldp.registry.list'); + expect(registrations.length).toBe(10); }); // No new container has been created + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const containersUris = await broker.call('ldp.container.getAll'); expect(containersUris.length).toBe(8); diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index 1d5743cd7..5dc181dd1 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -52,6 +52,7 @@ describe('Headers handling of LDP server', () => { let eventsContainerUri: string; test('Get headers', async () => { + // @ts-expect-error This expression is not callable await waitForExpect(async () => { placesContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Place', isContainer: true }); expect(placesContainerUri).not.toBeUndefined(); @@ -83,6 +84,7 @@ describe('Headers handling of LDP server', () => { }); test('Get container-specific headers', async () => { + // @ts-expect-error This expression is not callable await waitForExpect(async () => { eventsContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Event', isContainer: true }); expect(eventsContainerUri).not.toBeUndefined(); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 2521fbc88..9eda1534a 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -43,7 +43,8 @@ const containers = [ ]; const initialize = async (allowSlugs = true): Promise => { - await dropDataset(CONFIG.MAIN_DATASET); + await dropDataset('alice'); + await dropDataset(CONFIG.SETTINGS_DATASET); const uploadsPath = pathJoin(__dirname, '../uploads'); if (fs.existsSync(uploadsPath)) { @@ -71,14 +72,11 @@ const initialize = async (allowSlugs = true): Promise => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET, secure: false // TODO Remove when we move to Fuseki 5 }, containers, ontologies: [as, pair, petr, solid, vcard], activitypub: false, - mirror: false, - void: false, webfinger: false, webid: false, ldp: { @@ -92,6 +90,7 @@ const initialize = async (allowSlugs = true): Promise => { mixins: [AuthLocalService], settings: { baseUrl: CONFIG.HOME_URL, + podProvider: true, jwtPath: path.resolve(__dirname, '../jwt'), accountsDataset: CONFIG.SETTINGS_DATASET } diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index ef64d7fb1..881ba6a11 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,13 +1,23 @@ import rdf from '@rdfjs/data-model'; import waitForExpect from 'wait-for-expect'; +import { ActionParamSchema, CallingOptions, ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; jest.setTimeout(50000); -let broker: any; +let broker: ServiceBroker; +let webId: string; +let dataset: string; +let callAsAlice: (actionName: string, params: ActionParamSchema, options?: CallingOptions) => Promise; beforeAll(async () => { - broker = await initialize(false); + broker = await initialize(true); await broker.start(); + ({ webId, dataset } = (await broker.call('solid-storage.create', { username: 'alice' })) as { + webId: string; + dataset: string; + }); + callAsAlice = (actionName, params, options = {}) => + broker.call(actionName, params, { ...options, meta: { ...options.meta, webId, dataset } }); }); afterAll(async () => { @@ -21,12 +31,13 @@ describe('Resource CRUD operations', () => { let project1Uri: string; test('Post resource in container', async () => { + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + containerUri = await callAsAlice('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); }); - project1Uri = await broker.call('ldp.container.post', { + project1Uri = await callAsAlice('ldp.container.post', { containerUri, resource: { '@context': { @@ -54,7 +65,7 @@ describe('Resource CRUD operations', () => { }); test('Get resource', async () => { - project1 = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + project1 = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(project1).toMatchObject({ id: project1Uri, @@ -70,7 +81,7 @@ describe('Resource CRUD operations', () => { }); test('Put resource', async () => { - await broker.call('ldp.resource.put', { + await callAsAlice('ldp.resource.put', { resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -86,7 +97,7 @@ describe('Resource CRUD operations', () => { } }); - const updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + const updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -119,9 +130,9 @@ describe('Resource CRUD operations', () => { } ] }; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + let updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -144,9 +155,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -168,9 +179,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -200,9 +211,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -225,9 +236,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -247,9 +258,9 @@ describe('Resource CRUD operations', () => { // @ts-expect-error TS(2322): Type 'undefined' is not assignable to type '{ labe... Remove this comment to see the full error message resourceUpdated.hasLocation = undefined; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject['pair:hasLocation']).toBeUndefined(); @@ -258,9 +269,9 @@ describe('Resource CRUD operations', () => { { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' } ]; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -276,9 +287,9 @@ describe('Resource CRUD operations', () => { { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } ]; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -305,12 +316,12 @@ describe('Resource CRUD operations', () => { } }; - const resourceUri = await broker.call('ldp.container.post', { + const resourceUri = await callAsAlice('ldp.container.post', { resource: resourceToPost, containerUri }); - project2 = await broker.call('ldp.resource.get', { resourceUri }); + project2 = await callAsAlice('ldp.resource.get', { resourceUri }); expect(project2).toMatchObject({ 'pair:hasLocation': { @@ -337,12 +348,12 @@ describe('Resource CRUD operations', () => { } ]; - const resourceUri3 = await broker.call('ldp.container.post', { + const resourceUri3 = await callAsAlice('ldp.container.post', { resource: resourceToPost, containerUri }); - const project3 = await broker.call('ldp.resource.get', { resourceUri: resourceUri3 }); + const project3 = await callAsAlice('ldp.resource.get', { resourceUri: resourceUri3 }); expect(project3).toMatchObject({ 'pair:hasLocation': [ @@ -377,12 +388,12 @@ describe('Resource CRUD operations', () => { } ]; - const resourceUri4 = await broker.call('ldp.container.post', { + const resourceUri4 = await callAsAlice('ldp.container.post', { resource: resourceToPost, containerUri }); - const project4 = await broker.call('ldp.resource.get', { resourceUri: resourceUri4 }); + const project4 = await callAsAlice('ldp.resource.get', { resourceUri: resourceUri4 }); expect(project4).toMatchObject({ 'pair:hasLocation': [ @@ -425,9 +436,9 @@ describe('Resource CRUD operations', () => { ] }; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2.id }); + let updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project2.id }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -462,9 +473,9 @@ describe('Resource CRUD operations', () => { } ]; - await broker.call('ldp.resource.put', { resource: resourceUpdated }); + await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await broker.call('ldp.resource.get', { resourceUri: project2.id }); + updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project2.id }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -479,9 +490,9 @@ describe('Resource CRUD operations', () => { // Ensure dereferenced resources with IDs are not deleted by PUT test('PUT resource with ID', async () => { - const themeContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Theme', isContainer: true }); + const themeContainerUri = await callAsAlice('ldp.registry.getUri', { type: 'pair:Theme', isContainer: true }); - const themeUri = await broker.call('ldp.container.post', { + const themeUri = await callAsAlice('ldp.container.post', { containerUri: themeContainerUri, resource: { '@context': { @@ -494,7 +505,7 @@ describe('Resource CRUD operations', () => { }); // Add a relation to the theme - await broker.call('ldp.resource.put', { + await callAsAlice('ldp.resource.put', { resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -509,7 +520,7 @@ describe('Resource CRUD operations', () => { }); // Remove the relation to the theme - await broker.call('ldp.resource.put', { + await callAsAlice('ldp.resource.put', { resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -521,7 +532,7 @@ describe('Resource CRUD operations', () => { }); // Ensure the theme has not been deleted - const theme = await broker.call('ldp.resource.get', { resourceUri: themeUri }); + const theme = await callAsAlice('ldp.resource.get', { resourceUri: themeUri }); expect(theme).toMatchObject({ id: themeUri, @@ -531,7 +542,7 @@ describe('Resource CRUD operations', () => { }); test('PATCH resource', async () => { - const projectUri = await broker.call('ldp.container.post', { + const projectUri = await callAsAlice('ldp.container.post', { containerUri, resource: { '@context': { @@ -543,7 +554,7 @@ describe('Resource CRUD operations', () => { slug: 'SemApps' }); - await broker.call('ldp.resource.patch', { + await callAsAlice('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ rdf.quad( @@ -566,7 +577,7 @@ describe('Resource CRUD operations', () => { ] }); - const project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); + const project = await callAsAlice('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ id: projectUri, @@ -576,7 +587,7 @@ describe('Resource CRUD operations', () => { }); test('PATCH resource with blank nodes', async () => { - const projectUri = await broker.call('ldp.container.post', { + const projectUri = await callAsAlice('ldp.container.post', { containerUri, resource: { '@context': { @@ -588,7 +599,7 @@ describe('Resource CRUD operations', () => { slug: 'ActivityPods' }); - await broker.call('ldp.resource.patch', { + await callAsAlice('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ rdf.quad( @@ -609,7 +620,7 @@ describe('Resource CRUD operations', () => { ] }); - let project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); + let project = await callAsAlice('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ id: projectUri, @@ -620,7 +631,7 @@ describe('Resource CRUD operations', () => { } }); - await broker.call('ldp.resource.patch', { + await callAsAlice('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ rdf.quad( @@ -641,7 +652,7 @@ describe('Resource CRUD operations', () => { ] }); - project = await broker.call('ldp.resource.get', { resourceUri: projectUri }); + project = await callAsAlice('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ id: projectUri, @@ -660,10 +671,10 @@ describe('Resource CRUD operations', () => { }, 20000); test('Delete resource', async () => { - await broker.call('ldp.resource.delete', { + await callAsAlice('ldp.resource.delete', { resourceUri: project1Uri }); - await expect(broker.call('ldp.resource.get', { resourceUri: project1Uri })).rejects.toThrow(`not found`); + await expect(callAsAlice('ldp.resource.get', { resourceUri: project1Uri })).rejects.toThrow(`not found`); }); }); From 9a2ff500b6dbd4e38e2043a15b8549936333775d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 30 Oct 2025 16:34:21 +0100 Subject: [PATCH 097/165] All LDP tests passing --- .../ldp/mixins/controlled-resource.ts | 16 ++- .../ldp/services/permissions/actions/check.ts | 1 - .../services/registry/actions/getByTypes.ts | 2 +- .../ldp/services/registry/actions/getByUri.ts | 6 +- .../ldp/services/registry/actions/list.ts | 2 +- .../packages/solid/services/storage.ts | 13 ++- .../solid/services/type-index/type-index.ts | 4 +- .../packages/webacl/middlewares/webacl.ts | 26 ----- .../tests/activitypub/initialize.ts | 2 +- src/middleware/tests/ldp/api.test.ts | 9 +- src/middleware/tests/ldp/binary.test.ts | 11 +- src/middleware/tests/ldp/container.test.ts | 42 +++---- .../tests/ldp/content-negotiation.test.ts | 19 ++-- .../tests/ldp/controlled-container.test.ts | 101 ++++++++++++----- .../tests/ldp/controlled-resource.test.ts | 10 +- src/middleware/tests/ldp/headers.test.ts | 8 +- src/middleware/tests/ldp/initialize.ts | 4 +- src/middleware/tests/ldp/resource.test.ts | 106 +++++++++--------- src/middleware/tests/utils.ts | 14 +++ 19 files changed, 224 insertions(+), 172 deletions(-) diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index 4eea88666..9a5e1f520 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -1,5 +1,5 @@ import { ServiceSchema, Errors } from 'moleculer'; -import { arrayOf, delay, getDatasetFromUri, getType, isWebId } from '../utils.ts'; +import { arrayOf, delay, getDatasetFromUri, getType } from '../utils.ts'; const { MoleculerError } = Errors; @@ -13,12 +13,13 @@ const ControlledResourceMixin = { }, dependencies: ['ldp'], async started() { - const { initialValue, controlledActions, typeIndex } = this.settings; + const { initialValue, permissions, controlledActions, typeIndex } = this.settings; this.registration = { name: this.name, acceptedTypes: getType(initialValue), isContainer: false, + permissions, controlledActions: { create: `${this.name}.create`, get: `${this.name}.get`, @@ -55,7 +56,7 @@ const ControlledResourceMixin = { resourceUri, resource: { '@id': resourceUri, ...resource }, registration: this.registration, - webId + webId: 'system' }); } @@ -92,22 +93,24 @@ const ControlledResourceMixin = { exist: { params: { + resourceUri: { type: 'string', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; - const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); + const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({ webId }, { parentCtx: ctx })); return !!resourceUri; } }, get: { params: { + resourceUri: { type: 'string', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; - const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); + const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({ webId }, { parentCtx: ctx })); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); return await ctx.call('ldp.resource.get', { resourceUri, ...ctx.params }); } @@ -115,11 +118,12 @@ const ControlledResourceMixin = { patch: { params: { + resourceUri: { type: 'string', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; - const resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); + const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({ webId }, { parentCtx: ctx })); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); return await ctx.call('ldp.resource.patch', { resourceUri, ...ctx.params }); } diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index a53aaea9d..06b790ebe 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -14,7 +14,6 @@ const Schema = { webId: { type: 'string', optional: true } }, async handler(ctx) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. if (!(await this.actions.has(ctx.params, { parentCtx: ctx }))) { throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED'); } diff --git a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts index 54747591d..e31347874 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts @@ -2,7 +2,7 @@ import { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; /** - * Find the container options for a resource type + * Find the registration for a resource type */ const GetByTypesAction = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 59e7f3b27..27fecd20d 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -2,7 +2,7 @@ import { ActionSchema } from 'moleculer'; import { getWebIdFromUri } from '../../../utils.ts'; /** - * Find the container options for a container or resource URI + * Find the registration for a container or resource URI */ const GetByUriAction = { visibility: 'public', @@ -36,9 +36,9 @@ const GetByUriAction = { } if (types) { - const containerOptions = await this.actions.getByTypes({ types }, { parentCtx: ctx }); + const registration = await this.actions.getByTypes({ types }, { parentCtx: ctx }); - return { ...this.settings.defaultOptions, ...containerOptions }; + return { ...this.settings.defaultOptions, ...registration }; } else { return this.settings.defaultOptions; } diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index 18fd743eb..dbd6b9bb7 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -3,7 +3,7 @@ import { ActionSchema } from 'moleculer'; const ListAction = { visibility: 'public', params: { - isContainer: 'boolean' + isContainer: { type: 'boolean', optional: true } }, handler(ctx) { const { isContainer } = ctx.params; diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index a932df503..2af584e02 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -27,10 +27,11 @@ const SolidStorageSchema = { secure: false // TODO Remove when we switch to Fuseki 5 }); - ctx.meta.dataset = username; - const webId = urlJoin(this.settings.baseUrl, username); + ctx.meta.dataset = username; + ctx.meta.webId = webId; + const rootContainerUri = await ctx.call('ldp.container.create', { path: '/data', webId }); // Create WebID @@ -100,6 +101,14 @@ const SolidStorageSchema = { read: true, write: true, control: true + }, + default: { + user: { + uri: webId, + read: true, + write: true, + control: true + } } }, webId: 'system' diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index 3edaa0430..6e64d7b7f 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -54,7 +54,7 @@ const TypeIndexService = { rdf.namedNode(type) ) ), - webId: isWebId(webId) ? webId : 'system' + webId: 'system' }); } } else { @@ -89,7 +89,7 @@ const TypeIndexService = { ) ) ], - webId: isWebId(webId) ? webId : 'system' + webId: 'system' }, { parentCtx: ctx } ); diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 0c9f0459a..029166d10 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -101,32 +101,6 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se break; } - // case 'ldp.container.create': { - // // On start, container permissions are passed as parameters because the registry is not up yet - // let permissions; - // if (ctx.params.registration) { - // permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; - // } else { - // const registration = await ctx.call('ldp.registry.getByUri', { containerUri: ctx.params.containerUri }); - // permissions = registration?.permissions || defaultContainerOptions.permissions; - // } - - // await ctx.call( - // 'webacl.resource.addRights', - // { - // resourceUri: ctx.params.containerUri, - // newRights: typeof permissions === 'function' ? permissions(webId, ctx) : permissions, - // webId: 'system' - // }, - // { - // meta: { - // skipObjectsWatcher: true - // } - // } - // ); - // break; - // } - default: break; } diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 8a0be9c04..986a49863 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -2,7 +2,7 @@ import fse from 'fs-extra'; import path from 'path'; import urlJoin from 'url-join'; -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import { AuthLocalService } from '@semapps/auth'; import { CoreService } from '@semapps/core'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index eb34a4a12..5c3432037 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -1,14 +1,17 @@ import fetch from 'node-fetch'; import waitForExpect from 'wait-for-expect'; -import { fetchServer } from '../utils.ts'; +import { ServiceBroker } from 'moleculer'; +import { createStorage, fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker: any; +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -22,7 +25,7 @@ describe('LDP handling through API', () => { test('Create resource', async () => { // @ts-expect-error This expression is not callable await waitForExpect(async () => { - containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); }); diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index f042f5ea3..2f46c5c17 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -1,21 +1,24 @@ import fetch from 'node-fetch'; import waitForExpect from 'wait-for-expect'; import fs from 'fs'; +import { ServiceBroker } from 'moleculer'; import path, { join as pathJoin } from 'path'; import { getSlugFromUri } from '@semapps/ldp'; import { fileURLToPath } from 'url'; -import { fetchServer } from '../utils.ts'; +import { fetchServer, createStorage } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); jest.setTimeout(20000); -let broker: any; +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -31,7 +34,7 @@ describe('Binary handling of LDP server', () => { test('Post image to container', async () => { // @ts-expect-error This expression is not callable await waitForExpect(async () => { - containerUri = await broker.call('ldp.registry.getUri', { type: 'semapps:File', isContainer: true }); + containerUri = await alice.call('ldp.registry.getUri', { type: 'semapps:File', isContainer: true }); expect(containerUri).not.toBeUndefined(); }); @@ -82,7 +85,7 @@ describe('Binary handling of LDP server', () => { }); test('Get image as resource (via Moleculer action)', async () => { - await expect(broker.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ id: fileUri, type: 'semapps:File', 'semapps:fileName': fileName, diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 6cd854b21..610e53b72 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -1,13 +1,17 @@ import waitForExpect from 'wait-for-expect'; +import { ServiceBroker } from 'moleculer'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; +import { createStorage } from '../utils.ts'; jest.setTimeout(20000); -let broker: any; +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -21,26 +25,26 @@ describe('LDP container tests', () => { test('Ensure container created in LdpService settings exists', async () => { // @ts-expect-error This expression is not callable await waitForExpect(async () => { - containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); }); - await expect(broker.call('ldp.container.exist', { containerUri })).resolves.toBe(true); + await expect(alice.call('ldp.container.exist', { containerUri })).resolves.toBe(true); }); test('Create a new container', async () => { - const newContainerUri = await broker.call('ldp.container.create', { path: '/objects', webId: 'system' }); + const newContainerUri = await alice.call('ldp.container.create', { path: '/objects' }); - await expect(broker.call('ldp.container.exist', { containerUri: newContainerUri })).resolves.toBe(true); + await expect(alice.call('ldp.container.exist', { containerUri: newContainerUri })).resolves.toBe(true); - await expect(broker.call('ldp.container.get', { containerUri: newContainerUri })).resolves.toMatchObject({ + await expect(alice.call('ldp.container.get', { containerUri: newContainerUri })).resolves.toMatchObject({ id: newContainerUri, type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']) }); }); test('Post a resource in a container', async () => { - resourceUri = await broker.call('ldp.container.post', { + resourceUri = await alice.call('ldp.container.post', { containerUri: containerUri, resource: { '@context': { @@ -52,7 +56,7 @@ describe('LDP container tests', () => { }); await expect( - broker.call('ldp.container.get', { + alice.call('ldp.container.get', { containerUri: containerUri }) ).resolves.toMatchObject({ @@ -70,7 +74,7 @@ describe('LDP container tests', () => { test('Post a resource in a non-existing container', async () => { await expect( - broker.call('ldp.container.post', { + alice.call('ldp.container.post', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, resource: { '@context': { @@ -85,7 +89,7 @@ describe('LDP container tests', () => { test('Attach a resource to a non-existing container', async () => { await expect( - broker.call('ldp.container.attach', { + alice.call('ldp.container.attach', { containerUri: `${CONFIG.HOME_URL}unknownContainer`, resourceUri }) @@ -94,7 +98,7 @@ describe('LDP container tests', () => { test('Get container with jsonContext param', async () => { await expect( - broker.call('ldp.container.get', { + alice.call('ldp.container.get', { containerUri: containerUri, jsonContext: { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -120,7 +124,7 @@ describe('LDP container tests', () => { }); test('Get container with filters param', async () => { - await broker.call('ldp.container.post', { + await alice.call('ldp.container.post', { containerUri: containerUri, resource: { '@context': { @@ -133,7 +137,7 @@ describe('LDP container tests', () => { // Get without filters param await expect( - broker.call('ldp.container.get', { + alice.call('ldp.container.get', { containerUri: containerUri }) ).resolves.toMatchObject({ @@ -151,7 +155,7 @@ describe('LDP container tests', () => { // Get with filters param await expect( - broker.call('ldp.container.get', { + alice.call('ldp.container.get', { containerUri: containerUri, filters: { 'pair:label': 'My project 2' @@ -169,7 +173,7 @@ describe('LDP container tests', () => { }); test('Get container without resources', async () => { - const container = await broker.call('ldp.container.get', { + const container = await alice.call('ldp.container.get', { containerUri: containerUri, doNotIncludeResources: true }); @@ -178,14 +182,14 @@ describe('LDP container tests', () => { }); test('Detach a resource from a container', async () => { - await broker.call('ldp.container.detach', { + await alice.call('ldp.container.detach', { containerUri: containerUri, resourceUri }); // Project 1 should have disappeared from the container await expect( - broker.call('ldp.container.get', { + alice.call('ldp.container.get', { containerUri: containerUri }) ).resolves.toMatchObject({ @@ -200,14 +204,14 @@ describe('LDP container tests', () => { }); test('Clear container', async () => { - await broker.call('ldp.container.clear', { + await alice.call('ldp.container.clear', { containerUri: containerUri }); // Container should now be empty // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const container = await broker.call('ldp.container.get', { containerUri: containerUri }); + const container = await alice.call('ldp.container.get', { containerUri: containerUri }); expect(container['ldp:contains']).toHaveLength(0); }); }); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 2f62f5b4f..da2082ece 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -1,15 +1,18 @@ import fetch from 'node-fetch'; import waitForExpect from 'wait-for-expect'; +import { ServiceBroker } from 'moleculer'; import { MIME_TYPES } from '@semapps/mime-types'; -import { fetchServer } from '../utils.ts'; +import { fetchServer, createStorage } from '../utils.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -let broker: any; +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -26,7 +29,7 @@ describe('Content negotiation', () => { test('Post resource in JSON-LD', async () => { // @ts-expect-error This expression is not callable await waitForExpect(async () => { - containerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); }); @@ -134,7 +137,7 @@ describe('Content negotiation', () => { project2Uri = headers.get('Location'); - const project2 = await broker.call('ldp.resource.get', { + const project2 = await alice.call('ldp.resource.get', { resourceUri: project2Uri }); expect(project2).toMatchObject({ @@ -160,7 +163,7 @@ describe('Content negotiation', () => { project3Uri = headers.get('Location'); - const project2 = await broker.call('ldp.resource.get', { + const project2 = await alice.call('ldp.resource.get', { resourceUri: project3Uri }); expect(project2).toMatchObject({ @@ -186,7 +189,7 @@ describe('Content negotiation', () => { expect(status).toBe(204); - const project2 = await broker.call('ldp.resource.get', { + const project2 = await alice.call('ldp.resource.get', { resourceUri: project2Uri }); expect(project2).toMatchObject({ @@ -212,7 +215,7 @@ describe('Content negotiation', () => { expect(status).toBe(204); - const project3 = await broker.call('ldp.resource.get', { + const project3 = await alice.call('ldp.resource.get', { resourceUri: project3Uri }); expect(project3).toMatchObject({ @@ -244,7 +247,7 @@ describe('Content negotiation', () => { project4Uri = headers.get('Location'); - const project4 = await broker.call('ldp.resource.get', { + const project4 = await alice.call('ldp.resource.get', { resourceUri: project4Uri }); diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 15fb4e0f0..3bda93e70 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -1,15 +1,15 @@ import urlJoin from 'url-join'; -import { Context } from 'moleculer'; +import { Context, ServiceBroker } from 'moleculer'; import { ControlledContainerMixin, delay, Registration } from '@semapps/ldp'; import waitForExpect from 'wait-for-expect'; -import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -import { fetchServer } from '../utils.ts'; +import { fetchServer, createStorage } from '../utils.ts'; jest.setTimeout(50000); -let broker: any; +let broker: ServiceBroker; +let alice: any; -describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { +describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { beforeAll(async () => { broker = await initialize(allowSlugs); @@ -18,16 +18,26 @@ describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlu mixins: [ControlledContainerMixin], settings: { path: '/videos', // Will be ignored when slugs are not allowed - acceptedTypes: ['as:Video'] + acceptedTypes: ['as:Video'], + permissions: { + anon: { + read: true // We want to be able to fetch the container anonymously + } + }, + newResourcesPermissions: { + anon: { + read: true + } + } }, hooks: { after: { async list(ctx: Context, res: any) { - res['dc:creator'] = 'The video mixin'; + res['dc:creator'] = 'Added by the video mixin (list)'; return res; }, async get(ctx: Context, res: any) { - res['dc:creator'] = 'The video mixin'; + res['dc:creator'] = 'Added by the video mixin (get)'; return res; } } @@ -35,6 +45,7 @@ describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlu }); await broker.start(); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -42,38 +53,40 @@ describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlu }); let containerUri: string; + let resourceUri: string; test('The container is registered and created', async () => { // Wait for all containers and resources to be registered // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const registrations: Registration[] = await broker.call('ldp.registry.list'); - expect(registrations).toBe(10); // 8 containers + 2 resources + const registrations: Registration[] = await alice.call('ldp.registry.list'); + expect(registrations).toHaveLength(10); // 8 containers + 2 resources expect(registrations.find(r => r.name === 'videos')).not.toBeUndefined(); }); - const containersUris = await broker.call('ldp.container.getAll'); - expect(containersUris.length).toBe(8); + const containersUris = await alice.call('ldp.container.getAll'); + expect(containersUris).toHaveLength(9); // 8 containers + root container if (allowSlugs) { expect(containersUris).toEqual( expect.arrayContaining([ - urlJoin(CONFIG.HOME_URL!, '/foaf/person'), - urlJoin(CONFIG.HOME_URL!, '/key'), - urlJoin(CONFIG.HOME_URL!, '/public-key'), - urlJoin(CONFIG.HOME_URL!, '/videos'), - urlJoin(CONFIG.HOME_URL!, '/resources'), - urlJoin(CONFIG.HOME_URL!, '/places'), - urlJoin(CONFIG.HOME_URL!, '/themes'), - urlJoin(CONFIG.HOME_URL!, '/files') + urlJoin(alice.webId, '/foaf/person'), + urlJoin(alice.webId, '/key'), + urlJoin(alice.webId, '/public-key'), + urlJoin(alice.webId, '/videos'), + urlJoin(alice.webId, '/resources'), + urlJoin(alice.webId, '/places'), + urlJoin(alice.webId, '/themes'), + urlJoin(alice.webId, '/files'), + urlJoin(alice.webId, '/data') ]) ); } - containerUri = await broker.call('ldp.registry.getUri', { type: 'as:Video' }); + containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Video' }); expect(containerUri).not.toBeUndefined(); - await expect(broker.call('ldp.container.exist', { containerUri })).resolves.toBe(true); + await expect(alice.call('ldp.container.exist', { containerUri })).resolves.toBe(true); }); test('Restart broker and check container is still here', async () => { @@ -86,26 +99,26 @@ describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlu // No new container has been registered // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const registrations: Registration[] = await broker.call('ldp.registry.list'); - expect(registrations.length).toBe(10); + const registrations: Registration[] = await alice.call('ldp.registry.list'); + expect(registrations).toHaveLength(10); }); // No new container has been created // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const containersUris = await broker.call('ldp.container.getAll'); - expect(containersUris.length).toBe(8); + const containersUris = await alice.call('ldp.container.getAll'); + expect(containersUris).toHaveLength(9); }); // The container URI has not changed - await expect(broker.call('ldp.registry.getUri', { type: 'as:Video' })).resolves.toBe(containerUri); + await expect(alice.call('ldp.registry.getUri', { type: 'as:Video' })).resolves.toBe(containerUri); }); test('Get registered container', async () => { - await expect(broker.call('videos.list')).resolves.toMatchObject({ + await expect(alice.call('videos.list')).resolves.toMatchObject({ id: containerUri, type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), - 'dc:creator': 'The video mixin', // Added by the ControlledContainerMixin + 'dc:creator': 'Added by the video mixin (list)', // Added by the ControlledContainerMixin 'ldp:contains': [] }); }); @@ -116,9 +129,37 @@ describe.each([false])('ControlledContainerMixin with allowSlugs: %s', (allowSlu json: { id: containerUri, type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), - 'dc:creator': 'The video mixin', // Added by the ControlledContainerMixin + 'dc:creator': 'Added by the video mixin (list)', // Added by the ControlledContainerMixin 'ldp:contains': [] } }); }); + + test('Post and get a resource in the container', async () => { + resourceUri = await alice.call('videos.post', { + resource: { + type: 'Video', + name: 'My video' + } + }); + + await expect(alice.call('videos.get', { resourceUri })).resolves.toMatchObject({ + id: resourceUri, + type: 'Video', + name: 'My video', + 'dc:creator': 'Added by the video mixin (get)' // Added by the ControlledContainerMixin + }); + }); + + test('Get the resource from the registered container through API', async () => { + await expect(fetchServer(resourceUri)).resolves.toMatchObject({ + status: 200, + json: { + id: resourceUri, + type: 'Video', + name: 'My video', + 'dc:creator': 'Added by the video mixin (get)' // Added by the ControlledContainerMixin + } + }); + }); }); diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index 66b76aa91..b2715cbec 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -1,10 +1,11 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; -import { fetchServer } from '../utils.ts'; +import { fetchServer, createStorage } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; +let alice: any; describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (allowSlugs: boolean) => { beforeAll(async () => { @@ -36,6 +37,7 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all }); await broker.start(); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -45,12 +47,12 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all let controlledResourceUri: string; test('Get the controlled resource', async () => { - await broker.call('address-book.waitForCreation'); + await alice.call('address-book.waitForCreation'); - controlledResourceUri = await broker.call('address-book.getUri'); + controlledResourceUri = await alice.call('address-book.getUri'); expect(controlledResourceUri).not.toBeUndefined(); - await expect(broker.call('address-book.get')).resolves.toMatchObject({ + await expect(alice.call('address-book.get')).resolves.toMatchObject({ type: 'vcard:AddressBook', 'vcard:title': 'My address book', 'vcard:note': 'This is added by the service' diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index 5dc181dd1..5e1dd1846 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -3,12 +3,13 @@ import { parse as parseLinkHeader } from 'http-link-header'; import { ServiceBroker } from 'moleculer'; import waitForExpect from 'wait-for-expect'; import { ControlledContainerMixin } from '@semapps/ldp'; -import { fetchServer } from '../utils.ts'; +import { fetchServer, createStorage } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; jest.setTimeout(20000); let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(false); @@ -41,6 +42,7 @@ beforeAll(async () => { }); await broker.start(); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -54,7 +56,7 @@ describe('Headers handling of LDP server', () => { test('Get headers', async () => { // @ts-expect-error This expression is not callable await waitForExpect(async () => { - placesContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Place', isContainer: true }); + placesContainerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Place', isContainer: true }); expect(placesContainerUri).not.toBeUndefined(); }); @@ -86,7 +88,7 @@ describe('Headers handling of LDP server', () => { test('Get container-specific headers', async () => { // @ts-expect-error This expression is not callable await waitForExpect(async () => { - eventsContainerUri = await broker.call('ldp.registry.getUri', { type: 'pair:Event', isContainer: true }); + eventsContainerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Event', isContainer: true }); expect(eventsContainerUri).not.toBeUndefined(); }); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 9eda1534a..f3f72799d 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -2,7 +2,7 @@ import { ServiceBroker } from 'moleculer'; import fs from 'fs'; import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; -import { as, pair, petr, solid, vcard } from '@semapps/ontologies'; +import { as, pair, petr, semapps, solid, vcard } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { fileURLToPath } from 'url'; @@ -75,7 +75,7 @@ const initialize = async (allowSlugs = true): Promise => { secure: false // TODO Remove when we move to Fuseki 5 }, containers, - ontologies: [as, pair, petr, solid, vcard], + ontologies: [as, pair, petr, solid, vcard, semapps], activitypub: false, webfinger: false, webid: false, diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index 881ba6a11..770a4eb80 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,23 +1,17 @@ import rdf from '@rdfjs/data-model'; import waitForExpect from 'wait-for-expect'; -import { ActionParamSchema, CallingOptions, ServiceBroker } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; +import { createStorage } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; -let webId: string; -let dataset: string; -let callAsAlice: (actionName: string, params: ActionParamSchema, options?: CallingOptions) => Promise; +let alice: any; beforeAll(async () => { broker = await initialize(true); await broker.start(); - ({ webId, dataset } = (await broker.call('solid-storage.create', { username: 'alice' })) as { - webId: string; - dataset: string; - }); - callAsAlice = (actionName, params, options = {}) => - broker.call(actionName, params, { ...options, meta: { ...options.meta, webId, dataset } }); + alice = await createStorage(broker, 'alice'); }); afterAll(async () => { @@ -33,11 +27,11 @@ describe('Resource CRUD operations', () => { test('Post resource in container', async () => { // @ts-expect-error This expression is not callable await waitForExpect(async () => { - containerUri = await callAsAlice('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); + containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); expect(containerUri).not.toBeUndefined(); }); - project1Uri = await callAsAlice('ldp.container.post', { + project1Uri = await alice.call('ldp.container.post', { containerUri, resource: { '@context': { @@ -65,7 +59,7 @@ describe('Resource CRUD operations', () => { }); test('Get resource', async () => { - project1 = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + project1 = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(project1).toMatchObject({ id: project1Uri, @@ -81,7 +75,7 @@ describe('Resource CRUD operations', () => { }); test('Put resource', async () => { - await callAsAlice('ldp.resource.put', { + await alice.call('ldp.resource.put', { resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -97,7 +91,7 @@ describe('Resource CRUD operations', () => { } }); - const updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + const updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -130,9 +124,9 @@ describe('Resource CRUD operations', () => { } ] }; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + let updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -155,9 +149,9 @@ describe('Resource CRUD operations', () => { } ]; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -179,9 +173,9 @@ describe('Resource CRUD operations', () => { } ]; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -211,9 +205,9 @@ describe('Resource CRUD operations', () => { } ]; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -236,9 +230,9 @@ describe('Resource CRUD operations', () => { } ]; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -258,9 +252,9 @@ describe('Resource CRUD operations', () => { // @ts-expect-error TS(2322): Type 'undefined' is not assignable to type '{ labe... Remove this comment to see the full error message resourceUpdated.hasLocation = undefined; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject['pair:hasLocation']).toBeUndefined(); @@ -269,9 +263,9 @@ describe('Resource CRUD operations', () => { { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' } ]; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -287,9 +281,9 @@ describe('Resource CRUD operations', () => { { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } ]; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project1Uri }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -316,12 +310,12 @@ describe('Resource CRUD operations', () => { } }; - const resourceUri = await callAsAlice('ldp.container.post', { + const resourceUri = await alice.call('ldp.container.post', { resource: resourceToPost, containerUri }); - project2 = await callAsAlice('ldp.resource.get', { resourceUri }); + project2 = await alice.call('ldp.resource.get', { resourceUri }); expect(project2).toMatchObject({ 'pair:hasLocation': { @@ -348,12 +342,12 @@ describe('Resource CRUD operations', () => { } ]; - const resourceUri3 = await callAsAlice('ldp.container.post', { + const resourceUri3 = await alice.call('ldp.container.post', { resource: resourceToPost, containerUri }); - const project3 = await callAsAlice('ldp.resource.get', { resourceUri: resourceUri3 }); + const project3 = await alice.call('ldp.resource.get', { resourceUri: resourceUri3 }); expect(project3).toMatchObject({ 'pair:hasLocation': [ @@ -388,12 +382,12 @@ describe('Resource CRUD operations', () => { } ]; - const resourceUri4 = await callAsAlice('ldp.container.post', { + const resourceUri4 = await alice.call('ldp.container.post', { resource: resourceToPost, containerUri }); - const project4 = await callAsAlice('ldp.resource.get', { resourceUri: resourceUri4 }); + const project4 = await alice.call('ldp.resource.get', { resourceUri: resourceUri4 }); expect(project4).toMatchObject({ 'pair:hasLocation': [ @@ -436,9 +430,9 @@ describe('Resource CRUD operations', () => { ] }; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - let updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project2.id }); + let updatedProject = await alice.call('ldp.resource.get', { resourceUri: project2.id }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -473,9 +467,9 @@ describe('Resource CRUD operations', () => { } ]; - await callAsAlice('ldp.resource.put', { resource: resourceUpdated }); + await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await callAsAlice('ldp.resource.get', { resourceUri: project2.id }); + updatedProject = await alice.call('ldp.resource.get', { resourceUri: project2.id }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', @@ -490,9 +484,9 @@ describe('Resource CRUD operations', () => { // Ensure dereferenced resources with IDs are not deleted by PUT test('PUT resource with ID', async () => { - const themeContainerUri = await callAsAlice('ldp.registry.getUri', { type: 'pair:Theme', isContainer: true }); + const themeContainerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Theme', isContainer: true }); - const themeUri = await callAsAlice('ldp.container.post', { + const themeUri = await alice.call('ldp.container.post', { containerUri: themeContainerUri, resource: { '@context': { @@ -505,7 +499,7 @@ describe('Resource CRUD operations', () => { }); // Add a relation to the theme - await callAsAlice('ldp.resource.put', { + await alice.call('ldp.resource.put', { resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -520,7 +514,7 @@ describe('Resource CRUD operations', () => { }); // Remove the relation to the theme - await callAsAlice('ldp.resource.put', { + await alice.call('ldp.resource.put', { resource: { '@context': { '@vocab': 'http://virtual-assembly.org/ontologies/pair#' @@ -532,7 +526,7 @@ describe('Resource CRUD operations', () => { }); // Ensure the theme has not been deleted - const theme = await callAsAlice('ldp.resource.get', { resourceUri: themeUri }); + const theme = await alice.call('ldp.resource.get', { resourceUri: themeUri }); expect(theme).toMatchObject({ id: themeUri, @@ -542,7 +536,7 @@ describe('Resource CRUD operations', () => { }); test('PATCH resource', async () => { - const projectUri = await callAsAlice('ldp.container.post', { + const projectUri = await alice.call('ldp.container.post', { containerUri, resource: { '@context': { @@ -554,7 +548,7 @@ describe('Resource CRUD operations', () => { slug: 'SemApps' }); - await callAsAlice('ldp.resource.patch', { + await alice.call('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ rdf.quad( @@ -577,7 +571,7 @@ describe('Resource CRUD operations', () => { ] }); - const project = await callAsAlice('ldp.resource.get', { resourceUri: projectUri }); + const project = await alice.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ id: projectUri, @@ -587,7 +581,7 @@ describe('Resource CRUD operations', () => { }); test('PATCH resource with blank nodes', async () => { - const projectUri = await callAsAlice('ldp.container.post', { + const projectUri = await alice.call('ldp.container.post', { containerUri, resource: { '@context': { @@ -599,7 +593,7 @@ describe('Resource CRUD operations', () => { slug: 'ActivityPods' }); - await callAsAlice('ldp.resource.patch', { + await alice.call('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ rdf.quad( @@ -620,7 +614,7 @@ describe('Resource CRUD operations', () => { ] }); - let project = await callAsAlice('ldp.resource.get', { resourceUri: projectUri }); + let project = await alice.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ id: projectUri, @@ -631,7 +625,7 @@ describe('Resource CRUD operations', () => { } }); - await callAsAlice('ldp.resource.patch', { + await alice.call('ldp.resource.patch', { resourceUri: projectUri, triplesToAdd: [ rdf.quad( @@ -652,7 +646,7 @@ describe('Resource CRUD operations', () => { ] }); - project = await callAsAlice('ldp.resource.get', { resourceUri: projectUri }); + project = await alice.call('ldp.resource.get', { resourceUri: projectUri }); expect(project).toMatchObject({ id: projectUri, @@ -671,10 +665,10 @@ describe('Resource CRUD operations', () => { }, 20000); test('Delete resource', async () => { - await callAsAlice('ldp.resource.delete', { + await alice.call('ldp.resource.delete', { resourceUri: project1Uri }); - await expect(callAsAlice('ldp.resource.get', { resourceUri: project1Uri })).rejects.toThrow(`not found`); + await expect(alice.call('ldp.resource.get', { resourceUri: project1Uri })).rejects.toThrow(`not found`); }); }); diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 8aa2f2593..067022886 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -2,6 +2,7 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import Redis from 'ioredis'; import * as CONFIG from './config.ts'; +import { ActionParamSchema, CallingOptions, ServiceBroker } from 'moleculer'; export const listDatasets = async () => { const response = await fetch(`${CONFIG.SPARQL_ENDPOINT}$/datasets`, { @@ -86,6 +87,19 @@ export const fetchServer = (url: any, options = {}) => { }); }; +export const createStorage = async (broker: ServiceBroker, username: string) => { + const { webId } = (await broker.call('solid-storage.create', { username })) as { webId: string }; + + const call = (actionName: string, params: ActionParamSchema = {}, options: CallingOptions = {}) => + broker.call(actionName, params, { ...options, meta: { ...options.meta, webId, dataset: username } }); + + return { + webId, + username, + call + }; +}; + export const clearQueue = async (queueServiceUrl: any) => { // Clear queue const redisClient = new Redis(queueServiceUrl); From 435d8f6885d232ea529fd2b54122994da69c2f8d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 30 Oct 2025 17:24:00 +0100 Subject: [PATCH 098/165] Handle resource creation in solid-storage service --- .../ldp/mixins/controlled-container.ts | 6 +-- .../ldp/mixins/controlled-resource.ts | 49 ++++--------------- .../ldp/services/registry/actions/register.ts | 1 - .../ldp/services/remote/actions/isRemote.ts | 24 ++++----- src/middleware/packages/ldp/types.ts | 1 - .../solid/services/preferences-file.ts | 4 +- .../packages/solid/services/storage.ts | 22 ++++++++- .../services/type-index/private-type-index.ts | 14 +++--- .../services/type-index/public-type-index.ts | 14 +++--- .../tests/ldp/controlled-resource.test.ts | 9 +--- 10 files changed, 58 insertions(+), 86 deletions(-) diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index e013cdfeb..a1b28f8f8 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -17,7 +17,7 @@ const ControlledContainerMixin = { async started() { const { path, controlledActions, ...rest } = this.settings; - this.registration = { + this.registration = await this.broker.call('ldp.registry.register', { path, name: this.name, isContainer: true, @@ -33,9 +33,7 @@ const ControlledContainerMixin = { ...this.settings.controlledActions }, ...rest - }; - - await this.broker.call('ldp.registry.register', this.registration); + }); }, actions: { post: { diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index 9a5e1f520..fd7ca0043 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -1,23 +1,24 @@ import { ServiceSchema, Errors } from 'moleculer'; -import { arrayOf, delay, getDatasetFromUri, getType } from '../utils.ts'; +import { delay, getDatasetFromUri } from '../utils.ts'; const { MoleculerError } = Errors; const ControlledResourceMixin = { settings: { - slug: null, - initialValue: {}, + path: null, + acceptedTypes: null, permissions: {}, controlledActions: {}, typeIndex: 'public' }, dependencies: ['ldp'], async started() { - const { initialValue, permissions, controlledActions, typeIndex } = this.settings; + const { path, acceptedTypes, permissions, controlledActions, typeIndex } = this.settings; - this.registration = { + this.registration = await this.broker.call('ldp.registry.register', { name: this.name, - acceptedTypes: getType(initialValue), + path, + acceptedTypes, isContainer: false, permissions, controlledActions: { @@ -27,40 +28,12 @@ const ControlledResourceMixin = { ...controlledActions }, typeIndex - }; - - // Do not await to avoid a circular dependency (for the public/private type indexes) - this.broker.call('ldp.registry.register', this.registration); + }); }, actions: { create: { - params: { - webId: { type: 'string', optional: true } - }, async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; - - let resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); - - if (!resourceUri) { - let resource = this.settings.initialValue; - - const baseUrl = await ctx.call('solid-storage.getBaseUrl', { webId }); - const allowSlugs = await ctx.call('ldp.getSetting', { key: 'allowSlugs' }); - resourceUri = await ctx.call('triplestore.named-graph.create', { - baseUrl, - slug: allowSlugs ? this.settings.slug : undefined - }); - - await ctx.call('ldp.resource.create', { - resourceUri, - resource: { '@id': resourceUri, ...resource }, - registration: this.registration, - webId: 'system' - }); - } - - return resourceUri; + return await ctx.call('ldp.resource.create', ctx.params); } }, @@ -71,9 +44,7 @@ const ControlledResourceMixin = { async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; - const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { - types: arrayOf(getType(this.settings.initialValue)) - }); + const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types: this.settings.acceptedTypes }); const results = await ctx.call('triplestore.query', { query: ` diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index baede3e73..f7d027053 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -7,7 +7,6 @@ const RegisterAction = { name: { type: 'string', optional: true }, isContainer: { type: 'boolean', default: true }, path: { type: 'string', optional: true }, - accept: { type: 'string', optional: true }, acceptedTypes: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, excludeFromMirror: { type: 'boolean', optional: true }, activateTombstones: { type: 'boolean', default: true }, diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index 94e24e679..6e7f48203 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -14,22 +14,18 @@ const Schema = { if (!urlJoin(resourceUri, '/').startsWith(this.settings.baseUrl)) { // The resource is on another server return true; + } else if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '/.'))) { + // For special URLs starting with a dot (such as /.well-known), don't check datasets + return true; } else { - // If the resource is on the same Pod provider, it may be on a different Pod - if (this.settings.podProvider) { - // For special URLs starting with a dot (such as /.well-known), don't check datasets - if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '/.'))) return false; - - if (!dataset) - throw new Error( - `Unable to know if ${resourceUri} is remote. In Pod provider config, the dataset must be provided` - ); - - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - return !urlJoin(resourceUri, '/').startsWith(`${urlJoin(this.settings.baseUrl, dataset)}/`); - } else { - return false; + // If the resource is on the same server, it may be on a different storage + if (!dataset) { + throw new Error( + `Unable to know if ${resourceUri} is remote. In Pod provider config, the dataset must be provided` + ); } + + return !urlJoin(resourceUri, '/').startsWith(`${urlJoin(this.settings.baseUrl, dataset)}/`); } } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index fe5b5d8f8..0767dc5ae 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -29,7 +29,6 @@ export interface Registration { name: string; isContainer: boolean; path?: string; - accept?: string; // Check if this is still used acceptedTypes?: string | string[]; shapeTreeUri?: string; readOnly?: boolean; diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index 191e4a1bc..022939139 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -7,9 +7,7 @@ const SolidPreferencesFileSchema = { name: 'solid-preferences-file' as const, mixins: [ControlledResourceMixin], settings: { - initialValue: { - type: 'pim:ConfigurationFile' - }, + acceptedTypes: ['pim:ConfigurationFile'], permissions: {} }, dependencies: ['ontologies'], diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 2af584e02..10efdffb9 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -52,7 +52,27 @@ const SolidStorageSchema = { for (const resourceRegistration of Object.values(resourceRegistrations)) { const { controlledActions } = resourceRegistration; - const resourceUri = await ctx.call(controlledActions.create, { webId }); + const baseUrl = await this.actions.getBaseUrl({ webId }, { parentCtx: ctx }); + const allowSlugs = await ctx.call('ldp.getSetting', { key: 'allowSlugs' }); + + // TODO Put this inside the ldp.resource.create action + const resourceUri = await ctx.call('triplestore.named-graph.create', { + baseUrl, + slug: allowSlugs ? this.settings.slug : undefined + }); + + await ctx.call(controlledActions.create, { + resourceUri, + resource: { '@id': resourceUri, '@type': resourceRegistration.acceptedTypes }, + registration: resourceRegistration, + webId: 'system' + }); + + await ctx.call('ldp.container.attach', { + containerUri: rootContainerUri, + resourceUri, + webId: 'system' + }); await ctx.call('type-index.register', { types: arrayOf(resourceRegistration.acceptedTypes), diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index b83b8728b..228f68a8b 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -1,4 +1,4 @@ -import { ControlledResourceMixin } from '@semapps/ldp'; +import { ControlledResourceMixin, getWebIdFromUri } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; @@ -6,21 +6,19 @@ const PrivateTypeIndexService = { name: 'private-type-index' as const, mixins: [ControlledResourceMixin], settings: { - slug: 'private-type-index', - initialValue: { - '@type': ['solid:TypeIndex', 'solid:UnlistedDocument'] - }, + path: 'private-type-index', + acceptedTypes: ['solid:TypeIndex', 'solid:UnlistedDocument'], permissions: {}, typeIndex: 'private' }, hooks: { after: { async create(ctx, res) { - const { webId } = ctx.params; - const resourceUri = res; + const { resourceUri } = res; + const webId = getWebIdFromUri(resourceUri); // Attach to preferences file, if available - const services = await ctx.call('$node.services'); + const services: ServiceSchema[] = await ctx.call('$node.services'); if (services.some(s => s.name === 'solid-preferences-file')) { const preferencesUri: string = await ctx.call('solid-preferences-file.getUri', { webId }); if (preferencesUri) { diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index e71407608..ef74c5e56 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -1,4 +1,4 @@ -import { ControlledResourceMixin, isWebId } from '@semapps/ldp'; +import { ControlledResourceMixin, getWebIdFromUri } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; @@ -6,10 +6,8 @@ const PublicTypeIndexService = { name: 'public-type-index' as const, mixins: [ControlledResourceMixin], settings: { - slug: 'public-type-index', - initialValue: { - '@type': ['solid:TypeIndex', 'solid:ListedDocument'] - }, + path: 'public-type-index', + acceptedTypes: ['solid:TypeIndex', 'solid:ListedDocument'], permissions: { anon: { read: true @@ -20,14 +18,14 @@ const PublicTypeIndexService = { hooks: { after: { async create(ctx, res) { - const { webId } = ctx.params; - const resourceUri = res; + const { resourceUri } = res; + const webId = getWebIdFromUri(resourceUri); await ctx.call('ldp.resource.patch', { resourceUri: webId, triplesToAdd: [ rdf.quad( - rdf.namedNode(webId), + rdf.namedNode(webId!), rdf.namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), rdf.namedNode(resourceUri) ) diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index b2715cbec..91b70e01f 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -15,11 +15,8 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all name: 'address-book', mixins: [ControlledResourceMixin], settings: { - slug: 'address-book', - initialValue: { - '@type': 'vcard:AddressBook', - 'vcard:title': 'My address book' - }, + path: 'address-book', + acceptedTypes: ['vcard:AddressBook'], permissions: { anon: { read: true @@ -54,7 +51,6 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all await expect(alice.call('address-book.get')).resolves.toMatchObject({ type: 'vcard:AddressBook', - 'vcard:title': 'My address book', 'vcard:note': 'This is added by the service' }); }); @@ -64,7 +60,6 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all status: 200, json: { type: 'vcard:AddressBook', - 'vcard:title': 'My address book', 'vcard:note': 'This is added by the service' } }); From 2e0b2cfc80f20a5c9f1873ce482e202b29db5081 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 30 Oct 2025 17:30:12 +0100 Subject: [PATCH 099/165] Rename acceptedTypes to types --- .../packages/activitypub/containers.ts | 4 +-- .../activitypub/subservices/activity.ts | 2 +- .../services/activitypub/subservices/api.ts | 4 +-- .../subservices/collection/index.ts | 2 +- .../packages/crypto/keys/key-container.ts | 2 +- .../crypto/keys/public-key-container.ts | 2 +- .../vc-credential-container.ts | 2 +- .../vc-presentation-container.ts | 2 +- .../ldp/mixins/controlled-container.ts | 4 +-- .../ldp/mixins/controlled-resource.ts | 8 +++--- .../services/registry/actions/getByTypes.ts | 2 +- .../ldp/services/registry/actions/register.ts | 7 ++--- src/middleware/packages/ldp/types.ts | 2 +- .../channels/notification-channel.mixin.ts | 8 +++--- .../solid/services/preferences-file.ts | 2 +- .../packages/solid/services/storage.ts | 6 ++-- .../services/type-index/private-type-index.ts | 2 +- .../services/type-index/public-type-index.ts | 2 +- src/middleware/packages/void/service.ts | 4 +-- src/middleware/packages/webid/service.ts | 2 +- .../tests/activitypub/initialize.ts | 4 +-- src/middleware/tests/interop/initialize.ts | 6 ++-- .../tests/ldp/controlled-container.test.ts | 2 +- .../tests/ldp/controlled-resource.test.ts | 2 +- src/middleware/tests/ldp/headers.test.ts | 2 +- src/middleware/tests/ldp/initialize.ts | 8 +++--- website/docs/middleware/activitypub/index.md | 2 +- website/docs/middleware/activitypub/relay.md | 19 +++++++------ .../middleware/ldp/controlled-container.md | 2 +- .../docs/middleware/ldp/image-processor.md | 20 ++++++------- website/docs/middleware/ldp/index.md | 2 +- .../middleware/ldp/orphan-files-deletion.md | 2 +- website/docs/middleware/ldp/registry.md | 14 +++++----- website/docs/others/reifiedRelation.md | 28 +++++++++++++------ 34 files changed, 96 insertions(+), 86 deletions(-) diff --git a/src/middleware/packages/activitypub/containers.ts b/src/middleware/packages/activitypub/containers.ts index 21abf7345..5c6c06955 100644 --- a/src/middleware/packages/activitypub/containers.ts +++ b/src/middleware/packages/activitypub/containers.ts @@ -3,10 +3,10 @@ import { FULL_ACTOR_TYPES, FULL_OBJECT_TYPES } from './constants.ts'; export default [ { path: '/as/actor', - acceptedTypes: Object.values(FULL_ACTOR_TYPES) + types: Object.values(FULL_ACTOR_TYPES) }, { path: '/as/object', - acceptedTypes: Object.values(FULL_OBJECT_TYPES) + types: Object.values(FULL_OBJECT_TYPES) } ]; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index d5c72dc48..3e7864393 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -16,7 +16,7 @@ const ActivityService = { podProvider: false, // ControlledContainerMixin settings path: '/as/activity', - acceptedTypes: Object.values(FULL_ACTIVITY_TYPES), + types: Object.values(FULL_ACTIVITY_TYPES), permissions: {}, newResourcesPermissions: {}, readOnly: true, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index 05a78619d..5e95d3175 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -35,7 +35,7 @@ const ApiService = { // If some actor containers are already registered, add the corresponding API routes const registrations: Registration[] = await this.broker.call('ldp.registry.list'); for (const registration of registrations) { - if (arrayOf(registration.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { + if (arrayOf(registration.types).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { // TODO Don't use full path anymore await this.broker.call('api.addRoute', { route: this.getBoxesRoute(path.join(basePath, `${registration.fullPath}/:actorSlug`)) @@ -92,7 +92,7 @@ const ApiService = { if ( !this.settings.podProvider && resourcesWithContainerPath && - arrayOf(registration.acceptedTypes).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) + arrayOf(registration.types).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) ) { await ctx.call('api.addRoute', { route: this.getBoxesRoute(path.join(basePath, `${registration.fullPath}/:actorSlug`)) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index a87228f60..5da656547 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -14,7 +14,7 @@ const CollectionService = { podProvider: false, // ControlledContainerMixin settings path: '/as/collection', - acceptedTypes: [ + types: [ 'https://www.w3.org/ns/activitystreams#Collection', 'https://www.w3.org/ns/activitystreams#OrderedCollection' ], diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index 50f09f348..b51599dc3 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -18,7 +18,7 @@ const KeysContainerSchema = { mixins: [ControlledContainerMixin], settings: { path: '/key', - acceptedTypes: Object.values(KEY_TYPES), + types: Object.values(KEY_TYPES), permissions: (webId: any, ctx: any) => { // If not a pod provider, the container is shared, so any user can append. return { diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index 9ab25725d..7120a6abd 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -15,7 +15,7 @@ const KeysPublicContainerSchema = { mixins: [ControlledContainerMixin], settings: { path: '/public-key', - acceptedTypes: Object.values(KEY_TYPES), + types: Object.values(KEY_TYPES), permissions: (webId: any, ctx: any) => { // If no pod provider, the container is shared, so any user can append. return { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index d0aaa7344..894bdc5b1 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -19,7 +19,7 @@ const VCCredentialsContainer = { path: null, excludeFromMirror: true, activateTombstones: false, - acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiableCredential'], + types: ['https://www.w3.org/2018/credentials#VerifiableCredential'], typeIndex: 'private', podProvider: null, permissions: (webId: any, ctx: any) => { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index 068bf815c..421ad52e6 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -20,7 +20,7 @@ const VCPresentationContainer = { path: null, excludeFromMirror: true, activateTombstones: false, - acceptedTypes: ['https://www.w3.org/2018/credentials#VerifiablePresentation'], + types: ['https://www.w3.org/2018/credentials#VerifiablePresentation'], typeIndex: 'private', podProvider: null, permissions: (webId: any, ctx: any) => { diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index a1b28f8f8..75ad57ba0 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -4,7 +4,7 @@ import { arrayOf, delay, getParentContainerUri } from '../utils.ts'; const ControlledContainerMixin = { settings: { path: null, - acceptedTypes: null, + types: null, permissions: null, newResourcesPermissions: null, controlledActions: {}, @@ -123,7 +123,7 @@ const ControlledContainerMixin = { getContainerUri: { async handler(ctx) { return await ctx.call('ldp.registry.getUri', { - type: arrayOf(this.settings.acceptedTypes)[0], + type: arrayOf(this.settings.types)[0], webId: ctx.params?.webId || ctx.meta?.webId }); } diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index fd7ca0043..ef768cdb8 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -6,19 +6,19 @@ const { MoleculerError } = Errors; const ControlledResourceMixin = { settings: { path: null, - acceptedTypes: null, + types: null, permissions: {}, controlledActions: {}, typeIndex: 'public' }, dependencies: ['ldp'], async started() { - const { path, acceptedTypes, permissions, controlledActions, typeIndex } = this.settings; + const { path, types, permissions, controlledActions, typeIndex } = this.settings; this.registration = await this.broker.call('ldp.registry.register', { name: this.name, path, - acceptedTypes, + types, isContainer: false, permissions, controlledActions: { @@ -44,7 +44,7 @@ const ControlledResourceMixin = { async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; - const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types: this.settings.acceptedTypes }); + const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types: this.settings.types }); const results = await ctx.call('triplestore.query', { query: ` diff --git a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts index e31347874..3be2386e5 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts @@ -13,7 +13,7 @@ const GetByTypesAction = { const { types } = ctx.params; const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); - return this.registrations.find(r => expandedTypes.some((t: any) => arrayOf(r.acceptedTypes).includes(t))); + return this.registrations.find(r => expandedTypes.some((t: any) => arrayOf(r.types).includes(t))); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index f7d027053..d5679c730 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -7,7 +7,7 @@ const RegisterAction = { name: { type: 'string', optional: true }, isContainer: { type: 'boolean', default: true }, path: { type: 'string', optional: true }, - acceptedTypes: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, + types: { type: 'multi', rules: [{ type: 'array' }, { type: 'string' }], optional: true }, excludeFromMirror: { type: 'boolean', optional: true }, activateTombstones: { type: 'boolean', default: true }, permissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, @@ -19,9 +19,8 @@ const RegisterAction = { async handler(ctx) { let registration: Registration = { ...this.settings.defaultOptions, ...ctx.params }; - registration.acceptedTypes = - registration.acceptedTypes && - (await ctx.call('jsonld.parser.expandTypes', { types: registration.acceptedTypes })); + registration.types = + registration.types && (await ctx.call('jsonld.parser.expandTypes', { types: registration.types })); if (!registration.name && registration.path) registration.name = registration.path; diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index 0767dc5ae..101a04ed8 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -29,7 +29,7 @@ export interface Registration { name: string; isContainer: boolean; path?: string; - acceptedTypes?: string | string[]; + types?: string | string[]; shapeTreeUri?: string; readOnly?: boolean; activateTombstones?: boolean; diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index dac85b607..44df1e79b 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -28,7 +28,7 @@ const Schema = { // Channel properties (to be overridden) channelType: null, // E.g. 'WebhookChannel2023', typePredicate: null, // E.g. 'notify:WebhookChannel2023', defaults to `notify:${this.settings.channelType}`, - acceptedTypes: [], // E.g. ['notify:WebhookChannel2023'], + types: [], // E.g. ['notify:WebhookChannel2023'], sendOrReceive: null, // Either 'send' or 'receive' (will set `sendTo` or `receiveFrom` URIs). baseUrl: null, @@ -58,7 +58,7 @@ const Schema = { throw new Error('The setting `sendOrReceive` must be set to `send` or `receive`, depending on channelType.'); if (!this.settings.channelType) throw new Error('The setting channelType must be set (e.g. `WebhookChannel2023`).'); if (!this.settings.typePredicate) this.settings.typePredicate = `notify:${this.settings.channelType}`; - if (this.settings.acceptedTypes?.length <= 0) this.settings.acceptedTypes = [this.settings.typePredicate]; + if (this.settings.types?.length <= 0) this.settings.types = [this.settings.typePredicate]; }, async started() { const { channelType } = this.settings; @@ -86,8 +86,8 @@ const Schema = { const { webId } = ctx.meta; // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... - if (!this.settings.acceptedTypes.includes(type) && this.settings.channelType !== type) - throw new Error(`Only one of ${this.settings.acceptedTypes} is accepted on this endpoint`); + if (!this.settings.types.includes(type) && this.settings.channelType !== type) + throw new Error(`Only one of ${this.settings.types} is accepted on this endpoint`); // Ensure topic exist (LDP resource, container or collection) const exists = await ctx.call('ldp.resource.exist', { diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index 022939139..db6d54c4d 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -7,7 +7,7 @@ const SolidPreferencesFileSchema = { name: 'solid-preferences-file' as const, mixins: [ControlledResourceMixin], settings: { - acceptedTypes: ['pim:ConfigurationFile'], + types: ['pim:ConfigurationFile'], permissions: {} }, dependencies: ['ontologies'], diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 10efdffb9..36d365112 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -63,7 +63,7 @@ const SolidStorageSchema = { await ctx.call(controlledActions.create, { resourceUri, - resource: { '@id': resourceUri, '@type': resourceRegistration.acceptedTypes }, + resource: { '@id': resourceUri, '@type': resourceRegistration.types }, registration: resourceRegistration, webId: 'system' }); @@ -75,7 +75,7 @@ const SolidStorageSchema = { }); await ctx.call('type-index.register', { - types: arrayOf(resourceRegistration.acceptedTypes), + types: arrayOf(resourceRegistration.types), uri: resourceUri, webId, isContainer: false, @@ -98,7 +98,7 @@ const SolidStorageSchema = { }); await ctx.call('type-index.register', { - types: arrayOf(containerRegistration.acceptedTypes), + types: arrayOf(containerRegistration.types), uri: containerUri, webId, isContainer: true, diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index 228f68a8b..a3427a14c 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -7,7 +7,7 @@ const PrivateTypeIndexService = { mixins: [ControlledResourceMixin], settings: { path: 'private-type-index', - acceptedTypes: ['solid:TypeIndex', 'solid:UnlistedDocument'], + types: ['solid:TypeIndex', 'solid:UnlistedDocument'], permissions: {}, typeIndex: 'private' }, diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index ef74c5e56..1f6be8a9b 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -7,7 +7,7 @@ const PublicTypeIndexService = { mixins: [ControlledResourceMixin], settings: { path: 'public-type-index', - acceptedTypes: ['solid:TypeIndex', 'solid:ListedDocument'], + types: ['solid:TypeIndex', 'solid:ListedDocument'], permissions: { anon: { read: true diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 3798ed588..921e43c00 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -254,11 +254,11 @@ const VoidSchema = { const res = await Promise.all( registrations - .filter(c => c.acceptedTypes) + .filter(c => c.types) .map(async c => { const partition = { 'http://rdfs.org/ns/void#uriSpace': urlJoin(baseUrl, c.path), - 'http://rdfs.org/ns/void#class': arrayOf(c.acceptedTypes) + 'http://rdfs.org/ns/void#class': arrayOf(c.types) }; // @ts-expect-error TS(18046): 'c' is of type 'unknown'. if (c.excludeFromMirror) partition['http://semapps.org/ns/core#doNotMirror'] = true; diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 604848d91..ad4da7f85 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -11,7 +11,7 @@ const WebIdService = { podProvider: false, // ControlledContainerMixin path: '/foaf/person', - acceptedTypes: ['http://xmlns.com/foaf/0.1/Person'], + types: ['http://xmlns.com/foaf/0.1/Person'], // DereferenceMixin dereferencePlan: [ { diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 986a49863..081aef7cb 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -15,7 +15,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const containers = [ { path: '/as/object', - acceptedTypes: Object.values(FULL_OBJECT_TYPES) + types: Object.values(FULL_OBJECT_TYPES) } ]; @@ -66,7 +66,7 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que }, webid: { path: '/as/actor', - acceptedTypes: Object.values(FULL_ACTOR_TYPES) + types: Object.values(FULL_ACTOR_TYPES) } } }); diff --git a/src/middleware/tests/interop/initialize.ts b/src/middleware/tests/interop/initialize.ts index 1a9a0f5ba..3b2531777 100644 --- a/src/middleware/tests/interop/initialize.ts +++ b/src/middleware/tests/interop/initialize.ts @@ -19,11 +19,11 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const containers = [ { path: '/resources', - acceptedTypes: ['pair:Resource'] + types: ['pair:Resource'] }, { path: '/protected-resources', - acceptedTypes: ['pair:Resource'], + types: ['pair:Resource'], permissions: {}, newResourcesPermissions: {} } @@ -89,7 +89,7 @@ const initialize = async ( }, webid: { path: '/as/actor', - acceptedTypes: [FULL_ACTOR_TYPES.PERSON, FULL_ACTOR_TYPES.APPLICATION] + types: [FULL_ACTOR_TYPES.PERSON, FULL_ACTOR_TYPES.APPLICATION] } } }); diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 3bda93e70..be39e3134 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -18,7 +18,7 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al mixins: [ControlledContainerMixin], settings: { path: '/videos', // Will be ignored when slugs are not allowed - acceptedTypes: ['as:Video'], + types: ['as:Video'], permissions: { anon: { read: true // We want to be able to fetch the container anonymously diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index 91b70e01f..31d004c6f 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -16,7 +16,7 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all mixins: [ControlledResourceMixin], settings: { path: 'address-book', - acceptedTypes: ['vcard:AddressBook'], + types: ['vcard:AddressBook'], permissions: { anon: { read: true diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index 5e1dd1846..3670836bd 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -19,7 +19,7 @@ beforeAll(async () => { mixins: [ControlledContainerMixin], settings: { path: '/events', - acceptedTypes: ['pair:Event'], + types: ['pair:Event'], permissions: { anon: { read: true, diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index f3f72799d..a9ee77f2c 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -22,22 +22,22 @@ const permissions = { const containers = [ { path: '/resources', - acceptedTypes: ['pair:Project'], + types: ['pair:Project'], permissions }, { path: '/places', - acceptedTypes: ['pair:Place'], + types: ['pair:Place'], permissions }, { path: '/themes', - acceptedTypes: ['pair:Theme'], + types: ['pair:Theme'], permissions }, { path: '/files', - acceptedTypes: ['semapps:File'], + types: ['semapps:File'], permissions } ]; diff --git a/website/docs/middleware/activitypub/index.md b/website/docs/middleware/activitypub/index.md index d64c17066..f38868386 100644 --- a/website/docs/middleware/activitypub/index.md +++ b/website/docs/middleware/activitypub/index.md @@ -65,7 +65,7 @@ module.exports = { ### Configure the LDP containers -The containers for actors and objects are handled through the LDP service. You need to define containers with ActivityStreams's actors and objects in the `acceptedTypes`. Alternatively, you can load the default containers from the `@semapps/activitypub` package as below: +The containers for actors and objects are handled through the LDP service. You need to define containers with ActivityStreams's actors and objects in the `types`. Alternatively, you can load the default containers from the `@semapps/activitypub` package as below: ```js const { LdpService } = require('@semapps/ldp'); diff --git a/website/docs/middleware/activitypub/relay.md b/website/docs/middleware/activitypub/relay.md index cf37f8fb1..4c3461163 100644 --- a/website/docs/middleware/activitypub/relay.md +++ b/website/docs/middleware/activitypub/relay.md @@ -4,7 +4,6 @@ title: RelayService An instance-level ActivityPub actor. Used by the [InferenceService](../inference.md) and the [SynchronizerService](../sync/synchronizer.md). - ## Usage ```js @@ -26,15 +25,17 @@ This service will create an ActivityPub actor there, with the name `relay`. You could put the actor in the `/users` container, or in a dedicated `/bots` container. ```js -const containers = [{ - path: '/users', - acceptedTypes: ['pair:Person', 'Application'], // The Application type is important - blankNodes: ['sec:publicKey'], - excludeFromMirror: true -}]; +const containers = [ + { + path: '/users', + types: ['pair:Person', 'Application'], // The Application type is important + blankNodes: ['sec:publicKey'], + excludeFromMirror: true + } +]; ``` -You also most probably want to use the option `excludeFromMirror: true`. It will hide prevent this container from being [mirrored](../sync/mirror.md). +You also most probably want to use the option `excludeFromMirror: true`. It will hide prevent this container from being [mirrored](../sync/mirror.md). ## Actions @@ -45,5 +46,5 @@ The following service actions are available: Get the Relay ActivityPub actor ##### Return -The full data of the Relay actor. +The full data of the Relay actor. diff --git a/website/docs/middleware/ldp/controlled-container.md b/website/docs/middleware/ldp/controlled-container.md index 9ecc0add3..649d32a30 100644 --- a/website/docs/middleware/ldp/controlled-container.md +++ b/website/docs/middleware/ldp/controlled-container.md @@ -17,7 +17,7 @@ module.exports = { mixins: [ControlledContainerMixin], settings: { path: '/users', - acceptedTypes: ['foaf:Person'], + types: ['foaf:Person'], // Other container options }, actions: { diff --git a/website/docs/middleware/ldp/image-processor.md b/website/docs/middleware/ldp/image-processor.md index aba94ccbe..6fd6185c6 100644 --- a/website/docs/middleware/ldp/image-processor.md +++ b/website/docs/middleware/ldp/image-processor.md @@ -6,18 +6,17 @@ Process images as soon as they are uploaded, or process them all together. Currently JPEG, PNG and WebP files are supported. They can be resized or their quality can be reduced. Since we use the [sharp](https://sharp.pixelplumbing.com) library, many more options could be added. - ## Usage ```js -const { ControlledContainerMixin, ImageProcessorMixin } = require("@semapps/ldp"); +const { ControlledContainerMixin, ImageProcessorMixin } = require('@semapps/ldp'); module.exports = { name: 'file', mixins: [ImageProcessorMixin, ControlledContainerMixin], // In that order settings: { path: '/files', - acceptedTypes: ['semapps:File'], + types: ['semapps:File'], imageProcessor: { maxWidth: 1900, maxHeight: 1000, @@ -26,23 +25,21 @@ module.exports = { webp: {} } } -} +}; ``` - ### Settings All settings relative to this mixin should be set in a `imageProcessor` key. | Property | Type | Default | Description | -|-------------|-----------|-------------------------|-----------------------------------------------------------------------------------------| +| ----------- | --------- | ----------------------- | --------------------------------------------------------------------------------------- | | `maxWidth` | `Integer` | 1900 | Reduce all images whose width is larger than this number | | `maxHeight` | `Integer` | 1000 | Reduce all images whose height is larger than this number | | `jpeg` | `Object` | { quality: 85 } | See sharp [jpeg](https://sharp.pixelplumbing.com/api-output#jpeg) for available options | | `png` | `Object` | { compressionLevel: 8 } | See sharp [png](https://sharp.pixelplumbing.com/api-output#png) for available options | | `webp` | `Object` | { quality: 85 } | See sharp [webp](https://sharp.pixelplumbing.com/api-output#webp) for available options | - ### Actions #### `processImage` @@ -50,16 +47,17 @@ All settings relative to this mixin should be set in a `imageProcessor` key. Process the given image using the settings above. ##### Parameters -| Property | Type | Default | Description | -|---------------|----------|---------------------|---------------------------------------------------------------------------------------------| -| `resourceUri` | `Object` | **required** | URI of the resource (must be of type `semapps:File`) | +| Property | Type | Default | Description | +| ------------- | -------- | ------------ | ---------------------------------------------------- | +| `resourceUri` | `Object` | **required** | URI of the resource (must be of type `semapps:File`) | #### `processAllImages` Process all images in the container using the settings above. ##### Parameters + | Property | Type | Default | Description | -|----------|----------|---------|--------------------------------------------------------------------| +| -------- | -------- | ------- | ------------------------------------------------------------------ | | `webId` | `String` | | In a POD provider config, this allows to define the POD to process | diff --git a/website/docs/middleware/ldp/index.md b/website/docs/middleware/ldp/index.md index b23c6d98e..d1fb2547c 100644 --- a/website/docs/middleware/ldp/index.md +++ b/website/docs/middleware/ldp/index.md @@ -83,7 +83,7 @@ The following options can be set for each container, or they can be set in the ` | Property | Type | Default | Description | | ------------------------- | --------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `accept` | `String` | "text/turtle" | Type to return (`application/ld+json`, `text/turtle` or `application/n-triples`) | -| `acceptedTypes` | `Array` | | RDF classes accepted in this container. This is not enforced but used by some services to identify containers. | +| `types` | `Array` | | RDF classes accepted in this container. This is not enforced but used by some services to identify containers. | | `excludeFromMirror` | `Boolean` | false | If true, other servers will not be able to [mirror](../sync/mirror) this container. | | `activateTombstones` | `Boolean` | true | If true, and if the ActivityPubService setting is also true, [Tombstones](https://www.w3.org/TR/activitypub/#delete-activity-outbox) will replace deleted resources. | | `permissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions of the container itself. For the permissions object shape, see [`webacl.resource.addRights`](resource.md#addrights) action. | diff --git a/website/docs/middleware/ldp/orphan-files-deletion.md b/website/docs/middleware/ldp/orphan-files-deletion.md index 04f022009..290fe6489 100644 --- a/website/docs/middleware/ldp/orphan-files-deletion.md +++ b/website/docs/middleware/ldp/orphan-files-deletion.md @@ -15,7 +15,7 @@ module.exports = { mixins: [ControlledContainerMixin, OrphanFilesDeletionMixin], settings: { path: '/files', - acceptedTypes: ['semapps:File'], + types: ['semapps:File'], orphanFilesDeletion: { cronJob: { // Optional, can be set to false diff --git a/website/docs/middleware/ldp/registry.md b/website/docs/middleware/ldp/registry.md index fa5cab1a8..fd3406e5f 100644 --- a/website/docs/middleware/ldp/registry.md +++ b/website/docs/middleware/ldp/registry.md @@ -10,7 +10,7 @@ The following service actions are available: ### `getByType` -Get the first container registration matching with the `acceptedTypes`. +Get the first container registration matching with the `types`. ##### Parameters @@ -71,12 +71,12 @@ Register a container. ##### Parameters -| Property | Type | Default | Description | -| --------------- | ------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| `path` | `String` | | Path of the container. If not provided, will be generated with [`ldp.container.getPath`](container.md#getpath) and the `acceptedTypes` | -| `name` | `String` | | Name of the container, used to store it (path will be used if none are provided) | -| `acceptedTypes` | `Array` or `String` | | RDF classes accepted in this container | -| `dataset` | `String` | | If provided, will register the container only for the given dataset | +| Property | Type | Default | Description | +| --------- | ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------ | +| `path` | `String` | | Path of the container. If not provided, will be generated with [`ldp.container.getPath`](container.md#getpath) and the `types` | +| `name` | `String` | | Name of the container, used to store it (path will be used if none are provided) | +| `types` | `Array` or `String` | | RDF classes accepted in this container | +| `dataset` | `String` | | If provided, will register the container only for the given dataset | For other available parameters, see the [container options](index.md#container-options). diff --git a/website/docs/others/reifiedRelation.md b/website/docs/others/reifiedRelation.md index fc686bbe6..a70d69284 100644 --- a/website/docs/others/reifiedRelation.md +++ b/website/docs/others/reifiedRelation.md @@ -3,35 +3,41 @@ title: How to manage reified relations in Archipelago + LDP server --- # Concept + Reified relation are relations between 2 subjects (Class1 & Class2) which host other information. The role between an Organization and a User for example. Those relations require creation of à third Class hosting Object Property which refer Class1 and Class2. This third Class host Data Property or Object Property. That Note use exemple: -Entity1 typed by Classe1 and Entity2 types by Class2 linked by a reified relations type by ReifiedClass which contains one ObjectProperty other (Entity3 for example). +Entity1 typed by Classe1 and Entity2 types by Class2 linked by a reified relations type by ReifiedClass which contains one ObjectProperty other (Entity3 for example). Class1 and Class2 linked by ReifiedClass which contains one ObjectProperty typed Class3 everytime. Class1 can use ObjectProperty class1ToReifiedClass Class2 can use ObjectProperty class2ToReifiedClass ReifiedClass can use ObjectProperty reifiedClassToClass1 and reifiedClassToClass2 - # Use + ## 1 : configure LDP container + Reified RElation wwill be send in only one object from React-Admin to LDP server. Server have to extract embended subjects (reified relation), create thos in specified container and link main subject to extracted subjects. **ldp.service.js -> settings** + ``` containers :[ { path: '/classe1', - acceptedTypes: ['onto:Class1'], + types: ['onto:Class1'], disassembly: [{ path: 'onto:class1ToReifiedClass', container: 'mySettingsBaseUrl/reifiedClass' }] }, { path: '/reifiedClass', - acceptedTypes: ['onto:ReifiedClass'] + types: ['onto:ReifiedClass'] } ] ``` + ## 2 : configure DataProvider : forceArray + **resouces -> Classe1 -> index.js** + ``` dataModel: { types: ['onto:Class1'], @@ -41,13 +47,17 @@ dataModel: { forceArray: ['onto:class1ToReifiedClass'] // REQUIRE React Admin Component below not support single value }, ``` + ### 3 : implement interface : ReificationArrayInput + WARNIG : no properties set to tag no considering by this documentation considering -* resources -> Classe2 directory exist and well configurated -* ReferenceInput and SelectInput used in this example but you can use every other component to assess reified relation properties. + +- resources -> Classe2 directory exist and well configurated +- ReferenceInput and SelectInput used in this example but you can use every other component to assess reified relation properties. **resouces -> Classe1 -> Edit.js** + ``` import { ReificationArrayInput } from '@semapps/semantic-data-provider'; import { Edit } from '@semapps/archipelago-layout'; @@ -74,6 +84,8 @@ export default Classe1Edit; ``` # inverse relation + this example not explain invers reified relation implementation but concets and use are the same. -* inverse relation have to be set on ontology specified in owl specified on ontologies file. -* container, datamodel and edit interface of Classe 2 have to be configured + +- inverse relation have to be set on ontology specified in owl specified on ontologies file. +- container, datamodel and edit interface of Classe 2 have to be configured From f1b34558d031c51fc10226f5a47451c777f1f911 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 30 Oct 2025 20:07:41 +0100 Subject: [PATCH 100/165] Refactor AccountService --- src/middleware/packages/auth/index.ts | 4 +- .../packages/auth/mixins/auth.sso.ts | 32 +++------ src/middleware/packages/auth/mixins/auth.ts | 21 ------ .../packages/auth/services/account.ts | 34 +++++----- .../packages/auth/services/auth.cas.ts | 1 - .../packages/auth/services/auth.local.ts | 39 +++-------- .../packages/auth/services/auth.oidc.ts | 1 - src/middleware/packages/auth/types.ts | 8 +++ .../packages/solid/services/storage.ts | 12 ++-- src/middleware/packages/webid/service.ts | 68 +------------------ src/middleware/tests/ldp/api.test.ts | 4 +- src/middleware/tests/ldp/binary.test.ts | 4 +- src/middleware/tests/ldp/container.test.ts | 4 +- .../tests/ldp/content-negotiation.test.ts | 4 +- .../tests/ldp/controlled-container.test.ts | 6 +- .../tests/ldp/controlled-resource.test.ts | 4 +- src/middleware/tests/ldp/headers.test.ts | 4 +- src/middleware/tests/ldp/resource.test.ts | 4 +- src/middleware/tests/utils.ts | 9 +-- website/docs/middleware/auth.md | 4 -- 20 files changed, 77 insertions(+), 190 deletions(-) create mode 100644 src/middleware/packages/auth/types.ts diff --git a/src/middleware/packages/auth/index.ts b/src/middleware/packages/auth/index.ts index a14ffe541..052d77fbb 100644 --- a/src/middleware/packages/auth/index.ts +++ b/src/middleware/packages/auth/index.ts @@ -5,6 +5,7 @@ import AuthAccountService from './services/account.ts'; import AuthJWTService from './services/jwt.ts'; import AuthMigrationService from './services/migration.ts'; import AuthMailService from './services/mail.ts'; +import { Account } from './types.ts'; export { AuthCASService, @@ -13,5 +14,6 @@ export { AuthAccountService, AuthJWTService, AuthMigrationService, - AuthMailService + AuthMailService, + Account }; diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index b6041073c..568d10300 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -6,6 +6,7 @@ import AuthMixin from './auth.ts'; import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; import redirectToFront from '../middlewares/redirectToFront.ts'; import localLogout from '../middlewares/localLogout.ts'; +import { Account } from '../types.ts'; const AuthSSOMixin = { mixins: [AuthMixin], @@ -14,7 +15,6 @@ const AuthSSOMixin = { jwtPath: null, registrationAllowed: true, reservedUsernames: [], - webIdSelection: [], // SSO-specific settings sessionSecret: 's€m@pps', selectSsoData: null @@ -27,43 +27,33 @@ const AuthSSOMixin = { const profileData = this.settings.selectSsoData ? await this.settings.selectSsoData(ssoData) : ssoData; // TODO use UUID to identify unique accounts with SSO - const existingAccounts = await ctx.call('auth.account.find', { query: { email: profileData.email } }); + const existingAccounts: Account[] = await ctx.call('auth.account.find', { + query: { email: profileData.email } + }); - let accountData; - let webId; + let webId: string; let newUser; if (existingAccounts.length > 0) { - accountData = existingAccounts[0]; - webId = accountData.webId; + webId = existingAccounts[0].webId; newUser = false; // TODO update account with recent profileData information - ctx.emit('auth.connected', { webId, accountData, ssoData }, { meta: { webId: null, dataset: null } }); + ctx.emit('auth.connected', { webId }, { meta: { webId: null, dataset: null } }); } else { if (!this.settings.registrationAllowed) { throw new Error('registration.not-allowed'); } - accountData = await ctx.call('auth.account.create', { + ({ webId } = (await ctx.call('auth.account.create', { uuid: profileData.uuid, email: profileData.email, username: profileData.username - }); - webId = await ctx.call( - 'webid.createWebId', - this.pickWebIdData({ nick: accountData.username, ...profileData }) - ); - newUser = true; + })) as Account); - // Link the webId with the account - await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); + newUser = true; - ctx.emit( - 'auth.registered', - { webId, profileData, accountData, ssoData }, - { meta: { webId: null, dataset: null } } - ); + ctx.emit('auth.registered', { webId }, { meta: { webId: null, dataset: null } }); } const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index 51f248c60..9316c1a3a 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -69,8 +69,6 @@ const AuthMixin = { reservedUsernames: [], minPasswordLength: 1, minUsernameLength: 1, - webIdSelection: [], - accountSelection: [], accountsDataset: 'settings', podProvider: false }, @@ -236,25 +234,6 @@ const AuthMixin = { }, getApiRoutes() { throw new Error('getApiRoutes must be implemented by the service'); - }, - pickWebIdData(data) { - if (this.settings.webIdSelection.length > 0) { - return Object.fromEntries( - this.settings.webIdSelection.filter((key: any) => key in data).map((key: any) => [key, data[key]]) - ); - } else { - // TODO do not return anything if webIdSelection is empty, to conform with pickAccountData - return data || {}; - } - }, - pickAccountData(data) { - if (this.settings.accountSelection.length > 0) { - return Object.fromEntries( - this.settings.accountSelection.filter((key: any) => key in data).map((key: any) => [key, data[key]]) - ); - } else { - return {}; - } } } } satisfies Partial; diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 56445d212..15713f2a2 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -6,17 +6,18 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; import crypto from 'crypto'; import { ServiceSchema } from 'moleculer'; +import { Account } from '../types.ts'; // Taken from https://stackoverflow.com/a/9204568/7900695 const emailRegexp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; -const AuthAccountSchema = { +const AuthAccountService = { name: 'auth.account' as const, mixins: [DbService], adapter: new TripleStoreAdapter({ type: 'AuthAccount', dataset: 'settings' }), settings: { idField: '@id', - reservedUsernames: ['relay'], + reservedUsernames: [], minPasswordLength: 1, minUsernameLength: 1 }, @@ -24,7 +25,7 @@ const AuthAccountSchema = { actions: { create: { async handler(ctx) { - let { uuid, username, password, email, webId, ...rest } = ctx.params; + let { uuid, username, password, email } = ctx.params; // FORMAT AND VERIFY PASSWORD @@ -81,8 +82,9 @@ const AuthAccountSchema = { throw new Error('You must provide at least a username or an email address'); } + const { webId }: { webId: string } = await ctx.call('solid-storage.create', { username }); + return await this._create(ctx, { - ...rest, uuid, username, email, @@ -110,7 +112,7 @@ const AuthAccountSchema = { // If the username includes a @, assume it is an email const query = username.includes('@') ? { email: username } : { username }; - const accounts = await this._find(ctx, { query }); + const accounts: Account[] = await this._find(ctx, { query }); if (accounts.length > 0) { const passwordMatch = await this.comparePassword(password, accounts[0].hashedPassword); @@ -177,7 +179,7 @@ const AuthAccountSchema = { async handler(ctx) { const { webId, password } = ctx.params; const hashedPassword = await this.hashPassword(password); - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); return await this._update(ctx, { '@id': account['@id'], @@ -190,7 +192,7 @@ const AuthAccountSchema = { async handler(ctx) { const { webId, token, password } = ctx.params; const hashedPassword = await this.hashPassword(password); - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); if (account.resetPasswordToken !== token) { throw new Error('auth.password.invalid_reset_token'); @@ -222,7 +224,7 @@ const AuthAccountSchema = { findDatasetByWebId: { async handler(ctx) { const webId = ctx.params.webId || ctx.meta.webId; - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); return account?.username; } }, @@ -231,11 +233,10 @@ const AuthAccountSchema = { async handler(ctx) { const { webId } = ctx.meta; - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); return { - email: account.email, - preferredLocale: account.preferredLocale + email: account.email }; } }, @@ -243,9 +244,8 @@ const AuthAccountSchema = { updateAccountSettings: { async handler(ctx) { const { currentPassword, email, newPassword } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { webId } = ctx.meta; - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); const passwordMatch = await this.comparePassword(currentPassword, account.hashedPassword); let params = {}; @@ -277,7 +277,7 @@ const AuthAccountSchema = { deleteByWebId: { async handler(ctx) { const { webId } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); if (account) { await this._remove(ctx, { id: account['@id'] }); @@ -292,7 +292,7 @@ const AuthAccountSchema = { // Remove email and password from an account, set deletedAt timestamp. async handler(ctx) { const { webId } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); return await this._update(ctx, { // Set all values to undefined... @@ -368,12 +368,12 @@ const AuthAccountSchema = { } } satisfies ServiceSchema; -export default AuthAccountSchema; +export default AuthAccountService; declare global { export namespace Moleculer { export interface AllServices { - [AuthAccountSchema.name]: typeof AuthAccountSchema; + [AuthAccountService.name]: typeof AuthAccountService; } } } diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts index fbec8a50c..26bb1bca9 100644 --- a/src/middleware/packages/auth/services/auth.cas.ts +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -13,7 +13,6 @@ const AuthCASService = { jwtPath: null, registrationAllowed: true, reservedUsernames: [], - webIdSelection: [], // SSO-specific settings sessionSecret: 's€m@pps', selectSsoData: null, diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 98dc084d3..1f4096969 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -2,6 +2,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-local'; import { ServiceSchema, Errors } from 'moleculer'; +import { Account } from '../types.ts'; import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; import AuthMailService from './mail.ts'; @@ -18,8 +19,6 @@ const AuthLocalService = { reservedUsernames: [], minPasswordLength: 1, minUsernameLength: 1, - webIdSelection: [], - accountSelection: [], formUrl: null, mail: { from: null, @@ -52,39 +51,22 @@ const AuthLocalService = { actions: { signup: { async handler(ctx) { - const { username, email, password, ...rest } = ctx.params; + const { username, email, password } = ctx.params; // This is going to get in our way otherwise when waiting for completions. ctx.meta.skipObjectsWatcher = true; - let accountData = await ctx.call('auth.account.create', { + const { webId }: { webId: string } = await ctx.call('auth.account.create', { username, email, - password, - ...this.pickAccountData(rest) + password }); - try { - const profileData = { nick: accountData.username, email: accountData.email, ...rest }; - const webId = await ctx.call('webid.createWebId', this.pickWebIdData(profileData), { - meta: { - isSignup: true // Allow services to handle directly the webId creation if it is generated by the AuthService - } - }); - - // Link the webId with the account - accountData = await ctx.call('auth.account.attachWebId', { accountUri: accountData['@id'], webId }); + ctx.emit('auth.registered', { webId }); - ctx.emit('auth.registered', { webId, profileData, accountData }); + const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); - const token = await ctx.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); - - return { token, webId, newUser: true }; - } catch (e) { - // Delete account if resource creation failed, or it may cause problems when retrying - await ctx.call('auth.account.remove', { id: accountData['@id'] }); - throw e; - } + return { token, webId, newUser: true }; } }, @@ -92,7 +74,7 @@ const AuthLocalService = { async handler(ctx) { const { username, password } = ctx.params; - const accountData = await ctx.call('auth.account.verify', { username, password }); + const accountData: Account = await ctx.call('auth.account.verify', { username, password }); ctx.emit('auth.connected', { webId: accountData.webId, accountData }, { meta: { webId: null, dataset: null } }); @@ -120,7 +102,6 @@ const AuthLocalService = { } } ctx.meta.$statusCode = 302; - // @ts-expect-error TS(2339): Property '$location' does not exist on type '{}'. ctx.meta.$location = formUrl.toString(); } else { throw new Error('No formUrl defined in auth.local settings'); @@ -132,7 +113,7 @@ const AuthLocalService = { async handler(ctx) { const { email } = ctx.params; - const account = await ctx.call('auth.account.findByEmail', { email }); + const account: Account = await ctx.call('auth.account.findByEmail', { email }); if (!account) { throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); @@ -151,7 +132,7 @@ const AuthLocalService = { async handler(ctx) { const { email, token, password } = ctx.params; - const account = await ctx.call('auth.account.findByEmail', { email }); + const account: Account = await ctx.call('auth.account.findByEmail', { email }); if (!account) { throw new MoleculerError('email.not.exists', 400, 'BAD_REQUEST'); diff --git a/src/middleware/packages/auth/services/auth.oidc.ts b/src/middleware/packages/auth/services/auth.oidc.ts index 78c505596..708481927 100644 --- a/src/middleware/packages/auth/services/auth.oidc.ts +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -17,7 +17,6 @@ const AuthOIDCService = { jwtPath: null, registrationAllowed: true, reservedUsernames: [], - webIdSelection: [], // SSO-specific settings sessionSecret: 's€m@pps', selectSsoData: null, diff --git a/src/middleware/packages/auth/types.ts b/src/middleware/packages/auth/types.ts new file mode 100644 index 000000000..ff1ec58c6 --- /dev/null +++ b/src/middleware/packages/auth/types.ts @@ -0,0 +1,8 @@ +export interface Account { + '@id': string; + username: string; + hashedPassword?: string; + resetPasswordToken?: string; + email: string; + webId: string; +} diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 36d365112..d40f3189d 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -15,6 +15,10 @@ const SolidStorageSchema = { await this.broker.call('ontologies.register', pim); }, actions: { + /** + * Create the dataset, the WebID and the root container + * Create also the controlled resources and containers, attach them to the root container and register them with the type index + */ create: { params: { username: { type: 'string' } @@ -106,12 +110,6 @@ const SolidStorageSchema = { }); } - // Create account - await ctx.call('auth.account.create', { - username, - webId - }); - // Give full rights on all containers await ctx.call('webacl.resource.addRights', { resourceUri: rootContainerUri, @@ -136,7 +134,7 @@ const SolidStorageSchema = { ctx.emit('solid-storage.created', { webId }); - return { webId, username, rootContainerUri }; + return { webId, rootContainerUri }; } }, diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index ad4da7f85..9e8badb4c 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,4 +1,3 @@ -import urlJoin from 'url-join'; import { foaf, schema } from '@semapps/ontologies'; import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; @@ -7,10 +6,8 @@ const WebIdService = { name: 'webid' as const, mixins: [ControlledContainerMixin, DereferenceMixin], settings: { - baseUrl: null, - podProvider: false, // ControlledContainerMixin - path: '/foaf/person', + path: '/users', types: ['http://xmlns.com/foaf/0.1/Person'], // DereferenceMixin dereferencePlan: [ @@ -45,69 +42,6 @@ const WebIdService = { } ); } - }, - - createWebId: { - /** - * This should only be called after the user has been authenticated - */ - async handler(ctx) { - let { email, nick, name, familyName, homepage, ...rest } = ctx.params; - - if (!nick && email) { - nick = email.split('@')[0].toLowerCase(); - } - - let webId; - - const resource = { - '@type': 'foaf:Person', - 'foaf:nick': nick, - 'foaf:email': email, - 'foaf:name': name, - 'foaf:familyName': familyName, - 'foaf:homepage': homepage, - ...rest - }; - - if (this.settings.podProvider) { - // In Pod provider config, there is no LDP container for the webId, so we must create it directly - webId = urlJoin(this.settings.baseUrl, nick); - await this.actions.create( - { - resource: { - '@id': webId, - ...resource - }, - resourceUri: webId, - webId: 'system' - }, - { parentCtx: ctx } - ); - } else { - if (!this.settings.path) throw new Error('The path setting is required'); - webId = await this.actions.post( - { - resource, - slug: nick, - webId: 'system' - }, - { parentCtx: ctx } - ); - } - - const webIdData = await this.actions.get( - { - resourceUri: webId, - webId: 'system' - }, - { parentCtx: ctx } - ); - - ctx.emit('webid.created', webIdData, { meta: { webId: null, dataset: null } }); - - return webId; - } } } } satisfies ServiceSchema; diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 5c3432037..f9d73215b 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; -import { createStorage, fetchServer } from '../utils.ts'; +import { createAccount, fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); @@ -11,7 +11,7 @@ let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 2f46c5c17..4b11ce836 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -5,7 +5,7 @@ import { ServiceBroker } from 'moleculer'; import path, { join as pathJoin } from 'path'; import { getSlugFromUri } from '@semapps/ldp'; import { fileURLToPath } from 'url'; -import { fetchServer, createStorage } from '../utils.ts'; +import { fetchServer, createAccount } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; @@ -18,7 +18,7 @@ let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 610e53b72..29b0626cf 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -2,7 +2,7 @@ import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; -import { createStorage } from '../utils.ts'; +import { createAccount } from '../utils.ts'; jest.setTimeout(20000); let broker: ServiceBroker; @@ -11,7 +11,7 @@ let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index da2082ece..1d5b90c1a 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -2,7 +2,7 @@ import fetch from 'node-fetch'; import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; import { MIME_TYPES } from '@semapps/mime-types'; -import { fetchServer, createStorage } from '../utils.ts'; +import { fetchServer, createAccount } from '../utils.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); @@ -12,7 +12,7 @@ let alice: any; beforeAll(async () => { broker = await initialize(false); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index be39e3134..2211869ca 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -3,7 +3,7 @@ import { Context, ServiceBroker } from 'moleculer'; import { ControlledContainerMixin, delay, Registration } from '@semapps/ldp'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; -import { fetchServer, createStorage } from '../utils.ts'; +import { fetchServer, createAccount } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; @@ -45,7 +45,7 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al }); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { @@ -70,7 +70,7 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al if (allowSlugs) { expect(containersUris).toEqual( expect.arrayContaining([ - urlJoin(alice.webId, '/foaf/person'), + urlJoin(alice.webId, '/users'), urlJoin(alice.webId, '/key'), urlJoin(alice.webId, '/public-key'), urlJoin(alice.webId, '/videos'), diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index 31d004c6f..97e9c055d 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -1,7 +1,7 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; -import { fetchServer, createStorage } from '../utils.ts'; +import { fetchServer, createAccount } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; @@ -34,7 +34,7 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all }); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index 3670836bd..cef5ef97d 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -3,7 +3,7 @@ import { parse as parseLinkHeader } from 'http-link-header'; import { ServiceBroker } from 'moleculer'; import waitForExpect from 'wait-for-expect'; import { ControlledContainerMixin } from '@semapps/ldp'; -import { fetchServer, createStorage } from '../utils.ts'; +import { fetchServer, createAccount } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; @@ -42,7 +42,7 @@ beforeAll(async () => { }); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index 770a4eb80..1c16a0271 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -2,7 +2,7 @@ import rdf from '@rdfjs/data-model'; import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; -import { createStorage } from '../utils.ts'; +import { createAccount } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; @@ -11,7 +11,7 @@ let alice: any; beforeAll(async () => { broker = await initialize(true); await broker.start(); - alice = await createStorage(broker, 'alice'); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 067022886..1bb7db481 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -1,8 +1,9 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import Redis from 'ioredis'; -import * as CONFIG from './config.ts'; import { ActionParamSchema, CallingOptions, ServiceBroker } from 'moleculer'; +import { Account } from '@semapps/auth'; +import * as CONFIG from './config.ts'; export const listDatasets = async () => { const response = await fetch(`${CONFIG.SPARQL_ENDPOINT}$/datasets`, { @@ -87,8 +88,8 @@ export const fetchServer = (url: any, options = {}) => { }); }; -export const createStorage = async (broker: ServiceBroker, username: string) => { - const { webId } = (await broker.call('solid-storage.create', { username })) as { webId: string }; +export const createAccount = async (broker: ServiceBroker, username: string) => { + const { webId }: Account = await broker.call('auth.account.create', { username }); const call = (actionName: string, params: ActionParamSchema = {}, options: CallingOptions = {}) => broker.call(actionName, params, { ...options, meta: { ...options.meta, webId, dataset: username } }); @@ -103,7 +104,7 @@ export const createStorage = async (broker: ServiceBroker, username: string) => export const clearQueue = async (queueServiceUrl: any) => { // Clear queue const redisClient = new Redis(queueServiceUrl); - const result = await redisClient.flushdb(); + await redisClient.flushdb(); redisClient.disconnect(); }; diff --git a/website/docs/middleware/auth.md b/website/docs/middleware/auth.md index 0f10d90da..0c09aa744 100644 --- a/website/docs/middleware/auth.md +++ b/website/docs/middleware/auth.md @@ -42,8 +42,6 @@ module.exports = { jwtPath: path.resolve(__dirname, '../jwt'), // Usernames you don't want users to signup with reservedUsernames: [], - // User data you want to be available in the webId - webIdSelection: [], // If false, user account must be created manually with a foaf:email field. True by default. registrationAllowed: true, // Dataset where the account data will be stored (email, hashed password...) @@ -67,7 +65,6 @@ module.exports = { baseUrl: 'http://localhost:3000', jwtPath: path.resolve(__dirname, '../jwt'), reservedUsernames: [], - webIdSelection: [], registrationAllowed: true, // OIDC-specific settings issuer: 'https://myissuer.com/auth/realms/master', @@ -101,7 +98,6 @@ module.exports = { baseUrl: 'http://localhost:3000', jwtPath: path.resolve(__dirname, '../jwt'), reservedUsernames: [], - webIdSelection: [], registrationAllowed: true, // CAS-specific settings casUrl: 'https://my-cas-server.com/cas', From b27936e4e4fd2c639a67129473266873dbf66230 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 31 Oct 2025 12:12:11 +0100 Subject: [PATCH 101/165] Refactor WebId to have a full path --- .../ldp/mixins/controlled-resource.ts | 40 +++------ .../ldp/services/api/actions/delete.ts | 4 + .../packages/ldp/services/api/actions/get.ts | 6 +- .../packages/ldp/services/api/actions/head.ts | 4 + .../ldp/services/api/actions/patch.ts | 3 + .../packages/ldp/services/api/actions/post.ts | 2 + .../packages/ldp/services/api/actions/put.ts | 3 + .../ldp/services/container/actions/create.ts | 8 +- .../ldp/services/registry/actions/getByUri.ts | 9 +- .../ldp/services/resource/actions/exist.ts | 1 - .../solid/services/preferences-file.ts | 15 ++-- .../packages/solid/services/storage.ts | 83 ++++++++++++------- .../services/type-index/private-type-index.ts | 41 ++++----- .../services/type-index/public-type-index.ts | 22 +++-- .../solid/services/type-index/type-index.ts | 20 ++--- src/middleware/packages/webid/service.ts | 58 ++++++------- .../tests/ldp/controlled-container.test.ts | 23 +++-- src/middleware/tests/utils.ts | 3 + 18 files changed, 176 insertions(+), 169 deletions(-) diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index ef768cdb8..4462493db 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -1,5 +1,5 @@ import { ServiceSchema, Errors } from 'moleculer'; -import { delay, getDatasetFromUri } from '../utils.ts'; +import { delay } from '../utils.ts'; const { MoleculerError } = Errors; @@ -33,17 +33,14 @@ const ControlledResourceMixin = { actions: { create: { async handler(ctx) { - return await ctx.call('ldp.resource.create', ctx.params); + const res = await ctx.call('ldp.resource.create', ctx.params); + ctx.emit(`${this.name}.created`, res); + return res; } }, getUri: { - params: { - webId: { type: 'string', optional: true } - }, async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; - const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types: this.settings.types }); const results = await ctx.call('triplestore.query', { @@ -54,8 +51,7 @@ const ControlledResourceMixin = { ?resourceUri a ${expandedTypes.map(t => `<${t}>`).join(', ')} . } } - `, - dataset: getDatasetFromUri(webId) + ` }); return results[0]?.resourceUri.value; @@ -64,55 +60,39 @@ const ControlledResourceMixin = { exist: { params: { - resourceUri: { type: 'string', optional: true }, - webId: { type: 'string', optional: true } + resourceUri: { type: 'string', optional: true } }, async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; - const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({ webId }, { parentCtx: ctx })); + const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({}, { parentCtx: ctx })); return !!resourceUri; } }, get: { - params: { - resourceUri: { type: 'string', optional: true }, - webId: { type: 'string', optional: true } - }, async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; - const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({ webId }, { parentCtx: ctx })); + const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({}, { parentCtx: ctx })); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); return await ctx.call('ldp.resource.get', { resourceUri, ...ctx.params }); } }, patch: { - params: { - resourceUri: { type: 'string', optional: true }, - webId: { type: 'string', optional: true } - }, async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; - const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({ webId }, { parentCtx: ctx })); + const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({}, { parentCtx: ctx })); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); return await ctx.call('ldp.resource.patch', { resourceUri, ...ctx.params }); } }, waitForCreation: { - params: { - webId: { type: 'string', optional: true } - }, async handler(ctx) { - const webId = ctx.params.webId || ctx.meta.webId; let resourceUri; let attempts = 0; do { attempts += 1; if (attempts > 1) await delay(1000); - resourceUri = await this.actions.getUri({ webId }, { parentCtx: ctx }); + resourceUri = await this.actions.getUri({}, { parentCtx: ctx }); } while (!resourceUri || attempts > 30); if (!resourceUri) throw new Error(`Resource still had not been created after 30s`); diff --git a/src/middleware/packages/ldp/services/api/actions/delete.ts b/src/middleware/packages/ldp/services/api/actions/delete.ts index cd3d3c544..6402073dd 100644 --- a/src/middleware/packages/ldp/services/api/actions/delete.ts +++ b/src/middleware/packages/ldp/services/api/actions/delete.ts @@ -1,8 +1,12 @@ +import { getDatasetFromUri } from '../../../utils.ts'; + export default async function patch(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; const uri = this.getUriFromSlugParts(slugParts, username); + ctx.meta.dataset = getDatasetFromUri(uri); + const types = await ctx.call('ldp.resource.getTypes', { resourceUri: uri }); if (types.includes('http://www.w3.org/ns/ldp#Container')) { diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index 12d315e5d..b60d10a4f 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -1,7 +1,7 @@ import fs from 'fs'; -import { MIME_TYPES } from '@semapps/mime-types'; -import { cleanUndefined, parseJson } from '../../../utils.ts'; import { Errors } from 'moleculer'; +import { MIME_TYPES } from '@semapps/mime-types'; +import { cleanUndefined, getDatasetFromUri, parseJson } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -10,6 +10,8 @@ export default async function get(this: any, ctx: any) { const { username, slugParts } = ctx.params; const uri = this.getUriFromSlugParts(slugParts, username); + ctx.meta.dataset = getDatasetFromUri(uri); + const types = await ctx.call('ldp.resource.getTypes', { resourceUri: uri }); let res; diff --git a/src/middleware/packages/ldp/services/api/actions/head.ts b/src/middleware/packages/ldp/services/api/actions/head.ts index d10dbbea3..e6b5a3d7a 100644 --- a/src/middleware/packages/ldp/services/api/actions/head.ts +++ b/src/middleware/packages/ldp/services/api/actions/head.ts @@ -1,8 +1,12 @@ +import { getDatasetFromUri } from '../../../utils.ts'; + export default async function head(this: any, ctx: any) { try { const { username, slugParts } = ctx.params; const uri = this.getUriFromSlugParts(slugParts, username); + ctx.meta.dataset = getDatasetFromUri(uri); + const linkHeader = await ctx.call('ldp.link-header.get', { uri }); ctx.meta.$statusCode = 200; diff --git a/src/middleware/packages/ldp/services/api/actions/patch.ts b/src/middleware/packages/ldp/services/api/actions/patch.ts index 90dfc7c8b..744678304 100644 --- a/src/middleware/packages/ldp/services/api/actions/patch.ts +++ b/src/middleware/packages/ldp/services/api/actions/patch.ts @@ -1,5 +1,6 @@ import sparqljsModule from 'sparqljs'; import { Errors } from 'moleculer'; +import { getDatasetFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; const SparqlParser = sparqljsModule.Parser; @@ -14,6 +15,8 @@ export default async function patch(this: any, ctx: any) { throw new MoleculerError(`The Content-Type header should be application/sparql-update`, 400, 'BAD_REQUEST'); const uri = this.getUriFromSlugParts(slugParts, username); + ctx.meta.dataset = getDatasetFromUri(uri); + const types = await ctx.call('ldp.resource.getTypes', { resourceUri: uri }); let parsedQuery; diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index 158c15d9a..012afd4d4 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -4,6 +4,7 @@ import { v4 as uuidv4 } from 'uuid'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mime... Remove this comment to see the full error message import mime from 'mime-types'; import { Errors } from 'moleculer'; +import { getDatasetFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -12,6 +13,7 @@ export default async function post(this: any, ctx: any) { let { username, slugParts, ...resource } = ctx.params; const containerUri = this.getUriFromSlugParts(slugParts, username); + ctx.meta.dataset = getDatasetFromUri(containerUri); let resourceUri; const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 7ff2a5d97..4fa0cb43e 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -1,5 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { Errors } from 'moleculer'; +import { getDatasetFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -7,6 +8,8 @@ export default async function post(this: any, ctx: any) { let { username, slugParts, ...resource } = ctx.params; const resourceUri = this.getUriFromSlugParts(slugParts, username); + ctx.meta.dataset = getDatasetFromUri(resourceUri); + const resourceId = resource['@id'] || resource.id; if (!resourceId) { diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index c458b6c64..8191240e6 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -6,15 +6,13 @@ const Schema = { path: { type: 'string', optional: true }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, - registration: { type: 'object', optional: true }, - webId: { type: 'string', optional: true } + registration: { type: 'object', optional: true } }, async handler(ctx) { let { path, title, description, registration } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const baseUrl = this.settings.podProvider - ? await ctx.call('solid-storage.getBaseUrl', { webId }) + ? await ctx.call('solid-storage.getBaseUrl', { username: ctx.meta.dataset }) : this.settings.baseUrl; const containerUri = await ctx.call('triplestore.named-graph.create', { @@ -33,7 +31,7 @@ const Schema = { webId: 'system' }); - ctx.emit('ldp.container.created', { containerUri, registration, webId }); + ctx.emit('ldp.container.created', { containerUri, registration }); return containerUri; } diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 27fecd20d..66b10c8ac 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,5 +1,4 @@ import { ActionSchema } from 'moleculer'; -import { getWebIdFromUri } from '../../../utils.ts'; /** * Find the registration for a container or resource URI @@ -17,10 +16,7 @@ const GetByUriAction = { throw new Error('The param containerUri or resourceUri must be provided to ldp.registry.getByUri'); } - let types: string[] = await ctx.call('type-index.getTypes', { - uri: containerUri || resourceUri, - webId: getWebIdFromUri(containerUri || resourceUri) - }); + let types: string[] = await ctx.call('type-index.getTypes', { uri: containerUri || resourceUri }); // If this a resource, check if its container is registered if (types.length === 0 && resourceUri) { @@ -29,8 +25,7 @@ const GetByUriAction = { if (containerUri) { types = await ctx.call('type-index.getTypes', { uri: containerUri, - isContainer: true, - webId: getWebIdFromUri(containerUri) + isContainer: true }); } } diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 29666223a..92144abb8 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -15,7 +15,6 @@ const Schema = { // If resource exists but we don't want tombstones, check the resource type if (exist && !acceptTombstones) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const types = await this.actions.getTypes({ resourceUri }, { parentCtx: ctx }); if (types.includes('https://www.w3.org/ns/activitystreams#Tombstone')) return false; } diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index db6d54c4d..f3de54696 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -14,21 +14,22 @@ const SolidPreferencesFileSchema = { async started() { await this.broker.call('ontologies.register', pim); }, - hooks: { - after: { - async create(ctx, res) { + events: { + 'webid.created': { + async handler(ctx) { + const { resourceUri: webId } = ctx.params; + const preferencesUri = await this.actions.waitForCreation({}, { parentCtx: ctx }); await ctx.call('ldp.resource.patch', { - resourceUri: ctx.params.webId, + resourceUri: webId, triplesToAdd: [ rdf.quad( - rdf.namedNode(ctx.params.webId), + rdf.namedNode(webId), rdf.namedNode('http://www.w3.org/ns/pim/space#preferencesFile'), - rdf.namedNode(res) + rdf.namedNode(preferencesUri) ) ], webId: 'system' }); - return res; } } } diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index d40f3189d..8ef1b67fa 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,4 +1,5 @@ import urlJoin from 'url-join'; +import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; import { pim } from '@semapps/ontologies'; import { getWebIdFromUri, Registration, arrayOf } from '@semapps/ldp'; @@ -25,44 +26,29 @@ const SolidStorageSchema = { }, async handler(ctx) { const { username } = ctx.params; + ctx.meta.dataset = username; await ctx.call('triplestore.dataset.create', { dataset: username, secure: false // TODO Remove when we switch to Fuseki 5 }); - const webId = urlJoin(this.settings.baseUrl, username); + const allowSlugs = await ctx.call('ldp.getSetting', { key: 'allowSlugs' }); + const baseUrl = await this.actions.getBaseUrl({ username }, { parentCtx: ctx }); - ctx.meta.dataset = username; - ctx.meta.webId = webId; + const rootContainerUri: string = await ctx.call('ldp.container.create', { path: '/data' }); - const rootContainerUri = await ctx.call('ldp.container.create', { path: '/data', webId }); - - // Create WebID - await ctx.call('webid.create', { - resourceUri: webId, - resource: { - '@id': webId, - '@type': 'foaf:Person', - 'foaf:nick': username, - 'pim:storage': rootContainerUri, - 'solid:oidcIssuer': this.settings.baseUrl.replace(/\/$/, '') // Remove trailing slash if it exists - }, - webId - }); + let resourcesUris: Record = {}; - // Create controlled resources (we do that first so that types indexes are created) + // Create controlled resources by priority (first webId, then type indexes, then other resources) const resourceRegistrations: Registration[] = await ctx.call('ldp.registry.list', { isContainer: false }); - for (const resourceRegistration of Object.values(resourceRegistrations)) { + for (const resourceRegistration of resourceRegistrations) { const { controlledActions } = resourceRegistration; - const baseUrl = await this.actions.getBaseUrl({ webId }, { parentCtx: ctx }); - const allowSlugs = await ctx.call('ldp.getSetting', { key: 'allowSlugs' }); - // TODO Put this inside the ldp.resource.create action - const resourceUri = await ctx.call('triplestore.named-graph.create', { + const resourceUri: string = await ctx.call('triplestore.named-graph.create', { baseUrl, - slug: allowSlugs ? this.settings.slug : undefined + slug: allowSlugs ? resourceRegistration.path : undefined }); await ctx.call(controlledActions.create, { @@ -78,6 +64,40 @@ const SolidStorageSchema = { webId: 'system' }); + resourcesUris[resourceRegistration.name] = resourceUri; + } + + const webId = resourcesUris.webid; + ctx.meta.webId = webId; + + // Add other properties to the WebID + await ctx.call('webid.patch', { + resourceUri: webId, + triplesToAdd: [ + rdf.quad( + rdf.namedNode(webId), + rdf.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), + rdf.namedNode('http://xmlns.com/foaf/0.1/Person') + ), + rdf.quad(rdf.namedNode(webId), rdf.namedNode('http://xmlns.com/foaf/0.1/nick'), rdf.literal(username)), + rdf.quad( + rdf.namedNode(webId), + rdf.namedNode('http://www.w3.org/ns/pim/space#storage'), + rdf.namedNode(rootContainerUri) + ), + rdf.quad( + rdf.namedNode(webId), + rdf.namedNode('http://www.w3.org/ns/solid/terms#oidcIssuer'), + rdf.namedNode(this.settings.baseUrl.replace(/\/$/, '')) + ) + ], + webId: 'system' + }); + + // Now the WebID is created, register the resources with the type index + for (const resourceRegistration of resourceRegistrations) { + const resourceUri = resourcesUris[resourceRegistration.name]; + await ctx.call('type-index.register', { types: arrayOf(resourceRegistration.types), uri: resourceUri, @@ -89,7 +109,7 @@ const SolidStorageSchema = { // Create containers from registry const containerRegistrations: Registration[] = await ctx.call('ldp.registry.list', { isContainer: true }); - for (const containerRegistration of Object.values(containerRegistrations)) { + for (const containerRegistration of containerRegistrations) { const containerUri = await ctx.call('ldp.container.create', { registration: containerRegistration, webId @@ -140,11 +160,18 @@ const SolidStorageSchema = { getBaseUrl: { params: { - webId: { type: 'string' } + webId: { type: 'string', optional: true }, + username: { type: 'string', optional: true } }, async handler(ctx) { - const { webId } = ctx.params; - return getWebIdFromUri(webId); + const { webId, username } = ctx.params; + if (username) { + return urlJoin(this.settings.baseUrl, username); + } else if (webId) { + return getWebIdFromUri(webId); + } else { + throw new Error(`The webId or username param is required`); + } } }, diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index a3427a14c..b4de82ba3 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -6,36 +6,29 @@ const PrivateTypeIndexService = { name: 'private-type-index' as const, mixins: [ControlledResourceMixin], settings: { - path: 'private-type-index', + path: '/private-type-index', types: ['solid:TypeIndex', 'solid:UnlistedDocument'], permissions: {}, typeIndex: 'private' }, - hooks: { - after: { - async create(ctx, res) { - const { resourceUri } = res; - const webId = getWebIdFromUri(resourceUri); + events: { + 'solid-preferences-file.created': { + async handler(ctx) { + const { resourceUri: preferencesUri } = ctx.params; + const typeIndexUri = await this.actions.waitForCreation({}, { parentCtx: ctx }); - // Attach to preferences file, if available - const services: ServiceSchema[] = await ctx.call('$node.services'); - if (services.some(s => s.name === 'solid-preferences-file')) { - const preferencesUri: string = await ctx.call('solid-preferences-file.getUri', { webId }); - if (preferencesUri) { - await ctx.call('solid-preferences-file.patch', { - triplesToAdd: [ - rdf.quad( - rdf.namedNode(preferencesUri), - rdf.namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), - rdf.namedNode(resourceUri) - ) - ], - webId - }); - } + if (preferencesUri) { + await ctx.call('solid-preferences-file.patch', { + triplesToAdd: [ + rdf.quad( + rdf.namedNode(preferencesUri), + rdf.namedNode('http://www.w3.org/ns/solid/terms#privateTypeIndex'), + rdf.namedNode(typeIndexUri) + ) + ], + webId: 'system' + }); } - - return res; } } } diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index 1f6be8a9b..9189eed80 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -1,4 +1,4 @@ -import { ControlledResourceMixin, getWebIdFromUri } from '@semapps/ldp'; +import { ControlledResourceMixin } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; @@ -6,7 +6,7 @@ const PublicTypeIndexService = { name: 'public-type-index' as const, mixins: [ControlledResourceMixin], settings: { - path: 'public-type-index', + path: '/public-type-index', types: ['solid:TypeIndex', 'solid:ListedDocument'], permissions: { anon: { @@ -15,25 +15,23 @@ const PublicTypeIndexService = { }, typeIndex: 'public' }, - hooks: { - after: { - async create(ctx, res) { - const { resourceUri } = res; - const webId = getWebIdFromUri(resourceUri); + events: { + 'webid.created': { + async handler(ctx) { + const { resourceUri: webId } = ctx.params; + const typeIndexUri = await this.actions.waitForCreation({}, { parentCtx: ctx }); await ctx.call('ldp.resource.patch', { resourceUri: webId, triplesToAdd: [ rdf.quad( - rdf.namedNode(webId!), + rdf.namedNode(webId), rdf.namedNode('http://www.w3.org/ns/solid/terms#publicTypeIndex'), - rdf.namedNode(resourceUri) + rdf.namedNode(typeIndexUri) ) ], - webId + webId: 'system' }); - - return res; } } } diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index 6e64d7b7f..a770f228d 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -32,7 +32,7 @@ const TypeIndexService = { const webId = ctx.params.webId || ctx.meta.webId; const expandedTypes: string[] = await ctx.call('jsonld.parser.expandTypes', { types }); - const oldExpandedTypes: string[] = await this.actions.getTypes({ uri, webId, isPrivate }); + const oldExpandedTypes: string[] = await this.actions.getTypes({ uri, isPrivate }, { parentCtx: ctx }); const typeIndexUri = await ctx.call(`${isPrivate ? 'private' : 'public'}-type-index.getUri`, { webId }); @@ -104,20 +104,18 @@ const TypeIndexService = { visibility: 'public', params: { uri: { type: 'string' }, - webId: { type: 'string', optional: true }, isPrivate: { type: 'boolean', optional: true } }, // cache: true, async handler(ctx) { const { uri, isPrivate } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId; // If isPrivate is not defined, search in both type indexes let typeIndexUris = []; if (isPrivate === false || isPrivate === undefined) - typeIndexUris.push(await ctx.call(`public-type-index.getUri`, { webId })); + typeIndexUris.push(await ctx.call(`public-type-index.getUri`)); if (isPrivate === true || isPrivate === undefined) - typeIndexUris.push(await ctx.call(`private-type-index.getUri`, { webId })); + typeIndexUris.push(await ctx.call(`private-type-index.getUri`)); const results = await ctx.call('triplestore.query', { query: ` @@ -133,8 +131,7 @@ const TypeIndexService = { } } `, - webId: 'system', - dataset: isWebId(webId) ? getDatasetFromUri(webId) : undefined + webId: 'system' }); return arrayOf(results).map((r: any) => r.type.value); @@ -145,23 +142,21 @@ const TypeIndexService = { visibility: 'public', params: { type: { type: 'string' }, - webId: { type: 'string', optional: true }, isContainer: { type: 'boolean', optional: true }, isPrivate: { type: 'boolean', optional: true } }, // cache: true, async handler(ctx) { const { type, isContainer, isPrivate } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId; const [expandedType] = (await ctx.call('jsonld.parser.expandTypes', { types: [type] })) as string[]; // If isPrivate is not defined, search in both type indexes let typeIndexUris = []; if (isPrivate === false || isPrivate === undefined) - typeIndexUris.push(await ctx.call(`public-type-index.getUri`, { webId })); + typeIndexUris.push(await ctx.call(`public-type-index.getUri`)); if (isPrivate === true || isPrivate === undefined) - typeIndexUris.push(await ctx.call(`private-type-index.getUri`, { webId })); + typeIndexUris.push(await ctx.call(`private-type-index.getUri`)); // If isContainer is not defined, look for both containers and single resources let instancePredicates = []; @@ -182,8 +177,7 @@ const TypeIndexService = { } } `, - webId: 'system', - dataset: getDatasetFromUri(webId) + webId: 'system' }); return results.map((r: any) => r.uri.value); diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 9e8badb4c..c88a4e56b 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,14 +1,19 @@ import { foaf, schema } from '@semapps/ontologies'; -import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; +import { ControlledResourceMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; const WebIdService = { name: 'webid' as const, - mixins: [ControlledContainerMixin, DereferenceMixin], + mixins: [ControlledResourceMixin, DereferenceMixin], settings: { - // ControlledContainerMixin - path: '/users', - types: ['http://xmlns.com/foaf/0.1/Person'], + path: '/webid', + types: ['http://xmlns.com/foaf/0.1/Agent'], + permissions: { + anon: { + read: true + } + }, + typeIndex: 'public', // DereferenceMixin dereferencePlan: [ { @@ -17,33 +22,30 @@ const WebIdService = { { property: 'assertionMethod' } ] }, - dependencies: ['ldp.resource', 'ontologies'], - async created() { - if (!this.settings.baseUrl) throw new Error('The baseUrl setting is required for webId service.'); - }, + dependencies: ['ontologies'], async started() { await this.broker.call('ontologies.register', foaf); await this.broker.call('ontologies.register', schema); - }, - actions: { - get: { - handler(ctx) { - // Always get WebID as system and on the correct dataset, since they are public - return ctx.call( - 'ldp.resource.get', - { - ...ctx.params, - webId: 'system' - }, - { - meta: { - dataset: this.settings.podProvider ? getDatasetFromUri(ctx.params.resourceUri) : undefined - } - } - ); - } - } } + // actions: { + // get: { + // handler(ctx) { + // // Always get WebID as system and on the correct dataset, since they are public + // return ctx.call( + // 'ldp.resource.get', + // { + // ...ctx.params, + // webId: 'system' + // }, + // { + // meta: { + // dataset: this.settings.podProvider ? getDatasetFromUri(ctx.params.resourceUri) : undefined + // } + // } + // ); + // } + // } + // } } satisfies ServiceSchema; export default WebIdService; diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 2211869ca..810db89a8 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -60,25 +60,24 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al // @ts-expect-error This expression is not callable await waitForExpect(async () => { const registrations: Registration[] = await alice.call('ldp.registry.list'); - expect(registrations).toHaveLength(10); // 8 containers + 2 resources + expect(registrations).toHaveLength(10); // 7 containers + 3 resources expect(registrations.find(r => r.name === 'videos')).not.toBeUndefined(); }); const containersUris = await alice.call('ldp.container.getAll'); - expect(containersUris).toHaveLength(9); // 8 containers + root container + expect(containersUris).toHaveLength(8); // 7 containers + root container if (allowSlugs) { expect(containersUris).toEqual( expect.arrayContaining([ - urlJoin(alice.webId, '/users'), - urlJoin(alice.webId, '/key'), - urlJoin(alice.webId, '/public-key'), - urlJoin(alice.webId, '/videos'), - urlJoin(alice.webId, '/resources'), - urlJoin(alice.webId, '/places'), - urlJoin(alice.webId, '/themes'), - urlJoin(alice.webId, '/files'), - urlJoin(alice.webId, '/data') + urlJoin(alice.baseUrl, '/key'), + urlJoin(alice.baseUrl, '/public-key'), + urlJoin(alice.baseUrl, '/videos'), + urlJoin(alice.baseUrl, '/resources'), + urlJoin(alice.baseUrl, '/places'), + urlJoin(alice.baseUrl, '/themes'), + urlJoin(alice.baseUrl, '/files'), + urlJoin(alice.baseUrl, '/data') ]) ); } @@ -107,7 +106,7 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al // @ts-expect-error This expression is not callable await waitForExpect(async () => { const containersUris = await alice.call('ldp.container.getAll'); - expect(containersUris).toHaveLength(9); + expect(containersUris).toHaveLength(8); }); // The container URI has not changed diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 1bb7db481..83c13064a 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -94,8 +94,11 @@ export const createAccount = async (broker: ServiceBroker, username: string) => const call = (actionName: string, params: ActionParamSchema = {}, options: CallingOptions = {}) => broker.call(actionName, params, { ...options, meta: { ...options.meta, webId, dataset: username } }); + const baseUrl = await broker.call('solid-storage.getBaseUrl', { username }); + return { webId, + baseUrl, username, call }; From 2c05a7aa35279f3337f30d5ac7c33af7cffc71b7 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 31 Oct 2025 16:03:26 +0100 Subject: [PATCH 102/165] Cleanup --- .../activitypub/subservices/activity.ts | 2 - .../ldp/mixins/controlled-container.ts | 1 - .../ldp/services/container/actions/create.ts | 8 +-- .../ldp/services/container/actions/post.ts | 6 +- .../packages/ldp/services/container/index.ts | 8 --- .../ldp/services/registry/actions/register.ts | 1 - .../ldp/services/registry/defaultOptions.ts | 1 - .../services/resource/actions/generateId.ts | 67 ------------------- src/middleware/packages/ldp/types.ts | 1 - src/middleware/packages/ldp/utils.ts | 4 +- .../packages/solid/services/storage.ts | 19 ++---- .../services/type-index/private-type-index.ts | 2 +- .../actions/refreshContainersRights.ts | 6 +- .../middleware/ldp/controlled-resource.md | 14 ++-- website/docs/middleware/ldp/index.md | 7 +- 15 files changed, 24 insertions(+), 123 deletions(-) delete mode 100644 src/middleware/packages/ldp/services/resource/actions/generateId.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 3e7864393..af5e37da1 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -1,7 +1,6 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ControlledContainerMixin } from '@semapps/ldp'; -import { MIME_TYPES } from '@semapps/mime-types'; import { ServiceSchema } from 'moleculer'; import setRightsHandler from './activity-handlers/setRightsHandler.ts'; import { arrayOf } from '../../../utils.ts'; @@ -19,7 +18,6 @@ const ActivityService = { types: Object.values(FULL_ACTIVITY_TYPES), permissions: {}, newResourcesPermissions: {}, - readOnly: true, excludeFromMirror: true, activateTombstones: false, controlledActions: { diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 75ad57ba0..477cdb38b 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -8,7 +8,6 @@ const ControlledContainerMixin = { permissions: null, newResourcesPermissions: null, controlledActions: {}, - readOnly: false, excludeFromMirror: false, activateTombstones: true, typeIndex: undefined diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 8191240e6..cc4ddb089 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -const Schema = { +const CreateAction = { visibility: 'public', params: { path: { type: 'string', optional: true }, @@ -11,9 +11,7 @@ const Schema = { async handler(ctx) { let { path, title, description, registration } = ctx.params; - const baseUrl = this.settings.podProvider - ? await ctx.call('solid-storage.getBaseUrl', { username: ctx.meta.dataset }) - : this.settings.baseUrl; + const baseUrl = await ctx.call('solid-storage.getBaseUrl'); const containerUri = await ctx.call('triplestore.named-graph.create', { baseUrl, @@ -37,4 +35,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default CreateAction; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 104f7a09e..c45807b5b 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -5,7 +5,7 @@ import { cleanUndefined } from '../../../utils.ts'; const { MoleculerError } = Errors; -const Schema = { +const PostAction = { visibility: 'public', params: { containerUri: { @@ -81,7 +81,7 @@ const Schema = { } const resourceUri = await ctx.call('triplestore.named-graph.create', { - baseUrl: await this.getBaseUrl(ctx), + baseUrl: await ctx.call('solid-storage.getBaseUrl'), slug: this.settings.allowSlugs ? slug : undefined }); @@ -158,4 +158,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default PostAction; diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index c225261e3..8822f3a75 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -1,5 +1,4 @@ import { ServiceSchema } from 'moleculer'; -import urlJoin from 'url-join'; import attachAction from './actions/attach.ts'; import clearAction from './actions/clear.ts'; import createAction from './actions/create.ts'; @@ -38,13 +37,6 @@ const LdpContainerSchema = { post: postAction, patch: patchAction }, - methods: { - async getBaseUrl(ctx) { - return this.settings.podProvider - ? await ctx.call('solid-storage.getBaseUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) - : this.settings.baseUrl; - } - }, hooks: { before: { '*'(ctx) { diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index d5679c730..27ddb4592 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -13,7 +13,6 @@ const RegisterAction = { permissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, newResourcesPermissions: { type: 'multi', rules: [{ type: 'object' }, { type: 'function' }], optional: true }, controlledActions: { type: 'object', optional: true }, - readOnly: { type: 'boolean', optional: true }, typeIndex: { type: 'string', optional: true } }, async handler(ctx) { diff --git a/src/middleware/packages/ldp/services/registry/defaultOptions.ts b/src/middleware/packages/ldp/services/registry/defaultOptions.ts index 4fd716c5f..e3d135c78 100644 --- a/src/middleware/packages/ldp/services/registry/defaultOptions.ts +++ b/src/middleware/packages/ldp/services/registry/defaultOptions.ts @@ -1,7 +1,6 @@ import { Registration } from '../../types.ts'; const Schema = { - readOnly: false, isContainer: true, excludeFromMirror: false, typeIndex: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts deleted file mode 100644 index 49df438b5..000000000 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ /dev/null @@ -1,67 +0,0 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'spea... Remove this comment to see the full error message -import createSlug from 'speakingurl'; -// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message -import { v4 as uuidv4 } from 'uuid'; -import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; - -const Schema = { - visibility: 'public', - params: { - containerUri: 'string', - slug: { type: 'string', optional: true }, - isContainer: { type: 'boolean', default: false } - }, - async handler(ctx) { - let { containerUri, slug, isContainer } = ctx.params; - let uuid; - - if (slug) { - // Slugify the slug - slug = createSlug(slug, { lang: 'fr', custom: { '.': '.' } }); - } else { - uuid = uuidv4(); - } - - // Do not use the root container URI if the resource is a container - if ((!this.settings.resourcesWithContainerPath || !containerUri) && !isContainer) { - // Use the root container URI - containerUri = this.settings.podProvider - ? await ctx.call('solid-storage.getBaseUrl', { webId: urlJoin(this.settings.baseUrl, ctx.meta.dataset) }) - : this.settings.baseUrl; - } - - let resourceAlreadyExists = await ctx.call('ldp.resource.exist', { - resourceUri: urlJoin(containerUri, slug || uuid), - webId: 'system' - }); - - let counter = 0; - if (resourceAlreadyExists) { - if (isContainer) { - throw new Error( - `Invalid slug for container. A resource with URI ${urlJoin(containerUri, slug || uuid)} already exists` - ); - } - - do { - if (slug) { - // If a slug is declared, add a number at the end - counter += 1; - slug += counter; - } else { - // If no slug is declared, generate a new UUID - uuid = uuidv4(); - } - resourceAlreadyExists = await ctx.call('ldp.resource.exist', { - resourceUri: urlJoin(containerUri, slug || uuid), - webId: 'system' - }); - } while (resourceAlreadyExists); - } - - return urlJoin(containerUri, slug || uuid); - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index 101a04ed8..b7b45e869 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -31,7 +31,6 @@ export interface Registration { path?: string; types?: string | string[]; shapeTreeUri?: string; - readOnly?: boolean; activateTombstones?: boolean; excludeFromMirror?: boolean; permissions?: WacPermissionFunction | WacPermissionObject; diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index 88f343652..5f821dc78 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -97,7 +97,9 @@ const getDatasetFromUri = (uri: any) => { } }; -// Transforms "http://localhost:3000/alice/data" to "http://localhost:3000/alice" +/** + * @deprecated Does not work anymore + */ const getWebIdFromUri = (uri: any) => { const path = getPathFromUri(uri); if (path) { diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 8ef1b67fa..4c6a782f3 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; import { pim } from '@semapps/ontologies'; -import { getWebIdFromUri, Registration, arrayOf } from '@semapps/ldp'; +import { Registration, arrayOf } from '@semapps/ldp'; const SolidStorageSchema = { name: 'solid-storage' as const, @@ -160,28 +160,17 @@ const SolidStorageSchema = { getBaseUrl: { params: { - webId: { type: 'string', optional: true }, username: { type: 'string', optional: true } }, async handler(ctx) { - const { webId, username } = ctx.params; - if (username) { - return urlJoin(this.settings.baseUrl, username); - } else if (webId) { - return getWebIdFromUri(webId); - } else { - throw new Error(`The webId or username param is required`); - } + const username = ctx.params.username || ctx.meta.dataset; + return urlJoin(this.settings.baseUrl, username); } }, getRootContainerUri: { - params: { - webId: { type: 'string' } - }, async handler(ctx) { - const { webId } = ctx.params; - const webIdData = await ctx.call('ldp.resource.get', { resourceUri: webId }); + const webIdData = await ctx.call('webid.get'); return webIdData?.['pim:storage']; } } diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index b4de82ba3..d69905a70 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -1,4 +1,4 @@ -import { ControlledResourceMixin, getWebIdFromUri } from '@semapps/ldp'; +import { ControlledResourceMixin } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; import { ServiceSchema } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index 82186a1c0..da853c48f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; -import { Registration } from '@semapps/ldp'; +import { getDatasetFromUri, Registration } from '@semapps/ldp'; export const action = { visibility: 'public', @@ -11,9 +11,7 @@ export const action = { for (const { permissions, path } of registrations) { if (permissions) { - const baseUrl = this.settings.podProvider - ? await ctx.call('solid-storage.getBaseUrl', { webId }) - : this.settings.baseUrl; + const baseUrl = await ctx.call('solid-storage.getBaseUrl', { username: getDatasetFromUri(webId) }); const containerUri = urlJoin(baseUrl, path); diff --git a/website/docs/middleware/ldp/controlled-resource.md b/website/docs/middleware/ldp/controlled-resource.md index 3e830287b..601c69525 100644 --- a/website/docs/middleware/ldp/controlled-resource.md +++ b/website/docs/middleware/ldp/controlled-resource.md @@ -17,8 +17,7 @@ module.exports = { '@type': 'vcard:AddressBook', 'vcard:title': 'My address book' }, - permissions: {}, - readOnly: false + permissions: {} } }; ``` @@ -27,12 +26,11 @@ module.exports = { All settings relative to this mixin should be set in a `imageProcessor` key. -| Property | Type | Default | Description | -| -------------- | --------- | ------- | ------------------------------------------------------------------------------ | -| `path` | `String` | | If not specified, or if the `allowSlugs` setting is false, a UUID will be used | -| `initialValue` | `Object` | {} | Value for the resources to be created | -| `permissions` | `Object` | {} | Permissions to be applied | -| `readOnly` | `Boolean` | false | If true, it will not be possible to call the PUT/PATCH method on this resource | +| Property | Type | Default | Description | +| -------------- | -------- | ------- | ------------------------------------------------------------------------------ | +| `path` | `String` | | If not specified, or if the `allowSlugs` setting is false, a UUID will be used | +| `initialValue` | `Object` | {} | Value for the resources to be created | +| `permissions` | `Object` | {} | Permissions to be applied | ## Actions diff --git a/website/docs/middleware/ldp/index.md b/website/docs/middleware/ldp/index.md index d1fb2547c..5f02d556e 100644 --- a/website/docs/middleware/ldp/index.md +++ b/website/docs/middleware/ldp/index.md @@ -81,14 +81,13 @@ module.exports = { The following options can be set for each container, or they can be set in the `defaultContainerOptions` settings. | Property | Type | Default | Description | -| ------------------------- | --------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ------------------------- | --------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | | `accept` | `String` | "text/turtle" | Type to return (`application/ld+json`, `text/turtle` or `application/n-triples`) | | `types` | `Array` | | RDF classes accepted in this container. This is not enforced but used by some services to identify containers. | | `excludeFromMirror` | `Boolean` | false | If true, other servers will not be able to [mirror](../sync/mirror) this container. | | `activateTombstones` | `Boolean` | true | If true, and if the ActivityPubService setting is also true, [Tombstones](https://www.w3.org/TR/activitypub/#delete-activity-outbox) will replace deleted resources. | | `permissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions of the container itself. For the permissions object shape, see [`webacl.resource.addRights`](resource.md#addrights) action. | -| `newResourcesPermissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions for new resources. [See the docs here](../webacl/index.md#default-permissions-for-new-resources) | -| `readOnly` | `Boolean` | false | Do not set `POST`, `PATCH`, `PUT` and `DELETE` routes for the container and its resources | +| `newResourcesPermissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions for new resources. [See the docs here](../webacl/index.md#default-permissions-for-new-resources) | | | `preferredView` | `String` | | A part of the final URL for redirecting to the preferred view of the resource (see below). | | `controlledActions` | `Object` | | Use custom actions instead of the LDP ones (post, list, get, create, put, patch, delete). Used by the [ControlledContainerMixin](controlled-container) | @@ -104,8 +103,6 @@ These catch-all routes are automatically added to the `ApiGateway` service. | `PATCH` | `ldp.resource.patch` | `ldp.container.patch` | | `DELETE` | `ldp.resource.delete` | `ldp.container.delete` | -> Note: If the `readOnly` container option is set (see above), only `GET` routes are added. - ## Redirecting to a frontend app When a browser visits the URL of an LDP resource, for example https://data.yourserver.com/users/alice, with an `Accept` From 9dc7fd969548ccd2e51044614f133bbae018a4ae Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 31 Oct 2025 16:47:52 +0100 Subject: [PATCH 103/165] Cleanup podProvider setting from LdpService --- .../services/activitypub/subservices/inbox.ts | 5 +- .../packages/ldp/mixins/document-tagger.ts | 5 +- src/middleware/packages/ldp/package.json | 1 - .../packages/ldp/routes/getCatchAllRoute.ts | 4 +- src/middleware/packages/ldp/service.ts | 15 ++--- .../packages/ldp/services/api/index.ts | 31 ++++------- .../packages/ldp/services/container/index.ts | 11 ++-- .../packages/ldp/services/registry/index.ts | 3 +- .../ldp/services/remote/actions/delete.ts | 20 +++---- .../ldp/services/remote/actions/get.ts | 7 +-- .../ldp/services/remote/actions/store.ts | 2 +- .../packages/ldp/services/remote/index.ts | 46 +--------------- .../resource/actions/getContainers.ts | 14 +---- .../packages/ldp/services/resource/index.ts | 5 +- src/middleware/packages/ldp/types.ts | 1 - src/middleware/packages/ldp/utils.ts | 2 +- src/middleware/packages/sync/package.json | 1 + .../services/single-resource-synchronizer.ts | 55 +++++++++++++++++++ src/middleware/tests/ldp/initialize.ts | 8 ++- 19 files changed, 104 insertions(+), 132 deletions(-) create mode 100644 src/middleware/packages/sync/services/single-resource-synchronizer.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 9f92831f8..abc539a5e 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -54,10 +54,7 @@ const InboxService = { if (!account) throw new E.NotFoundError(); if (account.deletedAt) throw new MoleculerError(`User does not exist anymore`, 410, 'GONE'); - if (this.settings.podProvider) { - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - ctx.meta.dataset = account.username; - } + ctx.meta.dataset = account.username; // We want the next operations to be done by the system // TODO check if we can avoid this, as this is a bad practice diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 494d56a5f..0852f18d8 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -43,7 +43,7 @@ const Schema = { if (triples.length > 0) { await ctx.call('triplestore.update', { query: `INSERT DATA { GRAPH <${resourceUri}> { ${triples.join('\n')} } }`, - dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, + dataset: dataset || getDatasetFromUri(resourceUri), webId: 'system' }); } @@ -63,7 +63,7 @@ const Schema = { }> "${now.toISOString()}"^^ } WHERE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } `, - dataset: this.settings.podProvider ? dataset || getDatasetFromUri(resourceUri) : undefined, + dataset: dataset || getDatasetFromUri(resourceUri), webId: 'system' }); } @@ -82,7 +82,6 @@ const Schema = { 'ldp.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, dataset } = ctx.params; this.actions.tagUpdatedResource({ resourceUri, dataset }, { parentCtx: ctx }); } diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index 46c511e90..e02a53daf 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -17,7 +17,6 @@ "http-link-header": "^1.1.1", "mime-types": "^2.1.35", "moleculer-db": "^0.8.16", - "moleculer-schedule": "^0.2.3", "moleculer-web": "^0.10.0-beta1", "node-fetch": "^2.6.6", "path-to-regexp": "^6.2.0", diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts index 40c60ad6d..1e7b2db8a 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts @@ -11,7 +11,7 @@ import { saveDatasetMeta } from '@semapps/middlewares'; -function getCatchAllRoute(basePath: any, podProvider: any) { +function getCatchAllRoute(basePath: string) { const middlewares = [ parseUrl, parseHeader, @@ -25,7 +25,7 @@ function getCatchAllRoute(basePath: any, podProvider: any) { return { name: 'ldp', - path: path.join(basePath, podProvider ? '/:username([^/.][^/]+)/:slugParts*' : '/:slugParts([^/_][^/]+)*'), + path: path.join(basePath, '/:username([^/.][^/]+)/:slugParts*'), // Disable the body parsers so that we can parse the body ourselves // (Moleculer-web doesn't handle non-JSON bodies, so we must do it) bodyParsers: false, diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 5d085265f..f89472236 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -14,7 +14,6 @@ const LdpSchema = { settings: { baseUrl: null, containers: [], - podProvider: false, defaultContainerOptions: {}, preferredViewForResource: null, allowSlugs: true, @@ -24,7 +23,7 @@ const LdpSchema = { }, dependencies: ['ldp.container', 'ldp.resource', 'ldp.registry', 'ontologies', 'jsonld'], async created() { - const { baseUrl, containers, podProvider, defaultContainerOptions, preferredViewForResource, allowSlugs, binary } = + const { baseUrl, containers, defaultContainerOptions, preferredViewForResource, allowSlugs, binary } = this.settings; // @ts-expect-error TS(2322): Type '{ name: "ldp.container"; settings: { baseUrl... Remove this comment to see the full error message @@ -32,7 +31,6 @@ const LdpSchema = { mixins: [LdpContainerService], settings: { baseUrl, - podProvider, allowSlugs }, hooks: this.schema.hooksContainer || {} @@ -43,7 +41,6 @@ const LdpSchema = { mixins: [LdpResourceService], settings: { baseUrl, - podProvider, preferredViewForResource, allowSlugs, binary @@ -55,20 +52,17 @@ const LdpSchema = { this.broker.createService({ mixins: [LdpRemoteService], settings: { - baseUrl, - podProvider + baseUrl } }); - // @ts-expect-error TS(2322): Type '{ name: "ldp.registry"; settings: { baseUrl:... Remove this comment to see the full error message this.broker.createService({ mixins: [LdpRegistryService], settings: { baseUrl, containers, allowSlugs, - defaultOptions: defaultContainerOptions, - podProvider + defaultOptions: defaultContainerOptions } }); @@ -76,8 +70,7 @@ const LdpSchema = { this.broker.createService({ mixins: [LdpApiService], settings: { - baseUrl, - podProvider + baseUrl } }); diff --git a/src/middleware/packages/ldp/services/api/index.ts b/src/middleware/packages/ldp/services/api/index.ts index 5af245628..8c24c4994 100644 --- a/src/middleware/packages/ldp/services/api/index.ts +++ b/src/middleware/packages/ldp/services/api/index.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import headAction from './actions/head.ts'; @@ -9,11 +9,10 @@ import putAction from './actions/put.ts'; import getCatchAllRoute from '../../routes/getCatchAllRoute.ts'; import getPodsRoute from '../../routes/getPodsRoute.ts'; -const LdpApiSchema = { +const LdpApiService = { name: 'ldp.api' as const, settings: { - baseUrl: null, - podProvider: false + baseUrl: null }, dependencies: ['api'], actions: { @@ -25,36 +24,26 @@ const LdpApiSchema = { put: putAction }, async started() { - const { baseUrl, podProvider } = this.settings; + const { baseUrl } = this.settings; const { pathname: basePath } = new URL(baseUrl); - if (podProvider) { - await this.broker.call('api.addRoute', { route: getPodsRoute(basePath) }); - } - - await this.broker.call('api.addRoute', { - route: getCatchAllRoute(basePath, podProvider) - }); + await this.broker.call('api.addRoute', { route: getPodsRoute(basePath) }); + await this.broker.call('api.addRoute', { route: getCatchAllRoute(basePath) }); }, methods: { getUriFromSlugParts(slugParts, username) { - if (this.settings.podProvider && username) { - if (!slugParts) slugParts = []; // Root container on pods doesn't have a trailing slash - return urlJoin(this.settings.baseUrl, username, ...slugParts); - } else { - if (!slugParts || slugParts.length === 0) slugParts = ['/']; // Root container has a trailing slash - return urlJoin(this.settings.baseUrl, ...slugParts); - } + if (!slugParts) slugParts = []; // Root container on pods doesn't have a trailing slash + return urlJoin(this.settings.baseUrl, username, ...slugParts); } } } satisfies ServiceSchema; -export default LdpApiSchema; +export default LdpApiService; declare global { export namespace Moleculer { export interface AllServices { - [LdpApiSchema.name]: typeof LdpApiSchema; + [LdpApiService.name]: typeof LdpApiService; } } } diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index 8822f3a75..3e0c501cc 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -14,11 +14,10 @@ import postAction from './actions/post.ts'; import patchAction from './actions/patch.ts'; import { getDatasetFromUri } from '../../utils.ts'; -const LdpContainerSchema = { +const LdpContainerService = { name: 'ldp.container' as const, settings: { baseUrl: null, - podProvider: false, allowSlugs: true }, dependencies: ['triplestore', 'jsonld'], @@ -41,14 +40,12 @@ const LdpContainerSchema = { before: { '*'(ctx) { if ( - // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message - this.settings.podProvider && !ctx.meta.dataset && ctx.params.containerUri && // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'string ... Remove this comment to see the full error message ctx.params.containerUri.startsWith(this.settings.baseUrl) ) { - // this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${ctx.params.containerUri}`); + this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${ctx.params.containerUri}`); ctx.meta.dataset = getDatasetFromUri(ctx.params.containerUri); } } @@ -56,12 +53,12 @@ const LdpContainerSchema = { } } satisfies ServiceSchema; -export default LdpContainerSchema; +export default LdpContainerService; declare global { export namespace Moleculer { export interface AllServices { - [LdpContainerSchema.name]: typeof LdpContainerSchema; + [LdpContainerService.name]: typeof LdpContainerService; } } } diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 11cd7cda9..1816181b0 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -13,8 +13,7 @@ const LdpRegistryService = { baseUrl: undefined, containers: [], defaultOptions, - allowSlugs: true, - podProvider: false + allowSlugs: true }, dependencies: ['ldp.container', 'api'], actions: { diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index 1f8505035..0fec53648 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -const Schema = { +const DeleteAction = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -16,14 +16,12 @@ const Schema = { ); } - if (this.settings.podProvider) { - if (!webId || webId === 'system' || webId === 'anon') { - throw new Error(`Cannot delete remote resource in cache without a webId (Provided: ${webId})`); - } - const account = await ctx.call('auth.account.findByWebId', { webId }); - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - ctx.meta.dataset = account.username; + if (!webId || webId === 'system' || webId === 'anon') { + throw new Error(`Cannot delete remote resource in cache without a webId (Provided: ${webId})`); } + const account = await ctx.call('auth.account.findByWebId', { webId }); + // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. + ctx.meta.dataset = account.username; const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); if (!exist) throw new Error(`No named graph found with resource ${resourceUri} (webId: ${webId})`); @@ -34,8 +32,8 @@ const Schema = { await ctx.call('triplestore.named-graph.delete', { uri: resourceUri }); // Detach from all containers - const containers = await ctx.call('ldp.resource.getContainers', { resourceUri }); - for (const containerUri of containers) { + const containersUris: string[] = await ctx.call('ldp.resource.getContainers', { resourceUri }); + for (const containerUri of containersUris) { await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId: 'system' }); } @@ -54,4 +52,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default DeleteAction; diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index 199389190..ea547de6b 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,5 +1,5 @@ import { ActionSchema } from 'moleculer'; -import { cleanUndefined } from '../../../utils.ts'; +import { cleanUndefined, isWebId } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -23,10 +23,7 @@ const Schema = { const webId = ctx.params.webId || ctx.meta.webId || 'anon'; // Without webId, we have no way to know which dataset to look in, so get from network - const strategy = - this.settings.podProvider && (!webId || webId === 'anon' || webId === 'system') - ? 'networkOnly' - : ctx.params.strategy; + const strategy = !isWebId(webId) ? 'networkOnly' : ctx.params.strategy; if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { throw new Error( diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index 8705c1757..e23eb3b84 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -46,7 +46,7 @@ const Schema = { }; } - if (!dataset && this.settings.podProvider) { + if (!dataset) { if (!webId) { throw new Error(`In Pod provider config, a webId or dataset param must be provided to ldp.remote.store`); } diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index 41e1c505c..cbf882646 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,5 +1,3 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message -import Schedule from 'moleculer-schedule'; import { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; @@ -10,10 +8,8 @@ import storeAction from './actions/store.ts'; const LdpRemoteSchema = { name: 'ldp.remote' as const, - mixins: [Schedule], settings: { - baseUrl: null, - podProvider: false + baseUrl: null }, dependencies: ['triplestore', 'jsonld'], actions: { @@ -34,46 +30,8 @@ const LdpRemoteSchema = { async proxyAvailable() { const services = await this.broker.call('$node.services'); return services.some((s: any) => s.name === 'signature.proxy'); - }, - async updateSingleMirroredResources() { - if (!this.settings.podProvider) { - const singles = await this.broker.call('triplestore.query', { - query: ` - SELECT DISTINCT ?s - WHERE { - GRAPH ?g { - ?s ?o - } - } - ` - }); - - for (const resourceUri of singles.map((node: any) => node.s.value)) { - try { - await this.actions.store({ - resourceUri, - keepInSync: true - }); - } catch (e) { - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code === 403 || e.code === 404 || e.code === 401) { - await this.actions.delete({ resourceUri }); - } else { - // Connection errors are not counted as errors that indicate the resource is gone. - // Those error just indicate that the remote server is not responding. Can be temporary. - this.logger.warn(`Failed to update single mirrored resource: ${resourceUri}`); - } - } - } - } } - }, - jobs: [ - { - rule: '0 * * * *', - handler: 'updateSingleMirroredResources' - } - ] + } } satisfies ServiceSchema; export default LdpRemoteSchema; diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index 90022a837..cd9ce6b61 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,7 +1,6 @@ import { ActionSchema } from 'moleculer'; -import { getContainerFromUri } from '../../../utils.ts'; -const Schema = { +const GetContainersAction = { visibility: 'public', params: { resourceUri: 'string', @@ -11,15 +10,6 @@ const Schema = { const { resourceUri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset; - // In the POD provider config, the root container with actors is not a real LDP container - // Because we have chosen not to use a common dataset for this kind of data - // So we use the deprecated getContainerFromUri to find the container - // TODO store actors in a proper LDP container, with its own dataset ? - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - if (this.settings.podProvider && `${getContainerFromUri(resourceUri)}/` === this.settings.baseUrl) { - return [getContainerFromUri(resourceUri)]; - } - const result = await ctx.call('triplestore.query', { query: ` PREFIX ldp: @@ -38,4 +28,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default GetContainersAction; diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index c88ae53da..8109faaae 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -16,7 +16,6 @@ const LdpResourceSchema = { name: 'ldp.resource' as const, settings: { baseUrl: null, - podProvider: false, preferredViewForResource: null, allowSlugs: true, binary: { @@ -40,13 +39,13 @@ const LdpResourceSchema = { hooks: { before: { '*'(ctx) { - // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message - if (this.settings.podProvider && !ctx.meta.dataset) { + if (!ctx.meta.dataset) { // If we have a pod provider, guess the dataset from the URI const uri = ctx.params.resourceUri || (ctx.params.resource && (ctx.params.resource.id || ctx.params.resource['@id'])); // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'string ... Remove this comment to see the full error message if (uri && uri.startsWith(this.settings.baseUrl)) { + this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${uri}`); ctx.meta.dataset = getDatasetFromUri(uri); } } diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index b7b45e869..c720325b0 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -44,5 +44,4 @@ export interface LdpRegistryServiceSettings { containers: Registration[]; defaultOptions: Partial; allowSlugs: boolean; - podProvider: boolean; } diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index 5f821dc78..55fd2fcfd 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -86,7 +86,7 @@ const getPathFromUri = (uri: any) => { } }; -// Transforms "http://localhost:3000/alice/data" to "alice" +// Transforms "http://localhost:3000/alice/{uuid}" to "alice" const getDatasetFromUri = (uri: any) => { const path = getPathFromUri(uri); if (path) { diff --git a/src/middleware/packages/sync/package.json b/src/middleware/packages/sync/package.json index 0fdef24b8..bf20bc5c2 100644 --- a/src/middleware/packages/sync/package.json +++ b/src/middleware/packages/sync/package.json @@ -8,6 +8,7 @@ "@semapps/activitypub": "1.2.0", "@semapps/ldp": "1.2.0", "@semapps/mime-types": "1.2.0", + "moleculer-schedule": "^0.2.3", "node-fetch": "^2.6.6", "url-join": "^4.0.1" }, diff --git a/src/middleware/packages/sync/services/single-resource-synchronizer.ts b/src/middleware/packages/sync/services/single-resource-synchronizer.ts new file mode 100644 index 000000000..db39c45ec --- /dev/null +++ b/src/middleware/packages/sync/services/single-resource-synchronizer.ts @@ -0,0 +1,55 @@ +// @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message +import Schedule from 'moleculer-schedule'; + +const SingleResourceSynchronizerService = { + name: 'single-resource-synchronizer' as const, + mixins: [Schedule], + methods: { + async updateSingleMirroredResources() { + const singles = await this.broker.call('triplestore.query', { + query: ` + SELECT DISTINCT ?s + WHERE { + GRAPH ?g { + ?s ?o + } + } + ` + }); + + for (const resourceUri of singles.map((node: any) => node.s.value)) { + try { + await this.broker.call('ldp.remote.store', { + resourceUri, + keepInSync: true + }); + } catch (e) { + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + if (e.code === 403 || e.code === 404 || e.code === 401) { + await this.broker.call('ldp.remote.delete', { resourceUri }); + } else { + // Connection errors are not counted as errors that indicate the resource is gone. + // Those error just indicate that the remote server is not responding. Can be temporary. + this.logger.warn(`Failed to update single mirrored resource: ${resourceUri}`); + } + } + } + } + }, + jobs: [ + { + rule: '0 * * * *', + handler: 'updateSingleMirroredResources' + } + ] +}; + +export default SingleResourceSynchronizerService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [SingleResourceSynchronizerService.name]: typeof SingleResourceSynchronizerService; + } + } +} diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index a9ee77f2c..94a4cc0a7 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -7,7 +7,7 @@ import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { dropDataset } from '../utils.ts'; +import { listDatasets, dropDataset } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -43,8 +43,10 @@ const containers = [ ]; const initialize = async (allowSlugs = true): Promise => { - await dropDataset('alice'); - await dropDataset(CONFIG.SETTINGS_DATASET); + const datasets: string[] = await listDatasets(); + for (let dataset of datasets) { + await dropDataset(dataset); + } const uploadsPath = pathJoin(__dirname, '../uploads'); if (fs.existsSync(uploadsPath)) { From 62f1d19fbedad71e6f4a6c006d5a4c26db9b8590 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 31 Oct 2025 17:41:45 +0100 Subject: [PATCH 104/165] Add redirect to WebID and accounts tests --- src/middleware/packages/webid/package.json | 1 + .../packages/webid/routes/getRedirectRoute.ts | 18 +++ src/middleware/packages/webid/service.ts | 37 +++--- src/middleware/tests/account/account.test.ts | 121 ++++++++++++++++++ src/middleware/tests/account/initialize.ts | 73 +++++++++++ src/middleware/tests/utils.ts | 8 +- src/middleware/tests/webId/webId.test.ts | 69 ---------- 7 files changed, 230 insertions(+), 97 deletions(-) create mode 100644 src/middleware/packages/webid/routes/getRedirectRoute.ts create mode 100644 src/middleware/tests/account/account.test.ts create mode 100644 src/middleware/tests/account/initialize.ts delete mode 100644 src/middleware/tests/webId/webId.test.ts diff --git a/src/middleware/packages/webid/package.json b/src/middleware/packages/webid/package.json index 183e7af96..bae325ba8 100644 --- a/src/middleware/packages/webid/package.json +++ b/src/middleware/packages/webid/package.json @@ -7,6 +7,7 @@ "dependencies": { "@semapps/activitypub": "1.2.0", "@semapps/ldp": "1.2.0", + "@semapps/middleware": "1.2.0", "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", "url-join": "^4.0.1" diff --git a/src/middleware/packages/webid/routes/getRedirectRoute.ts b/src/middleware/packages/webid/routes/getRedirectRoute.ts new file mode 100644 index 000000000..8da16b5fa --- /dev/null +++ b/src/middleware/packages/webid/routes/getRedirectRoute.ts @@ -0,0 +1,18 @@ +import path from 'path'; +import { parseUrl, saveDatasetMeta } from '@semapps/middlewares'; + +const getRedirectRoute = (basePath: string) => { + const middlewares = [parseUrl, saveDatasetMeta]; + + return { + name: 'redirect-to-webid', + path: path.join(basePath, '/:username'), + authorization: false, + authentication: false, + aliases: { + 'GET /': [...middlewares, 'webid.redirectToWebId'] + } + }; +}; + +export default getRedirectRoute; diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index c88a4e56b..1f1366430 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,6 +1,7 @@ import { foaf, schema } from '@semapps/ontologies'; -import { ControlledResourceMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; +import { ControlledResourceMixin, DereferenceMixin } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; +import getRedirectRoute from './routes/getRedirectRoute.ts'; const WebIdService = { name: 'webid' as const, @@ -22,30 +23,24 @@ const WebIdService = { { property: 'assertionMethod' } ] }, - dependencies: ['ontologies'], + dependencies: ['ontologies', 'api', 'ldp'], async started() { await this.broker.call('ontologies.register', foaf); await this.broker.call('ontologies.register', schema); + + const basePath: string = await this.broker.call('ldp.getBasePath'); + + await this.broker.call('api.addRoute', { route: getRedirectRoute(basePath) }); + }, + actions: { + redirectToWebId: { + async handler(ctx) { + const webId = await ctx.call('webid.getUri'); + ctx.meta.$statusCode = 301; + ctx.meta.$location = webId; + } + } } - // actions: { - // get: { - // handler(ctx) { - // // Always get WebID as system and on the correct dataset, since they are public - // return ctx.call( - // 'ldp.resource.get', - // { - // ...ctx.params, - // webId: 'system' - // }, - // { - // meta: { - // dataset: this.settings.podProvider ? getDatasetFromUri(ctx.params.resourceUri) : undefined - // } - // } - // ); - // } - // } - // } } satisfies ServiceSchema; export default WebIdService; diff --git a/src/middleware/tests/account/account.test.ts b/src/middleware/tests/account/account.test.ts new file mode 100644 index 000000000..79808ba6d --- /dev/null +++ b/src/middleware/tests/account/account.test.ts @@ -0,0 +1,121 @@ +import { ServiceBroker } from 'moleculer'; +import initialize from './initialize.ts'; +import { createAccount, fetchServer } from '../utils.ts'; +import * as CONFIG from '../config.ts'; + +jest.setTimeout(50000); +let broker: ServiceBroker; +let alice: any; + +describe.each([true])('Account tests with allowSlugs: %s', (allowSlugs: boolean) => { + beforeAll(async () => { + broker = await initialize(allowSlugs); + await broker.start(); + alice = await createAccount(broker, 'alice'); + }); + + afterAll(async () => { + if (broker) await broker.stop(); + }); + + test('WebID is created', async () => { + const rootContainerUri = await alice.call('solid-storage.getRootContainerUri'); + + const publicTypeIndexUri = await alice.call('public-type-index.getUri'); + + const webIdData = await alice.call('webid.get'); + expect(webIdData).toMatchObject({ + id: alice.webId, + type: expect.arrayContaining(['foaf:Agent', 'foaf:Person']), + 'foaf:nick': 'alice', + 'pim:storage': rootContainerUri, + 'solid:oidcIssuer': CONFIG.HOME_URL!.replace(/\/$/, ''), + 'solid:publicTypeIndex': publicTypeIndexUri + }); + }); + + test('Root container is created', async () => { + const rootContainerUri = await alice.call('solid-storage.getRootContainerUri'); + + const containersUris = await alice.call('ldp.container.getUris', { containerUri: rootContainerUri }); + expect(containersUris).toHaveLength(5); // 2 containers and 3 resources + + if (allowSlugs) { + expect(containersUris).toStrictEqual( + expect.arrayContaining([ + 'http://localhost:3000/alice/public-key', + 'http://localhost:3000/alice/key', + 'http://localhost:3000/alice/private-type-index', + 'http://localhost:3000/alice/public-type-index', + 'http://localhost:3000/alice/webid' + ]) + ); + } + }); + + test('Public type index is created', async () => { + const publicTypeIndex = await alice.call('public-type-index.get'); + expect(publicTypeIndex['@graph']).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + type: 'solid:TypeRegistration', + 'solid:forClass': 'foaf:Agent', + 'solid:instance': expect.anything() + }), + expect.objectContaining({ + type: 'solid:TypeRegistration', + 'solid:forClass': expect.arrayContaining(['solid:TypeIndex', 'solid:ListedDocument']), + 'solid:instance': expect.anything() + }), + expect.objectContaining({ + type: 'solid:TypeRegistration', + 'solid:forClass': expect.arrayContaining([ + 'https://www.w3.org/ns/auth/rsa#RSAKey', + 'urn:ed25519-key', + 'https://w3id.org/security/jwk/v1', + 'sec:Multikey', + 'sec:VerificationMethod', + 'sec:Key' + ]), + 'solid:instanceContainer': expect.anything() + }) + ]) + ); + }); + + test('Private type index is created', async () => { + const privateTypeIndex = await alice.call('private-type-index.get'); + expect(privateTypeIndex['@graph']).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + type: 'solid:TypeRegistration', + 'solid:forClass': expect.arrayContaining(['solid:TypeIndex', 'solid:UnlistedDocument']), + 'solid:instance': expect.anything() + }), + expect.objectContaining({ + type: 'solid:TypeRegistration', + 'solid:forClass': expect.arrayContaining([ + 'https://www.w3.org/ns/auth/rsa#RSAKey', + 'urn:ed25519-key', + 'https://w3id.org/security/jwk/v1', + 'sec:Multikey', + 'sec:VerificationMethod', + 'sec:Key' + ]), + 'solid:instanceContainer': expect.anything() + }) + ]) + ); + }); + + test('Base URL redirects to WebID', async () => { + const baseUrl = await alice.call('solid-storage.getBaseUrl'); + + const { json } = await fetchServer(baseUrl); + + expect(json).toMatchObject({ + id: alice.webId, + type: expect.arrayContaining(['foaf:Agent', 'foaf:Person']) + }); + }); +}); diff --git a/src/middleware/tests/account/initialize.ts b/src/middleware/tests/account/initialize.ts new file mode 100644 index 000000000..f7162125f --- /dev/null +++ b/src/middleware/tests/account/initialize.ts @@ -0,0 +1,73 @@ +import { ServiceBroker } from 'moleculer'; +import fs from 'fs'; +import path, { join as pathJoin } from 'path'; +import { CoreService } from '@semapps/core'; +import { as, pair, petr, semapps, solid, vcard } from '@semapps/ontologies'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { AuthLocalService } from '@semapps/auth'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { listDatasets, dropDataset } from '../utils.ts'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const initialize = async (allowSlugs = true): Promise => { + const datasets: string[] = await listDatasets(); + for (let dataset of datasets) { + await dropDataset(dataset); + } + + const uploadsPath = pathJoin(__dirname, '../uploads'); + if (fs.existsSync(uploadsPath)) { + fs.readdirSync(uploadsPath).forEach(f => fs.rmSync(`${uploadsPath}/${f}`, { recursive: true, force: true })); + } + + const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message + middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], + logger: { + type: 'Console', + options: { + level: 'warn' + } + } + }); + + broker.createService({ + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message + mixins: [CoreService], + settings: { + baseUrl: CONFIG.HOME_URL, + baseDir: path.resolve(__dirname, '..'), + triplestore: { + url: CONFIG.SPARQL_ENDPOINT, + user: CONFIG.JENA_USER, + password: CONFIG.JENA_PASSWORD, + secure: false // TODO Remove when we move to Fuseki 5 + }, + containers: [], + ontologies: [as, pair, petr, solid, vcard, semapps], + activitypub: false, + webfinger: false, + webid: false, + ldp: { + allowSlugs + } + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message + broker.createService({ + mixins: [AuthLocalService], + settings: { + baseUrl: CONFIG.HOME_URL, + podProvider: true, + jwtPath: path.resolve(__dirname, '../jwt'), + accountsDataset: CONFIG.SETTINGS_DATASET + } + }); + + return broker; +}; + +export default initialize; diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 83c13064a..d75d66e9b 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -31,12 +31,10 @@ export const dropDataset = (dataset: any) => } }); -export const fetchServer = (url: any, options = {}) => { +export const fetchServer = (url: string, options: fetch.RequestInit = {}) => { if (!url) throw new Error('No url provided to fetchServer'); - // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers) options.headers = new fetch.Headers(); - // @ts-expect-error TS(2339): Property 'method' does not exist on type '{}'. switch (options.method) { case 'POST': case 'PATCH': @@ -57,16 +55,12 @@ export const fetchServer = (url: any, options = {}) => { // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. if (options.body && options.headers.get('Content-Type').includes('json')) { - // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. options.body = JSON.stringify(options.body); } return fetch(url, { - // @ts-expect-error TS(2339): Property 'method' does not exist on type '{}'. method: options.method || 'GET', - // @ts-expect-error TS(2339): Property 'body' does not exist on type '{}'. body: options.body, - // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. headers: options.headers }) .then(response => diff --git a/src/middleware/tests/webId/webId.test.ts b/src/middleware/tests/webId/webId.test.ts deleted file mode 100644 index 4c7e3e14b..000000000 --- a/src/middleware/tests/webId/webId.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -import path from 'path'; -import { ServiceBroker } from 'moleculer'; -import { CoreService } from '@semapps/core'; -import { fileURLToPath } from 'url'; -import * as CONFIG from '../config.ts'; -import { dropDataset } from '../utils.ts'; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - -jest.setTimeout(20000); - -const broker = new ServiceBroker({ - logger: { - type: 'Console', - options: { - level: 'warn' - } - }, - cacher: CONFIG.ACTIVATE_CACHE -}); - -beforeAll(async () => { - await dropDataset(CONFIG.MAIN_DATASET); - - broker.createService({ - mixins: [CoreService], - settings: { - baseUrl: CONFIG.HOME_URL, - baseDir: path.resolve(__dirname, '..'), - triplestore: { - url: CONFIG.SPARQL_ENDPOINT, - user: CONFIG.JENA_USER, - password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET, - secure: false // TODO Remove when we move to Fuseki 5 - }, - containers: ['/users'], - activitypub: false, - mirror: false, - void: false, - webacl: false, - webfinger: false, - webid: { - path: '/users' - } - } - }); - - await broker.start(); -}); - -afterAll(async () => { - await broker.stop(); -}); - -describe('WebId user creation', () => { - test('Create user and get WebId', async () => { - const profileData = { - email: 'my.mail@example.org', - nick: 'my-nick', - name: 'jon', - familyName: 'do', - homepage: 'http://example.org/myPage' - }; - - const webId = await broker.call('webid.createWebId', profileData); - expect(webId).toBe(`${CONFIG.HOME_URL}users/${profileData.nick}`); - }, 20000); -}); From 7589a58ea0a4ff54f92cd682f213a8c85d625cb4 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 10 Nov 2025 18:43:36 +0100 Subject: [PATCH 105/165] Working WAC tests --- src/middleware/packages/core/service.ts | 1 - src/middleware/packages/ldp/index.ts | 5 +- src/middleware/packages/ldp/package.json | 1 + .../packages/ldp/services/api/actions/put.ts | 2 +- src/middleware/packages/ldp/types.ts | 18 +- src/middleware/packages/webacl/index.ts | 1 + .../packages/webacl/middlewares/webacl.ts | 24 +-- src/middleware/packages/webacl/package.json | 1 - .../packages/webacl/routes/getRoutes.ts | 4 +- src/middleware/packages/webacl/service.ts | 18 +- .../services/group/actions/addMember.ts | 6 +- .../webacl/services/group/actions/create.ts | 6 +- .../webacl/services/group/actions/delete.ts | 8 +- .../services/group/actions/getGroups.ts | 4 +- .../services/group/actions/getMembers.ts | 8 +- .../services/group/actions/removeMember.ts | 6 +- .../packages/webacl/services/group/index.ts | 145 ++++++------- .../services/resource/actions/addRights.ts | 38 ++-- .../resource/actions/awaitReadRight.ts | 10 +- .../resource/actions/deleteAllRights.ts | 5 +- .../resource/actions/deleteAllUserRights.ts | 5 +- .../services/resource/actions/getLink.ts | 4 +- .../services/resource/actions/getRights.ts | 72 +++---- .../actions/getUsersWithReadRights.ts | 9 +- .../services/resource/actions/hasRights.ts | 24 +-- .../services/resource/actions/isPublic.ts | 7 +- .../actions/refreshContainersRights.ts | 17 +- .../services/resource/actions/removeRights.ts | 9 +- .../services/resource/actions/setRights.ts | 37 ++-- .../webacl/services/resource/index.ts | 50 ++--- src/middleware/packages/webacl/types.ts | 23 +++ src/middleware/packages/webacl/utils.ts | 2 +- .../tests/ldp/content-negotiation.test.ts | 16 +- src/middleware/tests/utils.ts | 8 +- src/middleware/tests/webacl/groupCRUD.test.ts | 33 +-- src/middleware/tests/webacl/initialize.ts | 30 +-- src/middleware/tests/webacl/resource.test.ts | 147 +++++++------- .../tests/webacl/resourceCRUD.test.ts | 95 ++++----- .../tests/webacl/sparql-injection.test.ts | 37 ++-- src/middleware/tests/webacl/utils.test.ts | 190 ++++++++++++------ 40 files changed, 595 insertions(+), 531 deletions(-) create mode 100644 src/middleware/packages/webacl/types.ts diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 7ed774387..2ff2ac24d 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -168,7 +168,6 @@ const CoreService = { mixins: [WebIdService], settings: { baseUrl, - podProvider: true, ...this.settings.webid } }); diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index a9ef8fce1..6b928e4f8 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -16,9 +16,9 @@ import SpecialEndpointMixin from './mixins/special-endpoint.ts'; import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; import defaultContainerOptions from './services/registry/defaultOptions.ts'; import LdpAdapter from './adapter.ts'; -import { Registration } from './types.ts'; export * from './utils.ts'; +export * from './types.ts'; export { LdpService, LdpCacheService, @@ -37,6 +37,5 @@ export { SpecialEndpointMixin, OrphanFilesDeletionMixin, defaultContainerOptions, - LdpAdapter, - Registration + LdpAdapter }; diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index e02a53daf..db00a77b5 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -11,6 +11,7 @@ "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", "@semapps/triplestore": "1.2.0", + "@semapps/webacl": "1.2.0", "bytes": "^3.1.2", "cron": "^4.1.4", "dashify": "^2.0.0", diff --git a/src/middleware/packages/ldp/services/api/actions/put.ts b/src/middleware/packages/ldp/services/api/actions/put.ts index 4fa0cb43e..fac22c061 100644 --- a/src/middleware/packages/ldp/services/api/actions/put.ts +++ b/src/middleware/packages/ldp/services/api/actions/put.ts @@ -41,7 +41,7 @@ export default async function post(this: any, ctx: any) { }; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); + console.error(e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. ctx.meta.$statusCode = e.code || 500; // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index c720325b0..ab6cb8f44 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -1,3 +1,5 @@ +import { WacPermissionObject, WacPermissionFunction } from '@semapps/webacl'; + interface ControlledActions { post: string; list: string; @@ -9,22 +11,6 @@ interface ControlledActions { delete: string; } -export interface WacPermission { - read: boolean; - write: boolean; - append: boolean; - control: boolean; -} - -export interface WacPermissionObject { - anon?: WacPermission; - anyUser?: WacPermission; - user?: { uri: string } & WacPermission; - group?: { uri: string } & WacPermission; -} - -export type WacPermissionFunction = (webId: string) => WacPermissionObject; - export interface Registration { name: string; isContainer: boolean; diff --git a/src/middleware/packages/webacl/index.ts b/src/middleware/packages/webacl/index.ts index 47fe64e70..52eaf057e 100644 --- a/src/middleware/packages/webacl/index.ts +++ b/src/middleware/packages/webacl/index.ts @@ -5,4 +5,5 @@ import WebAclMiddleware from './middlewares/webacl.ts'; import CacherMiddleware from './middlewares/cacher.ts'; export * from './utils.ts'; +export * from './types.ts'; export { GroupsManagerBot, AuthorizerBot, WebAclService, WebAclMiddleware, CacherMiddleware }; diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 029166d10..898dc8de5 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -1,6 +1,5 @@ import urlJoin from 'url-join'; -import { defaultContainerOptions } from '@semapps/ldp'; -import { getSlugFromUri } from '../utils.ts'; +import { defaultContainerOptions, getDatasetFromUri, isWebId } from '@semapps/ldp'; const modifyActions = [ 'ldp.resource.create', @@ -57,7 +56,7 @@ const addRightsToNewUser = async (ctx: any, userUri: any) => { /** * Middleware that ensures that requests are conforming ACL records. */ -const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://semapps.org/webacl' }: any) => ({ +const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: any) => ({ name: 'WebAclMiddleware' as const, async started() { if (!baseUrl) throw new Error('The baseUrl config is missing for the WebACL middleware'); @@ -227,8 +226,8 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se case 'ldp.remote.store': { const resourceUri = ctx.params.resourceUri || ctx.params.resource.id || ctx.params.resource['@id']; // When a remote resource is stored locally, give read permission to the logged user - if (webId && webId !== 'system' && webId !== 'anon') { - const dataset = podProvider ? getSlugFromUri(webId) : undefined; + if (isWebId(webId)) { + const dataset = getDatasetFromUri(webId); await ctx.call( 'webacl.resource.addRights', { @@ -291,17 +290,16 @@ const WebAclMiddleware = ({ baseUrl, podProvider = false, graphName = 'http://se }; } else if (tripleStoreActions.includes(action.name)) { return async (ctx: any) => { - if (podProvider) { - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const dataset = ctx.params.dataset || ctx.meta.dataset; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + const dataset = ctx.params.dataset || ctx.meta.dataset; - if (!dataset) throw new Error(`The dataset param or meta is missing when calling ${action.name}`); + if (!dataset) throw new Error(`The dataset param or meta is missing when calling ${action.name}`); - // If the webId is the owner of the Pod, bypass WAC checks - if (urlJoin(baseUrl, dataset) === webId) { - ctx.params.webId = 'system'; - } + // If the webId is the owner of the Pod, bypass WAC checks + if (urlJoin(baseUrl, dataset) === webId) { + ctx.params.webId = 'system'; } + return next(ctx); }; } diff --git a/src/middleware/packages/webacl/package.json b/src/middleware/packages/webacl/package.json index 53950c84a..aa349430b 100644 --- a/src/middleware/packages/webacl/package.json +++ b/src/middleware/packages/webacl/package.json @@ -23,7 +23,6 @@ "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", "@semapps/triplestore": "1.2.0", - "jsonld-streaming-serializer": "^1.2.0", "n3": "^1.8.0", "rdf-parse": "^1.7.0", "speakingurl": "^14.0.1", diff --git a/src/middleware/packages/webacl/routes/getRoutes.ts b/src/middleware/packages/webacl/routes/getRoutes.ts index fbb3916b3..bec5873ea 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.ts +++ b/src/middleware/packages/webacl/routes/getRoutes.ts @@ -10,7 +10,7 @@ const onError = (req: any, res: any, err: any) => { res.end(JSON.stringify({ type, code, message, data, name })); }; -const getRoutes = (basePath: any, podProvider: any) => { +const getRoutes = (basePath: string) => { const middlewares = [parseHeader, negotiateContentType, negotiateAccept, parseRawBody, parseJson]; return [ @@ -40,7 +40,7 @@ const getRoutes = (basePath: any, podProvider: any) => { onError }, { - path: path.join(basePath, podProvider ? '/_groups/:username([^/._][^/]+)' : '/_groups'), + path: path.join(basePath, '/_groups/:username([^/._][^/]+)'), name: 'acl-groups', authorization: false, authentication: true, diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index 9dcfffe2f..cc9f64fff 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -6,34 +6,32 @@ import WebAclGroupService from './services/group/index.ts'; import WebAclAuthorizerService from './services/authorizer/index.ts'; import getRoutes from './routes/getRoutes.ts'; -const WebaclSchema = { +const WebAclService = { name: 'webacl' as const, settings: { baseUrl: null, graphName: 'http://semapps.org/webacl', - podProvider: false, superAdmins: [] }, dependencies: ['api', 'ontologies'], async created() { - const { baseUrl, graphName, podProvider, superAdmins } = this.settings; + const { baseUrl, graphName, superAdmins } = this.settings; + // @ts-expect-error TS(2322): Type '{ name: "webacl.resource"; settings: { baseUrl:... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclResourceService], settings: { baseUrl, - graphName, - podProvider + graphName } }); + // @ts-expect-error TS(2322): Type '{ name: "webacl.group"; settings: { baseUrl:... Remove this comment to see the full error message this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "webacl.group"; settings: { baseUrl:... Remove this comment to see the full error message mixins: [WebAclGroupService], settings: { baseUrl, graphName, - podProvider, superAdmins } }); @@ -50,7 +48,7 @@ const WebaclSchema = { async started() { const { pathname: basePath } = new URL(this.settings.baseUrl); - for (const route of getRoutes(basePath, this.settings.podProvider)) { + for (const route of getRoutes(basePath)) { await this.broker.call('api.addRoute', { route }); } @@ -60,12 +58,12 @@ const WebaclSchema = { } } satisfies ServiceSchema; -export default WebaclSchema; +export default WebAclService; declare global { export namespace Moleculer { export interface AllServices { - [WebaclSchema.name]: typeof WebaclSchema; + [WebAclService.name]: typeof WebAclService; } } } diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 49adaf53e..6b75bfb34 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -6,10 +6,12 @@ const { MoleculerError } = Errors; export const api = async function api(ctx: any) { if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + + // TODO See if this is not already done by a middleware + ctx.meta.dataset = ctx.params.username; await ctx.call('webacl.group.addMember', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, + groupSlug: `${ctx.params.username}/${ctx.params.id}`, memberUri: ctx.params.memberUri }); diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 5baf7c756..0626ec11a 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -8,10 +8,12 @@ const { MoleculerError } = Errors; export const api = async function api(ctx: any) { if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + + // TODO See if this is not already done by a middleware + ctx.meta.dataset = ctx.params.username; const { groupUri } = await ctx.call('webacl.group.create', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.meta.headers.slug}` : ctx.meta.headers.slug + groupSlug: `${ctx.params.username}/${ctx.meta.headers.slug}` }); ctx.meta.$responseHeaders = { diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index b214fa263..56eac4ebd 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -6,10 +6,10 @@ import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; const { MoleculerError } = Errors; export const api = async function api(ctx: any) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.delete', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id - }); + // TODO See if this is not already done by a middleware + ctx.meta.dataset = ctx.params.username; + + await ctx.call('webacl.group.delete', { groupSlug: `${ctx.params.username}/${ctx.params.id}` }); ctx.meta.$statusCode = 204; }; diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index fd780d834..0d57f8d10 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,7 +1,9 @@ import { ActionSchema } from 'moleculer'; export const api = async function api(ctx: any) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + // TODO See if this is not already done by a middleware + ctx.meta.dataset = ctx.params.username; + return await ctx.call('webacl.group.getGroups', {}); }; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index c3850feb0..af0c67cfb 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -5,10 +5,10 @@ import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; export const api = async function api(ctx: any) { - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; - return await ctx.call('webacl.group.getMembers', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id - }); + // TODO See if this is not already done by a middleware + ctx.meta.dataset = ctx.params.username; + + return await ctx.call('webacl.group.getMembers', { groupSlug: `${ctx.params.username}/${ctx.params.id}` }); }; export const action = { diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 1a7f8ce56..549f42709 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -7,10 +7,12 @@ const { MoleculerError } = Errors; export const api = async function api(ctx: any) { if (!ctx.params.deleteUserUri) throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); - if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; + + // TODO See if this is not already done by a middleware + ctx.meta.dataset = ctx.params.username; await ctx.call('webacl.group.removeMember', { - groupSlug: this.settings.podProvider ? `${ctx.params.username}/${ctx.params.id}` : ctx.params.id, + groupSlug: `${ctx.params.username}/${ctx.params.id}`, memberUri: ctx.params.deleteUserUri }); diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index 8a7addf31..039130785 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -1,5 +1,4 @@ -import urlJoin from 'url-join'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import * as createAction from './actions/create.ts'; import * as deleteAction from './actions/delete.ts'; import * as existAction from './actions/exist.ts'; @@ -15,7 +14,6 @@ const WebaclGroupSchema = { settings: { baseUrl: null, graphName: null, - podProvider: false, superAdmins: [] }, dependencies: ['triplestore', 'webacl.resource', 'ldp.container'], @@ -34,100 +32,89 @@ const WebaclGroupSchema = { api_getGroups: getGroupsAction.api, getMembers: getMembersAction.action, api_getMembers: getMembersAction.api, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ groupSlug: { type: "string"; ... Remove this comment to see the full error message removeMember: removeMemberAction.action, api_removeMember: removeMemberAction.api }, async started() { - const superAdminsGroupUri = urlJoin(this.settings.baseUrl, '_groups', 'superadmins'); - - if (!this.settings.podProvider) { - // Remove existing superAdmins users in database if they are not listed in superAdmins setting - const superAdmins = Array.isArray(this.settings.superAdmins) ? this.settings.superAdmins : []; - - const members = await this.actions.getMembers({ - groupUri: superAdminsGroupUri, - webId: 'system' - }); - - await Promise.all( - members - .filter((memberUri: any) => !superAdmins.includes(memberUri)) - .map((memberUri: any) => - this.actions.removeMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' }) - ) - ); - } - + // const superAdminsGroupUri = urlJoin(this.settings.baseUrl, '_groups', 'superadmins'); + // if (!this.settings.podProvider) { + // // Remove existing superAdmins users in database if they are not listed in superAdmins setting + // const superAdmins = Array.isArray(this.settings.superAdmins) ? this.settings.superAdmins : []; + // const members = await this.actions.getMembers({ + // groupUri: superAdminsGroupUri, + // webId: 'system' + // }); + // await Promise.all( + // members + // .filter((memberUri: any) => !superAdmins.includes(memberUri)) + // .map((memberUri: any) => + // this.actions.removeMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' }) + // ) + // ); + // } // Add as superAdmins users listed in superAdmins setting - if (this.settings.superAdmins && this.settings.superAdmins.length > 0) { - if (this.settings.podProvider) { - throw new Error('You cannot create a superadmin group in a POD provider config'); - } - - const groupExists = await this.actions.exist({ groupSlug: 'superadmins', webId: 'system' }); - - if (!groupExists) { - this.logger.info("Super admin group doesn't exist, creating it..."); - await this.actions.create({ groupSlug: 'superadmins', webId: 'system' }); - } - - const rootContainerExist = await this.broker.call('ldp.container.exist', { containerUri: this.settings.baseUrl }); - - if (!rootContainerExist) { - throw new Error('To give superadmins rights, you must setup a root container'); - } - - // Give full rights to root container - await this.broker.call('webacl.resource.addRights', { - resourceUri: this.settings.baseUrl, - additionalRights: { - group: { - uri: superAdminsGroupUri, - read: true, - write: true, - control: true - }, - default: { - group: { - uri: superAdminsGroupUri, - read: true, - write: true, - control: true - } - } - }, - webId: 'system' - }); - - for (const memberUri of this.settings.superAdmins) { - const isMember = await this.actions.isMember({ - groupUri: superAdminsGroupUri, - memberId: memberUri, - webId: 'system' - }); - - if (!isMember) { - this.logger.info(`User ${memberUri} is not member of superadmins group, adding it...`); - await this.actions.addMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' }); - } - } - } + // if (this.settings.superAdmins && this.settings.superAdmins.length > 0) { + // if (this.settings.podProvider) { + // throw new Error('You cannot create a superadmin group in a POD provider config'); + // } + // const groupExists = await this.actions.exist({ groupSlug: 'superadmins', webId: 'system' }); + // if (!groupExists) { + // this.logger.info("Super admin group doesn't exist, creating it..."); + // await this.actions.create({ groupSlug: 'superadmins', webId: 'system' }); + // } + // const rootContainerExist = await this.broker.call('ldp.container.exist', { containerUri: this.settings.baseUrl }); + // if (!rootContainerExist) { + // throw new Error('To give superadmins rights, you must setup a root container'); + // } + // // Give full rights to root container + // await this.broker.call('webacl.resource.addRights', { + // resourceUri: this.settings.baseUrl, + // additionalRights: { + // group: { + // uri: superAdminsGroupUri, + // read: true, + // write: true, + // control: true + // }, + // default: { + // group: { + // uri: superAdminsGroupUri, + // read: true, + // write: true, + // control: true + // } + // } + // }, + // webId: 'system' + // }); + // for (const memberUri of this.settings.superAdmins) { + // const isMember = await this.actions.isMember({ + // groupUri: superAdminsGroupUri, + // memberId: memberUri, + // webId: 'system' + // }); + // if (!isMember) { + // this.logger.info(`User ${memberUri} is not member of superadmins group, adding it...`); + // await this.actions.addMember({ groupUri: superAdminsGroupUri, memberUri, webId: 'system' }); + // } + // } + // } }, hooks: { before: { '*'(ctx) { - // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message - if (this.settings.podProvider && !ctx.meta.dataset) { + if (!ctx.meta.dataset) { if (ctx.params.groupUri) { const groupPath = new URL(ctx.params.groupUri).pathname; const parts = groupPath.split('/'); if (parts.length > 2) { + this.logger.warn(`No dataset found when calling ${ctx.action.name}. Using ${parts[2]}`); ctx.meta.dataset = parts[2]; } } else if (ctx.params.groupSlug) { const parts = ctx.params.groupSlug.split('/'); if (parts.length > 1) { + this.logger.warn(`No dataset found when calling ${ctx.action.name}. Using ${parts[1]}`); ctx.meta.dataset = parts[1]; } } diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index 48fd9e72e..87a9a6e0f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -1,6 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; - import { ActionSchema, Errors } from 'moleculer'; import { getAclUriFromResourceUri, @@ -13,27 +12,29 @@ import { const { MoleculerError } = Errors; -export const api = async function api(ctx: any) { - const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; +export const api = { + async handler(ctx) { + const contentType = ctx.meta.headers['content-type']; + let { slugParts } = ctx.params; - if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) - throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); + if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) + throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); - // @ts-expect-error TS(18046): 'addedRights' is of type 'unknown'. - if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); + const addedRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + // @ts-expect-error TS(18046): 'addedRights' is of type 'unknown'. + if (addedRights.length === 0) throw new MoleculerError('Nothing to add', 400, 'BAD_REQUEST'); - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - await ctx.call('webacl.resource.addRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - addedRights - }); + await ctx.call('webacl.resource.addRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + addedRights + }); - ctx.meta.$statusCode = 204; -}; + ctx.meta.$statusCode = 204; + } +} satisfies ActionSchema; export const action = { visibility: 'public', @@ -154,7 +155,6 @@ export const action = { const returnValues = { uri: resourceUri, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, webId, created: false, @@ -163,7 +163,9 @@ export const action = { addPublicRead, addDefaultPublicRead }; + ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); + return returnValues; } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index 1e097f88b..aa842c748 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -1,6 +1,7 @@ import { ActionSchema } from 'moleculer'; +import { WacPermission } from '../../../types.ts'; -export const action = { +const AwaitReadRightAction = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -14,7 +15,7 @@ export const action = { let interval: any; const checkRights = () => { ctx - .call('webacl.resource.hasRights', { + .call('webacl.resource.hasRights', { resourceUri, rights: { read: true }, webId @@ -23,12 +24,11 @@ export const action = { if (rights.read === true) { if (interval) clearInterval(interval); resolve(true); - // @ts-expect-error TS(18048): 'timeout' is possibly 'undefined'. } else if (i * 1000 >= timeout) { if (interval) clearInterval(interval); resolve(false); } - i++; + i += 1; }); }; checkRights(); // Try immediately, then launch interval @@ -36,3 +36,5 @@ export const action = { }); } } satisfies ActionSchema; + +export default AwaitReadRightAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index a63783a8d..55b1aec98 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -export const action = { +const DeleteAllRightsAction = { visibility: 'public', params: { resourceUri: { type: 'string', optional: false } @@ -24,9 +24,10 @@ export const action = { ctx.emit( 'webacl.resource.deleted', - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. { uri: resourceUri, dataset: ctx.meta.dataset, isContainer }, { meta: { webId: null, dataset: null } } ); } } satisfies ActionSchema; + +export default DeleteAllRightsAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index 1904e9b9d..735f5a996 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -export const action = { +const DeleteAllUserRightsAction = { visibility: 'public', params: { webId: { type: 'string', optional: false } @@ -20,9 +20,10 @@ export const action = { ctx.emit( 'webacl.resource.user-deleted', - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. { webId, dataset: ctx.meta.dataset }, { meta: { webId: null, dataset: null } } ); } } satisfies ActionSchema; + +export default DeleteAllUserRightsAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index dbbb10573..667ad6d2b 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -1,7 +1,7 @@ import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri } from '../../../utils.ts'; -export const action = { +const GetLinkAction = { visibility: 'public', params: { uri: { type: 'string', optional: false } @@ -14,3 +14,5 @@ export const action = { }; } } satisfies ActionSchema; + +export default GetLinkAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 8c200432d..8054bfbe9 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -1,8 +1,7 @@ -import { JsonLdSerializer } from 'jsonld-streaming-serializer'; -import { DataFactory, Writer } from 'n3'; +import { Writer } from 'n3'; import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema, Errors } from 'moleculer'; +import { ActionSchema, Context, Errors } from 'moleculer'; import { getAuthorizationNode, findParentContainers, @@ -11,7 +10,6 @@ import { getUserAgentSearchParam } from '../../../utils.ts'; -const { quad } = DataFactory; const { MoleculerError } = Errors; const prefixes = { @@ -41,20 +39,11 @@ const webAclContext = { } }; -function streamToString(stream: any) { - let res = ''; - return new Promise((resolve, reject) => { - stream.on('data', (chunk: any) => (res += chunk)); - stream.on('error', (err: any) => reject(err)); - stream.on('end', () => resolve(res)); - }); -} - -async function formatOutput(ctx: any, output: any, resourceAclUri: any, jsonLD: any) { - const turtle = await new Promise((resolve, reject) => { +async function formatOutput(ctx: Context, output: any, resourceAclUri: string, jsonLD: boolean) { + const rdf = await new Promise(resolve => { const writer = new Writer({ prefixes: { ...prefixes, '': `${resourceAclUri}#` }, - format: 'Turtle' + format: jsonLD ? 'N-Quad' : 'Turtle' // If we need to convert to JSON-LD, we generate N-Quads to increase performance }); output.forEach((f: any) => writer.addQuad(f.auth, f.p, f.o)); writer.end((error, res) => { @@ -62,20 +51,12 @@ async function formatOutput(ctx: any, output: any, resourceAclUri: any, jsonLD: }); }); - if (!jsonLD) return turtle; - - const mySerializer = new JsonLdSerializer({ - context: webAclContext, - baseIRI: resourceAclUri - }); - - output.forEach((f: any) => mySerializer.write(quad(f.auth, f.p, f.o))); - mySerializer.end(); + if (!jsonLD) return rdf; - // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message - const jsonLd = JSON.parse(await streamToString(mySerializer)); + const jsonLd = await ctx.call('jsonld.parser.fromRDF', { input: rdf, options: { format: 'application/n-quads' } }); - const compactJsonLd = await ctx.call('jsonld.parser.frame', { + // Reframe the results with the WebACL JSON-LD context + const compactJsonLd: any = await ctx.call('jsonld.parser.frame', { input: jsonLd, frame: { '@context': webAclContext, @@ -122,13 +103,9 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an // Get the ACL for the resource - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName); - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName); - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName); - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName); document.push(...(await filterAcls(hasControl, uaSearchParam, reads))); @@ -187,21 +164,23 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an return await formatOutput(ctx, document, resourceAclUri, ctx.meta.$responseType === MIME_TYPES.JSON); } -export const api = async function api(ctx: any) { - const { accept } = ctx.meta.headers; - let { slugParts } = ctx.params; +export const api = { + async handler(ctx) { + const { accept } = ctx.meta.headers; + let { slugParts } = ctx.params; - if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) - throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); + if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) + throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - return await ctx.call('webacl.resource.getRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - accept - }); -}; + return await ctx.call('webacl.resource.getRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + accept + }); + } +} satisfies ActionSchema; export const action = { visibility: 'public', @@ -215,11 +194,10 @@ export const action = { keys: ['resourceUri', 'accept', 'webId', '#webId'] }, async handler(ctx) { - let { resourceUri, webId, accept, skipResourceCheck } = ctx.params; - webId = webId || ctx.meta.webId || 'anon'; + let { resourceUri, accept, skipResourceCheck } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; accept = accept || MIME_TYPES.TURTLE; - // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = accept; const isContainer = !skipResourceCheck && (await this.checkResourceOrContainerExists(ctx, resourceUri)); diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index 242bed6a0..d725e5c55 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -1,7 +1,7 @@ import { arrayOf } from '@semapps/ldp'; import { ActionSchema } from 'moleculer'; -export const action = { +const GetUsersWithReadRightsAction = { visibility: 'public', params: { resourceUri: { type: 'string' } @@ -10,8 +10,9 @@ export const action = { const { resourceUri } = ctx.params; const authorizations = await this.actions.getRights({ resourceUri, webId: 'system' }, { parentCtx: ctx }); + const readAuthorization = - authorizations['@graph'] && authorizations['@graph'].find((auth: any) => auth['@id'] === '#Read'); + authorizations['@graph'] && authorizations['@graph'].find((auth: any) => auth['@id'].endsWith('#Read')); let usersWithReadRights = []; @@ -20,7 +21,7 @@ export const action = { const groupsWithReadRights = arrayOf(readAuthorization['acl:agentGroup']); for (const groupUri of groupsWithReadRights) { - const members = await ctx.call('webacl.group.getMembers', { groupUri, webId: 'system' }); + const members: string[] = await ctx.call('webacl.group.getMembers', { groupUri, webId: 'system' }); if (members) usersWithReadRights.push(...members); } } @@ -29,3 +30,5 @@ export const action = { return [...new Set(usersWithReadRights)]; } } satisfies ActionSchema; + +export default GetUsersWithReadRightsAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index 5d36b8625..1176cc7e6 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -1,5 +1,4 @@ import urlJoin from 'url-join'; - import { ActionSchema } from 'moleculer'; import { getAuthorizationNode, @@ -83,18 +82,20 @@ async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, base return resultRights; } -export const api = async function api(ctx: any) { - let { slugParts } = ctx.params; +export const api = { + async handler(ctx) { + let { slugParts } = ctx.params; - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - return await ctx.call('webacl.resource.hasRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - rights: ctx.params.rights, - webId: ctx.meta.webId - }); -}; + return await ctx.call('webacl.resource.hasRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + rights: ctx.params.rights, + webId: ctx.meta.webId + }); + } +} satisfies ActionSchema; export const action = { visibility: 'public', @@ -123,7 +124,6 @@ export const action = { }, async handler(ctx) { let { resourceUri, webId, rights } = ctx.params; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = webId || ctx.meta.webId || 'anon'; rights = rights || {}; if (Object.keys(rights).length === 0) rights = { read: true, write: true, append: true, control: true }; diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts index a63713a35..2e9093698 100644 --- a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts +++ b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts @@ -1,13 +1,14 @@ import { ActionSchema } from 'moleculer'; +import { WacPermission } from '../../../types.ts'; -export const action = { +const IsPublicAction = { visibility: 'public', params: { resourceUri: { type: 'string' } }, async handler(ctx) { const { resourceUri } = ctx.params; - const { read } = await ctx.call('webacl.resource.hasRights', { + const { read }: WacPermission = await ctx.call('webacl.resource.hasRights', { resourceUri, rights: { read: true }, webId: 'anon' @@ -15,3 +16,5 @@ export const action = { return read; } } satisfies ActionSchema; + +export default IsPublicAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index da853c48f..c971ada19 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,8 +1,9 @@ import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; import { getDatasetFromUri, Registration } from '@semapps/ldp'; +import { WacPermission, WacPermissionObject } from '../../../types.ts'; -export const action = { +const RefreshContainersRightsAction = { visibility: 'public', async handler(ctx) { const { webId } = ctx.params; @@ -11,18 +12,16 @@ export const action = { for (const { permissions, path } of registrations) { if (permissions) { - const baseUrl = await ctx.call('solid-storage.getBaseUrl', { username: getDatasetFromUri(webId) }); + const baseUrl: string = await ctx.call('solid-storage.getBaseUrl', { username: getDatasetFromUri(webId) }); - const containerUri = urlJoin(baseUrl, path); + const containerUri = urlJoin(baseUrl, path!); - const containerRights = - typeof permissions === 'function' - ? permissions(this.settings.podProvider ? webId : 'system', ctx) - : permissions; + const containerRights: WacPermissionObject = + typeof permissions === 'function' ? permissions(webId, ctx) : permissions; this.logger.info(`Refreshing rights for container ${containerUri}...`); - const publicPermissions = await ctx.call('webacl.resource.hasRights', { + const publicPermissions: WacPermission = await ctx.call('webacl.resource.hasRights', { resourceUri: containerUri, rights: { read: true }, webId: 'anon' @@ -57,3 +56,5 @@ export const action = { } } } satisfies ActionSchema; + +export default RefreshContainersRightsAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index ba068b7dd..970845419 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -1,9 +1,7 @@ -import { ActionSchema, Errors } from 'moleculer'; +import { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; -const { MoleculerError } = Errors; - -export const action = { +const RemoveRightsAction = { visibility: 'public', params: { resourceUri: { type: 'string', optional: false }, @@ -58,7 +56,6 @@ export const action = { { uri: resourceUri, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, isContainer, defaultRightsUpdated, @@ -69,3 +66,5 @@ export const action = { ); } } satisfies ActionSchema; + +export default RemoveRightsAction; diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index a1196b75a..a801aa94f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -12,27 +12,29 @@ import { const { MoleculerError } = Errors; -export const api = async function api(ctx: any) { - const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; +export const api = { + async handler(ctx) { + const contentType = ctx.meta.headers['content-type']; + let { slugParts } = ctx.params; - if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) - throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); + if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) + throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); - const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); - // @ts-expect-error TS(18046): 'newRights' is of type 'unknown'. - if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); + const newRights = await convertBodyToTriples(ctx.meta.rawBody, contentType); + // @ts-expect-error TS(18046): 'newRights' is of type 'unknown'. + if (newRights.length === 0) throw new MoleculerError('PUT rights cannot be empty', 400, 'BAD_REQUEST'); - // This is the root container - if (!slugParts || slugParts.length === 0) slugParts = ['/']; + // This is the root container + if (!slugParts || slugParts.length === 0) slugParts = ['/']; - await ctx.call('webacl.resource.setRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), - newRights - }); + await ctx.call('webacl.resource.setRights', { + resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + newRights + }); - ctx.meta.$statusCode = 204; -}; + ctx.meta.$statusCode = 204; + } +} satisfies ActionSchema; export const action = { visibility: 'public', @@ -141,7 +143,6 @@ export const action = { const returnValues = { uri: resourceUri, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset, created: false, isContainer, @@ -151,7 +152,9 @@ export const action = { addDefaultPublicRead, removeDefaultPublicRead }; + ctx.emit('webacl.resource.updated', returnValues, { meta: { webId: null, dataset: null } }); + return returnValues; } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index d0f858e6e..7a49f67f9 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -1,17 +1,17 @@ import urlJoin from 'url-join'; -import { ServiceSchema, defineAction, Errors } from 'moleculer'; +import { ServiceSchema, Errors } from 'moleculer'; import * as addRights from './actions/addRights.ts'; -import * as awaitReadRight from './actions/awaitReadRight.ts'; -import * as deleteAllRights from './actions/deleteAllRights.ts'; -import * as deleteAllUserRights from './actions/deleteAllUserRights.ts'; -import * as getLink from './actions/getLink.ts'; import * as getRights from './actions/getRights.ts'; -import * as getUsersWithReadRights from './actions/getUsersWithReadRights.ts'; import * as hasRights from './actions/hasRights.ts'; -import * as isPublic from './actions/isPublic.ts'; -import * as refreshContainersRights from './actions/refreshContainersRights.ts'; -import * as removeRights from './actions/removeRights.ts'; import * as setRights from './actions/setRights.ts'; +import awaitReadRight from './actions/awaitReadRight.ts'; +import deleteAllRights from './actions/deleteAllRights.ts'; +import deleteAllUserRights from './actions/deleteAllUserRights.ts'; +import getLink from './actions/getLink.ts'; +import getUsersWithReadRights from './actions/getUsersWithReadRights.ts'; +import isPublic from './actions/isPublic.ts'; +import refreshContainersRights from './actions/refreshContainersRights.ts'; +import removeRights from './actions/removeRights.ts'; import { getAuthorizationNode, @@ -40,12 +40,11 @@ const filterAclsOnlyAgent = (acl: any) => agentPredicates.includes(acl.p.value); * - The nested json format as used in "additionalRights" (https://semapps.org/docs/middleware/webacl/resource#addrights) * - organized by user, group, anon, anyUser. See the documentation for the details. */ -const WebaclResourceSchema = { +const WebaclResourceService = { name: 'webacl.resource' as const, settings: { baseUrl: null, - graphName: null, - podProvider: false + graphName: null }, dependencies: ['triplestore', 'jsonld', 'ldp.link-header'], started() { @@ -54,28 +53,29 @@ const WebaclResourceSchema = { }, actions: { addRights: addRights.action, - awaitReadRight: awaitReadRight.action, - deleteAllRights: deleteAllRights.action, - deleteAllUserRights: deleteAllUserRights.action, - getLink: getLink.action, getRights: getRights.action, hasRights: hasRights.action, - isPublic: isPublic.action, - getUsersWithReadRights: getUsersWithReadRights.action, - refreshContainersRights: refreshContainersRights.action, - removeRights: removeRights.action, setRights: setRights.action, // Actions accessible through the API api_addRights: addRights.api, api_hasRights: hasRights.api, api_getRights: getRights.api, - api_setRights: setRights.api + api_setRights: setRights.api, + // Other utils + awaitReadRight, + deleteAllRights, + deleteAllUserRights, + getLink, + isPublic, + getUsersWithReadRights, + refreshContainersRights, + removeRights }, hooks: { before: { '*'(ctx) { - // @ts-expect-error TS(2339): Property 'podProvider' does not exist on type 'str... Remove this comment to see the full error message - if (this.settings.podProvider && !ctx.meta.dataset && ctx.params.resourceUri) { + if (!ctx.meta.dataset && ctx.params.resourceUri) { + this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${ctx.params.resourceUri}`); ctx.meta.dataset = getDatasetFromUri(ctx.params.resourceUri); } } @@ -153,12 +153,12 @@ const WebaclResourceSchema = { } } satisfies ServiceSchema; -export default WebaclResourceSchema; +export default WebaclResourceService; declare global { export namespace Moleculer { export interface AllServices { - [WebaclResourceSchema.name]: typeof WebaclResourceSchema; + [WebaclResourceService.name]: typeof WebaclResourceService; } } } diff --git a/src/middleware/packages/webacl/types.ts b/src/middleware/packages/webacl/types.ts new file mode 100644 index 000000000..ee7806977 --- /dev/null +++ b/src/middleware/packages/webacl/types.ts @@ -0,0 +1,23 @@ +import { Context } from 'moleculer'; + +export interface WacPermission { + read: boolean; + write: boolean; + append: boolean; + control: boolean; +} + +export interface WacPermissionObject { + anon?: WacPermission; + anyUser?: WacPermission; + user?: { uri: string } & WacPermission; + group?: { uri: string } & WacPermission; + default?: { + anon?: WacPermission; + anyUser?: WacPermission; + user?: { uri: string } & WacPermission; + group?: { uri: string } & WacPermission; + }; +} + +export type WacPermissionFunction = (webId: string, ctx?: Context) => WacPermissionObject; diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index 671b28531..b0eebb179 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -86,7 +86,7 @@ const getAuthorizationNode = async ( resourceAclUri: any, mode: any, graphName: any, - searchForDefault: any + searchForDefault?: any ) => { const query = `PREFIX rdf: \nPREFIX acl: \n${AUTHORIZATION_NODE_QUERY( mode, diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 1d5b90c1a..c913879f8 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -21,10 +21,10 @@ afterAll(async () => { describe('Content negotiation', () => { let containerUri: string; - let projectUri: string | null; - let project2Uri: string | null; - let project3Uri: string | null; - let project4Uri: string | null; + let projectUri: string; + let project2Uri: string; + let project3Uri: string; + let project4Uri: string; test('Post resource in JSON-LD', async () => { // @ts-expect-error This expression is not callable @@ -45,7 +45,7 @@ describe('Content negotiation', () => { } }); - projectUri = headers.get('Location'); + projectUri = headers.get('Location')!; expect(projectUri).not.toBeNull(); }); @@ -135,7 +135,7 @@ describe('Content negotiation', () => { expect(status).toBe(201); - project2Uri = headers.get('Location'); + project2Uri = headers.get('Location')!; const project2 = await alice.call('ldp.resource.get', { resourceUri: project2Uri @@ -161,7 +161,7 @@ describe('Content negotiation', () => { expect(status).toBe(201); - project3Uri = headers.get('Location'); + project3Uri = headers.get('Location')!; const project2 = await alice.call('ldp.resource.get', { resourceUri: project3Uri @@ -245,7 +245,7 @@ describe('Content negotiation', () => { expect(status).toBe(201); - project4Uri = headers.get('Location'); + project4Uri = headers.get('Location')!; const project4 = await alice.call('ldp.resource.get', { resourceUri: project4Uri diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index d75d66e9b..094d17ca2 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -5,6 +5,10 @@ import { ActionParamSchema, CallingOptions, ServiceBroker } from 'moleculer'; import { Account } from '@semapps/auth'; import * as CONFIG from './config.ts'; +type FetchOptions = Omit & { + body?: ArrayBuffer | ArrayBufferView | ReadableStream | string | URLSearchParams | FormData | object; +}; + export const listDatasets = async () => { const response = await fetch(`${CONFIG.SPARQL_ENDPOINT}$/datasets`, { headers: { @@ -31,7 +35,7 @@ export const dropDataset = (dataset: any) => } }); -export const fetchServer = (url: string, options: fetch.RequestInit = {}) => { +export const fetchServer = (url: string, options: FetchOptions = {}) => { if (!url) throw new Error('No url provided to fetchServer'); if (!options.headers) options.headers = new fetch.Headers(); @@ -60,7 +64,7 @@ export const fetchServer = (url: string, options: fetch.RequestInit = {}) => { return fetch(url, { method: options.method || 'GET', - body: options.body, + body: options.body as fetch.BodyInit, headers: options.headers }) .then(response => diff --git a/src/middleware/tests/webacl/groupCRUD.test.ts b/src/middleware/tests/webacl/groupCRUD.test.ts index b851c533c..5c94835d3 100644 --- a/src/middleware/tests/webacl/groupCRUD.test.ts +++ b/src/middleware/tests/webacl/groupCRUD.test.ts @@ -1,12 +1,18 @@ import urlJoin from 'url-join'; +import { ServiceBroker } from 'moleculer'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; +import { createAccount } from '../utils.ts'; jest.setTimeout(20000); -let broker: any; + +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { @@ -15,46 +21,43 @@ afterAll(async () => { describe('middleware CRUD group with perms', () => { test('Ensure a call as anonymous to webacl.group.create succeeds', async () => { - const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup5' }); + const res = await alice.call('webacl.group.create', { groupSlug: 'mygroup5' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. - expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup5')); + expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL!, '_groups', 'mygroup5')); }, 20000); test('Ensure a call as user to webacl.group.create succeeds', async () => { - const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); + const res = await alice.call('webacl.group.create', { groupSlug: 'mygroup10', webId: 'http://test/user3' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. - expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup10')); + expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL!, '_groups', 'mygroup10')); }, 20000); test('Ensure a call to webacl.group.addMember succeeds. checks also getMembers', async () => { - await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user1' }); - await broker.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user2' }); + await alice.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user1' }); + await alice.call('webacl.group.addMember', { groupSlug: 'mygroup5', memberUri: 'http://test/user2' }); - const members = await broker.call('webacl.group.getMembers', { groupSlug: 'mygroup5' }); + const members = await alice.call('webacl.group.getMembers', { groupSlug: 'mygroup5' }); expect(members).toEqual(expect.arrayContaining(['http://test/user1', 'http://test/user2'])); }, 20000); test('Ensure a call as anonymous to webacl.group.delete fails - access denied', async () => { - await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup10' })).rejects.toThrow(); + await expect(alice.call('webacl.group.delete', { groupSlug: 'mygroup10' })).rejects.toThrow(); }, 20000); test('Ensure a call as another user than creator to webacl.group.delete fails - access denied', async () => { await expect( - broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user2' }) + alice.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user2' }) ).rejects.toThrow(); }, 20000); test('Ensure a call as user to webacl.group.delete succeeds', async () => { await expect( - broker.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user3' }) + alice.call('webacl.group.delete', { groupSlug: 'mygroup10', webId: 'http://test/user3' }) ).resolves.not.toThrow(); }, 20000); test('Ensure a call as anonymous to webacl.group.delete succeeds for a group created anonymously', async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. - await expect(broker.call('webacl.group.delete', { groupSlug: 'mygroup5' })).resolves.not.toThrow(); + await expect(alice.call('webacl.group.delete', { groupSlug: 'mygroup5' })).resolves.not.toThrow(); }, 20000); }); diff --git a/src/middleware/tests/webacl/initialize.ts b/src/middleware/tests/webacl/initialize.ts index d100c1ac2..3420243cb 100644 --- a/src/middleware/tests/webacl/initialize.ts +++ b/src/middleware/tests/webacl/initialize.ts @@ -1,17 +1,20 @@ import path from 'path'; -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import { CoreService } from '@semapps/core'; -import { as } from '@semapps/ontologies'; +import { as, solid } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { fileURLToPath } from 'url'; -import { dropDataset } from '../utils.ts'; +import { dropDataset, listDatasets } from '../utils.ts'; import * as CONFIG from '../config.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const initialize = async () => { - await dropDataset(CONFIG.MAIN_DATASET); + const datasets: string[] = await listDatasets(); + for (let dataset of datasets) { + await dropDataset(dataset); + } const broker = new ServiceBroker({ // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message @@ -24,8 +27,8 @@ const initialize = async () => { } }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message mixins: [CoreService], settings: { baseUrl: CONFIG.HOME_URL, @@ -37,13 +40,15 @@ const initialize = async () => { mainDataset: CONFIG.MAIN_DATASET, secure: false // TODO Remove when we move to Fuseki 5 }, - ontologies: [as], + ontologies: [as, solid], containers: [ { - path: '/resources' + path: '/resources', + types: ['as:Article'] }, { path: '/resources2', + types: ['as:Video'], permissions: {}, newResourcesPermissions: (webId: any) => { switch (webId) { @@ -64,14 +69,11 @@ const initialize = async () => { ], activitypub: false, ldp: { - documentTagger: false + documentTagger: false, + allowSlugs: false }, mirror: false, - void: false, - webfinger: false, - webid: { - path: '/users' - } + webfinger: false } }); @@ -85,8 +87,6 @@ const initialize = async () => { } }); - await broker.start(); - return broker; }; diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts index d92caae7b..d4b933826 100644 --- a/src/middleware/tests/webacl/resource.test.ts +++ b/src/middleware/tests/webacl/resource.test.ts @@ -1,15 +1,19 @@ import rdf from '@rdfjs/data-model'; import waitForExpect from 'wait-for-expect'; -import * as CONFIG from '../config.ts'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; +import { createAccount } from '../utils.ts'; jest.setTimeout(20000); -const ALICE_WEBID = 'http://localhost:3000/alice'; const BOB_WEBID = 'http://localhost:3000/bob'; -let broker: any; +const CRAIG_WEBID = 'http://localhost:3000/craig'; +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { @@ -17,12 +21,19 @@ afterAll(async () => { }); describe('Permissions check on a specific resource', () => { - const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions - let resourceUri: any; + let containerUri: string; + let resourceUri: string; test('Get/patch/put/delete resource without permission', async () => { + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + // Container with no default permissions + containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Video', isContainer: true }); + expect(containerUri).not.toBeUndefined(); + }); + // When posting as system, no permissions are given on the resource - resourceUri = await broker.call('ldp.container.post', { + resourceUri = await alice.call('ldp.container.post', { containerUri, resource: { type: 'Event', @@ -32,14 +43,14 @@ describe('Permissions check on a specific resource', () => { }); await expect( - broker.call('ldp.resource.get', { + alice.call('ldp.resource.get', { resourceUri, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow('Forbidden'); await expect( - broker.call('ldp.resource.patch', { + alice.call('ldp.resource.patch', { resourceUri, triplesToAdd: [ rdf.quad( @@ -48,68 +59,53 @@ describe('Permissions check on a specific resource', () => { rdf.literal('Welcome everybody') ) ], - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow('Forbidden'); await expect( - broker.call('ldp.resource.put', { + alice.call('ldp.resource.put', { resource: { id: resourceUri, type: 'Event', name: 'My event #1 - edited' }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow('Forbidden'); await expect( - broker.call('ldp.resource.delete', { + alice.call('ldp.resource.delete', { resourceUri, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow('Forbidden'); }); - test('Give Alice read permission on resource', async () => { - await broker.call('webacl.resource.addRights', { + test('Give Bob read permission on resource', async () => { + await alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { - user: { uri: ALICE_WEBID, read: true } + user: { uri: BOB_WEBID, read: true } }, webId: 'system' }); - await expect( - broker.call('ldp.resource.get', { - resourceUri, - webId: ALICE_WEBID - }) - ).resolves.toBeDefined(); + await expect(alice.call('ldp.resource.get', { resourceUri, webId: BOB_WEBID })).resolves.toBeDefined(); - await expect( - broker.call('ldp.container.get', { - containerUri, - webId: ALICE_WEBID - }) - ).rejects.toThrow('Forbidden'); + await expect(alice.call('ldp.container.get', { containerUri, webId: 'anon' })).rejects.toThrow('Forbidden'); }); test('Give Alice read permission on container', async () => { - await broker.call('webacl.resource.addRights', { + await alice.call('webacl.resource.addRights', { resourceUri: containerUri, additionalRights: { - user: { uri: ALICE_WEBID, read: true } + user: { uri: BOB_WEBID, read: true } }, webId: 'system' }); - await expect( - broker.call('ldp.container.get', { - containerUri, - webId: ALICE_WEBID - }) - ).resolves.toMatchObject({ + await expect(alice.call('ldp.container.get', { containerUri })).resolves.toMatchObject({ id: containerUri, type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': expect.arrayContaining([ @@ -120,22 +116,23 @@ describe('Permissions check on a specific resource', () => { }); }); - test('Give Bob default read permission on container', async () => { - await broker.call('webacl.resource.addRights', { + test('Give Craig default read permission on container', async () => { + await alice.call('webacl.resource.addRights', { resourceUri: containerUri, additionalRights: { default: { - user: { uri: BOB_WEBID, read: true } + user: { uri: CRAIG_WEBID, read: true } } }, webId: 'system' }); + // @ts-expect-error This expression is not callable await waitForExpect(async () => { await expect( - broker.call('ldp.resource.get', { + alice.call('ldp.resource.get', { resourceUri, - webId: BOB_WEBID + webId: CRAIG_WEBID }) ).resolves.toBeDefined(); }); @@ -143,49 +140,49 @@ describe('Permissions check on a specific resource', () => { test('Post data without append permission on container', async () => { await expect( - broker.call('ldp.container.post', { + alice.call('ldp.container.post', { containerUri, resource: { type: 'Event', name: 'My event #2' }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow(); }); test('Give Alice append permission on container', async () => { - await broker.call('webacl.resource.addRights', { + await alice.call('webacl.resource.addRights', { resourceUri: containerUri, additionalRights: { - user: { uri: ALICE_WEBID, append: true } + user: { uri: BOB_WEBID, append: true } }, webId: 'system' }); await expect( - broker.call('ldp.container.post', { + alice.call('ldp.container.post', { containerUri, resource: { type: 'Event', name: 'My event #2' }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toBeDefined(); }); test('Give Alice append permission on resource', async () => { - await broker.call('webacl.resource.addRights', { + await alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { - user: { uri: ALICE_WEBID, append: true } + user: { uri: BOB_WEBID, append: true } }, webId: 'system' }); await expect( - broker.call('ldp.resource.patch', { + alice.call('ldp.resource.patch', { resourceUri, triplesToAdd: [ rdf.quad( @@ -194,12 +191,12 @@ describe('Permissions check on a specific resource', () => { rdf.literal('Welcome everybody') ) ], - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toBeDefined(); await expect( - broker.call('ldp.resource.put', { + alice.call('ldp.resource.put', { resource: { id: resourceUri, type: 'Event', @@ -207,13 +204,13 @@ describe('Permissions check on a specific resource', () => { content: 'Welcome everybody', startTime: '2014-12-31T23:00:00-08:00' }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toBeDefined(); // We cannot remove content with acl:Append permission await expect( - broker.call('ldp.resource.patch', { + alice.call('ldp.resource.patch', { resourceUri, triplesToRemove: [ rdf.quad( @@ -222,34 +219,34 @@ describe('Permissions check on a specific resource', () => { rdf.literal('Welcome everybody') ) ], - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow(); // We cannot remove content with acl:Append permission await expect( - broker.call('ldp.resource.put', { + alice.call('ldp.resource.put', { resource: { id: resourceUri, type: 'Event', name: 'My event #1 - edited' }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow(); }); test('Give Alice write permission on resource', async () => { - await broker.call('webacl.resource.addRights', { + await alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { - user: { uri: ALICE_WEBID, write: true } + user: { uri: BOB_WEBID, write: true } }, webId: 'system' }); await expect( - broker.call('ldp.resource.patch', { + alice.call('ldp.resource.patch', { resourceUri, triplesToRemove: [ rdf.quad( @@ -258,49 +255,47 @@ describe('Permissions check on a specific resource', () => { rdf.literal('Welcome everybody') ) ], - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toBeDefined(); await expect( - broker.call('ldp.resource.put', { + alice.call('ldp.resource.put', { resource: { id: resourceUri, type: 'Event', name: 'My event #1 - edited' }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toBeDefined(); }); - test('Give Alice control permission on resource', async () => { + test('Give Bob control permission on resource', async () => { await expect( - broker.call('webacl.resource.addRights', { + alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { - user: { uri: BOB_WEBID, write: true } + user: { uri: CRAIG_WEBID, write: true } }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).rejects.toThrow(); - await broker.call('webacl.resource.addRights', { + await alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { - user: { uri: ALICE_WEBID, control: true } - }, - webId: 'system' + user: { uri: BOB_WEBID, control: true } + } }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( - broker.call('webacl.resource.addRights', { + alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { - user: { uri: BOB_WEBID, write: true } + user: { uri: CRAIG_WEBID, write: true } }, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toBeDefined(); }); diff --git a/src/middleware/tests/webacl/resourceCRUD.test.ts b/src/middleware/tests/webacl/resourceCRUD.test.ts index b80482fb3..f5eb1584a 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.ts +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -1,15 +1,19 @@ import urlJoin from 'url-join'; import { getSlugFromUri } from '@semapps/ldp'; -import { fetchServer } from '../utils.ts'; +import { ServiceBroker } from 'moleculer'; +import waitForExpect from 'wait-for-expect'; +import { fetchServer, createAccount } from '../utils.ts'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); -const ALICE_WEBID = 'http://localhost:3000/alice'; -let broker: any; +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { @@ -17,56 +21,54 @@ afterAll(async () => { }); describe('middleware CRUD resource with perms', () => { + let containerUri: string; + let resourceUri: string; + test('A call to ldp.container.post fails if anonymous user, because container access denied', async () => { + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Article', isContainer: true }); + expect(containerUri).not.toBeUndefined(); + }); + await expect( - broker.call( - 'ldp.container.post', - { - resource: { - '@context': { - '@vocab': 'http://virtual-assembly.org/ontologies/pair#' - }, - '@type': 'Project', - description: 'myProject', - label: 'myTitle' + alice.call('ldp.container.post', { + resource: { + '@context': { + '@vocab': 'http://virtual-assembly.org/ontologies/pair#' }, - containerUri: `${CONFIG.HOME_URL}resources` + '@type': 'Project', + description: 'myProject', + label: 'myTitle' }, - { meta: { webId: 'anon' } } - ) + webId: 'anon' + }) ).rejects.toThrow(); }, 20000); - let resourceUri: any; - test('A call to ldp.container.post creates some default permissions', async () => { - resourceUri = await broker.call( - 'ldp.container.post', - { - resource: { - type: 'Event', - name: 'My event #1' - }, - containerUri: `${CONFIG.HOME_URL}resources` + resourceUri = await alice.call('ldp.container.post', { + resource: { + type: 'Event', + name: 'My event #1' }, - { meta: { webId: ALICE_WEBID } } - ); + containerUri + }); - await expect(broker.call('ldp.resource.get', { resourceUri, webId: ALICE_WEBID })).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri })).resolves.toMatchObject({ type: 'Event', name: 'My event #1' }); await expect( - broker.call('webacl.resource.hasRights', { + alice.call('webacl.resource.hasRights', { resourceUri, rights: { read: true, write: true, append: true, control: true - }, - webId: ALICE_WEBID + } }) ).resolves.toMatchObject({ read: true, @@ -83,7 +85,7 @@ describe('middleware CRUD resource with perms', () => { expect(result.headers.get('Link')).toMatch( // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` + `<${urlJoin(CONFIG.HOME_URL, '_acl', 'alice', getSlugFromUri(resourceUri))}>; rel=acl` ); result = await fetchServer(resourceUri, { @@ -92,26 +94,27 @@ describe('middleware CRUD resource with perms', () => { expect(result.headers.get('Link')).toMatch( // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - `<${urlJoin(CONFIG.HOME_URL, '_acl', 'resources', getSlugFromUri(resourceUri))}>; rel=acl` + `<${urlJoin(CONFIG.HOME_URL, '_acl', 'alice', getSlugFromUri(resourceUri))}>; rel=acl` ); }, 20000); test('A call to ldp.resource.delete removes all its permissions', async () => { - await broker.call('ldp.resource.delete', { - resourceUri, - webId: ALICE_WEBID - }); + await alice.call('ldp.resource.delete', { resourceUri }); - const result = await broker.call('triplestore.query', { - query: `PREFIX acl: - SELECT ?auth ?p2 ?o WHERE { GRAPH { - ?auth ?p <${resourceUri}>. - FILTER (?p IN (acl:accessTo, acl:default ) ) - ?auth ?p2 ?o } }`, - webId: 'system' + const result = await alice.call('triplestore.query', { + query: ` + PREFIX acl: + SELECT ?auth ?p2 ?o + WHERE { + GRAPH { + ?auth ?p <${resourceUri}>. + FILTER (?p IN (acl:accessTo, acl:default ) ) + ?auth ?p2 ?o + } + } + ` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(result.length).toBe(0); }, 20000); }); diff --git a/src/middleware/tests/webacl/sparql-injection.test.ts b/src/middleware/tests/webacl/sparql-injection.test.ts index 4d2fd5623..63ae38f92 100644 --- a/src/middleware/tests/webacl/sparql-injection.test.ts +++ b/src/middleware/tests/webacl/sparql-injection.test.ts @@ -1,12 +1,18 @@ import urlJoin from 'url-join'; +import { ServiceBroker } from 'moleculer'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; +import { createAccount } from '../utils.ts'; jest.setTimeout(20000); -let broker: any; + +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { broker = await initialize(); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { @@ -16,76 +22,71 @@ afterAll(async () => { describe('pentest for the ACL groups API', () => { test('Ensure an injection with > in addMember fails', async () => { try { - const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); + const res = await alice.call('webacl.group.create', { groupSlug: 'mygroup1' }); // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup1')); - await broker.call('webacl.group.addMember', { + await alice.call('webacl.group.addMember', { groupSlug: 'mygroup1', memberUri: 'http://localhost:3000/users/info1' }); - await broker.call('webacl.group.addMember', { + await alice.call('webacl.group.addMember', { groupSlug: 'mygroup1', memberUri: 'http://localhost:3000/users/info2> } };CLEAR ALL;INSERT DATA{ GRAPH { { try { - const res = await broker.call('webacl.group.create', { groupSlug: 'mygroup1' }); + const res = await alice.call('webacl.group.create', { groupSlug: 'mygroup1' }); // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(res.groupUri).toBe(urlJoin(CONFIG.HOME_URL, '_groups', 'mygroup1')); - await broker.call('webacl.group.addMember', { + await alice.call('webacl.group.addMember', { groupSlug: 'mygroup1', memberUri: 'http://localhost:3000/users/info1' }); - await broker.call('webacl.group.addMember', { + await alice.call('webacl.group.addMember', { groupSlug: 'mygroup1', memberUri: 'http://localhost:3000/users/info2\\x3C } };CLEAR ALL;INSERT DATA{ GRAPH { { broker = await initialize(); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { @@ -15,78 +22,132 @@ afterAll(async () => { }); describe('Test various actions of the webacl.resource service', () => { - const containerUri = `${CONFIG.HOME_URL}resources2`; // Container with no default permissions - let resourceUri: any; + let containerUri: string; + let resourceUri: string; + + test('Bob see his rights correctly', async () => { + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + // Container with no default permissions + containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Video', isContainer: true }); + expect(containerUri).not.toBeUndefined(); + }); - test('Alice see her rights correctly', async () => { - resourceUri = await broker.call('ldp.container.post', { + resourceUri = await alice.call('ldp.container.post', { containerUri, resource: { type: 'Event', name: 'My event #1' - }, - webId: 'system' + } }); - await broker.call('webacl.resource.addRights', { + await alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { anon: { read: true }, - user: { uri: ALICE_WEBID, read: true, write: true, control: true } + user: { uri: BOB_WEBID, read: true, write: true } }, webId: 'system' }); await expect( - broker.call('webacl.resource.hasRights', { + alice.call('webacl.resource.hasRights', { resourceUri, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toMatchObject({ read: true, append: false, // Even if we have given acl:Write permission, acl:Append is not given write: true, - control: true + control: false }); - const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: ALICE_WEBID }); + const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); + const baseUri = rights['@context']['@base']; - expect(rights['@graph']).toHaveLength(3); + expect(rights['@graph']).toHaveLength(2); expect(rights).toMatchObject({ '@graph': expect.arrayContaining([ expect.objectContaining({ - '@id': '#Read', '@type': 'acl:Authorization', + '@id': `${baseUri}#Read`, 'acl:accessTo': resourceUri, - 'acl:agent': ALICE_WEBID, + 'acl:agent': BOB_WEBID, 'acl:agentClass': 'foaf:Agent', 'acl:mode': 'acl:Read' }), expect.objectContaining({ - '@id': '#Write', '@type': 'acl:Authorization', + '@id': `${baseUri}#Write`, 'acl:accessTo': resourceUri, - 'acl:agent': ALICE_WEBID, + 'acl:agent': BOB_WEBID, 'acl:mode': 'acl:Write' + }) + ]) + }); + }); + + test('With control right, Bob also see Alice rights', async () => { + await alice.call('webacl.resource.addRights', { + resourceUri, + additionalRights: { + anon: { read: true }, + user: { uri: BOB_WEBID, control: true } + }, + webId: 'system' + }); + + await expect( + alice.call('webacl.resource.hasRights', { + resourceUri, + webId: BOB_WEBID + }) + ).resolves.toMatchObject({ + read: true, + append: false, + write: true, + control: true + }); + + const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); + const baseUri = rights['@context']['@base']; + + expect(rights['@graph']).toHaveLength(6); + + expect(rights).toMatchObject({ + '@graph': expect.arrayContaining([ + expect.objectContaining({ + '@type': 'acl:Authorization', + '@id': `${baseUri}#Read`, + 'acl:mode': 'acl:Read', + 'acl:accessTo': resourceUri, + 'acl:agent': expect.arrayContaining([BOB_WEBID, alice.webId]), + 'acl:agentClass': 'foaf:Agent' + }), + expect.objectContaining({ + '@type': 'acl:Authorization', + '@id': `${baseUri}#Write`, + 'acl:mode': 'acl:Write', + 'acl:accessTo': resourceUri, + 'acl:agent': BOB_WEBID }), expect.objectContaining({ - '@id': '#Control', '@type': 'acl:Authorization', + '@id': `${baseUri}#Control`, + 'acl:mode': 'acl:Control', 'acl:accessTo': resourceUri, - 'acl:agent': ALICE_WEBID, - 'acl:mode': 'acl:Control' + 'acl:agent': BOB_WEBID }) ]) }); }); - test('Anonymous user cannot see Alice rights', async () => { - const rights = await broker.call('webacl.resource.getRights', { resourceUri }); - + test('Anonymous user cannot see Bob rights', async () => { await expect( - broker.call('webacl.resource.hasRights', { - resourceUri + alice.call('webacl.resource.hasRights', { + resourceUri, + webId: 'anon' }) ).resolves.toMatchObject({ read: true, @@ -95,34 +156,37 @@ describe('Test various actions of the webacl.resource service', () => { control: false }); + const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: 'anon' }); + const baseUri = rights['@context']['@base']; + expect(rights['@graph']).toHaveLength(1); expect(rights).toMatchObject({ '@graph': expect.arrayContaining([ expect.objectContaining({ - '@id': '#Read', '@type': 'acl:Authorization', + '@id': `${baseUri}#Read`, + 'acl:mode': 'acl:Read', 'acl:accessTo': resourceUri, - 'acl:agentClass': 'foaf:Agent', - 'acl:mode': 'acl:Read' + 'acl:agentClass': 'foaf:Agent' }) ]) }); }); - test('Bob can see his rights but not Alice rights', async () => { - await broker.call('webacl.resource.addRights', { + test('Craig can see his rights but not Bob rights', async () => { + await alice.call('webacl.resource.addRights', { resourceUri, additionalRights: { - user: { uri: BOB_WEBID, read: true, write: true } + user: { uri: CRAIG_WEBID, read: true, write: true } }, webId: 'system' }); await expect( - broker.call('webacl.resource.hasRights', { + alice.call('webacl.resource.hasRights', { resourceUri, - webId: BOB_WEBID + webId: CRAIG_WEBID }) ).resolves.toMatchObject({ read: true, @@ -131,26 +195,27 @@ describe('Test various actions of the webacl.resource service', () => { control: false }); - const rights = await broker.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); + const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: CRAIG_WEBID }); + const baseUri = rights['@context']['@base']; expect(rights['@graph']).toHaveLength(2); expect(rights).toMatchObject({ '@graph': expect.arrayContaining([ expect.objectContaining({ - '@id': '#Read', '@type': 'acl:Authorization', + '@id': `${baseUri}#Read`, + 'acl:mode': 'acl:Read', 'acl:accessTo': resourceUri, - 'acl:agent': BOB_WEBID, - 'acl:agentClass': 'foaf:Agent', - 'acl:mode': 'acl:Read' + 'acl:agent': CRAIG_WEBID, + 'acl:agentClass': 'foaf:Agent' }), expect.objectContaining({ - '@id': '#Write', '@type': 'acl:Authorization', + '@id': `${baseUri}#Write`, + 'acl:mode': 'acl:Write', 'acl:accessTo': resourceUri, - 'acl:agent': BOB_WEBID, - 'acl:mode': 'acl:Write' + 'acl:agent': CRAIG_WEBID }) ]) }); @@ -158,51 +223,51 @@ describe('Test various actions of the webacl.resource service', () => { test('Resource is public according to isPublic action', async () => { await expect( - broker.call('webacl.resource.isPublic', { + alice.call('webacl.resource.isPublic', { resourceUri }) ).resolves.toBeTruthy(); }); - test('Alice and Bob is returned by getUsersWithReadRights action', async () => { + test('Bob and Craig is returned by getUsersWithReadRights action', async () => { await expect( - broker.call('webacl.resource.getUsersWithReadRights', { + alice.call('webacl.resource.getUsersWithReadRights', { resourceUri }) - ).resolves.toContain(ALICE_WEBID, BOB_WEBID); + ).resolves.toEqual(expect.arrayContaining([BOB_WEBID, CRAIG_WEBID, alice.webId])); }); - test('Remove write permission for Bob', async () => { - await broker.call('webacl.resource.removeRights', { + test('Remove write permission for Craig', async () => { + await alice.call('webacl.resource.removeRights', { resourceUri, rights: { - user: { uri: BOB_WEBID, write: true } + user: { uri: CRAIG_WEBID, write: true } }, - webId: ALICE_WEBID // Alice has acl:Control permission + webId: BOB_WEBID // Bob has acl:Control permission }); await expect( - broker.call('webacl.resource.hasRights', { + alice.call('webacl.resource.hasRights', { resourceUri, - webId: BOB_WEBID + webId: CRAIG_WEBID }) ).resolves.toMatchObject({ - read: true, // Bob still has acl:Read permission + read: true, // Craig still has acl:Read permission append: false, write: false, control: false }); }); - test('Remove all permissions for Alice', async () => { - await broker.call('webacl.resource.deleteAllUserRights', { - webId: ALICE_WEBID + test('Remove all permissions for Bob', async () => { + await alice.call('webacl.resource.deleteAllUserRights', { + webId: BOB_WEBID }); await expect( - broker.call('webacl.resource.hasRights', { + alice.call('webacl.resource.hasRights', { resourceUri, - webId: ALICE_WEBID + webId: BOB_WEBID }) ).resolves.toMatchObject({ read: true, // There still is anonymous acl:Read right @@ -213,13 +278,12 @@ describe('Test various actions of the webacl.resource service', () => { }); test('Remove all permissions for resource', async () => { - await broker.call('webacl.resource.deleteAllRights', { + await alice.call('webacl.resource.deleteAllRights', { resourceUri }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( - broker.call('webacl.resource.hasRights', { + alice.call('webacl.resource.hasRights', { resourceUri, webId: 'anon' }) From d86278f359d9e6557c2d952d317367a232e47fd8 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 11 Nov 2025 12:17:27 +0100 Subject: [PATCH 106/165] Keys tests working --- src/middleware/packages/auth/index.ts | 5 +- .../packages/auth/services/account.ts | 2 + src/middleware/packages/crypto/index.ts | 2 +- src/middleware/packages/crypto/keys/index.ts | 4 - .../packages/crypto/keys/key-container.ts | 29 +- src/middleware/packages/crypto/keys/keys.ts | 87 +- .../packages/crypto/keys/migration.ts | 194 ----- .../crypto/keys/public-key-container.ts | 29 +- src/middleware/packages/crypto/package.json | 1 + .../packages/crypto/signature/index.ts | 3 +- .../packages/crypto/signature/keypair.ts | 267 ------ .../packages/crypto/signature/proxy.ts | 39 +- .../jsonld/services/context/actions/merge.ts | 1 - .../ldp/mixins/controlled-container.ts | 1 + .../ldp/services/container/actions/post.ts | 3 +- .../ldp/services/registry/actions/getUri.ts | 5 +- src/middleware/packages/webid/service.ts | 15 +- src/middleware/tests/crypto/initialize.ts | 63 +- src/middleware/tests/crypto/keys.test.ts | 773 +++++++----------- .../crypto/verifiable-credentials.test.ts | 35 +- 20 files changed, 407 insertions(+), 1151 deletions(-) delete mode 100644 src/middleware/packages/crypto/keys/index.ts delete mode 100644 src/middleware/packages/crypto/keys/migration.ts delete mode 100644 src/middleware/packages/crypto/signature/keypair.ts diff --git a/src/middleware/packages/auth/index.ts b/src/middleware/packages/auth/index.ts index 052d77fbb..9f1dc81ca 100644 --- a/src/middleware/packages/auth/index.ts +++ b/src/middleware/packages/auth/index.ts @@ -5,8 +5,8 @@ import AuthAccountService from './services/account.ts'; import AuthJWTService from './services/jwt.ts'; import AuthMigrationService from './services/migration.ts'; import AuthMailService from './services/mail.ts'; -import { Account } from './types.ts'; +export * from './types.ts'; export { AuthCASService, AuthLocalService, @@ -14,6 +14,5 @@ export { AuthAccountService, AuthJWTService, AuthMigrationService, - AuthMailService, - Account + AuthMailService }; diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 15713f2a2..99197aeb7 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -84,6 +84,8 @@ const AuthAccountService = { const { webId }: { webId: string } = await ctx.call('solid-storage.create', { username }); + ctx.emit('auth.account.created', { webId, username }); + return await this._create(ctx, { uuid, username, diff --git a/src/middleware/packages/crypto/index.ts b/src/middleware/packages/crypto/index.ts index 557f993ac..9a355d750 100644 --- a/src/middleware/packages/crypto/index.ts +++ b/src/middleware/packages/crypto/index.ts @@ -1,4 +1,4 @@ -export * from './keys/index.ts'; +export { default as KeysService } from './keys/keys.ts'; export * from './signature/index.ts'; export * from './constants.ts'; export * from './verifiable-credentials/index.ts'; diff --git a/src/middleware/packages/crypto/keys/index.ts b/src/middleware/packages/crypto/keys/index.ts deleted file mode 100644 index 839e778fd..000000000 --- a/src/middleware/packages/crypto/keys/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import MigrationService from './migration.ts'; -import KeysService from './keys.ts'; - -export { MigrationService, KeysService }; diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index b51599dc3..1b5bb23f5 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -11,27 +11,16 @@ import { KEY_TYPES } from '../constants.ts'; * Container to store the private keys of actors. * * Watch out with permissions. This should be strictly limited to the owner and privileged apps. - * @type {import('moleculer').ServiceSchema} */ -const KeysContainerSchema = { +const PrivateKeysContainerService = { name: 'keys.container' as const, mixins: [ControlledContainerMixin], settings: { path: '/key', types: Object.values(KEY_TYPES), - permissions: (webId: any, ctx: any) => { - // If not a pod provider, the container is shared, so any user can append. - return { - anyUser: { - // Warning! ctx.service is the LdpContainerService. The WebAclMiddleware calls this function. This creates confusion. - read: !ctx.service.settings.podProvider, - append: !ctx.service.settings.podProvider - } - }; - }, + permissions: {}, newResourcesPermissions: (webId: any) => { if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); - return { user: { uri: webId, @@ -53,7 +42,7 @@ const KeysContainerSchema = { }, actions: { forbidden: { - async handler(ctx) { + async handler() { throw new E.ForbiddenError(); } }, @@ -69,11 +58,13 @@ const KeysContainerSchema = { * */ async handler(ctx) { - const resource = await ctx.call('ldp.resource.get', { - ...ctx.params, - jsonContext: ['https://w3id.org/security/multikey/v1', ...(await ctx.call('jsonld.context.get'))] + const jsonContext = await ctx.call('jsonld.context.merge', { + a: ['https://w3id.org/security/multikey/v1'], + b: await ctx.call('jsonld.context.get') }); + const resource: any = await ctx.call('ldp.resource.get', { ...ctx.params, jsonContext }); + // Make type `Multikey` only, to comply with spec. if (arrayOf(resource.type).includes('sec:Multikey') || arrayOf(resource.type).includes('Multikey')) { // Type must be Multikey only @@ -86,12 +77,12 @@ const KeysContainerSchema = { } } satisfies ServiceSchema; -export default KeysContainerSchema; +export default PrivateKeysContainerService; declare global { export namespace Moleculer { export interface AllServices { - [KeysContainerSchema.name]: typeof KeysContainerSchema; + [PrivateKeysContainerService.name]: typeof PrivateKeysContainerService; } } } diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index 03228a56b..f0d172d92 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -7,12 +7,8 @@ import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; -import KeyContainerService from './key-container.ts'; +import PrivateKeyContainerService from './key-container.ts'; import PublicKeyContainerService from './public-key-container.ts'; -import MigrationService from './migration.ts'; -import { KeyPairService } from '../signature/index.ts'; - -/** @type {import('@digitalbazaar/ed25519-multikey')} */ /** * Service for managing keys (creating, storing, retrieving). @@ -24,55 +20,24 @@ import { KeyPairService } from '../signature/index.ts'; * that format by ActivityPub. Therefore, we use two different key store formats here... * * If key access times become an issue some time, we can create custom queries. - * @type {import('moleculer').ServiceSchema} */ const KeysService = { name: 'keys' as const, - settings: { - podProvider: false, - actorsKeyPairsDir: null - }, - dependencies: ['ontologies', 'keys.container', 'keys.public-container', 'signature.keypair', 'keys.migration'], - async created() { + dependencies: ['ontologies', 'keys.container', 'keys.public-container'], + created() { // Start keys-container and public-keys-container services. // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys.containe... Remove this comment to see the full error message this.broker.createService({ - mixins: [KeyContainerService], - settings: { - podProvider: this.settings.podProvider - } + mixins: [PrivateKeyContainerService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys.public-c... Remove this comment to see the full error message this.broker.createService({ - mixins: [PublicKeyContainerService], - settings: { - podProvider: this.settings.podProvider - } - }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys.migratio... Remove this comment to see the full error message - this.broker.createService({ - mixins: [MigrationService], - settings: { - podProvider: this.settings.podProvider, - actorsKeyPairsDir: this.settings.actorsKeyPairsDir - } - }); - - // Legacy service. - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "signature.key... Remove this comment to see the full error message - this.broker.createService({ - mixins: [KeyPairService], - settings: { - actorsKeyPairsDir: this.settings.actorsKeyPairsDir - } + mixins: [PublicKeyContainerService] }); }, async started() { await this.waitForServices('ontologies'); this.broker.call('ontologies.register', sec); - - await this.waitForServices('keys.migration'); - this.isMigrated = await this.broker.call('keys.migration.isMigrated'); }, actions: { /** @@ -89,7 +54,7 @@ const KeysService = { const webId = ctx.params.webId || ctx.meta.webId; // Get the key container, to search by type. - const container = await ctx.call('keys.container.list', { webId }); + const container: any = await ctx.call('keys.container.list', { webId }); // Because edd2519 multikeys are allowed to have one key only, we filter like that. // TODO: We only support those keys anyways. If we support other ones in the future, @@ -120,7 +85,7 @@ const KeysService = { }, async handler(ctx) { const { keyType, webId } = ctx.params; - const webIdDoc = await ctx.call('webid.get', { resourceUri: webId, webId: 'system' }); + const webIdDoc: any = await ctx.call('webid.get', { resourceUri: webId, webId: 'system' }); // RSA keys are stored in `publicKey` field, everything else in `assertionMethod` const publicKeys = @@ -349,7 +314,7 @@ const KeysService = { ? keyObject['rdfs:seeAlso'] : await this.actions.publishPublicKeyLocally({ keyObject, webId }, { parentCtx: ctx }); - const webIdDocument = await ctx.call('webid.get', { + const webIdDocument: any = await ctx.call('webid.get', { resourceUri: webId, webId: webId }); @@ -431,9 +396,9 @@ const KeysService = { const publicKeyObject = await this.actions.getPublicKeyObject({ keyObject }, { parentCtx: ctx }); // Then, store it in the `/public-key` container. - const publicKeyUri = await ctx.call('keys.public-container.post', { + const publicKeyUri: string = await ctx.call('keys.public-container.post', { resource: publicKeyObject, - webId: webId + webId }); // Then, add a `rdfs:seeAlso` reference in the `/key` container. @@ -488,7 +453,7 @@ const KeysService = { }, async handler(ctx) { const { webId } = ctx.params; - const keys = await ctx.call('keys.container.list', { webId }); + const keys: any = await ctx.call('keys.container.list', { webId }); for (const key of keys['ldp:contains']) { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } @@ -598,7 +563,7 @@ const KeysService = { async handler(ctx) { const { publicKeyUri } = ctx.params; - const queryResult = await ctx.call('triplestore.query', { + const queryResult: any = await ctx.call('triplestore.query', { query: ` SELECT ?privateKey WHERE { @@ -614,35 +579,11 @@ const KeysService = { } } }, - methods: {}, - hooks: { - before: { - '*': function checkMigration(ctx) { - if (!this.isMigrated && !ctx.meta.skipMigrationCheck) { - throw new Error( - 'The keys were not migrated to db storage yet. Please run `keys.migration.migrateKeysToDb` and use the deprecated `signature.keypair` service for now.' - ); - } - } - } - }, events: { - 'keys.migration.migrated': { - async handler() { - this.isMigrated = true; - } - }, - - 'auth.registered': { - async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message + 'auth.account.created': { + async handler(ctx: any) { const { webId } = ctx.params; - if (!this.isMigrated) { - // Key creation will be handled by legacy service. - return; - } - // Wait for the key containers to be created. const keyContainerUri = await ctx.call('keys.container.getContainerUri', { webId }, { parentCtx: ctx }); const publicKeyContainerUri = await ctx.call( diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts deleted file mode 100644 index b0b1e1a22..000000000 --- a/src/middleware/packages/crypto/keys/migration.ts +++ /dev/null @@ -1,194 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import { ServiceSchema } from 'moleculer'; -import { KEY_TYPES } from '../constants.ts'; - -const KeysMigrationSchema = { - name: 'keys.migration' as const, - settings: { - actorsKeyPairsDir: null, - podProvider: false - }, - actions: { - migrateKeysToDb: { - /** Migrates cryptographic RSA keys from filesystem storage to the `/keys` ldp containers */ - async handler(ctx) { - // Check actorsKeyPairsDir for existing keys. - if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { - this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't exist."); - return; - } - - const accounts = await ctx.call('auth.account.find'); - const usernamesByKey = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .filter(fn => fn.endsWith('.key')) - .map(file => file.substring(0, file.length - 4)); - - if (usernamesByKey.length === 0) { - this.logger.warn("No keys to migrate, actorsKeyPairsDir doesn't contain any key files."); - return; - } - - let errorUsernames = []; - - this.logger.info(`=== Migrating keys from filesystem to LDP ===`); - - // This can cause deadlocks otherwise. - ctx.meta.skipObjectsWatcher = true; - - for (const { webId, username } of accounts) { - // Do the migration process. - try { - this.logger.info(`Migrating key of ${webId}`); - - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - if (this.settings.podProvider) ctx.meta.dataset = username; - - const { publicKey, privateKey } = await ctx.call('signature.keypair.get', { - actorUri: webId, - webId: 'system' - }); - - // Delete public key material from webId (later replaced with references to the public key resources). - await this.deleteKeysFromWebId(ctx, webId); - - // Create key resources in db and link to webIds. - await this.attachOrCreateToDb(ctx, webId, publicKey, privateKey); - } catch (err) { - this.logger.error(`An error occurred during migration. Key of ${webId} could not be migrated.`, err); - - errorUsernames.push(username); - - // Try to revert to initial state. - try { - await this.deleteKeysFromWebId(ctx, webId); - } catch (_) { - // pass - } - - // Re-add possibly deleted publicKeys to webId document. This will do nothing if keys are attached. - await ctx.call('signature.keypair.attachPublicKey', { actorUri: webId }); - } - } - - // Keys are stored in db now. - // Finally, move fs keys to ./old folder - const keyFiles = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .filter(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); - fs.mkdirSync(path.join(this.settings.actorsKeyPairsDir, 'old'), { recursive: true }); - keyFiles.map(keyFile => - fs.renameSync( - path.join(this.settings.actorsKeyPairsDir, keyFile), - path.join(this.settings.actorsKeyPairsDir, 'old', keyFile) - ) - ); - - // Stats about missing accounts and key-pairs. - const accountNames = accounts.map((acc: any) => acc.username); - const keysWithoutRegisteredUser = usernamesByKey.filter(keyName => !accountNames.includes(keyName)); - const usersWithoutKeys = accountNames.filter((accName: any) => !usernamesByKey.includes(accName)); - - if (errorUsernames.length > 0) { - this.logger.warn(`During the migration, the following accounts generated errors:`, errorUsernames); - } - if (keysWithoutRegisteredUser.length > 0) { - this.logger.warn( - `During the migration, the following keys were found that did not have a registered user associated:`, - keysWithoutRegisteredUser - ); - } - if (usersWithoutKeys.length > 0) { - this.logger.warn( - `During the migration, the following accounts were found that did not have key pairs. New ones were created:`, - usersWithoutKeys - ); - } - - this.logger.info('=== Keys migration completed ==='); - await ctx.emit('keys.migration.migrated'); - } - }, - - isMigrated: { - /** Returns true, if the server has migrated to the new keys service yet, i.e. keys are stored in the user dataset, not on fs. */ - async handler() { - // If the `actorsKeyPairsDir` setting is not set, we assume migration has happened or was never needed. - if (!this.settings.actorsKeyPairsDir) { - return true; - } - - // Check actorsKeyPairsDir for existing keys. - if (!fs.existsSync(this.settings.actorsKeyPairsDir)) { - return true; - } - - const anyKeyFile = fs - .readdirSync(this.settings.actorsKeyPairsDir) - .find(fn => fn.endsWith('.key') || fn.endsWith('.key.pub')); - - return !anyKeyFile; - } - } - }, - methods: { - // Delete old public key blank node and data from the webId. - // Note: updating the triple store directly would usually require to delete the Redis cache for - // the webId, but since we are attaching the new public key in the next step, it is not necessary. - async deleteKeysFromWebId(ctx, webId) { - await ctx.call('triplestore.update', { - query: ` - PREFIX sec: - DELETE WHERE { - GRAPH <${webId}> { - <${webId}> sec:publicKey ?o . - } - GRAPH ?g { - ?o ?p1 ?o1 . - } - } - `, - webId: 'system' - }); - }, - // Add keys to container / create new keys where missing. - async attachOrCreateToDb(ctx, webId, publicKey, privateKey) { - if (publicKey && privateKey) { - // Add the key using the new keys service. - const keyResource = { - '@type': [KEY_TYPES.RSA, KEY_TYPES.VERIFICATION_METHOD], - publicKeyPem: publicKey, - privateKeyPem: privateKey, - owner: webId, - controller: webId - }; - const keyId = await ctx.call('keys.container.post', { - resource: keyResource, - webId - }); - // @ts-expect-error TS(2339): Property 'id' does not exist on type '{ '@type': s... Remove this comment to see the full error message - keyResource.id = keyId; - // Publish key. - await ctx.call( - 'keys.attachPublicKeyToWebId', - { webId, keyObject: keyResource }, - { meta: { skipMigrationCheck: true } } - ); - } else { - this.logger.warn(`No public/private key found for ${webId}, creating it...`); - await ctx.call('keys.createKeyForActor', { webId, keyType: KEY_TYPES.RSA, attachToWebId: true }); - } - } - } -} satisfies ServiceSchema; - -export default KeysMigrationSchema; - -declare global { - export namespace Moleculer { - export interface AllServices { - [KeysMigrationSchema.name]: typeof KeysMigrationSchema; - } - } -} diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index 7120a6abd..ecc36a147 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -8,25 +8,15 @@ import { KEY_TYPES } from '../constants.ts'; /** * Container to store the public keys of actors only. * Anonymous read is allowed by default. - * */ -const KeysPublicContainerSchema = { +const PublicKeysService = { name: 'keys.public-container' as const, mixins: [ControlledContainerMixin], settings: { path: '/public-key', types: Object.values(KEY_TYPES), - permissions: (webId: any, ctx: any) => { - // If no pod provider, the container is shared, so any user can append. - return { - anyUser: { - read: true, - // Warning! ctx.service is the LdpContainerService. The WebAclMiddleware calls this function. This creates confusion. - append: !ctx.service.settings.podProvider - } - }; - }, - newResourcesPermissions: (webId: any) => { + permissions: {}, + newResourcesPermissions: (webId: string) => { if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); return { @@ -53,7 +43,7 @@ const KeysPublicContainerSchema = { actions: { forbidden: { - async handler(ctx) { + handler() { throw new E.ForbiddenError(); } } @@ -65,14 +55,13 @@ const KeysPublicContainerSchema = { async delete(ctx) { const { resourceUri } = ctx.params; - const privateKeyId = ctx.call('keys.findPrivateKeyUri', { publicKeyUri: resourceUri }); + const privateKeyUri: string = await ctx.call('keys.findPrivateKeyUri', { publicKeyUri: resourceUri }); await ctx.call('ldp.resource.patch', { - resourceUri: privateKeyId, + resourceUri: privateKeyUri, triplesToRemove: [ rdf.quad( - // @ts-expect-error TS(2345): Argument of type 'Promisify' is not assignabl... Remove this comment to see the full error message - rdf.namedNode(privateKeyId), + rdf.namedNode(privateKeyUri), rdf.namedNode('http://www.w3.org/2000/01/rdf-schema#seeAlso'), rdf.namedNode(resourceUri) ) @@ -83,12 +72,12 @@ const KeysPublicContainerSchema = { } } satisfies ServiceSchema; -export default KeysPublicContainerSchema; +export default PublicKeysService; declare global { export namespace Moleculer { export interface AllServices { - [KeysPublicContainerSchema.name]: typeof KeysPublicContainerSchema; + [PublicKeysService.name]: typeof PublicKeysService; } } } diff --git a/src/middleware/packages/crypto/package.json b/src/middleware/packages/crypto/package.json index 31f2ac173..b4a9fb25d 100644 --- a/src/middleware/packages/crypto/package.json +++ b/src/middleware/packages/crypto/package.json @@ -13,6 +13,7 @@ "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "^1.2.0", "@digitalbazaar/vc": "^7.1.0", "@rdfjs/data-model": "2.1.1", + "@semapps/auth": "1.2.0", "@semapps/ldp": "1.2.0", "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", diff --git a/src/middleware/packages/crypto/signature/index.ts b/src/middleware/packages/crypto/signature/index.ts index 4a4699526..e5d27063e 100644 --- a/src/middleware/packages/crypto/signature/index.ts +++ b/src/middleware/packages/crypto/signature/index.ts @@ -1,5 +1,4 @@ import SignatureService from './http-signatures.ts'; import ProxyService from './proxy.ts'; -import KeyPairService from './keypair.ts'; -export { SignatureService, ProxyService, KeyPairService }; +export { SignatureService, ProxyService }; diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts deleted file mode 100644 index 807938b92..000000000 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ /dev/null @@ -1,267 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import fetch from 'node-fetch'; -import { generateKeyPair } from 'crypto'; -import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; -import { KEY_TYPES } from '../constants.ts'; - -/** - * Deprecated Service. - * This service uses a file-system based key store, the new one stores keys in the graph db. - * If the migration has taken place (by calling `keys.migration.migrateKeysToDb`), calls - * will be redirected to the new service. - * @type {import('moleculer').ServiceSchema} - */ -const SignatureService = { - name: 'signature.keypair' as const, - settings: { - actorsKeyPairsDir: null - }, - async created() { - if (this.settings.actorsKeyPairsDir && !fs.existsSync(this.settings.actorsKeyPairsDir)) { - this.logger.warn( - `The \`actorsKeyPairsDir\` is configured for the keys legacy service but the directory (${this.settings.actorsKeyPairsDir}) does not exist! Please remove the setting (preferred) or create the directory.` - ); - } - }, - async started() { - await this.waitForServices('keys.migration'); - this.isMigrated = await this.broker.call('keys.migration.isMigrated'); - }, - actions: { - generate: { - async handler(ctx) { - const { actorUri } = ctx.params; - - if (this.isMigrated) { - let [key] = await ctx.call('keys.getOrCreateWebIdKeys', { - keyType: KEY_TYPES.RSA, - webId: actorUri - }); - return key.publicKeyPem; - } - - const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); - if (publicKey) { - this.logger.info(`Key for ${actorUri} already exists, skipping...`); - return publicKey; - } - - const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - - return new Promise((resolve, reject) => { - generateKeyPair( - 'rsa', - { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' - } - }, - (err, publicKey, privateKey) => { - if (!err) { - fs.writeFile(privateKeyPath, privateKey, err => reject(err)); - fs.writeFile(publicKeyPath, publicKey, err => reject(err)); - resolve(publicKey); - } else { - reject(err); - } - } - ); - }); - } - }, - - delete: { - async handler(ctx) { - const { actorUri } = ctx.params; - - if (this.isMigrated) { - const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }); - await ctx.call('keys.delete', { resourceUri: key.id || key['@id'], webId: actorUri }); - return; - } - - const { privateKeyPath, publicKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - - try { - await fs.promises.unlink(privateKeyPath); - await fs.promises.unlink(publicKeyPath); - } catch (e) { - console.log(`Could not delete key pair for actor ${actorUri}`); - } - } - }, - - attachPublicKey: { - async handler(ctx) { - const { actorUri } = ctx.params; - - if (this.isMigrated) { - this.logger.info( - `The keys service has been migrated. Key setup is handled by the keys service. This function will not have an effect` - ); - return; - } - - const actor = await ctx.call('ldp.resource.get', { - resourceUri: actorUri, - webId: actorUri - }); - - // Ensure a public key is not already attached - if (!actor.publicKey) { - const { publicKey } = await this.actions.get({ actorUri }, { parentCtx: ctx }); - - await ctx.call('ldp.resource.patch', { - resourceUri: actorUri, - triplesToAdd: [ - rdf.quad( - rdf.namedNode(actorUri), - rdf.namedNode('https://w3id.org/security#publicKey'), - rdf.blankNode('b0') - ), - rdf.quad(rdf.blankNode('b0'), rdf.namedNode('https://w3id.org/security#owner'), rdf.namedNode(actorUri)), - rdf.quad( - rdf.blankNode('b0'), - rdf.namedNode('https://w3id.org/security#publicKeyPem'), - rdf.literal(publicKey) - ) - ], - webId: 'system' - }); - } - } - }, - - getPaths: { - async handler(ctx) { - const { actorUri } = ctx.params; - - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - - if (account) { - const privateKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key`); - const publicKeyPath = path.join(this.settings.actorsKeyPairsDir, `${account.username}.key.pub`); - return { privateKeyPath, publicKeyPath }; - } - throw new Error(`No account found with URI ${actorUri}`); - } - }, - - get: { - async handler(ctx) { - const { actorUri } = ctx.params; - - // Call new method, if migrated. - if (this.isMigrated) { - const [key] = await ctx.call('keys.getOrCreateWebIdKeys', { keyType: KEY_TYPES.RSA, webId: actorUri }); - return { - publicKey: key.publicKeyPem, - privateKey: key.privateKeyPem - }; - } - - const { publicKeyPath, privateKeyPath } = await this.actions.getPaths({ actorUri }, { parentCtx: ctx }); - try { - const publicKey = await fs.promises.readFile(publicKeyPath, { encoding: 'utf8' }); - const privateKey = await fs.promises.readFile(privateKeyPath, { encoding: 'utf8' }); - return { publicKey, privateKey }; - } catch (e) { - return {}; - } - } - }, - - getRemotePublicKey: { - async handler(ctx) { - const { actorUri } = ctx.params; - - // Call new method, if migrated. - if (this.isMigrated) { - return (await ctx.call('keys.getRemotePublicKeys', { webId: actorUri, keyType: KEY_TYPES.RSA }))?.[0] - ?.publicKeyPem; - } - - let response = await fetch(actorUri, { headers: { Accept: 'application/json' } }); - if (!response.ok) return false; - - const actor = await response.json(); - if (!actor || !actor.publicKey) return false; - - // If the public key is not dereferenced - if (typeof actor.publicKey === 'string') { - response = await fetch(actor.publicKey, { headers: { Accept: 'application/json' } }); - if (!response.ok) return false; - const publicKey = await response.json(); - if (!publicKey) return false; - return publicKey.publicKeyPem; - } else { - return actor.publicKey.publicKeyPem; - } - } - } - }, - hooks: { - before: { - '*': function showDeprecationWarning() { - // Only warn once - if (this.hasWarnedMigration) return; - - if (this.isMigrated) { - // @ts-expect-error TS(2339): Property 'info' does not exist on type 'string | A... Remove this comment to see the full error message - this.logger.info( - 'The keys service has been migrated. ' + - 'Key requests and setup are redirected to and handled in the new service. ' + - 'This service might be removed in a future version.' - ); - } else { - // @ts-expect-error TS(2339): Property 'warn' does not exist on type 'string | A... Remove this comment to see the full error message - this.logger.warn( - 'The keys service has not been migrated yet. ' + - 'This service is still handling key requests and setup. ' + - 'Please migrate to the new keys service.' - ); - } - // @ts-expect-error TS(2322): Type 'boolean' is not assignable to type 'string |... Remove this comment to see the full error message - this.hasWarnedMigration = true; - } - } - }, - events: { - 'auth.registered': { - async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type 'Optionali... Remove this comment to see the full error message - const { webId } = ctx.params; - if (this.isMigrated) { - return; - } - - await this.actions.generate({ actorUri: webId }, { parentCtx: ctx }); - await this.actions.attachPublicKey({ actorUri: webId }, { parentCtx: ctx }); - } - }, - - 'keys.migration.migrated': { - async handler(ctx) { - this.isMigrated = true; - } - } - } -} satisfies ServiceSchema; - -export default SignatureService; - -declare global { - export namespace Moleculer { - export interface AllServices { - [SignatureService.name]: typeof SignatureService; - } - } -} diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 2af02edd2..0bc1766a0 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -1,5 +1,6 @@ import path from 'path'; import urlJoin from 'url-join'; +import { Account } from '@semapps/auth'; import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; import fetch from 'node-fetch'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message @@ -17,29 +18,21 @@ const stream2buffer = (stream: any) => { const ProxyService = { name: 'signature.proxy' as const, - settings: { - podProvider: false - }, dependencies: ['api', 'ldp'], async started() { - const basePath = await this.broker.call('ldp.getBasePath'); - - const routeConfig = { - name: 'proxy-endpoint', - authorization: true, - authentication: false, - aliases: { - 'POST /': [parseHeader, parseFile, saveDatasetMeta, 'signature.proxy.api_query'] // parseFile handles multipart/form-data + const basePath: string = await this.broker.call('ldp.getBasePath'); + + await this.broker.call('api.addRoute', { + route: { + name: 'proxy-endpoint', + path: path.join(basePath, '/:username([^/.][^/]+)/proxy'), + authorization: true, + authentication: false, + aliases: { + 'POST /': [parseHeader, parseFile, saveDatasetMeta, 'signature.proxy.api_query'] // parseFile handles multipart/form-data + } } - }; - - if (this.settings.podProvider) { - await this.broker.call('api.addRoute', { - route: { path: path.join(basePath, '/:username([^/.][^/]+)/proxy'), ...routeConfig } - }); - } else { - await this.broker.call('api.addRoute', { route: { path: path.join(basePath, '/proxy'), ...routeConfig } }); - } + }); }, actions: { api_query: { @@ -50,10 +43,8 @@ const ProxyService = { const actorUri = ctx.meta.webId; // Only user can query his own proxy URL - if (this.settings.podProvider) { - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); - if (account.username !== ctx.params.username) throw new E.ForbiddenError(); - } + const account: Account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + if (account.username !== ctx.params.username) throw new E.ForbiddenError(); // If a file is uploaded, convert it to a Buffer const body = diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index 70bde765e..ccb70bc95 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -11,7 +11,6 @@ const Schema = { }, b: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 477cdb38b..b44ac7093 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -123,6 +123,7 @@ const ControlledContainerMixin = { async handler(ctx) { return await ctx.call('ldp.registry.getUri', { type: arrayOf(this.settings.types)[0], + isPrivate: this.settings.typeIndex === 'private', webId: ctx.params?.webId || ctx.meta?.webId }); } diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index c45807b5b..6bf5b9221 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -2,6 +2,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema, Errors } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; +import { Registration } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -111,7 +112,7 @@ const PostAction = { webId }); } else { - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); + const { controlledActions }: Registration = await ctx.call('ldp.registry.getByUri', { containerUri }); // Change relative URIs to full URIs const resourceWithBase = resource['@graph'] diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 3a037cd81..720f01a3a 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -9,13 +9,14 @@ const GetUriAction = { params: { type: { type: 'string' }, isContainer: { type: 'boolean', default: true }, + isPrivate: { type: 'boolean', optional: true }, webId: { type: 'string', optional: true } }, async handler(ctx) { - const { type, isContainer } = ctx.params; + const { type, isContainer, isPrivate } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId; - const [uri] = (await ctx.call('type-index.getUris', { type, isContainer, webId })) as string[]; + const [uri] = (await ctx.call('type-index.getUris', { type, isContainer, isPrivate, webId })) as string[]; return uri; } diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 1f1366430..32263aeaa 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,5 +1,5 @@ import { foaf, schema } from '@semapps/ontologies'; -import { ControlledResourceMixin, DereferenceMixin } from '@semapps/ldp'; +import { ControlledResourceMixin, DereferenceMixin, waitForResource } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import getRedirectRoute from './routes/getRedirectRoute.ts'; @@ -39,6 +39,19 @@ const WebIdService = { ctx.meta.$statusCode = 301; ctx.meta.$location = webId; } + }, + awaitCreateComplete: { + async handler(ctx) { + const { additionalKeys = [], delayMs = 1000, maxTries = 20 } = ctx.params; + const keysToCheck = ['publicKey', ...additionalKeys]; + + return await waitForResource( + delayMs, + keysToCheck, + maxTries, + async () => await this.actions.get({}, { parentCtx: ctx, meta: { $cache: false } }) + ); + } } } } satisfies ServiceSchema; diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index 851111319..2abc99727 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -1,21 +1,20 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message -import fse from 'fs-extra'; -import fs from 'fs'; import path from 'path'; -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import { AuthLocalService } from '@semapps/auth'; import { CoreService } from '@semapps/core'; -import { VerifiableCredentialsService } from '@semapps/crypto'; +import { solid } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { dropDataset } from '../utils.ts'; +import { dropDataset, listDatasets } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const initialize = async (port: any, withOldKeyStore = false) => { - await dropDataset(CONFIG.MAIN_DATASET); - await dropDataset(CONFIG.SETTINGS_DATASET); +const initialize = async (port: number) => { + const datasets: string[] = await listDatasets(); + for (let dataset of datasets) { + await dropDataset(dataset); + } const baseUrl = `http://localhost:${port}/`; @@ -30,15 +29,8 @@ const initialize = async (port: any, withOldKeyStore = false) => { } }); - // Remove all actors keys - await fse.emptyDir(path.resolve(__dirname, '../actors')); - if (withOldKeyStore) { - // Create a placeholder key to simulate the old key store (isMigrated is checked, if a key exists). - fs.writeFileSync(path.resolve(__dirname, '../actors', 'placeholder.key'), ''); - } - - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message mixins: [CoreService], settings: { baseUrl, @@ -47,19 +39,14 @@ const initialize = async (port: any, withOldKeyStore = false) => { url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset: CONFIG.MAIN_DATASET, secure: false // TODO Remove when we move to Fuseki 5 }, + ontologies: [solid], activitypub: false, webfinger: false, - containers: ['/users'], - void: false, mirror: false, api: { port - }, - webid: { - path: '/users' } } }); @@ -74,35 +61,7 @@ const initialize = async (port: any, withOldKeyStore = false) => { } }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc"; d... Remove this comment to see the full error message - broker.createService({ - mixins: [VerifiableCredentialsService], - settings: { - podProvider: false - } - }); - - await broker.start(); - broker.waitForServices( - [ - 'core', - 'auth', - 'webid', - 'triplestore', - 'keys', - 'keys.container', - 'keys.public-container', - 'keys.migration', - 'crypto.vc' - ], - 5_000 - ); - - if (withOldKeyStore) { - fs.rmSync(path.resolve(__dirname, '../actors', 'placeholder.key')); - } - - return { broker, baseUrl }; + return broker; }; export default initialize; diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index c1275b9da..905fac718 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -1,538 +1,347 @@ +import { ServiceBroker } from 'moleculer'; import { KEY_TYPES } from '@semapps/crypto'; import { arrayOf, waitForResource } from '@semapps/ldp'; -import { wait } from '../utils.ts'; +import { createAccount } from '../utils.ts'; import initialize from './initialize.ts'; jest.setTimeout(100_000); -/** @type {import('moleculer').ServiceBroker} */ -let broker: any; +let broker: ServiceBroker; +let alice: any; -let user: any; -let user2: any; +const setUp = async () => { + broker = await initialize(3000); -const setUp = async (withOldKeyStore: any) => { - ({ broker } = await initialize(3000, withOldKeyStore)); - user = await broker.call('auth.signup', { - username: 'alice', - email: 'alice@test.example', - password: 'test', - name: 'Alice' - }); - user2 = await broker.call('auth.signup', { - username: 'bob', - email: 'bob@test.example', - password: 'test', - name: 'Bob' - }); + await broker.start(); + + broker.waitForServices( + ['core', 'auth', 'webid', 'triplestore', 'keys', 'keys.container', 'keys.public-container'], + 5_000 + ); - // Wait for keys to have been created for user. - await wait(5000); + alice = await createAccount(broker, 'alice'); + + await alice.call('webid.awaitCreateComplete'); }; afterAll(async () => { if (broker) await broker.stop(); }); -describe('keys', () => { - describe('with new service', () => { - beforeAll(async () => { - // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. - await setUp(); +describe('Keys management', () => { + beforeAll(async () => { + await setUp(); + }); + + describe('RSA key', () => { + test('exists', async () => { + const keyPairs = await alice.call('keys.getByType', { keyType: KEY_TYPES.RSA }); + expect(keyPairs).toHaveLength(1); + const keyPair = keyPairs[0]; + expect(keyPair).toBeTruthy(); + expect(keyPair['@id'] || keyPair.id).toBeDefined(); + expect(keyPair.publicKeyPem).toBeDefined(); + expect(keyPair.privateKeyPem).toBeDefined(); + expect(keyPair.owner).toBeDefined(); + expect(keyPair.controller).toBeDefined(); }); - describe('RSA key', () => { - test('exists', async () => { - const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - expect(keyPairs).toHaveLength(1); - const keyPair = keyPairs[0]; - expect(keyPair).toBeTruthy(); - expect(keyPair['@id'] || keyPair.id).toBeDefined(); - expect(keyPair.publicKeyPem).toBeDefined(); - expect(keyPair.privateKeyPem).toBeDefined(); - expect(keyPair.owner).toBeDefined(); - expect(keyPair.controller).toBeDefined(); - }); + test('public key present in webId', async () => { + const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.RSA }); + + const webIdDocument = await waitForResource(500, 'publicKey', 5, () => + alice.call('webid.get', { resourceUri: alice.webId }, { meta: { $cache: false } }) + ); + + expect(webIdDocument).toBeDefined(); + const publicKeys = arrayOf(webIdDocument.publicKey); + // There should only be one public key advertised in the webId by default. + expect(publicKeys.length).toBe(1); + const matchingPublicKey = publicKeys.find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem); + expect(matchingPublicKey).toBeDefined(); + expect(matchingPublicKey.owner).toBe(alice.webId); + expect(matchingPublicKey.controller).toBe(alice.webId); + }); - test('public key present in webId', async () => { - const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - - const webIdDocument = await waitForResource(500, 'publicKey', 5, () => - broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }) - ); - - expect(webIdDocument).toBeDefined(); - const publicKeys = arrayOf(webIdDocument.publicKey); - // There should only be one public key advertised in the webId by default. - expect(publicKeys.length).toBe(1); - const matchingPublicKey = publicKeys.find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem); - expect(matchingPublicKey).toBeDefined(); - expect(matchingPublicKey.owner).toBe(user.webId); - expect(matchingPublicKey.controller).toBe(user.webId); - }); + test('detach and attach to webId works', async () => { + const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.RSA }); - test('detach and attach to webId works', async () => { - const [keyPair] = await broker.call('keys.getByType', { - webId: user.webId, - keyType: KEY_TYPES.RSA - }); - - await broker.call('keys.detachFromWebId', { webId: user.webId, publicKeyId: keyPair['rdfs:seeAlso'] }); - - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) - ).toBeUndefined(); - - // Attach key again. - await broker.call('keys.attachPublicKeyToWebId', { webId: user.webId, keyId: keyPair['@id'] || keyPair.id }); - const webIdDocumentNew = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocumentNew.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) - ).toBeDefined(); - }); + await alice.call('keys.detachFromWebId', { webId: alice.webId, publicKeyId: keyPair['rdfs:seeAlso'] }); - test('key deletable and new one addable', async () => { - const [oldKeyPair] = await broker.call('keys.getByType', { - webId: user.webId, - keyType: KEY_TYPES.RSA - }); - expect(oldKeyPair).toBeTruthy(); - - // Delete - await broker.call('keys.delete', { webId: user.webId, resourceUri: oldKeyPair.id || oldKeyPair['@id'] }); - - // Expect webId not to have key. - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) - ).toBeUndefined(); - // Expect key not to be present in `/public-keys` container. - await expect( - broker.call('ldp.resource.exist', { - resourceUri: oldKeyPair['rdfs:seeAlso'], - webId: user.webId - }) - ).resolves.toBeFalsy(); - - // Create new key. - const newKeyPair = await broker.call('keys.createKeyForActor', { - webId: user.webId, - keyType: KEY_TYPES.RSA, - attachToWebId: true - }); - expect(newKeyPair).toBeTruthy(); - expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); - expect(newKeyPair.publicKeyPem).toBeDefined(); - expect(newKeyPair.privateKeyPem).toBeDefined(); - expect(newKeyPair.publicKeyPem).not.toBe(oldKeyPair.publicKeyPem); - - // Expect webId to not have old key but new key. - const webIdDocumentNew = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocumentNew.publicKey).some( - (publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem - ) - ).toBeFalsy(); - expect( - arrayOf(webIdDocumentNew.publicKey).some( - (publicKey: any) => publicKey.publicKeyPem === newKeyPair.publicKeyPem - ) - ).toBeTruthy(); - - // Expect publicKey to be present in `/public-keys` container. - const publicKey = await broker.call('keys.public-container.get', { - resourceUri: newKeyPair['rdfs:seeAlso'], - webId: user.webId - }); - expect(publicKey).toBeTruthy(); - expect(publicKey.publicKeyPem).toBe(newKeyPair.publicKeyPem); - expect(publicKey.owner).toBe(user.webId); - expect(publicKey.privateKeyPem).toBeUndefined(); - }); - - test('private key is not accessible without authorization', async () => { - const [keyPair] = await broker.call('keys.getByType', { - webId: user.webId, - keyType: KEY_TYPES.RSA - }); - expect(keyPair).toBeTruthy(); - - await expect( - broker.call('keys.container.get', { - resourceUri: keyPair['@id'] || keyPair.id, - webId: user2.webId - }) - ).rejects.toThrow('Forbidden'); + const webIdDocument = await alice.call('webid.get', { + resourceUri: alice.webId }); + expect( + arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) + ).toBeUndefined(); + + // Attach key again. + await alice.call('keys.attachPublicKeyToWebId', { webId: alice.webId, keyId: keyPair['@id'] || keyPair.id }); + const webIdDocumentNew = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocumentNew.publicKey).find((publicKey: any) => publicKey.publicKeyPem === keyPair.publicKeyPem) + ).toBeDefined(); + }); - test('second key present in keys and public-keys container only', async () => { - const keyPair = await broker.call('keys.createKeyForActor', { - webId: user.webId, - keyType: KEY_TYPES.RSA, - publishKey: true, - attachToWebId: false - }); - - const publicKey = await broker.call('keys.container.get', { - resourceUri: keyPair['rdfs:seeAlso'], - webId: user.webId - }); - expect(publicKey).toBeTruthy(); - - // Should not be present in webId. - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) - ).toBeUndefined(); + test('key deletable and new one addable', async () => { + const [oldKeyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.RSA }); + expect(oldKeyPair).toBeTruthy(); + + // Delete + await alice.call('keys.delete', { webId: alice.webId, resourceUri: oldKeyPair.id || oldKeyPair['@id'] }); + + // Expect webId not to have key. + const webIdDocument = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocument.publicKey).find((publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) + ).toBeUndefined(); + // Expect key not to be present in `/public-keys` container. + await expect(alice.call('ldp.resource.exist', { resourceUri: oldKeyPair['rdfs:seeAlso'] })).resolves.toBeFalsy(); + + // Create new key. + const newKeyPair = await alice.call('keys.createKeyForActor', { + webId: alice.webId, + keyType: KEY_TYPES.RSA, + attachToWebId: true }); - test('no second key addable to webId', async () => { - const keyPair = await broker.call('keys.createKeyForActor', { - webId: user.webId, - keyType: KEY_TYPES.RSA, - publishKey: true, - attachToWebId: true - }); - // Expect the new key to be findable in the webId and the old one to be removed. - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - // Expect the public key of the webId to be the key published in the public key container (referenced rdfs:seeAlso). - expect(webIdDocument.publicKey.id || webIdDocument.publicKey['@id']).toBe(keyPair['rdfs:seeAlso']); - }); + expect(newKeyPair).toBeTruthy(); + expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); + expect(newKeyPair.publicKeyPem).toBeDefined(); + expect(newKeyPair.privateKeyPem).toBeDefined(); + expect(newKeyPair.publicKeyPem).not.toBe(oldKeyPair.publicKeyPem); + + // Expect webId to not have old key but new key. + const webIdDocumentNew = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocumentNew.publicKey).some((publicKey: any) => publicKey.publicKeyPem === oldKeyPair.publicKeyPem) + ).toBeFalsy(); + expect( + arrayOf(webIdDocumentNew.publicKey).some((publicKey: any) => publicKey.publicKeyPem === newKeyPair.publicKeyPem) + ).toBeTruthy(); + + // Expect publicKey to be present in `/public-keys` container. + const publicKey = await alice.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'] }); + expect(publicKey).toBeTruthy(); + expect(publicKey.publicKeyPem).toBe(newKeyPair.publicKeyPem); + expect(publicKey.owner).toBe(alice.webId); + expect(publicKey.privateKeyPem).toBeUndefined(); + }); - test('third key not present in webId and public key container', async () => { - const keyPair = await broker.call('keys.createKeyForActor', { - webId: user.webId, - keyType: KEY_TYPES.RSA, - publishKey: false, - attachToWebId: false - }); - - expect(keyPair['rdfs:seeAlso']).toBeUndefined(); - - // Should not be present in webId. - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) - ).toBeUndefined(); - }); + test('private key is not accessible without authorization', async () => { + const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.RSA }); + expect(keyPair).toBeTruthy(); - test('keys.getOrCreateWebIdKeys returns key', async () => { - const webIdKeys = await broker.call('keys.getOrCreateWebIdKeys', { - webId: user.webId, - keyType: KEY_TYPES.RSA - }); - expect(webIdKeys).toHaveLength(1); - webIdKeys.forEach((key: any) => { - expect(key.publicKeyPem).toBeTruthy(); - expect(key.privateKeyPem).toBeTruthy(); - }); - }); + await expect( + alice.call('keys.container.get', { resourceUri: keyPair['@id'] || keyPair.id, webId: 'anon' }) + ).rejects.toThrow('Forbidden'); }); - describe('ED25519 key', () => { - test('exists', async () => { - const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - expect(keyPairs).toHaveLength(1); - const keyPair = keyPairs[0]; - expect(keyPair).toBeTruthy(); - expect(keyPair['@id'] || keyPair.id).toBeDefined(); - expect(keyPair.publicKeyMultibase).toBeDefined(); - expect(keyPair.secretKeyMultibase).toBeDefined(); - expect(keyPair.owner).toBeDefined(); - expect(keyPair.controller).toBeDefined(); + test('second key present in keys and public-keys container only', async () => { + const keyPair = await alice.call('keys.createKeyForActor', { + webId: alice.webId, + keyType: KEY_TYPES.RSA, + publishKey: true, + attachToWebId: false }); - test('public key present in public-key container', async () => { - const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); - expect(keyPair['rdfs:seeAlso']).toBeDefined(); - - const publicKey = await broker.call('keys.public-container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); - expect(publicKey.publicKeyMultibase).toBe(keyPair.publicKeyMultibase); - expect(publicKey.secretKeyMultibase).toBeUndefined(); - }); + const publicKey = await alice.call('keys.container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); + expect(publicKey).toBeTruthy(); - test('public key present in webId', async () => { - const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.ED25519 }); + // Should not be present in webId. + const webIdDocument = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) + ).toBeUndefined(); + }); - const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }, { meta: { $cache: false } }); - expect(webIdDocument.assertionMethod).toBeDefined(); - expect( - arrayOf(webIdDocument.assertionMethod).find( - (assertionMethod: any) => assertionMethod.publicKeyMultibase === keyPair.publicKeyMultibase - ) - ).toBeDefined(); + test('no second key addable to webId', async () => { + const keyPair = await alice.call('keys.createKeyForActor', { + webId: alice.webId, + keyType: KEY_TYPES.RSA, + publishKey: true, + attachToWebId: true }); - - test('detach and attach to webid works', async () => { - const [keyPair] = await broker.call('keys.getByType', { - webId: user.webId, - keyType: KEY_TYPES.ED25519 - }); - - await broker.call('keys.detachFromWebId', { webId: user.webId, publicKeyId: keyPair['rdfs:seeAlso'] }); - - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocument.assertionMethod).find( - (key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase - ) - ).toBeUndefined(); - - // Attach key again. - await broker.call('keys.attachPublicKeyToWebId', { webId: user.webId, keyId: keyPair['@id'] || keyPair.id }); - const webIdDocumentNew = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocumentNew.assertionMethod).find( - (key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase - ) - ).toBeDefined(); + // Expect the new key to be findable in the webId and the old one to be removed. + const webIdDocument = await alice.call('webid.get', { + resourceUri: alice.webId }); + // Expect the public key of the webId to be the key published in the public key container (referenced rdfs:seeAlso). + expect(webIdDocument.publicKey.id || webIdDocument.publicKey['@id']).toBe(keyPair['rdfs:seeAlso']); + }); - test('key deletable and new one addable', async () => { - const [oldKeyPair] = await broker.call('keys.getByType', { - webId: user.webId, - keyType: KEY_TYPES.ED25519 - }); - expect(oldKeyPair).toBeTruthy(); - - // Delete - await broker.call('keys.delete', { webId: user.webId, resourceUri: oldKeyPair.id || oldKeyPair['@id'] }); - - // Expect webId not to have key. - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocument.assertionMethod).find( - (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase - ) - ).toBeUndefined(); - // Expect key not to be present in `/public-keys` container. - await expect( - broker.call('ldp.resource.exist', { - resourceUri: oldKeyPair['rdfs:seeAlso'], - webId: user.webId - }) - ).resolves.toBeFalsy(); - - // Create new key. - const newKeyPair = await broker.call('keys.createKeyForActor', { - webId: user.webId, - keyType: KEY_TYPES.ED25519, - attachToWebId: true - }); - expect(newKeyPair).toBeTruthy(); - expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); - expect(newKeyPair.publicKeyMultibase).toBeDefined(); - expect(newKeyPair.secretKeyMultibase).toBeDefined(); - expect(newKeyPair.publicKeyMultibase).not.toBe(oldKeyPair.publicKeyMultibase); - - // Expect webId to not have old key but new key. - const webIdDocumentNew = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - expect( - arrayOf(webIdDocumentNew.assertionMethod).some( - (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase - ) - ).toBeFalsy(); - expect( - arrayOf(webIdDocumentNew.assertionMethod).some( - (publicKey: any) => publicKey.publicKeyMultibase === newKeyPair.publicKeyMultibase - ) - ).toBeTruthy(); - - // Expect publicKey to be present in `/public-keys` container. - const publicKey = await broker.call('keys.public-container.get', { - resourceUri: newKeyPair['rdfs:seeAlso'], - webId: user.webId - }); - expect(publicKey).toBeTruthy(); - expect(publicKey.publicKeyMultibase).toBe(newKeyPair.publicKeyMultibase); - expect(publicKey.owner).toBe(user.webId); - expect(publicKey.secretKeyMultibase).toBeUndefined(); + test('third key not present in webId and public key container', async () => { + const keyPair = await alice.call('keys.createKeyForActor', { + webId: alice.webId, + keyType: KEY_TYPES.RSA, + publishKey: false, + attachToWebId: false }); - test('private key is not accessible without authorization', async () => { - const [keyPair] = await broker.call('keys.getByType', { - webId: user.webId, - keyType: KEY_TYPES.ED25519 - }); - expect(keyPair).toBeTruthy(); - - await expect( - broker.call('keys.container.get', { - resourceUri: keyPair.id || keyPair['@id'], - webId: user2.webId - }) - ).rejects.toThrow('Forbidden'); - }); + expect(keyPair['rdfs:seeAlso']).toBeUndefined(); - test('second addable to webId', async () => { - const keyPair = await broker.call('keys.createKeyForActor', { - webId: user.webId, - keyType: KEY_TYPES.ED25519, - publishKey: true, - attachToWebId: true - }); - - // Expect the new key to be findable in the webId - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId, - webId: user.webId - }); - // Expect the public key of the webId to be the key published in the public key container (referenced by rdfs:seeAlso). - expect( - arrayOf(webIdDocument.assertionMethod).find((key: any) => (key.id || key['@id']) === keyPair['rdfs:seeAlso']) - ).toBeTruthy(); - expect(webIdDocument.assertionMethod.length).toBeGreaterThan(1); - }); + // Should not be present in webId. + const webIdDocument = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocument.publicKey).find((pKey: any) => pKey.publicKeyPem === keyPair.publicKeyPem) + ).toBeUndefined(); + }); - test('keys.getOrCreateWebIdKeys returns keys', async () => { - const webIdKeys = await broker.call('keys.getOrCreateWebIdKeys', { - webId: user.webId, - keyType: KEY_TYPES.ED25519 - }); - expect(webIdKeys.length).toBeGreaterThan(0); - webIdKeys.forEach((key: any) => { - expect(key.publicKeyMultibase).toBeTruthy(); - expect(key.secretKeyMultibase).toBeTruthy(); - }); + test('keys.getOrCreateWebIdKeys returns key', async () => { + const webIdKeys = await alice.call('keys.getOrCreateWebIdKeys', { webId: alice.webId, keyType: KEY_TYPES.RSA }); + expect(webIdKeys).toHaveLength(1); + webIdKeys.forEach((key: any) => { + expect(key.publicKeyPem).toBeTruthy(); + expect(key.privateKeyPem).toBeTruthy(); }); }); }); - describe('Migration', () => { - beforeAll(async () => { - // Stop and create new broker without migration. - if (broker) await broker.stop(); - await setUp(true); + describe('ED25519 key', () => { + test('exists', async () => { + const keyPairs = await alice.call('keys.getByType', { keyType: KEY_TYPES.ED25519 }); + expect(keyPairs).toHaveLength(1); + const keyPair = keyPairs[0]; + expect(keyPair).toBeTruthy(); + expect(keyPair['@id'] || keyPair.id).toBeDefined(); + expect(keyPair.publicKeyMultibase).toBeDefined(); + expect(keyPair.secretKeyMultibase).toBeDefined(); + expect(keyPair.owner).toBeDefined(); + expect(keyPair.controller).toBeDefined(); }); - // To store the key and validate if it remained the same after migration. - // A bit hacky, sorry. - let publicKeyPemBeforeMigration: any; - let privateKeyPemBeforeMigration: any; - - describe('Before migration', () => { - test('new keys service not usable before migration', async () => { - await expect( - broker.call('keys.createKeyForActor', { - webId: user.webId, - keyType: KEY_TYPES.RSA, - attachToWebId: true - }) - ).rejects.toMatchObject({ - message: - 'The keys were not migrated to db storage yet. Please run `keys.migration.migrateKeysToDb` and use the deprecated `signature.keypair` service for now.' - }); - }); + test('public key present in public-key container', async () => { + const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.ED25519 }); + expect(keyPair['rdfs:seeAlso']).toBeDefined(); - test('key gettable', async () => { - const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - expect(publicKey).toBeDefined(); - expect(privateKey).toBeDefined(); - // Save them for later validation - publicKeyPemBeforeMigration = publicKey; - privateKeyPemBeforeMigration = privateKey; - }); + const publicKey = await alice.call('keys.public-container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); + expect(publicKey.publicKeyMultibase).toBe(keyPair.publicKeyMultibase); + expect(publicKey.secretKeyMultibase).toBeUndefined(); + }); + + test('public key present in webId', async () => { + const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.ED25519 }); + + const webIdDocument = await alice.call('webid.get', { resourceUri: alice.webId }, { meta: { $cache: false } }); + expect(webIdDocument.assertionMethod).toBeDefined(); + expect( + arrayOf(webIdDocument.assertionMethod).find( + (assertionMethod: any) => assertionMethod.publicKeyMultibase === keyPair.publicKeyMultibase + ) + ).toBeDefined(); + }); - test('key in webId', async () => { - const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - expect(publicKey).toBeDefined(); - expect(privateKey).toBeDefined(); - const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); - expect(webIdDocument).toBeDefined(); - expect(webIdDocument.publicKey).toBeDefined(); - expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); - expect(webIdDocument.privateKey).toBeUndefined(); + test('detach and attach to webid works', async () => { + const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.ED25519 }); + + await alice.call('keys.detachFromWebId', { webId: alice.webId, publicKeyId: keyPair['rdfs:seeAlso'] }); + + const webIdDocument = await alice.call('webid.get', { + resourceUri: alice.webId, + webId: alice.webId }); + expect( + arrayOf(webIdDocument.assertionMethod).find((key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase) + ).toBeUndefined(); + + // Attach key again. + await alice.call('keys.attachPublicKeyToWebId', { webId: alice.webId, keyId: keyPair['@id'] || keyPair.id }); + const webIdDocumentNew = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocumentNew.assertionMethod).find( + (key: any) => key.publicKeyMultibase === keyPair.publicKeyMultibase + ) + ).toBeDefined(); }); - describe('After migration', () => { - beforeAll(async () => { - await broker.call('keys.migration.migrateKeysToDb'); - // Wait for keys.migration.migrated event to have propagated. - await wait(1000); + + test('key deletable and new one addable', async () => { + const [oldKeyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.ED25519 }); + expect(oldKeyPair).toBeTruthy(); + + // Delete + await alice.call('keys.delete', { resourceUri: oldKeyPair.id || oldKeyPair['@id'] }); + + // Expect webId not to have key. + const webIdDocument = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocument.assertionMethod).find( + (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase + ) + ).toBeUndefined(); + // Expect key not to be present in `/public-keys` container. + await expect(alice.call('ldp.resource.exist', { resourceUri: oldKeyPair['rdfs:seeAlso'] })).resolves.toBeFalsy(); + + // Create new key. + const newKeyPair = await alice.call('keys.createKeyForActor', { + webId: alice.webId, + keyType: KEY_TYPES.ED25519, + attachToWebId: true }); + expect(newKeyPair).toBeTruthy(); + expect(newKeyPair.id || newKeyPair['@id']).toBeDefined(); + expect(newKeyPair.publicKeyMultibase).toBeDefined(); + expect(newKeyPair.secretKeyMultibase).toBeDefined(); + expect(newKeyPair.publicKeyMultibase).not.toBe(oldKeyPair.publicKeyMultibase); + + // Expect webId to not have old key but new key. + const webIdDocumentNew = await alice.call('webid.get', { resourceUri: alice.webId }); + expect( + arrayOf(webIdDocumentNew.assertionMethod).some( + (publicKey: any) => publicKey.publicKeyMultibase === oldKeyPair.publicKeyMultibase + ) + ).toBeFalsy(); + expect( + arrayOf(webIdDocumentNew.assertionMethod).some( + (publicKey: any) => publicKey.publicKeyMultibase === newKeyPair.publicKeyMultibase + ) + ).toBeTruthy(); + + // Expect publicKey to be present in `/public-keys` container. + const publicKey = await alice.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'] }); + expect(publicKey).toBeTruthy(); + expect(publicKey.publicKeyMultibase).toBe(newKeyPair.publicKeyMultibase); + expect(publicKey.owner).toBe(alice.webId); + expect(publicKey.secretKeyMultibase).toBeUndefined(); + }); + + test('private key is not accessible without authorization', async () => { + const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.ED25519 }); + expect(keyPair).toBeTruthy(); - describe('With old service', () => { - test('key gettable and the same as before', async () => { - const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - expect(publicKey).toBeDefined(); - expect(privateKey).toBeDefined(); - expect(publicKey).toBe(publicKeyPemBeforeMigration); - expect(privateKey).toBe(privateKeyPemBeforeMigration); - }); - - test('key in webId', async () => { - const { publicKey, privateKey } = await broker.call('signature.keypair.get', { actorUri: user.webId }); - expect(publicKey).toBeDefined(); - expect(privateKey).toBeDefined(); - const webIdDocument = await broker.call('webid.get', { resourceUri: user.webId }); - expect(webIdDocument).toBeDefined(); - expect(webIdDocument.publicKey.publicKeyPem).toBe(publicKey); - expect(webIdDocument.privateKey).toBeUndefined(); - }); + await expect( + alice.call('keys.container.get', { + resourceUri: keyPair.id || keyPair['@id'], + webId: 'anon' + }) + ).rejects.toThrow('Forbidden'); + }); + + test('second addable to webId', async () => { + const keyPair = await alice.call('keys.createKeyForActor', { + webId: alice.webId, + keyType: KEY_TYPES.ED25519, + publishKey: true, + attachToWebId: true }); - describe('With new service', () => { - test('key gettable and remained the same', async () => { - const keyPairs = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - expect(keyPairs).toHaveLength(1); - const keyPair = keyPairs[0]; - expect(keyPair).toBeTruthy(); - expect(keyPair['@id'] || keyPair.id).toBeDefined(); - expect(keyPair.owner).toBeDefined(); - expect(keyPair.controller).toBeDefined(); - expect(keyPair.publicKeyPem).toBe(publicKeyPemBeforeMigration); - expect(keyPair.privateKeyPem).toBe(privateKeyPemBeforeMigration); - }); - - test('key in webId', async () => { - const [keyPair] = await broker.call('keys.getByType', { webId: user.webId, keyType: KEY_TYPES.RSA }); - - const webIdDocument = await broker.call('webid.get', { - resourceUri: user.webId - }); - expect(webIdDocument).toBeDefined(); - const { publicKey } = webIdDocument; - // There should only be one public key advertised in the webId by default. - expect(publicKey).toBeDefined(); - expect(publicKey.owner).toBe(user.webId); - expect(publicKey.controller).toBe(user.webId); - expect(publicKey.publicKeyPem).toBe(keyPair.publicKeyPem); - expect(publicKey.privateKeyPem).toBeUndefined(); - }); + // Expect the new key to be findable in the webId + const webIdDocument = await alice.call('webid.get', { resourceUri: alice.webId }); + // Expect the public key of the webId to be the key published in the public key container (referenced by rdfs:seeAlso). + expect( + arrayOf(webIdDocument.assertionMethod).find((key: any) => (key.id || key['@id']) === keyPair['rdfs:seeAlso']) + ).toBeTruthy(); + expect(webIdDocument.assertionMethod.length).toBeGreaterThan(1); + }); + + test('keys.getOrCreateWebIdKeys returns keys', async () => { + const webIdKeys = await alice.call('keys.getOrCreateWebIdKeys', { + webId: alice.webId, + keyType: KEY_TYPES.ED25519 + }); + expect(webIdKeys.length).toBeGreaterThan(0); + webIdKeys.forEach((key: any) => { + expect(key.publicKeyMultibase).toBeTruthy(); + expect(key.secretKeyMultibase).toBeTruthy(); }); }); }); diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index be294b357..d4197c30f 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -1,4 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; +import { VerifiableCredentialsService } from '@semapps/crypto'; +import { ServiceBroker } from 'moleculer'; import path from 'node:path'; import initialize from './initialize.ts'; @@ -9,8 +11,7 @@ const getChallengeFrom = async (actor: any) => { return challenge; }; -/** @type {import('moleculer').ServiceBroker} */ -let broker: any; +let broker: ServiceBroker; let baseUrl; let vcApiEndpoint: any; @@ -18,7 +19,7 @@ let alice: any; let bob: any; let craig: any; -const setUpUser = async (broker: any, username: any) => { +const setUpUser = async (broker: ServiceBroker, username: any) => { const user = await broker.call('auth.signup', { username, email: `${username}@test.example`, @@ -48,8 +49,8 @@ const setUpUser = async (broker: any, username: any) => { return user; }; -const setUp = async (withOldKeyStore: any) => { - ({ broker, baseUrl } = await initialize(3000, withOldKeyStore)); +const setUp = async () => { + broker = await initialize(3000); vcApiEndpoint = path.join(baseUrl, 'vc/v0.3/'); alice = await setUpUser(broker, 'alice'); bob = await setUpUser(broker, 'bob'); @@ -64,6 +65,30 @@ describe('verifiable credentials', () => { beforeAll(async () => { // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. await setUp(); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc"; d... Remove this comment to see the full error message + broker.createService({ + mixins: [VerifiableCredentialsService], + settings: { + podProvider: false + } + }); + + broker.waitForServices( + [ + 'core', + 'auth', + 'webid', + 'triplestore', + 'keys', + 'keys.container', + 'keys.public-container', + 'keys.migration', + 'crypto.vc' + ], + 5_000 + ); + await broker.call('crypto.vc.issuer.credential-container.waitForContainerCreation'); }); From 3ace44b863d82f795100a0291f86c956bf03bf76 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 11 Nov 2025 12:22:00 +0100 Subject: [PATCH 107/165] Rename keys container services --- src/middleware/packages/crypto/keys/keys.ts | 30 +++++++++---------- ...container.ts => private-keys-container.ts} | 8 ++--- ...-container.ts => public-keys-container.ts} | 8 ++--- src/middleware/tests/crypto/keys.test.ts | 14 ++++----- .../crypto/verifiable-credentials.test.ts | 4 +-- 5 files changed, 32 insertions(+), 32 deletions(-) rename src/middleware/packages/crypto/keys/{key-container.ts => private-keys-container.ts} (91%) rename src/middleware/packages/crypto/keys/{public-key-container.ts => public-keys-container.ts} (89%) diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index f0d172d92..cc03806ce 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -7,8 +7,8 @@ import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; -import PrivateKeyContainerService from './key-container.ts'; -import PublicKeyContainerService from './public-key-container.ts'; +import PrivateKeyContainerService from './private-keys-container.ts'; +import PublicKeyContainerService from './public-keys-container.ts'; /** * Service for managing keys (creating, storing, retrieving). @@ -23,7 +23,7 @@ import PublicKeyContainerService from './public-key-container.ts'; */ const KeysService = { name: 'keys' as const, - dependencies: ['ontologies', 'keys.container', 'keys.public-container'], + dependencies: ['ontologies', 'private-keys-container', 'public-keys-container'], created() { // Start keys-container and public-keys-container services. // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "keys.containe... Remove this comment to see the full error message @@ -54,7 +54,7 @@ const KeysService = { const webId = ctx.params.webId || ctx.meta.webId; // Get the key container, to search by type. - const container: any = await ctx.call('keys.container.list', { webId }); + const container: any = await ctx.call('private-keys-container.list', { webId }); // Because edd2519 multikeys are allowed to have one key only, we filter like that. // TODO: We only support those keys anyways. If we support other ones in the future, @@ -106,7 +106,7 @@ const KeysService = { return await Promise.all( publicKeys.map(async key => { const publicKeyId = key.id || key['@id']; - return await ctx.call('keys.container.get', { + return await ctx.call('private-keys-container.get', { resourceUri: await this.actions.findPrivateKeyUri({ publicKeyUri: publicKeyId }, { parentCtx: ctx }), webId }); @@ -136,7 +136,7 @@ const KeysService = { // Note: Key purposes are not regarded, as they are currently not used. const keyObject = ctx.params.keyObject || keyId - ? await ctx.call('keys.container.get', { resourceUri: keyId, webId }) + ? await ctx.call('private-keys-container.get', { resourceUri: keyId, webId }) : (await ctx.call('keys.getOrCreateWebIdKeys', { webId, keyType }))[0]; // We need the key object to have the public key's id, so it is resolvable. @@ -178,7 +178,7 @@ const KeysService = { owner: webId, controller: webId }; - const keyUri = await ctx.call('keys.container.post', { + const keyUri = await ctx.call('private-keys-container.post', { webId, resource: keyObject }); @@ -396,7 +396,7 @@ const KeysService = { const publicKeyObject = await this.actions.getPublicKeyObject({ keyObject }, { parentCtx: ctx }); // Then, store it in the `/public-key` container. - const publicKeyUri: string = await ctx.call('keys.public-container.post', { + const publicKeyUri: string = await ctx.call('public-keys-container.post', { resource: publicKeyObject, webId }); @@ -431,10 +431,10 @@ const KeysService = { const webId = ctx.params.webId || ctx.meta.webId; const keyObject = ctx.params.keyObject || (await ctx.call('ldp.resource.get', { resourceUri, webId })); - await ctx.call('keys.container.delete', { resourceUri, webId }); + await ctx.call('private-keys-container.delete', { resourceUri, webId }); // Delete corresponding public key in the `public-key` container, if present. if (keyObject['rdfs:seeAlso']) { - // Don't call `keys.public-container.delete` + // Don't call `public-keys-container.delete` // because that will try to delete the private key reference (which we deleted already). await ctx.call('ldp.resource.delete', { resourceUri: keyObject['rdfs:seeAlso'], webId }); } @@ -453,7 +453,7 @@ const KeysService = { }, async handler(ctx) { const { webId } = ctx.params; - const keys: any = await ctx.call('keys.container.list', { webId }); + const keys: any = await ctx.call('private-keys-container.list', { webId }); for (const key of keys['ldp:contains']) { await ctx.call('keys.delete', { resourceUri: key.id, webId }); } @@ -585,19 +585,19 @@ const KeysService = { const { webId } = ctx.params; // Wait for the key containers to be created. - const keyContainerUri = await ctx.call('keys.container.getContainerUri', { webId }, { parentCtx: ctx }); + const keyContainerUri = await ctx.call('private-keys-container.getContainerUri', { webId }, { parentCtx: ctx }); const publicKeyContainerUri = await ctx.call( - 'keys.public-container.getContainerUri', + 'public-keys-container.getContainerUri', { webId }, { parentCtx: ctx } ); await ctx.call( - 'keys.container.waitForContainerCreation', + 'private-keys-container.waitForContainerCreation', { containerUri: keyContainerUri }, { parentCtx: ctx } ); await ctx.call( - 'keys.container.waitForContainerCreation', + 'private-keys-container.waitForContainerCreation', { containerUri: publicKeyContainerUri }, { parentCtx: ctx } ); diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/private-keys-container.ts similarity index 91% rename from src/middleware/packages/crypto/keys/key-container.ts rename to src/middleware/packages/crypto/keys/private-keys-container.ts index 1b5bb23f5..1a8e90d0c 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/private-keys-container.ts @@ -13,7 +13,7 @@ import { KEY_TYPES } from '../constants.ts'; * Watch out with permissions. This should be strictly limited to the owner and privileged apps. */ const PrivateKeysContainerService = { - name: 'keys.container' as const, + name: 'private-keys-container' as const, mixins: [ControlledContainerMixin], settings: { path: '/key', @@ -34,9 +34,9 @@ const PrivateKeysContainerService = { typeIndex: 'private', // Disallow PATCH & PUT, to prevent keys from being overwritten controlledActions: { - get: 'keys.container.get', // Returns key object with context and type required by Multikey spec. - put: 'keys.container.forbidden', - patch: 'keys.container.forbidden', + get: 'private-keys-container.get', // Returns key object with context and type required by Multikey spec. + put: 'private-keys-container.forbidden', + patch: 'private-keys-container.forbidden', delete: 'keys.delete' } }, diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-keys-container.ts similarity index 89% rename from src/middleware/packages/crypto/keys/public-key-container.ts rename to src/middleware/packages/crypto/keys/public-keys-container.ts index ecc36a147..398229d56 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-keys-container.ts @@ -10,7 +10,7 @@ import { KEY_TYPES } from '../constants.ts'; * Anonymous read is allowed by default. */ const PublicKeysService = { - name: 'keys.public-container' as const, + name: 'public-keys-container' as const, mixins: [ControlledContainerMixin], settings: { path: '/public-key', @@ -35,9 +35,9 @@ const PublicKeysService = { typeIndex: 'public', // Disallow PATCH & PUT, to prevent keys from being overwritten controlledActions: { - get: 'keys.container.get', // Returns key object with context and type required by Multikey spec. - put: 'keys.public-container.forbidden', - patch: 'keys.public-container.forbidden' + get: 'private-keys-container.get', // Returns key object with context and type required by Multikey spec. + put: 'public-keys-container.forbidden', + patch: 'public-keys-container.forbidden' } }, diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index 905fac718..a22dc01e9 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -15,7 +15,7 @@ const setUp = async () => { await broker.start(); broker.waitForServices( - ['core', 'auth', 'webid', 'triplestore', 'keys', 'keys.container', 'keys.public-container'], + ['core', 'auth', 'webid', 'triplestore', 'keys', 'private-keys-container', 'public-keys-container'], 5_000 ); @@ -121,7 +121,7 @@ describe('Keys management', () => { ).toBeTruthy(); // Expect publicKey to be present in `/public-keys` container. - const publicKey = await alice.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'] }); + const publicKey = await alice.call('public-keys-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'] }); expect(publicKey).toBeTruthy(); expect(publicKey.publicKeyPem).toBe(newKeyPair.publicKeyPem); expect(publicKey.owner).toBe(alice.webId); @@ -133,7 +133,7 @@ describe('Keys management', () => { expect(keyPair).toBeTruthy(); await expect( - alice.call('keys.container.get', { resourceUri: keyPair['@id'] || keyPair.id, webId: 'anon' }) + alice.call('private-keys-container.get', { resourceUri: keyPair['@id'] || keyPair.id, webId: 'anon' }) ).rejects.toThrow('Forbidden'); }); @@ -145,7 +145,7 @@ describe('Keys management', () => { attachToWebId: false }); - const publicKey = await alice.call('keys.container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); + const publicKey = await alice.call('private-keys-container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); expect(publicKey).toBeTruthy(); // Should not be present in webId. @@ -214,7 +214,7 @@ describe('Keys management', () => { const [keyPair] = await alice.call('keys.getByType', { keyType: KEY_TYPES.ED25519 }); expect(keyPair['rdfs:seeAlso']).toBeDefined(); - const publicKey = await alice.call('keys.public-container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); + const publicKey = await alice.call('public-keys-container.get', { resourceUri: keyPair['rdfs:seeAlso'] }); expect(publicKey.publicKeyMultibase).toBe(keyPair.publicKeyMultibase); expect(publicKey.secretKeyMultibase).toBeUndefined(); }); @@ -297,7 +297,7 @@ describe('Keys management', () => { ).toBeTruthy(); // Expect publicKey to be present in `/public-keys` container. - const publicKey = await alice.call('keys.public-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'] }); + const publicKey = await alice.call('public-keys-container.get', { resourceUri: newKeyPair['rdfs:seeAlso'] }); expect(publicKey).toBeTruthy(); expect(publicKey.publicKeyMultibase).toBe(newKeyPair.publicKeyMultibase); expect(publicKey.owner).toBe(alice.webId); @@ -309,7 +309,7 @@ describe('Keys management', () => { expect(keyPair).toBeTruthy(); await expect( - alice.call('keys.container.get', { + alice.call('private-keys-container.get', { resourceUri: keyPair.id || keyPair['@id'], webId: 'anon' }) diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index d4197c30f..174c2b91a 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -81,8 +81,8 @@ describe('verifiable credentials', () => { 'webid', 'triplestore', 'keys', - 'keys.container', - 'keys.public-container', + 'private-keys-container', + 'public-keys-container', 'keys.migration', 'crypto.vc' ], From c66412f4e0fda900108faa14d9cc8e617be4ad0f Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 12 Nov 2025 10:47:14 +0100 Subject: [PATCH 108/165] Refactor Keys and VC tests --- src/middleware/packages/crypto/index.ts | 3 +- src/middleware/packages/crypto/keys/keys.ts | 27 +- .../crypto/keys/private-keys-container.ts | 34 +- .../crypto/keys/public-keys-container.ts | 64 ++-- .../{vc-api-service.ts => api.ts} | 33 +- ...vc-authorizer-service.ts => authorizer.ts} | 10 +- .../{challenge-service.ts => challenge.ts} | 1 - ...-container.ts => credentials-container.ts} | 46 +-- ...integrity-service.ts => data-integrity.ts} | 6 +- .../{vc-holder-service.ts => holder.ts} | 12 +- .../crypto/verifiable-credentials/index.ts | 4 +- .../{vc-issuer-service.ts => issuer.ts} | 37 +- ...ontainer.ts => presentations-container.ts} | 27 +- .../{vc-service.ts => vc.ts} | 44 +-- .../{vc-verifier-service.ts => verifier.ts} | 15 +- .../ldp/mixins/controlled-container.ts | 2 +- .../ldp/mixins/controlled-resource.ts | 2 +- src/middleware/packages/ldp/package.json | 1 + .../ldp/services/container/actions/post.ts | 5 +- .../services/registry/actions/getByTypes.ts | 14 +- .../ldp/services/registry/actions/getByUri.ts | 20 +- .../ldp/services/registry/actions/register.ts | 4 +- src/middleware/packages/solid/index.ts | 1 + .../packages/solid/services/storage.ts | 2 - .../services/type-index/private-type-index.ts | 4 +- .../services/type-index/public-type-index.ts | 4 +- .../solid/services/type-index/type-index.ts | 28 +- src/middleware/packages/solid/types.ts | 6 + .../packages/webacl/middlewares/webacl.ts | 23 +- .../actions/refreshContainersRights.ts | 2 +- src/middleware/packages/webacl/types.ts | 4 +- src/middleware/tests/crypto/keys.test.ts | 2 - .../crypto/verifiable-credentials.test.ts | 339 ++++++++---------- src/middleware/tests/utils.ts | 21 +- 34 files changed, 369 insertions(+), 478 deletions(-) rename src/middleware/packages/crypto/verifiable-credentials/{vc-api-service.ts => api.ts} (73%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-authorizer-service.ts => authorizer.ts} (85%) rename src/middleware/packages/crypto/verifiable-credentials/{challenge-service.ts => challenge.ts} (98%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-credential-container.ts => credentials-container.ts} (61%) rename src/middleware/packages/crypto/verifiable-credentials/{data-integrity-service.ts => data-integrity.ts} (95%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-holder-service.ts => holder.ts} (95%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-issuer-service.ts => issuer.ts} (83%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-presentation-container.ts => presentations-container.ts} (74%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-service.ts => vc.ts} (64%) rename src/middleware/packages/crypto/verifiable-credentials/{vc-verifier-service.ts => verifier.ts} (93%) create mode 100644 src/middleware/packages/solid/types.ts diff --git a/src/middleware/packages/crypto/index.ts b/src/middleware/packages/crypto/index.ts index 9a355d750..d25eef177 100644 --- a/src/middleware/packages/crypto/index.ts +++ b/src/middleware/packages/crypto/index.ts @@ -1,4 +1,5 @@ export { default as KeysService } from './keys/keys.ts'; -export * from './signature/index.ts'; +export { default as SignatureService } from './signature/http-signatures.ts'; +export { default as ProxyService } from './signature/proxy.ts'; export * from './constants.ts'; export * from './verifiable-credentials/index.ts'; diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index cc03806ce..94ff19729 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -178,10 +178,7 @@ const KeysService = { owner: webId, controller: webId }; - const keyUri = await ctx.call('private-keys-container.post', { - webId, - resource: keyObject - }); + const keyUri = await ctx.call('private-keys-container.post', { resource: keyObject }); keyObject.id = keyUri; if (publishKey || attachToWebId) { @@ -584,23 +581,11 @@ const KeysService = { async handler(ctx: any) { const { webId } = ctx.params; - // Wait for the key containers to be created. - const keyContainerUri = await ctx.call('private-keys-container.getContainerUri', { webId }, { parentCtx: ctx }); - const publicKeyContainerUri = await ctx.call( - 'public-keys-container.getContainerUri', - { webId }, - { parentCtx: ctx } - ); - await ctx.call( - 'private-keys-container.waitForContainerCreation', - { containerUri: keyContainerUri }, - { parentCtx: ctx } - ); - await ctx.call( - 'private-keys-container.waitForContainerCreation', - { containerUri: publicKeyContainerUri }, - { parentCtx: ctx } - ); + // Wait for the keys containers to be created. + const privateKeysContainerUri = await ctx.call('private-keys-container.getContainerUri', { webId }); + const publicKeysContainerUri = await ctx.call('public-keys-container.getContainerUri', { webId }); + await ctx.call('private-keys-container.waitForContainerCreation', { containerUri: privateKeysContainerUri }); + await ctx.call('public-keys-container.waitForContainerCreation', { containerUri: publicKeysContainerUri }); // Create, publish and attach keys to the webId. await Promise.all([ diff --git a/src/middleware/packages/crypto/keys/private-keys-container.ts b/src/middleware/packages/crypto/keys/private-keys-container.ts index 1a8e90d0c..b4c589777 100644 --- a/src/middleware/packages/crypto/keys/private-keys-container.ts +++ b/src/middleware/packages/crypto/keys/private-keys-container.ts @@ -19,34 +19,14 @@ const PrivateKeysContainerService = { path: '/key', types: Object.values(KEY_TYPES), permissions: {}, - newResourcesPermissions: (webId: any) => { - if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); - return { - user: { - uri: webId, - read: true, - write: true, - control: true - } - }; - }, + newResourcesPermissions: {}, excludeFromMirror: true, typeIndex: 'private', - // Disallow PATCH & PUT, to prevent keys from being overwritten controlledActions: { - get: 'private-keys-container.get', // Returns key object with context and type required by Multikey spec. - put: 'private-keys-container.forbidden', - patch: 'private-keys-container.forbidden', delete: 'keys.delete' } }, actions: { - forbidden: { - async handler() { - throw new E.ForbiddenError(); - } - }, - get: { /** * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. @@ -73,6 +53,18 @@ const PrivateKeysContainerService = { return resource; } + }, + + put: { + handler() { + throw new E.ForbiddenError(); + } + }, + + patch: { + handler() { + throw new E.ForbiddenError(); + } } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/crypto/keys/public-keys-container.ts b/src/middleware/packages/crypto/keys/public-keys-container.ts index 398229d56..f40c7c8a7 100644 --- a/src/middleware/packages/crypto/keys/public-keys-container.ts +++ b/src/middleware/packages/crypto/keys/public-keys-container.ts @@ -1,5 +1,5 @@ import rdf from '@rdfjs/data-model'; -import { ControlledContainerMixin } from '@semapps/ldp'; +import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; @@ -16,33 +16,51 @@ const PublicKeysService = { path: '/public-key', types: Object.values(KEY_TYPES), permissions: {}, - newResourcesPermissions: (webId: string) => { - if (webId === 'anon' || webId === 'system') throw new Error('Key resource must be created for registered webId.'); - - return { - anon: { - read: true - }, - user: { - uri: webId, - read: true, - write: true, - control: true - } - }; + newResourcesPermissions: { + anon: { + read: true + } }, excludeFromMirror: false, - typeIndex: 'public', - // Disallow PATCH & PUT, to prevent keys from being overwritten - controlledActions: { - get: 'private-keys-container.get', // Returns key object with context and type required by Multikey spec. - put: 'public-keys-container.forbidden', - patch: 'public-keys-container.forbidden' - } + typeIndex: 'public' }, actions: { - forbidden: { + get: { + /** + * Get action that sets the multikey context and multikey type for those keys correctly. This is required by the spec. + * See: + * - https://www.w3.org/TR/controller-document/#json-ld-context + * - https://www.w3.org/TR/controller-document/#Multikey + * + * This Action is used by the public key container as well. + * + */ + async handler(ctx) { + const jsonContext = await ctx.call('jsonld.context.merge', { + a: ['https://w3id.org/security/multikey/v1'], + b: await ctx.call('jsonld.context.get') + }); + + const resource: any = await ctx.call('ldp.resource.get', { ...ctx.params, jsonContext }); + + // Make type `Multikey` only, to comply with spec. + if (arrayOf(resource.type).includes('sec:Multikey') || arrayOf(resource.type).includes('Multikey')) { + // Type must be Multikey only + resource.type = 'Multikey'; + } + + return resource; + } + }, + + put: { + handler() { + throw new E.ForbiddenError(); + } + }, + + patch: { handler() { throw new E.ForbiddenError(); } diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts b/src/middleware/packages/crypto/verifiable-credentials/api.ts similarity index 73% rename from src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/api.ts index 0a3d35e12..f863093a3 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/api.ts @@ -1,9 +1,16 @@ -import { parseHeader, parseRawBody, negotiateAccept, negotiateContentType, parseJson } from '@semapps/middlewares'; +import { + parseHeader, + parseRawBody, + negotiateAccept, + negotiateContentType, + parseJson, + saveDatasetMeta +} from '@semapps/middlewares'; import path from 'node:path'; import { ServiceSchema } from 'moleculer'; import { VC_API_PATH } from '../constants.ts'; -const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; +const middlewares = [saveDatasetMeta, parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; /** * @@ -12,24 +19,14 @@ const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRa * This service implements (parts of) the * [VC API spec](https://w3c-ccg.github.io/vc-api/) v0.3. * - * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} + * WARNING: Changing things here can have security implications */ -const VCApiService = { +const ApiService = { name: 'crypto.vc.api' as const, dependencies: ['api', 'ldp'], - settings: { - podProvider: null - }, - created() { - if (this.settings.podProvider === null) { - throw new Error('No pod provider set.'); - } - }, async started() { - const basePath = await this.broker.call('ldp.getBasePath'); - const apiPath = path.join(basePath, this.settings.podProvider ? '/:username([^/.][^/]+)' : '', VC_API_PATH); + const basePath: string = await this.broker.call('ldp.getBasePath'); + const apiPath = path.join(basePath, '/:username([^/.][^/]+)', VC_API_PATH); // Credential routes. await this.broker.call('api.addRoute', { @@ -86,12 +83,12 @@ const VCApiService = { } } satisfies ServiceSchema; -export default VCApiService; +export default ApiService; declare global { export namespace Moleculer { export interface AllServices { - [VCApiService.name]: typeof VCApiService; + [ApiService.name]: typeof ApiService; } } } diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts similarity index 85% rename from src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/authorizer.ts index 839459145..51a9d5ad0 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-authorizer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts @@ -28,9 +28,9 @@ const hasValidCapability = async (ctx: any, resourceUri: any, mode: any) => { return true; }; -const VcGuardSchema = { +const AuthorizerService = { name: 'vc.guard' as const, - dependencies: 'permissions', + dependencies: ['permissions'], async started() { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); }, @@ -38,8 +38,6 @@ const VcGuardSchema = { hasPermission: { async handler(ctx) { const { uri, mode } = ctx.params; - - // @ts-expect-error TS(2339): Property 'authorization' does not exist on type '{... Remove this comment to see the full error message if (ctx.meta.authorization?.capabilityPresentation) { if (await hasValidCapability(ctx, uri, mode)) { return true; @@ -52,12 +50,12 @@ const VcGuardSchema = { } } satisfies ServiceSchema; -export default VcGuardSchema; +export default AuthorizerService; declare global { export namespace Moleculer { export interface AllServices { - [VcGuardSchema.name]: typeof VcGuardSchema; + [AuthorizerService.name]: typeof AuthorizerService; } } } diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge.ts similarity index 98% rename from src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/challenge.ts index ef23d4f26..f783fe5cb 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge.ts @@ -6,7 +6,6 @@ import { ServiceSchema } from 'moleculer'; * Challenges can be used to created Verifiable Presentations (VC). * * Challenges are kept in memory and are valid for up to 5 minutes or until they are used. - * @type {import('moleculer').ServiceSchema} */ const ChallengeService = { name: 'crypto.vc.presentation.challenge' as const, diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts similarity index 61% rename from src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts rename to src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts index 894bdc5b1..ffcc90fce 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts @@ -1,50 +1,25 @@ -import path from 'node:path'; import { ControlledContainerMixin } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; -import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; +import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; /** * Container for Verifiable Credentials. Posting to this container will create a new VC. * The issuance is not handled in this service but in the {@link VCIssuerService}. * * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} */ const VCCredentialsContainer = { name: 'crypto.vc.issuer.credential-container' as const, mixins: [ControlledContainerMixin], dependencies: ['ontologies'], settings: { - path: null, + path: '/credentials', excludeFromMirror: true, activateTombstones: false, types: ['https://www.w3.org/2018/credentials#VerifiableCredential'], typeIndex: 'private', - podProvider: null, - permissions: (webId: any, ctx: any) => { - // If not a pod provider, the container is shared, so any user can append (not read arbitrary VCs though). - return { - anyUser: { - // Caution. Here, `ctx.service` is the LdpContainerService. Because this function is called by the WebAclMiddleware. - read: !ctx.service.settings.podProvider, - append: !ctx.service.settings.podProvider - } - }; - }, - newResourcesPermissions: (webId: any) => { - if (webId === 'anon') throw new Error('Credential resource must be created for registered webId.'); - if (webId === 'system') return {}; - - return { - user: { - uri: webId, - read: true, - write: true, - control: true - } - }; - } + permissions: {}, + newResourcesPermissions: {} }, /** * The actions below have their `@context` replaced. @@ -54,15 +29,14 @@ const VCCredentialsContainer = { actions: { get: { async handler(ctx) { - const resource = await ctx.call('ldp.resource.get', { + const resource: any = await ctx.call('ldp.resource.get', { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); - ctx.meta.$responseHeaders = { - // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message - ...ctx.meta.$responseHeaders, - 'Cache-Control': 'private, max-age=300, immutable' - }; + // ctx.meta.$responseHeaders = { + // ...ctx.meta.$responseHeaders, + // 'Cache-Control': 'private, max-age=300, immutable' + // }; return { ...resource, '@context': credentialsContext }; } }, @@ -96,7 +70,7 @@ const VCCredentialsContainer = { list: { async handler(ctx) { - const container = await ctx.call('ldp.container.get', { + const container: any = await ctx.call('ldp.container.get', { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts similarity index 95% rename from src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts index b3aa4ac37..e00ae61e4 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts @@ -22,8 +22,6 @@ const { * Currently, the only supported suite is the eddsa-rdfc-2022-cryptosuite. * * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} */ const DataIntegrityService = { name: 'crypto.vc.data-integrity' as const, @@ -89,19 +87,19 @@ const DataIntegrityService = { object, options: { proofPurpose: method = 'assertionMethod' } = {}, purpose = new AssertionProofPurpose({ term: method }), - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, keyObject = undefined, keyId = undefined } = ctx.params; - const key = await ctx.call('keys.getMultikey', { + const key: any = await ctx.call('keys.getMultikey', { webId, keyObject, keyId, keyType: KEY_TYPES.ED25519, withPrivateKey: true }); + // The library requires the key to have the type field set to `Multikey` only. const signingKeyInstance = await Ed25519Multikey.from({ ...key, type: 'Multikey' }); diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/holder.ts similarity index 95% rename from src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/holder.ts index f116200a5..f192c4886 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/holder.ts @@ -24,10 +24,8 @@ const { * For more information see the VC API spec * * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} */ -const VCHolderService = { +const HolderService = { name: 'crypto.vc.holder' as const, dependencies: ['jsonld', 'jsonld.context'], async started() { @@ -71,15 +69,15 @@ const VCHolderService = { const { presentation: presentationParam, options: { challenge, domain, proofPurpose = 'assertionMethod' }, - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, keyObject = undefined, keyId = undefined, noAnonRead = false } = ctx.params; + const purpose = new AuthenticationProofPurpose({ term: proofPurpose, challenge, domain }); - const key = await ctx.call('keys.getMultikey', { + const key: any = await ctx.call('keys.getMultikey', { webId, keyObject, keyId, @@ -171,12 +169,12 @@ const VCHolderService = { } } satisfies ServiceSchema; -export default VCHolderService; +export default HolderService; declare global { export namespace Moleculer { export interface AllServices { - [VCHolderService.name]: typeof VCHolderService; + [HolderService.name]: typeof HolderService; } } } diff --git a/src/middleware/packages/crypto/verifiable-credentials/index.ts b/src/middleware/packages/crypto/verifiable-credentials/index.ts index 9bb146b2b..0e69d4b7e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/index.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/index.ts @@ -1,5 +1,5 @@ -import DataIntegrityService from './data-integrity-service.ts'; -import VerifiableCredentialsService from './vc-service.ts'; +import DataIntegrityService from './data-integrity.ts'; +import VerifiableCredentialsService from './vc.ts'; import VCPurpose from './VcPurpose.ts'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/issuer.ts similarity index 83% rename from src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/issuer.ts index 7b18fbd8c..6738a7aee 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/issuer.ts @@ -1,15 +1,11 @@ -import { MIME_TYPES } from '@semapps/mime-types'; - // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as vc from '@digitalbazaar/vc'; - // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; - import { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; @@ -21,21 +17,14 @@ const { * Service for verifying, reading, and revoking Verifiable Credentials. * * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} */ -const VCCredentialService = { +const IssuerService = { name: 'crypto.vc.issuer' as const, - settings: { - podProvider: null - }, - async started() { this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); }; }, - actions: { /** * # Create a Verifiable Credential. @@ -87,7 +76,6 @@ const VCCredentialService = { const { credential: receivedCredential, options: { proofPurpose = 'assertionMethod' }, - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. webId = ctx.meta.webId, noAnonRead = false, purpose = new AssertionProofPurpose({ term: proofPurpose }), @@ -115,7 +103,7 @@ const VCCredentialService = { // Create the VC resource, if the id is not set. const credentialResource = credential.id ? credential - : await this.createCredentialResource(credential, noAnonRead, webId); + : await this.createCredentialResource(ctx, credential, noAnonRead, webId); // Get signature suite const suite = new DataIntegrityProof({ @@ -145,14 +133,14 @@ const VCCredentialService = { }, methods: { /** Creates an ldp resource from the presentation and sets rights. */ - async createCredentialResource(credential, noAnonRead, webId) { - const resourceUri = await this.broker.call('crypto.vc.issuer.credential-container.post', { + async createCredentialResource(ctx, credential, noAnonRead, webId) { + const resourceUri = await ctx.call('crypto.vc.issuer.credential-container.post', { resource: credential, webId }); // Get the presentation resource. - const resource = await this.broker.call('crypto.vc.issuer.credential-container.get', { + const resource = await ctx.call('crypto.vc.issuer.credential-container.get', { resourceUri, jsonContext: credentialsContext, webId: 'system' @@ -161,16 +149,9 @@ const VCCredentialService = { // Set resource rights. if (!noAnonRead) { // Add anonymous read rights to VC resource and control rights to holder. - await this.broker.call('webacl.resource.addRights', { - resourceUri, - additionalRights: { anon: { read: true }, user: { uri: webId, control: true, read: true, write: true } }, - webId: 'system' - }); - } else { - // Add user control rights only. - await this.broker.call('webacl.resource.addRights', { + await ctx.call('webacl.resource.addRights', { resourceUri, - additionalRights: { user: { uri: webId, control: true, read: true, write: true } }, + additionalRights: { anon: { read: true } }, webId: 'system' }); } @@ -180,12 +161,12 @@ const VCCredentialService = { } } satisfies ServiceSchema; -export default VCCredentialService; +export default IssuerService; declare global { export namespace Moleculer { export interface AllServices { - [VCCredentialService.name]: typeof VCCredentialService; + [IssuerService.name]: typeof IssuerService; } } } diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts similarity index 74% rename from src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts rename to src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts index 421ad52e6..f30404eb8 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts @@ -10,29 +10,17 @@ import { credentialsContext, credentialsContextNoGraphProof } from '../constants * provide an unsigned presentation with an id that can be signed as well. * * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} */ -const VCPresentationContainer = { +const PresentationsContainerService = { name: 'crypto.vc.holder.presentation-container' as const, mixins: [ControlledContainerMixin], settings: { - path: null, + path: '/presentations', excludeFromMirror: true, activateTombstones: false, types: ['https://www.w3.org/2018/credentials#VerifiablePresentation'], typeIndex: 'private', - podProvider: null, - permissions: (webId: any, ctx: any) => { - // If not a pod provider, the container is shared, so any user can append. - return { - anyUser: { - // Caution. Here, `ctx.service` is the LdpContainerService. Because this function is called by the WebAclMiddleware. - read: !ctx.service.settings.podProvider, - append: !ctx.service.settings.podProvider - } - }; - }, + permissions: {}, newResourcesPermissions: {} }, /** @@ -43,12 +31,11 @@ const VCPresentationContainer = { actions: { get: { async handler(ctx) { - const resource = await ctx.call('ldp.resource.get', { + const resource: any = await ctx.call('ldp.resource.get', { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); ctx.meta.$responseHeaders = { - // @ts-expect-error TS(2339): Property '$responseHeaders' does not exist on type... Remove this comment to see the full error message ...ctx.meta.$responseHeaders, 'Cache-Control': 'private, max-age=300, immutable' }; @@ -88,7 +75,7 @@ const VCPresentationContainer = { list: { async handler(ctx) { - const container = await ctx.call('ldp.container.get', { + const container: any = await ctx.call('ldp.container.get', { ...ctx.params, jsonContext: credentialsContextNoGraphProof }); @@ -98,12 +85,12 @@ const VCPresentationContainer = { } } satisfies ServiceSchema; -export default VCPresentationContainer; +export default PresentationsContainerService; declare global { export namespace Moleculer { export interface AllServices { - [VCPresentationContainer.name]: typeof VCPresentationContainer; + [PresentationsContainerService.name]: typeof PresentationsContainerService; } } } diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc.ts similarity index 64% rename from src/middleware/packages/crypto/verifiable-credentials/vc-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/vc.ts index cd033cc8e..9261b8947 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc.ts @@ -1,15 +1,14 @@ -// @ts-expect-error TS(2305): Module '"@semapps/ontologies"' has no exported mem... Remove this comment to see the full error message import { did, cred } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; -import VCAuthorizerService from './vc-authorizer-service.ts'; -import VCHolderService from './vc-holder-service.ts'; -import VCIssuerService from './vc-issuer-service.ts'; -import VCVerifierService from './vc-verifier-service.ts'; -import DataIntegrityService from './data-integrity-service.ts'; -import VCApiService from './vc-api-service.ts'; -import VCCredentialContainer from './vc-credential-container.ts'; -import VCPresentationContainer from './vc-presentation-container.ts'; -import ChallengeService from './challenge-service.ts'; +import AuthorizerService from './authorizer.ts'; +import HolderService from './holder.ts'; +import IssuerService from './issuer.ts'; +import VerifierService from './verifier.ts'; +import DataIntegrityService from './data-integrity.ts'; +import ApiService from './api.ts'; +import CredentialsContainerService from './credentials-container.ts'; +import PresentationsContainerService from './presentations-container.ts'; +import ChallengeService from './challenge.ts'; /** * Root service for Verifiable Credential and the VC API. @@ -25,43 +24,34 @@ import ChallengeService from './challenge-service.ts'; * are implemented. * * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} */ const VCService = { name: 'crypto.vc' as const, dependencies: ['ontologies'], settings: { - podProvider: false, enableApi: true }, created() { - const { enableApi, podProvider } = this.settings; + const { enableApi } = this.settings; // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.issuer"; settings: { podP... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCIssuerService] }); + this.broker.createService({ mixins: [IssuerService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.guard"; de... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCAuthorizerService] }); + this.broker.createService({ mixins: [AuthorizerService] }); // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.holder"; dependencies: st... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCHolderService] }); + this.broker.createService({ mixins: [HolderService] }); // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.verifier"; dependencies: ... Remove this comment to see the full error message - this.broker.createService({ mixins: [VCVerifierService] }); + this.broker.createService({ mixins: [VerifierService] }); // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.data-integrity"; dependen... Remove this comment to see the full error message this.broker.createService({ mixins: [DataIntegrityService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.pre... Remove this comment to see the full error message this.broker.createService({ mixins: [ChallengeService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.hol... Remove this comment to see the full error message - this.broker.createService({ - mixins: [VCPresentationContainer], - settings: { path: 'presentations', podProvider } - }); + this.broker.createService({ mixins: [PresentationsContainerService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.iss... Remove this comment to see the full error message - this.broker.createService({ - mixins: [VCCredentialContainer], - settings: { path: 'credentials', podProvider } - }); + this.broker.createService({ mixins: [CredentialsContainerService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.api... Remove this comment to see the full error message - if (enableApi) this.broker.createService({ mixins: [VCApiService], settings: { podProvider } }); + if (enableApi) this.broker.createService({ mixins: [ApiService] }); }, async started() { this.broker.call('ontologies.register', did); diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/verifier.ts similarity index 93% rename from src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts rename to src/middleware/packages/crypto/verifiable-credentials/verifier.ts index 28eeeff4e..a47df7961 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/verifier.ts @@ -18,10 +18,8 @@ const { * as well as verifying Capabilities created with Verifiable Credentials. * * WARNING: Changing things here can have security implications. - * - * @type {import('moleculer').ServiceSchema} */ -const VCPresentationService = { +const VerifierService = { name: 'crypto.vc.verifier' as const, dependencies: ['ldp', 'jsonld'], async started() { @@ -123,9 +121,7 @@ const VCPresentationService = { ctx.params.presentationPurpose || new AuthenticationProofPurpose({ term: term || 'assertionMethod', challenge, domain }); - const suite = new DataIntegrityProof({ - cryptosuite - }); + const suite = new DataIntegrityProof({ cryptosuite }); const verificationResult = await vc.verify({ presentation, @@ -138,7 +134,7 @@ const VCPresentationService = { }); return verificationResult; } catch (e) { - this.logger.error('Error verifying presentation:', e); + this.logger.warn('Error verifying presentation:', e); // @ts-expect-error TS(18046): 'e' is of type 'unknown'. return { verified: false, error: e.message }; } @@ -157,7 +153,6 @@ const VCPresentationService = { type: 'object', default: {}, params: { - // @ts-expect-error TS(2322): Type '{ type: "number"; default: number; }' is not... Remove this comment to see the full error message maxChainLength: { type: 'number', default: 2 }, challenge: { type: 'string', optional: true }, domain: { type: 'string', optional: true } @@ -206,12 +201,12 @@ const VCPresentationService = { } } satisfies ServiceSchema; -export default VCPresentationService; +export default VerifierService; declare global { export namespace Moleculer { export interface AllServices { - [VCPresentationService.name]: typeof VCPresentationService; + [VerifierService.name]: typeof VerifierService; } } } diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index b44ac7093..03cd7c7f0 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -10,7 +10,7 @@ const ControlledContainerMixin = { controlledActions: {}, excludeFromMirror: false, activateTombstones: true, - typeIndex: undefined + typeIndex: 'public' }, dependencies: ['ldp'], async started() { diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index 4462493db..c4da841f7 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -20,7 +20,7 @@ const ControlledResourceMixin = { path, types, isContainer: false, - permissions, + newResourcesPermissions: permissions, controlledActions: { create: `${this.name}.create`, get: `${this.name}.get`, diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index db00a77b5..2cb5790e0 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -10,6 +10,7 @@ "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", + "@semapps/solid": "1.2.0", "@semapps/triplestore": "1.2.0", "@semapps/webacl": "1.2.0", "bytes": "^3.1.2", diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 6bf5b9221..b49ee5060 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -112,7 +112,7 @@ const PostAction = { webId }); } else { - const { controlledActions }: Registration = await ctx.call('ldp.registry.getByUri', { containerUri }); + const registration: Registration = await ctx.call('ldp.registry.getByUri', { containerUri }); // Change relative URIs to full URIs const resourceWithBase = resource['@graph'] @@ -122,9 +122,10 @@ const PostAction = { }) : { ...resource, '@id': resourceUri }; - await ctx.call(controlledActions.create || 'ldp.resource.create', { + await ctx.call(registration?.controlledActions?.create || 'ldp.resource.create', { resource: resourceWithBase, resourceUri, + registration, webId }); } diff --git a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts index 3be2386e5..4d3ddf44b 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts @@ -1,5 +1,6 @@ import { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; +import { Registration } from '../../../types.ts'; /** * Find the registration for a resource type @@ -7,13 +8,18 @@ import { arrayOf } from '../../../utils.ts'; const GetByTypesAction = { visibility: 'public', params: { - types: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] } + types: { type: 'multi', rules: [{ type: 'string' }, { type: 'array' }] }, + isPrivate: { type: 'boolean', optional: true } }, async handler(ctx) { - const { types } = ctx.params; - const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types }); + const { types, isPrivate } = ctx.params; + const expandedTypes: string[] = await ctx.call('jsonld.parser.expandTypes', { types }); - return this.registrations.find(r => expandedTypes.some((t: any) => arrayOf(r.types).includes(t))); + return this.registrations.find( + (r: Registration) => + expandedTypes.some(t => arrayOf(r.types).includes(t)) && + (isPrivate === undefined || r.typeIndex === (isPrivate ? 'private' : 'public')) + ); } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 66b10c8ac..9e7476366 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; +import { TypeRegistration } from '@semapps/solid'; /** * Find the registration for a container or resource URI @@ -16,22 +17,25 @@ const GetByUriAction = { throw new Error('The param containerUri or resourceUri must be provided to ldp.registry.getByUri'); } - let types: string[] = await ctx.call('type-index.getTypes', { uri: containerUri || resourceUri }); + let typeRegistration: TypeRegistration = await ctx.call('type-index.getByUri', { + uri: containerUri || resourceUri, + isContainer: !!containerUri + }); // If this a resource, check if its container is registered - if (types.length === 0 && resourceUri) { + if (!typeRegistration && resourceUri) { [containerUri] = await ctx.call('ldp.resource.getContainers', { resourceUri }); if (containerUri) { - types = await ctx.call('type-index.getTypes', { - uri: containerUri, - isContainer: true - }); + typeRegistration = await ctx.call('type-index.getByUri', { uri: containerUri, isContainer: true }); } } - if (types) { - const registration = await this.actions.getByTypes({ types }, { parentCtx: ctx }); + if (typeRegistration) { + const registration = await this.actions.getByTypes( + { types: typeRegistration.types, isPrivate: typeRegistration.isPrivate }, + { parentCtx: ctx } + ); return { ...this.settings.defaultOptions, ...registration }; } else { diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index 27ddb4592..dd974307a 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -16,7 +16,7 @@ const RegisterAction = { typeIndex: { type: 'string', optional: true } }, async handler(ctx) { - let registration: Registration = { ...this.settings.defaultOptions, ...ctx.params }; + let registration: Registration = ctx.params; registration.types = registration.types && (await ctx.call('jsonld.parser.expandTypes', { types: registration.types })); @@ -29,7 +29,7 @@ const RegisterAction = { ); // Keep in memory - this.registrations.push(registration); + this.registrations.push({ ...this.settings.defaultOptions, ...ctx.params }); ctx.emit('ldp.registry.registered', { registration }, { meta: { webId: null, dataset: null } }); diff --git a/src/middleware/packages/solid/index.ts b/src/middleware/packages/solid/index.ts index e55a03049..5702a528c 100644 --- a/src/middleware/packages/solid/index.ts +++ b/src/middleware/packages/solid/index.ts @@ -6,6 +6,7 @@ import PreferencesFileService from './services/preferences-file.ts'; import StorageService from './services/storage.ts'; import TypeIndexService from './services/type-index/type-index.ts'; +export * from './types.ts'; export { AuthorizerService, EndpointService, diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 4c6a782f3..0352b05d3 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -152,8 +152,6 @@ const SolidStorageSchema = { webId: 'system' }); - ctx.emit('solid-storage.created', { webId }); - return { webId, rootContainerUri }; } }, diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index d69905a70..85462b869 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -1,6 +1,6 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; +import { ServiceSchema, Context } from 'moleculer'; const PrivateTypeIndexService = { name: 'private-type-index' as const, @@ -13,7 +13,7 @@ const PrivateTypeIndexService = { }, events: { 'solid-preferences-file.created': { - async handler(ctx) { + async handler(ctx: Context) { const { resourceUri: preferencesUri } = ctx.params; const typeIndexUri = await this.actions.waitForCreation({}, { parentCtx: ctx }); diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index 9189eed80..1a98e2311 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -1,6 +1,6 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; +import { ServiceSchema, Context } from 'moleculer'; const PublicTypeIndexService = { name: 'public-type-index' as const, @@ -17,7 +17,7 @@ const PublicTypeIndexService = { }, events: { 'webid.created': { - async handler(ctx) { + async handler(ctx: Context) { const { resourceUri: webId } = ctx.params; const typeIndexUri = await this.actions.waitForCreation({}, { parentCtx: ctx }); diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index a770f228d..28adb67e9 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -1,9 +1,10 @@ import rdf from '@rdfjs/data-model'; -import { arrayOf, getDatasetFromUri, getSlugFromUri, isWebId } from '@semapps/ldp'; +import { arrayOf, getSlugFromUri } from '@semapps/ldp'; import { solid, skos, apods } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import PublicTypeIndexService from './public-type-index.ts'; import PrivateTypeIndexService from './private-type-index.ts'; +import { TypeRegistration } from '../../types.ts'; const TypeIndexService = { name: 'type-index' as const, @@ -31,15 +32,20 @@ const TypeIndexService = { let { types, uri, isContainer, isPrivate } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId; + const existingRegistration: TypeRegistration = await this.actions.getByUri( + { uri, isPrivate }, + { parentCtx: ctx } + ); + const expandedTypes: string[] = await ctx.call('jsonld.parser.expandTypes', { types }); - const oldExpandedTypes: string[] = await this.actions.getTypes({ uri, isPrivate }, { parentCtx: ctx }); const typeIndexUri = await ctx.call(`${isPrivate ? 'private' : 'public'}-type-index.getUri`, { webId }); // Use a hash based on the URI (which should be unique !) const typeRegistrationUri = `${typeIndexUri}#${getSlugFromUri(uri)}`; - if (oldExpandedTypes.length > 0) { + if (existingRegistration) { + const oldExpandedTypes = existingRegistration.types; // Types are already expanded const newExpandedTypes = expandedTypes.filter((t: any) => !oldExpandedTypes.includes(t)); if (newExpandedTypes.length > 0) { @@ -100,7 +106,7 @@ const TypeIndexService = { } }, - getTypes: { + getByUri: { visibility: 'public', params: { uri: { type: 'string' }, @@ -120,11 +126,13 @@ const TypeIndexService = { const results = await ctx.call('triplestore.query', { query: ` PREFIX solid: - SELECT ?type + SELECT ?type ?indexType ?instancePredicate WHERE { VALUES ?typeIndexUri { ${typeIndexUris.map(typeIndexUri => `<${typeIndexUri}>`).join(' ')} } VALUES ?instancePredicate { solid:instanceContainer solid:instance } + VALUES ?indexType { solid:ListedDocument solid:UnlistedDocument } GRAPH ?typeIndexUri { + ?typeIndexUri a ?indexType . ?typeRegistrationUri a solid:TypeRegistration . ?typeRegistrationUri solid:forClass ?type . ?typeRegistrationUri ?instancePredicate <${uri}> . @@ -134,7 +142,15 @@ const TypeIndexService = { webId: 'system' }); - return arrayOf(results).map((r: any) => r.type.value); + if (arrayOf(results).length > 0) { + return { + types: arrayOf(results).map((r: any) => r.type.value), + uri, + isPrivate: arrayOf(results)[0].indexType.value === 'http://www.w3.org/ns/solid/terms#UnlistedDocument', + isContainer: + arrayOf(results)[0].instancePredicate.value === 'http://www.w3.org/ns/solid/terms#instanceContainer' + } as TypeRegistration; + } } }, diff --git a/src/middleware/packages/solid/types.ts b/src/middleware/packages/solid/types.ts new file mode 100644 index 000000000..c2e61ce1b --- /dev/null +++ b/src/middleware/packages/solid/types.ts @@ -0,0 +1,6 @@ +export interface TypeRegistration { + types: string[]; + uri: string; + isPrivate: boolean; + isContainer: boolean; +} diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 898dc8de5..08657ed39 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -72,14 +72,13 @@ const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: */ switch (action.name) { case 'ldp.resource.create': { - // On start, resource permissions are passed as parameters because the registry is not up yet let permissions; if (ctx.params.registration) { - // Use the permissions param (and not newResourcesPermission) because this is for controlled resources - permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; + permissions = + ctx.params.registration?.newResourcesPermissions || defaultContainerOptions.newResourcesPermissions; } else { const registration = await ctx.call('ldp.registry.getByUri', { resourceUri: ctx.params.resourceUri }); - permissions = registration?.newResourcesPermissions || defaultContainerOptions.permissions; + permissions = registration?.newResourcesPermissions || defaultContainerOptions.newResourcesPermissions; } // We must add the permissions before inserting the resource @@ -88,7 +87,7 @@ const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: { webId: 'system', resourceUri: ctx.params.resourceUri, - newRights: typeof permissions === 'function' ? permissions(webId, ctx) : permissions + newRights: typeof permissions === 'function' ? permissions(webId) : permissions }, { meta: { @@ -125,17 +124,6 @@ const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: } ); break; - // case 'ldp.container.create': - // await ctx.call( - // 'webacl.resource.deleteAllRights', - // { resourceUri: ctx.params.containerUri }, - // { - // meta: { - // skipObjectsWatcher: true - // } - // } - // ); - // break; default: break; } @@ -149,7 +137,6 @@ const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: case 'ldp.container.create': { const containerUri = actionReturnValue; - // On start, container permissions are passed as parameters because the registry is not up yet let permissions; if (ctx.params.registration) { permissions = ctx.params.registration?.permissions || defaultContainerOptions.permissions; @@ -162,7 +149,7 @@ const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: 'webacl.resource.addRights', { resourceUri: containerUri, - newRights: typeof permissions === 'function' ? permissions(webId, ctx) : permissions, + newRights: typeof permissions === 'function' ? permissions(webId) : permissions, webId: 'system' }, { diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index c971ada19..8c4ae4a0a 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -17,7 +17,7 @@ const RefreshContainersRightsAction = { const containerUri = urlJoin(baseUrl, path!); const containerRights: WacPermissionObject = - typeof permissions === 'function' ? permissions(webId, ctx) : permissions; + typeof permissions === 'function' ? permissions(webId) : permissions; this.logger.info(`Refreshing rights for container ${containerUri}...`); diff --git a/src/middleware/packages/webacl/types.ts b/src/middleware/packages/webacl/types.ts index ee7806977..18f9165b7 100644 --- a/src/middleware/packages/webacl/types.ts +++ b/src/middleware/packages/webacl/types.ts @@ -1,5 +1,3 @@ -import { Context } from 'moleculer'; - export interface WacPermission { read: boolean; write: boolean; @@ -20,4 +18,4 @@ export interface WacPermissionObject { }; } -export type WacPermissionFunction = (webId: string, ctx?: Context) => WacPermissionObject; +export type WacPermissionFunction = (webId: string) => WacPermissionObject; diff --git a/src/middleware/tests/crypto/keys.test.ts b/src/middleware/tests/crypto/keys.test.ts index a22dc01e9..579cbf42b 100644 --- a/src/middleware/tests/crypto/keys.test.ts +++ b/src/middleware/tests/crypto/keys.test.ts @@ -20,8 +20,6 @@ const setUp = async () => { ); alice = await createAccount(broker, 'alice'); - - await alice.call('webid.awaitCreateComplete'); }; afterAll(async () => { diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index 174c2b91a..20b9255b2 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -1,142 +1,99 @@ -import { MIME_TYPES } from '@semapps/mime-types'; -import { VerifiableCredentialsService } from '@semapps/crypto'; +import { credentialsContext, VerifiableCredentialsService } from '@semapps/crypto'; import { ServiceBroker } from 'moleculer'; import path from 'node:path'; import initialize from './initialize.ts'; +import { createAccount } from '../utils.ts'; jest.setTimeout(45_000); const getChallengeFrom = async (actor: any) => { - const { challenge } = await actor.fetch(path.join(vcApiEndpoint, 'challenges'), { method: 'POST' }); - return challenge; + const { json } = await actor.fetch(path.join(actor.vcApiEndpoint, 'challenges'), { method: 'POST' }); + return json.challenge; }; let broker: ServiceBroker; -let baseUrl; -let vcApiEndpoint: any; let alice: any; let bob: any; let craig: any; -const setUpUser = async (broker: ServiceBroker, username: any) => { - const user = await broker.call('auth.signup', { - username, - email: `${username}@test.example`, - password: 'test', - name: username - }); - user.webIdDoc = await broker.call('ldp.resource.get', { - resourceUri: user.webId, - webId: 'system' - }); +beforeAll(async () => { + broker = await initialize(3000); - user.fetch = async (uri: any, init: any) => { - return await fetch(uri, { - ...init, - headers: { - 'content-type': MIME_TYPES.JSON, - ...init?.headers, - Authorization: `Bearer ${user.token}` - } - }) - .then(response => { - return response.json(); - }) - .catch(() => null); - }; - - return user; -}; + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc"; d... Remove this comment to see the full error message + broker.createService({ mixins: [VerifiableCredentialsService] }); -const setUp = async () => { - broker = await initialize(3000); - vcApiEndpoint = path.join(baseUrl, 'vc/v0.3/'); - alice = await setUpUser(broker, 'alice'); - bob = await setUpUser(broker, 'bob'); - craig = await setUpUser(broker, 'craig'); -}; + await broker.start(); + + broker.waitForServices( + ['core', 'auth', 'webid', 'triplestore', 'keys', 'private-keys-container', 'public-keys-container', 'crypto.vc'], + 5_000 + ); + + alice = await createAccount(broker, 'alice'); + bob = await createAccount(broker, 'bob'); + craig = await createAccount(broker, 'craig'); + + alice.vcApiEndpoint = path.join(alice.baseUrl, 'vc/v0.3/'); + bob.vcApiEndpoint = path.join(bob.baseUrl, 'vc/v0.3/'); + craig.vcApiEndpoint = path.join(craig.baseUrl, 'vc/v0.3/'); + + await alice.call('webid.awaitCreateComplete'); + await alice.call('crypto.vc.issuer.credential-container.waitForContainerCreation'); +}); afterAll(async () => { if (broker) await broker.stop(); }); -describe('verifiable credentials', () => { - beforeAll(async () => { - // @ts-expect-error TS(2554): Expected 1 arguments, but got 0. - await setUp(); - - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc"; d... Remove this comment to see the full error message - broker.createService({ - mixins: [VerifiableCredentialsService], - settings: { - podProvider: false - } - }); - - broker.waitForServices( - [ - 'core', - 'auth', - 'webid', - 'triplestore', - 'keys', - 'private-keys-container', - 'public-keys-container', - 'keys.migration', - 'crypto.vc' - ], - 5_000 - ); - - await broker.call('crypto.vc.issuer.credential-container.waitForContainerCreation'); - }); - - describe('object integrity', () => { - test('object is signed and verifiable', async () => { +describe('Verifiable credentials', () => { + describe('Data integrity service', () => { + test('Object is signed and verifiable', async () => { const object = { '@context': { name: 'urn:some:name' }, name: 'Signed object' }; - const signedObject = await alice.fetch(path.join(vcApiEndpoint, 'data-integrity/sign'), { + + const { json: signedObject } = await alice.fetch(path.join(alice.vcApiEndpoint, 'data-integrity/sign'), { method: 'POST', - body: JSON.stringify({ object }) + body: { object } }); - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'data-integrity/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'data-integrity/verify'), { method: 'POST', - body: JSON.stringify({ object: signedObject }) + body: { object: signedObject } }); expect(validationResult.verified).toBeTruthy(); }); - test('modified object verification fails', async () => { + test('Modified object verification fails', async () => { const object = { '@context': { name: 'urn:some:name' }, name: 'Signed object' }; - const signedObject = await alice.fetch(path.join(vcApiEndpoint, 'data-integrity/sign'), { + + const { json: signedObject } = await alice.fetch(path.join(alice.vcApiEndpoint, 'data-integrity/sign'), { method: 'POST', - body: JSON.stringify({ object }) + body: { object } }); signedObject.name = 'Modified object'; - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'data-integrity/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'data-integrity/verify'), { method: 'POST', - body: JSON.stringify({ object: signedObject }) + body: { object: signedObject } }); expect(validationResult.verified).toBe(false); }); }); - describe('credentials', () => { - test('credential is signed and verifiable', async () => { - const verifiableCredential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + describe('Credentials', () => { + test('Credential is signed and verifiable', async () => { + const { json: verifiableCredential } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Test Suite Credential', description: 'This is a test suite credential.', @@ -144,21 +101,21 @@ describe('verifiable credentials', () => { description: 'This is a credentialSubject' } } - }) + } }); - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'credentials/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/verify'), { method: 'POST', - body: JSON.stringify({ verifiableCredential }) + body: { verifiableCredential } }); expect(validationResult.verified).toBe(true); }); - test('verifying modified credential fails', async () => { - const verifiableCredential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Verifying modified credential fails', async () => { + const { json: verifiableCredential } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Test Suite Credential', description: 'This is a test suite credential.', @@ -166,25 +123,25 @@ describe('verifiable credentials', () => { description: 'This is a credentialSubject' } } - }) + } }); expect(verifiableCredential.type).not.toBe('VALIDATION_ERROR'); delete verifiableCredential.credentialSubject.description; - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'credentials/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/verify'), { method: 'POST', - body: JSON.stringify({ verifiableCredential }) + body: { verifiableCredential } }); - expect(validationResult.type).not.toBe('VALIDATION_ERROR'); + expect(validationResult.type).not.toBe('VALIDATION_ERROR'); expect(validationResult.verified).toBe(false); }); - test('presentation is signed and verifiable', async () => { - const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Presentation is signed and verifiable', async () => { + const { json: credential } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Test Suite Credential', description: 'This is a test suite credential.', @@ -193,35 +150,35 @@ describe('verifiable credentials', () => { description: 'This is a credentialSubject' } } - }) + } }); - const verifiablePresentation = await bob.fetch(path.join(vcApiEndpoint, 'presentations'), { + const { json: verifiablePresentation } = await bob.fetch(path.join(bob.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [credential] }, options: { challenge: await getChallengeFrom(alice) } - }) + } }); expect(verifiablePresentation.code).toBeUndefined(); - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'presentations/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'presentations/verify'), { method: 'POST', - body: JSON.stringify({ verifiablePresentation }) + body: { verifiablePresentation } }); expect(validationResult.verified).toBe(true); }); - test('verifying unsigned presentation fails', async () => { - const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Verifying unsigned presentation fails', async () => { + const { json: credential } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Test Suite Credential', description: 'This is a test suite credential.', @@ -230,36 +187,36 @@ describe('verifiable credentials', () => { description: 'This is a credentialSubject' } } - }) + } }); expect(credential.type).not.toBe('VALIDATION_ERROR'); - const verifiablePresentation = await bob.fetch(path.join(vcApiEndpoint, 'presentations'), { + const { json: verifiablePresentation } = await bob.fetch(path.join(bob.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [credential] }, options: { challenge: await getChallengeFrom(alice) } - }) + } }); expect(verifiablePresentation.type).not.toBe('VALIDATION_ERROR'); delete verifiablePresentation.proof; - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'presentations/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'presentations/verify'), { method: 'POST', - body: JSON.stringify({ verifiablePresentation }) + body: { verifiablePresentation } }); expect(validationResult.verified).toBe(false); }); - test('verifying modified presentation fails', async () => { - const credential = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Verifying modified presentation fails', async () => { + const { json: credential } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Test Suite Credential', description: 'This is a test suite credential.', @@ -268,39 +225,39 @@ describe('verifiable credentials', () => { description: 'This is a credentialSubject' } } - }) + } }); expect(credential.type).not.toBe('VALIDATION_ERROR'); - const verifiablePresentation = await bob.fetch(path.join(vcApiEndpoint, 'presentations'), { + const { json: verifiablePresentation } = await bob.fetch(path.join(bob.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [credential] }, options: { challenge: await getChallengeFrom(alice) } - }) + } }); expect(verifiablePresentation.type).not.toBe('VALIDATION_ERROR'); verifiablePresentation.verifiableCredential[0].credentialSubject.description = 'Modified!'; - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'presentations/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'presentations/verify'), { method: 'POST', - body: JSON.stringify({ verifiablePresentation }) + body: { verifiablePresentation } }); expect(validationResult.verified).toBe(false); }); }); - describe('capabilities', () => { - test('first and second capability are created and presentation is verifiable', async () => { - const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + describe('Capabilities', () => { + test('First and second capability are created and presentation is verifiable', async () => { + const { json: firstCapability } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'First capability', credentialSubject: { @@ -308,12 +265,12 @@ describe('verifiable credentials', () => { description: 'A transferable capability.' } } - }) + } }); - const secondCapability = await bob.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + const { json: secondCapability } = await bob.fetch(path.join(bob.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Second capability', credentialSubject: { @@ -321,12 +278,12 @@ describe('verifiable credentials', () => { description: 'A transferable capability.' } } - }) + } }); - const presentation = await craig.fetch(path.join(vcApiEndpoint, 'presentations'), { + const { json: presentation } = await craig.fetch(path.join(craig.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [firstCapability, secondCapability], description: 'Hey, Alice! Bob gave me this capability.' @@ -334,22 +291,20 @@ describe('verifiable credentials', () => { options: { challenge: await getChallengeFrom(alice) } - }) + } }); - const validationResult = await broker.call( - 'crypto.vc.verifier.verifyCapabilityPresentation', - { verifiablePresentation: presentation }, - { meta: { webId: alice.webId } } - ); + const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + verifiablePresentation: presentation + }); expect(validationResult.verified).toBeTruthy(); }); - test('capability is open / has no credentialSubject and transferable', async () => { - const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Capability is open / has no credentialSubject and transferable', async () => { + const { json: firstCapability } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'First capability', credentialSubject: { @@ -357,12 +312,12 @@ describe('verifiable credentials', () => { description: 'An open capability.' } } - }) + } }); - const verifiablePresentation = await craig.fetch(path.join(vcApiEndpoint, 'presentations'), { + const { json: verifiablePresentation } = await craig.fetch(path.join(craig.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [firstCapability], description: 'Hey, you gave me that invite link.' @@ -370,21 +325,21 @@ describe('verifiable credentials', () => { options: { challenge: await getChallengeFrom(alice) } - }) + } }); - const validationResult = await alice.fetch(path.join(vcApiEndpoint, 'presentations/verify'), { + const { json: validationResult } = await alice.fetch(path.join(alice.vcApiEndpoint, 'presentations/verify'), { method: 'POST', - body: JSON.stringify({ verifiablePresentation }) + body: { verifiablePresentation } }); expect(validationResult.verified).toBeTruthy(); }); - test('second capability is deleted and presentation invalid.', async () => { - const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Second capability is deleted and presentation invalid.', async () => { + const { json: firstCapability } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'First capability', credentialSubject: { @@ -392,12 +347,12 @@ describe('verifiable credentials', () => { description: 'A transferable capability.' } } - }) + } }); - const secondCapability = await bob.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + const { json: secondCapability } = await bob.fetch(path.join(bob.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Second capability', credentialSubject: { @@ -405,16 +360,16 @@ describe('verifiable credentials', () => { description: 'A transferable capability.' } } - }) + } }); await bob.fetch(secondCapability.id, { method: 'DELETE' }); - const verifiablePresentation = await craig.fetch(path.join(vcApiEndpoint, 'presentations'), { + const { json: verifiablePresentation } = await craig.fetch(path.join(craig.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [firstCapability, secondCapability], description: 'Hey, Alice! Bob gave me this capability.' @@ -422,22 +377,20 @@ describe('verifiable credentials', () => { options: { challenge: await getChallengeFrom(alice) } - }) + } }); - const validationResult = await broker.call( - 'crypto.vc.verifier.verifyCapabilityPresentation', - { verifiablePresentation }, - { meta: { webId: alice.webId } } - ); + const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + verifiablePresentation + }); expect(validationResult.verified).toBe(false); }); - test('capability not invoked by holder invalid', async () => { - const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Capability not invoked by holder invalid', async () => { + const { json: firstCapability } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'First capability', credentialSubject: { @@ -445,12 +398,12 @@ describe('verifiable credentials', () => { description: 'A transferable capability.' } } - }) + } }); - const verifiablePresentation = await craig.fetch(path.join(vcApiEndpoint, 'presentations'), { + const { json: verifiablePresentation } = await craig.fetch(path.join(craig.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [firstCapability], description: 'Hey, Alice! Bob gave me this capability.' @@ -458,14 +411,12 @@ describe('verifiable credentials', () => { options: { challenge: await getChallengeFrom(alice) } - }) + } }); - const validationResult = await broker.call( - 'crypto.vc.verifier.verifyCapabilityPresentation', - { verifiablePresentation }, - { meta: { webId: alice.webId } } - ); + const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + verifiablePresentation + }); expect(validationResult.verified).toBe(false); expect(validationResult.error?.errors?.[0].message).toMatch( @@ -473,14 +424,10 @@ describe('verifiable credentials', () => { ); }); - test('non-linked chain is invalid', async () => { - const allCreds = await alice.fetch(path.join(vcApiEndpoint, 'credentials'), { - method: 'GET' - }); - - const firstCapability = await alice.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + test('Non-linked chain is invalid', async () => { + const { json: firstCapability } = await alice.fetch(path.join(alice.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'First capability', credentialSubject: { @@ -488,12 +435,12 @@ describe('verifiable credentials', () => { description: 'A transferable capability.' } } - }) + } }); - const secondCapability = await craig.fetch(path.join(vcApiEndpoint, 'credentials/issue'), { + const { json: secondCapability } = await craig.fetch(path.join(craig.vcApiEndpoint, 'credentials/issue'), { method: 'POST', - body: JSON.stringify({ + body: { credential: { name: 'Second capability', credentialSubject: { @@ -502,12 +449,15 @@ describe('verifiable credentials', () => { description: 'A transferable capability.' } } - }) + } }); - const verifiablePresentation = await craig.fetch(path.join(vcApiEndpoint, 'presentations'), { + // This test fails because of https://github.com/assemblee-virtuelle/semapps/issues/1426 + expect(secondCapability).not.toMatchObject({ name: 'Error' }); + + const { json: verifiablePresentation } = await craig.fetch(path.join(craig.vcApiEndpoint, 'presentations'), { method: 'POST', - body: JSON.stringify({ + body: { presentation: { verifiableCredential: [firstCapability, secondCapability], description: 'Hey, Alice! Bob gave me this capability.' @@ -515,16 +465,13 @@ describe('verifiable credentials', () => { options: { challenge: await getChallengeFrom(alice) } - }) + } }); - const validationResult = await broker.call( - 'crypto.vc.verifier.verifyCapabilityPresentation', - { verifiablePresentation }, - { meta: { webId: alice.webId } } - ); + const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + verifiablePresentation + }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(validationResult.verified).toBeFalsy(); }); }); diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 094d17ca2..82426c571 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -35,7 +35,7 @@ export const dropDataset = (dataset: any) => } }); -export const fetchServer = (url: string, options: FetchOptions = {}) => { +export const fetchServer = async (url: string, options: FetchOptions = {}) => { if (!url) throw new Error('No url provided to fetchServer'); if (!options.headers) options.headers = new fetch.Headers(); @@ -89,16 +89,31 @@ export const fetchServer = (url: string, options: FetchOptions = {}) => { export const createAccount = async (broker: ServiceBroker, username: string) => { const { webId }: Account = await broker.call('auth.account.create', { username }); - const call = (actionName: string, params: ActionParamSchema = {}, options: CallingOptions = {}) => + const callAsUser = (actionName: string, params: ActionParamSchema = {}, options: CallingOptions = {}) => broker.call(actionName, params, { ...options, meta: { ...options.meta, webId, dataset: username } }); const baseUrl = await broker.call('solid-storage.getBaseUrl', { username }); + const token = await broker.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); + + const fetchAsUser = async (url: string, options: FetchOptions = {}) => + fetchServer(url, { + ...options, + headers: new fetch.Headers({ ...options?.headers, Authorization: `Bearer ${token}` }) + }); + + // Ensure keys are created and attached to the WebID (this is a side-effect of the auth.account.created event) + // If we don't do that, tests may be stopped before the keys are created and this may generate errors + // Note: See if we can avoid this because it increases some of the tests time by 30-50% + await callAsUser('webid.awaitCreateComplete'); + return { webId, + token, baseUrl, username, - call + call: callAsUser, + fetch: fetchAsUser }; }; From 1615715d015b2473c348feea8fcf15571756479a Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 12 Nov 2025 11:05:33 +0100 Subject: [PATCH 109/165] Rename VC services --- .../activitypub/subservices/side-effects.ts | 4 +-- src/middleware/packages/auth/mixins/auth.ts | 6 ++--- src/middleware/packages/crypto/index.ts | 3 ++- .../crypto/signature/http-signatures.ts | 11 +------- .../packages/crypto/signature/proxy.ts | 22 +++++++--------- .../VcCapabilityPresentationProofPurpose.ts | 2 +- .../VcPurpose.ts | 0 .../crypto/verifiable-credentials/api.ts | 18 ++++++------- .../verifiable-credentials/authorizer.ts | 2 +- .../verifiable-credentials/challenge.ts | 4 +-- .../credentials-container.ts | 2 +- .../verifiable-credentials/data-integrity.ts | 2 +- .../crypto/verifiable-credentials/holder.ts | 8 +++--- .../crypto/verifiable-credentials/index.ts | 6 ----- .../crypto/verifiable-credentials/issuer.ts | 8 +++--- .../presentations-container.ts | 2 +- .../crypto/verifiable-credentials/vc.ts | 20 +++++++------- .../crypto/verifiable-credentials/verifier.ts | 8 +++--- .../crypto/verifiable-credentials.test.ts | 14 +++++----- .../crypto/verifiable-credentials.md | 26 +++++++++---------- 20 files changed, 75 insertions(+), 93 deletions(-) rename src/middleware/packages/crypto/{verifiable-credentials => utils}/VcCapabilityPresentationProofPurpose.ts (98%) rename src/middleware/packages/crypto/{verifiable-credentials => utils}/VcPurpose.ts (100%) delete mode 100644 src/middleware/packages/crypto/verifiable-credentials/index.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 88fffae34..19c590a7a 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -104,7 +104,7 @@ const ActivitypubSideEffectsSchema = { // Dereference capability, if necessary. if (typeof retActivity.capability === 'string') { - retActivity.capability = await this.broker.call('crypto.vc.holder.presentation-container.get', { + retActivity.capability = await this.broker.call('vc.presentations-container.get', { resourceUri: retActivity.capability }); } @@ -121,7 +121,7 @@ const ActivitypubSideEffectsSchema = { } // Verify cryptographic and capability-related properties. - const { verified, error } = await this.broker.call('crypto.vc.verifier.verifyCapabilityPresentation', { + const { verified, error } = await this.broker.call('vc.verifier.verifyCapabilityPresentation', { verifiablePresentation: retActivity.capability }); diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index 9316c1a3a..088567ba5 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -201,9 +201,7 @@ const AuthMixin = { // We do not use the VC-JOSE spec to sign and envelop presentations. Instead we go // with embedded signatures. This way, the signature persists within the resource. - const hasCapabilityService = ctx.broker.registry.actions.isAvailable( - 'crypto.vc.verifier.verifyCapabilityPresentation' - ); + const hasCapabilityService = ctx.broker.registry.actions.isAvailable('vc.verifier.verifyCapabilityPresentation'); if (!hasCapabilityService) return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); // Decode JTW to JSON. @@ -215,7 +213,7 @@ const AuthMixin = { verified: isCapSignatureVerified, presentation: verifiedPresentation, presentationResult - } = await ctx.call('crypto.vc.verifier.verifyCapabilityPresentation', { + } = await ctx.call('vc.verifier.verifyCapabilityPresentation', { verifiablePresentation: decodedToken, options: { maxChainLength: ctx.params.route.opts.maxChainLength diff --git a/src/middleware/packages/crypto/index.ts b/src/middleware/packages/crypto/index.ts index d25eef177..2d267577e 100644 --- a/src/middleware/packages/crypto/index.ts +++ b/src/middleware/packages/crypto/index.ts @@ -1,5 +1,6 @@ export { default as KeysService } from './keys/keys.ts'; export { default as SignatureService } from './signature/http-signatures.ts'; export { default as ProxyService } from './signature/proxy.ts'; +export { default as DataIntegrityService } from './verifiable-credentials/data-integrity.ts'; +export { default as VerifiableCredentialsService, default as VCService } from './verifiable-credentials/vc.ts'; export * from './constants.ts'; -export * from './verifiable-credentials/index.ts'; diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 799ef2068..c39482174 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -7,7 +7,6 @@ import { createAuthzHeader, createSignatureString } from 'http-signature-header' import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; -import { arrayOf } from '../utils/utils.ts'; const HttpSignatureService = { // TODO: Rename to signature.http-signatures in a major release. @@ -16,7 +15,7 @@ const HttpSignatureService = { generateSignatureHeaders: { async handler(ctx) { const { url, method, body, actorUri } = ctx.params; - // TODO: Use new service. + const [{ privateKeyPem }] = await ctx.call('keys.getOrCreateWebIdKeys', { keyType: KEY_TYPES.RSA, webId: actorUri @@ -63,13 +62,6 @@ const HttpSignatureService = { * Given url, path, method, headers, validates a given http signature. * If the signature is valid, it returns the actorUri and the publicKeyPem used to verify the signature. * Else, it returns `{isValid: false}`. - * @param {object} ctx Context - * @param {object} ctx.params Params - * @param {string} ctx.params.url The URL of the request - * @param {string} ctx.params.path The path of the request - * @param {string} ctx.params.method The method of the request - * @param {object} ctx.params.headers The headers of the request - * @returns {Promise<{isValid: boolean, actorUri: string, publicKeyPem: string}>} */ async handler(ctx) { const { url, path, method, headers } = ctx.params; @@ -149,7 +141,6 @@ const HttpSignatureService = { ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_INVALID_TOKEN)); } - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = 'anon'; return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); } diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 0bc1766a0..b3e0eff4e 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -84,7 +84,7 @@ const ProxyService = { async handler(ctx) { let { url, method, headers, body, actorUri } = ctx.params; - const signatureHeaders = await ctx.call('signature.generateSignatureHeaders', { + const signatureHeaders: any = await ctx.call('signature.generateSignatureHeaders', { url, method, body, @@ -141,18 +141,16 @@ const ProxyService = { } }, events: { - 'auth.registered': { - async handler(ctx) { + 'auth.account.created': { + async handler(ctx: any) { const { webId } = ctx.params; - if (this.settings.podProvider) { - const services = await ctx.call('$node.services'); - if (services.some((s: any) => s.name === 'activitypub.actor')) { - await ctx.call('activitypub.actor.addEndpoint', { - actorUri: webId, - predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', - endpoint: urlJoin(webId, 'proxy') - }); - } + const services = await ctx.call('$node.services'); + if (services.some((s: any) => s.name === 'activitypub.actor')) { + await ctx.call('activitypub.actor.addEndpoint', { + actorUri: webId, + predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', + endpoint: urlJoin(webId, 'proxy') + }); } } } diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts b/src/middleware/packages/crypto/utils/VcCapabilityPresentationProofPurpose.ts similarity index 98% rename from src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts rename to src/middleware/packages/crypto/utils/VcCapabilityPresentationProofPurpose.ts index 142d6b794..71a5203e0 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/VcCapabilityPresentationProofPurpose.ts +++ b/src/middleware/packages/crypto/utils/VcCapabilityPresentationProofPurpose.ts @@ -1,4 +1,4 @@ -import { arrayOf, deepStrictEqual } from '../utils/utils.ts'; +import { arrayOf } from './utils.ts'; const { purposes: { AuthenticationProofPurpose } diff --git a/src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts b/src/middleware/packages/crypto/utils/VcPurpose.ts similarity index 100% rename from src/middleware/packages/crypto/verifiable-credentials/VcPurpose.ts rename to src/middleware/packages/crypto/utils/VcPurpose.ts diff --git a/src/middleware/packages/crypto/verifiable-credentials/api.ts b/src/middleware/packages/crypto/verifiable-credentials/api.ts index f863093a3..e3dcebca7 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/api.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/api.ts @@ -22,7 +22,7 @@ const middlewares = [saveDatasetMeta, parseHeader, negotiateAccept, negotiateCon * WARNING: Changing things here can have security implications */ const ApiService = { - name: 'crypto.vc.api' as const, + name: 'vc.api' as const, dependencies: ['api', 'ldp'], async started() { const basePath: string = await this.broker.call('ldp.getBasePath'); @@ -35,8 +35,8 @@ const ApiService = { path: path.join(apiPath, 'credentials'), authentication: true, aliases: { - 'POST /verify': [...middlewares, 'crypto.vc.verifier.verifyVC'], - 'POST /issue': [...middlewares, 'crypto.vc.issuer.createVC'] + 'POST /verify': [...middlewares, 'vc.verifier.verifyVC'], + 'POST /issue': [...middlewares, 'vc.issuer.createVC'] } } }); @@ -48,9 +48,9 @@ const ApiService = { path: path.join(apiPath, 'presentations'), authentication: true, aliases: { - 'POST /': [...middlewares, 'crypto.vc.holder.createPresentation'], - 'POST /verify': [...middlewares, 'crypto.vc.verifier.verifyPresentation'], - 'POST /verify-capability': [...middlewares, 'crypto.vc.verifier.verifyCapabilityPresentation'] + 'POST /': [...middlewares, 'vc.holder.createPresentation'], + 'POST /verify': [...middlewares, 'vc.verifier.verifyPresentation'], + 'POST /verify-capability': [...middlewares, 'vc.verifier.verifyCapabilityPresentation'] } } }); @@ -63,7 +63,7 @@ const ApiService = { authorization: false, authentication: false, aliases: { - 'POST /': [...middlewares, 'crypto.vc.presentation.challenge.create'] + 'POST /': [...middlewares, 'vc.challenge.create'] } } }); @@ -75,8 +75,8 @@ const ApiService = { path: path.join(apiPath, 'data-integrity'), authentication: true, aliases: { - 'POST /verify': [...middlewares, 'crypto.vc.data-integrity.verifyObject'], - 'POST /sign': [...middlewares, 'crypto.vc.data-integrity.signObject'] + 'POST /verify': [...middlewares, 'vc.data-integrity.verifyObject'], + 'POST /sign': [...middlewares, 'vc.data-integrity.signObject'] } } }); diff --git a/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts b/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts index 51a9d5ad0..170cc6e7b 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts @@ -29,7 +29,7 @@ const hasValidCapability = async (ctx: any, resourceUri: any, mode: any) => { }; const AuthorizerService = { - name: 'vc.guard' as const, + name: 'vc.authorizer' as const, dependencies: ['permissions'], async started() { await this.broker.call('permissions.addAuthorizer', { actionName: `${this.name}.hasPermission` }); diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge.ts index f783fe5cb..246143619 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge.ts @@ -8,7 +8,7 @@ import { ServiceSchema } from 'moleculer'; * Challenges are kept in memory and are valid for up to 5 minutes or until they are used. */ const ChallengeService = { - name: 'crypto.vc.presentation.challenge' as const, + name: 'vc.challenge' as const, settings: { /** Milliseconds challenges should be valid for. @default 5 minutes */ challengeExpirationMs: 5 * 60 * 1000 @@ -85,7 +85,7 @@ const ChallengeService = { this.broker.call('timer.set', { key: 'challengeCleanup', time: Date.now() + this.settings.challengeExpirationMs, - actionName: 'crypto.vc.presentation.challenge.cleanElapsed', + actionName: 'vc.challenge.cleanElapsed', repeat: this.settings.challengeExpirationMs }); } else { diff --git a/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts b/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts index ffcc90fce..626f8d6f4 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts @@ -9,7 +9,7 @@ import { credentialsContext, credentialsContextNoGraphProof } from '../constants * WARNING: Changing things here can have security implications. */ const VCCredentialsContainer = { - name: 'crypto.vc.issuer.credential-container' as const, + name: 'vc.credentials-container' as const, mixins: [ControlledContainerMixin], dependencies: ['ontologies'], settings: { diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts index e00ae61e4..4fb96d2bd 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts @@ -24,7 +24,7 @@ const { * WARNING: Changing things here can have security implications. */ const DataIntegrityService = { - name: 'crypto.vc.data-integrity' as const, + name: 'vc.data-integrity' as const, dependencies: ['ldp', 'api'], async started() { diff --git a/src/middleware/packages/crypto/verifiable-credentials/holder.ts b/src/middleware/packages/crypto/verifiable-credentials/holder.ts index f192c4886..0371fb54c 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/holder.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/holder.ts @@ -26,7 +26,7 @@ const { * WARNING: Changing things here can have security implications. */ const HolderService = { - name: 'crypto.vc.holder' as const, + name: 'vc.holder' as const, dependencies: ['jsonld', 'jsonld.context'], async started() { this.documentLoader = async (url: any, options: any) => { @@ -121,7 +121,7 @@ const HolderService = { if (!presentationParam.id && ctx.params.options.persist) await ctx.call( - 'crypto.vc.holder.presentation-container.put', + 'vc.presentations-container.put', { resource: signedPresentation, webId: 'system' }, { meta: { skipEmitEvent: true } } ); @@ -135,13 +135,13 @@ const HolderService = { /** Creates an ldp resource from the presentation and sets rights. */ async createPresentationResource(presentation, noAnonRead, webId) { // Post presentation to container (will add metadata). - const resourceUri = await this.broker.call('crypto.vc.holder.presentation-container.post', { + const resourceUri = await this.broker.call('vc.presentations-container.post', { resource: presentation, webId }); // Get the presentation resource. - const resource = await this.broker.call('crypto.vc.holder.presentation-container.get', { + const resource = await this.broker.call('vc.presentations-container.get', { resourceUri, webId: 'system' }); diff --git a/src/middleware/packages/crypto/verifiable-credentials/index.ts b/src/middleware/packages/crypto/verifiable-credentials/index.ts deleted file mode 100644 index 0e69d4b7e..000000000 --- a/src/middleware/packages/crypto/verifiable-credentials/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import DataIntegrityService from './data-integrity.ts'; -import VerifiableCredentialsService from './vc.ts'; -import VCPurpose from './VcPurpose.ts'; -import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; - -export { DataIntegrityService, VerifiableCredentialsService, VCPurpose, VCCapabilityPresentationProofPurpose }; diff --git a/src/middleware/packages/crypto/verifiable-credentials/issuer.ts b/src/middleware/packages/crypto/verifiable-credentials/issuer.ts index 6738a7aee..d38437dd8 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/issuer.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/issuer.ts @@ -19,7 +19,7 @@ const { * WARNING: Changing things here can have security implications. */ const IssuerService = { - name: 'crypto.vc.issuer' as const, + name: 'vc.issuer' as const, async started() { this.documentLoader = async (url: any, options: any) => { return await this.broker.call('jsonld.document-loader.loadWithCache', { url, options }); @@ -122,7 +122,7 @@ const IssuerService = { // Update resource to add the signatures, if the id had not been set. if (!receivedCredential.id) await ctx.call( - 'crypto.vc.issuer.credential-container.put', + 'vc.credentials-container.put', { resource: signedCredential, webId: 'system' }, { meta: { skipEmitEvent: true } } ); @@ -134,13 +134,13 @@ const IssuerService = { methods: { /** Creates an ldp resource from the presentation and sets rights. */ async createCredentialResource(ctx, credential, noAnonRead, webId) { - const resourceUri = await ctx.call('crypto.vc.issuer.credential-container.post', { + const resourceUri = await ctx.call('vc.credentials-container.post', { resource: credential, webId }); // Get the presentation resource. - const resource = await ctx.call('crypto.vc.issuer.credential-container.get', { + const resource = await ctx.call('vc.credentials-container.get', { resourceUri, jsonContext: credentialsContext, webId: 'system' diff --git a/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts b/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts index f30404eb8..b4e1c5b88 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts @@ -12,7 +12,7 @@ import { credentialsContext, credentialsContextNoGraphProof } from '../constants * WARNING: Changing things here can have security implications. */ const PresentationsContainerService = { - name: 'crypto.vc.holder.presentation-container' as const, + name: 'vc.presentations-container' as const, mixins: [ControlledContainerMixin], settings: { path: '/presentations', diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc.ts b/src/middleware/packages/crypto/verifiable-credentials/vc.ts index 9261b8947..04b98adff 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc.ts @@ -26,31 +26,31 @@ import ChallengeService from './challenge.ts'; * WARNING: Changing things here can have security implications. */ const VCService = { - name: 'crypto.vc' as const, + name: 'vc' as const, dependencies: ['ontologies'], settings: { enableApi: true }, created() { const { enableApi } = this.settings; - // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.issuer"; settings: { podP... Remove this comment to see the full error message + // @ts-expect-error TS(2322): Type '{ name: "vc.issuer"; settings: { podP... Remove this comment to see the full error message this.broker.createService({ mixins: [IssuerService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.guard"; de... Remove this comment to see the full error message + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.authorizer"; de... Remove this comment to see the full error message this.broker.createService({ mixins: [AuthorizerService] }); - // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.holder"; dependencies: st... Remove this comment to see the full error message + // @ts-expect-error TS(2322): Type '{ name: "vc.holder"; dependencies: st... Remove this comment to see the full error message this.broker.createService({ mixins: [HolderService] }); - // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.verifier"; dependencies: ... Remove this comment to see the full error message + // @ts-expect-error TS(2322): Type '{ name: "vc.verifier"; dependencies: ... Remove this comment to see the full error message this.broker.createService({ mixins: [VerifierService] }); - // @ts-expect-error TS(2322): Type '{ name: "crypto.vc.data-integrity"; dependen... Remove this comment to see the full error message + // @ts-expect-error TS(2322): Type '{ name: "vc.data-integrity"; dependen... Remove this comment to see the full error message this.broker.createService({ mixins: [DataIntegrityService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.pre... Remove this comment to see the full error message + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.pre... Remove this comment to see the full error message this.broker.createService({ mixins: [ChallengeService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.hol... Remove this comment to see the full error message + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.hol... Remove this comment to see the full error message this.broker.createService({ mixins: [PresentationsContainerService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.iss... Remove this comment to see the full error message + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.iss... Remove this comment to see the full error message this.broker.createService({ mixins: [CredentialsContainerService] }); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc.api... Remove this comment to see the full error message + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc.api... Remove this comment to see the full error message if (enableApi) this.broker.createService({ mixins: [ApiService] }); }, async started() { diff --git a/src/middleware/packages/crypto/verifiable-credentials/verifier.ts b/src/middleware/packages/crypto/verifiable-credentials/verifier.ts index a47df7961..597431cc8 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/verifier.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/verifier.ts @@ -5,8 +5,8 @@ import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as vc from '@digitalbazaar/vc'; import { ServiceSchema } from 'moleculer'; -import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; -import VCPurpose from './VcPurpose.ts'; +import VCCapabilityPresentationProofPurpose from '../utils/VcCapabilityPresentationProofPurpose.ts'; +import VCPurpose from '../utils/VcPurpose.ts'; import { arrayOf } from '../utils/utils.ts'; const { @@ -20,7 +20,7 @@ const { * WARNING: Changing things here can have security implications. */ const VerifierService = { - name: 'crypto.vc.verifier' as const, + name: 'vc.verifier' as const, dependencies: ['ldp', 'jsonld'], async started() { this.documentLoader = async (url: any, options: any) => { @@ -106,7 +106,7 @@ const VerifierService = { try { if (!unsignedPresentation || challenge) { - const challengeValidationResult = await ctx.call('crypto.vc.presentation.challenge.validate', { + const challengeValidationResult: any = await ctx.call('vc.challenge.validate', { challenge }); if (!challengeValidationResult.valid) { diff --git a/src/middleware/tests/crypto/verifiable-credentials.test.ts b/src/middleware/tests/crypto/verifiable-credentials.test.ts index 20b9255b2..c8a5e4388 100644 --- a/src/middleware/tests/crypto/verifiable-credentials.test.ts +++ b/src/middleware/tests/crypto/verifiable-credentials.test.ts @@ -20,13 +20,13 @@ let craig: any; beforeAll(async () => { broker = await initialize(3000); - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "crypto.vc"; d... Remove this comment to see the full error message + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "vc"; d... Remove this comment to see the full error message broker.createService({ mixins: [VerifiableCredentialsService] }); await broker.start(); broker.waitForServices( - ['core', 'auth', 'webid', 'triplestore', 'keys', 'private-keys-container', 'public-keys-container', 'crypto.vc'], + ['core', 'auth', 'webid', 'triplestore', 'keys', 'private-keys-container', 'public-keys-container', 'vc'], 5_000 ); @@ -39,7 +39,7 @@ beforeAll(async () => { craig.vcApiEndpoint = path.join(craig.baseUrl, 'vc/v0.3/'); await alice.call('webid.awaitCreateComplete'); - await alice.call('crypto.vc.issuer.credential-container.waitForContainerCreation'); + await alice.call('vc.credentials-container.waitForContainerCreation'); }); afterAll(async () => { @@ -294,7 +294,7 @@ describe('Verifiable credentials', () => { } }); - const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + const validationResult = await alice.call('vc.verifier.verifyCapabilityPresentation', { verifiablePresentation: presentation }); @@ -380,7 +380,7 @@ describe('Verifiable credentials', () => { } }); - const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + const validationResult = await alice.call('vc.verifier.verifyCapabilityPresentation', { verifiablePresentation }); @@ -414,7 +414,7 @@ describe('Verifiable credentials', () => { } }); - const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + const validationResult = await alice.call('vc.verifier.verifyCapabilityPresentation', { verifiablePresentation }); @@ -468,7 +468,7 @@ describe('Verifiable credentials', () => { } }); - const validationResult = await alice.call('crypto.vc.verifier.verifyCapabilityPresentation', { + const validationResult = await alice.call('vc.verifier.verifyCapabilityPresentation', { verifiablePresentation }); diff --git a/website/docs/middleware/crypto/verifiable-credentials.md b/website/docs/middleware/crypto/verifiable-credentials.md index d0a6dd1c6..9461877f9 100644 --- a/website/docs/middleware/crypto/verifiable-credentials.md +++ b/website/docs/middleware/crypto/verifiable-credentials.md @@ -36,7 +36,7 @@ You can sign RDF data with [data integrity proofs](https://www.w3.org/TR/vc-data There are two actions available: -### `crypto.vc.data-integrity.signObject` +### `vc.data-integrity.signObject` Sign an object using a data integrity proof. @@ -55,7 +55,7 @@ Sign an object using a data integrity proof. `object` - The signed object. The signature is contained in the `proof` entry of the object. -### `crypto.vc.data-integrity.verifyObject` +### `vc.data-integrity.verifyObject` Verify an object signed with a data integrity proof. @@ -73,7 +73,7 @@ Verify an object signed with a data integrity proof. ## Issuing and Verifying Verifiable Credentials -### `crypto.vc.issuer.createVC` +### `vc.issuer.createVC` Create a Verifiable Credential. @@ -92,7 +92,7 @@ Create a Verifiable Credential. `object` - The signed Verifiable Credential. -### `crypto.vc.verifier.verifyVC` +### `vc.verifier.verifyVC` Verify a Verifiable Credential. @@ -107,7 +107,7 @@ Verify a Verifiable Credential. `object` - The verification result. If verification succeeds, it will return `{ verified: true }`. If it fails, it will return `{ verified: false, error: }`. -### `crypto.vc.holder.createPresentation` +### `vc.holder.createPresentation` Create a Verifiable Presentation. @@ -129,7 +129,7 @@ Create a Verifiable Presentation. `object` - The signed Verifiable Presentation. -### `crypto.vc.verifier.verifyPresentation` +### `vc.verifier.verifyPresentation` Verify a Verifiable Presentation. @@ -150,7 +150,7 @@ Verify a Verifiable Presentation. ## Issuing and Verifying Capabilities Capabilities are authorizations issued from someone and which authorize the issued holder to perform certain actions. -In this context, capabilities are based on Verifiable Credentials. Each capability is a signed VC (created with `crypto.vc.issuer.createVC`). You invoke (use) a capability with a Verifiable Presentation (VP). +In this context, capabilities are based on Verifiable Credentials. Each capability is a signed VC (created with `vc.issuer.createVC`). You invoke (use) a capability with a Verifiable Presentation (VP). See an [example below](#example-issuing-and-verifying-a-capability-chain). @@ -161,12 +161,12 @@ For chains where the authorization is passed further on, the `credentialSubject. ### Creating a Capability Presentation -For invoking (using) a capability, you need to create a capability presentation with `crypto.vc.holder.createPresentation`. In the presentation's `verifiableCredential` property, set all verifiable credentials of the capability chain, if more than one is used. +For invoking (using) a capability, you need to create a capability presentation with `vc.holder.createPresentation`. In the presentation's `verifiableCredential` property, set all verifiable credentials of the capability chain, if more than one is used. To use the capability representation in a request, you need to serialize it as an unsigned JWT token (`"alg": "none"`). Use the token in the `Authorization` header: `Authorization: Bearer `. For ActivityPub activities, you don't need Authorization headers. Instead, add a `sec:capability` property to the activity that contains the VP. -### Capability Verification with `crypto.vc.verifier.verifyCapabilityPresentation` +### Capability Verification with `vc.verifier.verifyCapabilityPresentation` #### Verification Steps and What is Not Checked @@ -285,10 +285,10 @@ _Some properties are omitted._ ``` 4. **Verifying the Capability Presentation**: - Use the `crypto.vc.verifier.verifyCapabilityPresentation` action to verify the presentation: + Use the `vc.verifier.verifyCapabilityPresentation` action to verify the presentation: ```javascript - const result = await ctx.call('crypto.vc.verifier.verifyCapabilityPresentation', { + const result = await ctx.call('vc.verifier.verifyCapabilityPresentation', { verifiablePresentation: presentation, options: { maxChainLength: 2, @@ -340,7 +340,7 @@ ctx.call('api.addRoute', { The Challenge Service is used to create and validate challenges. Challenges are used to prevent replay attacks when presenting a VP, by ensuring that each request is unique. -### `crypto.vc.presentation.challenge.create` +### `vc.challenge.create` Create a new challenge. @@ -354,7 +354,7 @@ Create a new challenge. `string` - The created challenge. -### `crypto.vc.presentation.challenge.validate` +### `vc.challenge.validate` Validate a challenge. From f6f9c10c34989178cdbdc775bd403574a4c581a9 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 12 Nov 2025 11:30:08 +0100 Subject: [PATCH 110/165] Rename getUris to getByType --- .../activitypub/subservices/object.ts | 36 ++++++++----------- .../ldp/mixins/controlled-container.ts | 3 +- .../ldp/services/registry/actions/getUri.ts | 13 ++++--- .../ldp/services/registry/actions/list.ts | 5 +-- .../ldp/services/registry/actions/register.ts | 1 + .../solid/services/type-index/type-index.ts | 21 ++++++----- 6 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 907315b8f..720ed233f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,7 +1,6 @@ -import { getType } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import { arrayOf, getType, Registration } from '@semapps/ldp'; +import { ServiceSchema, Context } from 'moleculer'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; -import { arrayOf } from '../../../utils.ts'; const ObjectService = { name: 'activitypub.object' as const, @@ -58,24 +57,18 @@ const ObjectService = { // If the object passed is an URI, this is an announcement and there is nothing to process if (typeof activity.object === 'string') break; - const types = arrayOf(activity.object['@type'] || activity.object.type); + const types = arrayOf(getType(activity.object)); - const [containerUri] = (await ctx.call('type-index.getUris', { - type: types[0], - isContainer: true, - webId: actorUri - })) as string[]; + const containerUri: string = await ctx.call('ldp.registry.getUri', { type: types[0], isContainer: true }); if (!containerUri) - throw new Error( - `Cannot create resource of type "${types.join(', ')}", no matching containers were found!` - ); + throw new Error(`Cannot create resource of type "${types.join(', ')}", no matching container found!`); // Find if the container is controlled - const container = await ctx.call('ldp.registry.getByTypes', { types }); + const registration: Registration = await ctx.call('ldp.registry.getByTypes', { types }); objectUri = await ctx.call( - container?.controlledActions?.post || 'ldp.container.post', + registration?.controlledActions?.post || 'ldp.container.post', { containerUri, resource: activity.object, @@ -96,10 +89,10 @@ const ObjectService = { objectUri = activity.object['@id'] || activity.object.id; - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: objectUri }); + const registration: Registration = await ctx.call('ldp.registry.getByUri', { resourceUri: objectUri }); await ctx.call( - controlledActions?.put || 'ldp.resource.put', + registration?.controlledActions?.put || 'ldp.resource.put', { resource: activity.object, webId: actorUri @@ -119,10 +112,10 @@ const ObjectService = { const resourceUri = typeof activity.object === 'string' ? activity.object : activity.object.id; // If the resource is already deleted, it means it was an announcement if (await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' })) { - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri }); + const registration: Registration = await ctx.call('ldp.registry.getByUri', { resourceUri }); await ctx.call( - controlledActions?.delete || 'ldp.resource.delete', + registration?.controlledActions?.delete || 'ldp.resource.delete', { resourceUri, webId: actorUri }, { meta: { @@ -186,7 +179,7 @@ const ObjectService = { }, events: { 'ldp.resource.deleted': { - async handler(ctx) { + async handler(ctx: Context) { // Check if tombstones are globally activated if (this.settings.activateTombstones) { const { resourceUri, containersUris, oldData, dataset } = ctx.params; @@ -194,13 +187,12 @@ const ObjectService = { // If the resource was in no container, skip... if (containersUris.length > 0) { // Check if tombstones are activated for this specific container - const containerOptions = await ctx.call('ldp.registry.getByUri', { + const registration: Registration = await ctx.call('ldp.registry.getByUri', { containerUri: containersUris[0], dataset }); - // @ts-expect-error TS(2339): Property 'activateTombstones' does not exist on ty... Remove this comment to see the full error message - if (containerOptions.activateTombstones !== false && ctx.meta.activateTombstones !== false) { + if (registration.activateTombstones !== false && ctx.meta.activateTombstones !== false) { const formerType = oldData.type || oldData['@type']; await this.actions.createTombstone({ resourceUri, formerType }, { meta: { dataset }, parentCtx: ctx }); } diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 03cd7c7f0..47f0094d0 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -123,8 +123,7 @@ const ControlledContainerMixin = { async handler(ctx) { return await ctx.call('ldp.registry.getUri', { type: arrayOf(this.settings.types)[0], - isPrivate: this.settings.typeIndex === 'private', - webId: ctx.params?.webId || ctx.meta?.webId + isPrivate: this.settings.typeIndex === 'private' }); } }, diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 720f01a3a..60f3f60f0 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,3 +1,4 @@ +import { TypeRegistration } from '@semapps/solid'; import { ActionSchema } from 'moleculer'; /** @@ -9,16 +10,18 @@ const GetUriAction = { params: { type: { type: 'string' }, isContainer: { type: 'boolean', default: true }, - isPrivate: { type: 'boolean', optional: true }, - webId: { type: 'string', optional: true } + isPrivate: { type: 'boolean', optional: true } }, async handler(ctx) { const { type, isContainer, isPrivate } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId; - const [uri] = (await ctx.call('type-index.getUris', { type, isContainer, isPrivate, webId })) as string[]; + const typeRegistration: TypeRegistration = await ctx.call('type-index.getByType', { + type, + isContainer, + isPrivate + }); - return uri; + return typeRegistration?.uri; } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index dbd6b9bb7..00f16a66b 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; +import { Registration } from '../../../types.ts'; const ListAction = { visibility: 'public', @@ -9,9 +10,9 @@ const ListAction = { const { isContainer } = ctx.params; if (isContainer === true) { - return this.registrations.filter(r => r.isContainer); + return this.registrations.filter((r: Registration) => r.isContainer); } else if (isContainer === false) { - return this.registrations.filter(r => !r.isContainer); + return this.registrations.filter((r: Registration) => !r.isContainer); } else { return this.registrations; } diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index dd974307a..1df0615ce 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -25,6 +25,7 @@ const RegisterAction = { // Ignore undefined options Object.keys(registration).forEach( + // @ts-expect-error key => (registration[key] === undefined || registration[key] === null) && delete registration[key] ); diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index 28adb67e9..384742bbe 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -100,9 +100,6 @@ const TypeIndexService = { { parentCtx: ctx } ); } - - // Invalidate the whole cache - if (this.broker.cacher) await this.broker.cacher.clean(`type-index.**`); } }, @@ -112,7 +109,6 @@ const TypeIndexService = { uri: { type: 'string' }, isPrivate: { type: 'boolean', optional: true } }, - // cache: true, async handler(ctx) { const { uri, isPrivate } = ctx.params; @@ -154,14 +150,13 @@ const TypeIndexService = { } }, - getUris: { + getByType: { visibility: 'public', params: { type: { type: 'string' }, isContainer: { type: 'boolean', optional: true }, isPrivate: { type: 'boolean', optional: true } }, - // cache: true, async handler(ctx) { const { type, isContainer, isPrivate } = ctx.params; @@ -182,13 +177,15 @@ const TypeIndexService = { const results = await ctx.call('triplestore.query', { query: ` PREFIX solid: - SELECT ?uri + SELECT ?uri ?type ?indexType ?instancePredicate WHERE { VALUES ?typeIndexUri { ${typeIndexUris.map(uri => `<${uri}>`).join(' ')} } VALUES ?instancePredicate { ${instancePredicates.join(' ')} } + VALUES ?indexType { solid:ListedDocument solid:UnlistedDocument } GRAPH ?typeIndexUri { + ?typeIndexUri a ?indexType . ?typeRegistrationUri a solid:TypeRegistration . - ?typeRegistrationUri solid:forClass <${expandedType}> . + ?typeRegistrationUri solid:forClass <${expandedType}>, ?type . ?typeRegistrationUri ?instancePredicate ?uri } } @@ -196,7 +193,13 @@ const TypeIndexService = { webId: 'system' }); - return results.map((r: any) => r.uri.value); + return { + types: arrayOf(results).map((r: any) => r.type.value), + uri: arrayOf(results)[0].uri.value, + isPrivate: arrayOf(results)[0].indexType.value === 'http://www.w3.org/ns/solid/terms#UnlistedDocument', + isContainer: + arrayOf(results)[0].instancePredicate.value === 'http://www.w3.org/ns/solid/terms#instanceContainer' + } as TypeRegistration; } } } From 547fbcd3aed6bcdac99c4199601d98c07eb72d3e Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 12 Nov 2025 16:30:02 +0100 Subject: [PATCH 111/165] First working AP test --- .../packages/activitypub/package.json | 1 + .../activitypub/services/activitypub/index.ts | 82 ++-------- .../activity-handlers/setRightsHandler.ts | 8 - .../activitypub/subservices/activity.ts | 1 - .../services/activitypub/subservices/actor.ts | 99 ++++-------- .../services/activitypub/subservices/api.ts | 142 ------------------ .../subservices/collection/actions/get.ts | 3 +- .../subservices/collection/index.ts | 21 +-- .../subservices/collections-registry.ts | 133 ++++++---------- .../services/activitypub/subservices/inbox.ts | 3 +- .../services/activitypub/subservices/like.ts | 27 ++-- .../activitypub/subservices/object.ts | 1 - .../activitypub/subservices/outbox.ts | 48 +++--- .../services/activitypub/subservices/reply.ts | 27 ++-- .../services/activitypub/subservices/share.ts | 3 +- .../activitypub/subservices/side-effects.ts | 15 +- src/middleware/packages/auth/mixins/auth.ts | 6 +- .../packages/auth/services/account.ts | 8 +- src/middleware/packages/core/service.ts | 5 - .../packages/crypto/signature/proxy.ts | 4 +- .../ldp/services/container/actions/patch.ts | 7 +- .../packages/ldp/services/remote/index.ts | 6 +- .../ldp/services/resource/actions/create.ts | 2 +- .../ldp/services/resource/actions/delete.ts | 3 +- .../ldp/services/resource/actions/patch.ts | 3 +- src/middleware/packages/migration/2-0-0.ts | 17 +-- .../services/single-mail/service.ts | 8 +- .../packages/sparql-endpoint/getRoute.ts | 2 +- .../packages/sparql-endpoint/package.json | 2 + .../packages/sparql-endpoint/service.ts | 57 ++++--- .../sync/middlewares/objects-watcher.ts | 25 +-- .../packages/sync/services/aggregator.ts | 1 - .../packages/sync/services/mirror.ts | 2 - src/middleware/packages/void/service.ts | 4 +- .../tests/activitypub/actors.test.ts | 60 ++++---- .../tests/activitypub/initialize.ts | 110 +++++++------- .../tests/activitypub/outbox.test.ts | 1 - src/middleware/tests/ldp/initialize.ts | 1 - src/middleware/tests/utils.ts | 13 +- 39 files changed, 301 insertions(+), 660 deletions(-) delete mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/api.ts diff --git a/src/middleware/packages/activitypub/package.json b/src/middleware/packages/activitypub/package.json index 9702407ce..0e884612a 100644 --- a/src/middleware/packages/activitypub/package.json +++ b/src/middleware/packages/activitypub/package.json @@ -6,6 +6,7 @@ "author": "Virtual Assembly", "dependencies": { "@rdfjs/data-model": "2.1.1", + "@semapps/auth": "1.2.0", "@semapps/crypto": "1.2.0", "@semapps/ldp": "1.2.0", "@semapps/middlewares": "1.2.0", diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index 80bb710d3..ae656003f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -21,7 +21,6 @@ const ActivityPubService = { name: 'activitypub' as const, settings: { baseUri: null, - podProvider: false, activitiesPath: '/as/activity', collectionsPath: '/as/collection', activateTombstones: true, @@ -30,128 +29,77 @@ const ActivityPubService = { }, dependencies: ['api', 'ontologies'], created() { - const { - baseUri, - podProvider, - activitiesPath, - collectionsPath, - selectActorData, - queueServiceUrl, - activateTombstones - } = this.settings; + const { baseUri, activitiesPath, collectionsPath, selectActorData, queueServiceUrl, activateTombstones } = + this.settings; // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message this.broker.createService({ - mixins: [SideEffectsService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], - settings: { podProvider } + mixins: [SideEffectsService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message this.broker.createService({ mixins: [CollectionService], - settings: { - podProvider, - path: collectionsPath - } + settings: { path: collectionsPath } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.c... Remove this comment to see the full error message this.broker.createService({ mixins: [CollectionsRegistryService], - settings: { - baseUri, - podProvider - } + settings: { baseUri } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message this.broker.createService({ mixins: [ActorService], - settings: { - baseUri, - selectActorData, - podProvider - } - }); - - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message - this.broker.createService({ - mixins: [ApiService], - settings: { - baseUri, - podProvider - } + settings: { baseUri, selectActorData } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.o... Remove this comment to see the full error message this.broker.createService({ mixins: [ObjectService], - settings: { - baseUri, - podProvider, - activateTombstones - } + settings: { baseUri, activateTombstones } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message this.broker.createService({ mixins: [ActivityService], - settings: { - baseUri, - podProvider, - path: activitiesPath - } + settings: { baseUri, path: activitiesPath } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.f... Remove this comment to see the full error message this.broker.createService({ mixins: [FollowService], - settings: { - baseUri - } + settings: { baseUri } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.i... Remove this comment to see the full error message this.broker.createService({ - mixins: [InboxService], - settings: { - podProvider - } + mixins: [InboxService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.l... Remove this comment to see the full error message this.broker.createService({ mixins: [LikeService], - settings: { - baseUri, - podProvider - } + settings: { baseUri } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.s... Remove this comment to see the full error message this.broker.createService({ mixins: [ShareService], - settings: { - baseUri, - podProvider - } + settings: { baseUri } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.r... Remove this comment to see the full error message this.broker.createService({ mixins: [ReplyService], - settings: { - baseUri, - podProvider - } + settings: { baseUri } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { bas... Remove this comment to see the full error message this.broker.createService({ mixins: [OutboxService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], - settings: { - baseUri, - podProvider - } + settings: { baseUri } }); }, async started() { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts index 2bf216ce7..c076abb1a 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity-handlers/setRightsHandler.ts @@ -56,16 +56,8 @@ const setRightsHandler = { const activityUri = getId(activity); const newRecipients = await ctx.call('activitypub.activity.getRecipients', { activity }); const activityIsPublic = await ctx.call('activitypub.activity.isPublic', { activity }); - /** @type {string} */ const objectUri = typeof activity.object === 'string' ? activity.object : activity.object?.id; - // When a new activity is created, ensure the emitter has read rights as well. - // Don't do that on podProvider config, because the Pod owner already has all rights. - // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ matc... Remove this comment to see the full error message - if (!this.settings.podProvider) { - if (!newRecipients.includes(activity.actor)) newRecipients.push(activity.actor); - } - // Give read rights to the recipients, unless the activity is transient if (!activityUri.includes('#')) { await addReadRights({ diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index af5e37da1..2b6086aa0 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -12,7 +12,6 @@ const ActivityService = { mixins: [ControlledContainerMixin, ActivitiesHandlerMixin], settings: { baseUri: null, - podProvider: false, // ControlledContainerMixin settings path: '/as/activity', types: Object.values(FULL_ACTIVITY_TYPES), diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 622cbb37d..d6022157d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -1,28 +1,24 @@ import fetch from 'node-fetch'; import rdf from '@rdfjs/data-model'; -import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; -import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; -import { getSlugFromUri, waitForResource } from '../../../utils.ts'; +import { getDatasetFromUri } from '@semapps/ldp'; +import { Account } from '@semapps/auth'; +import { ServiceSchema, Context } from 'moleculer'; +import { AS_PREFIX } from '../../../constants.ts'; +import { waitForResource } from '../../../utils.ts'; const ActorService = { name: 'activitypub.actor' as const, dependencies: ['activitypub.collection', 'ldp', 'signature'], settings: { baseUri: null, - selectActorData: null, - podProvider: false + selectActorData: null }, actions: { get: { async handler(ctx) { const { actorUri, webId } = ctx.params; // Check if the actor is remote - // If dataset is not in the meta, assume that actor is remote - if ( - !(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri })) && - (!this.settings.podProvider || ctx.meta.dataset) - ) { + if (!(await ctx.call('ldp.remote.isRemote', { resourceUri: actorUri }))) { try { // Don't return immediately the promise, or we won't be able to catch errors const actor = await ctx.call('webid.get', { resourceUri: actorUri, webId }); @@ -54,39 +50,25 @@ const ActorService = { appendActorData: { async handler(ctx) { const { actorUri } = ctx.params; - const userData = await this.actions.get({ actorUri, webId: 'system' }, { parentCtx: ctx }); - const propertiesToAdd = this.settings.selectActorData ? this.settings.selectActorData(userData) : {}; - if (!propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']) { - // Ensure at least one actor type, otherwise ActivityPub-specific properties (inbox, public key...) will not be added - const resourceType = arrayOf(userData.type || userData['@type']); - const includeActorType = resourceType.some(type => Object.values(ACTOR_TYPES).includes(type)); - if (!includeActorType) { - propertiesToAdd['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = `${AS_PREFIX}Person`; - } - } - - if (!propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername']) { - propertiesToAdd['https://www.w3.org/ns/activitystreams#preferredUsername'] = getSlugFromUri( - userData.id || userData['@id'] - ); - } - - if (Object.keys(propertiesToAdd).length > 0) { - await ctx.call('ldp.resource.patch', { - resourceUri: actorUri, - triplesToAdd: Object.entries(propertiesToAdd).map(([predicate, subject]) => - rdf.quad( - rdf.namedNode(actorUri), - rdf.namedNode(predicate), - typeof subject === 'string' && subject.startsWith('http') - ? rdf.namedNode(subject) - : rdf.literal(subject) - ) - ), - webId: 'system' - }); - } + const propertiesToAdd = { + 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type': `${AS_PREFIX}Person`, + 'https://www.w3.org/ns/activitystreams#preferredUsername': getDatasetFromUri(actorUri) + }; + + await ctx.call('ldp.resource.patch', { + resourceUri: actorUri, + triplesToAdd: Object.entries(propertiesToAdd).map(([predicate, subject]) => + rdf.quad( + rdf.namedNode(actorUri), + rdf.namedNode(predicate), + typeof subject === 'string' && subject.startsWith('http') + ? rdf.namedNode(subject) + : rdf.literal(subject as string) + ) + ), + webId: 'system' + }); } }, @@ -94,7 +76,7 @@ const ActorService = { async handler(ctx) { const { actorUri, predicate, endpoint } = ctx.params; - const account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId: actorUri }); const dataset = account.username; await ctx.call('triplestore.update', { @@ -189,34 +171,9 @@ const ActorService = { } } }, - methods: { - isActor(resource) { - return arrayOf(resource['@type'] || resource.type).some(type => Object.values(ACTOR_TYPES).includes(type)); - } - }, events: { - 'ldp.resource.created': { - async handler(ctx) { - const { resourceUri, newData } = ctx.params; - if (this.isActor(newData)) { - await this.actions.appendActorData({ actorUri: resourceUri }, { parentCtx: ctx }); - await ctx.call('signature.keypair.generate', { actorUri: resourceUri }); - await ctx.call('signature.keypair.attachPublicKey', { actorUri: resourceUri }); - } - } - }, - - 'ldp.resource.deleted': { - async handler(ctx) { - const { resourceUri, oldData } = ctx.params; - if (this.isActor(oldData)) { - await ctx.call('keys.deleteAllKeysForWebId', { webId: resourceUri }); - } - } - }, - - 'auth.registered': { - async handler(ctx) { + 'auth.account.created': { + async handler(ctx: Context) { const { webId } = ctx.params; await this.actions.appendActorData({ actorUri: webId }, { parentCtx: ctx }); } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts deleted file mode 100644 index 5e95d3175..000000000 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ /dev/null @@ -1,142 +0,0 @@ -import urlJoin from 'url-join'; -import path from 'path'; -import { arrayOf, Registration } from '@semapps/ldp'; -import { - parseUrl, - parseHeader, - parseRawBody, - negotiateContentType, - negotiateAccept, - parseJson, - parseFile, - saveDatasetMeta -} from '@semapps/middlewares'; -import { ServiceSchema } from 'moleculer'; -import { FULL_ACTOR_TYPES } from '../../../constants.ts'; - -const ApiService = { - name: 'activitypub.api' as const, - settings: { - baseUri: null, - podProvider: false - }, - dependencies: ['api', 'ldp', 'ldp.registry'], - async started() { - if (!this.settings.baseUri) throw new Error('The baseUri setting of the activitypub.api service is required'); - const { pathname: basePath } = new URL(this.settings.baseUri); - const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { key: 'resourcesWithContainerPath' }); - if (this.settings.podProvider) { - await this.broker.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, '/:username([^/.][^/]+)')) - }); - } else if (!resourcesWithContainerPath) { - await this.broker.call('api.addRoute', { route: this.getBoxesRoute(path.join(basePath, `/:actorSlug`)) }); - } else { - // If some actor containers are already registered, add the corresponding API routes - const registrations: Registration[] = await this.broker.call('ldp.registry.list'); - for (const registration of registrations) { - if (arrayOf(registration.types).some(type => Object.values(FULL_ACTOR_TYPES).includes(type))) { - // TODO Don't use full path anymore - await this.broker.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, `${registration.fullPath}/:actorSlug`)) - }); - } - } - } - }, - actions: { - inbox: { - async handler(ctx) { - const { actorSlug, ...activity } = ctx.params; - const { requestUrl } = ctx.meta; - const { origin } = new URL(this.settings.baseUri); - - await ctx.call('activitypub.inbox.post', { - collectionUri: urlJoin(origin, requestUrl), - ...activity - }); - - ctx.meta.$statusCode = 202; - } - }, - - outbox: { - async handler(ctx) { - let { actorSlug, ...activity } = ctx.params; - const { requestUrl } = ctx.meta; - const { origin } = new URL(this.settings.baseUri); - - activity = await ctx.call('activitypub.outbox.post', { - collectionUri: urlJoin(origin, requestUrl), - ...activity - }); - - ctx.meta.$responseHeaders = { - Location: activity.id || activity['@id'], - 'Content-Length': 0 - }; - // We need to set this also here (in addition to above) or we get a Moleculer warning - ctx.meta.$location = activity.id || activity['@id']; - ctx.meta.$statusCode = 201; - } - } - }, - events: { - 'ldp.registry.registered': { - async handler(ctx) { - const { registration } = ctx.params; - const { pathname: basePath } = new URL(this.settings.baseUri); - const resourcesWithContainerPath = await this.broker.call('ldp.getSetting', { - key: 'resourcesWithContainerPath' - }); - if ( - !this.settings.podProvider && - resourcesWithContainerPath && - arrayOf(registration.types).some(type => Object.values(FULL_ACTOR_TYPES).includes(type)) - ) { - await ctx.call('api.addRoute', { - route: this.getBoxesRoute(path.join(basePath, `${registration.fullPath}/:actorSlug`)) - }); - } - } - } - }, - methods: { - getBoxesRoute(actorsPath) { - const middlewares = [ - parseUrl, - parseHeader, - negotiateContentType, - negotiateAccept, - parseRawBody, - parseJson, - parseFile, - saveDatasetMeta - ]; - - return { - name: this.settings.podProvider ? 'boxes' : `boxes${actorsPath}`, - path: actorsPath, - // Disable the body parsers so that we can parse the body ourselves - // (Moleculer-web doesn't handle non-JSON bodies, so we must do it ourselves) - bodyParsers: false, - authorization: false, - authentication: true, - aliases: { - 'POST /inbox': [...middlewares, 'activitypub.api.inbox'], - 'POST /outbox': [...middlewares, 'activitypub.api.outbox'] - } - }; - } - } -} satisfies ServiceSchema; - -export default ApiService; - -declare global { - export namespace Moleculer { - export interface AllServices { - [ApiService.name]: typeof ApiService; - } - } -} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index e895ffe61..92c68d741 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,4 +1,5 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; +import { getDatasetFromUri } from '@semapps/ldp'; import { ActionSchema, Errors } from 'moleculer'; import { getValueFromDataType } from '../../../../../utils.ts'; @@ -310,7 +311,7 @@ const Schema = { // Get dataset here since we can't call the method from internal functions // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. - const dataset = this.getCollectionDataset(collectionUri); + const dataset = getDatasetFromUri(collectionUri); sanitizeSparqlUri(collectionUri); sanitizeSparqlUri(beforeEq); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 5da656547..bfc9552c6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -11,7 +11,6 @@ const CollectionService = { name: 'activitypub.collection' as const, mixins: [ControlledContainerMixin], settings: { - podProvider: false, // ControlledContainerMixin settings path: '/as/collection', types: [ @@ -103,7 +102,7 @@ const CollectionService = { ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); } - await this.actions.waitForContainerCreation({ containerUri: ctx.params.containerUri }); + await this.actions.waitForContainerCreation({ containerUri: ctx.params.containerUri }, { parentCtx: ctx }); const ordered = arrayOf(ctx.params.resource.type).includes('OrderedCollection'); @@ -145,7 +144,7 @@ const CollectionService = { } } `, - dataset: this.getCollectionDataset(collectionUri), + dataset: getDatasetFromUri(collectionUri), webId: 'system' }); return Number(res[0].count.value) === 0; @@ -173,7 +172,7 @@ const CollectionService = { } } `, - dataset: this.getCollectionDataset(collectionUri), + dataset: getDatasetFromUri(collectionUri), webId: 'system' }); } @@ -209,7 +208,7 @@ const CollectionService = { } } `, - dataset: this.getCollectionDataset(collectionUri), + dataset: getDatasetFromUri(collectionUri), webId: 'system' }); @@ -243,7 +242,7 @@ const CollectionService = { } } `, - dataset: this.getCollectionDataset(collectionUri), + dataset: getDatasetFromUri(collectionUri), webId: 'system' }); @@ -281,7 +280,7 @@ const CollectionService = { } } `, - dataset: this.getCollectionDataset(collectionUri), + dataset: getDatasetFromUri(collectionUri), webId: 'system' }); } @@ -310,19 +309,13 @@ const CollectionService = { } } `, - dataset: this.getCollectionDataset(collectionUri), + dataset: getDatasetFromUri(collectionUri), webId: 'system' }); return results.length > 0 ? results[0].actorUri.value : null; } } - }, - methods: { - getCollectionDataset(collectionUri) { - if (!this.settings.podProvider) return undefined; - return getDatasetFromUri(collectionUri); - } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 25de2c8a5..62e3ee4e9 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -1,15 +1,14 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; -import { MIME_TYPES } from '@semapps/mime-types'; -import { getWebIdFromUri, arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; -import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; +import { Account } from '@semapps/auth'; +import { arrayOf } from '@semapps/ldp'; +import { ServiceSchema, Context } from 'moleculer'; +import { AS_PREFIX } from '../../../constants.ts'; const CollectionsRegistryService = { name: 'activitypub.collections-registry' as const, settings: { - baseUri: null, - podProvider: false + baseUri: null }, dependencies: ['triplestore', 'ldp'], async started() { @@ -69,8 +68,7 @@ const CollectionsRegistryService = { 'semapps:sortPredicate': sortPredicate, 'semapps:sortOrder': sortOrder }, - contentType: MIME_TYPES.JSON, - webId: this.settings.podProvider ? getWebIdFromUri(objectUri) : 'system', + webId: 'system', permissions // Handled by the WebAclMiddleware, if present }); @@ -117,26 +115,29 @@ const CollectionsRegistryService = { for (const collection of this.registeredCollections) { this.logger.info(`Looking for containers with types: ${JSON.stringify(collection.attachToTypes)}`); - const accounts = await this.broker.call('auth.account.find'); - const datasets = this.settings.podProvider ? accounts.map((a: any) => a.username) : [undefined]; + const accounts: Account[] = await ctx.call('auth.account.find'); - for (let dataset of datasets) { - // Find all containers where we want to attach this collection - const containers = await ctx.call('ldp.registry.getByTypes', { types: collection.attachToTypes, dataset }); - for (const container of Object.values(containers)) { - // @ts-expect-error TS(18046): 'container' is of type 'unknown'. - const containerUri = urlJoin(this.settings.baseUri, container.fullPath); - this.logger.info(`Looking for resources in container ${containerUri}`); - const resources = await ctx.call('ldp.container.getUris', { containerUri }); - for (const resourceUri of resources) { - await this.actions.createAndAttachCollection( - { - objectUri: resourceUri, - collection - }, - { parentCtx: ctx } - ); - } + for (const { webId, username: dataset } of accounts) { + ctx.meta.dataset = dataset; + ctx.meta.webId = webId; + + // Find the container for resources of this type + const containerUri: string = await ctx.call('ldp.registry.getUri', { + type: arrayOf(collection.attachToTypes)[0], + isContainer: true + }); + + this.logger.info(`Looking for resources in container ${containerUri}`); + + const resourcesUris: string[] = await ctx.call('ldp.container.getUris', { containerUri }); + for (const resourceUri of resourcesUris) { + await this.actions.createAndAttachCollection( + { + objectUri: resourceUri, + collection + }, + { parentCtx: ctx } + ); } } } @@ -145,7 +146,7 @@ const CollectionsRegistryService = { updateCollectionsOptions: { async handler(ctx) { - let { collection, dataset } = ctx.params; + let { collection, dataset: chosenDataset } = ctx.params; let { attachPredicate, ordered, summary, dereferenceItems, itemsPerPage, sortPredicate, sortOrder } = collection || {}; @@ -154,19 +155,19 @@ const CollectionsRegistryService = { sortPredicate && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortPredicate })); sortOrder = sortOrder && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortOrder })); - const accounts = await this.broker.call('auth.account.find'); - const datasets = dataset - ? [dataset] - : this.settings.podProvider - ? accounts.map((a: any) => a.username) - : [undefined]; + const accounts: Account[] = await this.broker.call('auth.account.find', { + query: chosenDataset ? { username: chosenDataset } : {} + }); + + for (const { webId, username: dataset } of accounts) { + ctx.meta.dataset = dataset; + ctx.meta.webId = webId; - for (dataset of datasets) { this.logger.info( `Getting all collections in dataset ${dataset} attached with predicate ${attachPredicate}...` ); - const results = await ctx.call('triplestore.query', { + const results: any = await ctx.call('triplestore.query', { query: ` SELECT ?collectionUri WHERE { @@ -175,12 +176,11 @@ const CollectionsRegistryService = { } } `, - webId: 'system', - dataset + webId: 'system' }); for (const collectionUri of results.map((r: any) => r.collectionUri.value)) { - if (this.isLocalObject(collectionUri, urlJoin(this.settings.baseUri, dataset))) { + if (!(await ctx.call('ldp.remote.isRemote', { resourceUri: collectionUri }))) { this.logger.info(`Updating options of ${collectionUri}...`); await ctx.call('triplestore.update', { query: ` @@ -238,30 +238,8 @@ const CollectionsRegistryService = { ) : []; }, - isActor(types) { - return arrayOf(types).some(type => - [...Object.values(ACTOR_TYPES), ...Object.values(FULL_ACTOR_TYPES)].includes(type) - ); - }, hasTypeChanged(oldData, newData) { return JSON.stringify(newData.type || newData['@type']) !== JSON.stringify(oldData.type || oldData['@type']); - }, - isLocalObject(uri, actorUri) { - if (this.settings.podProvider) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(`${actorUri}/`) || - uri === aclBase || - uri.startsWith(`${aclBase}/`) || - uri === aclGroupBase || - uri.startsWith(`${aclGroupBase}/`) - ); - } else { - return uri.startsWith(this.settings.baseUri); - } } }, events: { @@ -270,12 +248,7 @@ const CollectionsRegistryService = { const { resourceUri, newData } = ctx.params; const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { - if (this.isActor(newData.type || newData['@type'])) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } else { - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } } }, @@ -287,12 +260,7 @@ const CollectionsRegistryService = { if (this.hasTypeChanged(oldData, newData)) { const collections = this.getCollectionsByType(newData.type || newData['@type']); for (const collection of collections) { - if (this.isActor(newData.type || newData['@type'])) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } else { - await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); - } + await this.actions.createAndAttachCollection({ objectUri: resourceUri, collection }, { parentCtx: ctx }); } } } @@ -306,18 +274,10 @@ const CollectionsRegistryService = { if (triple.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { const collections = this.getCollectionsByType(triple.object.value); for (const collection of collections) { - if (this.isActor(triple.object.value)) { - // If the resource is an actor, use the resource URI as the webId - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection }, - { parentCtx: ctx } - ); - } else { - await this.actions.createAndAttachCollection( - { objectUri: resourceUri, collection }, - { parentCtx: ctx } - ); - } + await this.actions.createAndAttachCollection( + { objectUri: resourceUri, collection }, + { parentCtx: ctx } + ); } } } @@ -326,8 +286,7 @@ const CollectionsRegistryService = { }, 'ldp.resource.deleted': { - async handler(ctx) { - // @ts-expect-error TS(2339): Property 'oldData' does not exist on type 'Optiona... Remove this comment to see the full error message + async handler(ctx: Context) { const { oldData } = ctx.params; const collections = this.getCollectionsByType(oldData.type || oldData['@type']); for (const collection of collections) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index abc539a5e..2107f503e 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -11,7 +11,6 @@ const InboxService = { name: 'activitypub.inbox' as const, mixins: [AwaitActivityMixin], settings: { - podProvider: false, collectionOptions: { path: '/inbox', attachToTypes: Object.values(ACTOR_TYPES), @@ -112,7 +111,7 @@ const InboxService = { // Attach the activity to the activities container, in order to use the container options await ctx.call('activitypub.activity.attach', { resourceUri: activity.id, - webId: this.settings.podProvider ? inboxOwner : 'system' + webId: inboxOwner }); // Attach the activity to the inbox diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 037923b4b..b4aba4472 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -8,7 +8,6 @@ const LikeService = { mixins: [ActivitiesHandlerMixin], settings: { baseUri: null, - podProvider: false, likesCollectionOptions: { path: '/likes', attachPredicate: 'https://www.w3.org/ns/activitystreams#likes', @@ -181,21 +180,17 @@ const LikeService = { }, methods: { isLocalObject(uri, actorUri) { - if (this.settings.podProvider) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(`${actorUri}/`) || - uri === aclBase || - uri.startsWith(`${aclBase}/`) || - uri === aclGroupBase || - uri.startsWith(`${aclGroupBase}/`) - ); - } else { - return uri.startsWith(this.settings.baseUri); - } + const { origin, pathname } = new URL(actorUri); + const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice + const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice + return ( + uri === actorUri || + uri.startsWith(`${actorUri}/`) || + uri === aclBase || + uri.startsWith(`${aclBase}/`) || + uri === aclGroupBase || + uri.startsWith(`${aclGroupBase}/`) + ); } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 720ed233f..a8bcf42b8 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -6,7 +6,6 @@ const ObjectService = { name: 'activitypub.object' as const, settings: { baseUri: null, - podProvider: false, activateTombstones: true }, dependencies: ['ldp.resource'], diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index b220321f2..9f09ca678 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -1,8 +1,9 @@ import fetch from 'node-fetch'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; +import { Account } from '@semapps/auth'; import { MIME_TYPES } from '@semapps/mime-types'; -import { getType, arrayOf } from '@semapps/ldp'; +import { getType, arrayOf, getDatasetFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead, getSlugFromUri } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; @@ -25,7 +26,6 @@ const OutboxService = { mixins: [AwaitActivityMixin], settings: { baseUri: null, - podProvider: false, collectionOptions: { path: '/outbox', attachToTypes: Object.values(ACTOR_TYPES), @@ -66,9 +66,8 @@ const OutboxService = { ); } - if (this.settings.podProvider) { - ctx.meta.dataset = getSlugFromUri(actorUri); - } + // TODO Handle this with middleware + ctx.meta.dataset = getDatasetFromUri(collectionUri); if (!activity['@context']) { activity['@context'] = await ctx.call('jsonld.context.get'); @@ -77,7 +76,6 @@ const OutboxService = { // Wrap object in Create activity, if necessary activity = await ctx.call('activitypub.object.wrap', { activity }); - // @ts-expect-error TS(2339): Property 'doNotProcessObject' does not exist on ty... Remove this comment to see the full error message if (!ctx.meta.doNotProcessObject && transient !== true) { // Process object create, update or delete // and return an activity with the object ID @@ -204,10 +202,10 @@ const OutboxService = { for (const recipientUri of recipients) { try { - const account = await this.broker.call('auth.account.findByWebId', { webId: recipientUri }); + const account: Account = await this.broker.call('auth.account.findByWebId', { webId: recipientUri }); if (!account) throw new Error(`No account found with webId ${recipientUri}`); - const dataset = this.settings.podProvider ? account.username : undefined; + const dataset = account.username; const recipientInbox = await this.broker.call( 'activitypub.actor.getCollectionUri', @@ -230,24 +228,22 @@ const OutboxService = { { meta: { dataset } } ); - if (this.settings.podProvider) { - // Store the activity in the dataset of the recipient - await this.broker.call('ldp.remote.store', { - resource: activity, - keepInSync: false, // Activities are immutable - webId: recipientUri, - dataset - }); - - await this.broker.call( - 'activitypub.activity.attach', - { - resourceUri: activity.id, - webId: recipientUri - }, - { meta: { dataset } } - ); - } + // Store the activity in the dataset of the recipient + await this.broker.call('ldp.remote.store', { + resource: activity, + keepInSync: false, // Activities are immutable + webId: recipientUri, + dataset + }); + + await this.broker.call( + 'activitypub.activity.attach', + { + resourceUri: activity.id, + webId: recipientUri + }, + { meta: { dataset } } + ); } else { // If the activity is transient, pass the full object // This will be used in particular for Solid notifications diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 03d08aafe..8c7f8efc7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -10,7 +10,6 @@ const ReplyService = { mixins: [ActivitiesHandlerMixin], settings: { baseUri: null, - podProvider: false, collectionOptions: { path: '/replies', attachPredicate: 'https://www.w3.org/ns/activitystreams#replies', @@ -142,21 +141,17 @@ const ReplyService = { }, methods: { isLocalObject(uri, actorUri) { - if (this.settings.podProvider) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(`${actorUri}/`) || - uri === aclBase || - uri.startsWith(`${aclBase}/`) || - uri === aclGroupBase || - uri.startsWith(`${aclGroupBase}/`) - ); - } else { - return uri.startsWith(this.settings.baseUri); - } + const { origin, pathname } = new URL(actorUri); + const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice + const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice + return ( + uri === actorUri || + uri.startsWith(`${actorUri}/`) || + uri === aclBase || + uri.startsWith(`${aclBase}/`) || + uri === aclGroupBase || + uri.startsWith(`${aclGroupBase}/`) + ); } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index 8a36ca871..4af3487b1 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -1,6 +1,6 @@ import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; -import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; +import { ACTIVITY_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import matchActivity from '../../../utils/matchActivity.ts'; @@ -9,7 +9,6 @@ const ShareService = { mixins: [ActivitiesHandlerMixin], settings: { baseUri: null, - podProvider: false, collectionOptions: { path: '/shares', attachPredicate: 'https://www.w3.org/ns/activitystreams#shares', diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 19c590a7a..20ea25880 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -10,9 +10,6 @@ import matchActivity from '../../../utils/matchActivity.ts'; */ const ActivitypubSideEffectsSchema = { name: 'activitypub.side-effects' as const, - settings: { - podProvider: false - }, async started() { this.processors = []; }, @@ -307,10 +304,8 @@ const ActivitypubSideEffectsSchema = { job.log(`Processing activity for recipient ${recipientUri}...`); // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ name... Remove this comment to see the full error message - const dataset = this.settings.podProvider - ? // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message - await this.broker.call('auth.account.findDatasetByWebId', { webId: recipientUri }) - : undefined; + const dataset = await this.broker.call('auth.account.findDatasetByWebId', { webId: recipientUri }); + // @ts-expect-error TS(2339): Property 'fetch' does not exist on type '{ name: s... Remove this comment to see the full error message const fetcher = (resourceUri: any) => this.fetch(resourceUri, recipientUri, dataset); @@ -376,10 +371,8 @@ const ActivitypubSideEffectsSchema = { let dereferencedActivity = activity; // @ts-expect-error TS(2339): Property 'settings' does not exist on type '{ name... Remove this comment to see the full error message - const dataset = this.settings.podProvider - ? // @ts-expect-error TS(2339): Property 'broker' does not exist on type '{ name: ... Remove this comment to see the full error message - await this.broker.call('auth.account.findDatasetByWebId', { webId: emitterUri }) - : undefined; + const dataset = await this.broker.call('auth.account.findDatasetByWebId', { webId: emitterUri }); + // @ts-expect-error TS(2339): Property 'fetch' does not exist on type '{ name: s... Remove this comment to see the full error message const fetcher = (resourceUri: any) => this.fetch(resourceUri, emitterUri, dataset); diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index 088567ba5..8bd672b9a 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -69,13 +69,11 @@ const AuthMixin = { reservedUsernames: [], minPasswordLength: 1, minUsernameLength: 1, - accountsDataset: 'settings', - podProvider: false + accountsDataset: 'settings' }, dependencies: ['api'], async created() { - const { jwtPath, reservedUsernames, minPasswordLength, minUsernameLength, accountsDataset, podProvider } = - this.settings; + const { jwtPath, reservedUsernames, minPasswordLength, minUsernameLength, accountsDataset } = this.settings; // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth.jwt"; se... Remove this comment to see the full error message this.broker.createService({ diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 99197aeb7..a9fb53941 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -84,15 +84,17 @@ const AuthAccountService = { const { webId }: { webId: string } = await ctx.call('solid-storage.create', { username }); - ctx.emit('auth.account.created', { webId, username }); - - return await this._create(ctx, { + const returnValues = await this._create(ctx, { uuid, username, email, hashedPassword: password, webId }); + + ctx.emit('auth.account.created', { webId, username }); + + return returnValues; } }, diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 2ff2ac24d..f8966445d 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -53,7 +53,6 @@ const CoreService = { // Type support for settings could be given, once moleculer type definitions improve... settings: { baseUri: baseUrl, - podProvider: true, ...this.settings.activitypub } }); @@ -128,7 +127,6 @@ const CoreService = { settings: { baseUrl, containers, - podProvider: true, ...this.settings.ldp } }); @@ -179,7 +177,6 @@ const CoreService = { mixins: [KeysService], settings: { actorsKeyPairsDir: path.resolve(baseDir, './actors'), - podProvider: true, ...this.settings.keys } }); @@ -190,7 +187,6 @@ const CoreService = { this.broker.createService({ mixins: [SparqlEndpointService], settings: { - podProvider: true, defaultAccept: 'application/ld+json', ...this.settings.sparqlEndpoint } @@ -225,7 +221,6 @@ const CoreService = { mixins: [WebAclService], settings: { baseUrl, - podProvider: true, ...this.settings.webacl } }); diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index b3e0eff4e..736f3711e 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -144,8 +144,8 @@ const ProxyService = { 'auth.account.created': { async handler(ctx: any) { const { webId } = ctx.params; - const services = await ctx.call('$node.services'); - if (services.some((s: any) => s.name === 'activitypub.actor')) { + const services: ServiceSchema[] = await ctx.call('$node.services'); + if (services.some(s => s.name === 'activitypub.actor')) { await ctx.call('activitypub.actor.addEndpoint', { actorUri: webId, predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index d1df7fddd..97ff68b28 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -114,12 +114,7 @@ const Schema = { } } if (!ctx.meta.skipEmitEvent) { - ctx.emit( - 'ldp.container.patched', - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - { containerUri, resourcesAdded, resourcesRemoved, dataset: ctx.meta.dataset }, - { meta: { webId: null, dataset: null } } - ); + ctx.emit('ldp.container.patched', { containerUri, resourcesAdded, resourcesRemoved, dataset: ctx.meta.dataset }); } } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index cbf882646..d70152a07 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import { Service, ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import getNetworkAction from './actions/getNetwork.ts'; @@ -28,8 +28,8 @@ const LdpRemoteSchema = { }, methods: { async proxyAvailable() { - const services = await this.broker.call('$node.services'); - return services.some((s: any) => s.name === 'signature.proxy'); + const services: ServiceSchema[] = await this.broker.call('$node.services'); + return services.some(s => s.name === 'signature.proxy'); } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 8e4299e75..36f37f216 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -67,7 +67,7 @@ const Schema = { }; if (!ctx.meta.skipEmitEvent) { - ctx.emit('ldp.resource.created', returnValues, { meta: { webId: null, dataset: null } }); + ctx.emit('ldp.resource.created', returnValues); } return returnValues; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 2a20741ab..4279f2ec4 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -60,9 +60,8 @@ const Schema = { ctx.call('triplestore.deleteOrphanBlankNodes'); - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { - ctx.emit('ldp.resource.deleted', returnValues, { meta: { webId: null, dataset: null } }); + ctx.emit('ldp.resource.deleted', returnValues); } return returnValues; diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index abbac57d9..b391c49ce 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -82,9 +82,8 @@ const Schema = { dataset: ctx.meta.dataset }; - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { - ctx.emit('ldp.resource.patched', returnValues, { meta: { webId: null, dataset: null } }); + ctx.emit('ldp.resource.patched', returnValues); } return returnValues; diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index a2ff14e36..85125d5d1 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -7,8 +7,7 @@ const blankNodesQuery = buildBlankNodesQuery(4); export default { name: 'migration-2-0-0', settings: { - baseUrl: undefined, - podProvider: false + baseUrl: undefined }, created() { if (!this.settings.baseUrl) { @@ -38,12 +37,9 @@ export default { await this.actions.moveContainerToNamedGraph({ containerUri }, { parentCtx: ctx }); } - if (this.settings.podProvider) { - // Move WebID (not linked from a container) - // @ts-expect-error - const webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); - await this.actions.moveResourceToNamedGraph({ resourceUri: webId }, { parentCtx: ctx }); - } + // Move WebID (not linked from a container) + const webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); + await this.actions.moveResourceToNamedGraph({ resourceUri: webId }, { parentCtx: ctx }); // Delete orphan blank nodes from default graph await ctx.call('triplestore.update', { @@ -201,7 +197,7 @@ export default { const { dataset } = ctx.params; ctx.meta.dataset = dataset || ctx.meta.dataset; - if (this.settings.podProvider) ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); + ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); const result = await ctx.call('triplestore.query', { query: ` @@ -245,8 +241,7 @@ export default { const { dataset } = ctx.params; ctx.meta.dataset = dataset || ctx.meta.dataset; - - if (this.settings.podProvider) ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); + ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); const result = await ctx.call('triplestore.query', { query: ` diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index c6c28782f..406ec89ae 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; -import { getSlugFromUri } from '@semapps/ldp'; +import { getDatasetFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; @@ -17,7 +17,6 @@ const SingleMailNotificationsService = { defaultFrontUrl: null, color: '#E2003B', delay: 0, - podProvider: false, // See moleculer-mail doc https://github.com/moleculerjs/moleculer-addons/tree/master/packages/moleculer-mail templateFolder: path.join(__dirname, '../../templates'), from: null, @@ -27,7 +26,6 @@ const SingleMailNotificationsService = { events: { 'activitypub.inbox.received': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'activity' does not exist on type 'Option... Remove this comment to see the full error message const { activity, recipients } = ctx.params; if (this.settings.delay) { @@ -38,10 +36,8 @@ const SingleMailNotificationsService = { const account = await ctx.call('auth.account.findByWebId', { webId: recipientUri }); if (account) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. ctx.meta.webId = recipientUri; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - ctx.meta.dataset = this.settings.podProvider ? getSlugFromUri(recipientUri) : undefined; + ctx.meta.dataset = getDatasetFromUri(recipientUri); const locale = account?.preferredLocale || this.settings.defaultLocale; const notification = await ctx.call('activity-mapping.map', { activity, locale }); diff --git a/src/middleware/packages/sparql-endpoint/getRoute.ts b/src/middleware/packages/sparql-endpoint/getRoute.ts index c5585cbee..6aa9a0237 100644 --- a/src/middleware/packages/sparql-endpoint/getRoute.ts +++ b/src/middleware/packages/sparql-endpoint/getRoute.ts @@ -8,7 +8,7 @@ import { const middlewares = [parseHeader, negotiateAccept, negotiateContentType, parseRawBody, saveDatasetMeta]; -function getRoute(path: any) { +function getRoute(path: string) { return { path, name: 'sparql-endpoint', diff --git a/src/middleware/packages/sparql-endpoint/package.json b/src/middleware/packages/sparql-endpoint/package.json index e23ac172f..a5284162a 100644 --- a/src/middleware/packages/sparql-endpoint/package.json +++ b/src/middleware/packages/sparql-endpoint/package.json @@ -6,8 +6,10 @@ "author": "Virtual Assembly", "dependencies": { "@rdfjs/data-model": "2.1.1", + "@semapps/auth": "1.2.0", "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", + "@semapps/ontologies": "1.2.0", "@semapps/triplestore": "1.2.0", "moleculer-web": "^0.10.0-beta1", "url-join": "^4.0.1" diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index c3aaa34f6..aff769904 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -1,26 +1,24 @@ import path from 'path'; import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import { Account } from '@semapps/auth'; +import { voidOntology } from '@semapps/ontologies'; +import { ServiceSchema, Context } from 'moleculer'; import getRoute from './getRoute.ts'; const SparqlEndpointService = { name: 'sparqlEndpoint' as const, settings: { defaultAccept: 'text/turtle', - ignoreAcl: false, - podProvider: false + ignoreAcl: false }, - dependencies: ['triplestore', 'api', 'ldp'], + dependencies: ['triplestore', 'api', 'ldp', 'ontologies'], async started() { - const basePath = await this.broker.call('ldp.getBasePath'); - if (this.settings.podProvider) { - await this.broker.call('api.addRoute', { - route: getRoute(path.join(basePath, '/:username([^/.][^/]+)/sparql')), - toBottom: false - }); - } else { - await this.broker.call('api.addRoute', { route: getRoute(path.join(basePath, '/sparql')), toBottom: false }); - } + await this.broker.call('ontologies.register', voidOntology); + const basePath: string = await this.broker.call('ldp.getBasePath'); + await this.broker.call('api.addRoute', { + route: getRoute(path.join(basePath, '/:username([^/.][^/]+)/sparql')), + toBottom: false + }); }, actions: { query: { @@ -28,19 +26,17 @@ const SparqlEndpointService = { const query = ctx.params.query || ctx.meta.rawBody; const accept = ctx.params.accept || ctx.meta.headers?.accept || this.settings.defaultAccept; - if (this.settings.podProvider) { - const [account] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); - if (!account) throw new Error(`No account found with username ${ctx.params.username}`); + const [account]: Account[] = await ctx.call('auth.account.find', { query: { username: ctx.params.username } }); + if (!account) throw new Error(`No account found with username ${ctx.params.username}`); - if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { - throw new Error(`You can only query your own SPARQL endpoint`); - } + if (account.webId !== ctx.meta.webId && account.webId !== ctx.meta.impersonatedUser) { + throw new Error(`You can only query your own SPARQL endpoint`); } const response = await ctx.call('triplestore.query', { query, accept, - dataset: this.settings.podProvider ? ctx.params.username : undefined, + dataset: ctx.params.username, // In Pod provider config, query as system when the Pod owner is querying his own data webId: this.settings.ignoreAcl ? 'system' : ctx.meta.webId }); @@ -54,18 +50,17 @@ const SparqlEndpointService = { } }, events: { - 'auth.registered': { - async handler(ctx) { + 'auth.account.created': { + async handler(ctx: Context<{ webId: string }>) { const { webId } = ctx.params; - if (this.settings.podProvider) { - const services = await ctx.call('$node.services'); - if (services.some((s: any) => s.name === 'activitypub.actor')) { - await ctx.call('activitypub.actor.addEndpoint', { - actorUri: webId, - predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', - endpoint: urlJoin(webId, 'sparql') - }); - } + const services: ServiceSchema[] = await ctx.call('$node.services'); + if (services.some(s => s.name === 'activitypub.actor')) { + const baseUrl: string = await ctx.call('solid-storage.getBaseUrl'); + await ctx.call('activitypub.actor.addEndpoint', { + actorUri: webId, + predicate: 'http://rdfs.org/ns/void#sparqlEndpoint', + endpoint: urlJoin(baseUrl, 'sparql') + }); } } } diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index de5fdfbbe..0fbe9268a 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -12,7 +12,7 @@ const handledWacActions = [ const ObjectsWatcherMiddleware = (config = {}) => { // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type '{}'. - const { baseUrl, podProvider = false, postWithoutRecipients = false, transientActivities = false } = config; + const { baseUrl, postWithoutRecipients = false, transientActivities = false } = config; let relayActor: any; let excludedContainersPathRegex: any = []; let initialized = false; @@ -23,21 +23,14 @@ const ObjectsWatcherMiddleware = (config = {}) => { const isHandled = (actionName: any) => { // In a Pod provider config, we want to handle only LDP-related actions // The AnnouncerService takes care of resources sharing with other users - if (podProvider) { - return handledLdpActions.includes(actionName); - } else { - return handledLdpActions.includes(actionName) || handledWacActions.includes(actionName); - } + return handledLdpActions.includes(actionName); }; /** Get owner WebID of resource (by looking at the slash URI). */ const getActor = async (ctx: any, resourceUri: any) => { - if (podProvider) { - const url = new URL(resourceUri); - const podOwnerUri = `${url.origin}/${url.pathname.split('/')[1]}`; - return await ctx.call('activitypub.actor.awaitCreateComplete', { actorUri: podOwnerUri }); - } - return relayActor; + const url = new URL(resourceUri); + const podOwnerUri = `${url.origin}/${url.pathname.split('/')[1]}`; + return await ctx.call('activitypub.actor.awaitCreateComplete', { actorUri: podOwnerUri }); }; const clearWebAclCache = async (ctx: any, resourceUri: any, containerUri: any) => { @@ -91,11 +84,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { return { name: 'ObjectsWatcherMiddleware', async started(broker: any) { - if (!podProvider) { - await broker.waitForServices('activitypub.relay'); - relayActor = await broker.call('activitypub.relay.getActor'); - } - const registrations: Registration[] = await broker.call('ldp.registry.list'); for (const registration of registrations) { // TODO stop using pathRegex @@ -183,7 +171,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { oldRecipients = await getRecipients(ctx, ctx.params.resourceUri); break; - case 'webacl.resource.deleteAllRights': + case 'webacl.resource.deleteAllRights': { // Ensure the resource has not already been deleted (this action is used by the WebAclMiddleware when resources are deleted) const containerExist = await ctx.call('ldp.container.exist', { containerUri: ctx.params.resourceUri }); const resourceExist = await ctx.call('ldp.resource.exist', { @@ -195,6 +183,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { oldRecipients = await getRecipients(ctx, ctx.params.resourceUri); } break; + } } /* diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index 448a3b1e2..b99e48722 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -14,7 +14,6 @@ const AggregatorSchema = { this.broker.createService({ mixins: [SynchronizerService], settings: { - podProvider: false, synchronizeContainers: false, attachToLocalContainers: true } diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index c8e53ace6..31d939245 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -26,7 +26,6 @@ const MirrorSchema = { this.broker.createService({ mixins: [SynchronizerService], settings: { - podProvider: false, synchronizeContainers: true, attachToLocalContainers: false } @@ -47,7 +46,6 @@ const MirrorSchema = { mirror: { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type '{ type: "string"; optional: false; }' is not... Remove this comment to see the full error message serverUrl: { type: 'string', optional: false } }, async handler(ctx) { diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 921e43c00..03361665e 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -192,9 +192,9 @@ const VoidSchema = { o: literal(this.settings.baseUrl) }); - const services = await ctx.call('$node.services'); + const services: ServiceSchema[] = await ctx.call('$node.services'); const hasSparql = - services.filter((s: any) => s.name === 'sparqlEndpoint').length > 0 + services.filter(s => s.name === 'sparqlEndpoint').length > 0 ? urlJoin(this.settings.baseUrl, 'sparql') : undefined; if (hasSparql) diff --git a/src/middleware/tests/activitypub/actors.test.ts b/src/middleware/tests/activitypub/actors.test.ts index d093831c7..0afad9138 100644 --- a/src/middleware/tests/activitypub/actors.test.ts +++ b/src/middleware/tests/activitypub/actors.test.ts @@ -1,44 +1,42 @@ import urlJoin from 'url-join'; +import { ServiceBroker } from 'moleculer'; + import initialize from './initialize.ts'; +import { createAccount, dropAllDatasets } from '../utils.ts'; jest.setTimeout(70000); -const NUM_USERS = 1; - -describe('Actors are correctly created', () => { - let broker: any; - const actors: any = []; - let alice: any; - beforeAll(async () => { - broker = await initialize(3000, 'testData', 'settings'); +let broker: ServiceBroker; +let alice: any; - for (let i = 1; i <= NUM_USERS; i++) { - const { webId } = await broker.call('auth.signup', require(`./data/actor${i}.json`)); - actors[i] = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName: any, params: any, options = {}) => - // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. - broker.call(actionName, params, { ...options, meta: { ...options.meta, webId } }); - } +beforeAll(async () => { + await dropAllDatasets(); + broker = await initialize(1); + await broker.start(); + alice = await createAccount(broker, 'alice'); +}); - alice = actors[1]; - }); +afterAll(async () => { + await broker.stop(); +}); - afterAll(async () => { - await broker.stop(); - }); +describe('Actors are correctly created', () => { + test('Actor has the required information', async () => { + const aliceData = await alice.call('webid.get'); - test('Actor has the required informations', async () => { - expect(alice.type).toContain('Person'); - expect(alice.preferredUsername).toBe('alice'); - expect(alice.outbox).toBe(urlJoin(alice.id, 'outbox')); - expect(alice.inbox).toBe(urlJoin(alice.id, 'inbox')); - expect(alice.followers).toBe(urlJoin(alice.id, 'followers')); - expect(alice.following).toBe(urlJoin(alice.id, 'following')); - expect(alice.publicKey).toMatchObject({ - // @ts-expect-error TS(2304): Cannot find name 'expect'. + expect(aliceData.type).toContain('Person'); + expect(aliceData.preferredUsername).toBe('alice'); + expect(aliceData.outbox).not.toBeUndefined(); + expect(aliceData.inbox).not.toBeUndefined(); + expect(aliceData.followers).not.toBeUndefined(); + expect(aliceData.following).not.toBeUndefined(); + expect(aliceData.liked).not.toBeUndefined(); + expect(aliceData.endpoints['void:sparqlEndpoint']).toBe(urlJoin(alice.baseUrl, 'sparql')); + expect(aliceData.publicKey).toMatchObject({ type: expect.arrayContaining(['https://www.w3.org/ns/auth/rsa#RSAKey', 'sec:VerificationMethod']), - controller: alice.id, - owner: alice.id + controller: aliceData.id, + owner: aliceData.id, + publicKeyPem: expect.anything() }); }); }); diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 081aef7cb..877085f8e 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -1,15 +1,13 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message -import fse from 'fs-extra'; import path from 'path'; -import urlJoin from 'url-join'; import { ServiceBroker } from 'moleculer'; import { AuthLocalService } from '@semapps/auth'; +import { solid } from '@semapps/ontologies'; import { CoreService } from '@semapps/core'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; -import { FULL_OBJECT_TYPES, FULL_ACTOR_TYPES } from '@semapps/activitypub'; +import { FULL_OBJECT_TYPES } from '@semapps/activitypub'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { dropDataset, clearQueue } from '../utils.ts'; +import { clearQueue } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const containers = [ @@ -19,16 +17,15 @@ const containers = [ } ]; -const initialize = async (port: any, mainDataset: any, accountsDataset: any, queueServiceDb = 0) => { +const initialize = async (number: number) => { + const port = 3000 + number; const baseUrl = `http://localhost:${port}/`; - const queueServiceUrl = `redis://localhost:6379/${queueServiceDb}`; + const queueServiceUrl = `redis://localhost:6379/${number}`; - await dropDataset(mainDataset); - await dropDataset(accountsDataset); await clearQueue(queueServiceUrl); const broker = new ServiceBroker({ - nodeID: `server${port}`, + nodeID: `server${number}`, // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl })], logger: { @@ -39,11 +36,8 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que } }); - // Remove all actors keys - await fse.emptyDir(path.resolve(__dirname, './actors')); - - // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message broker.createService({ + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message mixins: [CoreService], settings: { baseUrl, @@ -52,10 +46,10 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que url: CONFIG.SPARQL_ENDPOINT, user: CONFIG.JENA_USER, password: CONFIG.JENA_PASSWORD, - mainDataset, secure: false // TODO Remove when we move to Fuseki 5 }, containers, + ontologies: [solid], void: false, mirror: false, activitypub: { @@ -63,11 +57,11 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que }, api: { port - }, - webid: { - path: '/as/actor', - types: Object.values(FULL_ACTOR_TYPES) } + // webid: { + // path: '/as/actor', + // types: Object.values(FULL_ACTOR_TYPES) + // } } }); @@ -77,50 +71,48 @@ const initialize = async (port: any, mainDataset: any, accountsDataset: any, que settings: { baseUrl, jwtPath: path.resolve(__dirname, './jwt'), - accountsDataset, + accountsDataset: `settings${number}`, mail: false } }); - await broker.start(); - - // setting some write permission on the containers for anonymous user, which is the one that will be used in the tests. - await broker.call('webacl.resource.addRights', { - webId: 'system', - resourceUri: urlJoin(baseUrl, 'as/object'), - additionalRights: { - anon: { - write: true - } - } - }); - await broker.call('webacl.resource.addRights', { - webId: 'system', - resourceUri: urlJoin(baseUrl, 'as/actor'), - additionalRights: { - anon: { - write: true - } - } - }); - await broker.call('webacl.resource.addRights', { - webId: 'system', - resourceUri: urlJoin(baseUrl, 'as/activity'), - additionalRights: { - anon: { - write: true - } - } - }); - await broker.call('webacl.resource.addRights', { - webId: 'system', - resourceUri: urlJoin(baseUrl, 'as/collection'), - additionalRights: { - anon: { - write: true - } - } - }); + // // setting some write permission on the containers for anonymous user, which is the one that will be used in the tests. + // await broker.call('webacl.resource.addRights', { + // webId: 'system', + // resourceUri: urlJoin(baseUrl, 'as/object'), + // additionalRights: { + // anon: { + // write: true + // } + // } + // }); + // await broker.call('webacl.resource.addRights', { + // webId: 'system', + // resourceUri: urlJoin(baseUrl, 'as/actor'), + // additionalRights: { + // anon: { + // write: true + // } + // } + // }); + // await broker.call('webacl.resource.addRights', { + // webId: 'system', + // resourceUri: urlJoin(baseUrl, 'as/activity'), + // additionalRights: { + // anon: { + // write: true + // } + // } + // }); + // await broker.call('webacl.resource.addRights', { + // webId: 'system', + // resourceUri: urlJoin(baseUrl, 'as/collection'), + // additionalRights: { + // anon: { + // write: true + // } + // } + // }); return broker; }; diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index 8b3b8b8b8..814279ac2 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -284,7 +284,6 @@ describe('Permissions are correctly set on outbox', () => { afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(outboxFetchedByAnon.orderedItems[0]).toMatchObject({ actor: sebastien.id, type: ACTIVITY_TYPES.UPDATE, diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 94a4cc0a7..a1307bcca 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -92,7 +92,6 @@ const initialize = async (allowSlugs = true): Promise => { mixins: [AuthLocalService], settings: { baseUrl: CONFIG.HOME_URL, - podProvider: true, jwtPath: path.resolve(__dirname, '../jwt'), accountsDataset: CONFIG.SETTINGS_DATASET } diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 82426c571..d7ae504ea 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -9,7 +9,7 @@ type FetchOptions = Omit & { body?: ArrayBuffer | ArrayBufferView | ReadableStream | string | URLSearchParams | FormData | object; }; -export const listDatasets = async () => { +export const listDatasets = async (): Promise => { const response = await fetch(`${CONFIG.SPARQL_ENDPOINT}$/datasets`, { headers: { Authorization: `Basic ${Buffer.from(`${CONFIG.JENA_USER}:${CONFIG.JENA_PASSWORD}`).toString('base64')}` @@ -24,7 +24,7 @@ export const listDatasets = async () => { } }; -export const dropDataset = (dataset: any) => +export const dropDataset = (dataset: string) => // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message fetch(urlJoin(CONFIG.SPARQL_ENDPOINT, dataset, 'update'), { method: 'POST', @@ -35,6 +35,13 @@ export const dropDataset = (dataset: any) => } }); +export const dropAllDatasets = async () => { + const datasets = await listDatasets(); + for (let dataset of datasets) { + await dropDataset(dataset); + } +}; + export const fetchServer = async (url: string, options: FetchOptions = {}) => { if (!url) throw new Error('No url provided to fetchServer'); if (!options.headers) options.headers = new fetch.Headers(); @@ -117,7 +124,7 @@ export const createAccount = async (broker: ServiceBroker, username: string) => }; }; -export const clearQueue = async (queueServiceUrl: any) => { +export const clearQueue = async (queueServiceUrl: string) => { // Clear queue const redisClient = new Redis(queueServiceUrl); await redisClient.flushdb(); From 38dd70c48d192ca3b9a8a7cc7f5556a0c431e7d8 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 14 Nov 2025 14:54:46 +0100 Subject: [PATCH 112/165] Working outbox test --- src/middleware/packages/activitypub/index.ts | 2 + .../mixins/controlled-collection.ts | 44 +++ .../packages/activitypub/package.json | 1 + .../subservices/collection/actions/get.ts | 5 +- .../subservices/collection/index.ts | 23 +- .../subservices/collections-registry.ts | 80 ++++- .../activitypub/subservices/follow.ts | 5 +- .../services/activitypub/subservices/inbox.ts | 48 ++- .../services/activitypub/subservices/like.ts | 5 +- .../activitypub/subservices/outbox.ts | 101 +++--- .../services/activitypub/subservices/reply.ts | 3 +- .../services/activitypub/subservices/share.ts | 3 +- src/middleware/packages/activitypub/types.ts | 19 ++ .../ldp/mixins/controlled-container.ts | 10 + .../packages/ldp/services/api/actions/post.ts | 91 +++--- .../ldp/services/permissions/actions/has.ts | 1 - .../ldp/services/permissions/index.ts | 2 +- .../packages/ldp/services/resource/index.ts | 2 +- src/middleware/packages/ldp/types.ts | 3 +- .../triplestore/subservices/named-graph.ts | 33 +- .../tests/activitypub/initialize.ts | 3 + .../tests/activitypub/outbox.test.ts | 308 +++++++----------- src/middleware/tests/utils.ts | 11 +- 23 files changed, 472 insertions(+), 331 deletions(-) create mode 100644 src/middleware/packages/activitypub/mixins/controlled-collection.ts create mode 100644 src/middleware/packages/activitypub/types.ts diff --git a/src/middleware/packages/activitypub/index.ts b/src/middleware/packages/activitypub/index.ts index acc8931a1..527e678fb 100644 --- a/src/middleware/packages/activitypub/index.ts +++ b/src/middleware/packages/activitypub/index.ts @@ -3,6 +3,7 @@ import ActivityPubMigrationService from './services/migration.ts'; import ActivityMappingService from './services/activity-mapping.ts'; import RelayService from './services/relay.ts'; import BotMixin from './mixins/bot.ts'; +import ControlledCollectionMixin from './mixins/controlled-collection.ts'; import ActivitiesHandlerMixin from './mixins/activities-handler.ts'; import matchActivity from './utils/matchActivity.ts'; import containers from './containers.ts'; @@ -14,6 +15,7 @@ export { ActivityMappingService, RelayService, BotMixin, + ControlledCollectionMixin, ActivitiesHandlerMixin, matchActivity, containers diff --git a/src/middleware/packages/activitypub/mixins/controlled-collection.ts b/src/middleware/packages/activitypub/mixins/controlled-collection.ts new file mode 100644 index 000000000..15d3b2970 --- /dev/null +++ b/src/middleware/packages/activitypub/mixins/controlled-collection.ts @@ -0,0 +1,44 @@ +import { ServiceSchema } from 'moleculer'; +import { CollectionRegistration } from '../types.ts'; + +const ControlledCollectionMixin = { + settings: { + path: null, + attachToTypes: [], + attachPredicate: null, + ordered: true, + itemsPerPage: 10, + dereferenceItems: true, + sortPredicate: 'as:published', + sortOrder: 'semapps:DescOrder', + permissions: {}, + controlledActions: {} + }, + dependencies: ['activitypub.object', 'activitypub.collection', 'activitypub.collections-registry'], + async started() { + this.collectionRegistration = (await this.broker.call('activitypub.collections-registry.register', { + ...this.settings, + controlledActions: { + post: `${this.name}.apiPost`, + ...this.settings.controlledActions + } + })) as CollectionRegistration; + }, + actions: { + getUri: { + params: { + objectUri: { type: 'string', optional: true } + }, + async handler(ctx) { + const { objectUri } = ctx.params; + + return await ctx.call('activitypub.collections-registry.getCollectionUri', { + objectUri, + attachPredicate: this.collectionRegistration?.attachPredicate + }); + } + } + } +} satisfies Partial; + +export default ControlledCollectionMixin; diff --git a/src/middleware/packages/activitypub/package.json b/src/middleware/packages/activitypub/package.json index 0e884612a..c1cc71abb 100644 --- a/src/middleware/packages/activitypub/package.json +++ b/src/middleware/packages/activitypub/package.json @@ -13,6 +13,7 @@ "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", "@semapps/triplestore": "1.2.0", + "@semapps/webacl": "1.2.0", "handlebars": "^4.7.7", "moleculer-bull": "^0.2.5", "moleculer-db": "^0.8.16", diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 92c68d741..bcbb9a34b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -287,7 +287,7 @@ function formatResponse( }; } -const Schema = { +const GetAction = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -310,7 +310,6 @@ const Schema = { await ctx.call('permissions.check', { uri: collectionUri, type: 'resource', mode: 'acl:Read', webId }); // Get dataset here since we can't call the method from internal functions - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. const dataset = getDatasetFromUri(collectionUri); sanitizeSparqlUri(collectionUri); @@ -363,4 +362,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default GetAction; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index bfc9552c6..e7b9c2eda 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -4,6 +4,7 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { Errors as E } from 'moleculer-web'; import { ServiceSchema, Errors } from 'moleculer'; import getAction from './actions/get.ts'; +import { CollectionRegistration } from '../../../../types.ts'; const { MoleculerError } = Errors; @@ -253,9 +254,29 @@ const CollectionService = { } }, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { resourceUr... Remove this comment to see the full error message get: getAction, + postOnResource: { + async handler(ctx) { + const { resourceUri: collectionUri, payload } = ctx.params; + + const collectionRegistration: CollectionRegistration = await ctx.call( + 'activitypub.collections-registry.getByUri', + { collectionUri } + ); + + // Check if the collection has a special handling for POST + if (collectionRegistration?.controlledActions?.post) { + await ctx.call(collectionRegistration.controlledActions.post, { + collectionUri, + payload + }); + } else { + throw new E.ForbiddenError(); + } + } + }, + clear: { /* * Empty the collection, deleting all items it contains. diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 62e3ee4e9..9fb05f361 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -1,9 +1,10 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; import { Account } from '@semapps/auth'; -import { arrayOf } from '@semapps/ldp'; +import { arrayOf, getDatasetFromUri } from '@semapps/ldp'; import { ServiceSchema, Context } from 'moleculer'; import { AS_PREFIX } from '../../../constants.ts'; +import { CollectionRegistration } from '../../../types.ts'; const CollectionsRegistryService = { name: 'activitypub.collections-registry' as const, @@ -18,7 +19,7 @@ const CollectionsRegistryService = { actions: { register: { async handler(ctx) { - let { path, name, attachToTypes, ...options } = ctx.params; + let { path, name, ...options } = ctx.params; if (!name) name = path; // Ignore undefined options @@ -27,7 +28,9 @@ const CollectionsRegistryService = { ); // Persist the collection in memory - this.registeredCollections.push({ path, name, attachToTypes, ...options }); + this.registeredCollections.push({ path, name, ...options }); + + return { path, name, ...options }; } }, @@ -50,16 +53,17 @@ const CollectionsRegistryService = { sortPredicate, sortOrder, permissions - } = collection || {}; - const collectionUri = urlJoin(objectUri, path); + } = collection as CollectionRegistration; + + const collectionTempId = objectUri + attachPredicate; + let collectionUri = await this.actions.getCollectionUri({ objectUri, attachPredicate }, { parentCtx: ctx }); - const exists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); - if (!exists && !this.collectionsInCreation.includes(collectionUri)) { + if (!collectionUri && !this.collectionsInCreation.includes(collectionTempId)) { // Prevent race conditions by keeping the collections being created in memory - this.collectionsInCreation.push(collectionUri); + this.collectionsInCreation.push(collectionTempId); // Create the collection - await ctx.call('activitypub.collection.post', { + collectionUri = await ctx.call('activitypub.collection.post', { resource: { type: ordered ? ['Collection', 'OrderedCollection'] : 'Collection', summary, @@ -68,6 +72,7 @@ const CollectionsRegistryService = { 'semapps:sortPredicate': sortPredicate, 'semapps:sortOrder': sortOrder }, + slug: (await ctx.call('ldp.getSetting', { key: 'allowSlugs' })) ? path : undefined, webId: 'system', permissions // Handled by the WebAclMiddleware, if present }); @@ -90,7 +95,7 @@ const CollectionsRegistryService = { ); // Now the collection has been created, we can remove it (this way we don't use too much memory) - this.collectionsInCreation = this.collectionsInCreation.filter((c: any) => c !== collectionUri); + this.collectionsInCreation = this.collectionsInCreation.filter((c: any) => c !== collectionTempId); } return collectionUri; @@ -110,6 +115,61 @@ const CollectionsRegistryService = { } }, + getCollectionUri: { + params: { + objectUri: { type: 'string' }, + attachPredicate: { type: 'string' } + }, + async handler(ctx) { + const { objectUri, attachPredicate } = ctx.params; + + const results: any = await ctx.call('triplestore.query', { + query: ` + SELECT ?collectionUri + WHERE { + GRAPH <${objectUri}> { + <${objectUri}> <${attachPredicate}> ?collectionUri + } + } + `, + dataset: getDatasetFromUri(objectUri), + webId: 'system' + }); + + return results[0]?.collectionUri?.value; + } + }, + + getByUri: { + params: { + collectionUri: { type: 'string' } + }, + async handler(ctx) { + const { collectionUri } = ctx.params; + + const results: any = await ctx.call('triplestore.query', { + query: ` + SELECT ?objectUri ?attachPredicate ?type + WHERE { + GRAPH ?objectUri { + ?objectUri ?attachPredicate <${collectionUri}> . + FILTER ( ?attachPredicate != ) + } + } + `, + dataset: getDatasetFromUri(collectionUri), + webId: 'system' + }); + + const attachPredicate = arrayOf(results)[0]?.attachPredicate.value; + + // Find the first registration that match the attach predicate and the object type(s) + return this.registeredCollections.find( + (reg: CollectionRegistration) => reg.attachPredicate === attachPredicate + ); + } + }, + createAndAttachMissingCollections: { async handler(ctx) { for (const collection of this.registeredCollections) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index b6d1c92df..d92215711 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -2,6 +2,7 @@ import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import { CollectionRegistration } from '../../../types.ts'; const FollowService = { name: 'activitypub.follow' as const, @@ -15,7 +16,7 @@ const FollowService = { ordered: false, dereferenceItems: false, permissions: collectionPermissionsWithAnonRead - }, + } as CollectionRegistration, followingCollectionOptions: { path: '/following', attachToTypes: Object.values(ACTOR_TYPES), @@ -23,7 +24,7 @@ const FollowService = { ordered: false, dereferenceItems: false, permissions: collectionPermissionsWithAnonRead - } + } as CollectionRegistration }, dependencies: ['activitypub.outbox', 'activitypub.collection'], async started() { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 2107f503e..e57fc7626 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -4,33 +4,47 @@ import { ServiceSchema, Errors } from 'moleculer'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; +import ControlledCollectionMixin from '../../../mixins/controlled-collection.ts'; const { MoleculerError } = Errors; const InboxService = { name: 'activitypub.inbox' as const, - mixins: [AwaitActivityMixin], + mixins: [ControlledCollectionMixin, AwaitActivityMixin], settings: { - collectionOptions: { - path: '/inbox', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'http://www.w3.org/ns/ldp#inbox', - ordered: true, - itemsPerPage: 10, - dereferenceItems: true, - sortPredicate: 'as:published', - sortOrder: 'semapps:DescOrder', - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.collection', 'activitypub.collections-registry'], - async started() { - await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); + path: '/inbox', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'http://www.w3.org/ns/ldp#inbox', + ordered: true, + itemsPerPage: 10, + dereferenceItems: true, + sortPredicate: 'as:published', + sortOrder: 'semapps:DescOrder', + permissions: collectionPermissionsWithAnonRead }, actions: { + apiPost: { + async handler(ctx) { + let { collectionUri, payload } = ctx.params; + + await ctx.call('activitypub.inbox.post', { + collectionUri, + ...payload + }); + + ctx.meta.$statusCode = 202; + } + }, post: { async handler(ctx) { - const { collectionUri, ...activity } = ctx.params; + let { collectionUri, ...activity } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + + // If the collection URI is not provided, find it from the webId (may happen if this action is called directly) + if (!collectionUri) { + if (!isWebId(webId)) throw Error(`If containerUri is not provided, a webId is required. Provided: ${webId}`); + collectionUri = await this.actions.getUri({ objectUri: webId }, { parentCtx: ctx }); + } if (!collectionUri || !collectionUri.startsWith('http')) { throw new Error(`The collectionUri ${collectionUri} is not a valid URL`); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index b4aba4472..88fdc89d6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -2,6 +2,7 @@ import { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; +import { CollectionRegistration } from '../../../types.ts'; const LikeService = { name: 'activitypub.like' as const, @@ -14,7 +15,7 @@ const LikeService = { ordered: false, dereferenceItems: false, permissions: collectionPermissionsWithAnonRead - }, + } as CollectionRegistration, likedCollectionOptions: { path: '/liked', attachToTypes: Object.values(ACTOR_TYPES), @@ -22,7 +23,7 @@ const LikeService = { ordered: false, dereferenceItems: false, permissions: collectionPermissionsWithAnonRead - } + } as CollectionRegistration }, dependencies: ['activitypub.outbox', 'activitypub.collection'], async started() { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index 9f09ca678..3088a4d9b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -3,11 +3,12 @@ import fetch from 'node-fetch'; import { Errors as E } from 'moleculer-web'; import { Account } from '@semapps/auth'; import { MIME_TYPES } from '@semapps/mime-types'; -import { getType, arrayOf, getDatasetFromUri } from '@semapps/ldp'; +import { getType, arrayOf, getDatasetFromUri, isWebId } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; -import { collectionPermissionsWithAnonRead, getSlugFromUri } from '../../../utils.ts'; +import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; +import ControlledCollectionMixin from '../../../mixins/controlled-collection.ts'; const queueOptions = process.env.NODE_ENV === 'test' @@ -23,31 +24,48 @@ const queueOptions = const OutboxService = { name: 'activitypub.outbox' as const, - mixins: [AwaitActivityMixin], + mixins: [ControlledCollectionMixin, AwaitActivityMixin], settings: { baseUri: null, - collectionOptions: { - path: '/outbox', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'https://www.w3.org/ns/activitystreams#outbox', - ordered: true, - itemsPerPage: 10, - dereferenceItems: true, - sortPredicate: 'as:published', - sortOrder: 'semapps:DescOrder', - permissions: collectionPermissionsWithAnonRead - } - }, - dependencies: ['activitypub.object', 'activitypub.collection', 'activitypub.collections-registry'], - async started() { - await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); + path: '/outbox', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'https://www.w3.org/ns/activitystreams#outbox', + ordered: true, + itemsPerPage: 10, + dereferenceItems: true, + sortPredicate: 'as:published', + sortOrder: 'semapps:DescOrder', + permissions: collectionPermissionsWithAnonRead }, actions: { + apiPost: { + async handler(ctx) { + let { collectionUri, payload } = ctx.params; + + const activity: any = await this.actions.post({ collectionUri, ...payload }, { parentCtx: ctx }); + + ctx.meta.$responseHeaders = { + Location: activity.id || activity['@id'], + 'Content-Length': 0 + }; + // We need to set this also here (in addition to above) or we get a Moleculer warning + ctx.meta.$location = activity.id || activity['@id']; + ctx.meta.$statusCode = 201; + } + }, post: { async handler(ctx) { let { collectionUri, username, transient, ...activity } = ctx.params; + const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + let activityUri; + // If the collection URI is not provided, find it from the webId (may happen if this action is called directly) + if (!collectionUri) { + if (!isWebId(webId)) throw Error(`If containerUri is not provided, a webId is required. Provided: ${webId}`); + collectionUri = await this.actions.getUri({ objectUri: webId }, { parentCtx: ctx }); + } + const collectionExists = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); if (!collectionExists) { throw new E.NotFoundError(); @@ -137,7 +155,7 @@ const OutboxService = { const localRecipients = []; const remoteRecipients = []; - const recipients = await ctx.call('activitypub.activity.getRecipients', { activity }); + const recipients: string[] = await ctx.call('activitypub.activity.getRecipients', { activity }); for (const recipientUri of recipients) { if (this.isLocalActor(recipientUri)) { @@ -248,19 +266,16 @@ const OutboxService = { // If the activity is transient, pass the full object // This will be used in particular for Solid notifications // which will send the full activity to the listeners - this.broker.emit( - 'activitypub.collection.added', - { - collectionUri: recipientInbox, - item: activity - }, - { meta: { webId: null, dataset: null } } - ); + this.broker.emit('activitypub.collection.added', { + collectionUri: recipientInbox, + item: activity + }); } success.push(recipientUri); } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + console.error(e); this.logger.warn(`Error when posting activity to local actor ${recipientUri}: ${e.message}`); failures.push(recipientUri); } @@ -278,15 +293,21 @@ const OutboxService = { async process(job: any) { const { activity, recipientUri } = job.data; + const dataset = getDatasetFromUri(activity.actor); + // During tests, do not do post to remote servers if (process.env.NODE_ENV === 'test' && !recipientUri.startsWith('http://localhost')) return; // @ts-expect-error TS(7022): 'recipientInbox' implicitly has type 'any' because... Remove this comment to see the full error message - const recipientInbox = await this.broker.call('activitypub.actor.getCollectionUri', { - actorUri: recipientUri, - predicate: 'inbox', - webId: 'system' - }); + const recipientInbox = await this.broker.call( + 'activitypub.actor.getCollectionUri', + { + actorUri: recipientUri, + predicate: 'inbox', + webId: 'system' + }, + { meta: { dataset } } + ); if (!recipientInbox) { throw new Error(`Error when posting activity to remote actor ${recipientUri}: no inbox attached`); @@ -295,12 +316,16 @@ const OutboxService = { const body = JSON.stringify(activity); // @ts-expect-error TS(7022): 'signatureHeaders' implicitly has type 'any' becau... Remove this comment to see the full error message - const signatureHeaders = await this.broker.call('signature.generateSignatureHeaders', { - url: recipientInbox, - method: 'POST', - body, - actorUri: activity.actor - }); + const signatureHeaders = await this.broker.call( + 'signature.generateSignatureHeaders', + { + url: recipientInbox, + method: 'POST', + body, + actorUri: activity.actor + }, + { meta: { dataset } } + ); // @ts-expect-error TS(7022): 'response' implicitly has type 'any' because it do... Remove this comment to see the full error message const response = await fetch(recipientInbox, { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 8c7f8efc7..26137d9d8 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -4,6 +4,7 @@ import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import matchActivity from '../../../utils/matchActivity.ts'; +import { CollectionRegistration } from '../../../types.ts'; const ReplyService = { name: 'activitypub.reply' as const, @@ -16,7 +17,7 @@ const ReplyService = { ordered: false, dereferenceItems: true, permissions: collectionPermissionsWithAnonRead - } + } as CollectionRegistration }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index 4af3487b1..58c11fbcb 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -3,6 +3,7 @@ import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import matchActivity from '../../../utils/matchActivity.ts'; +import { CollectionRegistration } from '../../../types.ts'; const ShareService = { name: 'activitypub.share' as const, @@ -15,7 +16,7 @@ const ShareService = { ordered: false, dereferenceItems: false, permissions: collectionPermissionsWithAnonRead - } + } as CollectionRegistration }, dependencies: ['activitypub.outbox', 'activitypub.collection'], actions: { diff --git a/src/middleware/packages/activitypub/types.ts b/src/middleware/packages/activitypub/types.ts new file mode 100644 index 000000000..a02ccf68b --- /dev/null +++ b/src/middleware/packages/activitypub/types.ts @@ -0,0 +1,19 @@ +import { WacPermissionFunction, WacPermissionObject } from '@semapps/webacl'; + +interface CollectionControlledActions { + post: string; +} + +export interface CollectionRegistration { + path?: string; + summary?: string; + attachToTypes: string[]; + attachPredicate: string; + ordered: boolean; + itemsPerPage: number; + dereferenceItems: boolean; + sortPredicate: string; + sortOrder: 'semapps:DescOrder' | 'semapps:AscOrder'; + permissions: WacPermissionFunction | WacPermissionObject; + controlledActions: CollectionControlledActions; +} diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 47f0094d0..931eb0f9e 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,3 +1,5 @@ +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; import { arrayOf, delay, getParentContainerUri } from '../utils.ts'; @@ -29,6 +31,7 @@ const ControlledContainerMixin = { patch: `${this.name}.patch`, put: `${this.name}.put`, delete: `${this.name}.delete`, + postOnResource: `${this.name}.postOnResource`, ...this.settings.controlledActions }, ...rest @@ -113,6 +116,13 @@ const ControlledContainerMixin = { } }, + postOnResource: { + handler() { + // By default, LDP does not allow to POST on resources + throw new E.ForbiddenError(); + } + }, + exist: { handler(ctx) { return ctx.call('ldp.resource.exist', ctx.params); diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index 012afd4d4..cadff3e25 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -5,6 +5,7 @@ import { v4 as uuidv4 } from 'uuid'; import mime from 'mime-types'; import { Errors } from 'moleculer'; import { getDatasetFromUri } from '../../../utils.ts'; +import { Registration } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -12,51 +13,67 @@ export default async function post(this: any, ctx: any) { try { let { username, slugParts, ...resource } = ctx.params; - const containerUri = this.getUriFromSlugParts(slugParts, username); - ctx.meta.dataset = getDatasetFromUri(containerUri); + const uri = this.getUriFromSlugParts(slugParts, username); + ctx.meta.dataset = getDatasetFromUri(uri); - let resourceUri; - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); - if (ctx.meta.parser !== 'file') { - const contentType = ctx.meta.headers['content-type']; + const types = await ctx.call('ldp.resource.getTypes', { resourceUri: uri }); - // If the resource is Turtle or N-Triples, first convert it to JSON-LD - if (contentType && contentType !== MIME_TYPES.JSON) { - resource = await ctx.call('jsonld.parser.fromRDF', { - input: ctx.meta.rawBody, - options: { format: contentType } + if (types.includes('http://www.w3.org/ns/ldp#Container')) { + let resourceUri; + + const { controlledActions }: Registration = await ctx.call('ldp.registry.getByUri', { containerUri: uri }); + if (ctx.meta.parser !== 'file') { + const contentType = ctx.meta.headers['content-type']; + + // If the resource is Turtle or N-Triples, first convert it to JSON-LD + if (contentType && contentType !== MIME_TYPES.JSON) { + resource = await ctx.call('jsonld.parser.fromRDF', { + input: ctx.meta.rawBody, + options: { format: contentType } + }); + delete resource.id; + } + + resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { + containerUri: uri, + slug: ctx.meta.headers.slug, + resource }); - delete resource.id; - } + } else { + if (ctx.params.files.length > 1) { + throw new MoleculerError(`Multiple file upload not supported`, 400, 'BAD_REQUEST'); + } - resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { - containerUri, - slug: ctx.meta.headers.slug, - resource - }); - } else { - if (ctx.params.files.length > 1) { - throw new MoleculerError(`Multiple file upload not supported`, 400, 'BAD_REQUEST'); + const extension = mime.extension(ctx.params.files[0].mimetype); + const slug = extension ? `${uuidv4()}.${extension}}` : uuidv4(); + + resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { + containerUri: uri, + slug, + file: ctx.params.files[0], + contentType: MIME_TYPES.JSON + }); } - const extension = mime.extension(ctx.params.files[0].mimetype); - const slug = extension ? `${uuidv4()}.${extension}}` : uuidv4(); + ctx.meta.$responseHeaders = { + Location: resourceUri, + Link: '; rel="type"', + 'Content-Length': 0 + }; + // We need to set this also here (in addition to above) or we get a Moleculer warning + ctx.meta.$location = resourceUri; + ctx.meta.$statusCode = 201; + } else { + // If this is a resource, check if there is a special handling (used by inbox and outbox collections) + const { controlledActions }: Registration = await ctx.call('ldp.registry.getByUri', { resourceUri: uri }); - resourceUri = await ctx.call(controlledActions.post || 'ldp.container.post', { - containerUri, - slug, - file: ctx.params.files[0], - contentType: MIME_TYPES.JSON - }); + if (controlledActions?.postOnResource) { + await ctx.call(controlledActions.postOnResource, { + resourceUri: uri, + payload: resource + }); + } } - ctx.meta.$responseHeaders = { - Location: resourceUri, - Link: '; rel="type"', - 'Content-Length': 0 - }; - // We need to set this also here (in addition to above) or we get a Moleculer warning - ctx.meta.$location = resourceUri; - ctx.meta.$statusCode = 201; } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. if (!e.code || (e.code < 400 && e.code >= 500)) console.error(e); diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index 6b37aac90..40a91804e 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -17,7 +17,6 @@ const Schema = { if (webId === 'system') return true; - // @ts-expect-error TS(2488): Type 'string | number | boolean | any[] | Record 0) { - counter += 1; - uri = urlJoin(baseUrl, slug + counter); + // Find an URI that does not already exists + let counter = 0; + do { + if (slug) { + if (counter > 0) { + counter += 1; + uri = urlJoin(baseUrl, slug + counter); + } else { + uri = urlJoin(baseUrl, slug); + } } else { - uri = urlJoin(baseUrl, slug); + uri = urlJoin(baseUrl, uuidv4()); } - } else { - uri = urlJoin(baseUrl, uuidv4()); - } - } while (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })); + } while (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })); + } await ctx.call('triplestore.update', { query: `INSERT DATA { GRAPH <${uri}> {} }`, diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 877085f8e..05b9a22c9 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -55,6 +55,9 @@ const initialize = async (number: number) => { activitypub: { queueServiceUrl }, + ldp: { + allowSlugs: true + }, api: { port } diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index 814279ac2..f03820ca9 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -1,59 +1,44 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; +import { dropAllDatasets, createAccount } from '../utils.ts'; jest.setTimeout(50_000); -let broker: any; -let broker2: any; -beforeAll(async () => { - broker = await initialize(3000, 'testData', 'settings'); - broker2 = broker; -}); - -afterAll(async () => { - if (broker) await broker.stop(); -}); - -describe('Permissions are correctly set on outbox', () => { - let simon: any; - let sebastien: any; +let brokers: ServiceBroker[] = []; +let alice: any; +let bob: any; - test('Create actor', async () => { - const { webId: sebastienUri } = await broker.call('auth.signup', { - username: 'srosset81', - email: 'sebastien@test.com', - password: 'test', - name: 'Sébastien' - }); +describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) => { + let objectPrivateFirst: any; - sebastien = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: sebastienUri }); + beforeAll(async () => { + await dropAllDatasets(); - const { webId: simonUri } = await broker2.call('auth.signup', { - username: 'simonlouvet', - email: 'simon@test.com', - password: 'test', - name: 'Simon' - }); + for (let i = 1; i <= numServers; i++) { + brokers[i] = await initialize(i); + await brokers[i].start(); + } - simon = await broker2.call('activitypub.actor.awaitCreateComplete', { actorUri: simonUri }); + if (numServers === 1) { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[1], 'bob'); + } else { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[2], 'bob'); + } + }); - expect(sebastien).toMatchObject({ - id: sebastienUri, - type: expect.arrayContaining(['Person', 'foaf:Person']), - preferredUsername: 'srosset81', - 'foaf:nick': 'srosset81', - inbox: `${sebastienUri}/inbox`, - outbox: `${sebastienUri}/outbox`, - followers: `${sebastienUri}/followers`, - following: `${sebastienUri}/following` - }); + afterAll(async () => { + for (let i = 1; i <= numServers; i++) { + if (brokers[i]) await brokers[i].stop(); + } }); - let objectPrivateFirst: any; test('Post private message to self', async () => { - await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, name: 'Private message to self' @@ -61,18 +46,14 @@ describe('Permissions are correctly set on outbox', () => { // Get outbox as self await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id - }); - const outbox = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox }); + const outbox = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq') }); expect(outbox.orderedItems).toHaveLength(1); expect(outbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, @@ -80,19 +61,16 @@ describe('Permissions are correctly set on outbox', () => { } }); objectPrivateFirst = outbox.orderedItems[0].object; - // As long as we are using a triple-store, we don't have the id field and need the current field. - // For convenience, the id fielthat should be prid is added manually. - objectPrivateFirst.id = objectPrivateFirst.id || objectPrivateFirst.current; }); // Get outbox as anonymous await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: 'anon' }); - const outbox = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + const outbox = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); @@ -100,84 +78,88 @@ describe('Permissions are correctly set on outbox', () => { }); // TODO: FIX THIS FAILING TEST BECAUSE DEFAULT RIGHTS ARE INCORRECT FOR INBOX. - // Expect that friend has no read rights on object. + // Expect that Bob has no read rights on object. // await expect(() => - // broker.call('ldp.resource.get', { + // alice.call('ldp.resource.get', { // resourceUri: objectPrivateFirst.id, - // webId: simon.id + // webId: bob.webId // }) // ).rejects.toThrow(); }); - test('Post private message to friend', async () => { - await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + test('Post private message to Bob', async () => { + await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, - name: 'Private message to friend', - to: simon.id + name: 'Private message to Bob', + to: bob.webId }); - // Get outbox as friend + // Get outbox as Bob await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: bob.webId }); - const outbox = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + + const outbox = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id + webId: bob.webId }); + expect(outbox.orderedItems).toHaveLength(1); expect(outbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, - name: 'Private message to friend' + name: 'Private message to Bob' } }); }); // Get outbox as anonymous await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: 'anon' }); - const outbox = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + + const outbox = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); + expect(outbox.orderedItems).toHaveLength(0); }); }); test('Post public message', async () => { - await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, name: 'Public message', to: PUBLIC_URI }); - // Get outbox as friend + // Get outbox as Bob await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: bob.webId }); - const outbox = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + const outbox = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id + webId: bob.webId }); expect(outbox.orderedItems).toHaveLength(2); expect(outbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, @@ -188,18 +170,18 @@ describe('Permissions are correctly set on outbox', () => { // Get outbox as anonymous await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: 'anon' }); - const outbox = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + const outbox = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); expect(outbox.orderedItems).toHaveLength(1); expect(outbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, @@ -209,59 +191,60 @@ describe('Permissions are correctly set on outbox', () => { }); }); - test('Object permissions change when friend is added to addressees', async () => { - // Activity is visible to friend after Update. - const activityUpdatedForFriend = await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + test('Object permissions change when Bob is added to addressees', async () => { + const activityUpdatedForFriend = await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, type: ACTIVITY_TYPES.UPDATE, - to: [simon.id], object: { id: objectPrivateFirst.id, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, - name: 'Message is now visible to friend' - } + name: 'Message is now visible to Bob' + }, + to: bob.webId }); expect(objectPrivateFirst?.id).toBe(activityUpdatedForFriend.object.id); - // Get outbox as friend. + // Get outbox as Bob await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: bob.webId }); - const outboxFetchedByFriend = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + + const outboxFetchedByFriend = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id + webId: bob.webId }); + expect(outboxFetchedByFriend.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.UPDATE, object: { type: OBJECT_TYPES.NOTE, - name: 'Message is now visible to friend' + name: 'Message is now visible to Bob' } }); }); // Expect that public has no read rights. - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: 'anon' }); - const outboxFetchedByAnon = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + const outboxFetchedByAnon = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id + webId: 'anon' }); - expect(outboxFetchedByAnon.orderedItems[0].object?.name).toBe('Message is now visible to friend'); + expect(outboxFetchedByAnon.orderedItems[0].object?.name).toBe('Public message'); }); test('Object permissions change when public is added to addressees', async () => { // Activity is visible after update to public - const activityUpdatedForPublic = await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + const activityUpdatedForPublic = await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, type: ACTIVITY_TYPES.UPDATE, to: [PUBLIC_URI], object: { @@ -275,17 +258,17 @@ describe('Permissions are correctly set on outbox', () => { // Get outbox as anon. await waitForExpect(async () => { - const outboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, - webId: sebastien.id + const outboxMenu = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, + webId: alice.webId }); - const outboxFetchedByAnon = await broker.call('activitypub.collection.get', { - resourceUri: sebastien.outbox, + const outboxFetchedByAnon = await alice.call('activitypub.collection.get', { + resourceUri: alice.outbox, afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); expect(outboxFetchedByAnon.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.UPDATE, object: { type: OBJECT_TYPES.NOTE, @@ -294,73 +277,4 @@ describe('Permissions are correctly set on outbox', () => { }); }); }); - - // test('Delete activity is sent and object made private after removing addressees', async () => { - // // Activity is not visible after Update to no recipients. - // const activityNowPrivate = await broker.call('activitypub.outbox.post', { - // collectionUri: sebastien.outbox, - // type: ACTIVITY_TYPES.UPDATE, - // to: [], - // object: { - // id: objectPrivateFirst.id, - // '@context': 'https://www.w3.org/ns/activitystreams', - // type: OBJECT_TYPES.NOTE, - // name: 'Message is private again' - // } - // }); - - // waitForExpect(async () => { - // const outboxMenu = await broker.call('activitypub.collection.get', { - // resourceUri: sebastien.outbox, - // webId: sebastien.id - // }); - // const outboxFetchedByFriend = await broker.call('activitypub.collection.get', { - // resourceUri: sebastien.outbox, - // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - // webId: simon.id - // }); - // expect(outboxFetchedByFriend.orderedItems[0]).not.toMatchObject({ - // actor: sebastien.id, - // type: ACTIVITY_TYPES.UPDATE, - // object: { - // type: OBJECT_TYPES.NOTE, - // name: 'Message is private again' - // } - // }); - - // const outboxFetchedBySelf = await broker.call('activitypub.collection.get', { - // resourceUri: sebastien.outbox, - // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - // webId: sebastien.id - // }); - // expect(outboxFetchedBySelf.orderedItems[0]).toMatchObject({ - // actor: sebastien.id, - // type: ACTIVITY_TYPES.UPDATE, - // object: { - // type: OBJECT_TYPES.NOTE, - // name: 'Message is private again' - // } - // }); - // const objectUri = outboxFetchedBySelf.orderedItems[0].object.id; - - // // Expect friend receives a `Delete`, if the Update is made private. - // const friendOutbox = await broker.call('activitypub.collection.get', { - // resourceUri: simon.outbox, - // afterEq: new URL(outboxMenu?.first).searchParams.get('afterEq'), - // webId: simon.id - // }); - // expect(friendOutbox.orderedItems[0]).toMatchObject({ - // actor: sebastien.id, - // type: ACTIVITY_TYPES.DELETE, - // object: objectUri - // }); - - // await expect(() => - // broker.call('ldp.resource.get', { - // resourceUri: objectUri, - // webId: simon.id - // }) - // ).rejects.toThrow(); - // }); - // }); }); diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index d7ae504ea..b2e8fd009 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import Redis from 'ioredis'; -import { ActionParamSchema, CallingOptions, ServiceBroker } from 'moleculer'; +import { ActionParamSchema, CallingOptions, ServiceBroker, ServiceSchema } from 'moleculer'; import { Account } from '@semapps/auth'; import * as CONFIG from './config.ts'; @@ -114,13 +114,20 @@ export const createAccount = async (broker: ServiceBroker, username: string) => // Note: See if we can avoid this because it increases some of the tests time by 30-50% await callAsUser('webid.awaitCreateComplete'); + // Get outbox if ActivityPub service is enabled + const services: ServiceSchema[] = await broker.call('$node.services'); + const outbox = + services.some(s => s.name === 'activitypub') && + (await callAsUser('activitypub.outbox.getUri', { objectUri: webId })); + return { webId, token, baseUrl, username, call: callAsUser, - fetch: fetchAsUser + fetch: fetchAsUser, + outbox }; }; From 6a5740914fabdde7900379656954ceeaa91c6f56 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 17 Nov 2025 15:37:17 +0100 Subject: [PATCH 113/165] All tests passing (except interop) --- src/middleware/packages/activitypub/index.ts | 2 - .../subservices/collection/index.ts | 1 - .../activitypub/subservices/follow.ts | 171 ++++++------------ .../services/activitypub/subservices/inbox.ts | 16 +- .../services/activitypub/subservices/like.ts | 55 +++--- .../activitypub/subservices/outbox.ts | 25 +-- .../services/activitypub/subservices/reply.ts | 26 +-- .../packages/activitypub/services/relay.ts | 89 --------- src/middleware/packages/inference/service.ts | 4 +- .../packages/inference/subservices/remote.ts | 5 - .../ldp/mixins/controlled-container.ts | 19 +- src/middleware/packages/ldp/utils.ts | 5 - .../sync/middlewares/objects-watcher.ts | 2 - .../packages/sync/services/aggregator.ts | 10 +- .../packages/sync/services/synchronizer.ts | 54 +----- .../tests/activitypub/actors.test.ts | 1 - .../tests/activitypub/collection-api.test.ts | 135 ++++++++------ .../tests/activitypub/collection.test.ts | 128 +++++++------ .../tests/activitypub/data/actor1.json | 6 - .../tests/activitypub/data/actor2.json | 6 - .../tests/activitypub/follow.test.ts | 92 +++++----- .../tests/activitypub/inbox.test.ts | 163 +++++++---------- .../tests/activitypub/initialize.ts | 3 +- src/middleware/tests/activitypub/like.test.ts | 98 +++++----- .../tests/activitypub/message.test.ts | 91 +++++----- .../tests/activitypub/object.test.ts | 69 ++++--- .../tests/activitypub/outbox.test.ts | 10 +- .../tests/activitypub/shares.test.ts | 86 ++++----- src/middleware/tests/crypto/initialize.ts | 2 +- src/middleware/tests/jest.setup.ts | 1 - src/middleware/tests/utils.ts | 42 +++-- website/docs/middleware/activitypub/index.md | 22 --- 32 files changed, 567 insertions(+), 872 deletions(-) delete mode 100644 src/middleware/packages/activitypub/services/relay.ts delete mode 100644 src/middleware/tests/activitypub/data/actor1.json delete mode 100644 src/middleware/tests/activitypub/data/actor2.json diff --git a/src/middleware/packages/activitypub/index.ts b/src/middleware/packages/activitypub/index.ts index 527e678fb..fd31054f5 100644 --- a/src/middleware/packages/activitypub/index.ts +++ b/src/middleware/packages/activitypub/index.ts @@ -1,7 +1,6 @@ import ActivityPubService from './services/activitypub/index.ts'; import ActivityPubMigrationService from './services/migration.ts'; import ActivityMappingService from './services/activity-mapping.ts'; -import RelayService from './services/relay.ts'; import BotMixin from './mixins/bot.ts'; import ControlledCollectionMixin from './mixins/controlled-collection.ts'; import ActivitiesHandlerMixin from './mixins/activities-handler.ts'; @@ -13,7 +12,6 @@ export { ActivityPubService, ActivityPubMigrationService, ActivityMappingService, - RelayService, BotMixin, ControlledCollectionMixin, ActivitiesHandlerMixin, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index e7b9c2eda..960ba461b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -194,7 +194,6 @@ const CollectionService = { // const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri: itemUri }); // if (!resourceExist) throw new Error('Cannot attach a non-existing resource !') - // TODO check why thrown error is lost and process is stopped const collectionExist = await ctx.call('activitypub.collection.exist', { resourceUri: collectionUri }); if (!collectionExist) throw new Error( diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index d92215711..4666c3395 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -32,64 +32,6 @@ const FollowService = { await this.broker.call('activitypub.collections-registry.register', this.settings.followingCollectionOptions); }, actions: { - addFollower: { - async handler(ctx) { - const { follower, following } = ctx.params; - - if (this.isLocalActor(following)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); - if (actor.followers) { - await ctx.call('activitypub.collection.add', { - collectionUri: actor.followers, - item: follower - }); - } - } - - // Add reverse relation - if (this.isLocalActor(follower)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - if (actor.following) { - await ctx.call('activitypub.collection.add', { - collectionUri: actor.following, - item: following - }); - } - } - - ctx.emit('activitypub.follow.added', { follower, following }, { meta: { webId: null, dataset: null } }); - } - }, - - removeFollower: { - async handler(ctx) { - const { follower, following } = ctx.params; - - if (this.isLocalActor(following)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: following }); - if (actor.followers) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.followers, - item: follower - }); - } - } - - // Add reverse relation - if (this.isLocalActor(follower)) { - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); - if (actor.following) { - await ctx.call('activitypub.collection.remove', { - collectionUri: actor.following, - item: following - }); - } - } - - ctx.emit('activitypub.follow.removed', { follower, following }, { meta: { webId: null, dataset: null } }); - } - }, - isFollowing: { async handler(ctx) { const { follower, following } = ctx.params; @@ -144,28 +86,26 @@ const FollowService = { match: { type: ACTIVITY_TYPES.FOLLOW }, - async onReceive(ctx: any, activity: any) { + async onReceive(ctx: any, activity: any, recipientUri: string) { const { '@context': context, ...activityObject } = activity; - const actor = await ctx.call('activitypub.actor.get', { actorUri: activity.object }); - - // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message - await this.actions.addFollower( - { - follower: activity.actor, - following: activity.object - }, - { parentCtx: ctx } - ); - - // TODO don't accept Follow request if actor doesn't have followers/following collections - await ctx.call('activitypub.outbox.post', { - collectionUri: actor.outbox, - '@context': 'https://www.w3.org/ns/activitystreams', - actor: activity.object, - type: ACTIVITY_TYPES.ACCEPT, - object: activityObject, - to: activity.actor - }); + + const recipient = await ctx.call('activitypub.actor.get', { actorUri: recipientUri }); + + if (recipient.followers) { + await ctx.call('activitypub.collection.add', { + collectionUri: recipient.followers, + item: activity.actor + }); + + await ctx.call('activitypub.outbox.post', { + collectionUri: recipient.outbox, + '@context': 'https://www.w3.org/ns/activitystreams', + actor: activity.object, + type: ACTIVITY_TYPES.ACCEPT, + object: activityObject, + to: activity.actor + }); + } } }, acceptFollow: { @@ -175,15 +115,16 @@ const FollowService = { type: ACTIVITY_TYPES.FOLLOW } }, - async onReceive(ctx: any, activity: any) { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message - await this.actions.addFollower( - { - follower: activity.object.actor, - following: activity.object.object - }, - { parentCtx: ctx } - ); + async onReceive(ctx: any, activity: any, recipientUri: string) { + const recipient = await ctx.call('activitypub.actor.get', { actorUri: recipientUri }); + + if (recipient.following) { + // TODO Check that the recipient is indeed in the emitter's followers list ? + await ctx.call('activitypub.collection.add', { + collectionUri: recipient.following, + item: activity.actor + }); + } } }, undoFollow: { @@ -193,25 +134,25 @@ const FollowService = { type: ACTIVITY_TYPES.FOLLOW } }, - async onEmit(ctx: any, activity: any) { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message - await this.actions.removeFollower( - { - follower: activity.object.actor || activity.actor, - following: activity.object.object - }, - { parentCtx: ctx } - ); + async onEmit(ctx: any, activity: any, emitterUri: string) { + const emitter = await ctx.call('activitypub.actor.get', { actorUri: emitterUri }); + + if (emitter.following) { + await ctx.call('activitypub.collection.remove', { + collectionUri: emitter.following, + item: activity.object.object + }); + } }, - async onReceive(ctx: any, activity: any) { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message - await this.actions.removeFollower( - { - follower: activity.object.actor || activity.actor, - following: activity.object.object - }, - { parentCtx: ctx } - ); + async onReceive(ctx: any, activity: any, recipientUri: string) { + const recipient = await ctx.call('activitypub.actor.get', { actorUri: recipientUri }); + + if (recipient.followers) { + await ctx.call('activitypub.collection.remove', { + collectionUri: recipient.followers, + item: activity.actor + }); + } } }, undoAcceptFollow: { @@ -224,15 +165,15 @@ const FollowService = { } } }, - async onReceive(ctx: any, activity: any) { - // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message - await this.actions.removeFollower( - { - follower: activity.object.object.actor || activity.actor, - following: activity.object.object.object - }, - { parentCtx: ctx } - ); + async onReceive(ctx: any, activity: any, recipientUri: string) { + const recipient = await ctx.call('activitypub.actor.get', { actorUri: recipientUri }); + + if (recipient.following) { + await ctx.call('activitypub.collection.remove', { + collectionUri: recipient.following, + item: activity.actor + }); + } } } }, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index e57fc7626..6c7259a30 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -104,14 +104,6 @@ const InboxService = { // TODO check activity is valid - try { - await this.broker.call('activitypub.side-effects.processInbox', { activity, recipients: [inboxOwner] }); - } catch (e) { - // If some processors failed, log error message but don't stop - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - this.logger.error(e.message); - } - // If this is a transient activity, we have no way to retrieve it // so do not store it in the inbox (Mastodon works the same way) if (activity.id && !activity.id.includes('#')) { @@ -147,6 +139,14 @@ const InboxService = { ); } + try { + await this.broker.call('activitypub.side-effects.processInbox', { activity, recipients: [inboxOwner] }); + } catch (e) { + // If some processors failed, log error message but don't stop + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.error(e.message); + } + ctx.emit( 'activitypub.inbox.received', { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 88fdc89d6..1c5ae6033 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -113,16 +113,20 @@ const LikeService = { match: { type: ACTIVITY_TYPES.LIKE }, - async onEmit(ctx: any, activity: any, emitterUri: any) { + async onEmit(ctx: any, activity: any) { if (!activity?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addObjectToActorLikedCollection( { actorUri: activity.actor, objectUri: activity.object }, { parentCtx: ctx } ); - // In case there is no recipient, add the actor immediately to the collection - // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message - if (this.isLocalObject(activity.object, emitterUri)) { + + const recipientsUris = await ctx.call('activitypub.activity.getRecipients', { activity }); + const isRemoteObject = await ctx.call('ldp.remote.isRemote', { resourceUri: activity.object }); + + // If the actor is liking their own object without recipients, add them immediately to the likes collection + if (recipientsUris.length === 0 && !isRemoteObject) { // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addActorToObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object }, @@ -130,10 +134,10 @@ const LikeService = { ); } }, - async onReceive(ctx: any, activity: any, recipientUri: any) { - // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message - if (this.isLocalObject(activity.object, recipientUri)) { - if (!activity?.object) throw new Error(`No object in the Like activity`); + async onReceive(ctx: any, activity: any) { + if (!activity?.object) throw new Error(`No object in the Like activity`); + + if (!(await ctx.call('ldp.remote.isRemote', { resourceUri: activity.object }))) { // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addActorToObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object }, @@ -149,16 +153,20 @@ const LikeService = { type: ACTIVITY_TYPES.LIKE } }, - async onEmit(ctx: any, activity: any, emitterUri: any) { + async onEmit(ctx: any, activity: any) { if (!activity.object?.object) throw new Error(`No object in the Like activity`); + // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeObjectFromActorLikedCollection( { actorUri: activity.actor, objectUri: activity.object.object }, { parentCtx: ctx } ); - // In case there is no recipient, remove the actor immediately from the collection - // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message - if (this.isLocalObject(activity.object.object, emitterUri)) { + + const recipientsUris = await ctx.call('activitypub.activity.getRecipients', { activity }); + const isRemoteObject = await ctx.call('ldp.remote.isRemote', { resourceUri: activity.object.object }); + + // If the actor is unliking their own object without recipients, remove them immediately from the likes collection + if (recipientsUris.length === 0 && !isRemoteObject) { // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeActorFromObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object.object }, @@ -166,10 +174,10 @@ const LikeService = { ); } }, - async onReceive(ctx: any, activity: any, recipientUri: any) { - // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message - if (this.isLocalObject(activity.object.object, recipientUri)) { - if (!activity.object?.object) throw new Error(`No object in the Like activity`); + async onReceive(ctx: any, activity: any) { + if (!activity.object?.object) throw new Error(`No object in the Like activity`); + + if (!(await ctx.call('ldp.remote.isRemote', { resourceUri: activity.object.object }))) { // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.removeActorFromObjectLikesCollection( { actorUri: activity.actor, objectUri: activity.object.object }, @@ -178,21 +186,6 @@ const LikeService = { } } } - }, - methods: { - isLocalObject(uri, actorUri) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(`${actorUri}/`) || - uri === aclBase || - uri.startsWith(`${aclBase}/`) || - uri === aclGroupBase || - uri.startsWith(`${aclGroupBase}/`) - ); - } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index 3088a4d9b..d8b81f514 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -209,15 +209,6 @@ const OutboxService = { const success = []; const failures = []; - try { - await this.broker.call('activitypub.side-effects.processInbox', { activity: activityToPost, recipients }); - } catch (e) { - console.error(e); - // If some processors failed, log error message but don't stop - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - this.logger.error(e.message); - } - for (const recipientUri of recipients) { try { const account: Account = await this.broker.call('auth.account.findByWebId', { webId: recipientUri }); @@ -275,12 +266,20 @@ const OutboxService = { success.push(recipientUri); } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - console.error(e); this.logger.warn(`Error when posting activity to local actor ${recipientUri}: ${e.message}`); failures.push(recipientUri); } } + try { + await this.broker.call('activitypub.side-effects.processInbox', { activity: activityToPost, recipients }); + } catch (e) { + console.error(e); + // If some processors failed, log error message but don't stop + // @ts-expect-error TS(18046): 'e' is of type 'unknown'. + this.logger.error(e.message); + } + this.broker.emit('activitypub.inbox.received', { activity: activityToPost, recipients, local: true }); return { success, failures }; @@ -289,7 +288,6 @@ const OutboxService = { queues: { remotePost: { name: '*', - // @ts-expect-error TS(7023): 'process' implicitly has return type 'any' because... Remove this comment to see the full error message async process(job: any) { const { activity, recipientUri } = job.data; @@ -298,7 +296,6 @@ const OutboxService = { // During tests, do not do post to remote servers if (process.env.NODE_ENV === 'test' && !recipientUri.startsWith('http://localhost')) return; - // @ts-expect-error TS(7022): 'recipientInbox' implicitly has type 'any' because... Remove this comment to see the full error message const recipientInbox = await this.broker.call( 'activitypub.actor.getCollectionUri', { @@ -315,8 +312,7 @@ const OutboxService = { const body = JSON.stringify(activity); - // @ts-expect-error TS(7022): 'signatureHeaders' implicitly has type 'any' becau... Remove this comment to see the full error message - const signatureHeaders = await this.broker.call( + const signatureHeaders: any = await this.broker.call( 'signature.generateSignatureHeaders', { url: recipientInbox, @@ -327,7 +323,6 @@ const OutboxService = { { meta: { dataset } } ); - // @ts-expect-error TS(7022): 'response' implicitly has type 'any' because it do... Remove this comment to see the full error message const response = await fetch(recipientInbox, { method: 'POST', headers: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 26137d9d8..75fff7961 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -101,9 +101,9 @@ const ReplyService = { // We have a match only if there is a inReplyTo predicate to the object return { match: match && dereferencedActivity.object.inReplyTo, dereferencedActivity }; }, - async onEmit(ctx: any, activity: any, emitterUri: any) { - // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message - if (this.isLocalObject(activity.object.inReplyTo, emitterUri)) { + async onEmit(ctx: any, activity: any) { + // If the actor is replying to their own message, we need to add the reply immediately + if (!(await ctx.call('ldp.remote.isRemote', { resourceUri: activity.object.inReplyTo }))) { // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addReply( { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, @@ -111,9 +111,8 @@ const ReplyService = { ); } }, - async onReceive(ctx: any, activity: any, recipientUri: any) { - // @ts-expect-error TS(2339): Property 'isLocalObject' does not exist on type '{... Remove this comment to see the full error message - if (this.isLocalObject(activity.object.inReplyTo, recipientUri)) { + async onReceive(ctx: any, activity: any) { + if (!(await ctx.call('ldp.remote.isRemote', { resourceUri: activity.object.inReplyTo }))) { // @ts-expect-error TS(2339): Property 'actions' does not exist on type '{ match... Remove this comment to see the full error message await this.actions.addReply( { objectUri: activity.object.inReplyTo, replyUri: activity.object.id }, @@ -139,21 +138,6 @@ const ReplyService = { await this.actions.removeFromAllRepliesCollections({ objectUri: activity.object.id }, { parentCtx: ctx }); } } - }, - methods: { - isLocalObject(uri, actorUri) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - uri === actorUri || - uri.startsWith(`${actorUri}/`) || - uri === aclBase || - uri.startsWith(`${aclBase}/`) || - uri === aclGroupBase || - uri.startsWith(`${aclGroupBase}/`) - ); - } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts deleted file mode 100644 index 44ba961aa..000000000 --- a/src/middleware/packages/activitypub/services/relay.ts +++ /dev/null @@ -1,89 +0,0 @@ -import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; -import { ACTOR_TYPES } from '../constants.ts'; -import { delay } from '../utils.ts'; - -const RelayService = { - name: 'activitypub.relay' as const, - settings: { - actor: { - username: 'relay', - name: 'Relay actor for instance' - } - }, - dependencies: ['activitypub', 'activitypub.follow', 'auth.account', 'ldp.container', 'ldp.registry'], - async started() { - let containerUri: string; - do { - containerUri = await this.broker.call('ldp.registry.getUri', { type: ACTOR_TYPES.APPLICATION }); - if (!containerUri) { - this.logger.warn("Waiting for a container that accepts the 'Application' type..."); - await delay(3000); - } - } while (!containerUri); - - const actorSettings = this.settings.actor; - const actorExist = await this.broker.call('auth.account.usernameExists', { username: actorSettings.username }); - - const actorUri = urlJoin(containerUri, actorSettings.username); - - // Creating the local actor 'relay' - if (!actorExist) { - this.logger.info(`ActorService > Actor "${actorSettings.name}" does not exist yet, creating it...`); - - const account = await this.broker.call( - 'auth.account.create', - { - username: actorSettings.username, - webId: actorUri - }, - { meta: { isSystemCall: true } } - ); - - try { - // Wait until relay container has been created (needed for integration tests) - let containerExist; - do { - containerExist = await this.broker.call('ldp.container.exist', { containerUri }); - } while (!containerExist); - - await this.broker.call('ldp.container.post', { - containerUri, - slug: actorSettings.username, - resource: { - '@context': 'https://www.w3.org/ns/activitystreams', - type: ACTOR_TYPES.APPLICATION, - preferredUsername: actorSettings.username, - name: actorSettings.name - }, - webId: 'system' - }); - } catch (e) { - // Delete account if resource creation failed, or it may cause problems when retrying - await this.broker.call('auth.account.remove', { id: account['@id'] }); - throw e; - } - } - - // Wait until the relay actor is fully created - this.relayActor = await this.broker.call('activitypub.actor.awaitCreateComplete', { actorUri }); - }, - actions: { - getActor: { - visibility: 'public', - handler() { - return this.relayActor; - } - } - } -} satisfies ServiceSchema; - -export default RelayService; - -declare global { - export namespace Moleculer { - export interface AllServices { - [RelayService.name]: typeof RelayService; - } - } -} diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 0cc0b61e0..554a465d9 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -250,7 +250,7 @@ const InferenceSchema = { // Dealing with remotes - // remote relationships are sent to relay actor of remote server + // Remote relationships are sent to remote server if (this.settings.offerToRemoteServers) { for (const triple of addRemotes) { await this.broker.call('inference.remote.offerInference', { @@ -308,7 +308,7 @@ const InferenceSchema = { // Dealing with remotes - // remote relationships are sent to relay actor of remote server + // Remote relationships are sent to remote server if (this.settings.offerToRemoteServers) { for (const triple of addRemotes) { await this.broker.call('inference.remote.offerInference', { diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index 197efe1cb..dca471a6a 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -14,10 +14,6 @@ const InferenceRemoteSchema = { acceptFromRemoteServers: true, offerToRemoteServers: true }, - dependencies: ['activitypub.relay'], - async started() { - this.relayActor = await this.broker.call('activitypub.relay.getActor'); - }, actions: { offerInference: { visibility: 'public', @@ -25,7 +21,6 @@ const InferenceRemoteSchema = { subject: { type: 'string', optional: false }, predicate: { type: 'string', optional: false }, object: { type: 'string', optional: false }, - // @ts-expect-error TS(2322): Type '{ type: "boolean"; optional: false; }' is no... Remove this comment to see the full error message add: { type: 'boolean', optional: false } }, async handler(ctx) { diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 931eb0f9e..bc25c984c 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema } from 'moleculer'; -import { arrayOf, delay, getParentContainerUri } from '../utils.ts'; +import { arrayOf, delay } from '../utils.ts'; const ControlledContainerMixin = { settings: { @@ -142,7 +142,6 @@ const ControlledContainerMixin = { async handler(ctx) { let { containerUri } = ctx.params; let containerExist; - let containerAttached; if (!containerUri) { containerUri = await this.actions.getContainerUri( @@ -156,21 +155,7 @@ const ControlledContainerMixin = { containerExist = await ctx.call('ldp.container.exist', { containerUri }); } while (!containerExist); - const parentContainerUri = getParentContainerUri(containerUri); - const parentContainerExist = await ctx.call('ldp.container.exist', { containerUri: parentContainerUri }); - - // If a parent container exist, check that the child container has been attached - // Otherwise, it may fail - if (parentContainerExist) { - do { - if (containerAttached === false) await delay(1000); - containerAttached = await ctx.call('ldp.container.includes', { - containerUri: parentContainerUri, - resourceUri: containerUri, - webId: 'system' - }); - } while (!containerAttached); - } + return containerUri; } } } diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index 55fd2fcfd..6ea396e2b 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -74,9 +74,6 @@ const getSlugFromUri = (uri: any) => uri.match(new RegExp(`.*/(.*)`))[1]; /** @deprecated Use the ldp.resource.getContainers action instead */ const getContainerFromUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; -const getParentContainerUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; -const getParentContainerPath = (path: any) => path.match(new RegExp(`(.*)/.*`))[1]; - const getPathFromUri = (uri: any) => { try { const urlObject = new URL(uri); @@ -184,8 +181,6 @@ export { isObject, getSlugFromUri, getContainerFromUri, - getParentContainerUri, - getParentContainerPath, getDatasetFromUri, getWebIdFromUri, getId, diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index 0fbe9268a..da3442400 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -13,7 +13,6 @@ const handledWacActions = [ const ObjectsWatcherMiddleware = (config = {}) => { // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type '{}'. const { baseUrl, postWithoutRecipients = false, transientActivities = false } = config; - let relayActor: any; let excludedContainersPathRegex: any = []; let initialized = false; let cacherActivated = false; @@ -99,7 +98,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { if (isHandled(action.name)) { return async (ctx: any) => { // Don't handle actions until middleware is fully started - // Otherwise, the creation of the relay actor calls the middleware before it started if (!initialized) return await next(ctx); if (ctx.meta.skipObjectsWatcher === true) return await next(ctx); diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index b99e48722..a8ae33555 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -2,13 +2,12 @@ import { ActivitiesHandlerMixin, ACTIVITY_TYPES } from '@semapps/activitypub'; import { ServiceSchema } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; -const AggregatorSchema = { +const AggregatorService = { name: 'aggregator' as const, mixins: [ActivitiesHandlerMixin], settings: { acceptFollowOffers: true }, - dependencies: ['activitypub.relay'], created() { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "synchronizer"... Remove this comment to see the full error message this.broker.createService({ @@ -19,9 +18,6 @@ const AggregatorSchema = { } }); }, - async started() { - this.relayActor = await this.broker.call('activitypub.relay.getActor'); - }, activities: { offerFollow: { match: { @@ -50,12 +46,12 @@ const AggregatorSchema = { } } satisfies ServiceSchema; -export default AggregatorSchema; +export default AggregatorService; declare global { export namespace Moleculer { export interface AllServices { - [AggregatorSchema.name]: typeof AggregatorSchema; + [AggregatorService.name]: typeof AggregatorService; } } } diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index b9ce5e152..f0ea724b1 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -6,55 +6,18 @@ const SynchronizerService = { name: 'synchronizer' as const, mixins: [ActivitiesHandlerMixin], settings: { - podProvider: false, synchronizeContainers: true, attachToLocalContainers: false }, - async started() { - if (!this.settings.podProvider) { - await this.broker.waitForServices('activitypub.relay'); - this.relayActor = await this.broker.call('activitypub.relay.getActor'); - } - }, methods: { async isValid(activity, recipientUri) { - if (this.settings.podProvider) { - const account = await this.broker.call('auth.account.findByWebId', { webId: recipientUri }); - if (!account) { - this.logger.warn(`No local Pod found for webId ${recipientUri}`); - return false; - } else { - // TODO Check that emitter is in contacts ? - return true; - } - } else { - // Check that the recipient is the relay actor - if (recipientUri !== this.relayActor.id) return false; - - // Check that the activity emitter is being followed by the relay actor - return await this.broker.call('activitypub.follow.isFollowing', { - follower: recipientUri, - following: activity.actor - }); - } - }, - // Return true if the resource is on the same server as the actor - isLocal(url, actorUri) { - if (this.settings.podProvider) { - const { origin, pathname } = new URL(actorUri); - const aclBase = `${origin}/_acl${pathname}`; // URL of type http://localhost:3000/_acl/alice - const aclGroupBase = `${origin}/_groups${pathname}`; // URL of type http://localhost:3000/_groups/alice - return ( - url === actorUri || - url.startsWith(`${actorUri}/`) || - url === aclBase || - url.startsWith(`${aclBase}/`) || - url === aclGroupBase || - url.startsWith(`${aclGroupBase}/`) - ); + const account = await this.broker.call('auth.account.findByWebId', { webId: recipientUri }); + if (!account) { + this.logger.warn(`No local Pod found for webId ${recipientUri}`); + return false; } else { - const { origin } = new URL(actorUri); - return url.startsWith(origin); + // TODO Check that emitter is in contacts ? + return true; } } }, @@ -63,15 +26,14 @@ const SynchronizerService = { match: { type: ACTIVITY_TYPES.CREATE }, - async onReceive(ctx: any, activity: any, recipientUri: any) { + async onReceive(ctx: any, activity: any, recipientUri: string) { // @ts-expect-error TS(2339): Property 'isValid' does not exist on type '{ match... Remove this comment to see the full error message if (await this.isValid(activity, recipientUri)) { for (let resource of arrayOf(activity.object)) { const resourceUri = typeof resource === 'string' ? resource : resource['@id'] || resource.id; // Ignore if the resource is on the same server - // @ts-expect-error TS(2339): Property 'isLocal' does not exist on type '{ match... Remove this comment to see the full error message - if (!this.isLocal(resourceUri, recipientUri)) { + if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { resource = await ctx.call( 'ldp.remote.store', typeof resource === 'string' diff --git a/src/middleware/tests/activitypub/actors.test.ts b/src/middleware/tests/activitypub/actors.test.ts index 0afad9138..ee479f9f5 100644 --- a/src/middleware/tests/activitypub/actors.test.ts +++ b/src/middleware/tests/activitypub/actors.test.ts @@ -1,6 +1,5 @@ import urlJoin from 'url-join'; import { ServiceBroker } from 'moleculer'; - import initialize from './initialize.ts'; import { createAccount, dropAllDatasets } from '../utils.ts'; diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index d960a5318..91ebc99c2 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -1,38 +1,42 @@ -import urlJoin from 'url-join'; import fetch from 'node-fetch'; -import { fetchServer } from '../utils.ts'; +import { ServiceBroker } from 'moleculer'; +import { createAccount, dropAllDatasets } from '../utils.ts'; import initialize from './initialize.ts'; -import * as CONFIG from '../config.ts'; -jest.setTimeout(50000); -let broker: any; +jest.setTimeout(70000); + +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { - broker = await initialize(3000, 'testData', 'settings'); + await dropAllDatasets(); + broker = await initialize(1); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { - if (broker) await broker.stop(); + await broker.stop(); }); describe('Collections API', () => { const items: any = []; - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - const collectionsContainersUri = urlJoin(CONFIG.HOME_URL, 'as/collection'); + let collectionsContainersUri: string; let collectionUri: any; let localContext: any; - test('Create ressources', async () => { + test('Create resources', async () => { + const notesContainerUri = await alice.call('ldp.registry.getUri', { type: 'as:Note', isContainer: true }); + for (let i = 0; i < 10; i++) { items.push( - await broker.call('ldp.container.post', { - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - containerUri: urlJoin(CONFIG.HOME_URL, 'as/object'), + await alice.call('ldp.container.post', { + containerUri: notesContainerUri, resource: { '@context': 'https://www.w3.org/ns/activitystreams', '@type': 'Note', name: `Note #${i}`, - content: `Contenu de ma note #${i}`, + content: `Content of my note #${i}`, published: `2021-01-0${i}T00:00:00.000Z` } }) @@ -42,9 +46,11 @@ describe('Collections API', () => { }); test('Create collection', async () => { - localContext = await broker.call('jsonld.context.get'); + localContext = await alice.call('jsonld.context.get'); + + collectionsContainersUri = await alice.call('activitypub.collection.waitForContainerCreation'); - const { headers } = await fetchServer(collectionsContainersUri, { + const { headers } = await alice.fetch(collectionsContainersUri, { method: 'POST', body: { '@context': localContext, @@ -57,7 +63,7 @@ describe('Collections API', () => { expect(collectionUri).not.toBeNull(); - await expect(fetchServer(collectionUri)).resolves.toMatchObject({ + await expect(alice.fetch(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, type: 'Collection', @@ -68,7 +74,7 @@ describe('Collections API', () => { }); test('Add item to collection', async () => { - await fetchServer(collectionUri, { + const { status } = await alice.fetch(collectionUri, { method: 'PATCH', headers: new fetch.Headers({ 'Content-Type': 'application/sparql-update' @@ -79,7 +85,9 @@ describe('Collections API', () => { ` }); - await expect(fetchServer(collectionUri)).resolves.toMatchObject({ + expect(status).toBe(204); + + await expect(alice.fetch(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, type: 'Collection', @@ -91,7 +99,7 @@ describe('Collections API', () => { }); test('Remove item from collection', async () => { - await fetchServer(collectionUri, { + const { status } = await alice.fetch(collectionUri, { method: 'PATCH', headers: new fetch.Headers({ 'Content-Type': 'application/sparql-update' @@ -102,7 +110,9 @@ describe('Collections API', () => { ` }); - await expect(fetchServer(collectionUri)).resolves.toMatchObject({ + expect(status).toBe(204); + + await expect(alice.fetch(collectionUri)).resolves.toMatchObject({ json: { id: collectionUri, type: 'Collection', @@ -113,7 +123,7 @@ describe('Collections API', () => { }); test('Paginated collection', async () => { - const { headers } = await fetchServer(collectionsContainersUri, { + const { headers } = await alice.fetch(collectionsContainersUri, { method: 'POST', body: { '@context': localContext, @@ -123,55 +133,68 @@ describe('Collections API', () => { } }); - const paginatedCollectionUri = headers.get('Location'); + const paginatedCollectionUri: string = headers.get('Location')!; // Add all items to the collection - await fetchServer(paginatedCollectionUri, { + const { status } = await alice.fetch(paginatedCollectionUri, { method: 'PATCH', headers: new fetch.Headers({ 'Content-Type': 'application/sparql-update' }), body: ` PREFIX as: - INSERT DATA { <${paginatedCollectionUri}> as:items ${items.map((item: any) => `<${item}>`).join(', ')} . }; + INSERT DATA { + <${paginatedCollectionUri}> as:items ${items.map((item: string) => `<${item}>`).join(', ')} + }; ` }); - await expect(fetchServer(paginatedCollectionUri)).resolves.toMatchObject({ - json: { - id: paginatedCollectionUri, - type: 'Collection', - summary: 'My paginated collection', - 'semapps:dereferenceItems': false, - 'semapps:itemsPerPage': 4, - first: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, - last: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[0])}` - } + expect(status).toBe(204); + + const { json: paginatedCollection } = await alice.fetch(paginatedCollectionUri); + + expect(paginatedCollection).toMatchObject({ + id: paginatedCollectionUri, + type: 'Collection', + summary: 'My paginated collection', + 'semapps:dereferenceItems': false, + 'semapps:itemsPerPage': 4, + first: expect.anything(), + last: expect.anything() }); - await expect( - fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`) - ).resolves.toMatchObject({ - json: { - id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[9])}`, - type: 'CollectionPage', - partOf: paginatedCollectionUri, - next: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[5])}`, - items: expect.arrayContaining([items[9], items[8], items[7], items[6]]) - } + const { json: firstPage } = await alice.fetch(paginatedCollection.first); + + expect(firstPage).toMatchObject({ + id: paginatedCollection.first, + type: 'CollectionPage', + partOf: paginatedCollectionUri, + next: expect.anything() }); - await expect( - fetchServer(`${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[1])}`) - ).resolves.toMatchObject({ - json: { - id: `${paginatedCollectionUri}?afterEq=${encodeURIComponent(items[1])}`, - type: 'CollectionPage', - partOf: paginatedCollectionUri, - prev: `${paginatedCollectionUri}?beforeEq=${encodeURIComponent(items[2])}`, - // @ts-expect-error TS(2304): Cannot find name 'expect'. - items: expect.arrayContaining([items[1], items[0]]) - } + expect(firstPage.items).toHaveLength(4); + + const { json: secondPage } = await alice.fetch(firstPage.next); + + expect(secondPage).toMatchObject({ + type: 'CollectionPage', + partOf: paginatedCollectionUri, + next: expect.anything(), + prev: expect.anything() + }); + + expect(secondPage.items).toHaveLength(4); + + const { json: thirdPage } = await alice.fetch(secondPage.next); + + expect(thirdPage).toMatchObject({ + type: 'CollectionPage', + partOf: paginatedCollectionUri, + prev: expect.anything() }); + + // Last page should contain only 2 items (4+4+2) + expect(thirdPage.next).toBeUndefined(); + expect(thirdPage.items).toHaveLength(2); }); }); diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index 082ef7e70..1718835c8 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -1,36 +1,45 @@ import urlJoin from 'url-join'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; +import { createAccount, dropAllDatasets } from '../utils.ts'; -jest.setTimeout(50000); -let broker: any; +jest.setTimeout(70000); + +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { - broker = await initialize(3000, 'testData', 'settings'); + await dropAllDatasets(); + broker = await initialize(1); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { - if (broker) await broker.stop(); + await broker.stop(); }); describe('Collections', () => { const items: any = []; - let collectionUri: any; - let orderedCollectionUri: any; - let cursorBasedCollectionUri: any; + let containerUri: string; + let collectionUri: string; + let orderedCollectionUri: string; + let cursorBasedCollectionUri: string; beforeAll(async () => { + containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Note', isContainer: true }); + // Create test items for (let i = 0; i < 10; i++) { items.push( - await broker.call('ldp.container.post', { - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - containerUri: urlJoin(CONFIG.HOME_URL, 'as/object'), + await alice.call('ldp.container.post', { + containerUri, resource: { '@context': 'https://www.w3.org/ns/activitystreams', '@type': 'Note', name: `Note #${i}`, - content: `Contenu de ma note #${i}`, + content: `Content of my note #${i}`, published: `2021-01-0${i + 1}T00:00:00.000Z` } }) @@ -38,7 +47,7 @@ describe('Collections', () => { } // Create collection for basic tests - collectionUri = await broker.call('activitypub.collection.post', { + collectionUri = await alice.call('activitypub.collection.post', { resource: { type: 'Collection', summary: 'My non-ordered collection' @@ -47,7 +56,7 @@ describe('Collections', () => { }); // Create ordered collection - orderedCollectionUri = await broker.call('activitypub.collection.post', { + orderedCollectionUri = await alice.call('activitypub.collection.post', { resource: { type: ['Collection', 'OrderedCollection'], summary: 'My ordered collection', @@ -57,7 +66,7 @@ describe('Collections', () => { }); // Create collection for cursor tests - cursorBasedCollectionUri = await broker.call('activitypub.collection.post', { + cursorBasedCollectionUri = await alice.call('activitypub.collection.post', { resource: { type: 'Collection', summary: 'Cursor test collection', @@ -67,23 +76,23 @@ describe('Collections', () => { }); // Add items to cursor based collection - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: cursorBasedCollectionUri, item: items[0] }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: cursorBasedCollectionUri, item: items[1] }); }); test('Collection exists', async () => { - const collectionExist = await broker.call('activitypub.collection.exist', { + const collectionExist = await alice.call('activitypub.collection.exist', { resourceUri: collectionUri }); expect(collectionExist).toBeTruthy(); - const collection = await broker.call('activitypub.collection.get', { resourceUri: collectionUri }); + const collection = await alice.call('activitypub.collection.get', { resourceUri: collectionUri }); expect(collection).toMatchObject({ id: collectionUri, type: 'Collection', @@ -93,7 +102,7 @@ describe('Collections', () => { }); test('Get collection with custom jsonContext', async () => { - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: collectionUri, jsonContext: { as: 'https://www.w3.org/ns/activitystreams#' } }); @@ -107,12 +116,12 @@ describe('Collections', () => { }); test('Ordered collection exists', async () => { - const collectionExist = await broker.call('activitypub.collection.exist', { + const collectionExist = await alice.call('activitypub.collection.exist', { resourceUri: orderedCollectionUri }); expect(collectionExist).toBeTruthy(); - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: orderedCollectionUri }); expect(collection).toMatchObject({ @@ -126,12 +135,12 @@ describe('Collections', () => { }); test('Add and remove item from collection', async () => { - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri, item: items[0] }); - let collection = await broker.call('activitypub.collection.get', { + let collection = await alice.call('activitypub.collection.get', { resourceUri: collectionUri }); @@ -142,12 +151,12 @@ describe('Collections', () => { items: items[0] }); - await broker.call('activitypub.collection.remove', { + await alice.call('activitypub.collection.remove', { collectionUri, item: items[0] }); - collection = await broker.call('activitypub.collection.get', { + collection = await alice.call('activitypub.collection.get', { resourceUri: collectionUri }); @@ -162,7 +171,7 @@ describe('Collections', () => { }); test('Get collection with dereference items', async () => { - const collectionWithDereferenceUri = await broker.call('activitypub.collection.post', { + const collectionWithDereferenceUri = await alice.call('activitypub.collection.post', { resource: { type: 'Collection', summary: 'My non-ordered collection with dereferenceItems: true', @@ -171,12 +180,12 @@ describe('Collections', () => { webId: 'system' }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: collectionWithDereferenceUri, item: items[0] }); - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: collectionWithDereferenceUri }); @@ -187,34 +196,34 @@ describe('Collections', () => { items: { id: items[0], type: 'Note', - content: 'Contenu de ma note #0', + content: 'Content of my note #0', name: 'Note #0' } }); }); test('Items are sorted in descending order (default)', async () => { - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: orderedCollectionUri, item: items[4] }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: orderedCollectionUri, item: items[0] }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: orderedCollectionUri, item: items[2] }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: orderedCollectionUri, item: items[6] }); - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: orderedCollectionUri }); @@ -225,7 +234,7 @@ describe('Collections', () => { }); test('Items are sorted in ascending order', async () => { - const ascOrderedCollectionUri = await broker.call('activitypub.collection.post', { + const ascOrderedCollectionUri = await alice.call('activitypub.collection.post', { resource: { type: ['Collection', 'OrderedCollection'], summary: 'My asc-ordered collection', @@ -235,27 +244,27 @@ describe('Collections', () => { webId: 'system' }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: ascOrderedCollectionUri, item: items[4] }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: ascOrderedCollectionUri, item: items[0] }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: ascOrderedCollectionUri, item: items[2] }); - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: ascOrderedCollectionUri, item: items[6] }); - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: ascOrderedCollectionUri }); @@ -270,7 +279,7 @@ describe('Collections', () => { beforeAll(async () => { // Create collection for pagination tests - paginatedCollectionUri = await broker.call('activitypub.collection.post', { + paginatedCollectionUri = await alice.call('activitypub.collection.post', { resource: { type: 'Collection', summary: 'My paginated collection', @@ -281,7 +290,7 @@ describe('Collections', () => { // Add all items to test pagination for (let i = 0; i < 10; i++) { - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: paginatedCollectionUri, item: items[i] }); @@ -289,7 +298,7 @@ describe('Collections', () => { }); test('Should return first and last page links for unpaginated request', async () => { - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri }); @@ -301,7 +310,7 @@ describe('Collections', () => { }); test('Should navigate forward with afterEq cursor', async () => { - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, afterEq: items[9] }); @@ -317,7 +326,7 @@ describe('Collections', () => { }); test('Should navigate backward with beforeEq cursor', async () => { - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, beforeEq: items[5] }); @@ -334,7 +343,7 @@ describe('Collections', () => { describe('Edge Cases', () => { test('Should handle empty collection', async () => { - const emptyCollectionUri = await broker.call('activitypub.collection.post', { + const emptyCollectionUri = await alice.call('activitypub.collection.post', { resource: { type: 'Collection', summary: 'Empty collection', @@ -343,7 +352,7 @@ describe('Collections', () => { webId: 'system' }); - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: emptyCollectionUri }); @@ -358,7 +367,7 @@ describe('Collections', () => { }); test('Should handle collection with exactly itemsPerPage items', async () => { - const exactCollectionUri = await broker.call('activitypub.collection.post', { + const exactCollectionUri = await alice.call('activitypub.collection.post', { resource: { type: 'Collection', summary: 'Exact size collection', @@ -369,13 +378,13 @@ describe('Collections', () => { // Add exactly 4 items for (let i = 0; i < 4; i++) { - await broker.call('activitypub.collection.add', { + await alice.call('activitypub.collection.add', { collectionUri: exactCollectionUri, item: items[i] }); } - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: exactCollectionUri, afterEq: items[3] }); @@ -390,7 +399,7 @@ describe('Collections', () => { test('Should handle last page with remaining items', async () => { // Get last page of main paginated collection (should have 2 items) - const collection = await broker.call('activitypub.collection.get', { + const collection = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, afterEq: items[1] }); @@ -408,7 +417,7 @@ describe('Collections', () => { let seenItems = new Set(); while (cursor) { - const page = await broker.call('activitypub.collection.get', { + const page = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, afterEq: cursor }); @@ -435,19 +444,19 @@ describe('Collections', () => { test('Should handle navigation between pages consistently', async () => { // Forward navigation - const firstPage = await broker.call('activitypub.collection.get', { + const firstPage = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, afterEq: items[9] }); // Get the next page - const nextPage = await broker.call('activitypub.collection.get', { + const nextPage = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, afterEq: items[5] }); // Navigate back - const prevPage = await broker.call('activitypub.collection.get', { + const prevPage = await alice.call('activitypub.collection.get', { resourceUri: paginatedCollectionUri, beforeEq: new URL(nextPage.prev).searchParams.get('beforeEq') }); @@ -463,7 +472,7 @@ describe('Collections', () => { // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const nonExistentUri = urlJoin(CONFIG.HOME_URL, 'as/collection/non-existent'); await expect( - broker.call('activitypub.collection.get', { + alice.call('activitypub.collection.get', { resourceUri: nonExistentUri }) ).rejects.toThrow('not found'); @@ -473,7 +482,7 @@ describe('Collections', () => { // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const invalidCursorUri = urlJoin(CONFIG.HOME_URL, 'as/object/non-existent'); await expect( - broker.call('activitypub.collection.get', { + alice.call('activitypub.collection.get', { resourceUri: cursorBasedCollectionUri, afterEq: invalidCursorUri }) @@ -482,7 +491,7 @@ describe('Collections', () => { test('Should reject when both beforeEq and afterEq are provided', async () => { await expect( - broker.call('activitypub.collection.get', { + alice.call('activitypub.collection.get', { resourceUri: cursorBasedCollectionUri, beforeEq: items[0], afterEq: items[1] @@ -492,9 +501,8 @@ describe('Collections', () => { test('Should handle malformed collection URI', async () => { const malformedUri = 'not-a-valid-uri'; - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( - broker.call('activitypub.collection.get', { + alice.call('activitypub.collection.get', { resourceUri: malformedUri }) ).rejects.toThrow(); diff --git a/src/middleware/tests/activitypub/data/actor1.json b/src/middleware/tests/activitypub/data/actor1.json deleted file mode 100644 index da78578a3..000000000 --- a/src/middleware/tests/activitypub/data/actor1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "username": "alice", - "email": "alice@test.com", - "password": "test", - "name": "Alice" -} diff --git a/src/middleware/tests/activitypub/data/actor2.json b/src/middleware/tests/activitypub/data/actor2.json deleted file mode 100644 index b8cdb3bf9..000000000 --- a/src/middleware/tests/activitypub/data/actor2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "username": "bob", - "email": "bob@test.com", - "password": "test", - "name": "Bob" -} diff --git a/src/middleware/tests/activitypub/follow.test.ts b/src/middleware/tests/activitypub/follow.test.ts index cf4ee9e3b..4bcb06bd2 100644 --- a/src/middleware/tests/activitypub/follow.test.ts +++ b/src/middleware/tests/activitypub/follow.test.ts @@ -1,48 +1,37 @@ import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; +import { ServiceBroker } from 'moleculer'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; +import { createAccount, dropAllDatasets } from '../utils.ts'; jest.setTimeout(50_000); -const NUM_USERS = 2; -describe.each(['single-server', 'multi-server'])('In mode %s, posting to followers', (mode: any) => { - let broker: any; - const actors: any = []; - let alice: any; - let bob: any; - let followActivity: any; +let brokers: ServiceBroker[] = []; +let alice: any; +let bob: any; +let followActivity: any; +describe.each([1, 2])('With %i server(s), test follow features', (numServers: number) => { beforeAll(async () => { - if (mode === 'single-server') { - broker = await initialize(3000, 'testData', 'settings'); - } else { - broker = []; - } + await dropAllDatasets(); - for (let i = 1; i <= NUM_USERS; i++) { - if (mode === 'multi-server') { - broker[i] = await initialize(3000 + i, `testData${i}`, `settings${i}`, i); - } else { - broker[i] = broker; - } - const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); - actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName: any, params: any, options = {}) => - // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. - broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); + for (let i = 1; i <= numServers; i++) { + brokers[i] = await initialize(i); + await brokers[i].start(); } - alice = actors[1]; - bob = actors[2]; + if (numServers === 1) { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[1], 'bob'); + } else { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[2], 'bob'); + } }); afterAll(async () => { - if (mode === 'multi-server') { - for (let i = 1; i <= NUM_USERS; i++) { - await broker[i].stop(); - } - } else { - await broker.stop(); + for (let i = 1; i <= numServers; i++) { + if (brokers[i]) await brokers[i].stop(); } }); @@ -50,36 +39,36 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe followActivity = await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, '@context': 'https://www.w3.org/ns/activitystreams', - actor: bob.id, + actor: bob.webId, type: ACTIVITY_TYPES.FOLLOW, - object: alice.id, - to: alice.id + object: alice.webId, + to: alice.webId }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. + // @ts-expect-error This expression is not callable await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) + alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.webId }) ).resolves.toBeTruthy(); }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const inboxMenu = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox, - webId: bob.id + webId: bob.webId }); const inbox = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox, afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), - webId: bob.id + webId: bob.webId }); expect(inbox).not.toBeNull(); expect(inbox.orderedItems).toHaveLength(1); expect(inbox.orderedItems[0]).toMatchObject({ type: ACTIVITY_TYPES.ACCEPT, - actor: alice.id, + actor: alice.webId, object: { id: followActivity.id, type: ACTIVITY_TYPES.FOLLOW @@ -94,7 +83,7 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, name: 'Hello World', - attributedTo: alice.id, + attributedTo: alice.webId, to: [alice.followers], content: 'My first message, happy to be part of the fediverse !' }); @@ -107,15 +96,16 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe } }); + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const inboxMenu = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox, - webId: bob.id + webId: bob.webId }); const inbox = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox, afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), - webId: bob.id + webId: bob.webId }); expect(inbox).not.toBeNull(); @@ -130,17 +120,23 @@ describe.each(['single-server', 'multi-server'])('In mode %s, posting to followe await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, '@context': 'https://www.w3.org/ns/activitystreams', - actor: bob.id, + actor: bob.webId, type: ACTIVITY_TYPES.UNDO, object: followActivity.id, - to: [alice.id, `${bob.id}/followers`] + to: [alice.webId, bob.followers] }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + await expect( + bob.call('activitypub.collection.includes', { collectionUri: bob.following, itemUri: alice.webId }) + ).resolves.toBeFalsy(); + }, 20_000); + + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( - alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.id }) + alice.call('activitypub.collection.includes', { collectionUri: alice.followers, itemUri: bob.webId }) ).resolves.toBeFalsy(); }, 20_000); }); diff --git a/src/middleware/tests/activitypub/inbox.test.ts b/src/middleware/tests/activitypub/inbox.test.ts index fede19a01..fefb3acf1 100644 --- a/src/middleware/tests/activitypub/inbox.test.ts +++ b/src/middleware/tests/activitypub/inbox.test.ts @@ -1,114 +1,87 @@ import { ACTIVITY_TYPES, OBJECT_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; +import { createAccount, dropAllDatasets } from '../utils.ts'; jest.setTimeout(50_000); -let broker: any; -let broker2: any; -beforeAll(async () => { - broker = await initialize(3000, 'testData', 'settings'); - broker2 = broker; -}); - -afterAll(async () => { - if (broker) await broker.stop(); -}); - -describe('Permissions are correctly set on inbox', () => { - let simon: any; - let sebastien: any; - - test('Create actor', async () => { - const { webId: sebastienUri } = await broker.call('auth.signup', { - username: 'srosset81', - email: 'sebastien@test.com', - password: 'test', - name: 'Sébastien' - }); - - sebastien = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: sebastienUri }); - - const { webId: simonUri } = await broker2.call('auth.signup', { - username: 'simonlouvet', - email: 'simon@test.com', - password: 'test', - name: 'Simon' - }); - - simon = await broker2.call('activitypub.actor.awaitCreateComplete', { actorUri: simonUri }); - - expect(sebastien).toMatchObject({ - id: sebastienUri, - type: expect.arrayContaining(['Person', 'foaf:Person']), - preferredUsername: 'srosset81', - 'foaf:nick': 'srosset81', - inbox: `${sebastienUri}/inbox`, - outbox: `${sebastienUri}/outbox`, - followers: `${sebastienUri}/followers`, - following: `${sebastienUri}/following` - }); +let brokers: ServiceBroker[] = []; +let alice: any; +let bob: any; + +describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) => { + beforeAll(async () => { + await dropAllDatasets(); + + for (let i = 1; i <= numServers; i++) { + brokers[i] = await initialize(i); + await brokers[i].start(); + } + + if (numServers === 1) { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[1], 'bob'); + } else { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[2], 'bob'); + } }); - test('Inbox response for an actor that does not exist', async () => { - const resourceUri = simon.inbox.replace('simonlouvet', 'unknown'); // 'http://localhost:3000/as/actor/simonlouvet/inbox', - await expect( - broker.call('activitypub.collection.get', { - resourceUri, - webId: 'anon' - }) - ).rejects.toThrow('not found'); + afterAll(async () => { + for (let i = 1; i <= numServers; i++) { + if (brokers[i]) await brokers[i].stop(); + } }); - test('Post private message to friend', async () => { - const item = await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + test('Post private message to Bob', async () => { + const item = await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, - name: 'Private message to friend', - to: simon.id + name: 'Private message to Bob', + to: bob.webId }); // Get inbox as recipient + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const inbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, - afterEq: item.id, - webId: simon.id - }); + const inbox = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox, afterEq: item.id }); expect(inbox.orderedItems).toHaveLength(1); expect(inbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, - name: 'Private message to friend' + name: 'Private message to Bob' } }); }); // Get inbox as emitter + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const inbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, + const inbox = await bob.call('activitypub.collection.get', { + resourceUri: bob.inbox, afterEq: item.id, - webId: sebastien.id + webId: alice.webId }); expect(inbox.orderedItems).toHaveLength(1); expect(inbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, - name: 'Private message to friend' + name: 'Private message to Bob' } }); }); // Get inbox as anonymous + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const inbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, + const inbox = await bob.call('activitypub.collection.get', { + resourceUri: bob.inbox, afterEq: item.id, webId: 'anon' }); @@ -117,29 +90,27 @@ describe('Permissions are correctly set on inbox', () => { }); test('Post public message', async () => { - await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, name: 'Public message', - to: [PUBLIC_URI, simon.id] + to: [PUBLIC_URI, bob.webId] }); // Get inbox as recipient + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const inboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, - webId: simon.id - }); - const inbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, + const inboxMenu = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox }); + const inbox = await bob.call('activitypub.collection.get', { + resourceUri: bob.inbox, afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), - webId: simon.id + webId: bob.webId }); expect(inbox.orderedItems).toHaveLength(2); expect(inbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, @@ -149,19 +120,17 @@ describe('Permissions are correctly set on inbox', () => { }); // Get inbox as emitter + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const inboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, - webId: simon.id - }); - const inbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, + const inboxMenu = await bob.call('activitypub.collection.get', { resourceUri: bob.inbox, webId: alice.webId }); + const inbox = await bob.call('activitypub.collection.get', { + resourceUri: bob.inbox, afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), - webId: sebastien.id + webId: alice.webId }); expect(inbox.orderedItems).toHaveLength(2); expect(inbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, @@ -171,20 +140,20 @@ describe('Permissions are correctly set on inbox', () => { }); // Get inbox as anonymous + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const inboxMenu = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, - webId: simon.id + const inboxMenu = await bob.call('activitypub.collection.get', { + resourceUri: bob.inbox, + webId: 'anon' }); - const inbox = await broker.call('activitypub.collection.get', { - resourceUri: simon.inbox, + const inbox = await bob.call('activitypub.collection.get', { + resourceUri: bob.inbox, afterEq: new URL(inboxMenu?.first).searchParams.get('afterEq'), webId: 'anon' }); expect(inbox.orderedItems).toHaveLength(1); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(inbox.orderedItems[0]).toMatchObject({ - actor: sebastien.id, + actor: alice.webId, type: ACTIVITY_TYPES.CREATE, object: { type: OBJECT_TYPES.NOTE, diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index 05b9a22c9..c11470f95 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -10,6 +10,7 @@ import * as CONFIG from '../config.ts'; import { clearQueue } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); + const containers = [ { path: '/as/object', @@ -73,7 +74,7 @@ const initialize = async (number: number) => { mixins: [AuthLocalService], settings: { baseUrl, - jwtPath: path.resolve(__dirname, './jwt'), + jwtPath: path.resolve(__dirname, '../jwt'), accountsDataset: `settings${number}`, mail: false } diff --git a/src/middleware/tests/activitypub/like.test.ts b/src/middleware/tests/activitypub/like.test.ts index 2876e56d3..f7563519a 100644 --- a/src/middleware/tests/activitypub/like.test.ts +++ b/src/middleware/tests/activitypub/like.test.ts @@ -1,48 +1,38 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; +import { createAccount, dropAllDatasets } from '../utils.ts'; -jest.setTimeout(50000); -const NUM_USERS = 2; +jest.setTimeout(50_000); -describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', (mode: any) => { - let broker: any; - const actors: any = []; - let alice: any; - let bob: any; - let aliceMessageUri: any; +let brokers: ServiceBroker[] = []; +let alice: any; +let bob: any; +let aliceMessageUri: string; +let likesCollectionUri: string; +describe.each([1, 2])('With %i server(s), test like features', (numServers: number) => { beforeAll(async () => { - if (mode === 'single-server') { - broker = await initialize(3000, 'testData', 'settings'); - } else { - broker = []; - } + await dropAllDatasets(); - for (let i = 1; i <= NUM_USERS; i++) { - if (mode === 'multi-server') { - broker[i] = await initialize(3000 + i, `testData${i}`, `settings${i}`, i); - } else { - broker[i] = broker; - } - const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); - actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName: any, params: any, options = {}) => - // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. - broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); + for (let i = 1; i <= numServers; i++) { + brokers[i] = await initialize(i); + await brokers[i].start(); } - alice = actors[1]; - bob = actors[2]; + if (numServers === 1) { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[1], 'bob'); + } else { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[2], 'bob'); + } }); afterAll(async () => { - if (mode === 'multi-server') { - for (let i = 1; i <= NUM_USERS; i++) { - await broker[i].stop(); - } - } else { - await broker.stop(); + for (let i = 1; i <= numServers; i++) { + if (brokers[i]) await brokers[i].stop(); } }); @@ -51,9 +41,9 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, - attributedTo: alice.id, + attributedTo: alice.webId, content: 'Hello world', - to: [bob.id, PUBLIC_URI] + to: [bob.webId, PUBLIC_URI] }); aliceMessageUri = createActivity.object.id; @@ -63,33 +53,32 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( '@context': 'https://www.w3.org/ns/activitystreams', type: ACTIVITY_TYPES.LIKE, object: aliceMessageUri, - to: alice.id + to: alice.webId }); - // Ensure the /likes collection has been created + // Ensure the likes collection has been created + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - await expect( - alice.call('ldp.resource.get', { - resourceUri: aliceMessageUri - }) - ).resolves.toMatchObject({ - likes: `${aliceMessageUri}/likes` - }); + const aliceMessage = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); + expect(aliceMessage.likes).not.toBeUndefined(); + likesCollectionUri = aliceMessage.likes; }); - // Ensure Bob has been added to the /likes collection + // Ensure Bob has been added to the likes collection + // @ts-expect-error This expression is not callable await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }) + alice.call('activitypub.collection.get', { resourceUri: likesCollectionUri }) ).resolves.toMatchObject({ type: 'Collection', - items: bob.id + items: bob.webId }); }); - // Ensure the note has been added to Bob's /liked collection + // Ensure the note has been added to Bob's liked collection + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - await expect(bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` })).resolves.toMatchObject({ + await expect(bob.call('activitypub.collection.get', { resourceUri: bob.liked })).resolves.toMatchObject({ type: 'Collection', items: aliceMessageUri }); @@ -105,19 +94,20 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange likes', ( type: ACTIVITY_TYPES.LIKE, object: aliceMessageUri }, - to: alice.id + to: alice.webId }); - // Ensure Bob has been removed from the /likes collection + // Ensure Bob has been removed from the likes collection + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const likes = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/likes` }); + const likes = await alice.call('activitypub.collection.get', { resourceUri: likesCollectionUri }); expect(likes.items).toHaveLength(0); }); - // Ensure the note has been removed from Bob's /liked collection + // Ensure the note has been removed from Bob's liked collection + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const liked = await bob.call('activitypub.collection.get', { resourceUri: `${bob.id}/liked` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. + const liked = await bob.call('activitypub.collection.get', { resourceUri: bob.liked }); expect(liked.items).toHaveLength(0); }); }); diff --git a/src/middleware/tests/activitypub/message.test.ts b/src/middleware/tests/activitypub/message.test.ts index e3b37a20a..1c99bc5a9 100644 --- a/src/middleware/tests/activitypub/message.test.ts +++ b/src/middleware/tests/activitypub/message.test.ts @@ -1,49 +1,39 @@ import waitForExpect from 'wait-for-expect'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '@semapps/activitypub'; +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; +import { createAccount, dropAllDatasets } from '../utils.ts'; -jest.setTimeout(70000); -const NUM_USERS = 2; +jest.setTimeout(50_000); -describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages', (mode: any) => { - let broker: any; - const actors: any = []; - let alice: any; - let bob: any; - let aliceMessageUri: any; - let bobMessageUri: any; +let brokers: ServiceBroker[] = []; +let alice: any; +let bob: any; +let aliceMessageUri: string; +let bobMessageUri: string; +let repliesCollectionUri: string; +describe.each([1, 2])('With %i server(s), test messaging features', (numServers: number) => { beforeAll(async () => { - if (mode === 'single-server') { - broker = await initialize(3000, 'testData', 'settings'); - } else { - broker = []; - } + await dropAllDatasets(); - for (let i = 1; i <= NUM_USERS; i++) { - if (mode === 'multi-server') { - broker[i] = await initialize(3000 + i, `testData${i}`, `settings${i}`, i); - } else { - broker[i] = broker; - } - const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); - actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName: any, params: any, options = {}) => - // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. - broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); + for (let i = 1; i <= numServers; i++) { + brokers[i] = await initialize(i); + await brokers[i].start(); } - alice = actors[1]; - bob = actors[2]; + if (numServers === 1) { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[1], 'bob'); + } else { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[2], 'bob'); + } }); afterAll(async () => { - if (mode === 'multi-server') { - for (let i = 1; i <= NUM_USERS; i++) { - await broker[i].stop(); - } - } else { - await broker.stop(); + for (let i = 1; i <= numServers; i++) { + if (brokers[i]) await brokers[i].stop(); } }); @@ -52,9 +42,9 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, - attributedTo: alice.id, + attributedTo: alice.webId, content: 'Hello Bob, how are you doing ?', - to: bob.id + to: bob.webId }); aliceMessageUri = createActivity.object.id; @@ -63,42 +53,44 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' const message = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); expect(message).toMatchObject({ type: OBJECT_TYPES.NOTE, - attributedTo: alice.id, + attributedTo: alice.webId, content: 'Hello Bob, how are you doing ?' }); - // Ensure the /replies collection has not been created yet + // Ensure the replies collection has not been created yet expect(message.replies).not.toBeDefined(); }); - test('Bob replies to Alice and his message appears in the /replies collection', async () => { + test('Bob replies to Alice and his message appears in the replies collection', async () => { const createActivity = await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, - attributedTo: bob.id, + attributedTo: bob.webId, content: "I'm fine, what about you ?", inReplyTo: aliceMessageUri, - to: alice.id + to: alice.webId }); bobMessageUri = createActivity.object.id; + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ - replies: `${aliceMessageUri}/replies` - }); + const aliceMessage = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); + expect(aliceMessage.replies).not.toBeUndefined(); + repliesCollectionUri = aliceMessage.replies; }); + // @ts-expect-error This expression is not callable await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }) + alice.call('activitypub.collection.get', { resourceUri: repliesCollectionUri }) ).resolves.toMatchObject({ type: 'Collection', items: { id: bobMessageUri, type: OBJECT_TYPES.NOTE, - attributedTo: bob.id, + attributedTo: bob.webId, content: "I'm fine, what about you ?" } }); @@ -111,21 +103,22 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange messages' '@context': 'https://www.w3.org/ns/activitystreams', type: ACTIVITY_TYPES.DELETE, object: bobMessageUri, - to: alice.id + to: alice.webId }); + // @ts-expect-error This expression is not callable await waitForExpect(async () => { await expect(alice.call('ldp.resource.get', { resourceUri: bobMessageUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Note', - // @ts-expect-error TS(2304): Cannot find name 'expect'. deleted: expect.anything() }); }); + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - const replies = await alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/replies` }); - // @ts-expect-error TS(2304): Cannot find name 'expect'. + const replies = await alice.call('activitypub.collection.get', { resourceUri: repliesCollectionUri }); + // @ts-expect-error Property 'toBeUndefinedOrEmptyArray' does not exist expect(replies.items).toBeUndefinedOrEmptyArray(); }); }); diff --git a/src/middleware/tests/activitypub/object.test.ts b/src/middleware/tests/activitypub/object.test.ts index 873074918..df328d17f 100644 --- a/src/middleware/tests/activitypub/object.test.ts +++ b/src/middleware/tests/activitypub/object.test.ts @@ -1,104 +1,97 @@ +import { ServiceBroker } from 'moleculer'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '@semapps/activitypub'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; -import * as CONFIG from '../config.ts'; +import { createAccount, dropAllDatasets } from '../utils.ts'; -jest.setTimeout(50000); -let broker: any; +jest.setTimeout(70000); + +let broker: ServiceBroker; +let alice: any; beforeAll(async () => { - broker = await initialize(3000, 'testData', 'settings'); + await dropAllDatasets(); + broker = await initialize(1); + await broker.start(); + alice = await createAccount(broker, 'alice'); }); afterAll(async () => { - if (broker) await broker.stop(); + await broker.stop(); }); describe('Create/Update/Delete objects', () => { - let sebastien: any; let objectUri: any; - test('Create actor', async () => { - const { webId: sebastienUri } = await broker.call('auth.signup', { - username: 'srosset81', - email: 'sebastien@test.com', - password: 'test', - name: 'Sébastien' - }); - - sebastien = await broker.call('activitypub.actor.awaitCreateComplete', { actorUri: sebastienUri }); - - expect(sebastienUri).toBe(`${CONFIG.HOME_URL}as/actor/srosset81`); - }); - test('Create object', async () => { - const createActivity = await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + const createActivity = await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.ARTICLE, name: 'My first article', - attributedTo: sebastien.id, - to: sebastien.followers, + attributedTo: alice.webId, + to: alice.followers, content: 'My first article, I hope there is no tipo' }); expect(createActivity).toMatchObject({ type: ACTIVITY_TYPES.CREATE, - actor: sebastien.id, + actor: alice.webId, object: { type: OBJECT_TYPES.ARTICLE, name: 'My first article', content: 'My first article, I hope there is no tipo' }, - to: sebastien.followers + to: alice.followers }); expect(createActivity.object).toHaveProperty('id'); expect(createActivity.object).not.toHaveProperty('current'); + // @ts-expect-error This expression is not callable await waitForExpect(async () => { await expect( - broker.call('activitypub.collection.includes', { collectionUri: sebastien.outbox, itemUri: createActivity.id }) + alice.call('activitypub.collection.includes', { collectionUri: alice.outbox, itemUri: createActivity.id }) ).resolves.toBeTruthy(); }); objectUri = createActivity.object.id; // Check the object has been created in the container - const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); + const object = await alice.call('ldp.resource.get', { resourceUri: objectUri }); expect(object).toHaveProperty('type', OBJECT_TYPES.ARTICLE); expect(object).toHaveProperty('id', objectUri); }); test('Update object', async () => { - const updateActivity = await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + const updateActivity = await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: ACTIVITY_TYPES.UPDATE, - actor: sebastien.id, + actor: alice.webId, object: { id: objectUri, type: OBJECT_TYPES.ARTICLE, content: 'My first article, I hope there is no typo' }, - to: sebastien.followers + to: alice.followers }); expect(updateActivity).toMatchObject({ type: ACTIVITY_TYPES.UPDATE, - actor: sebastien.id, + actor: alice.webId, object: { id: objectUri, type: OBJECT_TYPES.ARTICLE, content: 'My first article, I hope there is no typo' }, - to: sebastien.followers + to: alice.followers }); expect(updateActivity.object).not.toHaveProperty('current'); expect(updateActivity.object).not.toHaveProperty('name'); // Check the object has been updated - const object = await broker.call('ldp.resource.get', { resourceUri: objectUri }); + const object = await alice.call('ldp.resource.get', { resourceUri: objectUri }); expect(object).toMatchObject({ id: objectUri, type: OBJECT_TYPES.ARTICLE, @@ -107,18 +100,18 @@ describe('Create/Update/Delete objects', () => { }); test('Delete object', async () => { - await broker.call('activitypub.outbox.post', { - collectionUri: sebastien.outbox, + await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: ACTIVITY_TYPES.DELETE, object: objectUri }); + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - await expect(broker.call('ldp.resource.get', { resourceUri: objectUri })).resolves.toMatchObject({ + await expect(alice.call('ldp.resource.get', { resourceUri: objectUri })).resolves.toMatchObject({ type: OBJECT_TYPES.TOMBSTONE, formerType: 'as:Article', - // @ts-expect-error TS(2304): Cannot find name 'expect'. deleted: expect.anything() }); }); diff --git a/src/middleware/tests/activitypub/outbox.test.ts b/src/middleware/tests/activitypub/outbox.test.ts index f03820ca9..38757f440 100644 --- a/src/middleware/tests/activitypub/outbox.test.ts +++ b/src/middleware/tests/activitypub/outbox.test.ts @@ -45,6 +45,7 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) }); // Get outbox as self + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox }); const outbox = await alice.call('activitypub.collection.get', { @@ -64,6 +65,7 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) }); // Get outbox as anonymous + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox, @@ -97,6 +99,7 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) }); // Get outbox as Bob + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox, @@ -121,6 +124,7 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) }); // Get outbox as anonymous + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox, @@ -147,6 +151,7 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) }); // Get outbox as Bob + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox, @@ -169,6 +174,7 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) }); // Get outbox as anonymous + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox, @@ -206,6 +212,7 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) expect(objectPrivateFirst?.id).toBe(activityUpdatedForFriend.object.id); // Get outbox as Bob + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox, @@ -256,7 +263,8 @@ describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) }); expect(objectPrivateFirst.id).toBe(activityUpdatedForPublic.object.id); - // Get outbox as anon. + // Get outbox as anon + // @ts-expect-error This expression is not callable await waitForExpect(async () => { const outboxMenu = await alice.call('activitypub.collection.get', { resourceUri: alice.outbox, diff --git a/src/middleware/tests/activitypub/shares.test.ts b/src/middleware/tests/activitypub/shares.test.ts index 5c35e3c58..f28db7c7f 100644 --- a/src/middleware/tests/activitypub/shares.test.ts +++ b/src/middleware/tests/activitypub/shares.test.ts @@ -1,48 +1,40 @@ import waitForExpect from 'wait-for-expect'; +import { ServiceBroker } from 'moleculer'; import { OBJECT_TYPES, ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import initialize from './initialize.ts'; +import { dropAllDatasets, createAccount } from '../utils.ts'; -jest.setTimeout(50000); -const NUM_USERS = 2; +jest.setTimeout(50_000); -describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', (mode: any) => { - let broker: any; - const actors: any = []; - let alice: any; - let bob: any; - let aliceMessageUri: any; +let brokers: ServiceBroker[] = []; +let alice: any; +let bob: any; + +describe.each([1, 2])('With %i server(s), post to outbox', (numServers: number) => { + let aliceMessageUri: string; let publicShareActivity: any; + let sharesCollectionUri: any; + beforeAll(async () => { - if (mode === 'single-server') { - broker = await initialize(3000, 'testData', 'settings'); - } else { - broker = []; - } + await dropAllDatasets(); - for (let i = 1; i <= NUM_USERS; i++) { - if (mode === 'multi-server') { - broker[i] = await initialize(3000 + i, `testData${i}`, `settings${i}`, i); - } else { - broker[i] = broker; - } - const { webId } = await broker[i].call('auth.signup', require(`./data/actor${i}.json`)); - actors[i] = await broker[i].call('activitypub.actor.awaitCreateComplete', { actorUri: webId }); - actors[i].call = (actionName: any, params: any, options = {}) => - // @ts-expect-error TS(2339): Property 'meta' does not exist on type '{}'. - broker[i].call(actionName, params, { ...options, meta: { ...options.meta, webId } }); + for (let i = 1; i <= numServers; i++) { + brokers[i] = await initialize(i); + await brokers[i].start(); } - alice = actors[1]; - bob = actors[2]; + if (numServers === 1) { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[1], 'bob'); + } else { + alice = await createAccount(brokers[1], 'alice'); + bob = await createAccount(brokers[2], 'bob'); + } }); afterAll(async () => { - if (mode === 'multi-server') { - for (let i = 1; i <= NUM_USERS; i++) { - await broker[i].stop(); - } - } else { - await broker.stop(); + for (let i = 1; i <= numServers; i++) { + if (brokers[i]) await brokers[i].stop(); } }); @@ -51,40 +43,34 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', collectionUri: alice.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: OBJECT_TYPES.NOTE, - attributedTo: alice.id, + attributedTo: alice.webId, content: 'Hello world', - to: [bob.id, PUBLIC_URI] + to: [bob.webId, PUBLIC_URI] }); aliceMessageUri = createActivity.object.id; - const privateShareActivity = await bob.call('activitypub.outbox.post', { - collectionUri: bob.outbox, - '@context': 'https://www.w3.org/ns/activitystreams', - type: ACTIVITY_TYPES.ANNOUNCE, - object: aliceMessageUri, - to: alice.id - }); - publicShareActivity = await bob.call('activitypub.outbox.post', { collectionUri: bob.outbox, '@context': 'https://www.w3.org/ns/activitystreams', type: ACTIVITY_TYPES.ANNOUNCE, object: aliceMessageUri, - to: [alice.id, PUBLIC_URI] + to: [alice.webId, PUBLIC_URI] }); // Ensure the /shares collection has been created + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - await expect(alice.call('ldp.resource.get', { resourceUri: aliceMessageUri })).resolves.toMatchObject({ - shares: `${aliceMessageUri}/shares` - }); + const aliceMessage = await alice.call('ldp.resource.get', { resourceUri: aliceMessageUri }); + expect(aliceMessage.shares).not.toBeUndefined(); + sharesCollectionUri = aliceMessage.shares; }); // Ensure only the public announce activity has been added to the /shares collection + // @ts-expect-error This expression is not callable await waitForExpect(async () => { await expect( - alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) + alice.call('activitypub.collection.get', { resourceUri: sharesCollectionUri }) ).resolves.toMatchObject({ type: 'Collection', items: publicShareActivity.id @@ -98,14 +84,14 @@ describe.each(['single-server', 'multi-server'])('In mode %s, exchange shares', '@context': 'https://www.w3.org/ns/activitystreams', type: ACTIVITY_TYPES.UNDO, object: publicShareActivity.id, - to: alice.id + to: alice.webId }); // Ensure the public announce activity has been removed from the /shares collection + // @ts-expect-error This expression is not callable await waitForExpect(async () => { - // @ts-expect-error TS(2304): Cannot find name 'expect'. await expect( - alice.call('activitypub.collection.get', { resourceUri: `${aliceMessageUri}/shares` }) + alice.call('activitypub.collection.get', { resourceUri: sharesCollectionUri }) ).resolves.not.toMatchObject({ items: publicShareActivity.id }); diff --git a/src/middleware/tests/crypto/initialize.ts b/src/middleware/tests/crypto/initialize.ts index 2abc99727..d4f12869e 100644 --- a/src/middleware/tests/crypto/initialize.ts +++ b/src/middleware/tests/crypto/initialize.ts @@ -56,7 +56,7 @@ const initialize = async (port: number) => { mixins: [AuthLocalService], settings: { baseUrl, - jwtPath: path.resolve(__dirname, './jwt'), + jwtPath: path.resolve(__dirname, '../jwt'), accountsDataset: CONFIG.SETTINGS_DATASET } }); diff --git a/src/middleware/tests/jest.setup.ts b/src/middleware/tests/jest.setup.ts index caa216be7..9133fe04e 100644 --- a/src/middleware/tests/jest.setup.ts +++ b/src/middleware/tests/jest.setup.ts @@ -1,4 +1,3 @@ -// @ts-expect-error TS(2304): Cannot find name 'expect'. expect.extend({ // An assertion to check if a value is undefined or an empty array toBeUndefinedOrEmptyArray(received: any) { diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index b2e8fd009..2409060ef 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import fetch from 'node-fetch'; +import fetch, { HeaderInit } from 'node-fetch'; import Redis from 'ioredis'; import { ActionParamSchema, CallingOptions, ServiceBroker, ServiceSchema } from 'moleculer'; import { Account } from '@semapps/auth'; @@ -103,32 +103,44 @@ export const createAccount = async (broker: ServiceBroker, username: string) => const token = await broker.call('auth.jwt.generateServerSignedToken', { payload: { webId } }); - const fetchAsUser = async (url: string, options: FetchOptions = {}) => - fetchServer(url, { - ...options, - headers: new fetch.Headers({ ...options?.headers, Authorization: `Bearer ${token}` }) - }); + const fetchAsUser = async (url: string, options: FetchOptions = {}) => { + let headers; + if (options.headers) { + headers = options.headers; + headers.set('Authorization', `Bearer ${token}`); + } else { + headers = new fetch.Headers({ Authorization: `Bearer ${token}` }); + } + return fetchServer(url, { ...options, headers }); + }; // Ensure keys are created and attached to the WebID (this is a side-effect of the auth.account.created event) // If we don't do that, tests may be stopped before the keys are created and this may generate errors // Note: See if we can avoid this because it increases some of the tests time by 30-50% await callAsUser('webid.awaitCreateComplete'); - // Get outbox if ActivityPub service is enabled - const services: ServiceSchema[] = await broker.call('$node.services'); - const outbox = - services.some(s => s.name === 'activitypub') && - (await callAsUser('activitypub.outbox.getUri', { objectUri: webId })); - - return { + let returnValues = { webId, token, baseUrl, username, call: callAsUser, - fetch: fetchAsUser, - outbox + fetch: fetchAsUser }; + + // Add more resources if ActivityPub services is enabled + const services: ServiceSchema[] = await broker.call('$node.services'); + if (services.some(s => s.name === 'activitypub')) { + const actor = await callAsUser('activitypub.actor.awaitCreateComplete', { actorUri: webId }); + + returnValues.inbox = actor.inbox; + returnValues.outbox = actor.outbox; + returnValues.followers = actor.followers; + returnValues.following = actor.following; + returnValues.liked = actor.liked; + } + + return returnValues; }; export const clearQueue = async (queueServiceUrl: string) => { diff --git a/website/docs/middleware/activitypub/index.md b/website/docs/middleware/activitypub/index.md index f38868386..c235969a6 100644 --- a/website/docs/middleware/activitypub/index.md +++ b/website/docs/middleware/activitypub/index.md @@ -124,28 +124,6 @@ Additionally, the ActivityPub services will append all the ActivityPub-specific The following events are emitted by the different ActivityPub sub-services. -### `activitypub.follow.added` - -Sent after an actor follows another one. - -##### Payload - -| Property | Type | Description | -| ----------- | -------- | ------------------------------- | -| `follower` | `String` | URI of the actor being followed | -| `following` | `String` | URI of the actor following | - -### `activitypub.follow.removed` - -Sent after an actor stops following another one. - -##### Payload - -| Property | Type | Description | -| ----------- | -------- | ------------------------------------------- | -| `follower` | `String` | URI of the actor not being followed anymore | -| `following` | `String` | URI of the actor following | - ### `activitypub.inbox.received` Sent after an actor receives an activity in his inbox. From 1f38210a5481b60c8e76fc7bd8db96b71706dc0e Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 17 Nov 2025 15:51:18 +0100 Subject: [PATCH 114/165] Refactor ActivityPub ApiService --- src/middleware/packages/activitypub/index.ts | 2 - .../mixins/controlled-collection.ts | 44 ------------------ .../activitypub/services/activitypub/index.ts | 5 +++ .../services/activitypub/subservices/api.ts | 42 +++++++++++++++++ .../services/activitypub/subservices/inbox.ts | 44 +++++++++--------- .../services/activitypub/subservices/like.ts | 6 +-- .../activitypub/subservices/outbox.ts | 45 ++++++++----------- 7 files changed, 89 insertions(+), 99 deletions(-) delete mode 100644 src/middleware/packages/activitypub/mixins/controlled-collection.ts create mode 100644 src/middleware/packages/activitypub/services/activitypub/subservices/api.ts diff --git a/src/middleware/packages/activitypub/index.ts b/src/middleware/packages/activitypub/index.ts index fd31054f5..b3426e1c3 100644 --- a/src/middleware/packages/activitypub/index.ts +++ b/src/middleware/packages/activitypub/index.ts @@ -2,7 +2,6 @@ import ActivityPubService from './services/activitypub/index.ts'; import ActivityPubMigrationService from './services/migration.ts'; import ActivityMappingService from './services/activity-mapping.ts'; import BotMixin from './mixins/bot.ts'; -import ControlledCollectionMixin from './mixins/controlled-collection.ts'; import ActivitiesHandlerMixin from './mixins/activities-handler.ts'; import matchActivity from './utils/matchActivity.ts'; import containers from './containers.ts'; @@ -13,7 +12,6 @@ export { ActivityPubMigrationService, ActivityMappingService, BotMixin, - ControlledCollectionMixin, ActivitiesHandlerMixin, matchActivity, containers diff --git a/src/middleware/packages/activitypub/mixins/controlled-collection.ts b/src/middleware/packages/activitypub/mixins/controlled-collection.ts deleted file mode 100644 index 15d3b2970..000000000 --- a/src/middleware/packages/activitypub/mixins/controlled-collection.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ServiceSchema } from 'moleculer'; -import { CollectionRegistration } from '../types.ts'; - -const ControlledCollectionMixin = { - settings: { - path: null, - attachToTypes: [], - attachPredicate: null, - ordered: true, - itemsPerPage: 10, - dereferenceItems: true, - sortPredicate: 'as:published', - sortOrder: 'semapps:DescOrder', - permissions: {}, - controlledActions: {} - }, - dependencies: ['activitypub.object', 'activitypub.collection', 'activitypub.collections-registry'], - async started() { - this.collectionRegistration = (await this.broker.call('activitypub.collections-registry.register', { - ...this.settings, - controlledActions: { - post: `${this.name}.apiPost`, - ...this.settings.controlledActions - } - })) as CollectionRegistration; - }, - actions: { - getUri: { - params: { - objectUri: { type: 'string', optional: true } - }, - async handler(ctx) { - const { objectUri } = ctx.params; - - return await ctx.call('activitypub.collections-registry.getCollectionUri', { - objectUri, - attachPredicate: this.collectionRegistration?.attachPredicate - }); - } - } - } -} satisfies Partial; - -export default ControlledCollectionMixin; diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index ae656003f..88028ec73 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -37,6 +37,11 @@ const ActivityPubService = { mixins: [SideEffectsService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin] }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message + this.broker.createService({ + mixins: [ApiService] + }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message this.broker.createService({ mixins: [CollectionService], diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts new file mode 100644 index 000000000..c39a4a2ba --- /dev/null +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -0,0 +1,42 @@ +import { ServiceSchema } from 'moleculer'; + +const ApiService = { + name: 'activitypub.api' as const, + actions: { + inbox: { + async handler(ctx) { + let { collectionUri, payload } = ctx.params; + + await ctx.call('activitypub.inbox.post', { collectionUri, ...payload }); + + ctx.meta.$statusCode = 202; + } + }, + outbox: { + async handler(ctx) { + let { collectionUri, payload } = ctx.params; + + const activity: any = await ctx.call('activitypub.outbox.post', { collectionUri, ...payload }); + + ctx.meta.$responseHeaders = { + Location: activity.id || activity['@id'], + 'Content-Length': 0 + }; + + // We need to set this also here (in addition to above) or we get a Moleculer warning + ctx.meta.$location = activity.id || activity['@id']; + ctx.meta.$statusCode = 201; + } + } + } +} satisfies ServiceSchema; + +export default ApiService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [ApiService.name]: typeof ApiService; + } + } +} diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 6c7259a30..7304f062b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,40 +1,37 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema, Errors } from 'moleculer'; +import { isWebId } from '@semapps/ldp'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; -import ControlledCollectionMixin from '../../../mixins/controlled-collection.ts'; const { MoleculerError } = Errors; const InboxService = { name: 'activitypub.inbox' as const, - mixins: [ControlledCollectionMixin, AwaitActivityMixin], + mixins: [AwaitActivityMixin], settings: { - path: '/inbox', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'http://www.w3.org/ns/ldp#inbox', - ordered: true, - itemsPerPage: 10, - dereferenceItems: true, - sortPredicate: 'as:published', - sortOrder: 'semapps:DescOrder', - permissions: collectionPermissionsWithAnonRead + collectionOptions: { + path: '/inbox', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'http://www.w3.org/ns/ldp#inbox', + ordered: true, + itemsPerPage: 10, + dereferenceItems: true, + sortPredicate: 'as:published', + sortOrder: 'semapps:DescOrder', + permissions: collectionPermissionsWithAnonRead, + controlledActions: { + post: 'activitypub.api.inbox' + } + } + }, + dependencies: ['activitypub.collections-registry'], + async started() { + await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - apiPost: { - async handler(ctx) { - let { collectionUri, payload } = ctx.params; - - await ctx.call('activitypub.inbox.post', { - collectionUri, - ...payload - }); - - ctx.meta.$statusCode = 202; - } - }, post: { async handler(ctx) { let { collectionUri, ...activity } = ctx.params; @@ -93,7 +90,6 @@ const InboxService = { const { isValid: validSignature } = await ctx.call('signature.verifyHttpSignature', { url: collectionUri, method: 'POST', - // @ts-expect-error TS(2339): Property 'originalHeaders' does not exist on type ... Remove this comment to see the full error message headers: ctx.meta.originalHeaders }); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 1c5ae6033..137b84a77 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -34,7 +34,7 @@ const LikeService = { async handler(ctx) { const { actorUri, objectUri } = ctx.params; - const actor = await ctx.call('activitypub.actor.get', { actorUri }); + const actor: any = await ctx.call('activitypub.actor.get', { actorUri }); // If a liked collection is attached to the actor, attach the object if (actor.liked) { @@ -66,7 +66,7 @@ const LikeService = { async handler(ctx) { const { actorUri, objectUri } = ctx.params; - const actor = await ctx.call('activitypub.actor.get', { actorUri }); + const actor: any = await ctx.call('activitypub.actor.get', { actorUri }); // If a liked collection is attached to the actor, detach the object if (actor.liked) { @@ -82,7 +82,7 @@ const LikeService = { async handler(ctx) { const { actorUri, objectUri } = ctx.params; - const object = await ctx.call('activitypub.object.get', { objectUri, actorUri }); + const object: any = await ctx.call('activitypub.object.get', { objectUri, actorUri }); // If a likes collection is attached to the object, detach the actor if (object.likes) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index d8b81f514..674523071 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -8,7 +8,6 @@ import { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; -import ControlledCollectionMixin from '../../../mixins/controlled-collection.ts'; const queueOptions = process.env.NODE_ENV === 'test' @@ -24,35 +23,29 @@ const queueOptions = const OutboxService = { name: 'activitypub.outbox' as const, - mixins: [ControlledCollectionMixin, AwaitActivityMixin], + mixins: [AwaitActivityMixin], settings: { baseUri: null, - path: '/outbox', - attachToTypes: Object.values(ACTOR_TYPES), - attachPredicate: 'https://www.w3.org/ns/activitystreams#outbox', - ordered: true, - itemsPerPage: 10, - dereferenceItems: true, - sortPredicate: 'as:published', - sortOrder: 'semapps:DescOrder', - permissions: collectionPermissionsWithAnonRead + collectionOptions: { + path: '/outbox', + attachToTypes: Object.values(ACTOR_TYPES), + attachPredicate: 'https://www.w3.org/ns/activitystreams#outbox', + ordered: true, + itemsPerPage: 10, + dereferenceItems: true, + sortPredicate: 'as:published', + sortOrder: 'semapps:DescOrder', + permissions: collectionPermissionsWithAnonRead, + controlledActions: { + post: 'activitypub.api.outbox' + } + } + }, + dependencies: ['activitypub.collections-registry'], + async started() { + await this.broker.call('activitypub.collections-registry.register', this.settings.collectionOptions); }, actions: { - apiPost: { - async handler(ctx) { - let { collectionUri, payload } = ctx.params; - - const activity: any = await this.actions.post({ collectionUri, ...payload }, { parentCtx: ctx }); - - ctx.meta.$responseHeaders = { - Location: activity.id || activity['@id'], - 'Content-Length': 0 - }; - // We need to set this also here (in addition to above) or we get a Moleculer warning - ctx.meta.$location = activity.id || activity['@id']; - ctx.meta.$statusCode = 201; - } - }, post: { async handler(ctx) { let { collectionUri, username, transient, ...activity } = ctx.params; From 9ef0d779858cd050c23a22285ca0304b0cf035d4 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 17 Nov 2025 16:23:16 +0100 Subject: [PATCH 115/165] Replace all baseUri with baseUrl --- .../activitypub/services/activitypub/index.ts | 48 +++++-------------- .../activitypub/subservices/activity.ts | 14 +++--- .../services/activitypub/subservices/actor.ts | 4 -- .../subservices/collections-registry.ts | 3 -- .../activitypub/subservices/follow.ts | 11 +---- .../services/activitypub/subservices/like.ts | 1 - .../activitypub/subservices/object.ts | 1 - .../activitypub/subservices/outbox.ts | 4 +- .../services/activitypub/subservices/reply.ts | 1 - .../services/activitypub/subservices/share.ts | 1 - src/middleware/packages/core/service.ts | 4 +- src/middleware/packages/jsonld/service.ts | 13 +++-- .../packages/triplestore/adapter.ts | 14 +++--- .../packages/triplestore/package.json | 1 + src/middleware/tests/jsonld/initialize.ts | 2 +- src/middleware/tests/ontologies/initialize.ts | 10 ++-- .../tests/ontologies/ontologies.test.ts | 1 - src/middleware/tests/webacl/utils.test.ts | 24 +++++----- website/docs/middleware/activitypub/index.md | 4 +- website/docs/middleware/jsonld/index.md | 4 +- 20 files changed, 61 insertions(+), 104 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index 88028ec73..99020da50 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -20,7 +20,7 @@ import FakeQueueMixin from '../../mixins/fake-queue.ts'; const ActivityPubService = { name: 'activitypub' as const, settings: { - baseUri: null, + baseUrl: null, activitiesPath: '/as/activity', collectionsPath: '/as/collection', activateTombstones: true, @@ -29,7 +29,7 @@ const ActivityPubService = { }, dependencies: ['api', 'ontologies'], created() { - const { baseUri, activitiesPath, collectionsPath, selectActorData, queueServiceUrl, activateTombstones } = + const { baseUrl, activitiesPath, collectionsPath, selectActorData, queueServiceUrl, activateTombstones } = this.settings; // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message @@ -38,9 +38,7 @@ const ActivityPubService = { }); // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message - this.broker.createService({ - mixins: [ApiService] - }); + this.broker.createService({ mixins: [ApiService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { pod... Remove this comment to see the full error message this.broker.createService({ @@ -49,62 +47,42 @@ const ActivityPubService = { }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.c... Remove this comment to see the full error message - this.broker.createService({ - mixins: [CollectionsRegistryService], - settings: { baseUri } - }); + this.broker.createService({ mixins: [CollectionsRegistryService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message - this.broker.createService({ - mixins: [ActorService], - settings: { baseUri, selectActorData } - }); + this.broker.createService({ mixins: [ActorService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.o... Remove this comment to see the full error message this.broker.createService({ mixins: [ObjectService], - settings: { baseUri, activateTombstones } + settings: { activateTombstones } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.a... Remove this comment to see the full error message this.broker.createService({ mixins: [ActivityService], - settings: { baseUri, path: activitiesPath } + settings: { baseUrl, path: activitiesPath } }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.f... Remove this comment to see the full error message - this.broker.createService({ - mixins: [FollowService], - settings: { baseUri } - }); + this.broker.createService({ mixins: [FollowService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.i... Remove this comment to see the full error message - this.broker.createService({ - mixins: [InboxService] - }); + this.broker.createService({ mixins: [InboxService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.l... Remove this comment to see the full error message - this.broker.createService({ - mixins: [LikeService], - settings: { baseUri } - }); + this.broker.createService({ mixins: [LikeService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.s... Remove this comment to see the full error message - this.broker.createService({ - mixins: [ShareService], - settings: { baseUri } - }); + this.broker.createService({ mixins: [ShareService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub.r... Remove this comment to see the full error message - this.broker.createService({ - mixins: [ReplyService], - settings: { baseUri } - }); + this.broker.createService({ mixins: [ReplyService] }); // @ts-expect-error TS(2345): Argument of type '{ mixins: any[]; settings: { bas... Remove this comment to see the full error message this.broker.createService({ mixins: [OutboxService, queueServiceUrl ? QueueMixin(queueServiceUrl) : FakeQueueMixin], - settings: { baseUri } + settings: { baseUrl } }); }, async started() { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 2b6086aa0..051bb9e63 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -11,7 +11,7 @@ const ActivityService = { name: 'activitypub.activity' as const, mixins: [ControlledContainerMixin, ActivitiesHandlerMixin], settings: { - baseUri: null, + baseUrl: null, // ControlledContainerMixin settings path: '/as/activity', types: Object.values(FULL_ACTIVITY_TYPES), @@ -43,8 +43,8 @@ const ActivityService = { for (const predicates of ['to', 'bto', 'cc', 'bcc']) { if (activity[predicates]) { - for (const recipient of arrayOf(activity[predicates])) { - switch (recipient) { + for (const recipientUri of arrayOf(activity[predicates])) { + switch (recipientUri) { // Skip public URI case PUBLIC_URI: case 'as:Public': @@ -55,9 +55,9 @@ const ActivityService = { case actor.followers: // Ignore remote followers list // TODO Fetch remote followers list ? - if (recipient.startsWith(this.settings.baseUri)) { + if (this.isLocalActor(recipientUri)) { const collection = await ctx.call('activitypub.collection.get', { - resourceUri: recipient, + resourceUri: recipientUri, webId: activity.actor }); if (collection && collection.items) output.push(...arrayOf(collection.items)); @@ -66,7 +66,7 @@ const ActivityService = { // Simple actor URI default: - output.push(recipient); + output.push(recipientUri); break; } } @@ -99,7 +99,7 @@ const ActivityService = { }, methods: { isLocalActor(uri) { - return uri.startsWith(this.settings.baseUri); + return uri.startsWith(this.settings.baseUrl); } }, hooks: { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index d6022157d..cf006860d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -9,10 +9,6 @@ import { waitForResource } from '../../../utils.ts'; const ActorService = { name: 'activitypub.actor' as const, dependencies: ['activitypub.collection', 'ldp', 'signature'], - settings: { - baseUri: null, - selectActorData: null - }, actions: { get: { async handler(ctx) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 9fb05f361..7aa3fb52f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -8,9 +8,6 @@ import { CollectionRegistration } from '../../../types.ts'; const CollectionsRegistryService = { name: 'activitypub.collections-registry' as const, - settings: { - baseUri: null - }, dependencies: ['triplestore', 'ldp'], async started() { this.registeredCollections = []; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index 4666c3395..86cbd31e1 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -8,7 +8,6 @@ const FollowService = { name: 'activitypub.follow' as const, mixins: [ActivitiesHandlerMixin], settings: { - baseUri: null, followersCollectionOptions: { path: '/followers', attachToTypes: Object.values(ACTOR_TYPES), @@ -36,10 +35,7 @@ const FollowService = { async handler(ctx) { const { follower, following } = ctx.params; - if (!this.isLocalActor(follower)) - throw new Error('The method activitypub.follow.isFollowing currently only works with local actors'); - - const actor = await ctx.call('activitypub.actor.get', { actorUri: follower }); + const actor: any = await ctx.call('activitypub.actor.get', { actorUri: follower }); return await ctx.call('activitypub.collection.includes', { collectionUri: actor.following, itemUri: following @@ -176,11 +172,6 @@ const FollowService = { } } } - }, - methods: { - isLocalActor(uri) { - return uri.startsWith(this.settings.baseUri); - } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 137b84a77..65ae7dd6b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -8,7 +8,6 @@ const LikeService = { name: 'activitypub.like' as const, mixins: [ActivitiesHandlerMixin], settings: { - baseUri: null, likesCollectionOptions: { path: '/likes', attachPredicate: 'https://www.w3.org/ns/activitystreams#likes', diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index a8bcf42b8..93ae6b21c 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -5,7 +5,6 @@ import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; const ObjectService = { name: 'activitypub.object' as const, settings: { - baseUri: null, activateTombstones: true }, dependencies: ['ldp.resource'], diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index 674523071..e0f39da97 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -25,7 +25,7 @@ const OutboxService = { name: 'activitypub.outbox' as const, mixins: [AwaitActivityMixin], settings: { - baseUri: null, + baseUrl: null, collectionOptions: { path: '/outbox', attachToTypes: Object.values(ACTOR_TYPES), @@ -193,7 +193,7 @@ const OutboxService = { }, methods: { isLocalActor(uri) { - return uri.startsWith(this.settings.baseUri); + return uri.startsWith(this.settings.baseUrl); }, // TODO put this in the activitypub.inbox service async localPost(recipients, activityToPost) { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index 75fff7961..f28046c39 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -10,7 +10,6 @@ const ReplyService = { name: 'activitypub.reply' as const, mixins: [ActivitiesHandlerMixin], settings: { - baseUri: null, collectionOptions: { path: '/replies', attachPredicate: 'https://www.w3.org/ns/activitystreams#replies', diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index 58c11fbcb..e8dd0cf7d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -9,7 +9,6 @@ const ShareService = { name: 'activitypub.share' as const, mixins: [ActivitiesHandlerMixin], settings: { - baseUri: null, collectionOptions: { path: '/shares', attachPredicate: 'https://www.w3.org/ns/activitystreams#shares', diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index f8966445d..852109878 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -52,7 +52,7 @@ const CoreService = { mixins: [ActivityPubService], // Type support for settings could be given, once moleculer type definitions improve... settings: { - baseUri: baseUrl, + baseUrl, ...this.settings.activitypub } }); @@ -107,7 +107,7 @@ const CoreService = { this.broker.createService({ mixins: [JsonLdService], settings: { - baseUri: baseUrl, + baseUrl, ...this.settings.jsonld } }); diff --git a/src/middleware/packages/jsonld/service.ts b/src/middleware/packages/jsonld/service.ts index d3f4e207c..0931b4f0b 100644 --- a/src/middleware/packages/jsonld/service.ts +++ b/src/middleware/packages/jsonld/service.ts @@ -8,25 +8,25 @@ import JsonLdParserService from './services/parser/index.ts'; const JsonldSchema = { name: 'jsonld' as const, settings: { - baseUri: null, + baseUrl: null, localContextPath: '.well-known/context.jsonld', cachedContextFiles: [] }, dependencies: ['ontologies'], async created() { - const { baseUri, localContextPath, cachedContextFiles } = this.settings; + const { baseUrl, localContextPath, cachedContextFiles } = this.settings; - if (!baseUri || !localContextPath) { - throw new Error('The baseUri and localContextPath settings are required'); + if (!baseUrl || !localContextPath) { + throw new Error('The baseUrl and localContextPath settings are required'); } let localContextUri; if (localContextPath.startsWith('.well-known') || localContextPath.startsWith('/.well-known')) { // For /.well-known URIs, use the root path - const { origin } = new URL(baseUri); + const { origin } = new URL(baseUrl); localContextUri = urlJoin(origin, localContextPath); } else { - localContextUri = urlJoin(baseUri, localContextPath); + localContextUri = urlJoin(baseUrl, localContextPath); } // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.docume... Remove this comment to see the full error message @@ -40,7 +40,6 @@ const JsonldSchema = { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "jsonld.contex... Remove this comment to see the full error message this.broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "jsonld.context"; settings: { localC... Remove this comment to see the full error message mixins: [JsonLdContextService], settings: { localContextUri diff --git a/src/middleware/packages/triplestore/adapter.ts b/src/middleware/packages/triplestore/adapter.ts index 6364a2339..95a0cd362 100644 --- a/src/middleware/packages/triplestore/adapter.ts +++ b/src/middleware/packages/triplestore/adapter.ts @@ -1,17 +1,17 @@ /* eslint-disable class-methods-use-this */ import { MIME_TYPES } from '@semapps/mime-types'; - +import { DbAdapter } from 'moleculer-db'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import { frame } from 'jsonld'; import { sanitizeSparqlUri, sanitizeSparqlString } from './utils.ts'; -class TripleStoreAdapter { - constructor({ type, dataset, baseUri, ontology = 'http://semapps.org/ns/core#' }: any) { +class TripleStoreAdapter implements DbAdapter { + constructor({ type, dataset, baseUrl, ontology = 'http://semapps.org/ns/core#' }: any) { // @ts-expect-error TS(2339): Property 'type' does not exist on type 'TripleStor... Remove this comment to see the full error message this.type = type; - // @ts-expect-error TS(2339): Property 'baseUri' does not exist on type 'TripleS... Remove this comment to see the full error message - this.baseUri = baseUri || `urn:${type}:`; + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'TripleS... Remove this comment to see the full error message + this.baseUrl = baseUrl || `urn:${type}:`; // @ts-expect-error TS(2339): Property 'dataset' does not exist on type 'TripleS... Remove this comment to see the full error message this.dataset = dataset; // @ts-expect-error TS(2339): Property 'ontology' does not exist on type 'Triple... Remove this comment to see the full error message @@ -160,8 +160,8 @@ class TripleStoreAdapter { */ insert(entity: any) { const { slug, ...resource } = entity; - // @ts-expect-error TS(2339): Property 'baseUri' does not exist on type 'TripleS... Remove this comment to see the full error message - resource['@id'] = this.baseUri + (slug || uuidv4()); + // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'TripleS... Remove this comment to see the full error message + resource['@id'] = this.baseUrl + (slug || uuidv4()); // Ensure no predicates include an ontology const keyWithOntology = Object.keys(resource).find(key => key.includes(':')); diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 81de956e7..5d781c440 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -10,6 +10,7 @@ "jsonld": "^3.3.2", "negotiator": "^0.6.2", "node-fetch": "^2.6.6", + "moleculer-db": "^0.8.16", "sparqljs": "^3.5.2", "sparqljson-parse": "^1.5.1", "speakingurl": "^14.0.1", diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index 005d66db0..04bfec902 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -27,7 +27,7 @@ export default async (cacher: any, persistRegistry: any) => { broker.createService({ mixins: [JsonLdService], settings: { - baseUri: CONFIG.HOME_URL, + baseUrl: CONFIG.HOME_URL, // Fake contexts to avoid validation errors cachedContextFiles: [ { diff --git a/src/middleware/tests/ontologies/initialize.ts b/src/middleware/tests/ontologies/initialize.ts index f7d742126..f88a09db3 100644 --- a/src/middleware/tests/ontologies/initialize.ts +++ b/src/middleware/tests/ontologies/initialize.ts @@ -1,17 +1,17 @@ import path from 'path'; -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import ApiGatewayService from 'moleculer-web'; import { JsonLdService } from '@semapps/jsonld'; import { OntologiesService } from '@semapps/ontologies'; import { TripleStoreService } from '@semapps/triplestore'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { dropDataset } from '../utils.ts'; +import { dropAllDatasets } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default async (cacher: any) => { - await dropDataset(CONFIG.SETTINGS_DATASET); + await dropAllDatasets(); const broker = new ServiceBroker({ logger: { @@ -27,7 +27,7 @@ export default async (cacher: any) => { broker.createService({ mixins: [JsonLdService], settings: { - baseUri: CONFIG.HOME_URL, + baseUrl: CONFIG.HOME_URL, // Fake contexts to avoid validation errors cachedContextFiles: [ { @@ -42,6 +42,7 @@ export default async (cacher: any) => { } }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: (Moleculer.ServiceSche... Remove this comment to see the full error message broker.createService({ mixins: [TripleStoreService], settings: { @@ -57,7 +58,6 @@ export default async (cacher: any) => { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ontologies"; ... Remove this comment to see the full error message broker.createService({ - // @ts-expect-error TS(2322): Type '{ name: "ontologies"; settings: { ontologies... Remove this comment to see the full error message mixins: [OntologiesService], settings: { persistRegistry: true, diff --git a/src/middleware/tests/ontologies/ontologies.test.ts b/src/middleware/tests/ontologies/ontologies.test.ts index e3426c376..9becfb6b8 100644 --- a/src/middleware/tests/ontologies/ontologies.test.ts +++ b/src/middleware/tests/ontologies/ontologies.test.ts @@ -133,7 +133,6 @@ describe.each([false, true])('Register ontologies with cacher %s', (cacher: any) test('Get prefixes', async () => { const prefixes = await broker.call('ontologies.getPrefixes'); - // @ts-expect-error TS(2304): Cannot find name 'expect'. expect(prefixes).toEqual({ ont1: 'https://www.w3.org/ns/ontology1#', ont2: 'https://www.w3.org/ns/ontology2#', diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts index 312ec67d8..b81b57c4a 100644 --- a/src/middleware/tests/webacl/utils.test.ts +++ b/src/middleware/tests/webacl/utils.test.ts @@ -63,7 +63,7 @@ describe('Test various actions of the webacl.resource service', () => { }); const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); - const baseUri = rights['@context']['@base']; + const baseUrl = rights['@context']['@base']; expect(rights['@graph']).toHaveLength(2); @@ -71,7 +71,7 @@ describe('Test various actions of the webacl.resource service', () => { '@graph': expect.arrayContaining([ expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Read`, + '@id': `${baseUrl}#Read`, 'acl:accessTo': resourceUri, 'acl:agent': BOB_WEBID, 'acl:agentClass': 'foaf:Agent', @@ -79,7 +79,7 @@ describe('Test various actions of the webacl.resource service', () => { }), expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Write`, + '@id': `${baseUrl}#Write`, 'acl:accessTo': resourceUri, 'acl:agent': BOB_WEBID, 'acl:mode': 'acl:Write' @@ -111,7 +111,7 @@ describe('Test various actions of the webacl.resource service', () => { }); const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: BOB_WEBID }); - const baseUri = rights['@context']['@base']; + const baseUrl = rights['@context']['@base']; expect(rights['@graph']).toHaveLength(6); @@ -119,7 +119,7 @@ describe('Test various actions of the webacl.resource service', () => { '@graph': expect.arrayContaining([ expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Read`, + '@id': `${baseUrl}#Read`, 'acl:mode': 'acl:Read', 'acl:accessTo': resourceUri, 'acl:agent': expect.arrayContaining([BOB_WEBID, alice.webId]), @@ -127,14 +127,14 @@ describe('Test various actions of the webacl.resource service', () => { }), expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Write`, + '@id': `${baseUrl}#Write`, 'acl:mode': 'acl:Write', 'acl:accessTo': resourceUri, 'acl:agent': BOB_WEBID }), expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Control`, + '@id': `${baseUrl}#Control`, 'acl:mode': 'acl:Control', 'acl:accessTo': resourceUri, 'acl:agent': BOB_WEBID @@ -157,7 +157,7 @@ describe('Test various actions of the webacl.resource service', () => { }); const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: 'anon' }); - const baseUri = rights['@context']['@base']; + const baseUrl = rights['@context']['@base']; expect(rights['@graph']).toHaveLength(1); @@ -165,7 +165,7 @@ describe('Test various actions of the webacl.resource service', () => { '@graph': expect.arrayContaining([ expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Read`, + '@id': `${baseUrl}#Read`, 'acl:mode': 'acl:Read', 'acl:accessTo': resourceUri, 'acl:agentClass': 'foaf:Agent' @@ -196,7 +196,7 @@ describe('Test various actions of the webacl.resource service', () => { }); const rights = await alice.call('webacl.resource.getRights', { resourceUri, webId: CRAIG_WEBID }); - const baseUri = rights['@context']['@base']; + const baseUrl = rights['@context']['@base']; expect(rights['@graph']).toHaveLength(2); @@ -204,7 +204,7 @@ describe('Test various actions of the webacl.resource service', () => { '@graph': expect.arrayContaining([ expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Read`, + '@id': `${baseUrl}#Read`, 'acl:mode': 'acl:Read', 'acl:accessTo': resourceUri, 'acl:agent': CRAIG_WEBID, @@ -212,7 +212,7 @@ describe('Test various actions of the webacl.resource service', () => { }), expect.objectContaining({ '@type': 'acl:Authorization', - '@id': `${baseUri}#Write`, + '@id': `${baseUrl}#Write`, 'acl:mode': 'acl:Write', 'acl:accessTo': resourceUri, 'acl:agent': CRAIG_WEBID diff --git a/website/docs/middleware/activitypub/index.md b/website/docs/middleware/activitypub/index.md index c235969a6..9d9f633c1 100644 --- a/website/docs/middleware/activitypub/index.md +++ b/website/docs/middleware/activitypub/index.md @@ -56,7 +56,7 @@ const { ActivityPubService } = require('@semapps/activitypub'); module.exports = { mixins: [ActivityPubService], settings: { - baseUri: 'http://localhost:3000/', + baseUrl: 'http://localhost:3000/', queueServiceUrl: null, activateTombestones: true } @@ -115,7 +115,7 @@ Additionally, the ActivityPub services will append all the ActivityPub-specific | Property | Type | Default | Description | | --------------------- | ---------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `baseUri` | `String` | **required** | Base URI of your web server | +| `baseUrl` | `String` | **required** | Base URI of your web server | | `selectActorData` | `Function` | | Receives the data provided on signup (as JSON-LD), and must return the properties (with full URI) to be appended to the actor profile (see above). | | `queueServiceUrl` | `String` | | Redis connection string. If set, the [Bull](https://github.com/OptimalBits/bull) task manager will be used to handle federation POSTs. | | `activateTombestones` | `Boolean` | true | If true, all deleted resources will be replaced with a [Tombstone](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tombstone), except for containers which have disabled this | diff --git a/website/docs/middleware/jsonld/index.md b/website/docs/middleware/jsonld/index.md index 2dbe70be1..34b06b51b 100644 --- a/website/docs/middleware/jsonld/index.md +++ b/website/docs/middleware/jsonld/index.md @@ -37,7 +37,7 @@ const { JsonLdService } = require('@semapps/jsonld'); module.exports = { mixins: [JsonLdService], settings: { - baseUri: 'http://localhost:3000', + baseUrl: 'http://localhost:3000', localContextPath: '/.well-known/context.jsonld', cachedContextFiles: [ { @@ -53,6 +53,6 @@ module.exports = { | Property | Type | Default | Description | | -------------------- | ---------- | ----------------------------- | -------------------------------------------------------------- | -| `baseUri` | `String` | **required** | Base URL of the server. | +| `baseUrl` | `String` | **required** | Base URL of the server. | | `localContextPath` | `String` | "/.well-known/context.jsonld" | Path of the automatically generated local JSON-LD context file | | `cachedContextFiles` | `[Object]` | | Context files to put in cache on start (see example above) | From 2580c7c0d168c6eec9c768a070d446df89c9080c Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 18 Nov 2025 16:30:47 +0100 Subject: [PATCH 116/165] Add ontology type --- src/middleware/packages/activitypub/index.ts | 1 + src/middleware/packages/core/service.ts | 7 ++----- src/middleware/packages/core/serviceTypes.d.ts | 4 ++-- src/middleware/packages/ontologies/index.ts | 1 + src/middleware/packages/ontologies/service.ts | 6 +++--- src/middleware/packages/ontologies/types.ts | 6 ++++++ src/middleware/packages/triplestore/subservices/dataset.ts | 2 +- 7 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 src/middleware/packages/ontologies/types.ts diff --git a/src/middleware/packages/activitypub/index.ts b/src/middleware/packages/activitypub/index.ts index b3426e1c3..421182d09 100644 --- a/src/middleware/packages/activitypub/index.ts +++ b/src/middleware/packages/activitypub/index.ts @@ -7,6 +7,7 @@ import matchActivity from './utils/matchActivity.ts'; import containers from './containers.ts'; export * from './constants.ts'; +export * from './types.ts'; export { ActivityPubService, ActivityPubMigrationService, diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 852109878..a3ee8fd58 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -1,4 +1,3 @@ -import path from 'path'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import ApiGatewayService, { Errors as E } from 'moleculer-web'; import { ActivityPubService } from '@semapps/activitypub'; @@ -13,13 +12,12 @@ import { WebfingerService } from '@semapps/webfinger'; import { KeysService, SignatureService } from '@semapps/crypto'; import { WebIdService } from '@semapps/webid'; import { ServiceSchema } from 'moleculer'; -import { CoreServiceSettings } from './serviceTypes.js'; +import { CoreServiceSettings } from './serviceTypes.ts'; const CoreService = { name: 'core' as const, settings: { baseUrl: undefined, - baseDir: undefined, triplestore: { url: undefined, user: undefined, @@ -44,7 +42,7 @@ const CoreService = { webid: {} }, created() { - const { baseUrl, baseDir, triplestore, containers, ontologies } = this.settings; + const { baseUrl, triplestore, containers, ontologies } = this.settings; if (this.settings.activitypub !== false) { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub";... Remove this comment to see the full error message @@ -176,7 +174,6 @@ const CoreService = { this.broker.createService({ mixins: [KeysService], settings: { - actorsKeyPairsDir: path.resolve(baseDir, './actors'), ...this.settings.keys } }); diff --git a/src/middleware/packages/core/serviceTypes.d.ts b/src/middleware/packages/core/serviceTypes.d.ts index 21c9be233..4ba5518e9 100644 --- a/src/middleware/packages/core/serviceTypes.d.ts +++ b/src/middleware/packages/core/serviceTypes.d.ts @@ -1,8 +1,8 @@ import { Context, ServiceSettingSchema } from 'moleculer'; +import { Ontology } from '@semapps/ontologies'; export interface CoreServiceSettings extends ServiceSettingSchema { baseUrl?: string; - baseDir?: string; triplestore: { url?: string; user?: string; @@ -13,7 +13,7 @@ export interface CoreServiceSettings extends ServiceSettingSchema { }; // Optional containers?: string; - ontologies?: string; + ontologies?: Ontology[]; // Services configurations, no typings yet. activitypub: object | boolean; api: object | boolean; diff --git a/src/middleware/packages/ontologies/index.ts b/src/middleware/packages/ontologies/index.ts index dae6c20ea..0fccd7d1b 100644 --- a/src/middleware/packages/ontologies/index.ts +++ b/src/middleware/packages/ontologies/index.ts @@ -1,6 +1,7 @@ import OntologiesService from './service.ts'; import OntologiesRegistryService from './sub-services/registry.ts'; +export * from './types.ts'; export { OntologiesService, OntologiesRegistryService }; export * from './ontologies/core/index.ts'; diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index eb2ae2bda..18c75b3c9 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -9,6 +9,7 @@ import getRdfPrefixesAction from './actions/getRdfPrefixes.ts'; import listAction from './actions/list.ts'; import prefixToUriAction from './actions/prefixToUri.ts'; import registerAction from './actions/register.ts'; +import { Ontology } from './types.ts'; const OntologiesSchema = { name: 'ontologies' as const, @@ -28,7 +29,7 @@ const OntologiesSchema = { } }, async started() { - this.ontologies = {}; + this.ontologies = {} as { [key: string]: Ontology }; await this.registerAll(); }, actions: { @@ -39,14 +40,13 @@ const OntologiesSchema = { getRdfPrefixes: getRdfPrefixesAction, list: listAction, prefixToUri: prefixToUriAction, - // @ts-expect-error TS(2322): Type '{ visibility: "public"; params: { prefix: st... Remove this comment to see the full error message register: registerAction }, methods: { async registerAll() { if (this.settings.persistRegistry) { await this.broker.waitForServices(['ontologies.registry']); - const persistedOntologies = await this.broker.call('ontologies.registry.list'); + const persistedOntologies: { [key: string]: Ontology } = await this.broker.call('ontologies.registry.list'); this.ontologies = { ...this.ontologies, ...persistedOntologies }; } for (const ontology of this.settings.ontologies) { diff --git a/src/middleware/packages/ontologies/types.ts b/src/middleware/packages/ontologies/types.ts new file mode 100644 index 000000000..67a31578c --- /dev/null +++ b/src/middleware/packages/ontologies/types.ts @@ -0,0 +1,6 @@ +export interface Ontology { + prefix: string; + namespace: string; + preserveContextUri: boolean; + jsonldContext: any; +} diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index a742c077b..5318d695e 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -67,7 +67,7 @@ const DatasetService = { await this.actions.waitForCreation({ dataset }, { parentCtx: ctx }); this.logger.info(`Created ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); } else { - this.logger.info(await response.text()); + this.logger.warn(await response.text()); throw new Error(`Error when creating ${secure ? 'secure' : 'unsecure'} dataset ${dataset}`); } } From 08af4911b4f34e41a375edcf3c0a78221a9de26e Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 18 Nov 2025 17:15:17 +0100 Subject: [PATCH 117/165] Fix isRemote action --- .../packages/ldp/mixins/special-endpoint.ts | 6 +-- .../ldp/services/remote/actions/isRemote.ts | 6 +-- src/middleware/packages/solid/package.json | 2 + .../channels/notification-channel.mixin.ts | 16 ++------ .../solid/services/notifications/listener.ts | 1 - .../sync/middlewares/objects-watcher.ts | 38 ------------------- 6 files changed, 11 insertions(+), 58 deletions(-) diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index d09509b78..ae3ff605e 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -1,6 +1,5 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; - import { parseUrl, parseHeader, @@ -9,10 +8,9 @@ import { negotiateContentType, parseJson } from '@semapps/middlewares'; - import { ServiceSchema } from 'moleculer'; -const Schema = { +const SpecialEndpointMixin = { settings: { baseUrl: null, settingsDataset: null, @@ -103,4 +101,4 @@ const Schema = { } } satisfies Partial; -export default Schema; +export default SpecialEndpointMixin; diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index 6e7f48203..42aceb656 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; -const Schema = { +const IsRemoteAction = { visibility: 'public', params: { resourceUri: { type: 'string' }, @@ -16,7 +16,7 @@ const Schema = { return true; } else if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '/.'))) { // For special URLs starting with a dot (such as /.well-known), don't check datasets - return true; + return false; } else { // If the resource is on the same server, it may be on a different storage if (!dataset) { @@ -30,4 +30,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default IsRemoteAction; diff --git a/src/middleware/packages/solid/package.json b/src/middleware/packages/solid/package.json index 11d1f260b..069133629 100644 --- a/src/middleware/packages/solid/package.json +++ b/src/middleware/packages/solid/package.json @@ -6,12 +6,14 @@ "author": "Virtual Assembly", "dependencies": { "@rdfjs/data-model": "2.1.1", + "@semapps/auth": "1.2.0", "@semapps/activitypub": "1.2.0", "@semapps/ldp": "1.2.0", "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", "@semapps/triplestore": "1.2.0", + "@semapps/webacl": "1.2.0", "@semapps/webid": "1.2.0", "http-link-header": "^1.1.1", "moleculer-bull": "^0.2.5", diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index 44df1e79b..b5ed2e9d6 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -8,6 +8,8 @@ import rdf from '@rdfjs/data-model'; import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; import { ServiceSchema } from 'moleculer'; +import { WacPermission } from '@semapps/webacl'; +import { Account } from '@semapps/auth'; /** * Solid Notification Channel mixin. @@ -82,7 +84,6 @@ const Schema = { const type = ctx.params.type || ctx.params['@type']; const topic = ctx.params.topic || ctx.params['notify:topic']; const sendToParam = ctx.params.sendTo || ctx.params['notify:sendTo']; - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const { webId } = ctx.meta; // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... @@ -97,7 +98,7 @@ const Schema = { if (!exists) throw new E.BadRequestError('Cannot watch non-existing resource'); // Ensure topic can be watched by the authenticated agent - const rights = await ctx.call('webacl.resource.hasRights', { + const rights: WacPermission = await ctx.call('webacl.resource.hasRights', { resourceUri: topic, rights: { read: true }, webId @@ -141,7 +142,6 @@ const Schema = { this.channels.push(channel); this.onChannelCreated(channel); - // @ts-expect-error TS(2339): Property '$responseType' does not exist on type '{... Remove this comment to see the full error message ctx.meta.$responseType = 'application/ld+json'; return this.actions.get( { @@ -168,7 +168,6 @@ const Schema = { events: { 'ldp.resource.created': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); } @@ -176,7 +175,6 @@ const Schema = { 'ldp.resource.updated': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); } @@ -184,7 +182,6 @@ const Schema = { 'ldp.resource.patched': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); } @@ -192,7 +189,6 @@ const Schema = { 'ldp.resource.deleted': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'resourceUri' does not exist on type 'Opt... Remove this comment to see the full error message const { resourceUri } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); } @@ -200,7 +196,6 @@ const Schema = { 'ldp.container.attached': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); } @@ -208,7 +203,6 @@ const Schema = { 'ldp.container.detached': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'containerUri' does not exist on type 'Op... Remove this comment to see the full error message const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); } @@ -216,7 +210,6 @@ const Schema = { 'activitypub.collection.added': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message const { collectionUri, itemUri, item } = ctx.params; // Mastodon sometimes send unfetchable activities (like `Accept` activities) // In this case, we receive the activity as `item` and `itemUri` is undefined @@ -227,7 +220,6 @@ const Schema = { 'activitypub.collection.removed': { async handler(ctx) { - // @ts-expect-error TS(2339): Property 'collectionUri' does not exist on type 'O... Remove this comment to see the full error message const { collectionUri, itemUri } = ctx.params; this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); } @@ -290,7 +282,7 @@ const Schema = { ); }, async loadChannelsFromDb({ removeOldChannels }) { - const accounts = await this.broker.call('auth.account.find'); + const accounts: Account[] = await this.broker.call('auth.account.find'); for (const { webId } of accounts) { this.logger.debug(`Loading notification channels of ${webId}...`); try { diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index d476968a4..9bbada8c9 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -165,7 +165,6 @@ const SolidNotificationsListenerSchema = { } catch (e) { // Ignore errors that the actions may generate (otherwise 404 errors will be considered as non-existing webhooks) } - // @ts-expect-error TS(2339): Property '$statusCode' does not exist on type '{}'... Remove this comment to see the full error message ctx.meta.$statusCode = 200; } else { throw new MoleculerError(`No webhook found with URL ${webhookUrl}`, 404, 'NOT_FOUND'); diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index da3442400..4807d9e75 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -1,5 +1,4 @@ import { PUBLIC_URI, ACTIVITY_TYPES } from '@semapps/activitypub'; -import { Registration } from '@semapps/ldp'; const handledLdpActions = ['ldp.container.post', 'ldp.resource.put', 'ldp.resource.patch', 'ldp.resource.delete']; @@ -13,7 +12,6 @@ const handledWacActions = [ const ObjectsWatcherMiddleware = (config = {}) => { // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type '{}'. const { baseUrl, postWithoutRecipients = false, transientActivities = false } = config; - let excludedContainersPathRegex: any = []; let initialized = false; let cacherActivated = false; @@ -55,13 +53,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { return recipients; }; - const isExcluded = (containersUris: any) => { - return containersUris.some((uri: any) => - // @ts-expect-error TS(7006): Parameter 'pathRegex' implicitly has an 'any' type... Remove this comment to see the full error message - excludedContainersPathRegex.some(pathRegex => pathRegex.test(new URL(uri).pathname)) - ); - }; - const outboxPost = async (ctx: any, resourceUri: any, recipients: any, activity: any) => { if (recipients.length > 0 || postWithoutRecipients) { const actor = await getActor(ctx, resourceUri); @@ -82,18 +73,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { return { name: 'ObjectsWatcherMiddleware', - async started(broker: any) { - const registrations: Registration[] = await broker.call('ldp.registry.list'); - for (const registration of registrations) { - // TODO stop using pathRegex - if (registration.excludeFromMirror === true && !excludedContainersPathRegex.includes(registration.pathRegex)) { - excludedContainersPathRegex.push(registration.pathRegex); - } - } - - initialized = true; - cacherActivated = !!broker.cacher; - }, localAction: (next: any, action: any) => { if (isHandled(action.name)) { return async (ctx: any) => { @@ -144,11 +123,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { // We never want to watch remote resources if (resourceUri && (await ctx.call('ldp.remote.isRemote', { resourceUri }))) return await next(ctx); - const containers = containerUri - ? [containerUri] - : await ctx.call('ldp.resource.getContainers', { resourceUri }); - if (isExcluded(containers)) return await next(ctx); - /* * BEFORE HOOKS */ @@ -329,18 +303,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { // Do not use the middleware for this action return next; - }, - localEvent(next: any, event: any) { - if (event.name === 'ldp.registry.registered') { - return async (ctx: any) => { - const { container } = ctx.params; - if (container.excludeFromMirror === true && !excludedContainersPathRegex.includes(container.pathRegex)) { - excludedContainersPathRegex.push(container.pathRegex); - } - return next(ctx); - }; - } - return next; } }; }; From e9cfdba0053d1e39059153d81c7b9ae5e574181d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 19 Nov 2025 11:22:59 +0100 Subject: [PATCH 118/165] Fix notifications context --- .../packages/crypto/signature/proxy.ts | 4 ++- .../ldp/mixins/controlled-resource.ts | 4 +-- .../packages/ldp/services/resource/index.ts | 2 +- src/middleware/packages/ldp/utils.ts | 17 ------------ .../packages/ontologies/actions/list.ts | 1 - .../channels/notification-channel.mixin.ts | 26 ++++++++++--------- .../solid/services/preferences-file.ts | 3 ++- .../services/type-index/private-type-index.ts | 1 + src/middleware/tests/utils.ts | 2 +- 9 files changed, 24 insertions(+), 36 deletions(-) diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index 736f3711e..fa674ec2f 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -146,10 +146,12 @@ const ProxyService = { const { webId } = ctx.params; const services: ServiceSchema[] = await ctx.call('$node.services'); if (services.some(s => s.name === 'activitypub.actor')) { + const baseUrl = await ctx.call('solid-storage.getBaseUrl'); + await ctx.call('activitypub.actor.addEndpoint', { actorUri: webId, predicate: 'https://www.w3.org/ns/activitystreams#proxyUrl', - endpoint: urlJoin(webId, 'proxy') + endpoint: urlJoin(baseUrl, 'proxy') }); } } diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index c4da841f7..36ba5c14a 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -72,7 +72,7 @@ const ControlledResourceMixin = { async handler(ctx) { const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({}, { parentCtx: ctx })); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); - return await ctx.call('ldp.resource.get', { resourceUri, ...ctx.params }); + return await ctx.call('ldp.resource.get', { ...ctx.params, resourceUri }); } }, @@ -80,7 +80,7 @@ const ControlledResourceMixin = { async handler(ctx) { const resourceUri = ctx.params.resourceUri || (await this.actions.getUri({}, { parentCtx: ctx })); if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); - return await ctx.call('ldp.resource.patch', { resourceUri, ...ctx.params }); + return await ctx.call('ldp.resource.patch', { ...ctx.params, resourceUri }); } }, diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index d20f23735..8109faaae 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -45,7 +45,7 @@ const LdpResourceSchema = { ctx.params.resourceUri || (ctx.params.resource && (ctx.params.resource.id || ctx.params.resource['@id'])); // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type 'string ... Remove this comment to see the full error message if (uri && uri.startsWith(this.settings.baseUrl)) { - console.error(`No dataset found when calling ${ctx.action.name} with URI ${uri}`); + this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${uri}`); ctx.meta.dataset = getDatasetFromUri(uri); } } diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index 6ea396e2b..7434a8d0b 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -94,22 +94,6 @@ const getDatasetFromUri = (uri: any) => { } }; -/** - * @deprecated Does not work anymore - */ -const getWebIdFromUri = (uri: any) => { - const path = getPathFromUri(uri); - if (path) { - const parts = path.split('/'); - if (parts.length > 1) { - const urlObject = new URL(uri); - return `${urlObject.origin}/${parts[1]}`; - } - } else { - throw new Error(`${uri} is not a valid URL`); - } -}; - const getId = (resource: any) => resource.id || resource['@id']; const getType = (resource: any) => resource.type || resource['@type']; @@ -182,7 +166,6 @@ export { getSlugFromUri, getContainerFromUri, getDatasetFromUri, - getWebIdFromUri, getId, getType, hasType, diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index 47035764f..0933b9d65 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -4,7 +4,6 @@ const Schema = { visibility: 'public', cache: true, handler() { - // @ts-expect-error TS(2769): No overload matches this call. return Object.values(this.ontologies); } } satisfies ActionSchema; diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index b5ed2e9d6..ab9d80d58 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -7,7 +7,7 @@ import rdf from '@rdfjs/data-model'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; -import { ServiceSchema } from 'moleculer'; +import { Context, ServiceSchema } from 'moleculer'; import { WacPermission } from '@semapps/webacl'; import { Account } from '@semapps/auth'; @@ -183,7 +183,9 @@ const Schema = { 'ldp.resource.patched': { async handler(ctx) { const { resourceUri } = ctx.params; - this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, await this.getModified(resourceUri)); + // We must get the resource because the 'ldp.resource.patched' event does not send it + const resource: any = await ctx.call('ldp.resource.get', { resourceUri, webId: 'system' }); + this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, resource?.['dc:modified']); } }, @@ -226,10 +228,6 @@ const Schema = { } }, methods: { - async getModified(resourceUri) { - // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message - return await this.broker.call('ldp.resource.get', { resourceUri, webId: 'system' })?.['dc:modified']; - }, getMatchingChannels(topic) { const now = new Date(); const matchedChannels = this.channels @@ -283,17 +281,21 @@ const Schema = { }, async loadChannelsFromDb({ removeOldChannels }) { const accounts: Account[] = await this.broker.call('auth.account.find'); - for (const { webId } of accounts) { + for (const { webId, username } of accounts) { this.logger.debug(`Loading notification channels of ${webId}...`); try { - const container = await this.actions.list({ webId }); + const container = await this.actions.list({ webId: 'system' }, { meta: { dataset: username } }); for (const channel of arrayOf(container['ldp:contains'])) { // Remove channels where endAt is in the past. if (removeOldChannels && channel['notify:endAt'] < new Date()) { - this.broker.call('ldp.resource.delete', { - resourceUri: channel.id || channel['@id'], - webId: 'system' - }); + this.broker.call( + 'ldp.resource.delete', + { + resourceUri: channel.id || channel['@id'], + webId: 'system' + }, + { meta: { dataset: username } } + ); continue; } diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index f3de54696..8f17479d5 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -7,6 +7,7 @@ const SolidPreferencesFileSchema = { name: 'solid-preferences-file' as const, mixins: [ControlledResourceMixin], settings: { + path: '/preferences-file', types: ['pim:ConfigurationFile'], permissions: {} }, @@ -16,7 +17,7 @@ const SolidPreferencesFileSchema = { }, events: { 'webid.created': { - async handler(ctx) { + async handler(ctx: any) { const { resourceUri: webId } = ctx.params; const preferencesUri = await this.actions.waitForCreation({}, { parentCtx: ctx }); await ctx.call('ldp.resource.patch', { diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index 85462b869..d94297e5d 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -19,6 +19,7 @@ const PrivateTypeIndexService = { if (preferencesUri) { await ctx.call('solid-preferences-file.patch', { + resourceUri: preferencesUri, triplesToAdd: [ rdf.quad( rdf.namedNode(preferencesUri), diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 2409060ef..840d8cee8 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import fetch, { HeaderInit } from 'node-fetch'; +import fetch from 'node-fetch'; import Redis from 'ioredis'; import { ActionParamSchema, CallingOptions, ServiceBroker, ServiceSchema } from 'moleculer'; import { Account } from '@semapps/auth'; From 3776a59d2ef5d05e0bdddd77800569caea13bc97 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 21 Nov 2025 12:05:57 +0100 Subject: [PATCH 119/165] Many fixes and improvements --- .../subservices/collection/index.ts | 2 +- .../subservices/collections-registry.ts | 34 +++++--- .../services/activitypub/subservices/inbox.ts | 3 +- .../activitypub/subservices/outbox.ts | 14 ++-- .../crypto/keys/public-keys-container.ts | 2 +- .../ldp/mixins/controlled-container.ts | 25 ++++-- .../ldp/mixins/controlled-resource.ts | 49 ++++++++--- .../ldp/services/container/actions/attach.ts | 5 +- .../ldp/services/container/actions/create.ts | 2 +- .../ldp/services/container/actions/patch.ts | 3 +- .../ldp/services/permissions/actions/has.ts | 1 - .../ldp/services/remote/actions/delete.ts | 17 ++-- .../ldp/services/remote/actions/store.ts | 26 ++---- src/middleware/packages/migration/2-0-0.ts | 6 +- .../solid/services/notifications/listener.ts | 2 +- .../packages/solid/services/storage.ts | 2 +- .../services/type-index/private-type-index.ts | 5 +- .../services/type-index/public-type-index.ts | 5 +- .../solid/services/type-index/type-index.ts | 18 ++-- .../sync/middlewares/objects-watcher.ts | 84 +++++++++---------- .../packages/sync/services/synchronizer.ts | 20 +---- .../packages/triplestore/service.ts | 1 - .../packages/webacl/routes/getRoutes.ts | 13 ++- .../services/group/actions/addMember.ts | 3 - .../webacl/services/group/actions/create.ts | 3 - .../webacl/services/group/actions/delete.ts | 3 - .../services/group/actions/getGroups.ts | 4 - .../services/group/actions/getMembers.ts | 3 - .../services/group/actions/removeMember.ts | 3 - .../services/resource/actions/addRights.ts | 4 +- .../services/resource/actions/getRights.ts | 4 +- .../services/resource/actions/setRights.ts | 4 +- .../webacl/services/resource/index.ts | 6 +- 33 files changed, 185 insertions(+), 191 deletions(-) diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 960ba461b..02ae8bc45 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -22,7 +22,7 @@ const CollectionService = { permissions: {}, // These default permissions can be overridden by providing // a `permissions` param when calling activitypub.collection.post - newResourcesPermissions: (webId: any) => { + newResourcesPermissions: (webId: string) => { switch (webId) { case 'anon': case 'system': diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 7aa3fb52f..de0e03ae7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -60,19 +60,27 @@ const CollectionsRegistryService = { this.collectionsInCreation.push(collectionTempId); // Create the collection - collectionUri = await ctx.call('activitypub.collection.post', { - resource: { - type: ordered ? ['Collection', 'OrderedCollection'] : 'Collection', - summary, - 'semapps:dereferenceItems': dereferenceItems, - 'semapps:itemsPerPage': itemsPerPage, - 'semapps:sortPredicate': sortPredicate, - 'semapps:sortOrder': sortOrder + collectionUri = await ctx.call( + 'activitypub.collection.post', + { + resource: { + type: ordered ? ['Collection', 'OrderedCollection'] : 'Collection', + summary, + 'semapps:dereferenceItems': dereferenceItems, + 'semapps:itemsPerPage': itemsPerPage, + 'semapps:sortPredicate': sortPredicate, + 'semapps:sortOrder': sortOrder + }, + slug: (await ctx.call('ldp.getSetting', { key: 'allowSlugs' })) ? path : undefined, + webId: 'system', + permissions // Handled by the WebAclMiddleware, if present }, - slug: (await ctx.call('ldp.getSetting', { key: 'allowSlugs' })) ? path : undefined, - webId: 'system', - permissions // Handled by the WebAclMiddleware, if present - }); + { + meta: { + skipObjectsWatcher: true // We don't want to trigger a Create activity + } + } + ); // Attach it to the object await ctx.call( @@ -86,7 +94,7 @@ const CollectionsRegistryService = { }, { meta: { - skipObjectsWatcher: true // We don't want to trigger an Update + skipObjectsWatcher: true // We don't want to trigger an Update activity } } ); diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 7304f062b..b6735c471 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -106,8 +106,7 @@ const InboxService = { // Save the remote activity in the local triple store await ctx.call('ldp.remote.store', { resource: activity, - keepInSync: false, // Activities are immutable - webId: inboxOwner + keepInSync: false // Activities are immutable }); // Attach the activity to the activities container, in order to use the container options diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index e0f39da97..26e17d384 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -231,12 +231,14 @@ const OutboxService = { ); // Store the activity in the dataset of the recipient - await this.broker.call('ldp.remote.store', { - resource: activity, - keepInSync: false, // Activities are immutable - webId: recipientUri, - dataset - }); + await this.broker.call( + 'ldp.remote.store', + { + resource: activity, + keepInSync: false // Activities are immutable + }, + { meta: { dataset } } + ); await this.broker.call( 'activitypub.activity.attach', diff --git a/src/middleware/packages/crypto/keys/public-keys-container.ts b/src/middleware/packages/crypto/keys/public-keys-container.ts index f40c7c8a7..c2489b1ac 100644 --- a/src/middleware/packages/crypto/keys/public-keys-container.ts +++ b/src/middleware/packages/crypto/keys/public-keys-container.ts @@ -21,7 +21,7 @@ const PublicKeysService = { read: true } }, - excludeFromMirror: false, + excludeFromMirror: true, typeIndex: 'public' }, diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index bc25c984c..68863cf70 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -41,16 +41,18 @@ const ControlledContainerMixin = { post: { async handler(ctx) { if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + ctx.params.containerUri = await this.actions.getContainerUri({}, { parentCtx: ctx }); } - return await ctx.call('ldp.container.post', ctx.params); + return await ctx.call('ldp.container.post', ctx.params, { + meta: { skipObjectsWatcher: this.settings.excludeFromMirror } + }); } }, list: { async handler(ctx) { if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + ctx.params.containerUri = await this.actions.getContainerUri({}, { parentCtx: ctx }); } return ctx.call('ldp.container.get', ctx.params); } @@ -59,7 +61,7 @@ const ControlledContainerMixin = { attach: { async handler(ctx) { if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + ctx.params.containerUri = await this.actions.getContainerUri({}, { parentCtx: ctx }); } return ctx.call('ldp.container.attach', ctx.params); } @@ -68,7 +70,7 @@ const ControlledContainerMixin = { detach: { async handler(ctx) { if (!ctx.params.containerUri) { - ctx.params.containerUri = await this.actions.getContainerUri({ webId: ctx.params.webId }, { parentCtx: ctx }); + ctx.params.containerUri = await this.actions.getContainerUri({}, { parentCtx: ctx }); } return ctx.call('ldp.container.detach', ctx.params); } @@ -100,19 +102,25 @@ const ControlledContainerMixin = { patch: { handler(ctx) { - return ctx.call('ldp.resource.patch', ctx.params); + return ctx.call('ldp.resource.patch', ctx.params, { + meta: { skipObjectsWatcher: this.settings.excludeFromMirror } + }); } }, put: { handler(ctx) { - return ctx.call('ldp.resource.put', ctx.params); + return ctx.call('ldp.resource.put', ctx.params, { + meta: { skipObjectsWatcher: this.settings.excludeFromMirror } + }); } }, delete: { handler(ctx) { - return ctx.call('ldp.resource.delete', ctx.params); + return ctx.call('ldp.resource.delete', ctx.params, { + meta: { skipObjectsWatcher: this.settings.excludeFromMirror } + }); } }, @@ -133,6 +141,7 @@ const ControlledContainerMixin = { async handler(ctx) { return await ctx.call('ldp.registry.getUri', { type: arrayOf(this.settings.types)[0], + isContainer: true, isPrivate: this.settings.typeIndex === 'private' }); } diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index 36ba5c14a..a32683e18 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -1,5 +1,5 @@ import { ServiceSchema, Errors } from 'moleculer'; -import { delay } from '../utils.ts'; +import { arrayOf, delay } from '../utils.ts'; const { MoleculerError } = Errors; @@ -9,7 +9,11 @@ const ControlledResourceMixin = { types: null, permissions: {}, controlledActions: {}, - typeIndex: 'public' + typeIndex: 'public', + // If true, a SPARQL query will be used to find the resource URI + // This is necessary for the type indexes, otherwise we have an infinite loop + // However this shouldn't be used in other case as it may return wrong URIs + sparqlQuery: false }, dependencies: ['ldp'], async started() { @@ -41,20 +45,28 @@ const ControlledResourceMixin = { getUri: { async handler(ctx) { - const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types: this.settings.types }); + if (this.settings.sparqlQuery) { + const expandedTypes = await ctx.call('jsonld.parser.expandTypes', { types: this.settings.types }); - const results = await ctx.call('triplestore.query', { - query: ` - SELECT ?resourceUri - WHERE { - GRAPH ?resourceUri { - ?resourceUri a ${expandedTypes.map(t => `<${t}>`).join(', ')} . + const results = await ctx.call('triplestore.query', { + query: ` + SELECT ?resourceUri + WHERE { + GRAPH ?resourceUri { + ?resourceUri a ${expandedTypes.map(t => `<${t}>`).join(', ')} . + } } - } - ` - }); + ` + }); - return results[0]?.resourceUri.value; + return results[0]?.resourceUri.value; + } else { + return await ctx.call('ldp.registry.getUri', { + type: arrayOf(this.settings.types)[0], + isContainer: false, + isPrivate: this.settings.typeIndex === 'private' + }); + } } }, @@ -84,6 +96,17 @@ const ControlledResourceMixin = { } }, + put: { + async handler(ctx) { + const resourceUri = ctx.params.resource.id || (await this.actions.getUri({}, { parentCtx: ctx })); + if (!resourceUri) throw new MoleculerError('Not found', 404, 'NOT_FOUND'); + return await ctx.call('ldp.resource.put', { + ...ctx.params, + resource: { ...ctx.params.resource, id: resourceUri } + }); + } + }, + waitForCreation: { async handler(ctx) { let resourceUri; diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index fe8dd5117..185fee761 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -17,7 +17,7 @@ const Schema = { const { containerUri, resourceUri } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId }); + const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); if (!resourceExists) { const childContainerExists = await this.actions.exist({ containerUri: resourceUri }, { parentCtx: ctx }); if (!childContainerExists) { @@ -25,7 +25,7 @@ const Schema = { } } - const containerExists = await this.actions.exist({ containerUri, webId }, { parentCtx: ctx }); + const containerExists = await this.actions.exist({ containerUri, webId: 'system' }, { parentCtx: ctx }); if (!containerExists) throw new Error(`Cannot attach to a non-existing container: ${containerUri}`); await ctx.call('triplestore.update', { @@ -47,7 +47,6 @@ const Schema = { dataset: ctx.meta.dataset }; - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.container.attached', returnValues, { meta: { webId: null, dataset: null } }); } diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index cc4ddb089..96b8368eb 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -15,7 +15,7 @@ const CreateAction = { const containerUri = await ctx.call('triplestore.named-graph.create', { baseUrl, - slug: this.settings.allowSlugs ? path || registration.path : undefined + slug: this.settings.allowSlugs ? path || registration?.path : undefined }); await ctx.call('triplestore.insert', { diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 97ff68b28..2b4fe208f 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -74,8 +74,7 @@ const Schema = { try { await ctx.call('ldp.remote.store', { resourceUri, - keepInSync: true, - webId + keepInSync: true }); // Now if the import went well, we can retry the attach diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index 40a91804e..837fc3da5 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -11,7 +11,6 @@ const Schema = { async handler(ctx) { const { uri, type, mode } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // If no authorizers have been registered, assume user can access everything if (this.authorizers.length === 0) return true; diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index 0fec53648..99c5b47e8 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -11,22 +11,15 @@ const DeleteAction = { const webId = ctx.params.webId || ctx.meta.webId; if (!(await this.actions.isRemote({ resourceUri }, { parentCtx: ctx }))) { - throw new Error( - `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${ctx.meta.dataset})` - ); + throw new Error(`The resourceUri param must be remote. Provided: ${resourceUri} (dataset ${ctx.meta.dataset})`); } - if (!webId || webId === 'system' || webId === 'anon') { - throw new Error(`Cannot delete remote resource in cache without a webId (Provided: ${webId})`); - } - const account = await ctx.call('auth.account.findByWebId', { webId }); - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. - ctx.meta.dataset = account.username; + await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); - if (!exist) throw new Error(`No named graph found with resource ${resourceUri} (webId: ${webId})`); + if (!exist) throw new Error(`No named graph found with resource ${resourceUri} (dataset: ${ctx.meta.dataset})`); - const oldData = await this.actions.getStored({ resourceUri, webId }, { parentCtx: ctx }); + const oldData = await this.actions.getStored({ resourceUri, webId: 'system' }, { parentCtx: ctx }); await ctx.call('triplestore.named-graph.clear', { uri: resourceUri }); await ctx.call('triplestore.named-graph.delete', { uri: resourceUri }); @@ -45,7 +38,7 @@ const DeleteAction = { }; if (!ctx.meta.skipEmitEvent) { - ctx.emit('ldp.remote.deleted', returnValues, { meta: { webId: null, dataset: null } }); + ctx.emit('ldp.remote.deleted', returnValues); } return returnValues; diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index e23eb3b84..f1f6d89e0 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -13,16 +13,22 @@ const Schema = { dataset: { type: 'string', optional: true } }, async handler(ctx) { - let { resourceUri, resource, keepInSync, webId, dataset } = ctx.params; + let { resourceUri, resource, keepInSync } = ctx.params; + let dataset = ctx.params.dataset || ctx.meta.dataset; if (!resource && !resourceUri) { throw new Error('You must provide the resourceUri or resource param'); } if (!resource) { + const webId = await ctx.call('webid.getUri'); resource = await this.actions.getNetwork({ resourceUri, webId }, { parentCtx: ctx }); } + if (ctx.params.webId || ctx.params.dataset) { + this.logger.warn(`The webId and dataset params are deprecated for ldp.remote.store`, resource); + } + // Do not store Tombstone (throw 404 error) if (hasType(resource, 'Tombstone')) { throw new E.NotFoundError(); @@ -33,9 +39,7 @@ const Schema = { } if (!(await this.actions.isRemote({ resourceUri, dataset }, { parentCtx: ctx }))) { - throw new Error( - `The resourceUri param must be remote. Provided: ${resourceUri} (webId ${webId} / dataset ${dataset}))` - ); + throw new Error(`The resourceUri param must be remote. Provided: ${resourceUri} (dataset ${dataset}))`); } // Adds the default context, if it is missing @@ -46,14 +50,6 @@ const Schema = { }; } - if (!dataset) { - if (!webId) { - throw new Error(`In Pod provider config, a webId or dataset param must be provided to ldp.remote.store`); - } - const account = await ctx.call('auth.account.findByWebId', { webId }); - dataset = account.username; - } - // Check if the remote resource is already stored const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri, dataset }); @@ -75,11 +71,7 @@ const Schema = { }); if (!ctx.meta.skipEmitEvent) { - ctx.emit( - 'ldp.remote.stored', - { resourceUri, resource, dataset, keepInSync, webId }, - { meta: { webId: null, dataset } } - ); + ctx.emit('ldp.remote.stored', { resourceUri, resource, dataset, keepInSync }); } return resource; diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index 85125d5d1..7c21901f7 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -223,11 +223,7 @@ export default { const activityWithId = objectCurrentToId(activity); if (await ctx.call('ldp.remote.isRemote', { resourceUri: activityUri })) { - await ctx.call('ldp.remote.store', { - resource: activityWithId, - webId: ctx.meta.webId, - dataset: ctx.meta.dataset - }); + await ctx.call('ldp.remote.store', { resource: activityWithId }); } else { await ctx.call('activitypub.activity.put', { resource: activityWithId }); } diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 9bbada8c9..141015c4f 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -56,7 +56,7 @@ const SolidNotificationsListenerSchema = { async handler(ctx) { const { resourceUri, actionName } = ctx.params; - const appActor = await ctx.call('app.get'); + const appActor: any = await ctx.call('app.get'); // Check if a listener already exist const existingListener = this.listeners.find( diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 0352b05d3..1c9b1ce75 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -168,7 +168,7 @@ const SolidStorageSchema = { getRootContainerUri: { async handler(ctx) { - const webIdData = await ctx.call('webid.get'); + const webIdData: any = await ctx.call('webid.get'); return webIdData?.['pim:storage']; } } diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index d94297e5d..ea10475c9 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -9,7 +9,10 @@ const PrivateTypeIndexService = { path: '/private-type-index', types: ['solid:TypeIndex', 'solid:UnlistedDocument'], permissions: {}, - typeIndex: 'private' + typeIndex: 'private', + // Use a SPARQL query to find the resource URI. + // This is necessary for the type indexes, otherwise we have an infinite loop + sparqlQuery: true }, events: { 'solid-preferences-file.created': { diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index 1a98e2311..fdfc51ad9 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -13,7 +13,10 @@ const PublicTypeIndexService = { read: true } }, - typeIndex: 'public' + typeIndex: 'public', + // Use a SPARQL query to find the resource URI. + // This is necessary for the type indexes, otherwise we have an infinite loop + sparqlQuery: true }, events: { 'webid.created': { diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index 384742bbe..9b793a814 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -174,7 +174,7 @@ const TypeIndexService = { if (isContainer === true || isContainer === undefined) instancePredicates.push('solid:instanceContainer'); if (isContainer === false || isContainer === undefined) instancePredicates.push('solid:instance'); - const results = await ctx.call('triplestore.query', { + const results: any = await ctx.call('triplestore.query', { query: ` PREFIX solid: SELECT ?uri ?type ?indexType ?instancePredicate @@ -193,13 +193,15 @@ const TypeIndexService = { webId: 'system' }); - return { - types: arrayOf(results).map((r: any) => r.type.value), - uri: arrayOf(results)[0].uri.value, - isPrivate: arrayOf(results)[0].indexType.value === 'http://www.w3.org/ns/solid/terms#UnlistedDocument', - isContainer: - arrayOf(results)[0].instancePredicate.value === 'http://www.w3.org/ns/solid/terms#instanceContainer' - } as TypeRegistration; + if (results.length > 0) { + return { + types: arrayOf(results).map((r: any) => r.type.value), + uri: arrayOf(results)[0].uri.value, + isPrivate: arrayOf(results)[0].indexType.value === 'http://www.w3.org/ns/solid/terms#UnlistedDocument', + isContainer: + arrayOf(results)[0].instancePredicate.value === 'http://www.w3.org/ns/solid/terms#instanceContainer' + } as TypeRegistration; + } } } } diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index 4807d9e75..94932ef79 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -1,4 +1,11 @@ import { PUBLIC_URI, ACTIVITY_TYPES } from '@semapps/activitypub'; +import { Middleware, ServiceBroker } from 'moleculer'; + +interface MiddlewareConfig { + baseUrl?: string; + postWithoutRecipients?: boolean; + transientActivities?: boolean; +} const handledLdpActions = ['ldp.container.post', 'ldp.resource.put', 'ldp.resource.patch', 'ldp.resource.delete']; @@ -9,10 +16,8 @@ const handledWacActions = [ 'webacl.resource.deleteAllRights' ]; -const ObjectsWatcherMiddleware = (config = {}) => { - // @ts-expect-error TS(2339): Property 'baseUrl' does not exist on type '{}'. +const ObjectsWatcherMiddleware = (config: MiddlewareConfig = {}): Middleware => { const { baseUrl, postWithoutRecipients = false, transientActivities = false } = config; - let initialized = false; let cacherActivated = false; if (!baseUrl) throw new Error('The baseUrl setting is missing from ObjectsWatcherMiddleware'); @@ -23,13 +28,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { return handledLdpActions.includes(actionName); }; - /** Get owner WebID of resource (by looking at the slash URI). */ - const getActor = async (ctx: any, resourceUri: any) => { - const url = new URL(resourceUri); - const podOwnerUri = `${url.origin}/${url.pathname.split('/')[1]}`; - return await ctx.call('activitypub.actor.awaitCreateComplete', { actorUri: podOwnerUri }); - }; - const clearWebAclCache = async (ctx: any, resourceUri: any, containerUri: any) => { if (cacherActivated) { // TODO Use WebAclMiddleware instead of events to clear cache immediately @@ -42,32 +40,35 @@ const ObjectsWatcherMiddleware = (config = {}) => { } }; - const getRecipients = async (ctx: any, resourceUri: any) => { - const isPublic = await ctx.call('webacl.resource.isPublic', { resourceUri }); - const actor = await getActor(ctx, resourceUri); - const usersWithReadRights = await ctx.call('webacl.resource.getUsersWithReadRights', { resourceUri }); - const recipients = usersWithReadRights.filter((u: any) => u !== actor.id); + const getRecipients = async (ctx: ServiceBroker, resourceUri: string) => { + const isPublic: boolean = await ctx.call('webacl.resource.isPublic', { resourceUri }); + const actor: any = await ctx.call('webid.get'); // Get actor based on ctx.meta.dataset + const usersWithReadRights: string[] = await ctx.call('webacl.resource.getUsersWithReadRights', { resourceUri }); + const recipients = usersWithReadRights.filter(u => u !== actor.id); if (isPublic) { return [...recipients, actor.followers, PUBLIC_URI]; } return recipients; }; - const outboxPost = async (ctx: any, resourceUri: any, recipients: any, activity: any) => { + const outboxPost = async (ctx: ServiceBroker, recipients: string[], activity: any) => { if (recipients.length > 0 || postWithoutRecipients) { - const actor = await getActor(ctx, resourceUri); - - return await ctx.call( - 'activitypub.outbox.post', - { - collectionUri: actor.outbox, - transient: transientActivities, - '@context': 'https://www.w3.org/ns/activitystreams', - ...activity, - bto: recipients.length > 0 ? recipients : undefined - }, - { meta: { webId: actor.id, doNotProcessObject: true } } - ); + const actor: any = await ctx.call('webid.get'); // Get actor based on ctx.meta.dataset + + if (actor.outbox) { + console.log('outbox post', actor.outbox, activity, recipients); + return await ctx.call( + 'activitypub.outbox.post', + { + collectionUri: actor.outbox, + transient: transientActivities, + '@context': 'https://www.w3.org/ns/activitystreams', + ...activity, + bto: recipients.length > 0 ? recipients : undefined + }, + { meta: { webId: actor.id, doNotProcessObject: true } } + ); + } } }; @@ -76,9 +77,6 @@ const ObjectsWatcherMiddleware = (config = {}) => { localAction: (next: any, action: any) => { if (isHandled(action.name)) { return async (ctx: any) => { - // Don't handle actions until middleware is fully started - if (!initialized) return await next(ctx); - if (ctx.meta.skipObjectsWatcher === true) return await next(ctx); let actionReturnValue; @@ -169,7 +167,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { switch (action.name) { case 'ldp.container.post': { const recipients = await getRecipients(ctx, actionReturnValue); - outboxPost(ctx, actionReturnValue, recipients, { + outboxPost(ctx, recipients, { type: ACTIVITY_TYPES.CREATE, object: actionReturnValue, target: ctx.params.containerUri @@ -179,7 +177,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { case 'ldp.resource.patch': { const recipients = await getRecipients(ctx, ctx.params.resourceUri); - outboxPost(ctx, ctx.params.resourceUri, recipients, { + outboxPost(ctx, recipients, { type: ACTIVITY_TYPES.UPDATE, object: ctx.params.resourceUri }); @@ -189,7 +187,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { case 'ldp.resource.put': { const resourceUri = ctx.params.resource.id || ctx.params.resource['@id']; const recipients = await getRecipients(ctx, resourceUri); - outboxPost(ctx, resourceUri, recipients, { + outboxPost(ctx, recipients, { type: ACTIVITY_TYPES.UPDATE, object: resourceUri }); @@ -197,7 +195,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { } case 'ldp.resource.delete': { - outboxPost(ctx, ctx.params.resourceUri, oldRecipients, { + outboxPost(ctx, oldRecipients, { type: ACTIVITY_TYPES.DELETE, object: ctx.params.resourceUri, target: oldContainers @@ -215,7 +213,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri }); - outboxPost(ctx, ctx.params.resourceUri, recipientsAdded, { + outboxPost(ctx, recipientsAdded, { type: ACTIVITY_TYPES.CREATE, object: ctx.params.resourceUri, target: containers @@ -233,7 +231,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { const recipientsAdded = newRecipients.filter((u: any) => !oldRecipients.includes(u)); if (recipientsAdded.length > 0) { - outboxPost(ctx, ctx.params.resourceUri, recipientsAdded, { + outboxPost(ctx, recipientsAdded, { type: ACTIVITY_TYPES.CREATE, object: ctx.params.resourceUri, target: containers @@ -242,7 +240,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { const recipientsRemoved = oldRecipients.filter((u: any) => !newRecipients.includes(u)); if (recipientsRemoved.length > 0) { - outboxPost(ctx, ctx.params.resourceUri, recipientsRemoved, { + outboxPost(ctx, recipientsRemoved, { type: ACTIVITY_TYPES.DELETE, object: ctx.params.resourceUri, target: containers @@ -252,8 +250,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { if (actionReturnValue.isContainer && actionReturnValue.addDefaultPublicRead) { const subUris = await ctx.call('ldp.container.getUris', { containerUri: ctx.params.resourceUri }); // TODO check that sub-resources did not already have public read rights individually (must be done before) - // @ts-expect-error TS(2554): Expected 4 arguments, but got 3. - outboxPost(ctx, ctx.params.resourceUri, { + outboxPost(ctx, { type: ACTIVITY_TYPES.CREATE, object: subUris, target: ctx.params.resourceUri @@ -263,8 +260,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { if (actionReturnValue.isContainer && actionReturnValue.removeDefaultPublicRead) { const subUris = await ctx.call('ldp.container.getUris', { containerUri: ctx.params.resourceUri }); // TODO check that sub-resources did not already have public read rights individually (must be done before) - // @ts-expect-error TS(2554): Expected 4 arguments, but got 3. - outboxPost(ctx, ctx.params.resourceUri, { + outboxPost(ctx, { type: ACTIVITY_TYPES.DELETE, object: subUris, target: ctx.params.resourceUri @@ -286,7 +282,7 @@ const ObjectsWatcherMiddleware = (config = {}) => { const containers = await ctx.call('ldp.resource.getContainers', { resourceUri: ctx.params.resourceUri }); - outboxPost(ctx, ctx.params.resourceUri, recipientsRemoved, { + outboxPost(ctx, recipientsRemoved, { type: ACTIVITY_TYPES.DELETE, object: ctx.params.resourceUri, target: containers diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index f0ea724b1..c34fb1b86 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -37,14 +37,8 @@ const SynchronizerService = { resource = await ctx.call( 'ldp.remote.store', typeof resource === 'string' - ? { - resourceUri: resource, - webId: recipientUri - } - : { - resource: { '@context': activity['@context'], ...resource }, - webId: recipientUri - } + ? { resourceUri: resource } + : { resource: { '@context': activity['@context'], ...resource } } ); const type = resource['@type'] || resource.type; @@ -92,14 +86,8 @@ const SynchronizerService = { resource = await ctx.call( 'ldp.remote.store', typeof resource === 'string' - ? { - resourceUri: resource, - webId: recipientUri - } - : { - resource: { '@context': activity['@context'], ...resource }, - webId: recipientUri - } + ? { resourceUri: resource } + : { resource: { '@context': activity['@context'], ...resource } } ); } } diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 685d21c6c..536c2d38e 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -22,7 +22,6 @@ const TripleStoreService = { url: null, user: null, password: null, - mainDataset: null, fusekiBase: null, // Sub-services customization dataset: {}, diff --git a/src/middleware/packages/webacl/routes/getRoutes.ts b/src/middleware/packages/webacl/routes/getRoutes.ts index bec5873ea..61e3019b4 100644 --- a/src/middleware/packages/webacl/routes/getRoutes.ts +++ b/src/middleware/packages/webacl/routes/getRoutes.ts @@ -1,6 +1,13 @@ import path from 'path'; -import { parseHeader, parseRawBody, negotiateContentType, negotiateAccept, parseJson } from '@semapps/middlewares'; +import { + parseHeader, + parseRawBody, + negotiateContentType, + negotiateAccept, + parseJson, + saveDatasetMeta +} from '@semapps/middlewares'; const onError = (req: any, res: any, err: any) => { const { type, code, message, data, name } = err; @@ -11,11 +18,11 @@ const onError = (req: any, res: any, err: any) => { }; const getRoutes = (basePath: string) => { - const middlewares = [parseHeader, negotiateContentType, negotiateAccept, parseRawBody, parseJson]; + const middlewares = [parseHeader, negotiateContentType, negotiateAccept, parseRawBody, parseJson, saveDatasetMeta]; return [ { - path: path.join(basePath, '/_acl'), + path: path.join(basePath, '/_acl/:username([^/._][^/]+)'), name: 'acl', authorization: false, authentication: true, diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 6b75bfb34..aee22a73b 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -7,9 +7,6 @@ const { MoleculerError } = Errors; export const api = async function api(ctx: any) { if (!ctx.params.memberUri) throw new MoleculerError('needs a memberUri in your PATCH (json)', 400, 'BAD_REQUEST'); - // TODO See if this is not already done by a middleware - ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.addMember', { groupSlug: `${ctx.params.username}/${ctx.params.id}`, memberUri: ctx.params.memberUri diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 0626ec11a..22d743c98 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -9,9 +9,6 @@ const { MoleculerError } = Errors; export const api = async function api(ctx: any) { if (!ctx.meta.headers?.slug) throw new MoleculerError('needs a slug in your POST (json)', 400, 'BAD_REQUEST'); - // TODO See if this is not already done by a middleware - ctx.meta.dataset = ctx.params.username; - const { groupUri } = await ctx.call('webacl.group.create', { groupSlug: `${ctx.params.username}/${ctx.meta.headers.slug}` }); diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index 56eac4ebd..f50f08628 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -6,9 +6,6 @@ import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; const { MoleculerError } = Errors; export const api = async function api(ctx: any) { - // TODO See if this is not already done by a middleware - ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.delete', { groupSlug: `${ctx.params.username}/${ctx.params.id}` }); ctx.meta.$statusCode = 204; diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index 0d57f8d10..f845f8700 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,9 +1,6 @@ import { ActionSchema } from 'moleculer'; export const api = async function api(ctx: any) { - // TODO See if this is not already done by a middleware - ctx.meta.dataset = ctx.params.username; - return await ctx.call('webacl.group.getGroups', {}); }; @@ -13,7 +10,6 @@ export const action = { webId: { type: 'string', optional: true } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let groups; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index af0c67cfb..36cda9f83 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -5,9 +5,6 @@ import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; export const api = async function api(ctx: any) { - // TODO See if this is not already done by a middleware - ctx.meta.dataset = ctx.params.username; - return await ctx.call('webacl.group.getMembers', { groupSlug: `${ctx.params.username}/${ctx.params.id}` }); }; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 549f42709..6cb066989 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -8,9 +8,6 @@ export const api = async function api(ctx: any) { if (!ctx.params.deleteUserUri) throw new MoleculerError('needs a deleteUserUri in your POST (json)', 400, 'BAD_REQUEST'); - // TODO See if this is not already done by a middleware - ctx.meta.dataset = ctx.params.username; - await ctx.call('webacl.group.removeMember', { groupSlug: `${ctx.params.username}/${ctx.params.id}`, memberUri: ctx.params.deleteUserUri diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index 87a9a6e0f..82562ea4e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -15,7 +15,7 @@ const { MoleculerError } = Errors; export const api = { async handler(ctx) { const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; + let { username, slugParts } = ctx.params; if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); @@ -28,7 +28,7 @@ export const api = { if (!slugParts || slugParts.length === 0) slugParts = ['/']; await ctx.call('webacl.resource.addRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + resourceUri: urlJoin(this.settings.baseUrl, username, ...slugParts), addedRights }); diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 8054bfbe9..19510eab8 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -167,7 +167,7 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an export const api = { async handler(ctx) { const { accept } = ctx.meta.headers; - let { slugParts } = ctx.params; + let { username, slugParts } = ctx.params; if (accept && accept !== MIME_TYPES.JSON && accept !== MIME_TYPES.TURTLE) throw new MoleculerError(`Accept not supported : ${accept}`, 400, 'ACCEPT_NOT_SUPPORTED'); @@ -176,7 +176,7 @@ export const api = { if (!slugParts || slugParts.length === 0) slugParts = ['/']; return await ctx.call('webacl.resource.getRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + resourceUri: urlJoin(this.settings.baseUrl, username, ...slugParts), accept }); } diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index a801aa94f..99fb186f9 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -15,7 +15,7 @@ const { MoleculerError } = Errors; export const api = { async handler(ctx) { const contentType = ctx.meta.headers['content-type']; - let { slugParts } = ctx.params; + let { username, slugParts } = ctx.params; if (!contentType || (contentType !== MIME_TYPES.JSON && contentType !== MIME_TYPES.TURTLE)) throw new MoleculerError(`Content type not supported : ${contentType}`, 400, 'BAD_REQUEST'); @@ -28,7 +28,7 @@ export const api = { if (!slugParts || slugParts.length === 0) slugParts = ['/']; await ctx.call('webacl.resource.setRights', { - resourceUri: urlJoin(this.settings.baseUrl, ...slugParts), + resourceUri: urlJoin(this.settings.baseUrl, username, ...slugParts), newRights }); diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index 7a49f67f9..a0f630237 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -73,7 +73,7 @@ const WebaclResourceService = { }, hooks: { before: { - '*'(ctx) { + '*'(ctx: any) { if (!ctx.meta.dataset && ctx.params.resourceUri) { this.logger.warn(`No dataset found when calling ${ctx.action.name} with URI ${ctx.params.resourceUri}`); ctx.meta.dataset = getDatasetFromUri(ctx.params.resourceUri); @@ -110,13 +110,9 @@ const WebaclResourceService = { const document = []; - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName))); - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName))); - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName))); - // @ts-expect-error TS(2554): Expected 6 arguments, but got 5. document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName))); if (isContainer) { From cda994c992a623e8fb7f9bf59b26cc73569e5e9b Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 25 Nov 2025 11:32:00 +0100 Subject: [PATCH 120/165] More fixes --- src/middleware/packages/auth/services/account.ts | 10 +++++----- src/middleware/packages/auth/types.ts | 1 + src/middleware/packages/crypto/signature/proxy.ts | 2 +- .../packages/crypto/verifiable-credentials/api.ts | 2 +- .../packages/ldp/routes/getCatchAllRoute.ts | 2 +- src/middleware/packages/ldp/routes/getPodsRoute.ts | 2 +- .../ldp/services/remote/actions/getNetwork.ts | 4 +++- .../ldp/services/resource/actions/getTypes.ts | 1 - .../ldp/services/resource/actions/upload.ts | 1 - src/middleware/packages/middlewares/index.ts | 13 +++++-------- src/middleware/packages/sparql-endpoint/service.ts | 2 +- .../packages/sync/middlewares/objects-watcher.ts | 1 - .../webacl/services/group/actions/create.ts | 7 ++----- .../webacl/services/group/actions/delete.ts | 4 ++-- src/middleware/packages/webacl/types.ts | 8 ++++---- 15 files changed, 27 insertions(+), 33 deletions(-) diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index a9fb53941..384168887 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -150,7 +150,7 @@ const AuthAccountService = { /** Overwrite find method, to filter accounts with tombstone. */ async handler(ctx) { /** @type {object[]} */ - const accounts = await this._find(ctx, ctx.params); + const accounts: Account[] = await this._find(ctx, ctx.params); return accounts.filter((account: any) => !account.deletedAt); } }, @@ -158,7 +158,7 @@ const AuthAccountService = { findByUsername: { async handler(ctx) { const { username } = ctx.params; - const accounts = await this._find(ctx, { query: { username } }); + const accounts: Account[] = await this._find(ctx, { query: { username } }); return accounts.length > 0 ? accounts[0] : null; } }, @@ -166,7 +166,7 @@ const AuthAccountService = { findByWebId: { async handler(ctx) { const { webId } = ctx.params; - const accounts = await this._find(ctx, { query: { webId } }); + const accounts: Account[] = await this._find(ctx, { query: { webId } }); return accounts.length > 0 ? accounts[0] : null; } }, @@ -174,7 +174,7 @@ const AuthAccountService = { findByEmail: { async handler(ctx) { const { email } = ctx.params; - const accounts = await this._find(ctx, { query: { email } }); + const accounts: Account[] = await this._find(ctx, { query: { email } }); return accounts.length > 0 ? accounts[0] : null; } }, @@ -214,7 +214,7 @@ const AuthAccountService = { async handler(ctx) { const { webId } = ctx.params; const resetPasswordToken = await this.generateResetPasswordToken(); - const account = await ctx.call('auth.account.findByWebId', { webId }); + const account: Account = await ctx.call('auth.account.findByWebId', { webId }); await this._update(ctx, { '@id': account['@id'], diff --git a/src/middleware/packages/auth/types.ts b/src/middleware/packages/auth/types.ts index ff1ec58c6..a4f1fadcb 100644 --- a/src/middleware/packages/auth/types.ts +++ b/src/middleware/packages/auth/types.ts @@ -5,4 +5,5 @@ export interface Account { resetPasswordToken?: string; email: string; webId: string; + version?: string; } diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index fa674ec2f..e70e3a654 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -25,7 +25,7 @@ const ProxyService = { await this.broker.call('api.addRoute', { route: { name: 'proxy-endpoint', - path: path.join(basePath, '/:username([^/.][^/]+)/proxy'), + path: path.join(basePath, '/:username([^/._][^/]+)/proxy'), authorization: true, authentication: false, aliases: { diff --git a/src/middleware/packages/crypto/verifiable-credentials/api.ts b/src/middleware/packages/crypto/verifiable-credentials/api.ts index e3dcebca7..de6141752 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/api.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/api.ts @@ -26,7 +26,7 @@ const ApiService = { dependencies: ['api', 'ldp'], async started() { const basePath: string = await this.broker.call('ldp.getBasePath'); - const apiPath = path.join(basePath, '/:username([^/.][^/]+)', VC_API_PATH); + const apiPath = path.join(basePath, '/:username([^/._][^/]+)', VC_API_PATH); // Credential routes. await this.broker.call('api.addRoute', { diff --git a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts index 1e7b2db8a..c2fc5786d 100644 --- a/src/middleware/packages/ldp/routes/getCatchAllRoute.ts +++ b/src/middleware/packages/ldp/routes/getCatchAllRoute.ts @@ -25,7 +25,7 @@ function getCatchAllRoute(basePath: string) { return { name: 'ldp', - path: path.join(basePath, '/:username([^/.][^/]+)/:slugParts*'), + path: path.join(basePath, '/:username([^/._][^/]+)/:slugParts*'), // Disable the body parsers so that we can parse the body ourselves // (Moleculer-web doesn't handle non-JSON bodies, so we must do it) bodyParsers: false, diff --git a/src/middleware/packages/ldp/routes/getPodsRoute.ts b/src/middleware/packages/ldp/routes/getPodsRoute.ts index 9a6f82666..426beb43a 100644 --- a/src/middleware/packages/ldp/routes/getPodsRoute.ts +++ b/src/middleware/packages/ldp/routes/getPodsRoute.ts @@ -39,7 +39,7 @@ function getPodsRoute(basePath: any) { return { name: 'pods', - path: path.join(basePath, '/:username([^/.][^/]+)'), + path: path.join(basePath, '/:username([^/._][^/]+)'), // Disable the body parsers so that we can parse the body ourselves // (Moleculer-web doesn't handle non-JSON bodies, so we must do it) bodyParsers: false, diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index d2c17ed9e..49e32d32c 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -43,7 +43,9 @@ const Schema = { if (response.ok) { return response.body; } else { - throw new MoleculerError(response.statusText, response.status); + throw new MoleculerError( + `Error when fetching ${resourceUri} with actor ${webId}. Error ${response.status}: ${response.statusText}` + ); } } else { const response = await fetch(resourceUri, { headers }); diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 9cdf9b836..41c9a54f5 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -3,7 +3,6 @@ import { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', params: { - // @ts-expect-error TS(2322): Type 'string' is not assignable to type 'Parameter... Remove this comment to see the full error message resourceUri: 'string' }, cache: { diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index 8be4050df..808f7aa4d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -24,7 +24,6 @@ const Schema = { } try { - // @ts-expect-error TS(2723): Cannot invoke an object which is possibly 'null' o... Remove this comment to see the full error message await this.streamToFile(file.readableStream, localPath, this.settings.binary.maxSize); } catch (e) { // @ts-expect-error TS(18046): 'e' is of type 'unknown'. diff --git a/src/middleware/packages/middlewares/index.ts b/src/middleware/packages/middlewares/index.ts index 94125821c..4490f719e 100644 --- a/src/middleware/packages/middlewares/index.ts +++ b/src/middleware/packages/middlewares/index.ts @@ -131,7 +131,7 @@ const parseFile = (req: any, res: any, next: any) => { const contentType = req.$ctx.meta.headers['content-type']; - if (!handledMimeTypes.includes(contentType) && (req.method === 'POST' || req.method === 'PUT')) { + if (contentType && !handledMimeTypes.includes(contentType) && (req.method === 'POST' || req.method === 'PUT')) { if (contentType.includes('multipart/form-data')) { const busboy = new Busboy({ headers: req.$ctx.meta.headers }); const files: any = []; @@ -176,22 +176,19 @@ const saveDatasetMeta = (req: any, res: any, next: any) => { next(); }; -/** @type {(msg: string) => never} */ -const throw400 = (msg: any) => { +const throw400 = (msg: string): never => { throw new MoleculerError(msg, 400, 'BAD_REQUEST', { status: 'Bad Request', text: msg }); }; -/** @type {(msg: string) => never} */ -const throw403 = (msg: any) => { +const throw403 = (msg: string): never => { throw new MoleculerError('Forbidden', 403, 'ACCESS_DENIED', { status: 'Forbidden', text: msg }); }; -/** @type {(msg: string) => never} */ -const throw404 = (msg: any) => { +const throw404 = (msg: string): never => { throw new MoleculerError('Forbidden', 404, 'NOT_FOUND', { status: 'Not found', text: msg }); }; -const throw500 = (msg: any) => { +const throw500 = (msg: string): never => { throw new MoleculerError(msg, 500, 'INTERNAL_SERVER_ERROR', { status: 'Server Error', text: msg }); }; diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index aff769904..6122cb646 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -16,7 +16,7 @@ const SparqlEndpointService = { await this.broker.call('ontologies.register', voidOntology); const basePath: string = await this.broker.call('ldp.getBasePath'); await this.broker.call('api.addRoute', { - route: getRoute(path.join(basePath, '/:username([^/.][^/]+)/sparql')), + route: getRoute(path.join(basePath, '/:username([^/._][^/]+)/sparql')), toBottom: false }); }, diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index 94932ef79..bdbae1ac5 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -56,7 +56,6 @@ const ObjectsWatcherMiddleware = (config: MiddlewareConfig = {}): Middleware => const actor: any = await ctx.call('webid.get'); // Get actor based on ctx.meta.dataset if (actor.outbox) { - console.log('outbox post', actor.outbox, activity, recipients); return await ctx.call( 'activitypub.outbox.post', { diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 22d743c98..d35f3f662 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -3,6 +3,7 @@ import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema, Errors } from 'moleculer'; +import { WacPermissionObject } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -35,7 +36,6 @@ export const action = { if (!groupUri) { groupSlug = createSlug(groupSlug, { lang: 'fr', custom: { '.': '.', '/': '/' } }); - // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); } @@ -43,20 +43,17 @@ export const action = { throw new MoleculerError('Group already exists', 400, 'BAD_REQUEST'); } - const newRights = {}; + const newRights: WacPermissionObject = {}; if (webId === 'anon') { - // @ts-expect-error TS(2339): Property 'anon' does not exist on type '{}'. newRights.anon = { read: true, write: true }; } else if (webId === 'system') { - // @ts-expect-error TS(2339): Property 'anon' does not exist on type '{}'. newRights.anon = { read: true }; } else { - // @ts-expect-error TS(2339): Property 'user' does not exist on type '{}'. newRights.user = { uri: webId, read: true, diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index f50f08628..c89aadfc2 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -2,6 +2,7 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema, Errors } from 'moleculer'; import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; +import { WacPermission } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -24,13 +25,12 @@ export const action = { if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); // TODO: check that the group exists ? if (webId !== 'system') { - const groupRights = await ctx.call('webacl.resource.hasRights', { + const groupRights: WacPermission = await ctx.call('webacl.resource.hasRights', { resourceUri: groupUri, rights: { write: true diff --git a/src/middleware/packages/webacl/types.ts b/src/middleware/packages/webacl/types.ts index 18f9165b7..d276451e8 100644 --- a/src/middleware/packages/webacl/types.ts +++ b/src/middleware/packages/webacl/types.ts @@ -1,8 +1,8 @@ export interface WacPermission { - read: boolean; - write: boolean; - append: boolean; - control: boolean; + read?: boolean; + write?: boolean; + append?: boolean; + control?: boolean; } export interface WacPermissionObject { From a7417c28a4fc819d77e7f1369ff6ef7e2ef6bc62 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 25 Nov 2025 12:15:32 +0100 Subject: [PATCH 121/165] Small fix --- .../packages/ldp/services/remote/actions/getNetwork.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index 49e32d32c..d2c17ed9e 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -43,9 +43,7 @@ const Schema = { if (response.ok) { return response.body; } else { - throw new MoleculerError( - `Error when fetching ${resourceUri} with actor ${webId}. Error ${response.status}: ${response.statusText}` - ); + throw new MoleculerError(response.statusText, response.status); } } else { const response = await fetch(resourceUri, { headers }); From 684f02f2a70f9fb878018d0e53b77e2801ba1b18 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 25 Nov 2025 18:45:18 +0100 Subject: [PATCH 122/165] All ActivityPods tests passing ! --- .../ldp/services/container/actions/attach.ts | 10 +---- .../ldp/services/container/actions/post.ts | 3 +- src/middleware/packages/ldp/utils.ts | 10 ++++- .../channels/notification-channel.mixin.ts | 45 ++++++++++--------- .../notifications/channels/webhook-channel.ts | 12 +++-- .../channels/websocket-channel.ts | 7 +-- .../packages/solid/services/storage.ts | 5 +-- .../solid/services/type-index/type-index.ts | 4 +- src/middleware/packages/solid/types.ts | 8 ++++ website/docs/middleware/ldp/container.md | 2 +- website/docs/middleware/ldp/index.md | 20 ++++----- 11 files changed, 68 insertions(+), 58 deletions(-) diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 185fee761..3c2b871c0 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -7,15 +7,10 @@ const Schema = { visibility: 'public', params: { containerUri: { type: 'string' }, - resourceUri: { type: 'string' }, - webId: { - type: 'string', - optional: true - } + resourceUri: { type: 'string' } }, async handler(ctx) { const { containerUri, resourceUri } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const resourceExists = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); if (!resourceExists) { @@ -43,12 +38,11 @@ const Schema = { const returnValues = { containerUri, resourceUri, - webId, dataset: ctx.meta.dataset }; if (!ctx.meta.skipEmitEvent) { - ctx.emit('ldp.container.attached', returnValues, { meta: { webId: null, dataset: null } }); + ctx.emit('ldp.container.attached', returnValues); } return returnValues; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index b49ee5060..b5a83cf42 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -108,8 +108,7 @@ const PostAction = { await ctx.call('ldp.container.create', { containerUri: resourceUri, title: expandedResource['http://purl.org/dc/terms/title']?.[0]['@value'], - description: expandedResource['http://purl.org/dc/terms/description']?.[0]['@value'], - webId + description: expandedResource['http://purl.org/dc/terms/description']?.[0]['@value'] }); } else { const registration: Registration = await ctx.call('ldp.registry.getByUri', { containerUri }); diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index 7434a8d0b..64adfc72b 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -84,7 +84,7 @@ const getPathFromUri = (uri: any) => { }; // Transforms "http://localhost:3000/alice/{uuid}" to "alice" -const getDatasetFromUri = (uri: any) => { +const getDatasetFromUri = (uri: string): string | undefined => { const path = getPathFromUri(uri); if (path) { const parts = path.split('/'); @@ -94,6 +94,13 @@ const getDatasetFromUri = (uri: any) => { } }; +// Transforms "http://localhost:3000/alice/{uuid}" to "http://localhost:3000/alice" +const getBaseUrlFromUri = (uri: string): string => { + const { origin } = new URL(uri); + const dataset = getDatasetFromUri(uri); + return urlJoin(origin, dataset!); +}; + const getId = (resource: any) => resource.id || resource['@id']; const getType = (resource: any) => resource.type || resource['@type']; @@ -166,6 +173,7 @@ export { getSlugFromUri, getContainerFromUri, getDatasetFromUri, + getBaseUrlFromUri, getId, getType, hasType, diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index ab9d80d58..9445a927f 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -7,9 +7,10 @@ import rdf from '@rdfjs/data-model'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; -import { Context, ServiceSchema } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import { WacPermission } from '@semapps/webacl'; import { Account } from '@semapps/auth'; +import { NotificationChannel } from '../../../types.ts'; /** * Solid Notification Channel mixin. @@ -70,7 +71,7 @@ const Schema = { object: rdf.namedNode(urlJoin(this.settings.baseUrl, '.notifications', channelType)) }); - this.channels = []; + this.channels = [] as NotificationChannel[]; // Do not await all channels to be loaded this.loadChannelsFromDb({ removeOldChannels: true }); @@ -86,12 +87,14 @@ const Schema = { const sendToParam = ctx.params.sendTo || ctx.params['notify:sendTo']; const { webId } = ctx.meta; + ctx.meta.dataset = getDatasetFromUri(topic); + // TODO: Use ldo objects; This will only check for the json type and not parse json-ld variants... if (!this.settings.types.includes(type) && this.settings.channelType !== type) throw new Error(`Only one of ${this.settings.types} is accepted on this endpoint`); // Ensure topic exist (LDP resource, container or collection) - const exists = await ctx.call('ldp.resource.exist', { + const exists: boolean = await ctx.call('ldp.resource.exist', { resourceUri: topic, webId: 'system' }); @@ -107,9 +110,7 @@ const Schema = { if (!rights.read) throw new E.ForbiddenError('You need acl:Read rights on the resource'); // Find container URI from topic (must be stored on same Pod) - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - const topicWebId = urlJoin(this.settings.baseUrl, getDatasetFromUri(topic)); - const channelContainerUri = await this.actions.getContainerUri({ webId: topicWebId }, { parentCtx: ctx }); + const channelContainerUri = await this.actions.getContainerUri({}, { parentCtx: ctx }); // Create receiveFrom URI if needed (e.g. for web sockets). const receiveFrom = @@ -137,8 +138,8 @@ const Schema = { topic, sendTo, receiveFrom, - webId: topicWebId - }; + webId: await ctx.call('webid.getUri') // TODO Verify if keeping track of the storage's webId is needed + } as NotificationChannel; this.channels.push(channel); this.onChannelCreated(channel); @@ -167,21 +168,21 @@ const Schema = { }, events: { 'ldp.resource.created': { - async handler(ctx) { + async handler(ctx: any) { const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.CREATE, newData['dc:modified']); } }, 'ldp.resource.updated': { - async handler(ctx) { + async handler(ctx: any) { const { resourceUri, newData } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.UPDATE, newData['dc:modified']); } }, 'ldp.resource.patched': { - async handler(ctx) { + async handler(ctx: any) { const { resourceUri } = ctx.params; // We must get the resource because the 'ldp.resource.patched' event does not send it const resource: any = await ctx.call('ldp.resource.get', { resourceUri, webId: 'system' }); @@ -190,28 +191,28 @@ const Schema = { }, 'ldp.resource.deleted': { - async handler(ctx) { + async handler(ctx: any) { const { resourceUri } = ctx.params; this.onResourceEvent(resourceUri, ACTIVITY_TYPES.DELETE, new Date().toISOString()); } }, 'ldp.container.attached': { - async handler(ctx) { + async handler(ctx: any) { const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.ADD); } }, 'ldp.container.detached': { - async handler(ctx) { + async handler(ctx: any) { const { containerUri, resourceUri } = ctx.params; this.onContainerOrCollectionEvent(containerUri, resourceUri, ACTIVITY_TYPES.REMOVE); } }, 'activitypub.collection.added': { - async handler(ctx) { + async handler(ctx: any) { const { collectionUri, itemUri, item } = ctx.params; // Mastodon sometimes send unfetchable activities (like `Accept` activities) // In this case, we receive the activity as `item` and `itemUri` is undefined @@ -221,7 +222,7 @@ const Schema = { }, 'activitypub.collection.removed': { - async handler(ctx) { + async handler(ctx: any) { const { collectionUri, itemUri } = ctx.params; this.onContainerOrCollectionEvent(collectionUri, itemUri, ACTIVITY_TYPES.REMOVE); } @@ -319,20 +320,20 @@ const Schema = { }, // METHODS TO IMPLEMENT by implementing service. // - async onEvent(channel, activity) { + async onEvent(channel: NotificationChannel, activity: any) { // This will be called for each channel when its topic changed. // The activity is to be sent to the subscriber by the implementing service. // Please add `published: new Date().toISOString()` to the activity when you send it. throw new Error('Not implemented. Please implement this method in your service.'); }, - async createReceiveFromUri(topic, webId) { + async createReceiveFromUri(topic: string, webId: string) { // Create a random URI to be registered for `receiveFrom` for a new channel under `this.channels`. throw new Error('Not implemented. Please implement this method in your service.'); }, - onChannelCreated(channel) { + onChannelCreated(channel: NotificationChannel) { // Do nothing by default. Can be overridden. }, - onChannelDeleted(channel) { + onChannelDeleted(channel: NotificationChannel) { // Do nothing by default. Can be overridden. } }, @@ -342,9 +343,9 @@ const Schema = { delete(ctx, res) { const { resourceUri } = ctx.params; // @ts-expect-error TS(2339): Property 'find' does not exist on type 'string | A... Remove this comment to see the full error message - const channel = this.channels.find((c: any) => c.id === resourceUri); + const channel = this.channels.find((c: NotificationChannel) => c.id === resourceUri); // @ts-expect-error TS(2339): Property 'filter' does not exist on type 'string |... Remove this comment to see the full error message - this.channels = this.channels.filter((c: any) => c.id !== resourceUri); + this.channels = this.channels.filter((c: NotificationChannel) => c.id !== resourceUri); // @ts-expect-error TS(2349): This expression is not callable. this.onChannelDeleted(channel); return res; diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index dbb19590f..5a8ea1c27 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,6 +1,7 @@ import fetch from 'node-fetch'; import { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; +import { NotificationChannel } from '../../../types.ts'; const queueOptions = process.env.NODE_ENV === 'test' @@ -38,14 +39,17 @@ const WebhookChannel2023Service = { async handler(ctx) { const { appUri, webId } = ctx.params; const { origin: appOrigin } = new URL(appUri); - return this.channels.filter((c: any) => c.webId === webId && c.sendTo.startsWith(appOrigin)); + return this.channels.filter((c: NotificationChannel) => c.webId === webId && c.sendTo.startsWith(appOrigin)); } }, deleteAppChannels: { async handler(ctx) { const { appUri, webId } = ctx.params; - const appChannels = await this.actions.getAppChannels({ appUri, webId }, { parentCtx: ctx }); + const appChannels: NotificationChannel[] = await this.actions.getAppChannels( + { appUri, webId }, + { parentCtx: ctx } + ); for (const appChannel of appChannels) { await this.actions.delete({ resourceUri: appChannel.id, webId: appChannel.webId }); } @@ -53,7 +57,7 @@ const WebhookChannel2023Service = { } }, methods: { - onEvent(channel, activity) { + onEvent(channel: NotificationChannel, activity) { this.createJob('webhookPost', channel.sendTo, { channel, activity }, queueOptions); } }, @@ -61,7 +65,7 @@ const WebhookChannel2023Service = { webhookPost: { name: '*', async process(job: any) { - const { channel, activity } = job.data; + const { channel, activity }: { channel: NotificationChannel; activity: any } = job.data; try { const response = await fetch(channel.sendTo, { diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index 450053def..db55e3eac 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -3,6 +3,7 @@ import urlJoin from 'url-join'; import { v4 as uuidV4 } from 'uuid'; import { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; +import { NotificationChannel } from '../../../types.ts'; const WebSocketChannel2023Service = { name: 'solid-notifications.provider.websocket' as const, @@ -31,7 +32,7 @@ const WebSocketChannel2023Service = { onConnection: (connection: any) => { this.logger.debug('onConnection', connection.requestUrl); - const channel = this.channels.find((c: any) => c.receiveFrom === connection.requestUrl); + const channel: NotificationChannel = this.channels.find((c: any) => c.receiveFrom === connection.requestUrl); // Check if the requested channel is registered. if (!channel) { connection.webSocket.close(404, 'Channel not found.'); @@ -55,13 +56,13 @@ const WebSocketChannel2023Service = { }); }, methods: { - onChannelDeleted(channel) { + onChannelDeleted(channel: NotificationChannel) { // Close open connections (is removed from array on close event). this.socketConnections .filter((socketConnection: any) => socketConnection.requestUrl === channel.receiveFrom) .forEach((connection: any) => connection.webSocket.close(1001, 'The channel was deleted.')); }, - onEvent(channel, activity) { + onEvent(channel: NotificationChannel, activity: any) { const message = JSON.stringify({ ...activity, published: new Date().toISOString() diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 1c9b1ce75..e7775d693 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -110,10 +110,7 @@ const SolidStorageSchema = { // Create containers from registry const containerRegistrations: Registration[] = await ctx.call('ldp.registry.list', { isContainer: true }); for (const containerRegistration of containerRegistrations) { - const containerUri = await ctx.call('ldp.container.create', { - registration: containerRegistration, - webId - }); + const containerUri = await ctx.call('ldp.container.create', { registration: containerRegistration }); await ctx.call('ldp.container.attach', { containerUri: rootContainerUri, diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index 9b793a814..ca2baebab 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -24,13 +24,11 @@ const TypeIndexService = { params: { types: { type: 'array' }, uri: { type: 'string' }, - webId: { type: 'string', optional: true }, isContainer: { type: 'boolean', default: true }, isPrivate: { type: 'boolean', default: false } }, async handler(ctx) { let { types, uri, isContainer, isPrivate } = ctx.params; - const webId = ctx.params.webId || ctx.meta.webId; const existingRegistration: TypeRegistration = await this.actions.getByUri( { uri, isPrivate }, @@ -39,7 +37,7 @@ const TypeIndexService = { const expandedTypes: string[] = await ctx.call('jsonld.parser.expandTypes', { types }); - const typeIndexUri = await ctx.call(`${isPrivate ? 'private' : 'public'}-type-index.getUri`, { webId }); + const typeIndexUri = await ctx.call(`${isPrivate ? 'private' : 'public'}-type-index.getUri`); // Use a hash based on the URI (which should be unique !) const typeRegistrationUri = `${typeIndexUri}#${getSlugFromUri(uri)}`; diff --git a/src/middleware/packages/solid/types.ts b/src/middleware/packages/solid/types.ts index c2e61ce1b..1407ab961 100644 --- a/src/middleware/packages/solid/types.ts +++ b/src/middleware/packages/solid/types.ts @@ -4,3 +4,11 @@ export interface TypeRegistration { isPrivate: boolean; isContainer: boolean; } + +export interface NotificationChannel { + id: string; + topic: string; + sendTo: string; + receiveFrom: string; + webId: string; +} diff --git a/website/docs/middleware/ldp/container.md b/website/docs/middleware/ldp/container.md index 38d5c9e9a..f7e02b815 100644 --- a/website/docs/middleware/ldp/container.md +++ b/website/docs/middleware/ldp/container.md @@ -231,7 +231,7 @@ If the resource being patched is a remote resource, it will be stored locally (w | `slug` | `String` | | Specific ID tu use for URI instead generated UUID | | `webId` | `String` | Logged user's webId | User doing the action | -The `slug` parameter is ignored if the `resourcesWithContainerPath` setting is `false`. +The `slug` parameter is ignored if the `allowSlugs` setting is `false`. ##### Return diff --git a/website/docs/middleware/ldp/index.md b/website/docs/middleware/ldp/index.md index 5f02d556e..9467b2c39 100644 --- a/website/docs/middleware/ldp/index.md +++ b/website/docs/middleware/ldp/index.md @@ -65,16 +65,16 @@ module.exports = { ## Settings -| Property | Type | Default | Description | -| ---------------------------- | ---------- | --------------------------- | ------------------------------------------------------------------------ | -| `baseUrl` | `String` | **required** | Base URL of the LDP server | -| `containers` | `[Object]` | **required** | List of containers to set up, with their options (see below) | -| `defaultContainerOptions` | `[Object]` | | Default options for all containers (see below) | -| `mirrorGraphName` | `String` | "http://semapps.org/mirror" | Name of the RDF graph where to store mirrored data | -| `podProvider` | `Boolean` | false | Set to true if your server is a POD provider | -| `preferredViewForResource` | `Function` | | Function called to generate a redirect to the preferred view (see below) | -| `resourcesWithContainerPath` | `Boolean` | true | If true, the URI of all new resources will include the container path | -| `binary.maxSize` | `String` | "50Mb" | The maximum size allowed for uploaded binaries | +| Property | Type | Default | Description | +| -------------------------- | ---------- | --------------------------- | ------------------------------------------------------------------------ | +| `baseUrl` | `String` | **required** | Base URL of the LDP server | +| `containers` | `[Object]` | **required** | List of containers to set up, with their options (see below) | +| `defaultContainerOptions` | `[Object]` | | Default options for all containers (see below) | +| `mirrorGraphName` | `String` | "http://semapps.org/mirror" | Name of the RDF graph where to store mirrored data | +| `podProvider` | `Boolean` | false | Set to true if your server is a POD provider | +| `preferredViewForResource` | `Function` | | Function called to generate a redirect to the preferred view (see below) | +| `allowSlugs` | `Boolean` | true | If false, slugs will be ignored and UUIDs will be used everywhere | +| `binary.maxSize` | `String` | "50Mb" | The maximum size allowed for uploaded binaries | ## Container options From e6f5af21a3721214c8865acc11dde6e913041c34 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 25 Nov 2025 19:02:27 +0100 Subject: [PATCH 123/165] Skip all interop tests for now --- src/middleware/tests/interop/mirror-protected.test.ts | 2 +- src/middleware/tests/interop/mirror.test.ts | 2 +- src/middleware/tests/interop/patch-remote.test.ts | 2 +- src/middleware/tests/interop/remote-inference.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/middleware/tests/interop/mirror-protected.test.ts b/src/middleware/tests/interop/mirror-protected.test.ts index 5ae1a17a6..035bc43a0 100644 --- a/src/middleware/tests/interop/mirror-protected.test.ts +++ b/src/middleware/tests/interop/mirror-protected.test.ts @@ -26,7 +26,7 @@ afterAll(async () => { if (server2) await server2.stop(); }); -describe('Resource on server1 is shared with user on server2', () => { +describe.skip('Resource on server1 is shared with user on server2', () => { let resourceUri: any; let user2: any; diff --git a/src/middleware/tests/interop/mirror.test.ts b/src/middleware/tests/interop/mirror.test.ts index 938530d27..9ad132b4b 100644 --- a/src/middleware/tests/interop/mirror.test.ts +++ b/src/middleware/tests/interop/mirror.test.ts @@ -26,7 +26,7 @@ afterAll(async () => { if (server2) await server2.stop(); }); -describe('Server2 mirror server1', () => { +describe.skip('Server2 mirror server1', () => { let resourceUri: any; test('Server2 follow server1', async () => { diff --git a/src/middleware/tests/interop/patch-remote.test.ts b/src/middleware/tests/interop/patch-remote.test.ts index 8074852b8..532c3f749 100644 --- a/src/middleware/tests/interop/patch-remote.test.ts +++ b/src/middleware/tests/interop/patch-remote.test.ts @@ -18,7 +18,7 @@ afterAll(async () => { if (server2) await server2.stop(); }); -describe('Server2 imports a single resource from server1', () => { +describe.skip('Server2 imports a single resource from server1', () => { let resourceUri: any; test('Resource is posted on server1', async () => { diff --git a/src/middleware/tests/interop/remote-inference.test.ts b/src/middleware/tests/interop/remote-inference.test.ts index 0491392d6..0a091506f 100644 --- a/src/middleware/tests/interop/remote-inference.test.ts +++ b/src/middleware/tests/interop/remote-inference.test.ts @@ -18,7 +18,7 @@ afterAll(async () => { if (server2) await server2.stop(); }); -describe('An inference is added between server1 et server2', () => { +describe.skip('An inference is added between server1 et server2', () => { let resourceUri1: any; let resourceUri2: any; From 8cc8e1662fa9ea542fde7d9938e5ed29a1150cbc Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 27 Nov 2025 18:14:53 +0100 Subject: [PATCH 124/165] Finish migration tool --- src/middleware/packages/core/package.json | 1 - src/middleware/packages/core/service.ts | 1 - .../packages/core/serviceTypes.d.ts | 1 - .../ldp/services/container/actions/delete.ts | 7 +- src/middleware/packages/migration/2-0-0.ts | 610 +++++++++++++----- src/middleware/packages/migration/index.ts | 3 +- .../packages/migration/package.json | 9 +- src/middleware/packages/migration/redirect.ts | 80 +++ src/middleware/packages/migration/service.ts | 87 +-- .../solid/services/preferences-file.ts | 3 +- .../packages/webacl/middlewares/webacl.ts | 73 +-- src/middleware/packages/webid/package.json | 2 +- src/middleware/tests/jsonld/initialize.ts | 2 +- src/middleware/yarn.lock | 5 - 14 files changed, 559 insertions(+), 325 deletions(-) create mode 100644 src/middleware/packages/migration/redirect.ts diff --git a/src/middleware/packages/core/package.json b/src/middleware/packages/core/package.json index bff87a55f..e80573b48 100644 --- a/src/middleware/packages/core/package.json +++ b/src/middleware/packages/core/package.json @@ -13,7 +13,6 @@ "@semapps/solid": "1.2.0", "@semapps/sparql-endpoint": "1.2.0", "@semapps/triplestore": "1.2.0", - "@semapps/void": "1.2.0", "@semapps/webacl": "1.2.0", "@semapps/webfinger": "1.2.0", "@semapps/webid": "1.2.0", diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index a3ee8fd58..6fb4a4e49 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -36,7 +36,6 @@ const CoreService = { signature: {}, sparqlEndpoint: {}, typeIndex: {}, - void: {}, webacl: {}, webfinger: {}, webid: {} diff --git a/src/middleware/packages/core/serviceTypes.d.ts b/src/middleware/packages/core/serviceTypes.d.ts index 4ba5518e9..c3838c1bf 100644 --- a/src/middleware/packages/core/serviceTypes.d.ts +++ b/src/middleware/packages/core/serviceTypes.d.ts @@ -21,7 +21,6 @@ export interface CoreServiceSettings extends ServiceSettingSchema { ldp: object | boolean; signature: object | boolean; sparqlEndpoint: object | boolean; - void: object | boolean; webacl: object | boolean; webfinger: object | boolean; } diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index 688b33e03..296a27b66 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -28,8 +28,8 @@ const Schema = { await ctx.call('triplestore.named-graph.delete', { uri: containerUri }); // Detach the container from parent containers after deletion, otherwise the permissions may fail - const parentContainers = await ctx.call('ldp.resource.getContainers', { resourceUri: containerUri }); - for (const parentContainerUri of parentContainers) { + const parentContainersUris: string[] = await ctx.call('ldp.resource.getContainers', { resourceUri: containerUri }); + for (const parentContainerUri of parentContainersUris) { await ctx.call('ldp.container.detach', { containerUri: parentContainerUri, resourceUri: containerUri, @@ -43,9 +43,8 @@ const Schema = { webId }; - // @ts-expect-error TS(2339): Property 'skipEmitEvent' does not exist on type '{... Remove this comment to see the full error message if (!ctx.meta.skipEmitEvent) { - ctx.emit('ldp.container.deleted', returnValues, { meta: { webId: null, dataset: null } }); + ctx.emit('ldp.container.deleted', returnValues); } return returnValues; diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index 7c21901f7..c9640f15b 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -1,11 +1,15 @@ import { ServiceSchema } from 'moleculer'; import urlJoin from 'url-join'; +import { Account } from '@semapps/auth'; +import { arrayOf } from '@semapps/ldp'; import { buildBlankNodesQuery, objectCurrentToId, pseudoIdToId } from './utils.ts'; +import MigrationService from './service.ts'; const blankNodesQuery = buildBlankNodesQuery(4); export default { name: 'migration-2-0-0', + mixins: [MigrationService], settings: { baseUrl: undefined }, @@ -15,254 +19,504 @@ export default { } }, actions: { - async moveAllToNamedGraph(ctx) { - const { dataset } = ctx.params; - ctx.meta.dataset = dataset || ctx.meta.dataset; - - // Find all containers in default graph - const result = await ctx.call('triplestore.query', { - query: ` - PREFIX ldp: - SELECT ?containerUri - WHERE { - ?containerUri a ldp:Container . - } - `, - webId: 'system' - }); - const containersUris = result.map((node: any) => node.containerUri.value); - - for (const containerUri of containersUris) { - // Delete all containers and their resources - await this.actions.moveContainerToNamedGraph({ containerUri }, { parentCtx: ctx }); + migrate: { + async handler(ctx) { + const { username } = ctx.params; + const accounts: Account[] = await ctx.call('auth.account.find', { + query: username === '*' ? undefined : { username } + }); + + for (const { username: dataset } of accounts) { + this.logger.info(`Migrating storage ${dataset}...`); + + ctx.meta.dataset = dataset; + ctx.meta.isMigrating = true; + ctx.meta.skipObjectsWatcher = true; // We don't want to trigger Update activities + + await this.actions.migrateAllContainers({ dataset }, { parentCtx: ctx }); + await this.actions.migrateTypeIndex({ dataset }, { parentCtx: ctx }); + ctx.meta.webId = await this.actions.migrateWebId({ dataset }, { parentCtx: ctx }); + await this.actions.deleteIntermediaryContainers({ dataset }, { parentCtx: ctx }); + await this.actions.migrateCurrentPredicate({ dataset }, { parentCtx: ctx }); + await this.actions.migratePseudoIds({ dataset }, { parentCtx: ctx }); + await this.actions.attachAllContainersToRootContainer({ dataset }, { parentCtx: ctx }); + + await this.actions.migrateSingleResourcesContainer( + { + oldContainerUri: urlJoin(this.settings.baseUrl, dataset, 'data/pim/configuration-file'), + types: ['pim:ConfigurationFile'], + isPrivate: true + }, + { parentCtx: ctx } + ); + } } + }, + /** + * Migrate the WebID (it is not attached to a container) + */ + migrateWebId: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; + + const newWebId = await this.actions.migrateResource( + { + oldResourceUri: urlJoin(this.settings.baseUrl, dataset) + }, + { parentCtx: ctx } + ); + + // Register the single resource in the type index + await ctx.call('type-index.register', { + types: ['foaf:Agent'], + uri: newWebId, + isContainer: false, + isPrivate: false + }); - // Move WebID (not linked from a container) - const webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); - await this.actions.moveResourceToNamedGraph({ resourceUri: webId }, { parentCtx: ctx }); + const account: Account = await ctx.call('auth.account.findByUsername', { username: dataset }); + await ctx.call('auth.account.attachWebId', { accountUri: account['@id'], webId: newWebId }); - // Delete orphan blank nodes from default graph - await ctx.call('triplestore.update', { - query: ` - DELETE { - ?s ?p ?o . - } - WHERE { - ?s ?p ?o . - FILTER(isBLANK(?s)) - FILTER(NOT EXISTS {?parentS ?parentP ?s}) - } - `, - webId: 'system' - }); - - // Delete tombstones (they are not linked from containers) - await ctx.call('triplestore.update', { - query: ` - PREFIX as: - DELETE - WHERE { - ?s1 a as:Tombstone . - ?s1 ?p1 ?o1 . - } - `, - webId: 'system' - }); + return newWebId; + } }, - async moveContainerToNamedGraph(ctx) { - const { containerUri } = ctx.params; + migrateAllContainers: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; - const containerExist = await ctx.call('triplestore.named-graph.exist', { uri: containerUri }); + // Find all containers in default graph + let result: any = await ctx.call('triplestore.query', { + query: ` + PREFIX ldp: + SELECT ?containerUri + WHERE { + ?containerUri a ldp:Container . + } + `, + webId: 'system' + }); + const oldContainersUris = result.map((node: any) => node.containerUri.value); + let newContainersUris = []; - if (containerExist) { - this.logger.warn(`Container ${containerUri} is already in a named graph, skipping...`); - } else { - this.logger.info(`Migrating container ${containerUri}...`); + for (const oldContainerUri of oldContainersUris) { + // Move all containers and their resources + newContainersUris.push(await this.actions.migrateContainer({ oldContainerUri }, { parentCtx: ctx })); + } - const container = await ctx.call('triplestore.query', { + // Delete tombstones (they are not linked from containers) + await ctx.call('triplestore.update', { query: ` - CONSTRUCT + PREFIX as: + DELETE WHERE { - <${containerUri}> ?p1 ?o1 . + ?s1 a as:Tombstone . + ?s1 ?p1 ?o1 . } `, webId: 'system' }); - await ctx.call('triplestore.named-graph.create', { uri: containerUri }); - await ctx.call('triplestore.insert', { - resource: container, - graphName: containerUri, + // Delete orphan blank nodes from default graph + await ctx.call('triplestore.update', { + query: ` + DELETE { + ?s ?p ?o . + } + WHERE { + ?s ?p ?o . + FILTER(isBLANK(?s)) + FILTER(NOT EXISTS {?parentS ?parentP ?s}) + } + `, webId: 'system' }); } + }, + migrateContainer: { + async handler(ctx) { + const { oldContainerUri } = ctx.params; - /** - * Find resources in container (excluding child container) - */ + let newContainerUri = await ctx.call('redirect.get', { oldUri: oldContainerUri }); - this.logger.info(`Migrating resources in container ${containerUri}...`); + if (newContainerUri) { + this.logger.warn(`Container ${oldContainerUri} is already migrated, skipping...`); + } else { + this.logger.info(`Migrating container ${oldContainerUri}...`); + + const container: any = await ctx.call('triplestore.query', { + query: ` + CONSTRUCT + WHERE { + <${oldContainerUri}> ?p1 ?o1 . + } + `, + webId: 'system' + }); + + const baseUrl = await ctx.call('solid-storage.getBaseUrl'); + newContainerUri = await ctx.call('triplestore.named-graph.create', { baseUrl }); + + await ctx.call('triplestore.insert', { + resource: this.changeId(container, oldContainerUri, newContainerUri), + graphName: newContainerUri, + webId: 'system' + }); + + await ctx.call('redirect.set', { oldUri: oldContainerUri, newUri: newContainerUri }); + + // Replace all references to resource with new URI + await this.actions.updateReferences({ oldUri: oldContainerUri, newUri: newContainerUri }, { parentCtx: ctx }); + } - const result = await ctx.call('triplestore.query', { - query: ` - PREFIX ldp: - SELECT ?resourceUri - WHERE { - <${containerUri}> ldp:contains ?resourceUri . - FILTER(NOT EXISTS { ?resourceUri a ldp:Container }) - } - `, - webId: 'system' - }); - const resourcesUris = result.map((node: any) => node.resourceUri.value); + /** + * Find resources in container (excluding child container because they are treated independently) + */ - for (const resourceUri of resourcesUris) { - await this.actions.moveResourceToNamedGraph({ resourceUri }, { parentCtx: ctx }); + this.logger.info(`Migrating resources in container ${oldContainerUri}...`); - // Unlink resource from container - await ctx.call('triplestore.update', { + const result: any = await ctx.call('triplestore.query', { query: ` PREFIX ldp: - DELETE + SELECT ?resourceUri WHERE { - <${containerUri}> ldp:contains <${resourceUri}> + <${oldContainerUri}> ldp:contains ?resourceUri . + FILTER(NOT EXISTS { ?resourceUri a ldp:Container }) } `, webId: 'system' }); - } - - this.logger.info(`Deleting container ${containerUri} from default graph...`); + const oldResourcesUris = result.map((node: any) => node.resourceUri.value); - // Delete container - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - <${containerUri}> ?p1 ?s1 . + for (const oldResourceUri of oldResourcesUris) { + if (!(await ctx.call('ldp.remote.isRemote', { resourceUri: oldResourceUri }))) { + await this.actions.migrateResource({ oldResourceUri }, { parentCtx: ctx }); } - `, - webId: 'system' - }); - }, - async moveResourceToNamedGraph(ctx) { - const { resourceUri } = ctx.params; - const resourceExist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); + // Unlink resource from container (so that they are not migrated twice) + await ctx.call('triplestore.update', { + query: ` + PREFIX ldp: + DELETE + WHERE { + <${oldContainerUri}> ldp:contains <${oldResourceUri}> + } + `, + webId: 'system' + }); + } - if (resourceExist) { - this.logger.warn(`Resource ${resourceUri} is already in a named graph, skipping...`); - } else { - this.logger.info(`Migrating resource ${resourceUri}...`); + this.logger.info(`Deleting container ${oldContainerUri} from default graph...`); - const resource = await ctx.call('triplestore.query', { + // Delete container + await ctx.call('triplestore.update', { query: ` - CONSTRUCT { - ${blankNodesQuery.construct} - } + DELETE WHERE { - BIND(<${resourceUri}> AS ?s1) . - ${blankNodesQuery.where} + <${oldContainerUri}> ?p1 ?s1 . } `, webId: 'system' }); - await ctx.call('triplestore.named-graph.create', { uri: resourceUri }); - await ctx.call('triplestore.insert', { - resource, - graphName: resourceUri, + return newContainerUri; + } + }, + migrateResource: { + async handler(ctx) { + const { oldResourceUri } = ctx.params; + + let newResourceUri = await ctx.call('redirect.get', { oldUri: oldResourceUri }); + + if (newResourceUri) { + this.logger.warn(`Resource ${oldResourceUri} is already migrated, skipping...`); + } else { + this.logger.info(`Migrating resource ${oldResourceUri}...`); + + const resource: any = await ctx.call('triplestore.query', { + query: ` + CONSTRUCT { + ${blankNodesQuery.construct} + } + WHERE { + BIND(<${oldResourceUri}> AS ?s1) . + ${blankNodesQuery.where} + } + `, + webId: 'system' + }); + + const baseUrl = await ctx.call('solid-storage.getBaseUrl'); + newResourceUri = await ctx.call('triplestore.named-graph.create', { baseUrl }); + + await ctx.call('triplestore.insert', { + resource: this.changeId(resource, oldResourceUri, newResourceUri), + graphName: newResourceUri, + webId: 'system' + }); + + await ctx.call('redirect.set', { oldUri: oldResourceUri, newUri: newResourceUri }); + + // Replace all references to resource with new URI + await this.actions.updateReferences({ oldUri: oldResourceUri, newUri: newResourceUri }, { parentCtx: ctx }); + + this.logger.info(`Deleting resource ${oldResourceUri} from default graph...`); + + // Delete resource (orphan blank nodes will be deleted at the end) + await ctx.call('triplestore.update', { + query: ` + DELETE + WHERE { + <${oldResourceUri}> ?p1 ?s1 . + } + `, + webId: 'system' + }); + } + + return newResourceUri; + } + }, + /** + * Replace the as:current predicate with the ID + * Must be called *after* the migrateAllContainers action + */ + migrateCurrentPredicate: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; + + const result: any = await ctx.call('triplestore.query', { + query: ` + PREFIX as: + SELECT DISTINCT ?resourceUri + WHERE { + GRAPH ?resourceUri { + ?s1 as:current ?current . + } + } + `, webId: 'system' }); - } + const activitiesUris = result.map((node: any) => node.resourceUri.value); + + this.logger.info(`Found ${activitiesUris.length} activities needing migration`); - this.logger.info(`Deleting resource ${resourceUri} from default graph...`); + for (const activityUri of activitiesUris) { + this.logger.info(`Migrating activity ${activityUri}...`); - // Delete resource (orphan blank nodes will be deleted at the end) - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - <${resourceUri}> ?p1 ?s1 . + const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri }); + + const activityWithId = objectCurrentToId(activity); + + if (await ctx.call('ldp.remote.isRemote', { resourceUri: activityUri })) { + await ctx.call('ldp.remote.store', { resource: activityWithId }); + } else { + await ctx.call('activitypub.activity.put', { resource: activityWithId }); } - `, - webId: 'system' - }); + } + } }, /** * Replace the as:current predicate with the ID - * Must be called *after* the moveAllToNamedGraph action + * Must be called *after* the migrateAllContainers action */ - async migrateCurrentPredicate(ctx) { - const { dataset } = ctx.params; - ctx.meta.dataset = dataset || ctx.meta.dataset; - - ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); - - const result = await ctx.call('triplestore.query', { - query: ` - PREFIX as: - SELECT DISTINCT ?resourceUri - WHERE { - GRAPH ?resourceUri { - ?s1 as:current ?current . + migratePseudoIds: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; + + const result: any = await ctx.call('triplestore.query', { + query: ` + SELECT DISTINCT ?resourceUri + WHERE { + GRAPH ?resourceUri { + ?s1 ?pseudoId . + } } - } - `, - webId: 'system' - }); - const activitiesUris = result.map((node: any) => node.resourceUri.value); + `, + webId: 'system' + }); - this.logger.info(`Found ${activitiesUris.length} activities needing migration`); + const resourcesUris = result.map((node: any) => node.resourceUri.value); - for (const activityUri of activitiesUris) { - this.logger.info(`Migrating activity ${activityUri}...`); + this.logger.info(`Found ${resourcesUris.length} resources needing migration`); - const activity = await ctx.call('activitypub.activity.get', { resourceUri: activityUri }); + for (const resourceUri of resourcesUris) { + this.logger.info(`Migrating resource ${resourceUri}...`); - const activityWithId = objectCurrentToId(activity); + const resource = await ctx.call('ldp.resource.get', { resourceUri }); - if (await ctx.call('ldp.remote.isRemote', { resourceUri: activityUri })) { - await ctx.call('ldp.remote.store', { resource: activityWithId }); - } else { - await ctx.call('activitypub.activity.put', { resource: activityWithId }); + await ctx.call('ldp.resource.put', { resource: pseudoIdToId(resource) }); } } }, /** - * Replace the as:current predicate with the ID - * Must be called *after* the moveAllToNamedGraph action + * Migrate the TypeIndex + * Must be called *after* the migrateAllContainers action */ - async migratePseudoIds(ctx) { - const { dataset } = ctx.params; - - ctx.meta.dataset = dataset || ctx.meta.dataset; - ctx.meta.webId = urlJoin(this.settings.baseUrl, ctx.meta.dataset); - - const result = await ctx.call('triplestore.query', { - query: ` - SELECT DISTINCT ?resourceUri - WHERE { - GRAPH ?resourceUri { - ?s1 ?pseudoId . + migrateTypeIndex: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; + + for (const isPrivate of [false, true]) { + const result: any = await ctx.call('triplestore.query', { + query: ` + PREFIX solid: + SELECT ?typeRegistrationUri + WHERE { + GRAPH ?typeIndexUri { + ?typeIndexUri a solid:TypeIndex, ${isPrivate ? 'solid:UnlistedDocument' : 'solid:ListedDocument'} . + ?typeIndexUri solid:hasTypeRegistration ?typeRegistrationUri . + } + } + `, + webId: 'system' + }); + + const typeRegistrationsUris = result.map((node: any) => node.typeRegistrationUri.value); + + for (const typeRegistrationUri of typeRegistrationsUris) { + const typeRegistration: any = await ctx.call('ldp.resource.get', { + resourceUri: typeRegistrationUri, + webId: 'system' + }); + + await ctx.call('type-index.register', { + types: arrayOf(typeRegistration['solid:forClass']), + uri: typeRegistration['solid:instanceContainer'], + isContainer: true, + isPrivate + }); + + await ctx.call('ldp.resource.delete', { resourceUri: typeRegistrationUri, webId: 'system' }); + + // Remove the link (in the new type index, we don't use this predicate) + await ctx.call('triplestore.update', { + query: ` + PREFIX solid: + DELETE + WHERE { + GRAPH ?typeIndexUri { + ?typeIndexUri solid:hasTypeRegistration <${typeRegistrationUri}> . + } + } + `, + webId: 'system' + }); } } - `, - webId: 'system' - }); + // Delete type registration container + const newTypeRegistrationContainerUri = await ctx.call('redirect.get', { + oldUri: urlJoin(this.settings.baseUrl, ctx.meta.dataset, 'data/solid/type-registration') + }); + await ctx.call('ldp.container.delete', { containerUri: newTypeRegistrationContainerUri, webId: 'system' }); + } + }, + /** + * Delete intermediary containers with ontology prefixes + * Must be called *after* the migrateAllContainers action + */ + deleteIntermediaryContainers: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; - const resourcesUris = result.map(node => node.resourceUri.value); + const prefixes = ['as', 'foaf', 'vcard', 'interop', 'pim', 'solid', 'semapps', 'notify']; - this.logger.info(`Found ${resourcesUris.length} resources needing migration`); + for (const prefix of prefixes) { + const oldUri = urlJoin(this.settings.baseUrl, ctx.meta.dataset, 'data', prefix); - for (const resourceUri of resourcesUris) { - this.logger.info(`Migrating resource ${resourceUri}...`); + // Find the new URI + const newUri = await ctx.call('redirect.get', { oldUri }); - const resource = await ctx.call('ldp.resource.get', { resourceUri }); + if (newUri) { + // Delete the container (and detach it from the root container) + await ctx.call('ldp.container.delete', { containerUri: newUri, webId: 'system' }); + } else { + this.logger.warn(`No new URI found for container ${oldUri}, ignoring...`); + } + } + } + }, + /** + * Migrate deprecated SingleResourceContainerMixin to ControlledResourceMixin + */ + migrateSingleResourcesContainer: { + params: { + oldContainerUri: { type: 'string' }, + types: { type: 'array' }, + isPrivate: { type: 'boolean' } + }, + async handler(ctx) { + const { oldContainerUri, types, isPrivate } = ctx.params; + + this.logger.info(`Migrating ${oldContainerUri} (types: ${types.join(', ')}) to controlled resource...`); + + const rootContainerUri = await ctx.call('solid-storage.getRootContainerUri'); + + const newContainerUri = await ctx.call('redirect.get', { oldUri: oldContainerUri }); + + const resourcesUris: string[] = await ctx.call('ldp.container.getUris', { containerUri: newContainerUri }); + + if (resourcesUris.length === 1) { + // Attach the resource directly to the root container + await ctx.call('ldp.container.attach', { + containerUri: rootContainerUri, + resourceUri: resourcesUris[0], + webId: 'system' + }); + + // Register the single resource in the type index + await ctx.call('type-index.register', { + types, + uri: resourcesUris[0], + isContainer: false, + isPrivate + }); + + // Delete the container + await ctx.call('ldp.container.delete', { containerUri: newContainerUri }); + } else { + this.logger.warn( + `Single resource container ${newContainerUri} has ${resourcesUris.length} resources. Expecting 1.` + ); + } + } + }, + attachAllContainersToRootContainer: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; + + const rootContainerUri: string = await ctx.call('solid-storage.getRootContainerUri'); + const containersUris: string[] = await ctx.call('ldp.container.getAll'); - await ctx.call('ldp.resource.put', { resource: pseudoIdToId(resource) }); + for (const containerUri of containersUris) { + if (containerUri !== rootContainerUri) { + await ctx.call('ldp.container.attach', { containerUri: rootContainerUri, resourceUri: containerUri }); + } + } + } + } + }, + methods: { + changeId(resource: any, oldId: string, newId: string) { + const newResource = { ...resource }; + if (resource['@graph']) { + // If the resource is a graph, change the URI of the node matching the oldId + newResource['@graph'] = resource['@graph'].map((node: any) => { + const newNode = { ...node }; + if (node['@id'] === oldId) newNode['@id'] = newId; + return newNode; + }); + } else if (resource['@id'] === oldId) { + newResource['@id'] = newId; } + return newResource; } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/migration/index.ts b/src/middleware/packages/migration/index.ts index 287ba7d19..924a2b93e 100644 --- a/src/middleware/packages/migration/index.ts +++ b/src/middleware/packages/migration/index.ts @@ -2,5 +2,6 @@ import MigrationService from './service.ts'; import V04MigrationService from './0-4-0.ts'; import V07MigrationService from './0-7-0.ts'; import V20MigrationService from './2-0-0.ts'; +import RedirectService from './redirect.ts'; -export { MigrationService, V04MigrationService, V07MigrationService, V20MigrationService }; +export { MigrationService, V04MigrationService, V07MigrationService, V20MigrationService, RedirectService }; diff --git a/src/middleware/packages/migration/package.json b/src/middleware/packages/migration/package.json index c5678c0bd..58d84573d 100644 --- a/src/middleware/packages/migration/package.json +++ b/src/middleware/packages/migration/package.json @@ -5,9 +5,16 @@ "license": "Apache-2.0", "author": "Virtual Assembly", "dependencies": { + "@semapps/auth": "1.2.0", "@semapps/ldp": "1.2.0", + "@semapps/middlewares": "1.2.0", "@semapps/webacl": "1.2.0", - "url-join": "^4.0.1" + "moleculer-web": "^0.10.0-beta1", + "url-join": "^4.0.1", + "ioredis": "^4.27.0" + }, + "devDependencies": { + "@types/ioredis": "^4.27.0" }, "publishConfig": { "access": "public", diff --git a/src/middleware/packages/migration/redirect.ts b/src/middleware/packages/migration/redirect.ts new file mode 100644 index 000000000..2bf1992c7 --- /dev/null +++ b/src/middleware/packages/migration/redirect.ts @@ -0,0 +1,80 @@ +import Redis from 'ioredis'; +import path from 'path'; +import urlJoin from 'url-join'; +// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message +import { Errors as E } from 'moleculer-web'; +import { ServiceSchema } from 'moleculer'; +import { parseUrl } from '@semapps/middlewares'; + +const RedirectService = { + name: 'redirect' as const, + settings: { + baseUrl: null, + redisUrl: null + }, + dependencies: ['api', 'ldp'], + async started() { + if (!this.settings.redisUrl || !this.settings.baseUrl) throw new Error('The redisUrl and baseUrl are mandatory'); + + this.redis = new Redis(this.settings.redisUrl); + + const basePath: string = await this.broker.call('ldp.getBasePath'); + + await this.broker.call('api.addRoute', { + route: { + name: 'redirect-to-new-uri', + path: path.join(basePath, '/data/:slugParts*'), // Old URIs should all start with /data + authorization: false, + authentication: false, + aliases: { + 'GET /': [parseUrl, `${this.name}.redirectToNewUri`] + } + } + }); + }, + actions: { + set: { + async handler(ctx) { + const { oldUri, newUri } = ctx.params; + this.redis.set(oldUri, newUri); + } + }, + get: { + async handler(ctx) { + const { oldUri } = ctx.params; + return await this.redis.get(oldUri); + } + }, + delete: { + async handler(ctx) { + const { oldUri } = ctx.params; + return await this.redis.del(oldUri); + } + }, + redirectToNewUri: { + async handler(ctx: any) { + const { slugParts } = ctx.params; + + const oldUri = urlJoin(this.settings.baseUrl, 'data', ...slugParts); + const newUri = await this.actions.get({ oldUri }, { parentCtx: ctx }); + + if (newUri) { + ctx.meta.$statusCode = 301; + ctx.meta.$location = newUri; + } else { + throw E.NotFoundError(); + } + } + } + } +} satisfies ServiceSchema; + +export default RedirectService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [RedirectService.name]: typeof RedirectService; + } + } +} diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts index 1951d1708..5ed3338b0 100644 --- a/src/middleware/packages/migration/service.ts +++ b/src/middleware/packages/migration/service.ts @@ -1,8 +1,7 @@ import { getAclUriFromResourceUri } from '@semapps/webacl'; -import { getContainerFromUri } from '@semapps/ldp'; import { ServiceSchema } from 'moleculer'; -const MigrationSchema = { +const MigrationService = { name: 'migration' as const, settings: { baseUrl: undefined @@ -36,76 +35,47 @@ const MigrationSchema = { } }, - moveResourcesToContainer: { + updateReferences: { async handler(ctx) { - const { oldContainerUri, newContainerUri, dataset } = ctx.params; + const { oldUri, newUri, dataset } = ctx.params; - const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: oldContainerUri }); - - for (let oldResourceUri of resourcesUris) { - const newResourceUri = oldResourceUri.replace(oldContainerUri, newContainerUri); - - await this.actions.moveResource({ oldResourceUri, newResourceUri, dataset }, { parentCtx: ctx }); - - this.logger.info( - `All resources moved. You should consider deleting the old container with this command: call ldp.container.delete --containerUri ${oldContainerUri} --webId system` - ); - } - } - }, - - moveResource: { - async handler(ctx) { - const { oldResourceUri, newResourceUri, dataset } = ctx.params; - - this.logger.info(`Moving resource ${oldResourceUri} to ${newResourceUri}...`); + this.logger.info(`Updating references from ${oldUri} to ${newUri}...`); + // Change all references in default graph await ctx.call('triplestore.update', { query: ` - DELETE { <${oldResourceUri}> ?p ?o } - INSERT { <${newResourceUri}> ?p ?o } - WHERE { <${oldResourceUri}> ?p ?o } + DELETE { ?s ?p <${oldUri}> } + INSERT { ?s ?p <${newUri}> } + WHERE { ?s ?p <${oldUri}> } `, dataset, webId: 'system' }); + // Change all references in named graphs await ctx.call('triplestore.update', { query: ` - DELETE { ?s ?p <${oldResourceUri}> } - INSERT { ?s ?p <${newResourceUri}> } - WHERE { ?s ?p <${oldResourceUri}> } + DELETE { GRAPH ?g { ?s ?p <${oldUri}> } } + INSERT { GRAPH ?g { ?s ?p <${newUri}> } } + WHERE { GRAPH ?g { ?s ?p <${oldUri}> } } `, dataset, webId: 'system' }); + // Change all references in WebACL graph await ctx.call('triplestore.update', { query: ` WITH - DELETE { ?s ?p <${oldResourceUri}> } - INSERT { ?s ?p <${newResourceUri}> } - WHERE { ?s ?p <${oldResourceUri}> } - `, - dataset, - webId: 'system' - }); - - const oldContainerUri = getContainerFromUri(oldResourceUri); - const newContainerUri = getContainerFromUri(newResourceUri); - - await ctx.call('triplestore.update', { - query: ` - PREFIX ldp: - DELETE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } - INSERT { <${newContainerUri}> ldp:contains <${newResourceUri}> } - WHERE { <${oldContainerUri}> ldp:contains <${newResourceUri}> } + DELETE { ?s ?p <${oldUri}> } + INSERT { ?s ?p <${newUri}> } + WHERE { ?s ?p <${oldUri}> } `, dataset, webId: 'system' }); - await this.actions.moveAclRights({ newResourceUri, oldResourceUri, dataset }, { parentCtx: ctx }); + await this.actions.moveAclRights({ newUri, oldUri }, { parentCtx: ctx }); } }, @@ -137,29 +107,26 @@ const MigrationSchema = { webId: 'system' }); - await this.actions.moveAclRights( - { newResourceUri: newGroupUri, oldResourceUri: oldGroupUri, dataset }, - { parentCtx: ctx } - ); + await this.actions.moveAclRights({ newUri: newGroupUri, oldUri: oldGroupUri, dataset }, { parentCtx: ctx }); } }, moveAclRights: { async handler(ctx) { - const { oldResourceUri, newResourceUri, dataset } = ctx.params; + const { oldUri, newUri, dataset } = ctx.params; for (const right of ['Read', 'Append', 'Write', 'Control']) { - const oldResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, oldResourceUri)}#${right}`; - const newResourceAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, newResourceUri)}#${right}`; + const oldAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, oldUri)}#${right}`; + const newAclUri = `${getAclUriFromResourceUri(this.settings.baseUrl, newUri)}#${right}`; - this.logger.info(`Moving ACL rights ${oldResourceAclUri} to ${newResourceAclUri}...`); + this.logger.info(`Moving ACL rights ${oldAclUri} to ${newAclUri}...`); await ctx.call('triplestore.update', { query: ` WITH - DELETE { <${oldResourceAclUri}> ?p ?o } - INSERT { <${newResourceAclUri}> ?p ?o } - WHERE { <${oldResourceAclUri}> ?p ?o } + DELETE { <${oldAclUri}> ?p ?o } + INSERT { <${newAclUri}> ?p ?o } + WHERE { <${oldAclUri}> ?p ?o } `, dataset, webId: 'system' @@ -198,12 +165,12 @@ const MigrationSchema = { } } satisfies ServiceSchema; -export default MigrationSchema; +export default MigrationService; declare global { export namespace Moleculer { export interface AllServices { - [MigrationSchema.name]: typeof MigrationSchema; + [MigrationService.name]: typeof MigrationService; } } } diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index 8f17479d5..ece1e044b 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -9,7 +9,8 @@ const SolidPreferencesFileSchema = { settings: { path: '/preferences-file', types: ['pim:ConfigurationFile'], - permissions: {} + permissions: {}, + typeIndex: 'private' }, dependencies: ['ontologies'], async started() { diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 08657ed39..649a7b929 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -1,62 +1,22 @@ import urlJoin from 'url-join'; -import { defaultContainerOptions, getDatasetFromUri, isWebId } from '@semapps/ldp'; +import { defaultContainerOptions } from '@semapps/ldp'; +import { Middleware } from 'moleculer'; const modifyActions = [ 'ldp.resource.create', 'ldp.container.create', 'activitypub.collection.post', 'activitypub.object.createTombstone', - 'webid.createWebId', - 'ldp.remote.store', 'ldp.remote.delete', 'ldp.resource.delete' ]; const tripleStoreActions = ['triplestore.insert', 'triplestore.query', 'triplestore.update', 'triplestore.dropAll']; -const addRightsToNewUser = async (ctx: any, userUri: any) => { - // Manually add the permissions for the user resource now that we have its webId - // First delete the default permissions added by the middleware when we called ldp.resource.create - await ctx.call( - 'webacl.resource.deleteAllRights', - { resourceUri: userUri }, - { meta: { webId: 'system', skipObjectsWatcher: true } } - ); - - // TODO find the permissions to set from the users container - // const { newResourcesPermissions } = await ctx.call('ldp.registry.getByUri', { resourceUri: userUri }); - // const newRights = - // typeof newResourcesPermissions === 'function' ? newResourcesPermissions(userUri) : newResourcesPermissions; - - await ctx.call( - 'webacl.resource.addRights', - { - webId: 'system', - resourceUri: userUri, - newRights: { - anon: { - read: true - }, - user: { - uri: userUri, - read: true, - write: true, - control: true - } - } - }, - { - meta: { - skipObjectsWatcher: true - } - } - ); -}; - /** * Middleware that ensures that requests are conforming ACL records. */ -const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: any) => ({ +const WebAclMiddleware = ({ baseUrl }: { baseUrl: string }): Middleware => ({ name: 'WebAclMiddleware' as const, async started() { if (!baseUrl) throw new Error('The baseUrl config is missing for the WebACL middleware'); @@ -185,10 +145,6 @@ const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: ); break; - case 'webid.createWebId': - await addRightsToNewUser(ctx, actionReturnValue); - break; - case 'activitypub.object.createTombstone': // Tombstones should be public await ctx.call( @@ -210,29 +166,6 @@ const WebAclMiddleware = ({ baseUrl, graphName = 'http://semapps.org/webacl' }: ); break; - case 'ldp.remote.store': { - const resourceUri = ctx.params.resourceUri || ctx.params.resource.id || ctx.params.resource['@id']; - // When a remote resource is stored locally, give read permission to the logged user - if (isWebId(webId)) { - const dataset = getDatasetFromUri(webId); - await ctx.call( - 'webacl.resource.addRights', - { - resourceUri, - newRights: { - user: { - uri: webId, - read: true - } - }, - webId: 'system' - }, - { meta: { dataset, skipObjectsWatcher: true } } - ); - } - break; - } - case 'activitypub.collection.post': { // If a `permissions` param is passed when creating the collection, delete the permissions added before creation // (through the `newResourcesPermissions` of the collection container) and add these permissions instead diff --git a/src/middleware/packages/webid/package.json b/src/middleware/packages/webid/package.json index bae325ba8..2871a3b17 100644 --- a/src/middleware/packages/webid/package.json +++ b/src/middleware/packages/webid/package.json @@ -7,7 +7,7 @@ "dependencies": { "@semapps/activitypub": "1.2.0", "@semapps/ldp": "1.2.0", - "@semapps/middleware": "1.2.0", + "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", "url-join": "^4.0.1" diff --git a/src/middleware/tests/jsonld/initialize.ts b/src/middleware/tests/jsonld/initialize.ts index 04bfec902..3ebb8cc1d 100644 --- a/src/middleware/tests/jsonld/initialize.ts +++ b/src/middleware/tests/jsonld/initialize.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { ServiceBroker, ServiceSchema } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; import ApiGatewayService from 'moleculer-web'; import { JsonLdService } from '@semapps/jsonld'; import { OntologiesService } from '@semapps/ontologies'; diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index c0e0ca2c5..9f19c7dcb 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -9721,11 +9721,6 @@ rdf-data-factory@^1.1.0, rdf-data-factory@^1.1.2: dependencies: "@rdfjs/types" "^1.0.0" -rdf-data-model@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rdf-data-model/-/rdf-data-model-1.0.0.tgz#e768e1c2cd904c186471b20d1a4fce77c7712a4b" - integrity sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g== - rdf-isomorphic@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz#cd6d433cd85bf79d903d5f0fdeea42a40eb27265" From 86ffaee96a0f57b58aac40e0fbb58f555f2f54b9 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 1 Dec 2025 15:42:01 +0100 Subject: [PATCH 125/165] Moving type-index and notifications tests from ActivityPods --- src/middleware/packages/core/service.ts | 1 - .../packages/ldp/mixins/special-endpoint.ts | 2 +- src/middleware/packages/solid/index.ts | 4 +- .../packages/solid/mixins/websocket.ts | 214 +++++++++++ src/middleware/packages/solid/package.json | 6 +- .../solid/services/notifications/listener.ts | 9 +- src/middleware/packages/solid/types.ts | 23 ++ .../tests/activitypub/initialize.ts | 4 - src/middleware/tests/package.json | 4 +- src/middleware/tests/solid/initialize.ts | 165 ++++++++ src/middleware/tests/solid/type-index.test.ts | 63 +++ .../tests/solid/webhook-channels.test.ts | 207 ++++++++++ .../tests/solid/websocket-channels.test.ts | 359 ++++++++++++++++++ src/middleware/tests/utils.ts | 16 +- src/middleware/yarn.lock | 12 + 15 files changed, 1072 insertions(+), 17 deletions(-) create mode 100644 src/middleware/packages/solid/mixins/websocket.ts create mode 100644 src/middleware/tests/solid/initialize.ts create mode 100644 src/middleware/tests/solid/type-index.test.ts create mode 100644 src/middleware/tests/solid/webhook-channels.test.ts create mode 100644 src/middleware/tests/solid/websocket-channels.test.ts diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 6fb4a4e49..9ea7f5d1f 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -47,7 +47,6 @@ const CoreService = { // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "activitypub";... Remove this comment to see the full error message this.broker.createService({ mixins: [ActivityPubService], - // Type support for settings could be given, once moleculer type definitions improve... settings: { baseUrl, ...this.settings.activitypub diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index ae3ff605e..535b100d5 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -19,7 +19,7 @@ const SpecialEndpointMixin = { initialData: {} } }, - dependencies: ['api', 'ldp'], + dependencies: ['api', 'ldp', 'type-index'], async started() { if (!this.settings.baseUrl) throw new Error(`The baseUrl must be specified for service ${this.name}`); if (!this.settings.settingsDataset) diff --git a/src/middleware/packages/solid/index.ts b/src/middleware/packages/solid/index.ts index 5702a528c..03a46816e 100644 --- a/src/middleware/packages/solid/index.ts +++ b/src/middleware/packages/solid/index.ts @@ -5,6 +5,7 @@ import NotificationsListenerService from './services/notifications/listener.ts'; import PreferencesFileService from './services/preferences-file.ts'; import StorageService from './services/storage.ts'; import TypeIndexService from './services/type-index/type-index.ts'; +import WebSocketMixin from './mixins/websocket.ts'; export * from './types.ts'; export { @@ -14,5 +15,6 @@ export { NotificationsListenerService, PreferencesFileService, StorageService, - TypeIndexService + TypeIndexService, + WebSocketMixin }; diff --git a/src/middleware/packages/solid/mixins/websocket.ts b/src/middleware/packages/solid/mixins/websocket.ts new file mode 100644 index 000000000..d6691dafd --- /dev/null +++ b/src/middleware/packages/solid/mixins/websocket.ts @@ -0,0 +1,214 @@ +import urlJoin from 'url-join'; +import { Socket } from 'net'; +import { WebSocketServer } from 'ws'; +import http, { IncomingMessage, ServerResponse } from 'http'; +import { ServiceSchema } from 'moleculer'; +import { WebSocketConnection, WebSocketHandlers } from '../types.ts'; + +/** + * This mixin adds the ability to create WebSocket routes to the moleculer-web API Gateway. + * The mixin adds a new action `addWebSocketRoute` to the service. + * The action takes the following parameters: + * - name: The name of the route. + * - route: The route path. + * - authorization: Whether to require authorization. + * - authentication: Whether to require authentication. + * - use: An array of middleware functions to use. + * - handlers: An object with the following webSocket event callbacks: + * - onConnection: (connection) + * - onClose: (event, connection) + * - onMessage: (message, connection) + * - onError: (event, connection) + */ +const WebSocketMixin = { + settings: { + baseUrl: null + }, + created() { + this.connections = [] as WebSocketConnection[]; + if (!this.settings.baseUrl) throw new Error('The websocket api mixin requires the `baseUrl` setting.'); + }, + started() { + // Listen to upgrade requests and handle them with `upgradeHandler`. + // This will attach a `webSocketRequestHandler` to upgrade the + // connection and get a web socket object. + this.wss = new WebSocketServer({ noServer: true }); + this.server.on('upgrade', this.upgradeHandler); + }, + actions: { + // TODO: support interval-based pings? + /** See description in service comment. */ + addWebSocketRoute: { + params: { + name: { type: 'string' }, + route: { type: 'string' }, + authorization: { type: 'boolean', default: false }, + authentication: { type: 'boolean', default: false }, + use: { type: 'array', items: 'function', default: [] }, + handlers: { + $$type: 'object', + onConnection: { type: 'function', default: () => {} }, + onClose: { type: 'function', default: () => {} }, + onMessage: { type: 'function', default: () => {} }, + onError: { type: 'function', default: () => {} } + } + }, + async handler(ctx: any) { + const { name, route, authorization, authentication, use, handlers } = ctx.params; + + // Use the service's regular route handler but add some mixins. + this.actions.addRoute({ + route: { + name, + authorization, + authentication, + path: route, + bodyParsers: false, + callOptions: { timeout: 0 }, + aliases: { + 'GET /': [ + // Add provided mixins. + ...use, + // Handle the upgrade and register the callbacks (or error on non-ws requests). + (request: any, response: any, next: any) => this.handleWsRequest(request, response, next, handlers), + // The alias route array needs to have an action after the middleware functions. + `${this.name}.onWsConnection` + ] + }, + // Prevent ws connections from being closed by the lifecycle methods. + onAfterCall: (ctx: any, bla: any, incomingRequest: any, serverResponse: any) => + this.delayConnectionClosing(incomingRequest, serverResponse) + } + }); + } + }, + + onWsConnection: { + handler(ctx) { + // Just a dummy function to satisfy the alias middleware handler above. + // You can access the connection object with `ctx.meta.connection`. + // Warning: This action is also called, if the connection fails. + // In this case, `ctx.meta.connection` is unset. + } + } + }, + + methods: { + async handleWsRequest( + request: IncomingMessage, + response: ServerResponse, + next: () => void, + handlers: WebSocketHandlers + ) { + if (!request.webSocketRequestHandler) { + response.statusCode = 426; + response.statusMessage = 'Upgrade Required: Not a WebSocket request'; + next(); + return; + } + const wss = new WebSocketServer({ + noServer: true + }); + + // The existence of the handler indicates, we can perform a WS handshake. + // The call will do that and return the webSocket (see method `upgradeHandler`). + const webSocket = await request.webSocketRequestHandler(); + + // Create a new connection object (passed to all event handlers). + const wsBase = this.settings.baseUrl.replace(/^http/, 'ws'); + /** @type {import("./websocket").Connection} */ + const connection = { + server: wss, + request, + response, + // The registered route (e.g. /sockets/:foo) + baseUrl: urlJoin(wsBase, request.baseUrl), + // The URL path as requested by the client (including URL params, e.g. /sockets/bar1?p2=v2). + requestUrl: urlJoin(wsBase, request.originalUrl), + // The parsed URL path without URL params (e.g. /sockets/bar1). + parsedUrl: urlJoin(wsBase, request.parsedUrl), + // The context params (URL params + registered params (e.g. {foo: "bar1", p2: "v2"})) + params: request.$params, + webSocket, + send: webSocket.send + }; + + // Add event listeners registered by the caller. + webSocket.addEventListener('close', (e: any) => handlers.onClose(e, connection)); + webSocket.addEventListener('message', (e: any) => handlers.onMessage(e.data, connection)); + webSocket.addEventListener('error', (e: any) => handlers.onError(e, connection)); + + // Remove connections, when they close. + webSocket.addEventListener('close', () => { + this.connections = this.connections.filter((c: any) => c !== connection); + }); + + // Add connection to the list of connections. + this.connections.push(connection); + + // Trigger connected event. + handlers.onConnection(connection); + + // Attach connection to ctx. + request.$ctx.meta.connection = connection; + + // Handle next middleware. + next(); + + this.logger.info('New WebSocket registered with URI: ', connection.requestUrl); + }, + + /** + * Inspired by https://codeberg.org/kitten/app/src/branch/main/src/Server.js#L1042 + */ + upgradeHandler(request: IncomingMessage, socket: Socket, head: Buffer) { + const response = new http.ServerResponse(request); + response.assignSocket(socket); + + // Avoid hanging onto upgradeHead as this will keep the entire + // slab buffer used by node alive. + const copyOfHead = Buffer.alloc(head.length); + head.copy(copyOfHead); + + response.on('finish', () => { + if (response.socket !== null) { + response.socket.destroy(); + } + }); + + // Add a handler that indicates a web socket request. + // Calling the handler will perform the ws upgrade handshake and return the webSocket. + request.webSocketRequestHandler = () => + new Promise(resolve => { + this.wss?.handleUpgrade(request, request.socket, copyOfHead, (ws: any) => { + this.wss?.emit('connection', ws, request); + resolve(ws); + }); + }); + + return this.httpHandler(request, response); + }, + + /** + * Delay the connection closing until the web socket is closed, if this is a websocket connection. + */ + async delayConnectionClosing(incomingRequest: IncomingMessage, serverResponse: ServerResponse) { + // Don't return, if this is an open websocket, otherwise the connection will be closed. + if (incomingRequest.webSocketRequestHandler) { + // Only resolve, once the socket closes. + await new Promise((resolve, reject) => { + serverResponse.socket.on('close', resolve); + serverResponse.socket.on('error', reject); + + // If already closed, return immediately. + if (serverResponse.socket.closed) { + // @ts-expect-error TS(2794): Expected 1 arguments, but got 0. Did you forget to... Remove this comment to see the full error message + resolve(); + } + }); + } + } + } +} satisfies Partial; + +export default WebSocketMixin; diff --git a/src/middleware/packages/solid/package.json b/src/middleware/packages/solid/package.json index 069133629..c46c46672 100644 --- a/src/middleware/packages/solid/package.json +++ b/src/middleware/packages/solid/package.json @@ -22,7 +22,8 @@ "moment": "2.30.1", "node-fetch": "^2.6.6", "url-join": "^4.0.1", - "uuid": "^9.0.1" + "uuid": "^9.0.1", + "ws": "^8.17.0" }, "publishConfig": { "access": "public", @@ -37,6 +38,7 @@ "moleculer": "^0.14.35" }, "devDependencies": { - "@types/rdfjs__data-model": "^2.0.9" + "@types/rdfjs__data-model": "^2.0.9", + "@types/ws": "^8.18.1" } } diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 141015c4f..5d27e4ebd 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -21,7 +21,7 @@ const SolidNotificationsListenerSchema = { // DbService settings idField: '@id' }, - dependencies: ['api', 'app', 'ontologies'], + dependencies: ['api', 'ontologies'], async started() { if (!this.settings.baseUrl) throw new Error(`The baseUrl setting is required`); @@ -55,8 +55,7 @@ const SolidNotificationsListenerSchema = { register: { async handler(ctx) { const { resourceUri, actionName } = ctx.params; - - const appActor: any = await ctx.call('app.get'); + const webId = ctx.params.webId || ctx.meta.webId; // Check if a listener already exist const existingListener = this.listeners.find( @@ -68,7 +67,7 @@ const SolidNotificationsListenerSchema = { // Check if channel still exist. If not, it will throw an error. await ctx.call('ldp.remote.get', { resourceUri: existingListener.channelUri, - webId: appActor.id, + webId, strategy: 'networkOnly' }); @@ -138,7 +137,7 @@ const SolidNotificationsListenerSchema = { 'notify:topic': resourceUri, 'notify:sendTo': webhookUrl }), - actorUri: appActor.id + actorUri: webId }); // Keep track of the channel URI, to be able to check if it still exists diff --git a/src/middleware/packages/solid/types.ts b/src/middleware/packages/solid/types.ts index 1407ab961..4c985a07a 100644 --- a/src/middleware/packages/solid/types.ts +++ b/src/middleware/packages/solid/types.ts @@ -1,3 +1,7 @@ +import { WebSocketServer, WebSocket, ErrorEvent, Data } from 'ws'; +import { IncomingRequest } from 'moleculer-web'; +import { ServerResponse } from 'http'; + export interface TypeRegistration { types: string[]; uri: string; @@ -12,3 +16,22 @@ export interface NotificationChannel { receiveFrom: string; webId: string; } + +export interface WebSocketConnection { + server: WebSocketServer; + request: IncomingRequest; + response: ServerResponse; + requestUrl: string; + baseUrl: string; + parsedUrl: string; + params: Record; + webSocket: WebSocket; + send: WebSocket['send']; +} + +export interface WebSocketHandlers { + onConnection: (connection: Connection) => void; + onClose: (event: CloseEvent, connection: Connection) => void; + onMessage: (message: Data, connection: Connection) => void; + onError: (event: ErrorEvent, connection: Connection) => void; +} diff --git a/src/middleware/tests/activitypub/initialize.ts b/src/middleware/tests/activitypub/initialize.ts index c11470f95..4d8f0ff53 100644 --- a/src/middleware/tests/activitypub/initialize.ts +++ b/src/middleware/tests/activitypub/initialize.ts @@ -62,10 +62,6 @@ const initialize = async (number: number) => { api: { port } - // webid: { - // path: '/as/actor', - // types: Object.values(FULL_ACTOR_TYPES) - // } } }); diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index 6998b81a4..264ce21be 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -38,7 +38,8 @@ "node-fetch": "^2.6.6", "supertest": "^4.0.2", "url-join": "^4.0.1", - "wait-for-expect": "^4.0.0" + "wait-for-expect": "^4.0.0", + "ws": "^8.17.0" }, "devDependencies": { "@babel/core": "^7.28.0", @@ -48,6 +49,7 @@ "@jest/globals": "^30.0.5", "@types/ioredis": "^4.27.0", "@types/jest": "^30.0.0", + "@types/ws": "^8.18.1", "babel-jest": "^30.0.5", "babel-plugin-transform-import-meta": "^2.3.3", "babel-preset-vite": "^1.1.3" diff --git a/src/middleware/tests/solid/initialize.ts b/src/middleware/tests/solid/initialize.ts new file mode 100644 index 000000000..0ec2e473e --- /dev/null +++ b/src/middleware/tests/solid/initialize.ts @@ -0,0 +1,165 @@ +import path from 'path'; +import { ServiceBroker } from 'moleculer'; +import ApiGatewayService from 'moleculer-web'; +import { CoreService } from '@semapps/core'; +import { as, pair, petr, semapps, solid, vcard } from '@semapps/ontologies'; +import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { + NotificationsProviderService, + NotificationsListenerService, + EndpointService, + WebSocketMixin +} from '@semapps/solid'; +import { AuthLocalService } from '@semapps/auth'; +import { TripleStoreAdapter } from '@semapps/triplestore'; +import { ProxyService, SignatureService } from '@semapps/crypto'; +import { fileURLToPath } from 'url'; +import * as CONFIG from '../config.ts'; +import { listDatasets, dropDataset, clearQueue } from '../utils.ts'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const initialize = async (allowSlugs = true): Promise => { + const datasets: string[] = await listDatasets(); + for (let dataset of datasets) { + await dropDataset(dataset); + } + + const queueServiceUrl = 'redis://localhost:6379/0'; + + await clearQueue(queueServiceUrl); + + const broker = new ServiceBroker({ + // @ts-expect-error TS(2322): Type '{ name: string; created(broker: any): void; ... Remove this comment to see the full error message + middlewares: [CacherMiddleware(CONFIG.ACTIVATE_CACHE), WebAclMiddleware({ baseUrl: CONFIG.HOME_URL })], + logger: { + type: 'Console', + options: { + level: 'warn' + } + } + }); + + broker.createService({ + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message + mixins: [CoreService], + settings: { + baseUrl: CONFIG.HOME_URL, + baseDir: path.resolve(__dirname, '..'), + triplestore: { + url: CONFIG.SPARQL_ENDPOINT, + user: CONFIG.JENA_USER, + password: CONFIG.JENA_PASSWORD, + secure: false // TODO Remove when we move to Fuseki 5 + }, + containers: [ + { + name: 'events', + types: ['Event'] + }, + { + name: 'notes', + types: ['Note'] + } + ], + ontologies: [as, pair, petr, solid, vcard, semapps], + activitypub: true, + api: false, // We create manually the service below so that we can include the WebSocketMixin + webfinger: false, + webid: false, + ldp: { + allowSlugs + } + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message + broker.createService({ + mixins: [ApiGatewayService, WebSocketMixin], + settings: { + baseUrl: CONFIG.HOME_URL, + port: 3000 + }, + methods: { + authenticate(ctx, route, req, res) { + if (req.headers.signature) { + return ctx.call('signature.authenticate', { route, req, res }); + } + if (req.headers.authorization) { + return ctx.call('auth.authenticate', { route, req, res }); + } + ctx.meta.webId = 'anon'; + return Promise.resolve(null); + }, + authorize(ctx, route, req, res) { + if (req.headers.signature) { + return ctx.call('signature.authorize', { route, req, res }); + } + if (req.headers.authorization) { + return ctx.call('auth.authorize', { route, req, res }); + } + ctx.meta.webId = 'anon'; + return Promise.reject(new E.UnAuthorizedError(E.ERR_NO_TOKEN)); + }, + // Overwrite optimization method to put catchAll routes at the end + // See https://github.com/moleculerjs/moleculer-web/issues/335 + optimizeRouteOrder() { + this.routes.sort((a: any) => (a.opts.catchAll ? 1 : -1)); + this.aliases.sort((a: any) => (a.route.opts.catchAll ? 1 : -1)); + } + } + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message + broker.createService({ + mixins: [ProxyService] + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message + broker.createService({ + mixins: [SignatureService] + }); + + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "auth"; mixins... Remove this comment to see the full error message + broker.createService({ + mixins: [AuthLocalService], + settings: { + baseUrl: CONFIG.HOME_URL, + podProvider: true, + jwtPath: path.resolve(__dirname, '../jwt'), + accountsDataset: CONFIG.SETTINGS_DATASET + } + }); + + // @ts-expect-error TS(2322): Type '{ name: "solid-notifications.provider"; sett... Remove this comment to see the full error message + broker.createService({ + mixins: [NotificationsProviderService], + settings: { + baseUrl: CONFIG.HOME_URL, + settingsDataset: CONFIG.SETTINGS_DATASET, + queueServiceUrl + } + }); + + // @ts-expect-error TS(2322): Type '{ name: "solid-notifications.provider"; sett... Remove this comment to see the full error message + broker.createService({ + mixins: [NotificationsListenerService], + adapter: new TripleStoreAdapter({ type: 'WebhookChannelListener', dataset: CONFIG.SETTINGS_DATASET }), + settings: { + baseUrl: CONFIG.HOME_URL + } + }); + + // @ts-expect-error TS(2322): Type '{ name: "solid-endpoint"; mixins: { settings... Remove this comment to see the full error message + broker.createService({ + mixins: [EndpointService], + settings: { + baseUrl: CONFIG.HOME_URL, + settingsDataset: CONFIG.SETTINGS_DATASET + } + }); + + return broker; +}; + +export default initialize; diff --git a/src/middleware/tests/solid/type-index.test.ts b/src/middleware/tests/solid/type-index.test.ts new file mode 100644 index 000000000..c42b7a9c8 --- /dev/null +++ b/src/middleware/tests/solid/type-index.test.ts @@ -0,0 +1,63 @@ +import waitForExpect from 'wait-for-expect'; +import { ServiceBroker } from 'moleculer'; +import initialize from './initialize.ts'; +import { createAccount } from '../utils.ts'; + +jest.setTimeout(80000); + +describe.each([true])('TypeIndex tests with allowSlugs: %s', (allowSlugs: boolean) => { + let broker: ServiceBroker; + let alice: any; + + beforeAll(async () => { + broker = await initialize(allowSlugs); + await broker.start(); + alice = await createAccount(broker, 'alice'); + }, 80000); + + afterAll(async () => { + await broker.stop(); + }); + + test('Public TypeIndex has been created', async () => { + expect(alice['solid:publicTypeIndex']).not.toBeNull(); + + // TypeRegistrations take time to be populated + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + const typeIndex = await alice.call('public-type-index.get'); + + expect(typeIndex['@graph']).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + 'solid:forClass': 'foaf:Agent', + 'solid:instance': alice.webId + }), + expect.objectContaining({ + 'solid:forClass': expect.arrayContaining(['solid:TypeIndex', 'solid:ListedDocument']), + 'solid:instance': expect.anything() + }) + ]) + ); + }); + }); + + test('Private TypeIndex has been created', async () => { + // expect(alice['solid:publicTypeIndex']).not.toBeNull(); + + // TypeRegistrations take time to be populated + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + const typeIndex = await alice.call('private-type-index.get'); + + expect(typeIndex['@graph']).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + 'solid:forClass': expect.arrayContaining(['solid:TypeIndex', 'solid:UnlistedDocument']), + 'solid:instance': expect.anything() + }) + ]) + ); + }); + }); +}); diff --git a/src/middleware/tests/solid/webhook-channels.test.ts b/src/middleware/tests/solid/webhook-channels.test.ts new file mode 100644 index 000000000..5510893b5 --- /dev/null +++ b/src/middleware/tests/solid/webhook-channels.test.ts @@ -0,0 +1,207 @@ +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import waitForExpect from 'wait-for-expect'; +import { ServiceBroker } from 'moleculer'; +import { parseHeader, negotiateContentType, parseRawBody, parseJson } from '@semapps/middlewares'; +import { delay } from '@semapps/ldp'; +import { createAccount, fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; + +jest.setTimeout(110_000); + +const fakeWebhookUri = urlJoin('http://localhost:3000', '.fake-webhook'); + +const mockWebhookAction = jest.fn(() => Promise.resolve()); +const mockWebhookAction2 = jest.fn(() => Promise.resolve()); + +describe('Test app installation', () => { + let broker: ServiceBroker; + let alice: any; + let bob: any; + let webhookChannelSubscriptionUrl: string; + let webhookChannelUri: string; + + beforeAll(async () => { + broker = await initialize(true); + broker.createService({ + name: 'fake-service', + dependencies: ['api'], + async started() { + await this.broker.call('api.addRoute', { + route: { + path: '/.fake-webhook', + authorization: false, + authentication: false, + aliases: { + 'POST /': [parseHeader, negotiateContentType, parseRawBody, parseJson, 'fake-service.webhook'] + }, + bodyParsers: false + } + }); + }, + actions: { webhook: mockWebhookAction, webhook2: mockWebhookAction2 } + }); + await broker.start(); + + alice = await createAccount(broker, 'alice'); + bob = await createAccount(broker, 'bob'); + }, 110_000); + + afterAll(async () => { + broker.stop(); + }); + + test('Webhook channel is available', async () => { + const { json: storage } = await fetchServer(urlJoin('http://localhost:3000', '.well-known/solid')); + + expect(storage.type).toBe('pim:Storage'); + expect(storage['notify:subscription']).toHaveLength(2); + + webhookChannelSubscriptionUrl = storage['notify:subscription'].find((uri: any) => + uri.includes('/WebhookChannel2023') + ); + + const { json: webhookChannelSubscription } = await fetchServer(webhookChannelSubscriptionUrl); + + expect(webhookChannelSubscription).toMatchObject({ + 'notify:channelType': 'notify:WebhookChannel2023', + 'notify:feature': ['notify:endAt', 'notify:rate', 'notify:startAt', 'notify:state'] + }); + }); + + test('Cannot create webhook channel without read rights', async () => { + const privateTypeIndexUri = await alice.call('private-type-index.getUri'); + + const { status } = await fetchServer(webhookChannelSubscriptionUrl, { + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: { + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebhookChannel2023', + 'notify:topic': privateTypeIndexUri, + 'notify:sendTo': fakeWebhookUri + } + }); + + expect(status).toBe(403); + }); + + test('Cannot create webhook channel for nonexisting resources', async () => { + const { status } = await fetchServer(webhookChannelSubscriptionUrl, { + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: { + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebhookChannel2023', + 'notify:topic': `${alice.webId}-unexisting`, + 'notify:sendTo': fakeWebhookUri + } + }); + + expect(status).toBe(400); + }); + + test('Create webhook channel', async () => { + const { body } = await bob.call('signature.proxy.query', { + url: webhookChannelSubscriptionUrl, + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: JSON.stringify({ + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebhookChannel2023', + 'notify:topic': alice.outbox, + 'notify:sendTo': fakeWebhookUri + }), + actorUri: bob.webId + }); + + webhookChannelUri = body.id; + + const webhookChannelContainer = await alice.call('solid-notifications.provider.webhook.getContainerUri', { + webId: alice.webId + }); + await expect( + alice.call('ldp.container.includes', { + containerUri: webhookChannelContainer, + resourceUri: webhookChannelUri + }) + ).resolves.toBeTruthy(); + + expect(body).toMatchObject({ + type: 'notify:WebhookChannel2023', + 'notify:topic': alice.outbox, + 'notify:sendTo': fakeWebhookUri + }); + }); + + test('Listen to Alice outbox', async () => { + const activity = await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, + type: 'Event', + content: 'Birthday party !' + }); + + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + expect(mockWebhookAction).toHaveBeenCalledTimes(1); + }, 10000); + + expect(mockWebhookAction.mock.calls[0][0].params).toMatchObject({ + '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], + type: 'Add', + object: activity.id || activity['@id'], + target: alice.outbox + }); + }); + + test('Delete webhook channel', async () => { + const response = await bob.call('signature.proxy.query', { + url: webhookChannelUri, + method: 'DELETE', + actorUri: bob.webId + }); + + expect(response.status).toBe(204); + + await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, + type: 'Event', + content: 'Birthday party 2 !' + }); + + await delay(5000); + + expect(mockWebhookAction).not.toHaveBeenCalledTimes(2); + }); + + test('Listen to Alice outbox through listener', async () => { + await bob.call('solid-notifications.listener.register', { + resourceUri: alice.outbox, + actionName: 'fake-service.webhook2' + }); + + const activity = await alice.call('activitypub.outbox.post', { + collectionUri: alice.outbox, + type: 'Event', + content: 'Birthday party 3 !' + }); + + // @ts-expect-error This expression is not callable + await waitForExpect(async () => { + expect(mockWebhookAction2).toHaveBeenCalledTimes(1); + }, 10_000); + + expect(mockWebhookAction2.mock.calls[0][0].params).toMatchObject({ + '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], + type: 'Add', + object: activity.id || activity['@id'], + target: alice.outbox + }); + }); +}); diff --git a/src/middleware/tests/solid/websocket-channels.test.ts b/src/middleware/tests/solid/websocket-channels.test.ts new file mode 100644 index 000000000..c1a98b372 --- /dev/null +++ b/src/middleware/tests/solid/websocket-channels.test.ts @@ -0,0 +1,359 @@ +import urlJoin from 'url-join'; +import fetch from 'node-fetch'; +import waitForExpect from 'wait-for-expect'; +import WebSocket from 'ws'; +import { ServiceBroker } from 'moleculer'; +import rdf from '@rdfjs/data-model'; +import { delay } from '@semapps/ldp'; +import { createAccount, fetchServer } from '../utils.ts'; +import initialize from './initialize.ts'; + +jest.setTimeout(110_000); + +const POD_SERVER_BASE_URL = 'http://localhost:3000'; + +describe('Websocket channel', () => { + let broker: ServiceBroker; + let alice: any; + let bob: any; + let webSocketChannelSubscriptionUrl: string; + + beforeAll(async () => { + broker = await initialize(true); + await broker.start(); + + alice = await createAccount(broker, 'alice'); + bob = await createAccount(broker, 'bob'); + }, 110_000); + + afterAll(async () => { + broker.stop(); + }); + + test('Websocket channel subscription is available', async () => { + const { json: storage } = await fetchServer(urlJoin(POD_SERVER_BASE_URL, '.well-known/solid')); + + expect(storage.type).toBe('pim:Storage'); + expect(storage['notify:subscription']).toHaveLength(2); + + webSocketChannelSubscriptionUrl = storage['notify:subscription'].find((uri: any) => + uri.includes('/WebSocketChannel2023') + ); + + const { json: webSocketChannelSubscription } = await fetchServer(webSocketChannelSubscriptionUrl); + + expect(webSocketChannelSubscription).toMatchObject({ + 'notify:channelType': 'notify:WebSocketChannel2023', + 'notify:feature': ['notify:endAt', 'notify:rate', 'notify:startAt', 'notify:state'] + }); + }); + + test('Cannot create web socket channel without read rights', async () => { + const privateTypeIndexUri = await alice.call('private-type-index.getUri'); + + const { status } = await fetchServer(webSocketChannelSubscriptionUrl, { + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: { + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebSocketChannel2023', + 'notify:topic': privateTypeIndexUri + } + }); + + expect(status).toBe(403); + }); + + test('Cannot create web socket channel for non-existing resources', async () => { + const { status } = await fetchServer(webSocketChannelSubscriptionUrl, { + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: { + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebSocketChannel2023', + 'notify:topic': `${alice.webId}-unexisting` + } + }); + + expect(status).toBe(400); + }); + + describe('Collection and resource subscription', () => { + let containerUri: string; + // let collectionUri: string; + let noteUri: string; + let collectionWebSocket: any; + let itemWebSocket: any; + let webSocketCollectionChannelUri: string; + let webSocketItemChannelUri: string; + let collectionActivities: any = []; + let itemActivities: any = []; + + beforeAll(async () => { + await alice.call('webacl.resource.addRights', { + resourceUri: alice.liked, + additionalRights: { + anon: { + uri: bob.webId, + read: true + } + }, + webId: 'system' + }); + + containerUri = await alice.getContainerUri('as:Note'); + + noteUri = await alice.call('ldp.container.post', { + containerUri, + resource: { + '@context': 'https://www.w3.org/ns/activitystreams', + '@type': 'Note', + name: `A new collection note`, + content: `The note content.` + } + }); + + await alice.call('webacl.resource.addRights', { + webId: 'system', + resourceUri: noteUri, + additionalRights: { + anon: { + uri: bob.webId, + read: true, + write: true, + append: true, + control: true + } + } + }); + }); + + test('Create web socket channels', async () => { + // Create channel for listing to collection changes. + + const { body: collectionChannelBody } = await bob.call('signature.proxy.query', { + url: webSocketChannelSubscriptionUrl, + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: JSON.stringify({ + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebSocketChannel2023', + 'notify:topic': alice.liked + }), + actorUri: bob.webId + }); + expect(collectionChannelBody.id).toBeTruthy(); + webSocketCollectionChannelUri = collectionChannelBody.id; + + collectionWebSocket = new WebSocket(collectionChannelBody['notify:receiveFrom']); + collectionWebSocket.addEventListener('message', (e: any) => { + collectionActivities.push(JSON.parse(e.data)); + }); + + const { body: itemChannelBody } = await bob.call('signature.proxy.query', { + url: webSocketChannelSubscriptionUrl, + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: JSON.stringify({ + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebSocketChannel2023', + 'notify:topic': noteUri + }), + actorUri: bob.webId + }); + expect(itemChannelBody.id).toBeTruthy(); + webSocketItemChannelUri = itemChannelBody.id; + + itemWebSocket = new WebSocket(itemChannelBody['notify:receiveFrom']); + itemWebSocket.addEventListener('message', (e: any) => { + itemActivities.push(JSON.parse(e.data)); + }); + }); + + test('Add', async () => { + await alice.call('activitypub.collection.add', { + collectionUri: alice.liked, + item: noteUri + }); + + // @ts-expect-error This expression is not callable + await waitForExpect(() => { + expect(collectionActivities[collectionActivities.length - 1]).toMatchObject({ + '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], + type: 'Add', + object: noteUri, + target: alice.liked + }); + }, 10_000); + }); + + test('Patch', async () => { + await alice.call('ldp.resource.patch', { + resourceUri: noteUri, + triplesToAdd: [ + rdf.quad( + rdf.namedNode(noteUri), + rdf.namedNode('https://www.w3.org/ns/activitystreams#tag'), + rdf.literal('My tag') + ) + ] + }); + + // @ts-expect-error This expression is not callable + await waitForExpect(() => { + expect(itemActivities[itemActivities.length - 1]).toMatchObject({ + type: 'Update', + object: noteUri + }); + }); + }); + + test('Delete', async () => { + await alice.call('ldp.resource.delete', { + resourceUri: noteUri, + webId: 'system' + }); + + // @ts-expect-error This expression is not callable + await waitForExpect(() => { + expect(itemActivities[itemActivities.length - 1]).toMatchObject({ + type: 'Delete', + object: noteUri + }); + }); + + // Item is replaced by tombstone, and not removed. + // @ts-expect-error This expression is not callable + await waitForExpect(() => { + expect(collectionActivities[collectionActivities.length - 1]).not.toMatchObject({ + type: 'Remove', + object: noteUri, + target: alice.liked + }); + }); + + await alice.call('activitypub.collection.remove', { collectionUri: alice.liked, itemUri: noteUri }); + + // Now the tombstone should be gone. + // @ts-expect-error This expression is not callable + await waitForExpect(() => { + expect(collectionActivities[collectionActivities.length - 1]).toMatchObject({ + type: 'Remove', + object: noteUri, + target: alice.liked + }); + }); + }); + + test('Delete web socket channels', async () => { + const responseDelCollection = await bob.call('signature.proxy.query', { + url: webSocketCollectionChannelUri, + method: 'DELETE', + actorUri: bob.webId + }); + const responseDelItem = await bob.call('signature.proxy.query', { + url: webSocketItemChannelUri, + method: 'DELETE', + actorUri: bob.webId + }); + expect(responseDelCollection.status).toBe(204); + expect(responseDelItem.status).toBe(204); + await delay(3_000); + expect(collectionWebSocket.readyState).toBe(WebSocket.CLOSED); + expect(itemWebSocket.readyState).toBe(WebSocket.CLOSED); + }); + }); + + describe('Container subscription', () => { + let containerUri: string; + let resourceUri: string; + let containerWebSocket: any; + const containerActivities: any = []; + + beforeAll(async () => { + containerUri = await alice.getContainerUri('as:Note'); + + await alice.call('webacl.resource.addRights', { + webId: 'system', + resourceUri: containerUri, + additionalRights: { + anon: { + uri: bob.webId, + read: true, + write: true, + append: true, + control: true + } + } + }); + }); + + test('Create web socket channel', async () => { + const { body } = await bob.call('signature.proxy.query', { + url: webSocketChannelSubscriptionUrl, + method: 'POST', + headers: new fetch.Headers({ 'Content-Type': 'application/ld+json' }), + body: JSON.stringify({ + '@context': { + notify: 'http://www.w3.org/ns/solid/notifications#' + }, + '@type': 'notify:WebSocketChannel2023', + 'notify:topic': containerUri + }), + actorUri: bob.webId + }); + expect(body.id).toBeTruthy(); + + containerWebSocket = new WebSocket(body['notify:receiveFrom']); + containerWebSocket.addEventListener('message', (e: any) => { + containerActivities.push(JSON.parse(e.data)); + }); + }); + + test('Add', async () => { + resourceUri = await alice.call('ldp.container.post', { + containerUri, + resource: { + '@context': 'https://www.w3.org/ns/activitystreams', + '@type': 'Object', + name: `Some object resource`, + content: `I'm a resource with type as:Object.` + } + }); + + // @ts-expect-error This expression is not callable + await waitForExpect(() => { + expect(containerActivities[containerActivities.length - 1]).toMatchObject({ + '@context': ['https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/solid/notifications-context/v1'], + type: 'Add', + object: resourceUri, + target: containerUri + }); + }); + }); + + test('Delete', async () => { + await alice.call('ldp.resource.delete', { + resourceUri: resourceUri, + webId: 'system' + }); + + // @ts-expect-error This expression is not callable + await waitForExpect(() => { + expect(containerActivities[containerActivities.length - 1]).toMatchObject({ + type: 'Remove', + object: resourceUri, + target: containerUri + }); + }); + }); + }); +}); diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 840d8cee8..a30fb0b0e 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -4,6 +4,7 @@ import Redis from 'ioredis'; import { ActionParamSchema, CallingOptions, ServiceBroker, ServiceSchema } from 'moleculer'; import { Account } from '@semapps/auth'; import * as CONFIG from './config.ts'; +import { delay } from '@semapps/ldp'; type FetchOptions = Omit & { body?: ArrayBuffer | ArrayBufferView | ReadableStream | string | URLSearchParams | FormData | object; @@ -114,10 +115,19 @@ export const createAccount = async (broker: ServiceBroker, username: string) => return fetchServer(url, { ...options, headers }); }; + const getContainerUri = async (type: string) => { + let containerUri: string; + do { + containerUri = (await callAsUser('ldp.registry.getUri', { type, isContainer: true })) as string; + if (!containerUri) await delay(500); + } while (!containerUri); + return containerUri; + }; + // Ensure keys are created and attached to the WebID (this is a side-effect of the auth.account.created event) // If we don't do that, tests may be stopped before the keys are created and this may generate errors // Note: See if we can avoid this because it increases some of the tests time by 30-50% - await callAsUser('webid.awaitCreateComplete'); + const userData: any = await callAsUser('webid.awaitCreateComplete'); let returnValues = { webId, @@ -125,7 +135,9 @@ export const createAccount = async (broker: ServiceBroker, username: string) => baseUrl, username, call: callAsUser, - fetch: fetchAsUser + fetch: fetchAsUser, + getContainerUri, + ...userData }; // Add more resources if ActivityPub services is enabled diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 9f19c7dcb..f48703455 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -2579,6 +2579,13 @@ resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.3.tgz#09ede6753b846a274301b9bd3a6ed117050daecd" integrity sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww== +"@types/ws@^8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -11776,6 +11783,11 @@ write-pkg@4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" +ws@^8.17.0: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + xmldom@0.1.19: version "0.1.19" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" From da1c39cff41a8f9ba15ad5ee9380ef276809f0b5 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 2 Dec 2025 14:51:37 +0100 Subject: [PATCH 126/165] Small fixes --- src/middleware/packages/ldp/package.json | 8 ++++++++ .../packages/ldp/services/api/actions/post.ts | 2 -- .../services/container/actions/includes.ts | 1 - .../resource/actions/awaitCreateComplete.ts | 1 - .../ldp/services/resource/actions/upload.ts | 4 ++-- .../packages/triplestore/package.json | 4 ++++ .../triplestore/subservices/named-graph.ts | 1 - .../tests/activitypub/collection-api.test.ts | 2 +- .../tests/activitypub/collection.test.ts | 2 +- src/middleware/tests/ldp/api.test.ts | 7 +------ src/middleware/tests/ldp/container.test.ts | 6 +----- .../tests/ldp/content-negotiation.test.ts | 7 +------ .../tests/ldp/controlled-container.test.ts | 2 +- src/middleware/tests/ldp/headers.test.ts | 13 ++---------- src/middleware/tests/ldp/resource.test.ts | 9 ++------- src/middleware/tests/webacl/resource.test.ts | 7 +------ .../tests/webacl/resourceCRUD.test.ts | 7 +------ src/middleware/tests/webacl/utils.test.ts | 9 +-------- src/middleware/yarn.lock | 20 +++++++++++++++++++ 19 files changed, 47 insertions(+), 65 deletions(-) diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index 2cb5790e0..7b8140efd 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -25,6 +25,7 @@ "rdf-parse": "^1.7.0", "sharp": "^0.31.2", "sparqljs": "^3.5.2", + "sparqljson-parse": "^1.5.1", "speakingurl": "^14.0.1", "streamify-string": "^1.0.1", "url-join": "^4.0.1", @@ -42,5 +43,12 @@ "main": "./index.ts", "peerDependencies": { "moleculer": "^0.14.35" + }, + "devDependencies": { + "@types/bytes": "^3.1.2", + "@types/mime-types": "^2.1.4", + "@types/uuid": "^9.0.1", + "@types/rdfjs__data-model": "^2.0.9", + "@rdfjs/types": "2.0.1" } } diff --git a/src/middleware/packages/ldp/services/api/actions/post.ts b/src/middleware/packages/ldp/services/api/actions/post.ts index cadff3e25..1ac455714 100644 --- a/src/middleware/packages/ldp/services/api/actions/post.ts +++ b/src/middleware/packages/ldp/services/api/actions/post.ts @@ -1,7 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; -// @ts-expect-error TS(7016): Could not find a declaration file for module 'mime... Remove this comment to see the full error message import mime from 'mime-types'; import { Errors } from 'moleculer'; import { getDatasetFromUri } from '../../../utils.ts'; diff --git a/src/middleware/packages/ldp/services/container/actions/includes.ts b/src/middleware/packages/ldp/services/container/actions/includes.ts index 4798aaef6..a97db9b0d 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.ts +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -11,7 +11,6 @@ const Schema = { } }, async handler(ctx) { - // @ts-expect-error TS(2339): Property 'webId' does not exist on type '{}'. const webId = ctx.params.webId || ctx.meta.webId || 'anon'; const containerUri = ctx.params.containerUri.replace(/\/+$/, ''); const resourceUri = ctx.params.resourceUri.replace(/\/+$/, ''); diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index fddbc5e80..c1362915b 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -14,7 +14,6 @@ const Schema = { webId: { type: 'string', optional: true }, jsonContext: { type: 'multi', - // @ts-expect-error TS(2322): Type '{ type: "array"; }' is not assignable to typ... Remove this comment to see the full error message rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true }, diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index 808f7aa4d..be147a292 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -5,7 +5,7 @@ import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; -const Schema = { +const UploadAction = { visibility: 'public', params: { resourceUri: 'string', @@ -48,4 +48,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default UploadAction; diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 5d781c440..0618b5fa6 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -25,6 +25,10 @@ "peerDependencies": { "moleculer": "^0.14.35" }, + "devDependencies": { + "@types/speakingurl": "^13.0.6", + "@types/uuid": "^9.0.1" + }, "gitHead": "06cb2decdab424e8686a5d77cc3364fbf1912439", "engines": { "node": ">=22.10.0" diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index bc6b9a842..a4c9769f6 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -1,4 +1,3 @@ -// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import createSlug from 'speakingurl'; import urlJoin from 'url-join'; diff --git a/src/middleware/tests/activitypub/collection-api.test.ts b/src/middleware/tests/activitypub/collection-api.test.ts index 91ebc99c2..f6fbc84c6 100644 --- a/src/middleware/tests/activitypub/collection-api.test.ts +++ b/src/middleware/tests/activitypub/collection-api.test.ts @@ -26,7 +26,7 @@ describe('Collections API', () => { let localContext: any; test('Create resources', async () => { - const notesContainerUri = await alice.call('ldp.registry.getUri', { type: 'as:Note', isContainer: true }); + const notesContainerUri = await alice.getContainerUri('as:Note'); for (let i = 0; i < 10; i++) { items.push( diff --git a/src/middleware/tests/activitypub/collection.test.ts b/src/middleware/tests/activitypub/collection.test.ts index 1718835c8..acc71d107 100644 --- a/src/middleware/tests/activitypub/collection.test.ts +++ b/src/middleware/tests/activitypub/collection.test.ts @@ -28,7 +28,7 @@ describe('Collections', () => { let cursorBasedCollectionUri: string; beforeAll(async () => { - containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Note', isContainer: true }); + containerUri = await alice.getContainerUri('as:Note'); // Create test items for (let i = 0; i < 10; i++) { diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index f9d73215b..dbb1e1607 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -1,5 +1,4 @@ import fetch from 'node-fetch'; -import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; import { createAccount, fetchServer } from '../utils.ts'; import initialize from './initialize.ts'; @@ -23,11 +22,7 @@ describe('LDP handling through API', () => { let resourceUri: any; test('Create resource', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri('pair:Project'); const { headers } = await fetchServer(containerUri, { method: 'POST', diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index 29b0626cf..d9ce913bd 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -23,11 +23,7 @@ describe('LDP container tests', () => { let containerUri: string; test('Ensure container created in LdpService settings exists', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri('pair:Project'); await expect(alice.call('ldp.container.exist', { containerUri })).resolves.toBe(true); }); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index c913879f8..270429e1d 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -1,5 +1,4 @@ import fetch from 'node-fetch'; -import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; import { MIME_TYPES } from '@semapps/mime-types'; import { fetchServer, createAccount } from '../utils.ts'; @@ -27,11 +26,7 @@ describe('Content negotiation', () => { let project4Uri: string; test('Post resource in JSON-LD', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri('pair:Project'); const { headers } = await fetchServer(containerUri, { method: 'POST', diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 810db89a8..39e6d2cab 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -82,7 +82,7 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al ); } - containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Video' }); + containerUri = await alice.getContainerUri('as:Video'); expect(containerUri).not.toBeUndefined(); await expect(alice.call('ldp.container.exist', { containerUri })).resolves.toBe(true); diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index cef5ef97d..e9b974b14 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -1,7 +1,6 @@ import urlJoin from 'url-join'; import { parse as parseLinkHeader } from 'http-link-header'; import { ServiceBroker } from 'moleculer'; -import waitForExpect from 'wait-for-expect'; import { ControlledContainerMixin } from '@semapps/ldp'; import { fetchServer, createAccount } from '../utils.ts'; import initialize from './initialize.ts'; @@ -54,11 +53,7 @@ describe('Headers handling of LDP server', () => { let eventsContainerUri: string; test('Get headers', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - placesContainerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Place', isContainer: true }); - expect(placesContainerUri).not.toBeUndefined(); - }); + placesContainerUri = await alice.getContainerUri('pair:Place'); const { headers: postHeaders } = await fetchServer(placesContainerUri, { method: 'POST', @@ -86,11 +81,7 @@ describe('Headers handling of LDP server', () => { }); test('Get container-specific headers', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - eventsContainerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Event', isContainer: true }); - expect(eventsContainerUri).not.toBeUndefined(); - }); + eventsContainerUri = await alice.getContainerUri('pair:Event'); const { headers: postHeaders } = await fetchServer(eventsContainerUri, { method: 'POST', diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index 1c16a0271..ca3c30c40 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,5 +1,4 @@ import rdf from '@rdfjs/data-model'; -import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; import { createAccount } from '../utils.ts'; @@ -25,11 +24,7 @@ describe('Resource CRUD operations', () => { let project1Uri: string; test('Post resource in container', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - containerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Project', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri('pair:Project'); project1Uri = await alice.call('ldp.container.post', { containerUri, @@ -484,7 +479,7 @@ describe('Resource CRUD operations', () => { // Ensure dereferenced resources with IDs are not deleted by PUT test('PUT resource with ID', async () => { - const themeContainerUri = await alice.call('ldp.registry.getUri', { type: 'pair:Theme', isContainer: true }); + const themeContainerUri = await alice.getContainerUri('pair:Theme'); const themeUri = await alice.call('ldp.container.post', { containerUri: themeContainerUri, diff --git a/src/middleware/tests/webacl/resource.test.ts b/src/middleware/tests/webacl/resource.test.ts index d4b933826..f8b391470 100644 --- a/src/middleware/tests/webacl/resource.test.ts +++ b/src/middleware/tests/webacl/resource.test.ts @@ -25,12 +25,7 @@ describe('Permissions check on a specific resource', () => { let resourceUri: string; test('Get/patch/put/delete resource without permission', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - // Container with no default permissions - containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Video', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri('as:Video'); // When posting as system, no permissions are given on the resource resourceUri = await alice.call('ldp.container.post', { diff --git a/src/middleware/tests/webacl/resourceCRUD.test.ts b/src/middleware/tests/webacl/resourceCRUD.test.ts index f5eb1584a..b06f8bd4b 100644 --- a/src/middleware/tests/webacl/resourceCRUD.test.ts +++ b/src/middleware/tests/webacl/resourceCRUD.test.ts @@ -1,7 +1,6 @@ import urlJoin from 'url-join'; import { getSlugFromUri } from '@semapps/ldp'; import { ServiceBroker } from 'moleculer'; -import waitForExpect from 'wait-for-expect'; import { fetchServer, createAccount } from '../utils.ts'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; @@ -25,11 +24,7 @@ describe('middleware CRUD resource with perms', () => { let resourceUri: string; test('A call to ldp.container.post fails if anonymous user, because container access denied', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Article', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri('as:Article'); await expect( alice.call('ldp.container.post', { diff --git a/src/middleware/tests/webacl/utils.test.ts b/src/middleware/tests/webacl/utils.test.ts index b81b57c4a..ea904eabd 100644 --- a/src/middleware/tests/webacl/utils.test.ts +++ b/src/middleware/tests/webacl/utils.test.ts @@ -1,6 +1,4 @@ -import waitForExpect from 'wait-for-expect'; import { ServiceBroker } from 'moleculer'; -import { getAclUriFromResourceUri } from '@semapps/webacl'; import initialize from './initialize.ts'; import { createAccount } from '../utils.ts'; @@ -26,12 +24,7 @@ describe('Test various actions of the webacl.resource service', () => { let resourceUri: string; test('Bob see his rights correctly', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - // Container with no default permissions - containerUri = await alice.call('ldp.registry.getUri', { type: 'as:Video', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri('as:Video'); resourceUri = await alice.call('ldp.container.post', { containerUri, diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index f48703455..590136d03 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -2385,6 +2385,11 @@ dependencies: "@babel/types" "^7.28.2" +"@types/bytes@^3.1.2": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@types/bytes/-/bytes-3.1.5.tgz#22fb92839f37bd5490e0dcd411999bb1c16ddaa0" + integrity sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ== + "@types/cacheable-request@^6.0.1": version "6.0.3" resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" @@ -2473,6 +2478,11 @@ resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.7.1.tgz#ef51b960ff86801e4e2de80c68813a96e529d531" integrity sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg== +"@types/mime-types@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.4.tgz#93a1933e24fed4fb9e4adc5963a63efcbb3317a2" + integrity sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w== + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" @@ -2562,6 +2572,11 @@ dependencies: "@rdfjs/types" ">=1.0.0" +"@types/speakingurl@^13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@types/speakingurl/-/speakingurl-13.0.6.tgz#fb64d905bb802e89facca641ed4ff5ed13854c88" + integrity sha512-ywkRHNHBwq0mFs/2HRgW6TEBAzH66G8f2Txzh1aGR0UC9ZoAUHfHxLZGDhwMpck4BpSnB61eNFIFmlV+TJ+KUA== + "@types/stack-utils@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" @@ -2579,6 +2594,11 @@ resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.3.tgz#09ede6753b846a274301b9bd3a6ed117050daecd" integrity sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww== +"@types/uuid@^9.0.1": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== + "@types/ws@^8.18.1": version "8.18.1" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" From cecb8e2b1209ddad033d29671681eb769dc7cd8b Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 2 Dec 2025 16:50:19 +0100 Subject: [PATCH 127/165] Add typing --- .../packages/ldp/services/container/actions/get.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 3c17011f4..3c214ee14 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,6 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema, Errors } from 'moleculer'; import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; +import { Registration } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -26,7 +27,7 @@ const Schema = { if (accept && accept !== MIME_TYPES.JSON) throw new Error(`The ldp.container.get action now only support JSON-LD. Provided: ${accept}`); - let containerResults = await ctx.call('triplestore.query', { + let containerResults: any = await ctx.call('triplestore.query', { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} CONSTRUCT { @@ -49,7 +50,7 @@ const Schema = { if (!doNotIncludeResources) { const filtersQuery = buildFiltersQuery(filters); - const resourcesResults = await ctx.call('triplestore.query', { + const resourcesResults: any = await ctx.call('triplestore.query', { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} SELECT ?s1 @@ -66,14 +67,14 @@ const Schema = { const resourcesUris = resourcesResults?.map((node: any) => node.s1.value); - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri }); + const { controlledActions }: Registration = await ctx.call('ldp.registry.getByUri', { containerUri }); // Request each resources (in parallel) containerResults['http://www.w3.org/ns/ldp#contains'] = await Promise.all( arrayOf(resourcesUris).flatMap(async resourceUri => { try { // We pass the accept/jsonContext parameters only if they are explicit - const resource = await ctx.call( + const resource: any = await ctx.call( controlledActions?.get || 'ldp.resource.get', cleanUndefined({ resourceUri, @@ -105,7 +106,7 @@ const Schema = { ); } - let compactResults = await ctx.call('jsonld.parser.compact', { + let compactResults: any = await ctx.call('jsonld.parser.compact', { input: containerResults, context: jsonContext || (await ctx.call('jsonld.context.get')) }); From 4381981854f059d61663e1f6f92b2251478f3b11 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 2 Dec 2025 16:50:58 +0100 Subject: [PATCH 128/165] New BinaryService using adapters --- .../packages/ldp/binary/base-adapter.ts | 24 +++ .../packages/ldp/binary/fs-adapter.ts | 178 ++++++++++++++++ src/middleware/packages/ldp/index.ts | 6 +- src/middleware/packages/ldp/service.ts | 30 ++- .../packages/ldp/services/api/actions/get.ts | 62 +++--- .../ldp/services/binary/actions/delete.ts | 15 ++ .../ldp/services/binary/actions/get.ts | 18 ++ .../ldp/services/binary/actions/isBinary.ts | 15 ++ .../ldp/services/binary/actions/store.ts | 17 ++ .../packages/ldp/services/binary/index.ts | 31 +++ .../ldp/services/container/actions/post.ts | 20 +- .../ldp/services/resource/actions/delete.ts | 9 +- .../packages/ldp/services/resource/index.ts | 5 +- .../packages/ldp/services/resource/methods.ts | 64 ++---- src/middleware/packages/ldp/types.ts | 9 +- .../ontologies/ontologies/core/index.ts | 2 + .../ontologies/ontologies/core/stat.json | 9 + .../packages/triplestore/adapters/base.ts | 54 +++++ .../packages/triplestore/adapters/fuseki.ts | 195 ++++++++++++++++++ src/middleware/packages/triplestore/index.ts | 3 +- src/middleware/tests/ldp/binary.test.ts | 63 +++--- src/middleware/tests/ldp/initialize.ts | 19 +- 22 files changed, 714 insertions(+), 134 deletions(-) create mode 100644 src/middleware/packages/ldp/binary/base-adapter.ts create mode 100644 src/middleware/packages/ldp/binary/fs-adapter.ts create mode 100644 src/middleware/packages/ldp/services/binary/actions/delete.ts create mode 100644 src/middleware/packages/ldp/services/binary/actions/get.ts create mode 100644 src/middleware/packages/ldp/services/binary/actions/isBinary.ts create mode 100644 src/middleware/packages/ldp/services/binary/actions/store.ts create mode 100644 src/middleware/packages/ldp/services/binary/index.ts create mode 100644 src/middleware/packages/ontologies/ontologies/core/stat.json create mode 100644 src/middleware/packages/triplestore/adapters/base.ts create mode 100644 src/middleware/packages/triplestore/adapters/fuseki.ts diff --git a/src/middleware/packages/ldp/binary/base-adapter.ts b/src/middleware/packages/ldp/binary/base-adapter.ts new file mode 100644 index 000000000..659b44928 --- /dev/null +++ b/src/middleware/packages/ldp/binary/base-adapter.ts @@ -0,0 +1,24 @@ +import { Readable } from 'stream'; +import { Binary } from '../types.ts'; + +export interface BinaryAdapterInterface { + name: string; + storeBinary(stream: Readable, mimeType: string, dataset: string): Promise; + isBinary(uri: string): Promise; + getBinary(uri: string): Promise; + deleteBinary(uri: string): Promise; +} + +abstract class BaseBinaryAdapter implements BinaryAdapterInterface { + abstract name: string; + + abstract storeBinary(stream: Readable, mimeType: string, dataset: string): Promise; + + abstract isBinary(uri: string): Promise; + + abstract getBinary(uri: string): Promise; + + abstract deleteBinary(uri: string): Promise; +} + +export default BaseBinaryAdapter; diff --git a/src/middleware/packages/ldp/binary/fs-adapter.ts b/src/middleware/packages/ldp/binary/fs-adapter.ts new file mode 100644 index 000000000..3d0c167f9 --- /dev/null +++ b/src/middleware/packages/ldp/binary/fs-adapter.ts @@ -0,0 +1,178 @@ +import fs from 'fs'; +import bytes from 'bytes'; +import path from 'path'; +import { Readable } from 'stream'; +import { IBindings } from 'sparqljson-parse'; +import urlJoin from 'url-join'; +import { Errors, ServiceBroker } from 'moleculer'; +import { v4 as uuidv4 } from 'uuid'; +import { AdapterInterface } from '@semapps/triplestore/adapters/base.ts'; +import BaseBinaryAdapter from './base-adapter.ts'; +import { getDatasetFromUri, getSlugFromUri } from '../utils.ts'; +import { Binary } from '../types.ts'; + +const { MoleculerError } = Errors; + +const streamToFile = (inputStream: Readable, filePath: string, maxSize: string | number): Promise => { + return new Promise((resolve, reject) => { + const fileWriteStream = fs.createWriteStream(filePath); + const maxSizeInBytes = maxSize && bytes.parse(maxSize); + let fileSize = 0; + inputStream + .on('data', (chunk: Buffer) => { + fileSize += chunk.length; + if (maxSizeInBytes && fileSize > maxSizeInBytes) { + fileWriteStream.destroy(); // Stop persisting the file + reject(new MoleculerError(`The file size is limited to ${maxSize}`, 413, 'CONTENT TOO LARGE')); + } + }) + .pipe(fileWriteStream) + .on('finish', () => resolve(fileSize)) + .on('error', reject); + }); +}; + +interface FsBinaryAdapterSettings { + rootDir: string; + baseUrl: string; + maxSize: string | number; + tripleStoreAdapter: AdapterInterface; +} + +export class FsBinaryAdapter extends BaseBinaryAdapter { + name: 'filesystem'; + + private settings: FsBinaryAdapterSettings; + + constructor(settings: FsBinaryAdapterSettings) { + super(); + this.name = 'filesystem'; + this.settings = settings; + } + + async init({ broker } = { broker: ServiceBroker }) { + this.createDirectoryIfNotExist(this.settings.rootDir); + + // Temporary solution. The adapter should be initialized through the TripleStoreService + await this.settings.tripleStoreAdapter.init({ broker }); + } + + async storeBinary(stream: Readable, mimeType: string, dataset: string): Promise { + const dirPath = path.join(this.settings.rootDir, dataset); + this.createDirectoryIfNotExist(dirPath); + + // Replace with this.createNamedGraph() ? + const uuid = uuidv4(); + const fileUri = urlJoin(this.settings.baseUrl, dataset, uuid); + + const filePath = path.join(dirPath, uuid); + + const fileSize = await streamToFile(stream, filePath, this.settings.maxSize); + + const now = new Date(); + + await this.settings.tripleStoreAdapter.update( + dataset, + ` + INSERT DATA { + GRAPH <${fileUri}> { + <${fileUri}> a , . + <${fileUri}> ${fileSize} . + <${fileUri}> "${now.toISOString()}"^^ . + <${fileUri}> "${now.toISOString()}"^^ . + <${fileUri}> "${now.toISOString()}"^^ . + } + } + ` + ); + + return fileUri; + } + + async isBinary(uri: string): Promise { + const dataset = getDatasetFromUri(uri)!; + + // For NextGraph, we can look if the uri starts with "did:ng:j:" + + const result: boolean = await this.settings.tripleStoreAdapter.query( + dataset, + ` + ASK + WHERE { + GRAPH <${uri}> { + <${uri}> a . + } + } + ` + ); + + return result; + } + + async getBinary(uri: string): Promise { + const dataset = getDatasetFromUri(uri)!; + + const result: IBindings[] = await this.settings.tripleStoreAdapter.query( + dataset, + ` + SELECT ?ianaMimeType ?size ?time + WHERE { + GRAPH <${uri}> { + <${uri}> a , ?ianaMimeType . + <${uri}> ?size . + <${uri}> ?time . + } + } + ` + ); + + if (result.length === 0) throw new Error(`Binary not found ${uri}`); + + const regexResults = /^https:\/\/www\.w3\.org\/ns\/iana\/media-types\/(.*)#Resource$/.exec( + result[0].ianaMimeType.value + ); + + return { + file: fs.readFileSync(this.getPathFromUri(uri)), + mimeType: regexResults![1], + size: parseInt(result[0].size.value, 10), + time: new Date(result[0].time.value) + }; + } + + async deleteBinary(uri: string): Promise { + const dataset = getDatasetFromUri(uri)!; + + // Replace with this.deleteNamedGraph(uri) ? + await this.settings.tripleStoreAdapter.query( + dataset, + ` + DELETE + WHERE { + GRAPH <${uri}> { + <${uri}> a , ?ianaMimeType . + <${uri}> ?size . + <${uri}> ?time . + } + } + ` + ); + + fs.unlinkSync(this.getPathFromUri(uri)); + } + + private getPathFromUri(uri: string): string { + const uuid = getSlugFromUri(uri); + const dataset = getDatasetFromUri(uri); + return path.join(this.settings.rootDir, dataset!, uuid); + } + + private createDirectoryIfNotExist(path: string): void { + if (!fs.existsSync(path)) { + process.umask(0); + fs.mkdirSync(path, { recursive: true, mode: 0o0777 }); + } + } +} + +export default FsBinaryAdapter; diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index 6b928e4f8..a3cb19a01 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -15,6 +15,8 @@ import DisassemblyMixin from './mixins/disassembly.ts'; import SpecialEndpointMixin from './mixins/special-endpoint.ts'; import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; import defaultContainerOptions from './services/registry/defaultOptions.ts'; +import BaseBinaryAdapter from './binary/base-adapter.ts'; +import FsBinaryAdapter from './binary/fs-adapter.ts'; import LdpAdapter from './adapter.ts'; export * from './utils.ts'; @@ -37,5 +39,7 @@ export { SpecialEndpointMixin, OrphanFilesDeletionMixin, defaultContainerOptions, - LdpAdapter + LdpAdapter, + BaseBinaryAdapter, + FsBinaryAdapter }; diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index f89472236..36f164b1e 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,6 +1,7 @@ -import { ldp, semapps } from '@semapps/ontologies'; +import { dc, ldp, semapps, stat } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; +import LdpBinaryService from './services/binary/index.ts'; import LdpContainerService from './services/container/index.ts'; import LdpCacheService from './services/cache/index.ts'; import LdpLinkHeaderService from './services/link-header/index.ts'; @@ -9,7 +10,7 @@ import LdpRemoteService from './services/remote/index.ts'; import LdpResourceService from './services/resource/index.ts'; import PermissionsService from './services/permissions/index.ts'; -const LdpSchema = { +const LdpService = { name: 'ldp' as const, settings: { baseUrl: null, @@ -17,13 +18,11 @@ const LdpSchema = { defaultContainerOptions: {}, preferredViewForResource: null, allowSlugs: true, - binary: { - maxSize: '50Mb' - } + binaryAdapter: null }, dependencies: ['ldp.container', 'ldp.resource', 'ldp.registry', 'ontologies', 'jsonld'], async created() { - const { baseUrl, containers, defaultContainerOptions, preferredViewForResource, allowSlugs, binary } = + const { baseUrl, containers, defaultContainerOptions, preferredViewForResource, allowSlugs, binaryAdapter } = this.settings; // @ts-expect-error TS(2322): Type '{ name: "ldp.container"; settings: { baseUrl... Remove this comment to see the full error message @@ -42,12 +41,19 @@ const LdpSchema = { settings: { baseUrl, preferredViewForResource, - allowSlugs, - binary + allowSlugs }, hooks: this.schema.hooksResource || {} }); + // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "ldp.api"; set... Remove this comment to see the full error message + this.broker.createService({ + mixins: [LdpBinaryService], + settings: { + adapter: binaryAdapter + } + }); + // @ts-expect-error TS(2322): Type '{ name: "ldp.remote"; mixins: any[]; setting... Remove this comment to see the full error message this.broker.createService({ mixins: [LdpRemoteService], @@ -57,6 +63,7 @@ const LdpSchema = { }); this.broker.createService({ + // @ts-expect-error TS(2322): Type '{ name: "ldp.registry"; mixins: any[]; setting... Remove this comment to see the full error message mixins: [LdpRegistryService], settings: { baseUrl, @@ -89,7 +96,8 @@ const LdpSchema = { async started() { await this.broker.call('ontologies.register', ldp); // Used by binaries - await this.broker.call('ontologies.register', semapps); + await this.broker.call('ontologies.register', dc); + await this.broker.call('ontologies.register', stat); }, actions: { getBaseUrl: { @@ -114,12 +122,12 @@ const LdpSchema = { } } satisfies ServiceSchema; -export default LdpSchema; +export default LdpService; declare global { export namespace Moleculer { export interface AllServices { - [LdpSchema.name]: typeof LdpSchema; + [LdpService.name]: typeof LdpService; } } } diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index b60d10a4f..2cf7a9421 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -1,7 +1,7 @@ -import fs from 'fs'; import { Errors } from 'moleculer'; import { MIME_TYPES } from '@semapps/mime-types'; import { cleanUndefined, getDatasetFromUri, parseJson } from '../../../utils.ts'; +import { Binary } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -40,6 +40,29 @@ export default async function get(this: any, ctx: any) { if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; ctx.meta.$responseHeaders['Preference-Applied'] = 'return=representation'; } + } else if ( + types.includes('https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource') && + ![MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE].includes(ctx.meta.originalHeaders?.accept) + ) { + /* + * LDP BINARY + */ + + try { + const binary: Binary = await ctx.call('ldp.binary.get', { resourceUri: uri }); + + ctx.meta.$responseType = binary.mimeType; + // Since files are currently immutable, we set a maximum browser cache age + // We do that after the file is read, otherwise the error 404 will be cached by the browser + ctx.meta.$responseHeaders = { + 'Cache-Control': 'public, max-age=31536000', + Vary: 'Accept' + }; + + return binary.file; + } catch (e) { + throw new MoleculerError('File Not found', 404, 'NOT_FOUND'); + } } else { /* * LDP RESOURCE @@ -63,36 +86,13 @@ export default async function get(this: any, ctx: any) { } } - // If the resource is a file and no semantic encoding was requested, return it - if ( - types.includes('http://semapps.org/ns/core#File') && - ![MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE].includes(ctx.meta.originalHeaders?.accept) - ) { - try { - // Get the file as JSON-LD to get its metadata - res = await ctx.call(controlledActions.get || 'ldp.resource.get', { resourceUri: uri }); - - const file = fs.readFileSync(res['semapps:localPath']); - ctx.meta.$responseType = res['semapps:mimeType']; - // Since files are currently immutable, we set a maximum browser cache age - // We do that after the file is read, otherwise the error 404 will be cached by the browser - ctx.meta.$responseHeaders = { - 'Cache-Control': 'public, max-age=31536000', - Vary: 'Accept' - }; - return file; - } catch (e) { - throw new MoleculerError('File Not found', 404, 'NOT_FOUND'); - } - } else { - res = await ctx.call( - controlledActions.get || 'ldp.resource.get', - cleanUndefined({ - resourceUri: uri, - jsonContext: parseJson(ctx.meta.headers?.jsonldcontext) - }) - ); - } + res = await ctx.call( + controlledActions.get || 'ldp.resource.get', + cleanUndefined({ + resourceUri: uri, + jsonContext: parseJson(ctx.meta.headers?.jsonldcontext) + }) + ); } if (ctx.meta.headers.accept && ctx.meta.headers.accept !== MIME_TYPES.JSON) { diff --git a/src/middleware/packages/ldp/services/binary/actions/delete.ts b/src/middleware/packages/ldp/services/binary/actions/delete.ts new file mode 100644 index 000000000..2f1db1078 --- /dev/null +++ b/src/middleware/packages/ldp/services/binary/actions/delete.ts @@ -0,0 +1,15 @@ +import { ActionSchema } from 'moleculer'; + +const DeleteAction = { + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + + await this.settings.adapter.deleteBinary(resourceUri); + } +} satisfies ActionSchema; + +export default DeleteAction; diff --git a/src/middleware/packages/ldp/services/binary/actions/get.ts b/src/middleware/packages/ldp/services/binary/actions/get.ts new file mode 100644 index 000000000..0d08cd0ca --- /dev/null +++ b/src/middleware/packages/ldp/services/binary/actions/get.ts @@ -0,0 +1,18 @@ +import { ActionSchema } from 'moleculer'; +import { Binary } from '../../../types.ts'; + +const GetAction = { + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + + const binary: Binary = await this.settings.adapter.getBinary(resourceUri); + + return binary; + } +} satisfies ActionSchema; + +export default GetAction; diff --git a/src/middleware/packages/ldp/services/binary/actions/isBinary.ts b/src/middleware/packages/ldp/services/binary/actions/isBinary.ts new file mode 100644 index 000000000..056ad481f --- /dev/null +++ b/src/middleware/packages/ldp/services/binary/actions/isBinary.ts @@ -0,0 +1,15 @@ +import { ActionSchema } from 'moleculer'; + +const IsBinaryAction = { + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + + return await this.settings.adapter.isBinary(resourceUri); + } +} satisfies ActionSchema; + +export default IsBinaryAction; diff --git a/src/middleware/packages/ldp/services/binary/actions/store.ts b/src/middleware/packages/ldp/services/binary/actions/store.ts new file mode 100644 index 000000000..851f05170 --- /dev/null +++ b/src/middleware/packages/ldp/services/binary/actions/store.ts @@ -0,0 +1,17 @@ +import { ActionSchema } from 'moleculer'; + +const StoreAction = { + visibility: 'public', + params: { + file: { type: 'object', optional: true } + }, + async handler(ctx) { + const { file } = ctx.params; + + const resourceUri = await this.settings.adapter.storeBinary(file.readableStream, file.mimetype, ctx.meta.dataset); + + return resourceUri; + } +} satisfies ActionSchema; + +export default StoreAction; diff --git a/src/middleware/packages/ldp/services/binary/index.ts b/src/middleware/packages/ldp/services/binary/index.ts new file mode 100644 index 000000000..87dfbc05b --- /dev/null +++ b/src/middleware/packages/ldp/services/binary/index.ts @@ -0,0 +1,31 @@ +import { ServiceSchema } from 'moleculer'; +import storeAction from './actions/store.ts'; +import deleteAction from './actions/delete.ts'; +import getAction from './actions/get.ts'; +import isBinaryAction from './actions/isBinary.ts'; + +const LdpBinaryService = { + name: 'ldp.binary' as const, + settings: { + adapter: null + }, + actions: { + store: storeAction, + delete: deleteAction, + get: getAction, + isBinary: isBinaryAction + }, + async started() { + await this.settings.adapter.init({ broker: this.broker }); + } +} satisfies ServiceSchema; + +export default LdpBinaryService; + +declare global { + export namespace Moleculer { + export interface AllServices { + [LdpBinaryService.name]: typeof LdpBinaryService; + } + } +} diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index b5a83cf42..2c2d04f52 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -81,10 +81,16 @@ const PostAction = { ); } - const resourceUri = await ctx.call('triplestore.named-graph.create', { - baseUrl: await ctx.call('solid-storage.getBaseUrl'), - slug: this.settings.allowSlugs ? slug : undefined - }); + let resourceUri: string; + + if (file) { + resourceUri = await ctx.call('ldp.binary.store', { file }); + } else { + resourceUri = await ctx.call('triplestore.named-graph.create', { + baseUrl: await ctx.call('solid-storage.getBaseUrl'), + slug: this.settings.allowSlugs ? slug : undefined + }); + } // We must add this first, otherwise side effects will not find the container of the created resource // But this create race conditions, especially when testing, since uncreated resources are linked to containers @@ -101,10 +107,8 @@ const PostAction = { try { if (file) { - resource = await ctx.call('ldp.resource.upload', { resourceUri, file }); - } - - if (isContainer) { + // Do nothing. The binary has already been uploaded. + } else if (isContainer) { await ctx.call('ldp.container.create', { containerUri: resourceUri, title: expandedResource['http://purl.org/dc/terms/title']?.[0]['@value'], diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 4279f2ec4..6033e8d74 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,4 +1,3 @@ -import fs from 'fs'; import { ActionSchema } from 'moleculer'; const Schema = { @@ -19,7 +18,7 @@ const Schema = { // Save the current data, to be able to send it through the event // If the resource does not exist, it will throw a 404 error - const oldData = await ctx.call( + const oldData: any = await ctx.call( 'ldp.resource.get', { resourceUri, @@ -37,14 +36,14 @@ const Schema = { await ctx.call('triplestore.named-graph.delete', { uri: resourceUri }); // We must detach the resource from the containers after deletion, otherwise the permissions may fail - const containersUris = await ctx.call('ldp.resource.getContainers', { resourceUri }); + const containersUris: string[] = await ctx.call('ldp.resource.getContainers', { resourceUri }); for (const containerUri of containersUris) { await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId: 'system' }); } - if (oldData.type === 'semapps:File') { + if (await ctx.call('ldp.binary.isBinary', { resourceUri })) { try { - fs.unlinkSync(oldData['semapps:localPath']); + await ctx.call('ldp.binary.delete', { resourceUri }); } catch (e) { // Ignore errors (file may have been deleted already) } diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index 8109faaae..56f45d734 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -17,10 +17,7 @@ const LdpResourceSchema = { settings: { baseUrl: null, preferredViewForResource: null, - allowSlugs: true, - binary: { - maxSize: '50Mb' - } + allowSlugs: true }, dependencies: ['triplestore', 'jsonld'], actions: { diff --git a/src/middleware/packages/ldp/services/resource/methods.ts b/src/middleware/packages/ldp/services/resource/methods.ts index b5332eb46..57cf73bb8 100644 --- a/src/middleware/packages/ldp/services/resource/methods.ts +++ b/src/middleware/packages/ldp/services/resource/methods.ts @@ -1,9 +1,7 @@ -import fs from 'fs'; -// @ts-expect-error TS(7016): Could not find a declaration file for module 'byte... Remove this comment to see the full error message -import bytes from 'bytes'; import rdfParser from 'rdf-parse'; import streamifyString from 'streamify-string'; import rdf from '@rdfjs/data-model'; +import { NamedNode, Quad, Variable, Literal } from '@rdfjs/types'; import { MIME_TYPES } from '@semapps/mime-types'; import { Errors } from 'moleculer'; @@ -11,28 +9,7 @@ const { MoleculerError } = Errors; // TODO put each method in a different file (problems with "this" not working) export default { - streamToFile(inputStream: any, filePath: any, maxSize: any) { - return new Promise((resolve, reject) => { - const fileWriteStream = fs.createWriteStream(filePath); - const maxSizeInBytes = maxSize && bytes.parse(maxSize); - let fileSize = 0; - inputStream - .on('data', (chunk: any) => { - if (maxSizeInBytes) { - fileSize += chunk.length; - if (fileSize > maxSizeInBytes) { - fileWriteStream.destroy(); // Stop persisting the file - reject(new MoleculerError(`The file size is limited to ${maxSize}`, 413, 'CONTENT TOO LARGE')); - } - } - }) - .pipe(fileWriteStream) - .on('finish', resolve) - .on('error', reject); - }); - }, - // @ts-expect-error - async bodyToTriples(body, contentType) { + async bodyToTriples(body: any, contentType: string) { if (contentType === MIME_TYPES.JSON) { // @ts-expect-error return await this.broker.call('jsonld.parser.toQuads', { input: body }); @@ -40,18 +17,17 @@ export default { if (!(typeof body === 'string')) throw new MoleculerError('no body provided', 400, 'BAD_REQUEST'); return new Promise((resolve, reject) => { const textStream = streamifyString(body); - // @ts-expect-error - const res = []; + const res: Quad[] = []; rdfParser - .parse(textStream, { contentType }) - .on('data', quad => res.push(quad)) - .on('error', error => reject(error)) // @ts-expect-error + .parse(textStream, { contentType }) + .on('data', (quad: Quad) => res.push(quad)) + .on('error', (error: Error) => reject(error)) .on('end', () => resolve(res)); }); }, - convertBlankNodesToVars(triples: any) { - return triples.map((triple: any) => { + convertBlankNodesToVars(triples: Quad[]) { + return triples.map(triple => { if (triple.subject.termType === 'BlankNode') { triple.subject = rdf.variable(triple.subject.value); } @@ -62,10 +38,10 @@ export default { }); }, // Exclude from triples1 the triples which also exist in triples2 - getTriplesDifference(triples1: any, triples2: any) { - return triples1.filter((t1: any) => !triples2.some((t2: any) => t1.equals(t2))); + getTriplesDifference(triples1: Quad[], triples2: Quad[]) { + return triples1.filter(t1 => !triples2.some(t2 => t1.equals(t2))); }, - nodeToString(node: any) { + nodeToString(node: NamedNode | Variable | Literal | any) { switch (node.termType) { case 'Variable': return `?${node.value}`; @@ -86,8 +62,8 @@ export default { throw new Error(`Unknown node type: ${node.termType}`); } }, - buildJsonVariable(identifier: any, triples: any) { - const blankVariables = triples.filter((t: any) => t.subject.value.localeCompare(identifier) === 0); + buildJsonVariable(identifier: any, triples: Quad[]) { + const blankVariables = triples.filter(t => t.subject.value.localeCompare(identifier) === 0); const json = {}; let allIdentifiers = [identifier]; for (const blankVariable of blankVariables) { @@ -103,8 +79,8 @@ export default { } return { json, allIdentifiers }; }, - removeDuplicatedVariables(triples: any) { - const roots = triples.filter((n: any) => n.object.termType === 'Variable' && n.subject.termType !== 'Variable'); + removeDuplicatedVariables(triples: Quad[]) { + const roots = triples.filter(t => t.object.termType === 'Variable' && t.subject.termType !== 'Variable'); const rootsIdentifiers = roots.reduce((previousValue: any, currentValue: any) => { const result = previousValue; if (!result.find((i: any) => i.localeCompare(currentValue.object.value) === 0)) { @@ -133,19 +109,19 @@ export default { } const allRemovedIdentifiers = duplicatedVariables.map(dv => dv.allIdentifiers).flat(); const removedDuplicatedVariables = triples.filter( - (t: any) => !allRemovedIdentifiers.includes(t.object.value) && !allRemovedIdentifiers.includes(t.subject.value) + t => !allRemovedIdentifiers.includes(t.object.value) && !allRemovedIdentifiers.includes(t.subject.value) ); return removedDuplicatedVariables; }, - triplesToString(triples: any) { + triplesToString(triples: Quad[]) { return triples .map( - (triple: any) => + triple => `${this.nodeToString(triple.subject)} <${triple.predicate.value}> ${this.nodeToString(triple.object)} .` ) .join('\n'); }, - bindNewBlankNodes(triples: any) { - return triples.map((triple: any) => `BIND (BNODE() AS ?${triple.object.value}) .`).join('\n'); + bindNewBlankNodes(triples: Quad[]) { + return triples.map(triple => `BIND (BNODE() AS ?${triple.object.value}) .`).join('\n'); } }; diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index ac72fba07..e132e5321 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -1,6 +1,6 @@ import { WacPermissionObject, WacPermissionFunction } from '@semapps/webacl'; -interface ControlledActions { +export interface ControlledActions { post: string; list: string; get: string; @@ -32,3 +32,10 @@ export interface LdpRegistryServiceSettings { defaultOptions: Partial; allowSlugs: boolean; } + +export interface Binary { + file: Buffer; + mimeType: string; + size: number; + time: Date; +} diff --git a/src/middleware/packages/ontologies/ontologies/core/index.ts b/src/middleware/packages/ontologies/ontologies/core/index.ts index 297091a3b..ea163a89a 100644 --- a/src/middleware/packages/ontologies/ontologies/core/index.ts +++ b/src/middleware/packages/ontologies/ontologies/core/index.ts @@ -10,6 +10,7 @@ import rdfs from './rdfs.json' with { type: 'json' }; import sec from './sec.json' with { type: 'json' }; import semapps from './semapps.json' with { type: 'json' }; import skos from './skos.json' with { type: 'json' }; +import stat from './stat.json' with { type: 'json' }; import vcard from './vcard.json' with { type: 'json' }; import voidOntology from './void.json' with { type: 'json' }; import xsd from './xsd.json' with { type: 'json' }; @@ -27,6 +28,7 @@ export { sec, semapps, skos, + stat, vcard, voidOntology as void, xsd, diff --git a/src/middleware/packages/ontologies/ontologies/core/stat.json b/src/middleware/packages/ontologies/ontologies/core/stat.json new file mode 100644 index 000000000..5b71f7600 --- /dev/null +++ b/src/middleware/packages/ontologies/ontologies/core/stat.json @@ -0,0 +1,9 @@ +{ + "prefix": "stat", + "namespace": "http://www.w3.org/ns/posix/stat#", + "jsonldContext": { + "xsd": "http://www.w3.org/2001/XMLSchema#", + "stat:size": { "@type": "xsd:integer" }, + "stat:mtime": { "@type": "xsd:dateTime" } + } +} diff --git a/src/middleware/packages/triplestore/adapters/base.ts b/src/middleware/packages/triplestore/adapters/base.ts new file mode 100644 index 000000000..f1ad87029 --- /dev/null +++ b/src/middleware/packages/triplestore/adapters/base.ts @@ -0,0 +1,54 @@ +import { Response } from 'node-fetch'; + +export interface AdapterInterface { + name: string; + init(initSettings: { broker: any }): Promise; + cleanup(): Promise; + query(query: string, dataset?: string): Promise; + update(query: string, dataset?: string): Promise; + dropAll(dataset: string): Promise; + createDataset(dataset: string): Promise; + datasetExists(dataset: string): Promise; + listDatasets(): Promise; + deleteDataset(dataset: string): Promise; + backupDataset(dataset: string): Promise; +} + +export abstract class BaseAdapter implements AdapterInterface { + abstract name: string; + + protected broker: any; + + // Optional init method, override if needed + async init(initSettings: { broker: any }): Promise { + this.broker = initSettings.broker; + } + + protected getLogger() { + if (this.broker && this.broker.logger) { + return this.broker.logger; + } + return console; // Fallback to console + } + + // Default no-op implementation, override if needed + async cleanup(): Promise { + return Promise.resolve(); + } + + abstract query(query: string, dataset?: string): Promise; + + abstract update(query: string, dataset?: string): Promise; + + abstract dropAll(dataset: string): Promise; + + abstract createDataset(dataset: string): Promise; + + abstract datasetExists(dataset: string): Promise; + + abstract listDatasets(): Promise; + + abstract deleteDataset(dataset: string): Promise; + + abstract backupDataset(dataset: string): Promise; +} diff --git a/src/middleware/packages/triplestore/adapters/fuseki.ts b/src/middleware/packages/triplestore/adapters/fuseki.ts new file mode 100644 index 000000000..6273ffb97 --- /dev/null +++ b/src/middleware/packages/triplestore/adapters/fuseki.ts @@ -0,0 +1,195 @@ +import fetch from 'node-fetch'; +import urlJoin from 'url-join'; +import { SparqlJsonParser } from 'sparqljson-parse'; +import { throw403, throw500, throw404 } from '@semapps/middlewares'; +import { Errors } from 'moleculer'; +import { BaseAdapter } from './base.ts'; + +const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); +const { MoleculerError } = Errors; + +export default class FusekiAdapter extends BaseAdapter { + name = 'fuseki'; + + private settings: { + url: string; // The URL of the Fuseki server + user: string; // The username for the Fuseki server + password: string; // The password for the Fuseki server + }; + + private sparqlJsonParser: SparqlJsonParser; + + constructor(settings: any) { + super(); + if (!settings.url) throw new Error('URL is required'); + if (!settings.user) throw new Error('User is required'); + if (!settings.password) throw new Error('Password is required'); + this.settings = settings; + this.sparqlJsonParser = new SparqlJsonParser(); + } + + /* + * Fetch the given URL with the given method, body and headers + * Intended to be used internally to call the Fuseki server + * + * @param url - The URL to fetch + * @param method - The method to use (default is POST) + * @param body - The body to send (default is undefined) + * @param headers - The headers to send (default is Accept: application/json, and the authorization header) + * @returns The response from the URL + */ + async fetch( + url: string, + { + operation = 'unknown operation', + method = 'POST', + body, + headers + }: { operation?: string; method?: string; body?: any; headers?: any } + ) { + const response = await fetch(url, { + method, + body, + headers: { + Accept: 'application/json', + Authorization: `Basic ${Buffer.from(`${this.settings.user}:${this.settings.password}`).toString('base64')}`, + ...headers + } + }); + + if (!response.ok) { + const text = await response.text(); + // TODO : check if we could remove the comparison with 500 and permissions violation since we switched to jena-fuseki 5.0.0 or above + if (response.status === 403 || (response.status === 500 && text.includes('permissions violation'))) { + throw403(`Fuseki ${operation} failed: ${text}\nURL: ${url}\nQuery: ${body}`); + } else if (response.status === 404) { + throw404(`Fuseki ${operation} failed: ${text}\nURL: ${url}\nQuery: ${body}`); + } else { + throw500( + `Fuseki ${operation} failed: Unable to reach SPARQL endpoint ${url}. Error message: ${response.statusText}. Query: ${body}` + ); + } + } + + return response; + } + + async query(dataset: string, query: string) { + const response = await this.fetch(urlJoin(this.settings.url, dataset, 'query'), { + operation: 'query', + body: query, + headers: { + 'Content-Type': 'application/sparql-query', + Accept: 'application/ld+json, application/sparql-results+json' + } + }); + + const regex = /(CONSTRUCT|SELECT|ASK).*/gm; + // @ts-expect-error TS(2531): Object is possibly 'null'. + const verb = regex.exec(query)[1]; + switch (verb) { + case 'ASK': + return (await response.json()).boolean; + case 'SELECT': + return this.sparqlJsonParser.parseJsonResults(await response.json()); + case 'CONSTRUCT': + return await response.json(); + default: + throw new Error('SPARQL Verb not supported'); + } + } + + async update(dataset: string, query: string) { + await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { + operation: 'update', + body: query, + headers: { + 'Content-Type': 'application/sparql-update' + } + }); + } + + async dropAll(dataset: string) { + await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { + operation: 'dropAll', + body: 'update=CLEAR+ALL', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }); + } + + async createDataset(dataset: string) { + await this.fetch(urlJoin(this.settings.url, '$/datasets') + `?dbName=${dataset}&dbType=tdb2`, { + operation: 'createDataset', + method: 'POST' + }); + await this.waitForDatasetCreation(dataset); + this.getLogger().info(`Fuseki dataset created: ${dataset}`); + } + + async datasetExists(dataset: string): Promise { + try { + const response = await this.fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { + operation: 'datasetExists' + }); + return response.status === 200; + } catch (error) { + if (!(error instanceof MoleculerError && error.code === 404)) throw error; + return false; + } + } + + async listDatasets() { + const response = await this.fetch(urlJoin(this.settings.url, '$/datasets'), { + operation: 'listDatasets', + method: 'GET' + }); + const json = await response.json(); + return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); + } + + async deleteDataset(dataset: string) { + await this.fetch(urlJoin(this.settings.url, '$/datasets', dataset), { + operation: 'deleteDataset', + method: 'DELETE' + }); + this.getLogger().info(`Fuseki dataset deleted: ${dataset}`); + } + + // TODO : see how we can test this + async backupDataset(dataset: string) { + // Ask Fuseki to backup the given dataset + const response = await this.fetch(urlJoin(this.settings.url, '$/backup', dataset), { + operation: 'backupDataset' + }); + + // Wait for backup to complete + const { taskId } = await response.json(); + await this.waitForTaskCompletion(taskId); + this.getLogger().info(`Fuseki dataset backed up: ${dataset}`); + } + + async waitForDatasetCreation(dataset: string) { + let datasetExist; + do { + await delay(1000); + datasetExist = await this.datasetExists(dataset); + } while (!datasetExist); + } + + async waitForTaskCompletion(taskId: string) { + let task; + do { + await delay(1000); + const response = await this.fetch(urlJoin(this.settings.url, '$/tasks/', `${taskId}`), { + operation: 'Wait for Task Completion', + method: 'GET' + }); + + if (response.ok) { + task = await response.json(); + } + } while (!task || !task.finished); + } +} diff --git a/src/middleware/packages/triplestore/index.ts b/src/middleware/packages/triplestore/index.ts index 3f346b217..ade9b6e3f 100644 --- a/src/middleware/packages/triplestore/index.ts +++ b/src/middleware/packages/triplestore/index.ts @@ -1,6 +1,7 @@ import DatasetService from './subservices/dataset.ts'; import TripleStoreAdapter from './adapter.ts'; import TripleStoreService from './service.ts'; +import FusekiAdapter from './adapters/fuseki.ts'; export * from './utils.ts'; -export { DatasetService, TripleStoreAdapter, TripleStoreService }; +export { DatasetService, TripleStoreAdapter, TripleStoreService, FusekiAdapter }; diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 4b11ce836..3c149ccec 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -1,11 +1,10 @@ import fetch from 'node-fetch'; -import waitForExpect from 'wait-for-expect'; import fs from 'fs'; import { ServiceBroker } from 'moleculer'; import path, { join as pathJoin } from 'path'; -import { getSlugFromUri } from '@semapps/ldp'; +import { Binary } from '@semapps/ldp'; import { fileURLToPath } from 'url'; -import { fetchServer, createAccount } from '../utils.ts'; +import { createAccount } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; @@ -26,46 +25,56 @@ afterAll(async () => { }); describe('Binary handling of LDP server', () => { - let fileUri: string | null; + let fileUri: string; let filePath: string | null; - let fileName: string | null; + let binary: Binary; let containerUri: string; test('Post image to container', async () => { - // @ts-expect-error This expression is not callable - await waitForExpect(async () => { - containerUri = await alice.call('ldp.registry.getUri', { type: 'semapps:File', isContainer: true }); - expect(containerUri).not.toBeUndefined(); - }); + containerUri = await alice.getContainerUri( + 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource' + ); const readStream = fs.createReadStream(pathJoin(__dirname, 'av-icon.png')); - const { headers } = await fetchServer(containerUri, { + const { headers } = await alice.fetch(containerUri, { method: 'POST', body: readStream, headers: new fetch.Headers({ 'Content-Type': 'image/png' }) }); - fileUri = headers.get('Location'); + fileUri = headers.get('Location')!; expect(fileUri).not.toBeNull(); filePath = fileUri!.replace(CONFIG.HOME_URL!, ''); - fileName = getSlugFromUri(fileUri); expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); }); + test('Get binary', async () => { + binary = await alice.call('ldp.binary.get', { resourceUri: fileUri }); + + expect(binary).toMatchObject({ + file: expect.anything(), + mimeType: 'image/png', + size: 3181, + time: expect.anything() + }); + }); + test('Get container', async () => { - await expect(fetchServer(containerUri)).resolves.toMatchObject({ + await expect(alice.fetch(containerUri)).resolves.toMatchObject({ json: { type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [ { id: fileUri, - type: 'semapps:File', - 'semapps:fileName': fileName, - 'semapps:localPath': `uploads/${filePath}`, - 'semapps:mimeType': 'image/png' + type: expect.arrayContaining([ + 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', + 'https://www.w3.org/ns/iana/media-types/image/png#Resource' + ]), + 'stat:size': '3181', + 'stat:mtime': binary.time.toISOString() } ] } @@ -73,7 +82,7 @@ describe('Binary handling of LDP server', () => { }); test('Get image as binary (via API)', async () => { - const { headers, body } = await fetchServer(fileUri, { + const { headers, body } = await alice.fetch(fileUri, { headers: new fetch.Headers({ Accept: '*/*' }) }); @@ -87,16 +96,18 @@ describe('Binary handling of LDP server', () => { test('Get image as resource (via Moleculer action)', async () => { await expect(alice.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ id: fileUri, - type: 'semapps:File', - 'semapps:fileName': fileName, - 'semapps:localPath': `uploads/${filePath}`, - 'semapps:mimeType': 'image/png' + type: expect.arrayContaining([ + 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', + 'https://www.w3.org/ns/iana/media-types/image/png#Resource' + ]), + 'stat:size': '3181', + 'stat:mtime': binary.time.toISOString() }); }); test('Delete image', async () => { await expect( - fetchServer(fileUri, { + alice.fetch(fileUri, { method: 'DELETE' }) ).resolves.toMatchObject({ @@ -105,9 +116,9 @@ describe('Binary handling of LDP server', () => { expect(fs.existsSync(pathJoin(__dirname, '../uploads/files/av-icon.png'))).toBeFalsy(); - await expect(fetchServer(fileUri)).resolves.toMatchObject({ status: 404 }); + await expect(alice.fetch(fileUri)).resolves.toMatchObject({ status: 404 }); - await expect(fetchServer(containerUri)).resolves.toMatchObject({ + await expect(alice.fetch(containerUri)).resolves.toMatchObject({ json: { type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), 'ldp:contains': [] diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index a1307bcca..05bc6e1dd 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -2,12 +2,14 @@ import { ServiceBroker } from 'moleculer'; import fs from 'fs'; import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; +import { FsBinaryAdapter } from '@semapps/ldp'; import { as, pair, petr, semapps, solid, vcard } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; import { listDatasets, dropDataset } from '../utils.ts'; +import { FusekiAdapter } from '@semapps/triplestore'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -37,7 +39,7 @@ const containers = [ }, { path: '/files', - types: ['semapps:File'], + types: ['https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource'], permissions } ]; @@ -64,6 +66,13 @@ const initialize = async (allowSlugs = true): Promise => { } }); + // Temporary solution until the TripleStoreService refactoring is finished + const fusekiAdapter = new FusekiAdapter({ + url: CONFIG.SPARQL_ENDPOINT, + user: CONFIG.JENA_USER, + password: CONFIG.JENA_PASSWORD + }); + broker.createService({ // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message mixins: [CoreService], @@ -82,7 +91,13 @@ const initialize = async (allowSlugs = true): Promise => { webfinger: false, webid: false, ldp: { - allowSlugs + allowSlugs, + binaryAdapter: new FsBinaryAdapter({ + rootDir: uploadsPath, + baseUrl: CONFIG.HOME_URL!, + maxSize: '80Mb', + tripleStoreAdapter: fusekiAdapter + }) } } }); From c40ff8974858d0256d1719073c2721dbfa7a7cbb Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 2 Dec 2025 16:58:57 +0100 Subject: [PATCH 129/165] Remove the ldp.resource.upload action --- .../ldp/services/resource/actions/upload.ts | 51 ------------------- .../packages/ldp/services/resource/index.ts | 4 +- 2 files changed, 1 insertion(+), 54 deletions(-) delete mode 100644 src/middleware/packages/ldp/services/resource/actions/upload.ts diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts deleted file mode 100644 index be147a292..000000000 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ /dev/null @@ -1,51 +0,0 @@ -import path from 'path'; -import fs from 'fs'; -import { ActionSchema, Errors } from 'moleculer'; -import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; - -const { MoleculerError } = Errors; - -const UploadAction = { - visibility: 'public', - params: { - resourceUri: 'string', - file: 'object' - }, - async handler(ctx) { - const { resourceUri, file } = ctx.params; - - const fileName = getSlugFromUri(resourceUri); - const containerPath = new URL(getContainerFromUri(resourceUri)).pathname; - const dir = path.join(`./uploads${containerPath}`); - const localPath = path.join(dir, fileName); - if (!fs.existsSync(dir)) { - process.umask(0); - fs.mkdirSync(dir, { recursive: true, mode: 0o0777 }); - } - - try { - await this.streamToFile(file.readableStream, localPath, this.settings.binary.maxSize); - } catch (e) { - // @ts-expect-error TS(18046): 'e' is of type 'unknown'. - if (e.code === 413) { - throw e; // File too large - } else { - console.error(e); - // @ts-expect-error TS(2345): Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message - throw new MoleculerError(e, 500, 'Server Error'); - } - } - - return { - '@context': { '@vocab': 'http://semapps.org/ns/core#' }, - '@id': resourceUri, - '@type': 'File', - encoding: file.encoding, - mimeType: file.mimetype, - localPath, - fileName - }; - } -} satisfies ActionSchema; - -export default UploadAction; diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index 56f45d734..ed4db42ce 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -8,7 +8,6 @@ import deleteAction from './actions/delete.ts'; import existAction from './actions/exist.ts'; import getContainersAction from './actions/getContainers.ts'; import getTypesAction from './actions/getTypes.ts'; -import uploadAction from './actions/upload.ts'; import methods from './methods.ts'; import { getDatasetFromUri } from '../../utils.ts'; @@ -30,8 +29,7 @@ const LdpResourceSchema = { getContainers: getContainersAction, getTypes: getTypesAction, patch: patchAction, - put: putAction, - upload: uploadAction + put: putAction }, hooks: { before: { From fefe5ba73c04706471755ec9216f23e09db5cf92 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 09:52:43 +0100 Subject: [PATCH 130/165] Cleanup --- src/middleware/packages/ldp/adapter.ts | 247 ------------------ .../fs-binary-adapter.ts} | 34 ++- .../packages/ldp/binary/base-adapter.ts | 24 -- src/middleware/packages/ldp/index.ts | 6 +- src/middleware/packages/ldp/tsconfig.json | 2 +- src/middleware/packages/ldp/types.ts | 9 + src/middleware/tests/ldp/binary.test.ts | 22 +- 7 files changed, 46 insertions(+), 298 deletions(-) delete mode 100644 src/middleware/packages/ldp/adapter.ts rename src/middleware/packages/ldp/{binary/fs-adapter.ts => adapters/fs-binary-adapter.ts} (92%) delete mode 100644 src/middleware/packages/ldp/binary/base-adapter.ts diff --git a/src/middleware/packages/ldp/adapter.ts b/src/middleware/packages/ldp/adapter.ts deleted file mode 100644 index e3cd15605..000000000 --- a/src/middleware/packages/ldp/adapter.ts +++ /dev/null @@ -1,247 +0,0 @@ -import urlJoin from 'url-join'; -import { Errors } from 'moleculer'; - -const { ServiceSchemaError } = Errors; - -class LdpAdapter { - constructor({ resourceService = 'ldp.resource', containerService = 'ldp.container' } = {}) { - // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message - this.resourceService = resourceService; - // @ts-expect-error TS(2339): Property 'containerService' does not exist on type... Remove this comment to see the full error message - this.containerService = containerService; - } - - init(broker: any, service: any) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - this.broker = broker; - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - this.service = service; - } - - async connect() { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - if (!this.service.schema.settings.containerUri) { - throw new ServiceSchemaError( - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - `Missing \`containerUri\` definition in settings of service ${this.service.schema.name}` - ); - } - - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - await this.broker.waitForServices([this.resourceService, this.containerService], 120000); - - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - const { containerUri } = this.service.schema.settings; - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - const exists = await this.broker.call(`${this.containerService}.exist`, { containerUri, webId: 'system' }); - - if (!exists) { - console.log(`Container ${containerUri} doesn't exist, creating it...`); - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - await this.broker.call(`${this.containerService}.create`, { containerUri }); - } - } - - disconnect() { - return Promise.resolve(); - } - - /** - * Find all entities by filters. - * - * Available filter props: - * - limit - * - offset - * - sort - * - search - * - searchFields - * - query - */ - find(filters: any) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - return this.broker.call(`${this.containerService}.get`, { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - containerUri: this.service.schema.settings.containerUri, - filters: filters.query, - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - jsonContext: this.service.schema.settings.context - }); - } - - /** - * Find an entity by query - */ - findOne(query: any) { - throw new Error('Method not implemented'); - } - - /** - * Find an entity by ID. - */ - findById(_id: any) { - if (!_id.startsWith('http')) { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - _id = urlJoin(this.service.schema.settings.containerUri, _id); - } - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - return this.broker.call(`${this.resourceService}.get`, { - resourceUri: _id, - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - jsonContext: this.service.schema.settings.context - }); - } - - /** - * Find all entities by IDs - */ - findByIds(ids: any) { - return Promise.all(ids.map((id: any) => this.findById(id))); - } - - /** - * Get count of filtered entities - * - * Available filter props: - * - search - * - searchFields - * - query - */ - count(filters = {}) { - return this.find(filters).then((result: any) => result['ldp:contains'].length); - } - - /** - * Insert an entity - */ - insert(entity: any) { - const { slug, ...resource } = entity; - - return ( - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - this.broker - // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message - .call(`${this.resourceService}.post`, { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - containerUri: this.service.schema.settings.containerUri, - resource: { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - '@context': this.service.schema.settings.context, - ...resource - }, - slug - }) - .then((resourceUri: any) => { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - this.broker.call(`${this.containerService}.attach`, { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - containerUri: this.service.schema.settings.containerUri, - resourceUri - }); - - return this.findById(resourceUri); - }) - ); - } - - /** - * Insert multiple entities - */ - insertMany(entities: any) { - throw new Error('Method not implemented'); - } - - /** - * Update many entities by `query` and `update` - */ - updateMany(query: any, update: any) { - throw new Error('Method not implemented'); - } - - /** - * Update an entity by ID - */ - updateById(_id: any, update: any) { - const { id, '@id': arobaseId, ...resource } = update.$set; - - // Check ID and transform it to URI if necessary - _id = _id || id || arobaseId; - if (!_id) throw new Error('An ID must be specified to update resources'); - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - if (!_id.startsWith('http')) _id = urlJoin(this.service.schema.settings.containerUri, _id); - - return ( - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - this.broker - // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message - .call(`${this.resourceService}.put`, { - resource: { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - '@context': this.service.schema.settings.context, - '@id': _id, - ...resource - } - }) - .then((resourceUri: any) => this.findById(resourceUri)) - ); - } - - /** - * Remove many entities which are matched by `query` - */ - removeMany(query: any) { - throw new Error('Method not implemented'); - } - - /** - * Remove an entity by ID - */ - removeById(_id: any) { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - return ( - this.broker - // @ts-expect-error TS(2339): Property 'resourceService' does not exist on type ... Remove this comment to see the full error message - .call(`${this.resourceService}.delete`, { - resourceUri: _id - }) - .then(() => { - // We must return the number of deleted resource - // Otherwise the DB adapter returns an error - return 1; - }) - ); - } - - /** - * Clear all entities from the container - */ - clear() { - // @ts-expect-error TS(2339): Property 'broker' does not exist on type 'LdpAdapt... Remove this comment to see the full error message - return this.broker.call(`${this.containerService}.clear`, { - // @ts-expect-error TS(2339): Property 'service' does not exist on type 'LdpAdap... Remove this comment to see the full error message - containerUri: this.service.schema.settings.containerUri - }); - } - - /** - * Convert DB entity to JSON object - */ - entityToObject(entity: any) { - return entity; - } - - /** - * Transforms 'idField' into MongoDB's '_id' - */ - beforeSaveTransformID(entity: any, idField: any) { - return entity; - } - - /** - * Transforms MongoDB's '_id' into user defined 'idField' - */ - afterRetrieveTransformID(entity: any, idField: any) { - return entity; - } -} - -export default LdpAdapter; diff --git a/src/middleware/packages/ldp/binary/fs-adapter.ts b/src/middleware/packages/ldp/adapters/fs-binary-adapter.ts similarity index 92% rename from src/middleware/packages/ldp/binary/fs-adapter.ts rename to src/middleware/packages/ldp/adapters/fs-binary-adapter.ts index 3d0c167f9..caaf2d646 100644 --- a/src/middleware/packages/ldp/binary/fs-adapter.ts +++ b/src/middleware/packages/ldp/adapters/fs-binary-adapter.ts @@ -7,9 +7,8 @@ import urlJoin from 'url-join'; import { Errors, ServiceBroker } from 'moleculer'; import { v4 as uuidv4 } from 'uuid'; import { AdapterInterface } from '@semapps/triplestore/adapters/base.ts'; -import BaseBinaryAdapter from './base-adapter.ts'; import { getDatasetFromUri, getSlugFromUri } from '../utils.ts'; -import { Binary } from '../types.ts'; +import { Binary, BinaryAdapterInterface } from '../types.ts'; const { MoleculerError } = Errors; @@ -32,26 +31,25 @@ const streamToFile = (inputStream: Readable, filePath: string, maxSize: string | }); }; -interface FsBinaryAdapterSettings { - rootDir: string; - baseUrl: string; - maxSize: string | number; - tripleStoreAdapter: AdapterInterface; -} +const createDirectoryIfNotExist = (dirPath: string): void => { + if (!fs.existsSync(dirPath)) { + process.umask(0); + fs.mkdirSync(dirPath, { recursive: true, mode: 0o0777 }); + } +}; -export class FsBinaryAdapter extends BaseBinaryAdapter { +class FsBinaryAdapter implements BinaryAdapterInterface { name: 'filesystem'; private settings: FsBinaryAdapterSettings; constructor(settings: FsBinaryAdapterSettings) { - super(); this.name = 'filesystem'; this.settings = settings; } async init({ broker } = { broker: ServiceBroker }) { - this.createDirectoryIfNotExist(this.settings.rootDir); + createDirectoryIfNotExist(this.settings.rootDir); // Temporary solution. The adapter should be initialized through the TripleStoreService await this.settings.tripleStoreAdapter.init({ broker }); @@ -59,7 +57,7 @@ export class FsBinaryAdapter extends BaseBinaryAdapter { async storeBinary(stream: Readable, mimeType: string, dataset: string): Promise { const dirPath = path.join(this.settings.rootDir, dataset); - this.createDirectoryIfNotExist(dirPath); + createDirectoryIfNotExist(dirPath); // Replace with this.createNamedGraph() ? const uuid = uuidv4(); @@ -166,13 +164,13 @@ export class FsBinaryAdapter extends BaseBinaryAdapter { const dataset = getDatasetFromUri(uri); return path.join(this.settings.rootDir, dataset!, uuid); } +} - private createDirectoryIfNotExist(path: string): void { - if (!fs.existsSync(path)) { - process.umask(0); - fs.mkdirSync(path, { recursive: true, mode: 0o0777 }); - } - } +interface FsBinaryAdapterSettings { + rootDir: string; + baseUrl: string; + maxSize: string | number; + tripleStoreAdapter: AdapterInterface; } export default FsBinaryAdapter; diff --git a/src/middleware/packages/ldp/binary/base-adapter.ts b/src/middleware/packages/ldp/binary/base-adapter.ts deleted file mode 100644 index 659b44928..000000000 --- a/src/middleware/packages/ldp/binary/base-adapter.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Readable } from 'stream'; -import { Binary } from '../types.ts'; - -export interface BinaryAdapterInterface { - name: string; - storeBinary(stream: Readable, mimeType: string, dataset: string): Promise; - isBinary(uri: string): Promise; - getBinary(uri: string): Promise; - deleteBinary(uri: string): Promise; -} - -abstract class BaseBinaryAdapter implements BinaryAdapterInterface { - abstract name: string; - - abstract storeBinary(stream: Readable, mimeType: string, dataset: string): Promise; - - abstract isBinary(uri: string): Promise; - - abstract getBinary(uri: string): Promise; - - abstract deleteBinary(uri: string): Promise; -} - -export default BaseBinaryAdapter; diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index a3cb19a01..c23f04840 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -15,9 +15,7 @@ import DisassemblyMixin from './mixins/disassembly.ts'; import SpecialEndpointMixin from './mixins/special-endpoint.ts'; import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; import defaultContainerOptions from './services/registry/defaultOptions.ts'; -import BaseBinaryAdapter from './binary/base-adapter.ts'; -import FsBinaryAdapter from './binary/fs-adapter.ts'; -import LdpAdapter from './adapter.ts'; +import FsBinaryAdapter from './adapters/fs-binary-adapter.ts'; export * from './utils.ts'; export * from './types.ts'; @@ -39,7 +37,5 @@ export { SpecialEndpointMixin, OrphanFilesDeletionMixin, defaultContainerOptions, - LdpAdapter, - BaseBinaryAdapter, FsBinaryAdapter }; diff --git a/src/middleware/packages/ldp/tsconfig.json b/src/middleware/packages/ldp/tsconfig.json index 7a8c523f2..5d319abd1 100644 --- a/src/middleware/packages/ldp/tsconfig.json +++ b/src/middleware/packages/ldp/tsconfig.json @@ -6,5 +6,5 @@ "outDir": "dist", "rootDir": "./" }, - "include": ["*"] + "include": ["*", "adapters/ldp-adapter.ts"] } diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index e132e5321..9c2c45c00 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -1,3 +1,4 @@ +import { Readable } from 'stream'; import { WacPermissionObject, WacPermissionFunction } from '@semapps/webacl'; export interface ControlledActions { @@ -39,3 +40,11 @@ export interface Binary { size: number; time: Date; } + +export interface BinaryAdapterInterface { + name: string; + storeBinary(stream: Readable, mimeType: string, dataset: string): Promise; + isBinary(uri: string): Promise; + getBinary(uri: string): Promise; + deleteBinary(uri: string): Promise; +} diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index 3c149ccec..ab09a1f07 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -51,7 +51,7 @@ describe('Binary handling of LDP server', () => { expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); }); - test('Get binary', async () => { + test('Get binary (via Moleculer action)', async () => { binary = await alice.call('ldp.binary.get', { resourceUri: fileUri }); expect(binary).toMatchObject({ @@ -62,7 +62,7 @@ describe('Binary handling of LDP server', () => { }); }); - test('Get container', async () => { + test('Get container (via API)', async () => { await expect(alice.fetch(containerUri)).resolves.toMatchObject({ json: { type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), @@ -93,6 +93,22 @@ describe('Binary handling of LDP server', () => { expect(body).toContain('PNG'); }); + test('Get image as resource (via API)', async () => { + const { json } = await alice.fetch(fileUri, { + headers: new fetch.Headers({ Accept: 'application/ld+json' }) + }); + + expect(json).toMatchObject({ + id: fileUri, + type: expect.arrayContaining([ + 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', + 'https://www.w3.org/ns/iana/media-types/image/png#Resource' + ]), + 'stat:size': '3181', + 'stat:mtime': binary.time.toISOString() + }); + }); + test('Get image as resource (via Moleculer action)', async () => { await expect(alice.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ id: fileUri, @@ -105,7 +121,7 @@ describe('Binary handling of LDP server', () => { }); }); - test('Delete image', async () => { + test('Delete image (via API)', async () => { await expect( alice.fetch(fileUri, { method: 'DELETE' From 49fa206f698805833b629242942388c6ea479492 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 10:39:33 +0100 Subject: [PATCH 131/165] Add NgBinaryAdapter --- .../ldp/adapters/ng-binary-adapter.ts | 102 ++++++++++++++++++ src/middleware/packages/ldp/types.ts | 2 +- 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/middleware/packages/ldp/adapters/ng-binary-adapter.ts diff --git a/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts b/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts new file mode 100644 index 000000000..ca8b6ce06 --- /dev/null +++ b/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts @@ -0,0 +1,102 @@ +import ng from 'nextgraph'; +import { Readable } from 'stream'; +import urlJoin from 'url-join'; +import { ServiceBroker } from 'moleculer'; +import { AdapterInterface } from '@semapps/triplestore/adapters/base.ts'; +import { getDatasetFromUri, getSlugFromUri } from '../utils.ts'; +import { Binary, BinaryAdapterInterface } from '../types.ts'; + +const streamToString = (stream: Readable) => { + let res: string = ''; + return new Promise((resolve, reject) => { + stream.on('data', (chunk: Buffer) => { + res += chunk; + return res; + }); + stream.on('error', (err: Error) => reject(err)); + stream.on('end', () => resolve(res)); + }); +}; + +class NgBinaryAdapter implements BinaryAdapterInterface { + name: 'nextgraph'; + + private settings: NgBinaryAdapterSettings; + + constructor(settings: NgBinaryAdapterSettings) { + this.name = 'nextgraph'; + this.settings = settings; + } + + async init({ broker } = { broker: ServiceBroker }) { + // Temporary solution. The adapter should be initialized through the TripleStoreService + await this.settings.ngAdapter.init({ broker }); + } + + async storeBinary(stream: Readable, mimeType: string, dataset: string): Promise { + const session = await this.settings.ngAdapter.openSession(dataset); + + const fileContent = streamToString(stream); + + const uuid = await ng.file_put_to_private_store(session.session_id, fileContent, mimeType); + + await this.settings.ngAdapter.closeSession(session); + + return urlJoin(this.settings.baseUrl, dataset, uuid); + } + + async isBinary(uri: string): Promise { + const uuid = getSlugFromUri(uri)!; + + return uuid.startsWith('did:ng:j:'); + } + + async getBinary(uri: string): Promise { + const uuid = getSlugFromUri(uri)!; + const dataset = getDatasetFromUri(uri); + + const session = await this.settings.ngAdapter.openSession(dataset); + + let content: string; + let buffers: Buffer[] = []; + let metadata: NgFileMeta; + + await ng.file_get_from_private_store(session.session_id, uuid, async (blob: any) => { + if (blob.V0.FileMeta) { + metadata = blob.V0.FileMeta; + } else if (blob.V0.FileBinary) { + if (blob.V0.FileBinary.byteLength > 0) { + buffers.push(blob.V0.FileBinary); + } + } else if (blob.V0 === 'EndOfStream') { + content = Buffer.concat(buffers).toString('utf8'); // See if we need encoding + } + }); + + await this.settings.ngAdapter.closeSession(session); + + return { + file: content, + mimeType: metadata.content_type, + size: metadata.size, + time: undefined // NextGraph does not save creation time + }; + } + + async deleteBinary(uri: string): Promise { + await this.settings.ngAdapter.deleteNamedGraph(uri); + } +} + +interface NgBinaryAdapterSettings { + baseUrl: string; + ngAdapter: AdapterInterface; +} + +// https://git.nextgraph.org/NextGraph/nextgraph-rs/src/commit/f5758d250f81a0c485744973268c4c946bdee8e1/engine/net/src/app_protocol.rs#L1225-L1228 +interface NgFileMeta { + content_type: string; + size: number; +} + +export default NgBinaryAdapter; diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index 9c2c45c00..e70c93949 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -38,7 +38,7 @@ export interface Binary { file: Buffer; mimeType: string; size: number; - time: Date; + time?: Date; } export interface BinaryAdapterInterface { From 224e05b50d0d324acef380895f68cb715e58e6e5 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 11:42:42 +0100 Subject: [PATCH 132/165] Add migration tool --- .../ldp/services/binary/actions/store.ts | 7 +- .../ldp/services/container/actions/post.ts | 2 +- src/middleware/packages/migration/2-0-0.ts | 116 ++++++++++++++---- .../packages/migration/package.json | 1 + 4 files changed, 97 insertions(+), 29 deletions(-) diff --git a/src/middleware/packages/ldp/services/binary/actions/store.ts b/src/middleware/packages/ldp/services/binary/actions/store.ts index 851f05170..69f22cff7 100644 --- a/src/middleware/packages/ldp/services/binary/actions/store.ts +++ b/src/middleware/packages/ldp/services/binary/actions/store.ts @@ -3,12 +3,13 @@ import { ActionSchema } from 'moleculer'; const StoreAction = { visibility: 'public', params: { - file: { type: 'object', optional: true } + stream: { type: 'object' }, + mimeType: { type: 'string' } }, async handler(ctx) { - const { file } = ctx.params; + const { stream, mimeType } = ctx.params; - const resourceUri = await this.settings.adapter.storeBinary(file.readableStream, file.mimetype, ctx.meta.dataset); + const resourceUri = await this.settings.adapter.storeBinary(stream, mimeType, ctx.meta.dataset); return resourceUri; } diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 2c2d04f52..a67e309b2 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -84,7 +84,7 @@ const PostAction = { let resourceUri: string; if (file) { - resourceUri = await ctx.call('ldp.binary.store', { file }); + resourceUri = await ctx.call('ldp.binary.store', { stream: file.readableStream, mimeType: file.mimetype }); } else { resourceUri = await ctx.call('triplestore.named-graph.create', { baseUrl: await ctx.call('solid-storage.getBaseUrl'), diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index c9640f15b..56c69cd5c 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -1,4 +1,7 @@ +import path from 'path'; +import fs from 'fs'; import { ServiceSchema } from 'moleculer'; +import { IBindings } from 'sparqljson-parse'; import urlJoin from 'url-join'; import { Account } from '@semapps/auth'; import { arrayOf } from '@semapps/ldp'; @@ -11,12 +14,12 @@ export default { name: 'migration-2-0-0', mixins: [MigrationService], settings: { - baseUrl: undefined + baseUrl: undefined, + baseDir: undefined }, created() { - if (!this.settings.baseUrl) { - throw new Error('The baseUrl setting is mandatory'); - } + if (!this.settings.baseUrl) throw new Error('The baseUrl setting is mandatory'); + if (!this.settings.baseDir) throw new Error('The baseDir setting is mandatory'); }, actions: { migrate: { @@ -40,6 +43,7 @@ export default { await this.actions.migrateCurrentPredicate({ dataset }, { parentCtx: ctx }); await this.actions.migratePseudoIds({ dataset }, { parentCtx: ctx }); await this.actions.attachAllContainersToRootContainer({ dataset }, { parentCtx: ctx }); + await this.actions.migrateBinaries({ dataset }, { parentCtx: ctx }); await this.actions.migrateSingleResourcesContainer( { @@ -247,32 +251,38 @@ export default { webId: 'system' }); - const baseUrl = await ctx.call('solid-storage.getBaseUrl'); - newResourceUri = await ctx.call('triplestore.named-graph.create', { baseUrl }); + if (resource['@type'] === 'http://semapps.org/ns/core#File') { + // Binaries will be moved in the migrateBinaries action below + // We don't want to migrate them twice because the RedirectService would not work + this.logger.info(`Resource ${oldResourceUri} is a binary, skipping...`); + } else { + const baseUrl = await ctx.call('solid-storage.getBaseUrl'); + newResourceUri = await ctx.call('triplestore.named-graph.create', { baseUrl }); - await ctx.call('triplestore.insert', { - resource: this.changeId(resource, oldResourceUri, newResourceUri), - graphName: newResourceUri, - webId: 'system' - }); + await ctx.call('triplestore.insert', { + resource: this.changeId(resource, oldResourceUri, newResourceUri), + graphName: newResourceUri, + webId: 'system' + }); - await ctx.call('redirect.set', { oldUri: oldResourceUri, newUri: newResourceUri }); + await ctx.call('redirect.set', { oldUri: oldResourceUri, newUri: newResourceUri }); - // Replace all references to resource with new URI - await this.actions.updateReferences({ oldUri: oldResourceUri, newUri: newResourceUri }, { parentCtx: ctx }); + // Replace all references to resource with new URI + await this.actions.updateReferences({ oldUri: oldResourceUri, newUri: newResourceUri }, { parentCtx: ctx }); - this.logger.info(`Deleting resource ${oldResourceUri} from default graph...`); + this.logger.info(`Deleting resource ${oldResourceUri} from default graph...`); - // Delete resource (orphan blank nodes will be deleted at the end) - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - <${oldResourceUri}> ?p1 ?s1 . - } - `, - webId: 'system' - }); + // Delete resource (orphan blank nodes will be deleted at the end) + await ctx.call('triplestore.update', { + query: ` + DELETE + WHERE { + <${oldResourceUri}> ?p1 ?s1 . + } + `, + webId: 'system' + }); + } } return newResourceUri; @@ -487,6 +497,9 @@ export default { } } }, + /** + * Must be called *after* the migrateAllContainers action + */ attachAllContainersToRootContainer: { async handler(ctx) { const { dataset } = ctx.params; @@ -501,6 +514,59 @@ export default { } } } + }, + /** + * Must be called *after* the migrateAllContainers action + */ + migrateBinaries: { + async handler(ctx) { + const { dataset } = ctx.params; + ctx.meta.dataset = dataset || ctx.meta.dataset; + + // Files have not been moved to the named graph (we skipped them in the migrateResource action) + const results: IBindings[] = await ctx.call('triplestore.query', { + query: ` + PREFIX semapps: + SELECT ?fileUri ?localPath ?mimeType + WHERE { + ?fileUri a semapps:File . + ?fileUri semapps:localPath ?localPath . + ?fileUri semapps:mimeType ?mimeType . + } + `, + webId: 'system' + }); + + for (const result of results) { + const oldFileUri = result.fileUri.value; + const localPath = result.localPath.value; + const mimeType = result.mimeType.value; + + this.logger.info(`Migrating file ${oldFileUri}...`); + + const oldFilePath = path.join(this.settings.baseDir, localPath); + const stream = fs.createReadStream(oldFilePath); + + const newFileUri = await ctx.call('ldp.binary.store', { stream, mimeType }); + + await ctx.call('redirect.set', { oldUri: oldFileUri, newUri: newFileUri }); + + await this.actions.updateReferences({ oldUri: oldFileUri, newUri: newFileUri }, { parentCtx: ctx }); + + fs.unlinkSync(oldFilePath); + + // Delete the old file from the default graph + await ctx.call('triplestore.update', { + query: ` + DELETE + WHERE { + <${oldFileUri}> ?p1 ?s1 . + } + `, + webId: 'system' + }); + } + } } }, methods: { diff --git a/src/middleware/packages/migration/package.json b/src/middleware/packages/migration/package.json index 58d84573d..7ab025516 100644 --- a/src/middleware/packages/migration/package.json +++ b/src/middleware/packages/migration/package.json @@ -10,6 +10,7 @@ "@semapps/middlewares": "1.2.0", "@semapps/webacl": "1.2.0", "moleculer-web": "^0.10.0-beta1", + "sparqljson-parse": "^1.5.1", "url-join": "^4.0.1", "ioredis": "^4.27.0" }, From 2c2a32c14dc5f79522bb75ffdb2cb8c992b695ab Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 15:41:48 +0100 Subject: [PATCH 133/165] Add documentation --- website/docs/middleware/ldp/binary.md | 97 +++++++++++++++++++++++++++ website/sidebars.js | 1 + 2 files changed, 98 insertions(+) create mode 100644 website/docs/middleware/ldp/binary.md diff --git a/website/docs/middleware/ldp/binary.md b/website/docs/middleware/ldp/binary.md new file mode 100644 index 000000000..2d22d3e3f --- /dev/null +++ b/website/docs/middleware/ldp/binary.md @@ -0,0 +1,97 @@ +--- +title: LdpBinaryService +--- + +This service is automatically created by the [LdpService](index) to take care of non-RDF (binary) resources. It relies essentially on an [adapter](#adapters), that take care of the actual storage and retrieval of the binaries. + +## Settings + +| Property | Type | Default | Description | +| --------- | --------------- | ------------ | ------------------------------------------------- | +| `adapter` | `BinaryAdapter` | **required** | The adapter that will store and retrieve binaries | + +## Actions + +The following service actions are available: + +### `store` + +This action stores a provided binary (as a stream). It uses the `dataset` provided in the context metadata. + +##### Parameters + +| Property | Type | Default | Description | +| ---------- | ---------------- | ------------ | ----------------------- | +| `stream` | `ReadableStream` | **required** | Binary to store | +| `mimeType` | `String` | **required** | MIME-Type of the binary | + +### `get` + +Get a binary + +##### Parameters + +| Property | Type | Default | Description | +| ------------- | -------- | ------------ | ------------------------- | +| `resourceUri` | `String` | **required** | URI of binary to retrieve | + +##### Return values + +A Binary object with the following properties + +| Property | Type | Description | +| ---------- | -------- | ----------------------------------------------------------- | +| `file` | `String` | The content of the binary | +| `mimeType` | `String` | The MIME-Type of the binary | +| `size` | `Number` | The size of the binary, in bytes | +| `time` | `Date` | The date and time when the binary was stored (if available) | + +### `delete` + +Delete the provided binary + +##### Parameters + +| Property | Type | Default | Description | +| ------------- | -------- | ------------ | ----------------------- | +| `resourceUri` | `String` | **required** | URI of binary to delete | + +### `isBinary` + +Detects if an URI is a binary + +##### Parameters + +| Property | Type | Default | Description | +| ------------- | -------- | ------------ | ------------- | +| `resourceUri` | `String` | **required** | URI of binary | + +##### Return values + +True if the provided URI if a binary + +## Adapters + +### FsBinaryAdapter + +This adapter stores files in the file system. A sub-directory is created for every dataset. The binary meta data are stored in a triple store. + +#### Settings + +| Property | Type | Default | Description | +| -------------------- | -------------------- | ------------ | --------------------------------------------------------- | +| `rootDir` | `String` | **required** | The root directory where the binaries will be persisted | +| `baseUrl` | `String` | **required** | The base URL of the server | +| `maxSize` | `String` or `Number` | **required** | The max size of files (in bytes or human-readable string) | +| `tripleStoreAdapter` | `TripleStoreAdapter` | **required** | The adapter to store meta data in a triple store | + +### NgBinaryAdapter + +This adapter stores files in [NextGraph](https://nextgraph.org). + +#### Settings + +| Property | Type | Default | Description | +| ----------- | -------------------- | ------------ | ---------------------------------------------------- | +| `baseUrl` | `String` | **required** | The base URL of the server | +| `ngAdapter` | `TripleStoreAdapter` | **required** | The NextGraph adapter used by the TripleStoreService | diff --git a/website/sidebars.js b/website/sidebars.js index 6cd9ecafa..23d1359ef 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -57,6 +57,7 @@ module.exports = { 'middleware/ldp/container', 'middleware/ldp/link-header', 'middleware/ldp/registry', + 'middleware/ldp/binary', 'middleware/ldp/permissions', 'middleware/ldp/controlled-container', 'middleware/ldp/controlled-resource', From 43e2bdd1aab22b1e3017a2e08ab7507ced698618 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 15:43:35 +0100 Subject: [PATCH 134/165] Fix and improve docs --- website/blog/2019-09-25-semapps-news-1.md | 36 +- website/docs/contribute/style-guide.md | 4 +- .../docs/middleware/ldp/image-processor.md | 14 +- website/docs/middleware/ldp/index.md | 40 +- .../middleware/ldp/orphan-files-deletion.md | 6 +- website/docs/middleware/solid/index.md | 1 - website/docs/middleware/solid/type-indexes.md | 2 +- website/docs/middleware/webhooks.md | 19 +- website/docusaurus.config.js | 6 +- website/package.json | 16 +- website/sidebars.js | 2 +- website/yarn.lock | 9728 ++++++++++------- 12 files changed, 6044 insertions(+), 3830 deletions(-) diff --git a/website/blog/2019-09-25-semapps-news-1.md b/website/blog/2019-09-25-semapps-news-1.md index 97caede2d..e9981e2fa 100644 --- a/website/blog/2019-09-25-semapps-news-1.md +++ b/website/blog/2019-09-25-semapps-news-1.md @@ -34,21 +34,22 @@ It is now possible to deploy in a few minutes an ActivityPub server based on Sem #### Jérémy Dufraisse has joined us -New to web development and passionate about cooperation in all domains, Jeremy joins the SemApps team, aiming to get more involved, especially in programming this software's code. +New to web development and passionate about cooperation in all domains, Jeremy joins the SemApps team, aiming to get more involved, especially in programming this software's code. Member of the Colibris core team in Lorient, he's already working on the first version of the Paths of Transition's platform, one of SemApps ecosystem's projects. #### Work on governance By implementing the principles of "election by consent", the SemApps team was not only able to define several roles, regarding to the effective needs of its organization, but also to fill the roles according to the competencies that were identified. -Among the 13 roles that came out, the following ones deserve a particular attention : -* Onboarding / Inclusion / Welcoming role - Gabriel HENRY -* Technical partnership / Interoperability role : Simon LOUVET -* Communication role : Pierre BOUVIER-MULLER -* Information gardening/Informational heritage role : Guillaume ROUYER -* The Virtual Assembly's coordination role : Garbriel HENRY +Among the 13 roles that came out, the following ones deserve a particular attention : -Thanks to an agile governance, these roles will benefits from a regular review, in order to be reajusted if needed. +- Onboarding / Inclusion / Welcoming role - Gabriel HENRY +- Technical partnership / Interoperability role : Simon LOUVET +- Communication role : Pierre BOUVIER-MULLER +- Information gardening/Informational heritage role : Guillaume ROUYER +- The Virtual Assembly's coordination role : Garbriel HENRY + +Thanks to an agile governance, these roles will benefits from a regular review, in order to be reajusted if needed. #### Work on economic sustainability @@ -74,11 +75,12 @@ SemApps has therefore helped to reach phase 2 CFD technology without waiting for #### Meetup Interoperability -Following the SemApps residency in El Capitan during June, the Virtual Assembly and Startin'blox showed their ambition to cooperate more closely. This resulted in the co-organization of [a meetup on September 15th at Les Grands Voisins](https://www.facebook.com/events/609531263097830/). We had excellent feedbacks, met new people and even new contributors ! Even if there were not so many participants, they all grasped the message we wanted to convey. We know how to mediate better and better on our subjects ! A big thank you to all the interveners and volunteer contributors (an incredible team <3) present at the event ! +Following the SemApps residency in El Capitan during June, the Virtual Assembly and Startin'blox showed their ambition to cooperate more closely. This resulted in the co-organization of [a meetup on September 15th at Les Grands Voisins](https://www.facebook.com/events/609531263097830/). We had excellent feedbacks, met new people and even new contributors ! Even if there were not so many participants, they all grasped the message we wanted to convey. We know how to mediate better and better on our subjects ! A big thank you to all the interveners and volunteer contributors (an incredible team) present at the event ! #### Publication of several SemApps presentation videos! + You will find the May 20th meeting videos on [the Virtual Assembly's Youtube channel](https://www.youtube.com/channel/UCg7sYh_Y8cHFT4s82K4SVmA/), with English subtitles in option. -We have also just published [the video](https://youtu.be/wjQSKP4DWmM) of a presentation we made at UTT about SemApps and peer-to-peer architectures. Here is [a document](https://pad.lescommuns.org/IRs8_6lIS_iucxqiPSXwNA?both) summarizing these interventions, as well as [the Power-point](https://docs.google.com/presentation/d/1lVUx4URcKkV1Z3G4EticbH1uCV_NwtVBlYo5cvqUOOc/edit?usp=sharing) on which Guillaume and Sébastien based their presentation. +We have also just published [the video](https://youtu.be/wjQSKP4DWmM) of a presentation we made at UTT about SemApps and peer-to-peer architectures. Here is [a document](https://pad.lescommuns.org/IRs8_6lIS_iucxqiPSXwNA?both) summarizing these interventions, as well as [the Power-point](https://docs.google.com/presentation/d/1lVUx4URcKkV1Z3G4EticbH1uCV_NwtVBlYo5cvqUOOc/edit?usp=sharing) on which Guillaume and Sébastien based their presentation. ## And in the ecosystem... @@ -108,15 +110,13 @@ Mid-August, Inrupt announces the release of the Beta version of its [solid serve Here are two working groups where it would be nice to have representatives from our ecosystem in the Solid community : -* [The Interoperability panel](https://github.com/solid/data-interoperability-panel) every Tuesday at 4PM. -* [The Authorization panel](https://github.com/solid/authorization-panel) every Wednesday at 4PM. -If you want to share information about the Solid ecosystem, there is a dedicated channel on Hubl "Solid Watch" :) +- [The Interoperability panel](https://github.com/solid/data-interoperability-panel) every Tuesday at 4PM. +- [The Authorization panel](https://github.com/solid/authorization-panel) every Wednesday at 4PM. + If you want to share information about the Solid ecosystem, there is a dedicated channel on Hubl "Solid Watch" :) -#### Virtual Assembly's donation campaign +#### Virtual Assembly's donation campaign The Virtual Assembly's organization mainly relies on volunteering. In order to maintain its sustainability, its research and development activities as well as its independance, we count on your donations. The more you contribute regularly, the more our association strengthens economically. In this way, we encourage you to choose monthly donations rather than ponctual ones. In any case, we will be gratefull to benefit from your help :) -* I would like to make a [regular donation](https://www.virtual-assembly.org/faire-un-don/) -* I would like to make a [one-time donation](https://www.virtual-assembly.org/faire-un-don/) - - +- I would like to make a [regular donation](https://www.virtual-assembly.org/faire-un-don/) +- I would like to make a [one-time donation](https://www.virtual-assembly.org/faire-un-don/) diff --git a/website/docs/contribute/style-guide.md b/website/docs/contribute/style-guide.md index f8aa19ff5..79ecb124f 100644 --- a/website/docs/contribute/style-guide.md +++ b/website/docs/contribute/style-guide.md @@ -7,7 +7,7 @@ You can write content using [GitHub-flavored Markdown syntax](https://github.git ## Markdown Syntax To serve as an example page when styling markdown based Docusaurus sites. - + ## Headers # H1 - Create the best documentation @@ -67,7 +67,7 @@ Strikethrough uses two tildes. ~~Scratch this.~~ Or leave it empty and use the [link text itself]. -URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or and sometimes example.com (but not on Github, for example). +URLs and URLs in angle brackets will automatically get turned into links. Some text to show that the reference links can follow later. diff --git a/website/docs/middleware/ldp/image-processor.md b/website/docs/middleware/ldp/image-processor.md index 6fd6185c6..359531f45 100644 --- a/website/docs/middleware/ldp/image-processor.md +++ b/website/docs/middleware/ldp/image-processor.md @@ -32,13 +32,13 @@ module.exports = { All settings relative to this mixin should be set in a `imageProcessor` key. -| Property | Type | Default | Description | -| ----------- | --------- | ----------------------- | --------------------------------------------------------------------------------------- | -| `maxWidth` | `Integer` | 1900 | Reduce all images whose width is larger than this number | -| `maxHeight` | `Integer` | 1000 | Reduce all images whose height is larger than this number | -| `jpeg` | `Object` | { quality: 85 } | See sharp [jpeg](https://sharp.pixelplumbing.com/api-output#jpeg) for available options | -| `png` | `Object` | { compressionLevel: 8 } | See sharp [png](https://sharp.pixelplumbing.com/api-output#png) for available options | -| `webp` | `Object` | { quality: 85 } | See sharp [webp](https://sharp.pixelplumbing.com/api-output#webp) for available options | +| Property | Type | Default | Description | +| ----------- | --------- | ------------------------- | --------------------------------------------------------------------------------------- | +| `maxWidth` | `Integer` | 1900 | Reduce all images whose width is larger than this number | +| `maxHeight` | `Integer` | 1000 | Reduce all images whose height is larger than this number | +| `jpeg` | `Object` | `{ quality: 85 }` | See sharp [jpeg](https://sharp.pixelplumbing.com/api-output#jpeg) for available options | +| `png` | `Object` | `{ compressionLevel: 8 }` | See sharp [png](https://sharp.pixelplumbing.com/api-output#png) for available options | +| `webp` | `Object` | `{ quality: 85 }` | See sharp [webp](https://sharp.pixelplumbing.com/api-output#webp) for available options | ### Actions diff --git a/website/docs/middleware/ldp/index.md b/website/docs/middleware/ldp/index.md index 9467b2c39..31350cfac 100644 --- a/website/docs/middleware/ldp/index.md +++ b/website/docs/middleware/ldp/index.md @@ -23,12 +23,14 @@ This package allows you to setup [LDP](https://www.w3.org/TR/ldp-primer/) contai - [LdpContainerService](container.md) - [LdpLinkHeaderService](link-header.md) - [LdpRegistryService](registry.md) +- LdpRemoteService _(internal)_ - LdpApiService _(internal)_ - LdpCacheService _(internal)_ ## Mixins - [ControlledContainerMixin](controlled-container) +- [ControlledResourceMixin](controlled-resource) - [DocumentTaggerMixin](document-tagger.md) - [ImageProcessorMixin](image-processor.md) - [DereferenceMixin](dereference.md) @@ -65,31 +67,27 @@ module.exports = { ## Settings -| Property | Type | Default | Description | -| -------------------------- | ---------- | --------------------------- | ------------------------------------------------------------------------ | -| `baseUrl` | `String` | **required** | Base URL of the LDP server | -| `containers` | `[Object]` | **required** | List of containers to set up, with their options (see below) | -| `defaultContainerOptions` | `[Object]` | | Default options for all containers (see below) | -| `mirrorGraphName` | `String` | "http://semapps.org/mirror" | Name of the RDF graph where to store mirrored data | -| `podProvider` | `Boolean` | false | Set to true if your server is a POD provider | -| `preferredViewForResource` | `Function` | | Function called to generate a redirect to the preferred view (see below) | -| `allowSlugs` | `Boolean` | true | If false, slugs will be ignored and UUIDs will be used everywhere | -| `binary.maxSize` | `String` | "50Mb" | The maximum size allowed for uploaded binaries | +| Property | Type | Default | Description | +| -------------------------- | ---------- | ------------ | ------------------------------------------------------------------------ | +| `baseUrl` | `String` | **required** | Base URL of the LDP server | +| `containers` | `[Object]` | | List of containers to set up, with their options (see below) | +| `defaultContainerOptions` | `[Object]` | | Default options for all containers (see below) | +| `preferredViewForResource` | `Function` | | Function called to generate a redirect to the preferred view (see below) | +| `allowSlugs` | `Boolean` | true | If false, slugs will be ignored and UUIDs will be used everywhere | ## Container options The following options can be set for each container, or they can be set in the `defaultContainerOptions` settings. -| Property | Type | Default | Description | -| ------------------------- | --------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | -| `accept` | `String` | "text/turtle" | Type to return (`application/ld+json`, `text/turtle` or `application/n-triples`) | -| `types` | `Array` | | RDF classes accepted in this container. This is not enforced but used by some services to identify containers. | -| `excludeFromMirror` | `Boolean` | false | If true, other servers will not be able to [mirror](../sync/mirror) this container. | -| `activateTombstones` | `Boolean` | true | If true, and if the ActivityPubService setting is also true, [Tombstones](https://www.w3.org/TR/activitypub/#delete-activity-outbox) will replace deleted resources. | -| `permissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions of the container itself. For the permissions object shape, see [`webacl.resource.addRights`](resource.md#addrights) action. | -| `newResourcesPermissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions for new resources. [See the docs here](../webacl/index.md#default-permissions-for-new-resources) | | -| `preferredView` | `String` | | A part of the final URL for redirecting to the preferred view of the resource (see below). | -| `controlledActions` | `Object` | | Use custom actions instead of the LDP ones (post, list, get, create, put, patch, delete). Used by the [ControlledContainerMixin](controlled-container) | +| Property | Type | Default | Description | +| ------------------------- | --------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | +| `types` | `Array` | | RDF classes accepted in this container. This is not enforced but used by some services to identify containers. | +| `excludeFromMirror` | `Boolean` | false | If true, other servers will not be able to [mirror](../sync/mirror) this container. | +| `activateTombstones` | `Boolean` | true | If true, and if the ActivityPubService setting is also true, [Tombstones](https://www.w3.org/TR/activitypub/#delete-activity-outbox) will replace deleted resources. | +| `permissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions of the container itself. For the permissions object shape, see [`webacl.resource.addRights`](resource.md#addrights) action. | +| `newResourcesPermissions` | `Object \| (webId, ctx) => Permissions` | | If the WebACL service is activated, permissions for new resources. [See the docs here](../webacl/index.md#default-permissions-for-new-resources) | | +| `preferredView` | `String` | | A part of the final URL for redirecting to the preferred view of the resource (see below). | +| `controlledActions` | `Object` | | Use custom actions instead of the LDP ones (post, list, get, create, put, patch, delete). Used by the [ControlledContainerMixin](controlled-container) | ## API routes @@ -98,7 +96,7 @@ These catch-all routes are automatically added to the `ApiGateway` service. | Method | LDP resource | LDP container | | -------- | --------------------- | ---------------------- | | `GET` | `ldp.resource.get` | `ldp.container.get` | -| `POST` | `ldp.resource.post` | `ldp.container.post` | +| `POST` | | `ldp.container.post` | | `PUT` | `ldp.resource.put` | - | | `PATCH` | `ldp.resource.patch` | `ldp.container.patch` | | `DELETE` | `ldp.resource.delete` | `ldp.container.delete` | diff --git a/website/docs/middleware/ldp/orphan-files-deletion.md b/website/docs/middleware/ldp/orphan-files-deletion.md index 290fe6489..3b60ca074 100644 --- a/website/docs/middleware/ldp/orphan-files-deletion.md +++ b/website/docs/middleware/ldp/orphan-files-deletion.md @@ -32,6 +32,6 @@ module.exports = { All settings relative to this mixin should be set in a `orphanFilesDeletion` key. -| Property | Type | Default | Description | -| --------- | -------- | --------------------------------------------------- | ------------------------------------------------------------------------------------ | -| `cronJob` | `Object` | { time: "0 0 4 \* \* \*", timeZone: "Europe/Paris"} | Optional cronJob settings { time, timeZone }. Can be set to false to disable cronjob | +| Property | Type | Default | Description | +| --------- | -------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------ | +| `cronJob` | `Object` | `{ time: "0 0 4 \* \* \*", timeZone: "Europe/Paris"}` | Optional cronJob settings { time, timeZone }. Can be set to false to disable cronjob | diff --git a/website/docs/middleware/solid/index.md b/website/docs/middleware/solid/index.md index e6a37da4a..01ccb7967 100644 --- a/website/docs/middleware/solid/index.md +++ b/website/docs/middleware/solid/index.md @@ -8,7 +8,6 @@ This package handles standards related to the [Solid](https://solidproject.org/) - [PodService](pod.md) - [TypeIndexesService](type-indexes.md) -- [TypeRegistrationsService](type-registrations.md) - [NotificationsProviderService](notifications-provider.md) - [NotificationsListenerService](notifications-listener.md) diff --git a/website/docs/middleware/solid/type-indexes.md b/website/docs/middleware/solid/type-indexes.md index cee390bbf..9a7135a81 100644 --- a/website/docs/middleware/solid/type-indexes.md +++ b/website/docs/middleware/solid/type-indexes.md @@ -2,7 +2,7 @@ title: TypeIndexService --- -This service automatically create a public [TypeIndex](https://github.com/solid/type-indexes) after a user creation, and it attaches it to its WebID with the `solid:publicTypeIndex` predicate. It will also automatically [register a type](./type-registrations.md#register) for every [controlled LDP container](../ldp/controlled-container.md). +This service automatically create a public [TypeIndex](https://github.com/solid/type-indexes) after a user creation, and it attaches it to its WebID with the `solid:publicTypeIndex` predicate. It will also automatically register a type for every [controlled LDP container](../ldp/controlled-container.md). ## Actions diff --git a/website/docs/middleware/webhooks.md b/website/docs/middleware/webhooks.md index bf8d8c6fc..53ca70dbd 100644 --- a/website/docs/middleware/webhooks.md +++ b/website/docs/middleware/webhooks.md @@ -29,9 +29,8 @@ const { WebhooksService } = require('@semapps/webhooks'); module.exports = { mixins: [WebhooksService], settings: { - containerUri: "http://localhost:3000/webhooks/", - allowedActions: ['myAction'], - + containerUri: 'http://localhost:3000/webhooks/', + allowedActions: ['myAction'] }, actions: { async myAction(ctx) { @@ -39,17 +38,16 @@ module.exports = { // Handle stuff here... } } -} +}; ``` ## Settings -| Property | Type | Default | Description | -|------------------|---------------------|---------------------------------------------|-------------------------------------------------------------| -| `containerUri` | `String` | **required** | Container where the webhooks will be stored. | -| `allowedActions` | `Array` | **required** | Name of the webhook actions which can be used | -| `context` | `Array` or `Object` | { "@vocab": "http://semapps.org/ns/core#" } | JSON-LD context used when returning the webhook information | - +| Property | Type | Default | Description | +| ---------------- | ------------------- | --------------------------------------------- | ----------------------------------------------------------- | +| `containerUri` | `String` | **required** | Container where the webhooks will be stored. | +| `allowedActions` | `Array` | **required** | Name of the webhook actions which can be used | +| `context` | `Array` or `Object` | `{ "@vocab": "http://semapps.org/ns/core#" }` | JSON-LD context used when returning the webhook information | ## Use cases @@ -84,7 +82,6 @@ Authorization: Bearer XXX When you generate a webhook, you will receive an URI in response. You can then post JSON data to this webhook. It will be handled by the action(s) you defined. - ### Queuing incoming POSTs If you wish, you can use the [Bull](https://github.com/OptimalBits/bull) task manager to queue incoming POSTs and make sure no data is lost. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index d4246c762..5e75f911a 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -28,9 +28,9 @@ module.exports = { autoCollapseCategories: true } }, - prism: { - theme: require('prism-react-renderer/themes/shadesOfPurple') - }, + // prism: { + // theme: require('prism-react-renderer/themes/shadesOfPurple') + // }, colorMode: { defaultMode: 'light', disableSwitch: true diff --git a/website/package.json b/website/package.json index de7aca6ba..e1da88b7e 100644 --- a/website/package.json +++ b/website/package.json @@ -15,18 +15,18 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "^2.0.0-beta.0", - "@docusaurus/preset-classic": "^2.0.0-beta.0", - "@mui/icons-material": "^7.1.0", - "@mui/material": "^7.1.0", - "@mui/styles": "^7.1.0", + "@docusaurus/core": "^3.9.2", + "@docusaurus/plugin-content-blog": "^3.9.2", + "@docusaurus/preset-classic": "^3.9.2", + "@mui/icons-material": "^7.3.6", + "@mui/material": "^7.3.6", + "@mui/styles": "^6.4.8", "animate.css": "^4.1.1", "classnames": "^2.2.6", "docusaurus-plugin-sass": "^0.2.2", - "react": "^16.8.4", + "react": "^19.2.0", "react-animation-on-scroll": "^5.1.0", - "react-dom": "^16.8.4", + "react-dom": "^19.2.0", "react-material-ui-carousel": "^3.4.2", "sass": "^1.55.0" }, diff --git a/website/sidebars.js b/website/sidebars.js index 6cd9ecafa..3bc1037d6 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -76,7 +76,7 @@ module.exports = { }, items: [ 'middleware/solid/pod', - 'middleware/solid/type-index', + 'middleware/solid/type-indexes', 'middleware/solid/notifications-provider', 'middleware/solid/notifications-listener' ] diff --git a/website/yarn.lock b/website/yarn.lock index 997a03f7c..b42abb11b 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -2,205 +2,244 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz#025538b8a9564a9f3dd5bcf8a236d6951c76c7d1" - integrity sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg== +"@ai-sdk/gateway@2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@ai-sdk/gateway/-/gateway-2.0.18.tgz#7e81bdedddb7363af2c38d2cf7f34ac2d5e5eaa7" + integrity sha512-sDQcW+6ck2m0pTIHW6BPHD7S125WD3qNkx/B8sEzJp/hurocmJ5Cni0ybExg6sQMGo+fr/GWOwpHF1cmCdg5rQ== dependencies: - "@algolia/autocomplete-shared" "1.7.1" + "@ai-sdk/provider" "2.0.0" + "@ai-sdk/provider-utils" "3.0.18" + "@vercel/oidc" "3.0.5" -"@algolia/autocomplete-preset-algolia@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz#7dadc5607097766478014ae2e9e1c9c4b3f957c8" - integrity sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg== +"@ai-sdk/provider-utils@3.0.18": + version "3.0.18" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-3.0.18.tgz#fc7757ad7eb48a48ce1976da3025f0b9215b1aff" + integrity sha512-ypv1xXMsgGcNKUP+hglKqtdDuMg68nWHucPPAhIENrbFAI+xCHiqPVN8Zllxyv1TNZwGWUghPxJXU+Mqps0YRQ== dependencies: - "@algolia/autocomplete-shared" "1.7.1" - -"@algolia/autocomplete-shared@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74" - integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg== - -"@algolia/cache-browser-local-storage@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936" - integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA== - dependencies: - "@algolia/cache-common" "4.14.2" - -"@algolia/cache-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598" - integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg== + "@ai-sdk/provider" "2.0.0" + "@standard-schema/spec" "^1.0.0" + eventsource-parser "^3.0.6" -"@algolia/cache-in-memory@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24" - integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ== +"@ai-sdk/provider@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-2.0.0.tgz#b853c739d523b33675bc74b6c506b2c690bc602b" + integrity sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA== dependencies: - "@algolia/cache-common" "4.14.2" + json-schema "^0.4.0" -"@algolia/client-account@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16" - integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w== +"@ai-sdk/react@^2.0.30": + version "2.0.106" + resolved "https://registry.yarnpkg.com/@ai-sdk/react/-/react-2.0.106.tgz#ba80a5788bdc752dea519ec9d8d774d6706991d7" + integrity sha512-TU8ONNhm64GI7O60UDCcOz9CdyCp3emQwSYrSnq+QWBNgS8vDlRQ3ZwXyPNAJQdXyBTafVS2iyS0kvV+KXaPAQ== dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/client-search" "4.14.2" - "@algolia/transporter" "4.14.2" + "@ai-sdk/provider-utils" "3.0.18" + ai "5.0.106" + swr "^2.2.5" + throttleit "2.1.0" -"@algolia/client-analytics@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb" - integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ== +"@algolia/abtesting@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.11.0.tgz#e6561f2cb17978445eb8b8aff339ee7a2f985daa" + integrity sha512-a7oQ8dwiyoyVmzLY0FcuBqyqcNSq78qlcOtHmNBumRlHCSnXDcuoYGBGPN1F6n8JoGhviDDsIaF/oQrzTzs6Lg== dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/client-search" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" -"@algolia/client-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300" - integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q== +"@algolia/autocomplete-core@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz#702df67a08cb3cfe8c33ee1111ef136ec1a9e232" + integrity sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw== dependencies: - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" + "@algolia/autocomplete-plugin-algolia-insights" "1.19.2" + "@algolia/autocomplete-shared" "1.19.2" -"@algolia/client-personalization@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec" - integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw== +"@algolia/autocomplete-plugin-algolia-insights@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz#3584b625b9317e333d1ae43664d02358e175c52d" + integrity sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg== dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" + "@algolia/autocomplete-shared" "1.19.2" -"@algolia/client-search@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92" - integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw== - dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" +"@algolia/autocomplete-shared@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz#c0b7b8dc30a5c65b70501640e62b009535e4578f" + integrity sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w== + +"@algolia/client-abtesting@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.45.0.tgz#7e1984b02d58ce965bf190080b3ffa10c738ddbd" + integrity sha512-WTW0VZA8xHMbzuQD5b3f41ovKZ0MNTIXkWfm0F2PU+XGcLxmxX15UqODzF2sWab0vSbi3URM1xLhJx+bXbd1eQ== + dependencies: + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" + +"@algolia/client-analytics@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.45.0.tgz#4f58d6c1c8d43afeedfd8ef7b84b49e3e7cdff14" + integrity sha512-I3g7VtvG/QJOH3tQO7E7zWTwBfK/nIQXShFLR8RvPgWburZ626JNj332M3wHCYcaAMivN9WJG66S2JNXhm6+Xg== + dependencies: + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" + +"@algolia/client-common@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.45.0.tgz#c674f7f47a5f0013e3ab717929e51a6109af2dd2" + integrity sha512-/nTqm1tLiPtbUr+8kHKyFiCOfhRfgC+JxLvOCq471gFZZOlsh6VtFRiKI60/zGmHTojFC6B0mD80PB7KeK94og== + +"@algolia/client-insights@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.45.0.tgz#ca7128edec95da8217da76f867b8cd2c2a05f682" + integrity sha512-suQTx/1bRL1g/K2hRtbK3ANmbzaZCi13487sxxmqok+alBDKKw0/TI73ZiHjjFXM2NV52inwwcmW4fUR45206Q== + dependencies: + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" + +"@algolia/client-personalization@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.45.0.tgz#e674b76b4dd5a8e89d9f157cbc958d68fbeb1c60" + integrity sha512-CId/dbjpzI3eoUhPU6rt/z4GrRsDesqFISEMOwrqWNSrf4FJhiUIzN42Ac+Gzg69uC0RnzRYy60K1y4Na5VSMw== + dependencies: + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" + +"@algolia/client-query-suggestions@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.45.0.tgz#6bad2a7eaa7e1a6ecf1a7960c2056e08ee0302b6" + integrity sha512-tjbBKfA8fjAiFtvl9g/MpIPiD6pf3fj7rirVfh1eMIUi8ybHP4ovDzIaE216vHuRXoePQVCkMd2CokKvYq1CLw== + dependencies: + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" + +"@algolia/client-search@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.45.0.tgz#709f5fb2a13487fa6327b31306654a2c694c0fe9" + integrity sha512-nxuCid+Nszs4xqwIMDw11pRJPes2c+Th1yup/+LtpjFH8QWXkr3SirNYSD3OXAeM060HgWWPLA8/Fxk+vwxQOA== + dependencies: + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/logger-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee" - integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA== - -"@algolia/logger-console@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b" - integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g== +"@algolia/ingestion@1.45.0": + version "1.45.0" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.45.0.tgz#f99eb766a0cff112d65834ee1a43e08d18bc5f2a" + integrity sha512-t+1doBzhkQTeOOjLHMlm4slmXBhvgtEGQhOmNpMPTnIgWOyZyESWdm+XD984qM4Ej1i9FRh8VttOGrdGnAjAng== dependencies: - "@algolia/logger-common" "4.14.2" + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" -"@algolia/requester-browser-xhr@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2" - integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw== +"@algolia/monitoring@1.45.0": + version "1.45.0" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.45.0.tgz#09e7320973741f829badb5fa47c54cbc512bb0bc" + integrity sha512-IaX3ZX1A/0wlgWZue+1BNWlq5xtJgsRo7uUk/aSiYD7lPbJ7dFuZ+yTLFLKgbl4O0QcyHTj1/mSBj9ryF1Lizg== dependencies: - "@algolia/requester-common" "4.14.2" + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" -"@algolia/requester-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1" - integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg== +"@algolia/recommend@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.45.0.tgz#06dc022d85f8a0b6a93dd70c690a236d4ee745a3" + integrity sha512-1jeMLoOhkgezCCPsOqkScwYzAAc1Jr5T2hisZl0s32D94ZV7d1OHozBukgOjf8Dw+6Hgi6j52jlAdUWTtkX9Mg== + dependencies: + "@algolia/client-common" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" -"@algolia/requester-node-http@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115" - integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg== +"@algolia/requester-browser-xhr@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.45.0.tgz#0cb197014e2344a7f58aef245c10831597d23fdd" + integrity sha512-46FIoUkQ9N7wq4/YkHS5/W9Yjm4Ab+q5kfbahdyMpkBPJ7IBlwuNEGnWUZIQ6JfUZuJVojRujPRHMihX4awUMg== dependencies: - "@algolia/requester-common" "4.14.2" + "@algolia/client-common" "5.45.0" -"@algolia/transporter@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d" - integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ== +"@algolia/requester-fetch@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.45.0.tgz#df040b30f67e70b074e7a740874befd191bb6067" + integrity sha512-XFTSAtCwy4HdBhSReN2rhSyH/nZOM3q3qe5ERG2FLbYId62heIlJBGVyAPRbltRwNlotlydbvSJ+SQ0ruWC2cw== dependencies: - "@algolia/cache-common" "4.14.2" - "@algolia/logger-common" "4.14.2" - "@algolia/requester-common" "4.14.2" + "@algolia/client-common" "5.45.0" -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@algolia/requester-node-http@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.45.0.tgz#d96196d538d3ad5c25e3e21b469e92b19b442153" + integrity sha512-8mTg6lHx5i44raCU52APsu0EqMsdm4+7Hch/e4ZsYZw0hzwkuaMFh826ngnkYf9XOl58nHoou63aZ874m8AbpQ== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@algolia/client-common" "5.45.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.3.tgz#707b939793f867f5a73b2666e6d9a3396eb03151" - integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== - -"@babel/core@7.12.9": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.18.5", "@babel/core@^7.18.6": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" - integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.3" - "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.3" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.3" - "@babel/types" "^7.19.3" - convert-source-map "^1.7.0" +"@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== + +"@babel/core@^7.21.3", "@babel/core@^7.25.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.3.tgz#d7f4d1300485b4547cb6f94b27d10d237b42bf59" - integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== +"@babel/generator@^7.25.9", "@babel/generator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== dependencies: - "@babel/types" "^7.19.3" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" @@ -209,38 +248,38 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" - integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== - dependencies: - "@babel/compat-data" "^7.19.3" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" - integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" + integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.5" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== @@ -248,51 +287,38 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" + semver "^6.3.1" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" + lodash.debounce "^4.0.8" + resolve "^1.22.10" -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== +"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== dependencies: - "@babel/types" "^7.18.9" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": version "7.18.6" @@ -301,112 +327,112 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: - "@babel/types" "^7.18.6" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" -"@babel/helper-plugin-utils@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== -"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" +"@babel/helper-plugin-utils@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" - integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.19.1" - "@babel/types" "^7.19.0" - -"@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== dependencies: - "@babel/types" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== dependencies: - "@babel/types" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== dependencies: - "@babel/types" "^7.18.6" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" "@babel/helper-string-parser@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helper-wrap-function@^7.27.1": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" + integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" - integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" "@babel/highlight@^7.18.6": version "7.18.6" @@ -417,484 +443,421 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.8", "@babel/parser@^7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.3.tgz#8dd36d17c53ff347f9e55c328710321b49479a9a" - integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - -"@babel/plugin-proposal-async-generator-functions@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz#34f6f5174b688529342288cd264f80c9ea9fb4a7" - integrity sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== +"@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/types" "^7.28.5" -"@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz#373f6e2de0016f73caf8f27004f61d167743742a" + integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.3" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" - integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-object-rest-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== +"@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": +"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== +"@babel/plugin-syntax-jsx@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== +"@babel/plugin-syntax-typescript@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-private-property-in-object@^7.18.6": +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== +"@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== +"@babel/plugin-transform-block-scoping@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz#e0d3af63bd8c80de2e567e690a54e84d85eb16f6" + integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== +"@babel/plugin-transform-class-static-block@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852" + integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-create-class-features-plugin" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-jsx@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" - integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== +"@babel/plugin-transform-classes@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" + integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.4" -"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== +"@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" -"@babel/plugin-syntax-typescript@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== +"@babel/plugin-transform-exponentiation-operator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz#7cc90a8170e83532676cfa505278e147056e94fe" + integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" - integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-classes@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz#0e61ec257fba409c41372175e7c1e606dc79bb20" - integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A== +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== +"@babel/plugin-transform-logical-assignment-operators@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz#d028fd6db8c081dee4abebc812c2325e24a85b0e" + integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-destructuring@^7.18.13": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz#9e03bc4a94475d62b7f4114938e6c5c33372cbf5" - integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-modules-systemjs@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2" + integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" - integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" - integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== +"@babel/plugin-transform-object-rest-spread@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" + integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.4" -"@babel/plugin-transform-modules-systemjs@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz#5f20b471284430f02d9c5059d9b9a16d4b085a1f" - integrity sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A== +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888" - integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26" + integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" - integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-constant-elements@^7.17.12": - version "7.18.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz#edf3bec47eb98f14e84fa0af137fcc6aad8e0443" - integrity sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw== +"@babel/plugin-transform-react-constant-elements@^7.21.3": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz#6c6b50424e749a6e48afd14cf7b92f98cb9383f9" + integrity sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-react-display-name@^7.18.6": version "7.18.6" @@ -903,6 +866,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-react-display-name@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" + integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-react-jsx-development@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" @@ -910,6 +880,13 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" +"@babel/plugin-transform-react-jsx-development@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz#47ff95940e20a3a70e68ad3d4fcb657b647f6c98" + integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.27.1" + "@babel/plugin-transform-react-jsx@^7.18.6": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" @@ -921,6 +898,17 @@ "@babel/plugin-syntax-jsx" "^7.18.6" "@babel/types" "^7.19.0" +"@babel/plugin-transform-react-jsx@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz#1023bc94b78b0a2d68c82b5e96aed573bcfb9db0" + integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/types" "^7.27.1" + "@babel/plugin-transform-react-pure-annotations@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" @@ -929,678 +917,1180 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== +"@babel/plugin-transform-react-pure-annotations@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz#339f1ce355eae242e0649f232b1c68907c02e879" + integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-regenerator@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" + integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-runtime@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz#a3df2d7312eea624c7889a2dcd37fd1dfd25b2c6" - integrity sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA== +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - semver "^6.3.0" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== +"@babel/plugin-transform-runtime@^7.25.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17" + integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typescript@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz#441c5f9a4a1315039516c6c612fc66d5f4594e72" + integrity sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" + integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== + dependencies: + "@babel/compat-data" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.5" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.4" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.28.5" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.28.5" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.4" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.28.5" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.4" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" -"@babel/plugin-transform-sticky-regex@^7.18.6": +"@babel/preset-react@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/preset-react@^7.25.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.28.5.tgz#6fcc0400fa79698433d653092c3919bb4b0878d9" + integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-transform-react-display-name" "^7.28.0" + "@babel/plugin-transform-react-jsx" "^7.27.1" + "@babel/plugin-transform-react-jsx-development" "^7.27.1" + "@babel/plugin-transform-react-pure-annotations" "^7.27.1" + +"@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c" + integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.28.5" + +"@babel/runtime-corejs3@^7.25.9": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz#c25be39c7997ce2f130d70b9baecb8ed94df93fa" + integrity sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ== + dependencies: + core-js-pure "^3.43.0" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + regenerator-runtime "^0.13.4" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" + integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + regenerator-runtime "^0.13.4" -"@babel/plugin-transform-typescript@^7.18.6": +"@babel/runtime@^7.25.9", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== + +"@babel/template@^7.27.1", "@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.5" + debug "^4.3.1" + +"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.4.4": version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz#4f1db1e0fe278b42ddbc19ec2f6cd2f8262e35d6" - integrity sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w== + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624" + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-typescript" "^7.18.6" + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== +"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@csstools/cascade-layer-name-parser@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz#43f962bebead0052a9fed1a2deeb11f85efcbc72" + integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A== + +"@csstools/color-helpers@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" + integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== + +"@csstools/css-calc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== + +"@csstools/css-color-parser@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" + integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@csstools/color-helpers" "^5.1.0" + "@csstools/css-calc" "^2.1.4" -"@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.6": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.3.tgz#52cd19abaecb3f176a4ff9cc5e15b7bf06bec754" - integrity sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w== +"@csstools/css-parser-algorithms@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== + +"@csstools/css-tokenizer@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== + +"@csstools/media-query-list-parser@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz#7aec77bcb89c2da80ef207e73f474ef9e1b3cdf1" + integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== + +"@csstools/postcss-alpha-function@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz#7989605711de7831bc7cd75b94c9b5bac9c3728e" + integrity sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w== dependencies: - "@babel/compat-data" "^7.19.3" - "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.19.1" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.9" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.19.0" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.13" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.0" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.19.3" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-cascade-layers@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz#dd2c70db3867b88975f2922da3bfbae7d7a2cae7" + integrity sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" -"@babel/preset-react@^7.17.12", "@babel/preset-react@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== +"@csstools/postcss-color-function-display-p3-linear@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz#3017ff5e1f65307d6083e58e93d76724fb1ebf9f" + integrity sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz#a7c85a98c77b522a194a1bbb00dd207f40c7a771" + integrity sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-mix-function@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz#2f1ee9f8208077af069545c9bd79bb9733382c2a" + integrity sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz#b4012b62a4eaa24d694172bb7137f9d2319cb8f2" + integrity sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" -"@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" - integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== +"@csstools/postcss-content-alt-text@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz#1d52da1762893c32999ff76839e48d6ec7c7a4cb" + integrity sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-contrast-color-function@^2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz#ca46986d095c60f208d9e3f24704d199c9172637" + integrity sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-exponential-functions@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz#fc03d1272888cb77e64cc1a7d8a33016e4f05c69" + integrity sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-font-format-keywords@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz#6730836eb0153ff4f3840416cc2322f129c086e6" + integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-gamut-mapping@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz#be0e34c9f0142852cccfc02b917511f0d677db8b" + integrity sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-gradients-interpolation-method@^5.0.12": + version "5.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz#0955cce4d97203b861bf66742bbec611b2f3661c" + integrity sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-hwb-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz#07f7ecb08c50e094673bd20eaf7757db0162beee" + integrity sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-ic-unit@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz#2ee2da0690db7edfbc469279711b9e69495659d2" + integrity sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-initial@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz#c385bd9d8ad31ad159edd7992069e97ceea4d09a" + integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg== + +"@csstools/postcss-is-pseudo-class@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz#d34e850bcad4013c2ed7abe948bfa0448aa8eb74" + integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + +"@csstools/postcss-light-dark-function@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz#0df448aab9a33cb9a085264ff1f396fb80c4437d" + integrity sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-logical-float-and-clear@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz#62617564182cf86ab5d4e7485433ad91e4c58571" + integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ== + +"@csstools/postcss-logical-overflow@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz#c6de7c5f04e3d4233731a847f6c62819bcbcfa1d" + integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA== + +"@csstools/postcss-logical-overscroll-behavior@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz#43c03eaecdf34055ef53bfab691db6dc97a53d37" + integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w== + +"@csstools/postcss-logical-resize@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz#4df0eeb1a61d7bd85395e56a5cce350b5dbfdca6" + integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-logical-viewport-units@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz#016d98a8b7b5f969e58eb8413447eb801add16fc" + integrity sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ== + dependencies: + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-media-minmax@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz#184252d5b93155ae526689328af6bdf3fc113987" + integrity sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" + +"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz#f485c31ec13d6b0fb5c528a3474334a40eff5f11" + integrity sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" + +"@csstools/postcss-nested-calc@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz#754e10edc6958d664c11cde917f44ba144141c62" + integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-normalize-display-values@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" + integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz#416640ef10227eea1375b47b72d141495950971d" + integrity sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-progressive-custom-properties@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz#c39780b9ff0d554efb842b6bd75276aa6f1705db" + integrity sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-random-function@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e" + integrity sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-typescript" "^7.18.6" + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@babel/runtime-corejs3@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz#f0cbbe7edda7c4109cd253bb1dee99aba4594ad9" - integrity sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g== +"@csstools/postcss-relative-color-syntax@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz#ced792450102441f7c160e1d106f33e4b44181f8" + integrity sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw== dependencies: - core-js-pure "^3.25.1" - regenerator-runtime "^0.13.4" + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== +"@csstools/postcss-scope-pseudo-class@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz#9fe60e9d6d91d58fb5fc6c768a40f6e47e89a235" + integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q== dependencies: - regenerator-runtime "^0.13.4" + postcss-selector-parser "^7.0.0" -"@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" - integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== +"@csstools/postcss-sign-functions@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz#a9ac56954014ae4c513475b3f1b3e3424a1e0c12" + integrity sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg== dependencies: - regenerator-runtime "^0.13.4" + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@babel/template@^7.12.7", "@babel/template@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== +"@csstools/postcss-stepped-value-functions@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz#36036f1a0e5e5ee2308e72f3c9cb433567c387b9" + integrity sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.3.tgz#3a3c5348d4988ba60884e8494b0592b2f15a04b4" - integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.3" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.3" - "@babel/types" "^7.19.3" - debug "^4.1.0" - globals "^11.1.0" +"@csstools/postcss-text-decoration-shorthand@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz#fae1b70f07d1b7beb4c841c86d69e41ecc6f743c" + integrity sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA== + dependencies: + "@csstools/color-helpers" "^5.1.0" + postcss-value-parser "^4.2.0" -"@babel/types@^7.12.7", "@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.4.4": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624" - integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== +"@csstools/postcss-trigonometric-functions@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz#3f94ed2e319b57f2c59720b64e4d0a8a6fb8c3b2" + integrity sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A== dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@csstools/postcss-unset-value@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba" + integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== -"@docsearch/css@3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.2.1.tgz#c05d7818b0e43b42f9efa2d82a11c36606b37b27" - integrity sha512-gaP6TxxwQC+K8D6TRx5WULUWKrcbzECOPA2KCVMuI+6C7dNiGUk5yXXzVhc5sld79XKYLnO9DRTI4mjXDYkh+g== +"@csstools/selector-resolve-nested@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" + integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== -"@docsearch/react@^3.1.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.2.1.tgz#112ad88db07367fa6fd933d67d58421d8d8289aa" - integrity sha512-EzTQ/y82s14IQC5XVestiK/kFFMe2aagoYFuTAIfIb/e+4FU7kSMKonRtLwsCiLQHmjvNQq+HO+33giJ5YVtaQ== - dependencies: - "@algolia/autocomplete-core" "1.7.1" - "@algolia/autocomplete-preset-algolia" "1.7.1" - "@docsearch/css" "3.2.1" - algoliasearch "^4.0.0" +"@csstools/selector-specificity@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" + integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== -"@docusaurus/core@2.1.0", "@docusaurus/core@^2.0.0-beta.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.1.0.tgz#4aedc306f4c4cd2e0491b641bf78941d4b480ab6" - integrity sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q== - dependencies: - "@babel/core" "^7.18.6" - "@babel/generator" "^7.18.7" +"@csstools/utilities@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" + integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@docsearch/core@4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.3.1.tgz#88a97a6fe4d4025269b6dee8b9d070b76758ad82" + integrity sha512-ktVbkePE+2h9RwqCUMbWXOoebFyDOxHqImAqfs+lC8yOU+XwEW4jgvHGJK079deTeHtdhUNj0PXHSnhJINvHzQ== + +"@docsearch/css@4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.3.2.tgz#d47d25336c9516b419245fa74e8dd5ae84a17492" + integrity sha512-K3Yhay9MgkBjJJ0WEL5MxnACModX9xuNt3UlQQkDEDZJZ0+aeWKtOkxHNndMRkMBnHdYvQjxkm6mdlneOtU1IQ== + +"@docsearch/react@^3.9.0 || ^4.1.0": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.3.2.tgz#450b8341cb5cca03737a00075d4dfd3a904a3e3e" + integrity sha512-74SFD6WluwvgsOPqifYOviEEVwDxslxfhakTlra+JviaNcs7KK/rjsPj89kVEoQc9FUxRkAofaJnHIR7pb4TSQ== + dependencies: + "@ai-sdk/react" "^2.0.30" + "@algolia/autocomplete-core" "1.19.2" + "@docsearch/core" "4.3.1" + "@docsearch/css" "4.3.2" + ai "^5.0.30" + algoliasearch "^5.28.0" + marked "^16.3.0" + zod "^4.1.8" + +"@docusaurus/babel@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.9.2.tgz#f956c638baeccf2040e482c71a742bc7e35fdb22" + integrity sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA== + dependencies: + "@babel/core" "^7.25.9" + "@babel/generator" "^7.25.9" "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.18.6" - "@babel/preset-env" "^7.18.6" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.18.6" - "@babel/runtime" "^7.18.6" - "@babel/runtime-corejs3" "^7.18.6" - "@babel/traverse" "^7.18.8" - "@docusaurus/cssnano-preset" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@slorber/static-site-generator-webpack-plugin" "^4.0.7" - "@svgr/webpack" "^6.2.1" - autoprefixer "^10.4.7" - babel-loader "^8.2.5" + "@babel/plugin-transform-runtime" "^7.25.9" + "@babel/preset-env" "^7.25.9" + "@babel/preset-react" "^7.25.9" + "@babel/preset-typescript" "^7.25.9" + "@babel/runtime" "^7.25.9" + "@babel/runtime-corejs3" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" babel-plugin-dynamic-import-node "^2.3.3" + fs-extra "^11.1.1" + tslib "^2.6.0" + +"@docusaurus/bundler@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.9.2.tgz#0ca82cda4acf13a493e3f66061aea351e9d356cf" + integrity sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA== + dependencies: + "@babel/core" "^7.25.9" + "@docusaurus/babel" "3.9.2" + "@docusaurus/cssnano-preset" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + babel-loader "^9.2.1" + clean-css "^5.3.3" + copy-webpack-plugin "^11.0.0" + css-loader "^6.11.0" + css-minimizer-webpack-plugin "^5.0.1" + cssnano "^6.1.2" + file-loader "^6.2.0" + html-minifier-terser "^7.2.0" + mini-css-extract-plugin "^2.9.2" + null-loader "^4.0.1" + postcss "^8.5.4" + postcss-loader "^7.3.4" + postcss-preset-env "^10.2.1" + terser-webpack-plugin "^5.3.9" + tslib "^2.6.0" + url-loader "^4.1.1" + webpack "^5.95.0" + webpackbar "^6.0.1" + +"@docusaurus/core@3.9.2", "@docusaurus/core@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.9.2.tgz#cc970f29b85a8926d63c84f8cffdcda43ed266ff" + integrity sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw== + dependencies: + "@docusaurus/babel" "3.9.2" + "@docusaurus/bundler" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" boxen "^6.2.1" chalk "^4.1.2" chokidar "^3.5.3" - clean-css "^5.3.0" - cli-table3 "^0.6.2" + cli-table3 "^0.6.3" combine-promises "^1.1.0" commander "^5.1.0" - copy-webpack-plugin "^11.0.0" - core-js "^3.23.3" - css-loader "^6.7.1" - css-minimizer-webpack-plugin "^4.0.0" - cssnano "^5.1.12" - del "^6.1.1" - detect-port "^1.3.0" + core-js "^3.31.1" + detect-port "^1.5.1" escape-html "^1.0.3" - eta "^1.12.3" - file-loader "^6.2.0" - fs-extra "^10.1.0" - html-minifier-terser "^6.1.0" - html-tags "^3.2.0" - html-webpack-plugin "^5.5.0" - import-fresh "^3.3.0" + eta "^2.2.0" + eval "^0.1.8" + execa "5.1.1" + fs-extra "^11.1.1" + html-tags "^3.3.1" + html-webpack-plugin "^5.6.0" leven "^3.1.0" lodash "^4.17.21" - mini-css-extract-plugin "^2.6.1" - postcss "^8.4.14" - postcss-loader "^7.0.0" + open "^8.4.0" + p-map "^4.0.0" prompts "^2.4.2" - react-dev-utils "^12.0.1" - react-helmet-async "^1.3.0" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" + react-loadable "npm:@docusaurus/react-loadable@6.0.0" react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.3.3" + react-router "^5.3.4" react-router-config "^5.1.1" - react-router-dom "^5.3.3" - rtl-detect "^1.0.4" - semver "^7.3.7" - serve-handler "^6.1.3" - shelljs "^0.8.5" - terser-webpack-plugin "^5.3.3" - tslib "^2.4.0" - update-notifier "^5.1.0" - url-loader "^4.1.1" - wait-on "^6.0.1" - webpack "^5.73.0" - webpack-bundle-analyzer "^4.5.0" - webpack-dev-server "^4.9.3" - webpack-merge "^5.8.0" - webpackbar "^5.0.2" - -"@docusaurus/cssnano-preset@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz#5b42107769b7cbc61655496090bc262d7788d6ab" - integrity sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ== - dependencies: - cssnano-preset-advanced "^5.3.8" - postcss "^8.4.14" - postcss-sort-media-queries "^4.2.1" - tslib "^2.4.0" - -"@docusaurus/logger@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.1.0.tgz#86c97e948f578814d3e61fc2b2ad283043cbe87a" - integrity sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q== + react-router-dom "^5.3.4" + semver "^7.5.4" + serve-handler "^6.1.6" + tinypool "^1.0.2" + tslib "^2.6.0" + update-notifier "^6.0.2" + webpack "^5.95.0" + webpack-bundle-analyzer "^4.10.2" + webpack-dev-server "^5.2.2" + webpack-merge "^6.0.1" + +"@docusaurus/cssnano-preset@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz#523aab65349db3c51a77f2489048d28527759428" + integrity sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ== + dependencies: + cssnano-preset-advanced "^6.1.2" + postcss "^8.5.4" + postcss-sort-media-queries "^5.2.0" + tslib "^2.6.0" + +"@docusaurus/logger@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.9.2.tgz#6ec6364b90f5a618a438cc9fd01ac7376869f92a" + integrity sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA== dependencies: chalk "^4.1.2" - tslib "^2.4.0" - -"@docusaurus/mdx-loader@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz#3fca9576cc73a22f8e7d9941985590b9e47a8526" - integrity sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg== - dependencies: - "@babel/parser" "^7.18.8" - "@babel/traverse" "^7.18.8" - "@docusaurus/logger" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@mdx-js/mdx" "^1.6.22" + tslib "^2.6.0" + +"@docusaurus/mdx-loader@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz#78d238de6c6203fa811cc2a7e90b9b79e111408c" + integrity sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ== + dependencies: + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@mdx-js/mdx" "^3.0.0" + "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" + estree-util-value-to-estree "^3.0.1" file-loader "^6.2.0" - fs-extra "^10.1.0" - image-size "^1.0.1" - mdast-util-to-string "^2.0.0" - remark-emoji "^2.2.0" + fs-extra "^11.1.1" + image-size "^2.0.2" + mdast-util-mdx "^3.0.0" + mdast-util-to-string "^4.0.0" + rehype-raw "^7.0.0" + remark-directive "^3.0.0" + remark-emoji "^4.0.0" + remark-frontmatter "^5.0.0" + remark-gfm "^4.0.0" stringify-object "^3.3.0" - tslib "^2.4.0" - unified "^9.2.2" - unist-util-visit "^2.0.3" + tslib "^2.6.0" + unified "^11.0.3" + unist-util-visit "^5.0.0" url-loader "^4.1.1" - webpack "^5.73.0" + vfile "^6.0.1" + webpack "^5.88.1" -"@docusaurus/module-type-aliases@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz#322f8fd5b436af2154c0dddfa173435730e66261" - integrity sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ== +"@docusaurus/module-type-aliases@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz#993c7cb0114363dea5ef6855e989b3ad4b843a34" + integrity sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew== dependencies: - "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/types" "2.1.0" + "@docusaurus/types" "3.9.2" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" "@types/react-router-dom" "*" - react-helmet-async "*" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" - -"@docusaurus/plugin-content-blog@2.1.0", "@docusaurus/plugin-content-blog@^2.0.0-beta.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz#32b1a7cd4b0026f4a76fce4edc5cfdd0edb1ec42" - integrity sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - cheerio "^1.0.0-rc.12" + react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" + react-loadable "npm:@docusaurus/react-loadable@6.0.0" + +"@docusaurus/plugin-content-blog@3.9.2", "@docusaurus/plugin-content-blog@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz#d5ce51eb7757bdab0515e2dd26a793ed4e119df9" + integrity sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + cheerio "1.0.0-rc.12" feed "^4.2.2" - fs-extra "^10.1.0" + fs-extra "^11.1.1" lodash "^4.17.21" - reading-time "^1.5.0" - tslib "^2.4.0" - unist-util-visit "^2.0.3" + schema-dts "^1.1.2" + srcset "^4.0.0" + tslib "^2.6.0" + unist-util-visit "^5.0.0" utility-types "^3.10.0" - webpack "^5.73.0" - -"@docusaurus/plugin-content-docs@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz#3fcdf258c13dde27268ce7108a102b74ca4c279b" - integrity sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/module-type-aliases" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@types/react-router-config" "^5.0.6" + webpack "^5.88.1" + +"@docusaurus/plugin-content-docs@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz#cd8f2d1c06e53c3fa3d24bdfcb48d237bf2d6b2e" + integrity sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@types/react-router-config" "^5.0.7" combine-promises "^1.1.0" - fs-extra "^10.1.0" - import-fresh "^3.3.0" + fs-extra "^11.1.1" js-yaml "^4.1.0" lodash "^4.17.21" - tslib "^2.4.0" + schema-dts "^1.1.2" + tslib "^2.6.0" utility-types "^3.10.0" - webpack "^5.73.0" - -"@docusaurus/plugin-content-pages@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz#714d24f71d49dbfed888f50c15e975c2154c3ce8" - integrity sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - fs-extra "^10.1.0" - tslib "^2.4.0" - webpack "^5.73.0" - -"@docusaurus/plugin-debug@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz#b3145affb40e25cf342174638952a5928ddaf7dc" - integrity sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - fs-extra "^10.1.0" - react-json-view "^1.21.3" - tslib "^2.4.0" - -"@docusaurus/plugin-google-analytics@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz#c9a7269817b38e43484d38fad9996e39aac4196c" - integrity sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - tslib "^2.4.0" - -"@docusaurus/plugin-google-gtag@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz#e4f351dcd98b933538d55bb742650a2a36ca9a32" - integrity sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - tslib "^2.4.0" - -"@docusaurus/plugin-sitemap@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz#b316bb9a42a1717845e26bd4e2d3071748a54b47" - integrity sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - fs-extra "^10.1.0" + webpack "^5.88.1" + +"@docusaurus/plugin-content-pages@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz#22db6c88ade91cec0a9e87a00b8089898051b08d" + integrity sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + fs-extra "^11.1.1" + tslib "^2.6.0" + webpack "^5.88.1" + +"@docusaurus/plugin-css-cascade-layers@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz#358c85f63f1c6a11f611f1b8889d9435c11b22f8" + integrity sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/plugin-debug@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz#b5df4db115583f5404a252dbf66f379ff933e53c" + integrity sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + fs-extra "^11.1.1" + react-json-view-lite "^2.3.0" + tslib "^2.6.0" + +"@docusaurus/plugin-google-analytics@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz#857fe075fdeccdf6959e62954d9efe39769fa247" + integrity sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/plugin-google-gtag@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz#df75b1a90ae9266b0471909ba0265f46d5dcae62" + integrity sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@types/gtag.js" "^0.0.12" + tslib "^2.6.0" + +"@docusaurus/plugin-google-tag-manager@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz#d1a3cf935acb7d31b84685e92d70a1d342946677" + integrity sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/plugin-sitemap@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz#e1d9f7012942562cc0c6543d3cb2cdc4ae713dc4" + integrity sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + fs-extra "^11.1.1" sitemap "^7.1.1" - tslib "^2.4.0" - -"@docusaurus/preset-classic@^2.0.0-beta.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz#45b23c8ec10c96ded9ece128fac3a39b10bcbc56" - integrity sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/plugin-content-blog" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/plugin-content-pages" "2.1.0" - "@docusaurus/plugin-debug" "2.1.0" - "@docusaurus/plugin-google-analytics" "2.1.0" - "@docusaurus/plugin-google-gtag" "2.1.0" - "@docusaurus/plugin-sitemap" "2.1.0" - "@docusaurus/theme-classic" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-search-algolia" "2.1.0" - "@docusaurus/types" "2.1.0" - -"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== - dependencies: - "@types/react" "*" - prop-types "^15.6.2" - -"@docusaurus/theme-classic@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz#d957a907ea8dd035c1cf911d0fbe91d8f24aef3f" - integrity sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/module-type-aliases" "2.1.0" - "@docusaurus/plugin-content-blog" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/plugin-content-pages" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-translations" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@mdx-js/react" "^1.6.22" - clsx "^1.2.1" - copy-text-to-clipboard "^3.0.1" - infima "0.2.0-alpha.42" + tslib "^2.6.0" + +"@docusaurus/plugin-svgr@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz#62857ed79d97c0150d25f7e7380fdee65671163a" + integrity sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@svgr/core" "8.1.0" + "@svgr/webpack" "^8.1.0" + tslib "^2.6.0" + webpack "^5.88.1" + +"@docusaurus/preset-classic@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz#85cc4f91baf177f8146c9ce896dfa1f0fd377050" + integrity sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/plugin-content-blog" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/plugin-content-pages" "3.9.2" + "@docusaurus/plugin-css-cascade-layers" "3.9.2" + "@docusaurus/plugin-debug" "3.9.2" + "@docusaurus/plugin-google-analytics" "3.9.2" + "@docusaurus/plugin-google-gtag" "3.9.2" + "@docusaurus/plugin-google-tag-manager" "3.9.2" + "@docusaurus/plugin-sitemap" "3.9.2" + "@docusaurus/plugin-svgr" "3.9.2" + "@docusaurus/theme-classic" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-search-algolia" "3.9.2" + "@docusaurus/types" "3.9.2" + +"@docusaurus/theme-classic@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz#6e514f99a0ff42b80afcf42d5e5d042618311ce0" + integrity sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/plugin-content-blog" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/plugin-content-pages" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-translations" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + "@mdx-js/react" "^3.0.0" + clsx "^2.0.0" + infima "0.2.0-alpha.45" lodash "^4.17.21" nprogress "^0.2.0" - postcss "^8.4.14" - prism-react-renderer "^1.3.5" - prismjs "^1.28.0" - react-router-dom "^5.3.3" - rtlcss "^3.5.0" - tslib "^2.4.0" + postcss "^8.5.4" + prism-react-renderer "^2.3.0" + prismjs "^1.29.0" + react-router-dom "^5.3.4" + rtlcss "^4.1.0" + tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.1.0.tgz#dff4d5d1e29efc06125dc06f7b259f689bb3f24d" - integrity sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag== - dependencies: - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/module-type-aliases" "2.1.0" - "@docusaurus/plugin-content-blog" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/plugin-content-pages" "2.1.0" - "@docusaurus/utils" "2.1.0" +"@docusaurus/theme-common@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.9.2.tgz#487172c6fef9815c2746ef62a71e4f5b326f9ba5" + integrity sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag== + dependencies: + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" - clsx "^1.2.1" + clsx "^2.0.0" parse-numeric-range "^1.3.0" - prism-react-renderer "^1.3.5" - tslib "^2.4.0" + prism-react-renderer "^2.3.0" + tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz#e7cdf64b6f7a15b07c6dcf652fd308cfdaabb0ee" - integrity sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg== - dependencies: - "@docsearch/react" "^3.1.1" - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-translations" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - algoliasearch "^4.13.1" - algoliasearch-helper "^3.10.0" - clsx "^1.2.1" - eta "^1.12.3" - fs-extra "^10.1.0" +"@docusaurus/theme-search-algolia@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz#420fd5b27fc1673b48151fdc9fe7167ba135ed50" + integrity sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw== + dependencies: + "@docsearch/react" "^3.9.0 || ^4.1.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-translations" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + algoliasearch "^5.37.0" + algoliasearch-helper "^3.26.0" + clsx "^2.0.0" + eta "^2.2.0" + fs-extra "^11.1.1" lodash "^4.17.21" - tslib "^2.4.0" + tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz#ce9a2955afd49bff364cfdfd4492b226f6dd3b6e" - integrity sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg== +"@docusaurus/theme-translations@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz#238cd69c2da92d612be3d3b4f95944c1d0f1e041" + integrity sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA== dependencies: - fs-extra "^10.1.0" - tslib "^2.4.0" + fs-extra "^11.1.1" + tslib "^2.6.0" -"@docusaurus/types@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.1.0.tgz#01e13cd9adb268fffe87b49eb90302d5dc3edd6b" - integrity sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ== +"@docusaurus/types@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.9.2.tgz#e482cf18faea0d1fa5ce0e3f1e28e0f32d2593eb" + integrity sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q== dependencies: + "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" + "@types/mdast" "^4.0.2" "@types/react" "*" commander "^5.1.0" - joi "^17.6.0" - react-helmet-async "^1.3.0" + joi "^17.9.2" + react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" utility-types "^3.10.0" - webpack "^5.73.0" - webpack-merge "^5.8.0" - -"@docusaurus/utils-common@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.1.0.tgz#248434751096f8c6c644ed65eed2a5a070a227f8" - integrity sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg== - dependencies: - tslib "^2.4.0" - -"@docusaurus/utils-validation@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz#c8cf1d8454d924d9a564fefa86436268f43308e3" - integrity sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ== - dependencies: - "@docusaurus/logger" "2.1.0" - "@docusaurus/utils" "2.1.0" - joi "^17.6.0" + webpack "^5.95.0" + webpack-merge "^5.9.0" + +"@docusaurus/utils-common@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.9.2.tgz#e89bfcf43d66359f43df45293fcdf22814847460" + integrity sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw== + dependencies: + "@docusaurus/types" "3.9.2" + tslib "^2.6.0" + +"@docusaurus/utils-validation@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz#04aec285604790806e2fc5aa90aa950dc7ba75ae" + integrity sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A== + dependencies: + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + fs-extra "^11.2.0" + joi "^17.9.2" js-yaml "^4.1.0" - tslib "^2.4.0" + lodash "^4.17.21" + tslib "^2.6.0" -"@docusaurus/utils@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.1.0.tgz#b77b45b22e61eb6c2dcad8a7e96f6db0409b655f" - integrity sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A== +"@docusaurus/utils@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.9.2.tgz#ffab7922631c7e0febcb54e6d499f648bf8a89eb" + integrity sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ== dependencies: - "@docusaurus/logger" "2.1.0" - "@svgr/webpack" "^6.2.1" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + escape-string-regexp "^4.0.0" + execa "5.1.1" file-loader "^6.2.0" - fs-extra "^10.1.0" - github-slugger "^1.4.0" + fs-extra "^11.1.1" + github-slugger "^1.5.0" globby "^11.1.0" gray-matter "^4.0.3" + jiti "^1.20.0" js-yaml "^4.1.0" lodash "^4.17.21" micromatch "^4.0.5" + p-queue "^6.6.2" + prompts "^2.4.2" resolve-pathname "^3.0.0" - shelljs "^0.8.5" - tslib "^2.4.0" + tslib "^2.6.0" url-loader "^4.1.1" - webpack "^5.73.0" + utility-types "^3.10.0" + webpack "^5.88.1" "@emotion/babel-plugin@^11.10.0": version "11.10.2" @@ -1631,11 +2121,27 @@ "@emotion/weak-memoize" "^0.3.0" stylis "4.0.13" +"@emotion/cache@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + "@emotion/hash@^0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + "@emotion/is-prop-valid@^0.8.2": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -1660,6 +2166,11 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + "@emotion/react@^11.7.1": version "11.10.4" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.4.tgz#9dc6bccbda5d70ff68fdb204746c0e8b13a79199" @@ -1685,11 +2196,27 @@ "@emotion/utils" "^1.2.0" csstype "^3.0.2" +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== + dependencies: + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" + csstype "^3.0.2" + "@emotion/sheet@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== + "@emotion/styled@^11.6.0": version "11.10.4" resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.4.tgz#e93f84a4d54003c2acbde178c3f97b421fce1cd4" @@ -1702,6 +2229,11 @@ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" "@emotion/utils" "^1.2.0" +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== + "@emotion/unitless@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" @@ -1717,32 +2249,53 @@ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + "@emotion/weak-memoize@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== -"@hapi/hoek@^9.0.0": +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== -"@hapi/topo@^5.0.0": +"@hapi/topo@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== dependencies: "@hapi/hoek" "^9.0.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@sinclair/typebox" "^0.27.8" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -1751,12 +2304,33 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== @@ -1769,12 +2343,33 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/source-map@^0.3.3": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" + integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.9": version "0.3.15" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== @@ -1782,45 +2377,93 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jsonjoy.com/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" + integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== + +"@jsonjoy.com/codegen@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" + integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== + +"@jsonjoy.com/json-pack@^1.11.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" + integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + dependencies: + "@jsonjoy.com/base64" "^1.1.2" + "@jsonjoy.com/buffers" "^1.2.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/json-pointer" "^1.0.2" + "@jsonjoy.com/util" "^1.9.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" + integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== + dependencies: + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/util" "^1.9.0" + +"@jsonjoy.com/util@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" + integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== + dependencies: + "@jsonjoy.com/buffers" "^1.0.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@mdx-js/mdx@^1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" - integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== - dependencies: - "@babel/core" "7.12.9" - "@babel/plugin-syntax-jsx" "7.12.1" - "@babel/plugin-syntax-object-rest-spread" "7.8.3" - "@mdx-js/util" "1.6.22" - babel-plugin-apply-mdx-type-prop "1.6.22" - babel-plugin-extract-import-names "1.6.22" - camelcase-css "2.0.1" - detab "2.0.4" - hast-util-raw "6.0.1" - lodash.uniq "4.5.0" - mdast-util-to-hast "10.0.1" - remark-footnotes "2.0.0" - remark-mdx "1.6.22" - remark-parse "8.0.3" - remark-squeeze-paragraphs "4.0.0" - style-to-object "0.3.0" - unified "9.2.0" - unist-builder "2.0.3" - unist-util-visit "2.0.3" - -"@mdx-js/react@^1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" - integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== - -"@mdx-js/util@1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" - integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== +"@mdx-js/mdx@^3.0.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.1.1.tgz#c5ffd991a7536b149e17175eee57a1a2a511c6d1" + integrity sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ== + dependencies: + "@types/estree" "^1.0.0" + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdx" "^2.0.0" + acorn "^8.0.0" + collapse-white-space "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + estree-util-scope "^1.0.0" + estree-walker "^3.0.0" + hast-util-to-jsx-runtime "^2.0.0" + markdown-extensions "^2.0.0" + recma-build-jsx "^1.0.0" + recma-jsx "^1.0.0" + recma-stringify "^1.0.0" + rehype-recma "^1.0.0" + remark-mdx "^3.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + source-map "^0.7.0" + unified "^11.0.0" + unist-util-position-from-estree "^2.0.0" + unist-util-stringify-position "^4.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +"@mdx-js/react@^3.0.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.1.tgz#24bda7fffceb2fe256f954482123cda1be5f5fef" + integrity sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw== + dependencies: + "@types/mdx" "^2.0.0" "@mui/base@5.0.0-alpha.102": version "5.0.0-alpha.102" @@ -1841,14 +2484,26 @@ resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.10.tgz#a3e5d2f6e5146e9a85d48824c386a31be1746ba3" integrity sha512-aDuE2PNEh+hAndxEWlZgq7uiFPZKJtnkPDX7v6kSCrMXA32ZaQ6rZi5olmC7DUHt/BaOSxb7N/im/ss0XBkDhA== -"@mui/icons-material@^5.10.9", "@mui/icons-material@^5.4.1": +"@mui/core-downloads-tracker@^7.3.6": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.6.tgz#e7e3a4dc161a377be8224aa988410e89571ab40a" + integrity sha512-QaYtTHlr8kDFN5mE1wbvVARRKH7Fdw1ZuOjBJcFdVpfNfRYKF3QLT4rt+WaB6CKJvpqxRsmEo0kpYinhH5GeHg== + +"@mui/icons-material@^5.4.1": version "5.10.9" resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.10.9.tgz#f9522c49797caf30146acc576e37ecb4f95bbc38" integrity sha512-sqClXdEM39WKQJOQ0ZCPTptaZgqwibhj2EFV9N0v7BU1PO8y4OcX/a2wIQHn4fNuDjIZktJIBrmU23h7aqlGgg== dependencies: "@babel/runtime" "^7.19.0" -"@mui/material@^5.10.10", "@mui/material@^5.4.1": +"@mui/icons-material@^7.3.6": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-7.3.6.tgz#c0092afd04a661603d9751c851e0099a27c1d556" + integrity sha512-0FfkXEj22ysIq5pa41A2NbcAhJSvmcZQ/vcTIbjDsd6hlslG82k5BEBqqS0ZJprxwIL3B45qpJ+bPHwJPlF7uQ== + dependencies: + "@babel/runtime" "^7.28.4" + +"@mui/material@^5.4.1": version "5.10.10" resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.10.10.tgz#df780d933c0aa9d4a5272f32c9cc24bf1ea72cff" integrity sha512-ioLvqY7VvcePz9dnEIRhpiVvtJmAFmvG6rtLXXzVdMmAVbSaelr5Io07mPz/mCyqE+Uv8/4EuJV276DWO7etzA== @@ -1866,6 +2521,24 @@ react-is "^18.2.0" react-transition-group "^4.4.5" +"@mui/material@^7.3.6": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-7.3.6.tgz#6bd4705ca97d80fd5ae1b6b2b7c56ba0cfab0d6a" + integrity sha512-R4DaYF3dgCQCUAkr4wW1w26GHXcf5rCmBRHVBuuvJvaGLmZdD8EjatP80Nz5JCw0KxORAzwftnHzXVnjR8HnFw== + dependencies: + "@babel/runtime" "^7.28.4" + "@mui/core-downloads-tracker" "^7.3.6" + "@mui/system" "^7.3.6" + "@mui/types" "^7.4.9" + "@mui/utils" "^7.3.6" + "@popperjs/core" "^2.11.8" + "@types/react-transition-group" "^4.4.12" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + react-is "^19.2.0" + react-transition-group "^4.4.5" + "@mui/private-theming@^5.10.9": version "5.10.9" resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.10.9.tgz#c427bfa736455703975cdb108dbde6a174ba7971" @@ -1875,6 +2548,24 @@ "@mui/utils" "^5.10.9" prop-types "^15.8.1" +"@mui/private-theming@^6.4.8": + version "6.4.9" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.9.tgz#0c1d65a638a1740aad0eb715d79e76471abe8175" + integrity sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/utils" "^6.4.9" + prop-types "^15.8.1" + +"@mui/private-theming@^7.3.6": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-7.3.6.tgz#1ca65a08e8f7f538d9a10ba974f1f4db5231a969" + integrity sha512-Ws9wZpqM+FlnbZXaY/7yvyvWQo1+02Tbx50mVdNmzWEi51C51y56KAbaDCYyulOOBL6BJxuaqG8rNNuj7ivVyw== + dependencies: + "@babel/runtime" "^7.28.4" + "@mui/utils" "^7.3.6" + prop-types "^15.8.1" + "@mui/styled-engine@^5.10.8": version "5.10.8" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.10.8.tgz#2db411e4278f06f70ccb6b5cd56ace67109513f6" @@ -1885,27 +2576,39 @@ csstype "^3.1.1" prop-types "^15.8.1" -"@mui/styles@^5.10.10": - version "5.10.10" - resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.10.10.tgz#9b44bfbb89e735b737acd95ba4b8136f116ec30a" - integrity sha512-utr87q/euocRdc2ekFX7DL1gqTVfogSVeu74Nspr8rtK/afC9QwF3ScP/XThVXWPcQKjBWHMKWtAO9BSVE4KDg== +"@mui/styled-engine@^7.3.6": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-7.3.6.tgz#dde8e6ae32c9b5b400dcd37afd9514a5344f7d91" + integrity sha512-+wiYbtvj+zyUkmDB+ysH6zRjuQIJ+CM56w0fEXV+VDNdvOuSywG+/8kpjddvvlfMLsaWdQe5oTuYGBcodmqGzQ== dependencies: - "@babel/runtime" "^7.19.0" - "@emotion/hash" "^0.9.0" - "@mui/private-theming" "^5.10.9" - "@mui/types" "^7.2.0" - "@mui/utils" "^5.10.9" - clsx "^1.2.1" - csstype "^3.1.1" + "@babel/runtime" "^7.28.4" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/sheet" "^1.4.0" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/styles@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-6.4.8.tgz#ad384c67f13ccd41a4b94ce67dce49dd8eabf3bd" + integrity sha512-1q5ZAidCBqnEaGNv/GgJfi8LeCDdEuZNJ/cQRJW1GEVKY1rSUNqceSIWW12aUcDswm5nsGlq3fdc89vypAEIcw== + dependencies: + "@babel/runtime" "^7.26.0" + "@emotion/hash" "^0.9.2" + "@mui/private-theming" "^6.4.8" + "@mui/types" "~7.2.24" + "@mui/utils" "^6.4.8" + clsx "^2.1.1" + csstype "^3.1.3" hoist-non-react-statics "^3.3.2" - jss "^10.9.2" - jss-plugin-camel-case "^10.9.2" - jss-plugin-default-unit "^10.9.2" - jss-plugin-global "^10.9.2" - jss-plugin-nested "^10.9.2" - jss-plugin-props-sort "^10.9.2" - jss-plugin-rule-value-function "^10.9.2" - jss-plugin-vendor-prefixer "^10.9.2" + jss "^10.10.0" + jss-plugin-camel-case "^10.10.0" + jss-plugin-default-unit "^10.10.0" + jss-plugin-global "^10.10.0" + jss-plugin-nested "^10.10.0" + jss-plugin-props-sort "^10.10.0" + jss-plugin-rule-value-function "^10.10.0" + jss-plugin-vendor-prefixer "^10.10.0" prop-types "^15.8.1" "@mui/system@^5.10.10", "@mui/system@^5.4.1": @@ -1922,11 +2625,37 @@ csstype "^3.1.1" prop-types "^15.8.1" +"@mui/system@^7.3.6": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-7.3.6.tgz#460f82fc6fe1b79b8c04dc97694f6b162ffc3d25" + integrity sha512-8fehAazkHNP1imMrdD2m2hbA9sl7Ur6jfuNweh5o4l9YPty4iaZzRXqYvBCWQNwFaSHmMEj2KPbyXGp7Bt73Rg== + dependencies: + "@babel/runtime" "^7.28.4" + "@mui/private-theming" "^7.3.6" + "@mui/styled-engine" "^7.3.6" + "@mui/types" "^7.4.9" + "@mui/utils" "^7.3.6" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + "@mui/types@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.0.tgz#91380c2d42420f51f404120f7a9270eadd6f5c23" integrity sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA== +"@mui/types@^7.4.9": + version "7.4.9" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.4.9.tgz#99accc87920b4c8c4ce33c5076a58f7f81b528fa" + integrity sha512-dNO8Z9T2cujkSIaCnWwprfeKmTWh97cnjkgmpFJ2sbfXLx8SMZijCYHOtP/y5nnUb/Rm2omxbDMmtUoSaUtKaw== + dependencies: + "@babel/runtime" "^7.28.4" + +"@mui/types@~7.2.24": + version "7.2.24" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" + integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== + "@mui/utils@^5.10.9": version "5.10.9" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.9.tgz#9dc455f9230f43eeb81d96a9a4bdb3855bb9ea39" @@ -1938,6 +2667,30 @@ prop-types "^15.8.1" react-is "^18.2.0" +"@mui/utils@^6.4.8", "@mui/utils@^6.4.9": + version "6.4.9" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.9.tgz#b0df01daa254c7c32a1a30b30a5179e19ef071a7" + integrity sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/types" "~7.2.24" + "@types/prop-types" "^15.7.14" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.0.0" + +"@mui/utils@^7.3.6": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-7.3.6.tgz#508fbe864832f99b215d134eb89e1198cdc66b34" + integrity sha512-jn+Ba02O6PiFs7nKva8R2aJJ9kJC+3kQ2R0BbKNY3KQQ36Qng98GnPRFTlbwYTdMD6hLEBKaMLUktyg/rTfd2w== + dependencies: + "@babel/runtime" "^7.28.4" + "@mui/types" "^7.4.9" + "@types/prop-types" "^15.7.15" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.2.0" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1959,157 +2712,205 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@opentelemetry/api@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" + integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.29" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" + integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== "@popperjs/core@^2.11.6": version "2.11.6" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== dependencies: "@hapi/hoek" "^9.0.0" -"@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@slorber/static-site-generator-webpack-plugin@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" - integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== +"@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== + +"@slorber/remark-comment@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@slorber/remark-comment/-/remark-comment-1.0.0.tgz#2a020b3f4579c89dec0361673206c28d67e08f5a" + integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA== dependencies: - eval "^0.1.8" - p-map "^4.0.0" - webpack-sources "^3.2.2" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.1.0" + micromark-util-symbol "^1.0.1" -"@svgr/babel-plugin-add-jsx-attribute@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz#b9a5d84902be75a05ede92e70b338d28ab63fa74" - integrity sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w== +"@standard-schema/spec@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c" + integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA== -"@svgr/babel-plugin-remove-jsx-attribute@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz#4877995452efc997b36777abe1fde9705ef78e8b" - integrity sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ== +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== -"@svgr/babel-plugin-remove-jsx-empty-expression@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz#2d67a0e92904c9be149a5b22d3a3797ce4d7b514" - integrity sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A== +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== -"@svgr/babel-plugin-replace-jsx-attribute-value@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz#306f5247139c53af70d1778f2719647c747998ee" - integrity sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA== +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== -"@svgr/babel-plugin-svg-dynamic-title@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz#6ce26d34cbc93eb81737ef528528907c292e7aa2" - integrity sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA== +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== -"@svgr/babel-plugin-svg-em-dimensions@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz#5ade2a724b290873c30529d1d8cd23523856287a" - integrity sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw== +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== -"@svgr/babel-plugin-transform-react-native-svg@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz#d654f509d692c3a09dfb475757a44bd9f6ad7ddf" - integrity sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw== +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== -"@svgr/babel-plugin-transform-svg-component@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz#21a285dbffdce9567c437ebf0d081bf9210807e6" - integrity sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw== +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== -"@svgr/babel-preset@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.3.1.tgz#8bd1ead79637d395e9362b01dd37cfd59702e152" - integrity sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^6.3.1" - "@svgr/babel-plugin-remove-jsx-attribute" "^6.3.1" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.3.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.3.1" - "@svgr/babel-plugin-svg-dynamic-title" "^6.3.1" - "@svgr/babel-plugin-svg-em-dimensions" "^6.3.1" - "@svgr/babel-plugin-transform-react-native-svg" "^6.3.1" - "@svgr/babel-plugin-transform-svg-component" "^6.3.1" - -"@svgr/core@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.3.1.tgz#752adf49d8d5473b15d76ca741961de093f715bd" - integrity sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA== - dependencies: - "@svgr/plugin-jsx" "^6.3.1" +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" camelcase "^6.2.0" - cosmiconfig "^7.0.1" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" -"@svgr/hast-util-to-babel-ast@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz#59614e24d2a4a28010e02089213b3448d905769d" - integrity sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ== +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== dependencies: - "@babel/types" "^7.18.4" - entities "^4.3.0" + "@babel/types" "^7.21.3" + entities "^4.4.0" -"@svgr/plugin-jsx@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz#de7b2de824296b836d6b874d498377896e367f50" - integrity sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw== +"@svgr/plugin-jsx@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== dependencies: - "@babel/core" "^7.18.5" - "@svgr/babel-preset" "^6.3.1" - "@svgr/hast-util-to-babel-ast" "^6.3.1" + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" -"@svgr/plugin-svgo@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz#3c1ff2efaed10e5c5d35a6cae7bacaedc18b5d4a" - integrity sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw== +"@svgr/plugin-svgo@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== dependencies: - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - svgo "^2.8.0" + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" -"@svgr/webpack@^6.2.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.3.1.tgz#001d03236ebb03bf47c0a4b92d5423e05095ebe6" - integrity sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A== - dependencies: - "@babel/core" "^7.18.5" - "@babel/plugin-transform-react-constant-elements" "^7.17.12" - "@babel/preset-env" "^7.18.2" - "@babel/preset-react" "^7.17.12" - "@babel/preset-typescript" "^7.17.12" - "@svgr/core" "^6.3.1" - "@svgr/plugin-jsx" "^6.3.1" - "@svgr/plugin-svgo" "^6.3.1" - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@svgr/webpack@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" + integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== + dependencies: + "@babel/core" "^7.21.3" + "@babel/plugin-transform-react-constant-elements" "^7.21.3" + "@babel/preset-env" "^7.20.2" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.21.0" + "@svgr/core" "8.1.0" + "@svgr/plugin-jsx" "8.1.0" + "@svgr/plugin-svgo" "8.1.0" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: - defer-to-connect "^1.0.1" + defer-to-connect "^2.0.1" "@trysound/sax@0.2.0": version "0.2.0" @@ -2124,17 +2925,17 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" @@ -2146,10 +2947,17 @@ dependencies: "@types/node" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" "@types/estree" "*" @@ -2162,15 +2970,22 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/estree-jsx@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + dependencies: + "@types/estree" "*" + "@types/estree@*": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@^1.0.0", "@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": version "4.17.31" @@ -2181,20 +2996,45 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@^4.17.13": +"@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": + version "4.19.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz#f1d306dcc03b1aafbfb6b4fe684cce8a31cffc10" + integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*": version "4.17.14" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/express@^4.17.21": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" - "@types/serve-static" "*" + "@types/serve-static" "^1" -"@types/hast@^2.0.0": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" - integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== +"@types/gtag.js@^0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.12.tgz#095122edca896689bdfcdd73b057e23064d23572" + integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== + +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== dependencies: "@types/unist" "*" @@ -2208,6 +3048,16 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/http-errors@*": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== + "@types/http-proxy@^1.17.8": version "1.17.9" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" @@ -2215,23 +3065,69 @@ dependencies: "@types/node" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/mdast@^3.0.0": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" - integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/mdast@^4.0.0", "@types/mdast@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== dependencies: "@types/unist" "*" +"@types/mdx@^2.0.0": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" + integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== + "@types/mime@*": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/ms@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + +"@types/node-forge@^1.3.0": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.14.tgz#006c2616ccd65550560c2757d8472eb6d3ecea0b" + integrity sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw== + dependencies: + "@types/node" "*" + "@types/node@*": version "18.7.23" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f" @@ -2247,16 +3143,21 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/parse5@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" - integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== +"@types/prismjs@^1.26.0": + version "1.26.5" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6" + integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== "@types/prop-types@*", "@types/prop-types@^15.7.5": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/prop-types@^15.7.14", "@types/prop-types@^15.7.15": + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== + "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -2274,7 +3175,7 @@ dependencies: "@types/react" "*" -"@types/react-router-config@*", "@types/react-router-config@^5.0.6": +"@types/react-router-config@*": version "5.0.6" resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== @@ -2283,6 +3184,15 @@ "@types/react" "*" "@types/react-router" "*" +"@types/react-router-config@^5.0.7": + version "5.0.11" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.11.tgz#2761a23acc7905a66a94419ee40294a65aaa483a" + integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "^5.1.0" + "@types/react-router-dom@*": version "5.3.3" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" @@ -2300,6 +3210,19 @@ "@types/history" "^4.7.11" "@types/react" "*" +"@types/react-router@^5.1.0": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react-transition-group@^4.4.12": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== + "@types/react-transition-group@^4.4.5": version "4.4.5" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" @@ -2316,10 +3239,10 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== "@types/sax@^1.2.1": version "1.2.4" @@ -2333,14 +3256,29 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== +"@types/send@*": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== + dependencies: + "@types/node" "*" + +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" -"@types/serve-static@*", "@types/serve-static@^1.13.10": +"@types/serve-static@*": version "1.15.0" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== @@ -2348,144 +3286,180 @@ "@types/mime" "*" "@types/node" "*" -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== +"@types/serve-static@^1", "@types/serve-static@^1.15.5": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "<1" + +"@types/sockjs@^0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": +"@types/unist@*", "@types/unist@^2.0.0": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" +"@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@types/ws@^8.5.10": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + "@types/node" "*" -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== +"@types/yargs@^17.0.8": + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" + "@types/yargs-parser" "*" + +"@ungap/structured-clone@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@vercel/oidc@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vercel/oidc/-/oidc-3.0.5.tgz#bd8db7ee777255c686443413492db4d98ef49657" + integrity sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw== + +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== + +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== + +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== + +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -2506,22 +3480,32 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-phases@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== + +acorn-jsx@^5.0.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: +acorn@^8.0.0, acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +acorn@^8.0.4, acorn@^8.5.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== -address@^1.0.1, address@^1.1.2: +address@^1.0.1: version "1.2.1" resolved "https://registry.yarnpkg.com/address/-/address-1.2.1.tgz#25bb61095b7522d65b357baa11bc05492d4c8acd" integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA== @@ -2534,6 +3518,16 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ai@5.0.106, ai@^5.0.30: + version "5.0.106" + resolved "https://registry.yarnpkg.com/ai/-/ai-5.0.106.tgz#4a9a2d249a12aea9158c3bab11d0e463e0d6a149" + integrity sha512-M5obwavxSJJ3tGlAFqI6eltYNJB0D20X6gIBCFx/KVorb/X1fxVVfiZZpZb+Gslu4340droSOjT0aKQFCarNVg== + dependencies: + "@ai-sdk/gateway" "2.0.18" + "@ai-sdk/provider" "2.0.0" + "@ai-sdk/provider-utils" "3.0.18" + "@opentelemetry/api" "1.9.0" + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -2541,19 +3535,19 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.0.0, ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2573,45 +3567,62 @@ ajv@^8.0.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" -algoliasearch-helper@^3.10.0: - version "3.11.1" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz#d83ab7f1a2a374440686ef7a144b3c288b01188a" - integrity sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw== +ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +algoliasearch-helper@^3.26.0: + version "3.26.1" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.26.1.tgz#5b7f0874a2751c3d6de675d5403d8fa2f015023f" + integrity sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw== dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^4.0.0, algoliasearch@^4.13.1: - version "4.14.2" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c" - integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg== - dependencies: - "@algolia/cache-browser-local-storage" "4.14.2" - "@algolia/cache-common" "4.14.2" - "@algolia/cache-in-memory" "4.14.2" - "@algolia/client-account" "4.14.2" - "@algolia/client-analytics" "4.14.2" - "@algolia/client-common" "4.14.2" - "@algolia/client-personalization" "4.14.2" - "@algolia/client-search" "4.14.2" - "@algolia/logger-common" "4.14.2" - "@algolia/logger-console" "4.14.2" - "@algolia/requester-browser-xhr" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/requester-node-http" "4.14.2" - "@algolia/transporter" "4.14.2" +algoliasearch@^5.28.0, algoliasearch@^5.37.0: + version "5.45.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.45.0.tgz#90abba15b26d6722360a97c1e1931bc920f9c555" + integrity sha512-wrj4FGr14heLOYkBKV3Fbq5ZBGuIFeDJkTilYq/G+hH1CSlQBtYvG2X1j67flwv0fUeQJwnWxxRIunSemAZirA== + dependencies: + "@algolia/abtesting" "1.11.0" + "@algolia/client-abtesting" "5.45.0" + "@algolia/client-analytics" "5.45.0" + "@algolia/client-common" "5.45.0" + "@algolia/client-insights" "5.45.0" + "@algolia/client-personalization" "5.45.0" + "@algolia/client-query-suggestions" "5.45.0" + "@algolia/client-search" "5.45.0" + "@algolia/ingestion" "1.45.0" + "@algolia/monitoring" "1.45.0" + "@algolia/recommend" "5.45.0" + "@algolia/requester-browser-xhr" "5.45.0" + "@algolia/requester-fetch" "5.45.0" + "@algolia/requester-node-http" "5.45.0" animate.css@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075" integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ== -ansi-align@^3.0.0, ansi-align@^3.0.1: +ansi-align@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: string-width "^4.1.0" +ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" @@ -2676,62 +3687,35 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +astring@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" + integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== -autoprefixer@^10.3.7, autoprefixer@^10.4.7: - version "10.4.12" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.12.tgz#183f30bf0b0722af54ee5ef257f7d4320bb33129" - integrity sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q== +autoprefixer@^10.4.19, autoprefixer@^10.4.21: + version "10.4.22" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.22.tgz#90b27ab55ec0cf0684210d1f056f7d65dac55f16" + integrity sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg== dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001407" - fraction.js "^4.2.0" + browserslist "^4.27.0" + caniuse-lite "^1.0.30001754" + fraction.js "^5.3.4" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.1.1" postcss-value-parser "^4.2.0" -axios@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" - integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== - dependencies: - follow-redirects "^1.14.7" - -babel-loader@^8.2.5: - version "8.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" - integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== +babel-loader@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" + integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-apply-mdx-type-prop@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" - integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== - dependencies: - "@babel/helper-plugin-utils" "7.10.4" - "@mdx-js/util" "1.6.22" + find-cache-dir "^4.0.0" + schema-utils "^4.0.0" babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" @@ -2740,13 +3724,6 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-extract-import-names@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" - integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== - dependencies: - "@babel/helper-plugin-utils" "7.10.4" - babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -2756,44 +3733,44 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.6.5" -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== +baseline-browser-mapping@^2.8.25: + version "2.8.32" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz#5de72358cf363ac41e7d642af239f6ac5ed1270a" + integrity sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw== batch@0.6.1: version "0.6.1" @@ -2810,31 +3787,29 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -body-parser@1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== +body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - bytes "3.1.2" - content-type "~1.0.4" + bytes "~3.1.2" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" type-is "~1.6.18" - unpipe "1.0.0" + unpipe "~1.0.0" -bonjour-service@^1.0.11: - version "1.0.14" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.14.tgz#c346f5bc84e87802d08f8d5a60b93f758e514ee7" - integrity sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ== +bonjour-service@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -2843,20 +3818,6 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - boxen@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" @@ -2871,6 +3832,20 @@ boxen@^6.2.1: widest-line "^4.0.1" wrap-ansi "^8.0.1" +boxen@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" + integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== + dependencies: + ansi-align "^3.0.1" + camelcase "^7.0.1" + chalk "^5.2.0" + cli-boxes "^3.0.0" + string-width "^5.1.2" + type-fest "^2.13.0" + widest-line "^4.0.1" + wrap-ansi "^8.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2886,7 +3861,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.3, browserslist@^4.21.3, browserslist@^4.21.4: +browserslist@^4.0.0: version "4.21.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== @@ -2896,35 +3871,66 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4 node-releases "^2.0.6" update-browserslist-db "^1.0.9" +browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.26.0, browserslist@^4.26.3, browserslist@^4.27.0, browserslist@^4.28.0: + version "4.28.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929" + integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== + dependencies: + baseline-browser-mapping "^2.8.25" + caniuse-lite "^1.0.30001754" + electron-to-chromium "^1.5.249" + node-releases "^2.0.27" + update-browserslist-db "^1.1.4" + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.2: +bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0, call-bind@^1.0.2: +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== + dependencies: + "@types/http-cache-semantics" "^4.0.2" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.3" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -2932,6 +3938,14 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2945,16 +3959,16 @@ camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-css@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +camelcase@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" + integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2965,15 +3979,20 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001407: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400: version "1.0.30001412" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz#30f67d55a865da43e0aeec003f073ea8764d5d7c" integrity sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA== -ccount@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" - integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +caniuse-lite@^1.0.30001754: + version "1.0.30001759" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz#d569e7b010372c6b0ca3946e30dada0a2e9d5006" + integrity sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw== + +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== chalk@^2.0.0: version "2.4.2" @@ -2984,7 +4003,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2992,20 +4011,35 @@ chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== +chalk@^5.0.1, chalk@^5.2.0: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== cheerio-select@^2.1.0: version "2.1.0" @@ -3019,7 +4053,7 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@^1.0.0-rc.12: +cheerio@1.0.0-rc.12: version "1.0.0-rc.12" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== @@ -3032,7 +4066,7 @@ cheerio@^1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.3: +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -3047,47 +4081,64 @@ cheerio@^1.0.0-rc.12: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== classnames@^2.2.6: version "2.3.2" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== -clean-css@^5.2.2, clean-css@^5.3.0: +clean-css@^5.2.2: version "5.3.1" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== dependencies: source-map "~0.6.0" +clean-css@^5.3.3, clean-css@~5.3.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== + dependencies: + source-map "~0.6.0" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-boxes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== -cli-table3@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== +cli-table3@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== dependencies: string-width "^4.2.0" optionalDependencies: @@ -3102,22 +4153,20 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - clsx@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== +clsx@^2.0.0, clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +collapse-white-space@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca" + integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== color-convert@^1.9.0: version "1.9.3" @@ -3143,7 +4192,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colord@^2.9.1: +colord@^2.9.3: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== @@ -3158,10 +4207,15 @@ combine-promises@^1.1.0: resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.20.0: version "2.20.3" @@ -3183,10 +4237,10 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== compressible@~2.0.16: version "2.0.18" @@ -3213,34 +4267,41 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" + integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== + dependencies: + dot-prop "^6.0.1" + graceful-fs "^4.2.6" + unique-string "^3.0.0" + write-file-atomic "^3.0.3" + xdg-basedir "^5.0.1" connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -consola@^2.15.3: - version "2.15.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== +consola@^3.2.3: + version "3.4.2" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== -content-disposition@0.5.4: +content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -3252,32 +4313,30 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + convert-source-map@^1.5.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -copy-text-to-clipboard@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" - integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== +cookie@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== copy-webpack-plugin@^11.0.0: version "11.0.0" @@ -3291,40 +4350,29 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.25.1: - version "3.25.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.3.tgz#d6a442a03f4eade4555d4e640e6a06151dd95d38" - integrity sha512-xVtYpJQ5grszDHEUU9O7XbjjcZ0ccX3LgQsyqSvTnjX97ZqEgn9F5srmrwwwMtbKzDllyFPL+O+2OFMl1lU4TQ== +core-js-compat@^3.43.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" + integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== dependencies: - browserslist "^4.21.4" + browserslist "^4.28.0" -core-js-pure@^3.25.1: - version "3.25.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.3.tgz#66ac5bfa5754b47fdfd14f3841c5ed21c46db608" - integrity sha512-T/7qvgv70MEvRkZ8p6BasLZmOVYKzOaWNBEHAU8FmveCJkl4nko2quqPQOmy6AJIp5MBanhz9no3A94NoRb0XA== +core-js-pure@^3.43.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.47.0.tgz#1104df8a3b6eb9189fcc559b5a65b90f66e7e887" + integrity sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw== -core-js@^3.23.3: - version "3.25.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.3.tgz#cbc2be50b5ddfa7981837bd8c41639f27b166593" - integrity sha512-y1hvKXmPHvm5B7w4ln1S4uc9eV/O5+iFExSRUimnvIph11uaizFR8LFMdONN8hG3P2pipUfX4Y/fR8rAEtcHcQ== +core-js@^3.31.1: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.47.0.tgz#436ef07650e191afeb84c24481b298bd60eb4a17" + integrity sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg== core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: +cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== @@ -3335,12 +4383,15 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== +cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - node-fetch "2.6.7" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" cross-spawn@^7.0.3: version "7.0.3" @@ -3351,41 +4402,64 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +crypto-random-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== + dependencies: + type-fest "^1.0.1" -css-declaration-sorter@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== +css-blank-pseudo@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46" + integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== + dependencies: + postcss-selector-parser "^7.0.0" + +css-declaration-sorter@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz#edc45c36bcdfea0788b1d4452829f142ef1c4a4a" + integrity sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ== + +css-has-pseudo@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz#a5ee2daf5f70a2032f3cefdf1e36e7f52a243873" + integrity sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.2.0" -css-loader@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" - integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== +css-loader@^6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== dependencies: icss-utils "^5.1.0" - postcss "^8.4.7" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.5" + semver "^7.5.4" -css-minimizer-webpack-plugin@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.1.0.tgz#2ab9f7d8148c48f5d498604025e6e62cf9528855" - integrity sha512-Zd+yz4nta4GXi3pMqF6skO8kjzuCUbr62z8SLMGZZtxWxTGTLopOiabPGNDEyjHCRhnhdA1EfHmqLa2Oekjtng== +css-minimizer-webpack-plugin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" + integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== dependencies: - cssnano "^5.1.8" - jest-worker "^27.5.1" - postcss "^8.4.13" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" + "@jridgewell/trace-mapping" "^0.3.18" + cssnano "^6.0.1" + jest-worker "^29.4.3" + postcss "^8.4.24" + schema-utils "^4.0.1" + serialize-javascript "^6.0.1" + +css-prefers-color-scheme@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c" + integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== css-select@^4.1.3: version "4.3.0" @@ -3409,13 +4483,21 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" + mdn-data "2.0.28" + source-map-js "^1.0.1" css-vendor@^2.0.8: version "2.0.8" @@ -3430,155 +4512,182 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +cssdb@^8.4.2: + version "8.4.3" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.4.3.tgz#e5f11f42a21834a8614dee22564b26947775f661" + integrity sha512-8aaDS5nVqMXmYjlmmJpqlDJosiqbl2NJkYuSFOXR6RTY14qNosMrqT4t7O+EUm+OdduQg3GNI2ZwC03No1Y58Q== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-advanced@^5.3.8: - version "5.3.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz#027b1d05ef896d908178c483f0ec4190cb50ef9a" - integrity sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg== - dependencies: - autoprefixer "^10.3.7" - cssnano-preset-default "^5.2.12" - postcss-discard-unused "^5.1.0" - postcss-merge-idents "^5.1.1" - postcss-reduce-idents "^5.2.0" - postcss-zindex "^5.1.0" - -cssnano-preset-default@^5.2.12: - version "5.2.12" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" - integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== - dependencies: - css-declaration-sorter "^6.3.0" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.0" - postcss-convert-values "^5.1.2" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.6" - postcss-merge-rules "^5.1.2" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.3" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.0" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.0" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== +cssnano-preset-advanced@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz#82b090872b8f98c471f681d541c735acf8b94d3f" + integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ== + dependencies: + autoprefixer "^10.4.19" + browserslist "^4.23.0" + cssnano-preset-default "^6.1.2" + postcss-discard-unused "^6.0.5" + postcss-merge-idents "^6.0.3" + postcss-reduce-idents "^6.0.3" + postcss-zindex "^6.0.2" + +cssnano-preset-default@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" + integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== + dependencies: + browserslist "^4.23.0" + css-declaration-sorter "^7.2.0" + cssnano-utils "^4.0.2" + postcss-calc "^9.0.1" + postcss-colormin "^6.1.0" + postcss-convert-values "^6.1.0" + postcss-discard-comments "^6.0.2" + postcss-discard-duplicates "^6.0.3" + postcss-discard-empty "^6.0.3" + postcss-discard-overridden "^6.0.2" + postcss-merge-longhand "^6.0.5" + postcss-merge-rules "^6.1.1" + postcss-minify-font-values "^6.1.0" + postcss-minify-gradients "^6.0.3" + postcss-minify-params "^6.1.0" + postcss-minify-selectors "^6.0.4" + postcss-normalize-charset "^6.0.2" + postcss-normalize-display-values "^6.0.2" + postcss-normalize-positions "^6.0.2" + postcss-normalize-repeat-style "^6.0.2" + postcss-normalize-string "^6.0.2" + postcss-normalize-timing-functions "^6.0.2" + postcss-normalize-unicode "^6.1.0" + postcss-normalize-url "^6.0.2" + postcss-normalize-whitespace "^6.0.2" + postcss-ordered-values "^6.0.2" + postcss-reduce-initial "^6.1.0" + postcss-reduce-transforms "^6.0.2" + postcss-svgo "^6.0.3" + postcss-unique-selectors "^6.0.4" + +cssnano-utils@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" + integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== -cssnano@^5.1.12, cssnano@^5.1.8: - version "5.1.13" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.13.tgz#83d0926e72955332dc4802a7070296e6258efc0a" - integrity sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ== +cssnano@^6.0.1, cssnano@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" + integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== dependencies: - cssnano-preset-default "^5.2.12" - lilconfig "^2.0.3" - yaml "^1.10.2" + cssnano-preset-default "^6.1.2" + lilconfig "^3.1.1" -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== dependencies: - css-tree "^1.1.2" + css-tree "~2.2.0" csstype@^3.0.2, csstype@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== -debug@2.6.9, debug@^2.6.0: +csstype@^3.1.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== +debug@^4.0.0, debug@^4.3.1, debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +decode-named-character-reference@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" + integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== + dependencies: + character-entities "^2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: - mimic-response "^1.0.0" + mimic-response "^3.1.0" deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== +default-browser-id@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== + +default-browser@^5.2.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.4.0.tgz#b55cf335bb0b465dd7c961a02cd24246aa434287" + integrity sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg== dependencies: - execa "^5.0.0" + bundle-name "^4.1.0" + default-browser-id "^5.0.0" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -del@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" +define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" -depd@2.0.0: +depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -3588,38 +4697,35 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -destroy@1.2.0: +dequal@^2.0.0, dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detab@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" - integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== - dependencies: - repeat-string "^1.5.4" - detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -detect-port-alt@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== +detect-port@^1.5.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" + integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== dependencies: address "^1.0.1" - debug "^2.6.0" + debug "4" -detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: - address "^1.0.1" - debug "4" + dequal "^2.0.0" dir-glob@^3.0.1: version "3.0.1" @@ -3628,11 +4734,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - dns-packet@^5.2.2: version "5.4.0" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" @@ -3725,17 +4826,21 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== dependencies: is-obj "^2.0.0" -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" duplexer@^0.1.2: version "0.1.2" @@ -3757,6 +4862,11 @@ electron-to-chromium@^1.4.251: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.265.tgz#45630ae190228f945ff79c060b99574b1347e5a7" integrity sha512-38KaYBNs0oCzWCpr6j7fY/W9vF0vSp4tKFIshQTgdZMhUpkxgotkQgjJP6iGMdmlsgMs3i0/Hkko4UXLTrkYVQ== +electron-to-chromium@^1.5.249: + version "1.5.263" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz#bec8f2887c30001dfacf415c136eae3b4386846a" + integrity sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -3767,32 +4877,35 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +emojilib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" + integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -emoticon@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" - integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== +emoticon@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" + integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -enhanced-resolve@^5.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== +enhanced-resolve@^5.17.3: + version "5.18.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" + integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -3814,20 +4927,62 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.2.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +esast-util-from-estree@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad" + integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + devlop "^1.0.0" + estree-util-visit "^2.0.0" + unist-util-position-from-estree "^2.0.0" + +esast-util-from-js@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz#5147bec34cc9da44accf52f87f239a40ac3e8225" + integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== + dependencies: + "@types/estree-jsx" "^1.0.0" + acorn "^8.0.0" + esast-util-from-estree "^2.0.0" + vfile-message "^4.0.0" escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-goat@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" + integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" @@ -3844,6 +4999,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -3874,15 +5034,76 @@ estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-util-attach-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d" + integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== + dependencies: + "@types/estree" "^1.0.0" + +estree-util-build-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1" + integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + estree-walker "^3.0.0" + +estree-util-is-identifier-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== + +estree-util-scope@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz#9cbdfc77f5cb51e3d9ed4ad9c4adbff22d43e585" + integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + +estree-util-to-js@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17" + integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== + dependencies: + "@types/estree-jsx" "^1.0.0" + astring "^1.8.0" + source-map "^0.7.0" + +estree-util-value-to-estree@^3.0.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz#cd70cf37e7f78eae3e110d66a3436ce0d18a8f80" + integrity sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ== + dependencies: + "@types/estree" "^1.0.0" + +estree-util-visit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" + integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/unist" "^3.0.0" + +estree-walker@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eta@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.3.tgz#2982d08adfbef39f9fa50e2fbd42d7337e7338b1" - integrity sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg== +eta@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" + integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== etag@~1.8.1: version "1.8.1" @@ -3897,7 +5118,7 @@ eval@^0.1.8: "@types/node" "*" require-like ">= 0.1.1" -eventemitter3@^4.0.0: +eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -3907,7 +5128,12 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.0.0: +eventsource-parser@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.6.tgz#292e165e34cacbc936c3c92719ef326d4aeb4e90" + integrity sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg== + +execa@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -3922,39 +5148,39 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -express@^4.17.3: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== +express@^4.21.2: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" + body-parser "~1.20.3" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" + cookie "~0.7.1" + cookie-signature "~1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" + merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "~0.1.12" proxy-addr "~2.0.7" - qs "6.10.3" + qs "~6.14.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "~0.19.0" + serve-static "~1.16.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" @@ -3992,12 +5218,10 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-url-parser@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" +fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== fastq@^1.6.0: version "1.13.0" @@ -4006,6 +5230,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fault@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== + dependencies: + format "^0.2.0" + faye-websocket@^0.11.3: version "0.11.4" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" @@ -4013,31 +5244,6 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -fbemitter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" - integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== - dependencies: - fbjs "^3.0.0" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== - dependencies: - cross-fetch "^3.1.5" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.30" - feed@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" @@ -4045,6 +5251,13 @@ feed@^4.2.2: dependencies: xml-js "^1.6.11" +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-loader@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -4053,11 +5266,6 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -filesize@^8.0.6: - version "8.0.7" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" - integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -4065,97 +5273,69 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== dependencies: debug "2.6.9" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - statuses "2.0.1" + statuses "~2.0.2" unpipe "~1.0.0" -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== +find-cache-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" + integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" + common-path-prefix "^3.0.0" + pkg-dir "^7.0.0" find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" + locate-path "^7.1.0" + path-exists "^5.0.0" -flux@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" - integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== - dependencies: - fbemitter "^3.0.0" - fbjs "^3.0.1" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.0.0, follow-redirects@^1.14.7: +follow-redirects@^1.0.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -fork-ts-checker-webpack-plugin@^6.5.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" - integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== +fraction.js@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" + integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== framer-motion@^4.1.17: version "4.1.17" @@ -4177,40 +5357,20 @@ framesync@5.3.0: dependencies: tslib "^2.1.0" -fresh@0.5.2: +fresh@0.5.2, fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@^11.1.1, fs-extra@^11.2.0: + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -4221,7 +5381,12 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -4235,34 +5400,44 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: - pump "^3.0.0" + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -github-slugger@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" - integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== +github-slugger@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -4278,23 +5453,16 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob-to-regex.js@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" + integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-dirs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" @@ -4302,28 +5470,7 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -4346,28 +5493,38 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^12.1.0: + version "12.6.1" + resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" + integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + +graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.2.11: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" @@ -4412,10 +5569,15 @@ has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-yarn@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" + integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== has@^1.0.3: version "1.0.3" @@ -4424,73 +5586,126 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hast-to-hyperscript@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" - integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== - dependencies: - "@types/unist" "^2.0.3" - comma-separated-tokens "^1.0.0" - property-information "^5.3.0" - space-separated-tokens "^1.0.0" - style-to-object "^0.3.0" - unist-util-is "^4.0.0" - web-namespaces "^1.0.0" - -hast-util-from-parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" - integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== - dependencies: - "@types/parse5" "^5.0.0" - hastscript "^6.0.0" - property-information "^5.0.0" - vfile "^4.0.0" - vfile-location "^3.2.0" - web-namespaces "^1.0.0" - -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== - -hast-util-raw@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" - integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== - dependencies: - "@types/hast" "^2.0.0" - hast-util-from-parse5 "^6.0.0" - hast-util-to-parse5 "^6.0.0" - html-void-elements "^1.0.0" - parse5 "^6.0.0" - unist-util-position "^3.0.0" - vfile "^4.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" - -hast-util-to-parse5@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" - integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - hast-to-hyperscript "^9.0.0" - property-information "^5.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" + function-bind "^1.1.2" -hastscript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" - integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== +hast-util-from-parse5@^8.0.0: + version "8.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e" + integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + hastscript "^9.0.0" + property-information "^7.0.0" + vfile "^6.0.0" + vfile-location "^5.0.0" + web-namespaces "^2.0.0" + +hast-util-parse-selector@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== + dependencies: + "@types/hast" "^3.0.0" + +hast-util-raw@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" + integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + "@ungap/structured-clone" "^1.0.0" + hast-util-from-parse5 "^8.0.0" + hast-util-to-parse5 "^8.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + parse5 "^7.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-to-estree@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz#e654c1c9374645135695cc0ab9f70b8fcaf733d7" + integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== + dependencies: + "@types/estree" "^1.0.0" + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-attach-comments "^3.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + style-to-js "^1.0.0" + unist-util-position "^5.0.0" + zwitch "^2.0.0" + +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + style-to-js "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + +hast-util-to-parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" + integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + +hastscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^4.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" he@^1.2.0: version "1.2.0" @@ -4531,12 +5746,12 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== +html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: +html-minifier-terser@^6.0.2: version "6.1.0" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== @@ -4549,20 +5764,33 @@ html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: relateurl "^0.2.7" terser "^5.10.0" -html-tags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== +html-minifier-terser@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" + integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== + dependencies: + camel-case "^4.1.2" + clean-css "~5.3.2" + commander "^10.0.0" + entities "^4.4.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.15.1" -html-void-elements@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" - integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== -html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + +html-webpack-plugin@^5.6.0: + version "5.6.5" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz#d57defb83cabbf29bf56b2d4bf10b67b650066be" + integrity sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -4590,10 +5818,10 @@ htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.3.0" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== http-deceiver@^1.2.7: version "1.2.7" @@ -4621,15 +5849,26 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== +http-proxy-middleware@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" + integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== dependencies: "@types/http-proxy" "^1.17.8" http-proxy "^1.18.1" @@ -4646,17 +5885,30 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -iconv-lite@0.4.24: +iconv-lite@~0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4673,24 +5925,17 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -image-size@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" - integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== - dependencies: - queue "6.0.2" - -immer@^9.0.7: - version "9.0.15" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" - integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== +image-size@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc" + integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w== immutable@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== -import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -4698,10 +5943,10 @@ import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: version "0.1.4" @@ -4713,48 +5958,35 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infima@0.2.0-alpha.42: - version "0.2.0-alpha.42" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.42.tgz#f6e86a655ad40877c6b4d11b2ede681eb5470aa5" - integrity sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +infima@0.2.0-alpha.45: + version "0.2.0-alpha.45" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" + integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +inline-style-parser@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz#b1fc68bfc0313b8685745e4464e37f9376b9c909" + integrity sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA== invariant@^2.2.4: version "2.2.4" @@ -4768,23 +6000,23 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== -is-alphabetical@1.0.4, is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -4798,17 +6030,19 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-ci@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - ci-info "^2.0.0" + hasown "^2.0.2" is-core-module@^2.9.0: version "2.10.0" @@ -4817,16 +6051,21 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4849,16 +6088,23 @@ is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -4867,10 +6113,15 @@ is-installed-globally@^0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== +is-network-error@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.0.tgz#2ce62cbca444abd506f8a900f39d20b898d37512" + integrity sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw== + +is-npm@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.1.0.tgz#f70e0b6c132dfc817ac97d3badc0134945b098d3" + integrity sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA== is-number@^7.0.0: version "7.0.0" @@ -4887,26 +6138,21 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -4917,12 +6163,7 @@ is-plain-object@^2.0.4: is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== is-stream@^2.0.0: version "2.0.1" @@ -4934,16 +6175,6 @@ is-typedarray@^1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== - -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== - is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -4951,10 +6182,17 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +is-yarn-global@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" + integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== isarray@0.0.1: version "0.0.1" @@ -4976,7 +6214,19 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jest-worker@^27.4.5, jest-worker@^27.5.1: +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -4985,15 +6235,30 @@ jest-worker@^27.4.5, jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -joi@^17.6.0: - version "17.6.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.1.tgz#e77422f277091711599634ac39a409e599d7bdaa" - integrity sha512-Hl7/iBklIX345OCM1TiFSCZRVaAOLDGlWCp0Df2vWYgBgjkezaR7Kvm3joBciBHQjZj5sxXs859r6eqsRSlG8w== +jest-worker@^29.4.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.0" + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jiti@^1.20.0: + version "1.21.7" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" + integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== + +joi@^17.9.2: + version "17.13.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== + dependencies: + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" + "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: @@ -5016,20 +6281,20 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" @@ -5046,11 +6311,21 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^2.1.2, json5@^2.2.1: +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json5@^2.1.2: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -5060,82 +6335,82 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jss-plugin-camel-case@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz#76dddfa32f9e62d17daa4e3504991fd0933b89e1" - integrity sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg== +jss-plugin-camel-case@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" + integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.9.2" + jss "10.10.0" -jss-plugin-default-unit@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz#3e7f4a1506b18d8fe231554fd982439feb2a9c53" - integrity sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg== +jss-plugin-default-unit@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz#db3925cf6a07f8e1dd459549d9c8aadff9804293" + integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" -jss-plugin-global@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz#e7f2ad4a5e8e674fb703b04b57a570b8c3e5c2c2" - integrity sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g== +jss-plugin-global@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz#1c55d3c35821fab67a538a38918292fc9c567efd" + integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" -jss-plugin-nested@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz#3aa2502816089ecf3981e1a07c49b276d67dca63" - integrity sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA== +jss-plugin-nested@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz#db872ed8925688806e77f1fc87f6e62264513219" + integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz#645f6c8f179309667b3e6212f66b59a32fb3f01f" - integrity sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw== +jss-plugin-props-sort@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz#67f4dd4c70830c126f4ec49b4b37ccddb680a5d7" + integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" -jss-plugin-rule-value-function@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz#9afe07596e477123cbf11120776be6a64494541f" - integrity sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q== +jss-plugin-rule-value-function@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz#7d99e3229e78a3712f78ba50ab342e881d26a24b" + integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz#410a0f3b9f8dbbfba58f4d329134df4849aa1237" - integrity sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA== +jss-plugin-vendor-prefixer@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz#c01428ef5a89f2b128ec0af87a314d0c767931c7" + integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg== dependencies: "@babel/runtime" "^7.3.1" css-vendor "^2.0.8" - jss "10.9.2" + jss "10.10.0" -jss@10.9.2, jss@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.2.tgz#9379be1f195ef98011dfd31f9448251bd61b95a9" - integrity sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg== +jss@10.10.0, jss@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.10.0.tgz#a75cc85b0108c7ac8c7b7d296c520a3e4fbc6ccc" + integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== dependencies: "@babel/runtime" "^7.3.1" csstype "^3.0.2" is-in-browser "^1.1.3" tiny-warning "^1.0.2" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: - json-buffer "3.0.0" + json-buffer "3.0.1" kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" @@ -5147,37 +6422,45 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.4, klona@^2.0.5: +klona@^2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== +latest-version@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" + integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== + dependencies: + package-json "^8.1.0" + +launch-editor@^2.6.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.12.0.tgz#cc740f4e0263a6b62ead2485f9896e545321f817" + integrity sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg== dependencies: - package-json "^6.3.0" + picocolors "^1.1.1" + shell-quote "^1.8.3" leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -lilconfig@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== +lilconfig@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== loader-utils@^2.0.0: version "2.0.2" @@ -5188,48 +6471,18 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" -loader-utils@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f" - integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: - p-locate "^5.0.0" - -lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + p-locate "^6.0.0" lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.flow@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -5240,17 +6493,22 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -lodash.uniq@4.5.0, lodash.uniq@^4.5.0: +lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + +loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -5264,15 +6522,17 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" @@ -5281,77 +6541,282 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +markdown-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" + integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== + +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + +markdown-table@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== + +marked@^16.3.0: + version "16.4.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-16.4.2.tgz#4959a64be6c486f0db7467ead7ce288de54290a3" + integrity sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mdast-util-directive@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz#f3656f4aab6ae3767d3c72cfab5e8055572ccba1" + integrity sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-visit-parents "^6.0.0" + +mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" + integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== dependencies: - semver "^6.0.0" + "@types/mdast" "^4.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" -markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +mdast-util-from-markdown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-frontmatter@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" + integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + escape-string-regexp "^5.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-extension-frontmatter "^2.0.0" -mdast-squeeze-paragraphs@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" - integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== +mdast-util-gfm-autolink-literal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== dependencies: - unist-util-remove "^2.0.0" + "@types/mdast" "^4.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-find-and-replace "^3.0.0" + micromark-util-character "^2.0.0" -mdast-util-definitions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" - integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== +mdast-util-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== dependencies: - unist-util-visit "^2.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" -mdast-util-to-hast@10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" - integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== +mdast-util-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - mdast-util-definitions "^4.0.0" - mdurl "^1.0.0" - unist-builder "^2.0.0" - unist-util-generated "^1.0.0" - unist-util-position "^3.0.0" - unist-util-visit "^2.0.0" - -mdast-util-to-string@^2.0.0: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-table@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +mdast-util-gfm-task-list-item@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" -mdurl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== +mdast-util-gfm@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-gfm-autolink-literal "^2.0.0" + mdast-util-gfm-footnote "^2.0.0" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-expression@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-jsx@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +mdast-util-mdx@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" + integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdxjs-esm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-hast@^13.0.0: + version "13.2.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053" + integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.1.2, memfs@^3.4.3: - version "3.4.7" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" - integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== +memfs@^4.43.1: + version "4.51.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.51.1.tgz#25945de4a90d1573945105e187daa9385e1bca73" + integrity sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ== dependencies: - fs-monkey "^1.0.3" + "@jsonjoy.com/json-pack" "^1.11.0" + "@jsonjoy.com/util" "^1.9.0" + glob-to-regex.js "^1.0.1" + thingies "^2.5.0" + tree-dump "^1.0.3" + tslib "^2.0.0" -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" @@ -5368,6 +6833,422 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micromark-core-commonmark@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-directive@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz#2eb61985d1995a7c1ff7621676a4f32af29409e8" + integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + parse-entities "^4.0.0" + +micromark-extension-frontmatter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" + integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== + dependencies: + fault "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-autolink-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + dependencies: + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-strikethrough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-table@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-tagfilter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-gfm-task-list-item@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== + dependencies: + micromark-extension-gfm-autolink-literal "^2.0.0" + micromark-extension-gfm-footnote "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-tagfilter "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-mdx-expression@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz#43d058d999532fb3041195a3c3c05c46fa84543b" + integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-factory-mdx-expression "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-mdx-jsx@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz#ffc98bdb649798902fa9fc5689f67f9c1c902044" + integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + micromark-factory-mdx-expression "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + vfile-message "^4.0.0" + +micromark-extension-mdx-md@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" + integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-mdxjs-esm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" + integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-position-from-estree "^2.0.0" + vfile-message "^4.0.0" + +micromark-extension-mdxjs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" + integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== + dependencies: + acorn "^8.0.0" + acorn-jsx "^5.0.0" + micromark-extension-mdx-expression "^3.0.0" + micromark-extension-mdx-jsx "^3.0.0" + micromark-extension-mdx-md "^2.0.0" + micromark-extension-mdxjs-esm "^3.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-mdx-expression@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz#bb09988610589c07d1c1e4425285895041b3dfa9" + integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-position-from-estree "^2.0.0" + vfile-message "^4.0.0" + +micromark-factory-space@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-events-to-acorn@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz#e7a8a6b55a47e5a06c720d5a1c4abae8c37c98f3" + integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== + dependencies: + "@types/estree" "^1.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + estree-util-visit "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + vfile-message "^4.0.0" + +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +micromark@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -5381,6 +7262,11 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -5393,13 +7279,20 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime-types@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -5410,54 +7303,45 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== -mini-css-extract-plugin@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" - integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== +mini-css-extract-plugin@^2.9.2: + version "2.9.4" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz#cafa1a42f8c71357f49cd1566810d74ff1cb0200" + integrity sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ== dependencies: schema-utils "^4.0.0" + tapable "^2.2.1" minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +mrmime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== ms@2.0.0: version "2.0.0" @@ -5469,7 +7353,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -5482,10 +7366,10 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== negotiator@0.6.3: version "0.6.3" @@ -5505,25 +7389,26 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-emoji@^1.10.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== +node-emoji@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" + integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== dependencies: - whatwg-url "^5.0.0" + "@sindresorhus/is" "^4.6.0" + char-regex "^1.0.2" + emojilib "^2.4.0" + skin-tone "^2.0.0" node-forge@^1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + node-releases@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" @@ -5539,15 +7424,10 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +normalize-url@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.0.tgz#d33504f67970decf612946fd4880bc8c0983486d" + integrity sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w== npm-run-path@^4.0.1: version "4.0.1" @@ -5568,15 +7448,23 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -object-assign@^4.1.0, object-assign@^4.1.1: +null-loader@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" + integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" @@ -5598,7 +7486,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -5610,13 +7498,6 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -5624,7 +7505,17 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^8.0.9, open@^8.4.0: +open@^10.0.3: + version "10.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" + integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + wsl-utils "^0.1.0" + +open@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== @@ -5638,45 +7529,29 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^3.0.0: +p-cancelable@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: - p-limit "^2.2.0" + yocto-queue "^1.0.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: - p-limit "^3.0.2" + p-limit "^4.0.0" p-map@^4.0.0: version "4.0.0" @@ -5685,28 +7560,39 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-retry@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" + integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== dependencies: - "@types/retry" "0.12.0" + "@types/retry" "0.12.2" + is-network-error "^1.0.0" retry "^0.13.1" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== +package-json@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" + integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" + got "^12.1.0" + registry-auth-token "^5.0.1" + registry-url "^6.0.0" + semver "^7.3.7" param-case@^3.0.4: version "3.0.4" @@ -5723,19 +7609,20 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== +parse-entities@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^5.0.0: + "@types/unist" "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -5758,11 +7645,6 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^7.0.0: version "7.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" @@ -5783,20 +7665,10 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-is-inside@1.0.2: version "1.0.2" @@ -5813,15 +7685,10 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-to-regexp@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" - integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== +path-to-regexp@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== path-to-regexp@^1.7.0: version "1.8.0" @@ -5830,6 +7697,11 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-to-regexp@~0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -5840,24 +7712,22 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== +pkg-dir@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" + integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== dependencies: - find-up "^3.0.0" + find-up "^6.3.0" popmotion@9.3.6: version "9.3.6" @@ -5869,146 +7739,284 @@ popmotion@9.3.6: style-value-types "4.1.4" tslib "^2.1.0" -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== +postcss-attribute-case-insensitive@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" + integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-calc@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" + integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== dependencies: - postcss-selector-parser "^6.0.9" + postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" -postcss-colormin@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" - integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-functional-notation@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz#9a3df2296889e629fde18b873bb1f50a4ecf4b83" + integrity sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw== dependencies: - browserslist "^4.16.6" + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +postcss-color-hex-alpha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76" + integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-color-rebeccapurple@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98" + integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-colormin@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" + integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== + dependencies: + browserslist "^4.23.0" caniuse-api "^3.0.0" - colord "^2.9.1" + colord "^2.9.3" postcss-value-parser "^4.2.0" -postcss-convert-values@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" - integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== +postcss-convert-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" + integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== dependencies: - browserslist "^4.20.3" + browserslist "^4.23.0" postcss-value-parser "^4.2.0" -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== +postcss-custom-media@^11.0.6: + version "11.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz#6b450e5bfa209efb736830066682e6567bd04967" + integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" + +postcss-custom-properties@^14.0.6: + version "14.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e" + integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== +postcss-custom-selectors@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz#9448ed37a12271d7ab6cb364b6f76a46a4a323e8" + integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + postcss-selector-parser "^7.0.0" -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== +postcss-dir-pseudo-class@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca" + integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== + dependencies: + postcss-selector-parser "^7.0.0" -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== +postcss-discard-comments@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" + integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== -postcss-discard-unused@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" - integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== +postcss-discard-duplicates@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" + integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== + +postcss-discard-empty@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" + integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== + +postcss-discard-overridden@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" + integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== + +postcss-discard-unused@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz#c1b0e8c032c6054c3fbd22aaddba5b248136f338" + integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA== dependencies: - postcss-selector-parser "^6.0.5" + postcss-selector-parser "^6.0.16" -postcss-loader@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.1.tgz#4c883cc0a1b2bfe2074377b7a74c1cd805684395" - integrity sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ== +postcss-double-position-gradients@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz#b482d08b5ced092b393eb297d07976ab482d4cad" + integrity sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g== dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.7" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-merge-idents@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" - integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== +postcss-focus-visible@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868" + integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-focus-within@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7" + integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed" + integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== + +postcss-image-set-function@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53" + integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== dependencies: - cssnano-utils "^3.1.0" + "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -postcss-merge-longhand@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" - integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== +postcss-lab-function@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz#eb555ac542607730eb0a87555074e4a5c6eef6e4" + integrity sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +postcss-loader@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" + integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== + dependencies: + cosmiconfig "^8.3.5" + jiti "^1.20.0" + semver "^7.5.4" + +postcss-logical@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.1.0.tgz#4092b16b49e3ecda70c4d8945257da403d167228" + integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA== dependencies: postcss-value-parser "^4.2.0" - stylehacks "^5.1.0" -postcss-merge-rules@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" - integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== +postcss-merge-idents@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65" + integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g== + dependencies: + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" + integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^6.1.1" + +postcss-merge-rules@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" + integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== dependencies: - browserslist "^4.16.6" + browserslist "^4.23.0" caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" + cssnano-utils "^4.0.2" + postcss-selector-parser "^6.0.16" -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== +postcss-minify-font-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" + integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== +postcss-minify-gradients@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" + integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" + colord "^2.9.3" + cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" -postcss-minify-params@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" - integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== +postcss-minify-params@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" + integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== dependencies: - browserslist "^4.16.6" - cssnano-utils "^3.1.0" + browserslist "^4.23.0" + cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== +postcss-minify-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" + integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== dependencies: - postcss-selector-parser "^6.0.5" + postcss-selector-parser "^6.0.16" -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== +postcss-modules-local-by-default@^4.0.5: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== dependencies: icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" + postcss-selector-parser "^7.0.0" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: - postcss-selector-parser "^6.0.4" + postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" @@ -6017,152 +8025,279 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== +postcss-nesting@^13.0.2: + version "13.0.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" + integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== + dependencies: + "@csstools/selector-resolve-nested" "^3.1.0" + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== +postcss-normalize-charset@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" + integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== + +postcss-normalize-display-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" + integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== +postcss-normalize-positions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" + integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== +postcss-normalize-repeat-style@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" + integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== +postcss-normalize-string@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" + integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== +postcss-normalize-timing-functions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" + integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" - integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== +postcss-normalize-unicode@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" + integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== dependencies: - browserslist "^4.16.6" + browserslist "^4.23.0" postcss-value-parser "^4.2.0" -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== +postcss-normalize-url@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" + integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== dependencies: - normalize-url "^6.0.1" postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== +postcss-normalize-whitespace@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" + integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== +postcss-opacity-percentage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a" + integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== + +postcss-ordered-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" + integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== dependencies: - cssnano-utils "^3.1.0" + cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" -postcss-reduce-idents@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" - integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== +postcss-overflow-shorthand@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af" + integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== dependencies: postcss-value-parser "^4.2.0" -postcss-reduce-initial@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" - integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9" + integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== dependencies: - browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + +postcss-preset-env@^10.2.1: + version "10.4.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.4.0.tgz#fa6167a307f337b2bcdd1d125604ff97cdeb5142" + integrity sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw== + dependencies: + "@csstools/postcss-alpha-function" "^1.0.1" + "@csstools/postcss-cascade-layers" "^5.0.2" + "@csstools/postcss-color-function" "^4.0.12" + "@csstools/postcss-color-function-display-p3-linear" "^1.0.1" + "@csstools/postcss-color-mix-function" "^3.0.12" + "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.2" + "@csstools/postcss-content-alt-text" "^2.0.8" + "@csstools/postcss-contrast-color-function" "^2.0.12" + "@csstools/postcss-exponential-functions" "^2.0.9" + "@csstools/postcss-font-format-keywords" "^4.0.0" + "@csstools/postcss-gamut-mapping" "^2.0.11" + "@csstools/postcss-gradients-interpolation-method" "^5.0.12" + "@csstools/postcss-hwb-function" "^4.0.12" + "@csstools/postcss-ic-unit" "^4.0.4" + "@csstools/postcss-initial" "^2.0.1" + "@csstools/postcss-is-pseudo-class" "^5.0.3" + "@csstools/postcss-light-dark-function" "^2.0.11" + "@csstools/postcss-logical-float-and-clear" "^3.0.0" + "@csstools/postcss-logical-overflow" "^2.0.0" + "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" + "@csstools/postcss-logical-resize" "^3.0.0" + "@csstools/postcss-logical-viewport-units" "^3.0.4" + "@csstools/postcss-media-minmax" "^2.0.9" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" + "@csstools/postcss-nested-calc" "^4.0.0" + "@csstools/postcss-normalize-display-values" "^4.0.0" + "@csstools/postcss-oklab-function" "^4.0.12" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-random-function" "^2.0.1" + "@csstools/postcss-relative-color-syntax" "^3.0.12" + "@csstools/postcss-scope-pseudo-class" "^4.0.1" + "@csstools/postcss-sign-functions" "^1.1.4" + "@csstools/postcss-stepped-value-functions" "^4.0.9" + "@csstools/postcss-text-decoration-shorthand" "^4.0.3" + "@csstools/postcss-trigonometric-functions" "^4.0.9" + "@csstools/postcss-unset-value" "^4.0.0" + autoprefixer "^10.4.21" + browserslist "^4.26.0" + css-blank-pseudo "^7.0.1" + css-has-pseudo "^7.0.3" + css-prefers-color-scheme "^10.0.0" + cssdb "^8.4.2" + postcss-attribute-case-insensitive "^7.0.1" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^7.0.12" + postcss-color-hex-alpha "^10.0.0" + postcss-color-rebeccapurple "^10.0.0" + postcss-custom-media "^11.0.6" + postcss-custom-properties "^14.0.6" + postcss-custom-selectors "^8.0.5" + postcss-dir-pseudo-class "^9.0.1" + postcss-double-position-gradients "^6.0.4" + postcss-focus-visible "^10.0.1" + postcss-focus-within "^9.0.1" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^6.0.0" + postcss-image-set-function "^7.0.0" + postcss-lab-function "^7.0.12" + postcss-logical "^8.1.0" + postcss-nesting "^13.0.2" + postcss-opacity-percentage "^3.0.0" + postcss-overflow-shorthand "^6.0.0" + postcss-page-break "^3.0.4" + postcss-place "^10.0.0" + postcss-pseudo-class-any-link "^10.0.1" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^8.0.1" + +postcss-pseudo-class-any-link@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544" + integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-reduce-idents@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486" + integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" + integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== + dependencies: + browserslist "^4.23.0" caniuse-api "^3.0.0" -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== +postcss-reduce-transforms@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" + integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== dependencies: postcss-value-parser "^4.2.0" -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172" + integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-sort-media-queries@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz#f48a77d6ce379e86676fc3f140cf1b10a06f6051" - integrity sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg== +postcss-selector-parser@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== dependencies: - sort-css-media-queries "2.1.0" + cssesc "^3.0.0" + util-deprecate "^1.0.2" -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== +postcss-sort-media-queries@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97" + integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA== + dependencies: + sort-css-media-queries "2.2.0" + +postcss-svgo@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" + integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== dependencies: postcss-value-parser "^4.2.0" - svgo "^2.7.0" + svgo "^3.2.0" -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== +postcss-unique-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" + integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== dependencies: - postcss-selector-parser "^6.0.5" + postcss-selector-parser "^6.0.16" postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss-zindex@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" - integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== +postcss-zindex@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1" + integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== -postcss@^8.3.11, postcss@^8.4.13, postcss@^8.4.14, postcss@^8.4.7: - version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== +postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.5.4: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" pretty-error@^4.0.0: version "4.0.0" @@ -6177,28 +8312,24 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" - integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== +prism-react-renderer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f" + integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig== + dependencies: + "@types/prismjs" "^1.26.0" + clsx "^2.0.0" -prismjs@^1.28.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== +prismjs@^1.29.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" + integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -6216,12 +8347,20 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -property-information@^5.0.0, property-information@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" +property-information@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + +property-information@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== proxy-addr@~2.0.7: version "2.0.7" @@ -6231,54 +8370,34 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== +pupa@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.3.0.tgz#bc4036f9e8920c08ad472bc18fb600067cb83810" + integrity sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA== dependencies: - escape-goat "^2.0.0" - -pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + escape-goat "^4.0.0" -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@~6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.4" + side-channel "^1.1.0" queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -queue@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== - dependencies: - inherits "~2.0.3" +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== randombytes@^2.1.0: version "2.1.0" @@ -6297,17 +8416,17 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" -rc@1.2.8, rc@^1.2.8: +rc@1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6324,70 +8443,22 @@ react-animation-on-scroll@^5.1.0: dependencies: lodash.throttle "^4.1.1" -react-base16-styling@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== - dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" - -react-dev-utils@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" - integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== - dependencies: - "@babel/code-frame" "^7.16.0" - address "^1.1.2" - browserslist "^4.18.1" - chalk "^4.1.2" - cross-spawn "^7.0.3" - detect-port-alt "^1.1.6" - escape-string-regexp "^4.0.0" - filesize "^8.0.6" - find-up "^5.0.0" - fork-ts-checker-webpack-plugin "^6.5.0" - global-modules "^2.0.0" - globby "^11.0.4" - gzip-size "^6.0.0" - immer "^9.0.7" - is-root "^2.1.0" - loader-utils "^3.2.0" - open "^8.4.0" - pkg-up "^3.1.0" - prompts "^2.4.2" - react-error-overlay "^6.0.11" - recursive-readdir "^2.2.2" - shell-quote "^1.7.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -react-dom@^16.8.4: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== +react-dom@^19.2.0: + version "19.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.0.tgz#00ed1e959c365e9a9d48f8918377465466ec3af8" + integrity sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ== dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + scheduler "^0.27.0" react-fast-compare@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== -react-helmet-async@*, react-helmet-async@^1.3.0: +"react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" - integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + resolved "https://registry.yarnpkg.com/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz#11fbc6094605cf60aa04a28c17e0aab894b4ecff" + integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A== dependencies: "@babel/runtime" "^7.12.5" invariant "^2.2.4" @@ -6405,20 +8476,15 @@ react-is@^18.2.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-json-view@^1.21.3: - version "1.21.3" - resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" - integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== - dependencies: - flux "^4.0.1" - react-base16-styling "^0.6.0" - react-lifecycles-compat "^3.0.4" - react-textarea-autosize "^8.3.2" +react-is@^19.0.0, react-is@^19.2.0: + version "19.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.0.tgz#ddc3b4a4e0f3336c3847f18b806506388d7b9973" + integrity sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA== -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-json-view-lite@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz#c7ff011c7cc80e9900abc7aa4916c6a5c6d6c1c6" + integrity sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g== react-loadable-ssr-addon-v5-slorber@^1.0.1: version "1.0.1" @@ -6427,6 +8493,13 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" +"react-loadable@npm:@docusaurus/react-loadable@6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" + integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== + dependencies: + "@types/react" "*" + react-material-ui-carousel@^3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/react-material-ui-carousel/-/react-material-ui-carousel-3.4.2.tgz#3db3b4719859960284f262470b304fecad89fa18" @@ -6446,44 +8519,34 @@ react-router-config@^5.1.1: dependencies: "@babel/runtime" "^7.1.2" -react-router-dom@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199" - integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== +react-router-dom@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.3.3" + react-router "5.3.4" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.3, react-router@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288" - integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== +react-router@5.3.4, react-router@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" hoist-non-react-statics "^3.1.0" loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" path-to-regexp "^1.7.0" prop-types "^15.6.2" react-is "^16.6.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-textarea-autosize@^8.3.2: - version "8.3.4" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" - integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== - dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.3.0" - use-latest "^1.2.1" - react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -6494,14 +8557,10 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^16.8.4: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" +react@^19.2.0: + version "19.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.2.0.tgz#d33dd1721698f4376ae57a54098cb47fc75d93a5" + integrity sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ== readable-stream@^2.0.1: version "2.3.7" @@ -6532,24 +8591,45 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -reading-time@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" - integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== +recma-build-jsx@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz#c02f29e047e103d2fab2054954e1761b8ea253c4" + integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== + dependencies: + "@types/estree" "^1.0.0" + estree-util-build-jsx "^3.0.0" + vfile "^6.0.0" + +recma-jsx@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/recma-jsx/-/recma-jsx-1.0.1.tgz#58e718f45e2102ed0bf2fa994f05b70d76801a1a" + integrity sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w== + dependencies: + acorn-jsx "^5.0.0" + estree-util-to-js "^2.0.0" + recma-parse "^1.0.0" + recma-stringify "^1.0.0" + unified "^11.0.0" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== +recma-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/recma-parse/-/recma-parse-1.0.0.tgz#c351e161bb0ab47d86b92a98a9d891f9b6814b52" + integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== dependencies: - resolve "^1.1.6" + "@types/estree" "^1.0.0" + esast-util-from-js "^2.0.0" + unified "^11.0.0" + vfile "^6.0.0" -recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== +recma-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/recma-stringify/-/recma-stringify-1.0.0.tgz#54632030631e0c7546136ff9ef8fde8e7b44f130" + integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== dependencies: - minimatch "3.0.4" + "@types/estree" "^1.0.0" + estree-util-to-js "^2.0.0" + unified "^11.0.0" + vfile "^6.0.0" regenerate-unicode-properties@^10.1.0: version "10.1.0" @@ -6558,6 +8638,13 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -6568,13 +8655,6 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - regexpu-core@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.1.tgz#a69c26f324c1e962e9ffd0b88b055caba8089139" @@ -6587,25 +8667,49 @@ regexpu-core@^5.1.0: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== dependencies: - rc "1.2.8" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" -registry-url@^5.0.0: +registry-auth-token@^5.0.1: version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== + dependencies: + "@pnpm/npm-conf" "^2.1.0" + +registry-url@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" + integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== dependencies: - rc "^1.2.8" + rc "1.2.8" regjsgen@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" + integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + dependencies: + jsesc "~3.1.0" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -6613,67 +8717,109 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" +rehype-raw@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" + integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== + dependencies: + "@types/hast" "^3.0.0" + hast-util-raw "^9.0.0" + vfile "^6.0.0" + +rehype-recma@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rehype-recma/-/rehype-recma-1.0.0.tgz#d68ef6344d05916bd96e25400c6261775411aa76" + integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + hast-util-to-estree "^3.0.0" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== -remark-emoji@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" - integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== +remark-directive@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.1.tgz#689ba332f156cfe1118e849164cc81f157a3ef0a" + integrity sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-directive "^3.0.0" + micromark-extension-directive "^3.0.0" + unified "^11.0.0" + +remark-emoji@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04" + integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== + dependencies: + "@types/mdast" "^4.0.2" + emoticon "^4.0.1" + mdast-util-find-and-replace "^3.0.1" + node-emoji "^2.1.0" + unified "^11.0.4" + +remark-frontmatter@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2" + integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-frontmatter "^2.0.0" + micromark-extension-frontmatter "^2.0.0" + unified "^11.0.0" + +remark-gfm@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-gfm "^3.0.0" + micromark-extension-gfm "^3.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + unified "^11.0.0" + +remark-mdx@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.1.tgz#047f97038bc7ec387aebb4b0a4fe23779999d845" + integrity sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg== dependencies: - emoticon "^3.2.0" - node-emoji "^1.10.0" - unist-util-visit "^2.0.3" + mdast-util-mdx "^3.0.0" + micromark-extension-mdxjs "^3.0.0" -remark-footnotes@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" - integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== - -remark-mdx@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" - integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== - dependencies: - "@babel/core" "7.12.9" - "@babel/helper-plugin-utils" "7.10.4" - "@babel/plugin-proposal-object-rest-spread" "7.12.1" - "@babel/plugin-syntax-jsx" "7.12.1" - "@mdx-js/util" "1.6.22" - is-alphabetical "1.0.4" - remark-parse "8.0.3" - unified "9.2.0" - -remark-parse@8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" - integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== - dependencies: - ccount "^1.0.0" - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^2.0.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^2.0.0" - vfile-location "^3.0.0" - xtend "^4.0.1" - -remark-squeeze-paragraphs@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" - integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-rehype@^11.0.0: + version "11.1.2" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" + integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + +remark-stringify@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== dependencies: - mdast-squeeze-paragraphs "^4.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-markdown "^2.0.0" + unified "^11.0.0" renderkid@^3.0.0: version "3.0.0" @@ -6686,7 +8832,7 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" -repeat-string@^1.5.4: +repeat-string@^1.0.0: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== @@ -6706,6 +8852,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -6716,7 +8867,7 @@ resolve-pathname@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.3.2: +resolve@^1.19.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -6725,12 +8876,21 @@ resolve@^1.1.6, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.3.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== +resolve@^1.22.10: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== dependencies: - lowercase-keys "^1.0.0" + lowercase-keys "^3.0.0" retry@^0.13.1: version "0.13.1" @@ -6742,28 +8902,21 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rtl-detect@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" - integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== - -rtlcss@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" - integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== +rtlcss@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.3.0.tgz#f8efd4d5b64f640ec4af8fa25b65bacd9e07cc97" + integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig== dependencies: - find-up "^5.0.0" + escalade "^3.1.1" picocolors "^1.0.0" - postcss "^8.3.11" + postcss "^8.4.21" strip-json-comments "^3.1.1" +run-applescript@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" + integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6771,13 +8924,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.4: - version "7.5.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" - integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== - dependencies: - tslib "^2.1.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -6818,33 +8964,17 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" +scheduler@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.27.0.tgz#0c4ef82d67d1e5c1e359e8fc76d3a87f045fe5bd" + integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" +schema-dts@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/schema-dts/-/schema-dts-1.1.5.tgz#9237725d305bac3469f02b292a035107595dc324" + integrity sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg== -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: +schema-utils@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -6863,6 +8993,16 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +schema-utils@^4.0.1, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -6876,41 +9016,42 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: + "@types/node-forge" "^1.3.0" node-forge "^1" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== +semver-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: - semver "^6.3.0" - -semver@^5.4.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver "^7.3.5" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +semver@^7.5.4: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -6926,6 +9067,25 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +send@~0.19.0: + version "0.19.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.1.tgz#1c2563b2ee4fe510b806b21ec46f355005a369f9" + integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + serialize-javascript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -6933,18 +9093,24 @@ serialize-javascript@^6.0.0: dependencies: randombytes "^2.1.0" -serve-handler@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" - integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== +serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.6: + version "6.1.6" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1" + integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== dependencies: bytes "3.0.0" content-disposition "0.5.2" - fast-url-parser "1.1.3" mime-types "2.1.18" - minimatch "3.0.4" + minimatch "3.1.2" path-is-inside "1.0.2" - path-to-regexp "2.2.1" + path-to-regexp "3.3.0" range-parser "1.2.0" serve-index@^1.9.1: @@ -6960,27 +9126,22 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@~1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + send "0.19.0" setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -7009,42 +9170,64 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== +shell-quote@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== +sirv@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" sisteransi@^1.0.5: version "1.0.5" @@ -7061,6 +9244,13 @@ sitemap@^7.1.1: arg "^5.0.0" sax "^1.2.4" +skin-tone@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" + integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== + dependencies: + unicode-emoji-modifier-base "^1.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -7071,6 +9261,14 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -7080,16 +9278,21 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -sort-css-media-queries@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" - integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== +sort-css-media-queries@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c" + integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0": version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.0.1, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -7098,20 +9301,25 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.0, source-map@^0.5.7: +source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: +source-map@^0.6.0, source-map@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +source-map@^0.7.0: + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== spdy-transport@^3.0.0: version "3.0.0" @@ -7141,15 +9349,10 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== +srcset@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" + integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== statuses@2.0.1: version "2.0.1" @@ -7161,12 +9364,17 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -std-env@^3.0.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.2.1.tgz#00e260ec3901333537125f81282b9296b00d7304" - integrity sha512-D/uYFWkI/31OrnKmXZqGAGK5GbQRPp/BWA1nuITcc6ICblhhuQUPHS5E2GSCVS7Hwhf4ciq8qsATwBUxv+lI6w== +statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +std-env@^3.7.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" + integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7175,7 +9383,7 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1: +string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -7198,6 +9406,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -7241,12 +9457,19 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-to-object@0.3.0, style-to-object@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" - integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== +style-to-js@^1.0.0: + version "1.1.21" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.21.tgz#2908941187f857e79e28e9cd78008b9a0b3e0e8d" + integrity sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ== dependencies: - inline-style-parser "0.1.1" + style-to-object "1.0.14" + +style-to-object@1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.14.tgz#1d22f0e7266bb8c6d8cae5caf4ec4f005e08f611" + integrity sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw== + dependencies: + inline-style-parser "0.2.7" style-value-types@4.1.4: version "4.1.4" @@ -7256,19 +9479,24 @@ style-value-types@4.1.4: hey-listen "^1.0.8" tslib "^2.1.0" -stylehacks@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" - integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== +stylehacks@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" + integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== dependencies: - browserslist "^4.16.6" - postcss-selector-parser "^6.0.4" + browserslist "^4.23.0" + postcss-selector-parser "^6.0.16" stylis@4.0.13: version "4.0.13" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -7300,41 +9528,49 @@ svg-parser@^2.0.4: resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^2.7.0, svgo@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== +svgo@^3.0.2, svgo@^3.2.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" picocolors "^1.0.0" - stable "^0.1.8" -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +swr@^2.2.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.3.7.tgz#93ca89c9c06a6a8dab72e9d8e85a687123f40356" + integrity sha512-ZEquQ82QvalqTxhBVv/DlAg2mbmUjF4UgpPg9wwk4ufb9rQnZXh1iKyyKBqV6bQGu1Ie7L1QwSYO07qFIa1p+g== + dependencies: + dequal "^2.0.3" + use-sync-external-store "^1.4.0" -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0, tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== +tapable@^2.2.1, tapable@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== + +terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9: + version "5.3.14" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" + integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" -terser@^5.10.0, terser@^5.14.1: +terser@^5.10.0: version "5.15.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== @@ -7344,10 +9580,25 @@ terser@^5.10.0, terser@^5.14.1: commander "^2.20.0" source-map-support "~0.5.20" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +terser@^5.15.1, terser@^5.31.1: + version "5.44.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.1.tgz#e391e92175c299b8c284ad6ded609e37303b0a9c" + integrity sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.15.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +thingies@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.5.0.tgz#5f7b882c933b85989f8466b528a6247a6881e04f" + integrity sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw== + +throttleit@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-2.1.0.tgz#a7e4aa0bf4845a5bd10daa39ea0c783f631a07b4" + integrity sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw== thunky@^1.0.2: version "1.1.0" @@ -7359,21 +9610,21 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.0.tgz#f967859a92cc0048fe55c43c3f8ad23c72a6d022" integrity sha512-ENKs33oJRM5HsIwSsRxu7eXImrgcQiqFXRaU1WzY0bNxWoJjK4AMPnJWVvPbDHIGXMcxBZ5YdrGD8zXqacp75Q== -tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: +tiny-warning@^1.0.0, tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinypool@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -7381,47 +9632,52 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.1: +toidentifier@1.0.1, toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +tree-dump@^1.0.3, tree-dump@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" + integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== -trim-trailing-lines@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" - integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +tslib@^2.0.0, tslib@^2.6.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.3, tslib@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^1.0.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-fest@^2.5.0: +type-fest@^2.13.0, type-fest@^2.5.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== @@ -7441,24 +9697,16 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -ua-parser-js@^0.7.30: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== - -unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== - dependencies: - inherits "^2.0.0" - xtend "^4.0.0" - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +unicode-emoji-modifier-base@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" + integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== + unicode-match-property-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" @@ -7472,106 +9720,87 @@ unicode-match-property-value-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unified@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" - integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== +unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== dependencies: - bail "^1.0.0" + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" -unified@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" - integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== +unique-string@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" + crypto-random-string "^4.0.0" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== +unist-util-is@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== dependencies: - crypto-random-string "^2.0.0" + "@types/unist" "^3.0.0" -unist-builder@2.0.3, unist-builder@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" - integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== - -unist-util-generated@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" - integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - -unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" - integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== - -unist-util-remove-position@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" - integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== +unist-util-position-from-estree@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" + integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== dependencies: - unist-util-visit "^2.0.0" + "@types/unist" "^3.0.0" -unist-util-remove@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" - integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== dependencies: - unist-util-is "^4.0.0" + "@types/unist" "^3.0.0" -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== dependencies: - "@types/unist" "^2.0.2" + "@types/unist" "^3.0.0" -unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== +unist-util-visit-parents@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" -unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -7584,25 +9813,33 @@ update-browserslist-db@^1.0.9: escalade "^3.1.1" picocolors "^1.0.0" -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +update-notifier@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" + integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== + dependencies: + boxen "^7.0.0" + chalk "^5.0.1" + configstore "^6.0.0" + has-yarn "^3.0.0" + import-lazy "^4.0.0" + is-ci "^3.0.1" is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" + is-npm "^6.0.0" + is-yarn-global "^0.4.0" + latest-version "^7.0.0" + pupa "^3.1.0" + semver "^7.3.7" + semver-diff "^4.0.0" + xdg-basedir "^5.1.0" uri-js@^4.2.2: version "4.4.1" @@ -7620,29 +9857,10 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - -use-composed-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" - integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== - -use-isomorphic-layout-effect@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - -use-latest@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" - integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== - dependencies: - use-isomorphic-layout-effect "^1.1.1" +use-sync-external-store@^1.4.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d" + integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" @@ -7679,44 +9897,34 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vfile-location@^3.0.0, vfile-location@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" - integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== - -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" - integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== +vfile-location@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" + integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" + "@types/unist" "^3.0.0" + vfile "^6.0.0" -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" - integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" -wait-on@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" - integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== +vfile@^6.0.0, vfile@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== dependencies: - axios "^0.25.0" - joi "^17.6.0" - lodash "^4.17.21" - minimist "^1.2.5" - rxjs "^7.5.4" + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -7728,129 +9936,142 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-namespaces@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" - integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== -webpack-bundle-analyzer@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz#bee2ee05f4ba4ed430e4831a319126bb4ed9f5a6" - integrity sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw== +webpack-bundle-analyzer@^4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" + integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" - chalk "^4.1.0" commander "^7.2.0" + debounce "^1.2.1" + escape-string-regexp "^4.0.0" gzip-size "^6.0.0" - lodash "^4.17.20" + html-escaper "^2.0.2" opener "^1.5.2" - sirv "^1.0.7" + picocolors "^1.0.0" + sirv "^2.0.3" ws "^7.3.1" -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== +webpack-dev-middleware@^7.4.2: + version "7.4.5" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" + integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== dependencies: colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" + memfs "^4.43.1" + mime-types "^3.0.1" + on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.9.3: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" +webpack-dev-server@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz#96a143d50c58fef0c79107e61df911728d7ceb39" + integrity sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/express-serve-static-core" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" + bonjour-service "^1.2.1" + chokidar "^3.6.0" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" + express "^4.21.2" graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" + http-proxy-middleware "^2.0.9" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + schema-utils "^4.2.0" + selfsigned "^2.4.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" + webpack-dev-middleware "^7.4.2" + ws "^8.18.0" -webpack-merge@^5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== +webpack-merge@^5.9.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: clone-deep "^4.0.1" + flat "^5.0.2" wildcard "^2.0.0" -webpack-sources@^3.2.2, webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.73.0: - version "5.74.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" - integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.1" + +webpack-sources@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== + +webpack@^5.88.1, webpack@^5.95.0: + version "5.103.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.103.0.tgz#17a7c5a5020d5a3a37c118d002eade5ee2c6f3da" + integrity sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.15.0" + acorn-import-phases "^1.0.3" + browserslist "^4.26.3" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.17.3" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" + schema-utils "^4.3.3" + tapable "^2.3.0" + terser-webpack-plugin "^5.3.11" + watchpack "^2.4.4" + webpack-sources "^3.3.3" -webpackbar@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" - integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== +webpackbar@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-6.0.1.tgz#5ef57d3bf7ced8b19025477bc7496ea9d502076b" + integrity sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q== dependencies: - chalk "^4.1.0" - consola "^2.15.3" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + consola "^3.2.3" + figures "^3.2.0" + markdown-table "^2.0.0" pretty-time "^1.1.0" - std-env "^3.0.1" + std-env "^3.7.0" + wrap-ansi "^7.0.0" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -7866,21 +10087,6 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -7888,13 +10094,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - widest-line@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" @@ -7907,6 +10106,11 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== +wildcard@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -7925,12 +10129,16 @@ wrap-ansi@^8.0.1: string-width "^5.0.1" strip-ansi "^7.0.1" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -7945,15 +10153,22 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.4.2: - version "8.9.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e" - integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== +ws@^8.18.0: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +wsl-utils@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" + integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== + dependencies: + is-wsl "^3.1.0" + +xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" + integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== xml-js@^1.6.11: version "1.6.11" @@ -7962,27 +10177,32 @@ xml-js@^1.6.11: dependencies: sax "^1.2.4" -xtend@^4.0.0, xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: +yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yocto-queue@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.2.tgz#3e09c95d3f1aa89a58c114c99223edf639152c00" + integrity sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ== -zwitch@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" - integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== +zod@^4.1.8: + version "4.1.13" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.1.13.tgz#93699a8afe937ba96badbb0ce8be6033c0a4b6b1" + integrity sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig== + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From c47f226c5cea6bc308b3218f720998c24f7b0db1 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 15:44:29 +0100 Subject: [PATCH 135/165] Add link in docs --- website/docs/middleware/ldp/index.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/website/docs/middleware/ldp/index.md b/website/docs/middleware/ldp/index.md index 9467b2c39..967b550ea 100644 --- a/website/docs/middleware/ldp/index.md +++ b/website/docs/middleware/ldp/index.md @@ -23,6 +23,7 @@ This package allows you to setup [LDP](https://www.w3.org/TR/ldp-primer/) contai - [LdpContainerService](container.md) - [LdpLinkHeaderService](link-header.md) - [LdpRegistryService](registry.md) +- [LdpBinaryService](binary.md) - LdpApiService _(internal)_ - LdpCacheService _(internal)_ @@ -65,16 +66,16 @@ module.exports = { ## Settings -| Property | Type | Default | Description | -| -------------------------- | ---------- | --------------------------- | ------------------------------------------------------------------------ | -| `baseUrl` | `String` | **required** | Base URL of the LDP server | -| `containers` | `[Object]` | **required** | List of containers to set up, with their options (see below) | -| `defaultContainerOptions` | `[Object]` | | Default options for all containers (see below) | -| `mirrorGraphName` | `String` | "http://semapps.org/mirror" | Name of the RDF graph where to store mirrored data | -| `podProvider` | `Boolean` | false | Set to true if your server is a POD provider | -| `preferredViewForResource` | `Function` | | Function called to generate a redirect to the preferred view (see below) | -| `allowSlugs` | `Boolean` | true | If false, slugs will be ignored and UUIDs will be used everywhere | -| `binary.maxSize` | `String` | "50Mb" | The maximum size allowed for uploaded binaries | +| Property | Type | Default | Description | +| -------------------------- | --------------- | --------------------------- | ------------------------------------------------------------------------ | +| `baseUrl` | `String` | **required** | Base URL of the LDP server | +| `containers` | `[Object]` | **required** | List of containers to set up, with their options (see below) | +| `defaultContainerOptions` | `[Object]` | | Default options for all containers (see below) | +| `mirrorGraphName` | `String` | "http://semapps.org/mirror" | Name of the RDF graph where to store mirrored data | +| `podProvider` | `Boolean` | false | Set to true if your server is a POD provider | +| `preferredViewForResource` | `Function` | | Function called to generate a redirect to the preferred view (see below) | +| `allowSlugs` | `Boolean` | true | If false, slugs will be ignored and UUIDs will be used everywhere | +| `binaryAdapter` | `BinaryAdapter` | **required** | The [adapter](./binary#adapters) that will store binaries | ## Container options From 6527a70b7488936aef5c8c67738142e5276f3d30 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 18:58:47 +0100 Subject: [PATCH 136/165] Working tests through Moleculer actions --- .../ldp/services/container/actions/get.ts | 39 ++++++++- src/middleware/tests/ldp/paging.test.ts | 85 +++++++++++++++++++ 2 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 src/middleware/tests/ldp/paging.test.ts diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 3c214ee14..11f08aea3 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -13,13 +13,38 @@ const Schema = { accept: { type: 'string', optional: true }, filters: { type: 'object', optional: true }, doNotIncludeResources: { type: 'boolean', default: false }, + maxPerPage: { type: 'number', optional: true }, + page: { type: 'number', default: 1 }, + sortOrder: { type: 'enum', values: ['ASC', 'DESC'], default: 'ASC' }, + sortPredicate: { type: 'string', optional: true }, jsonContext: { type: 'multi', rules: [{ type: 'array' }, { type: 'object' }, { type: 'string' }], optional: true } }, cache: { - keys: ['containerUri', 'filters', 'doNotIncludeResources', 'jsonContext', 'webId', '#webId'] + keys: [ + 'containerUri', + 'filters', + 'doNotIncludeResources', + 'maxPerPage', + 'page', + 'sortOrder', + 'sortPredicate', + 'jsonContext', + 'webId', + '#webId' + ] }, async handler(ctx) { - const { containerUri, accept, filters, doNotIncludeResources, jsonContext } = ctx.params; + const { + containerUri, + accept, + filters, + doNotIncludeResources, + maxPerPage, + page, + sortOrder, + sortPredicate, + jsonContext + } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; await ctx.call('permissions.check', { uri: containerUri, type: 'container', mode: 'acl:Read', webId }); @@ -50,6 +75,13 @@ const Schema = { if (!doNotIncludeResources) { const filtersQuery = buildFiltersQuery(filters); + const limitQuery = maxPerPage + ? ` + LIMIT ${maxPerPage} + OFFSET ${(page - 1) * maxPerPage} + ` + : ''; + const resourcesResults: any = await ctx.call('triplestore.query', { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} @@ -59,7 +91,10 @@ const Schema = { <${containerUri}> ?s1 . } ${filtersQuery} + ${sortPredicate ? `GRAPH ?s1 { ?s1 <${sortPredicate}> ?sortValue }` : ''} } + ${sortPredicate ? `ORDER BY ${sortOrder}(?sortValue)` : ''} + ${limitQuery} `, accept, webId diff --git a/src/middleware/tests/ldp/paging.test.ts b/src/middleware/tests/ldp/paging.test.ts new file mode 100644 index 000000000..49ed0f08a --- /dev/null +++ b/src/middleware/tests/ldp/paging.test.ts @@ -0,0 +1,85 @@ +import { ServiceBroker } from 'moleculer'; +import initialize from './initialize.ts'; +import { createAccount } from '../utils.ts'; + +jest.setTimeout(20000); +let broker: ServiceBroker; +let alice: any; + +beforeAll(async () => { + broker = await initialize(true); + await broker.start(); + alice = await createAccount(broker, 'alice'); +}); + +afterAll(async () => { + if (broker) await broker.stop(); +}); + +describe('LDP paging tests', () => { + let containerUri: string; + let resourcesUris: string[] = []; + + test('Post 5 resources in a container', async () => { + containerUri = await alice.getContainerUri('pair:Project'); + + for (let i = 1; i <= 5; i++) { + const startDate = new Date(2025, 11, i, 12, 0, 0); + + resourcesUris[i] = await alice.call('ldp.container.post', { + containerUri, + resource: { + '@context': { + '@vocab': 'http://virtual-assembly.org/ontologies/pair#' + }, + '@type': 'Project', + label: `Project #${i}`, + startDate: startDate.toISOString() + }, + slug: `project-${i}` + }); + } + + const container = await alice.call('ldp.container.get', { containerUri }); + expect(container['ldp:contains']).toHaveLength(5); + }); + + test('Get container with paging', async () => { + const page1 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2 }); + expect(page1['ldp:contains']).toHaveLength(2); + + const page2 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2, page: 2 }); + expect(page2['ldp:contains']).toHaveLength(2); + + // The last page only has a single resource + const page3 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2, page: 3 }); + expect(page3['ldp:contains']).toHaveLength(1); + + // All resources are in the 3 pages + expect([ + ...page1['ldp:contains'].map((r: any) => r.id), + ...page2['ldp:contains'].map((r: any) => r.id), + ...page3['ldp:contains'].map((r: any) => r.id) + ]).toEqual(expect.arrayContaining(resourcesUris)); + }); + + test('Get container with paging and sorting', async () => { + let container = await alice.call('ldp.container.get', { + containerUri, + maxPerPage: 2, + sortPredicate: 'http://virtual-assembly.org/ontologies/pair#startDate', + sortOrder: 'ASC' + }); + expect(container['ldp:contains'][0]['pair:label']).toBe('Project #1'); + expect(container['ldp:contains'][1]['pair:label']).toBe('Project #2'); + + container = await alice.call('ldp.container.get', { + containerUri, + maxPerPage: 2, + sortPredicate: 'http://virtual-assembly.org/ontologies/pair#startDate', + sortOrder: 'DESC' + }); + expect(container['ldp:contains'][0]['pair:label']).toBe('Project #5'); + expect(container['ldp:contains'][1]['pair:label']).toBe('Project #4'); + }); +}); From 99445674724bc04ec90428402418faf4e3060206 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 3 Dec 2025 19:33:01 +0100 Subject: [PATCH 137/165] Start work on API --- .../packages/ldp/services/api/actions/get.ts | 19 +++- .../ldp/services/link-header/index.ts | 3 +- src/middleware/tests/ldp/paging.test.ts | 98 +++++++++++++------ 3 files changed, 83 insertions(+), 37 deletions(-) diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index b60d10a4f..ab3f66c9d 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -7,7 +7,7 @@ const { MoleculerError } = Errors; export default async function get(this: any, ctx: any) { try { - const { username, slugParts } = ctx.params; + const { username, slugParts, page } = ctx.params; const uri = this.getUriFromSlugParts(slugParts, username); ctx.meta.dataset = getDatasetFromUri(uri); @@ -23,16 +23,27 @@ export default async function get(this: any, ctx: any) { const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri: uri }); + let doNotIncludeResources = false; + let maxPerPage; + // See https://www.w3.org/TR/ldp/#prefer-parameters - const doNotIncludeResources = - ctx.meta.headers?.prefer === 'return=representation; include="http://www.w3.org/ns/ldp#PreferMinimalContainer"'; + if (ctx.meta.headers?.prefer) { + doNotIncludeResources = ctx.meta.headers.prefer.includes( + 'include="http://www.w3.org/ns/ldp#PreferMinimalContainer"' + ); + + const regexResults = /max-member-count="(\d+)"/.exec(ctx.meta.headers.prefer); + maxPerPage = regexResults?.[1] && parseInt(regexResults[1]); + } res = await ctx.call( controlledActions?.list || 'ldp.container.get', cleanUndefined({ containerUri: uri, jsonContext: parseJson(ctx.meta.headers?.jsonldcontext), - doNotIncludeResources + doNotIncludeResources, + maxPerPage, + page: page && parseInt(page, 10) }) ); diff --git a/src/middleware/packages/ldp/services/link-header/index.ts b/src/middleware/packages/ldp/services/link-header/index.ts index 75f2636e7..6b9ab347e 100644 --- a/src/middleware/packages/ldp/services/link-header/index.ts +++ b/src/middleware/packages/ldp/services/link-header/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import registerAction from './actions/register.ts'; @@ -6,7 +6,6 @@ const LdpLinkHeaderSchema = { name: 'ldp.link-header' as const, actions: { get: getAction, - // @ts-expect-error TS(2322): Type 'ActionSchema<{ actionName: { type: "string";... Remove this comment to see the full error message register: registerAction }, async started() { diff --git a/src/middleware/tests/ldp/paging.test.ts b/src/middleware/tests/ldp/paging.test.ts index 49ed0f08a..965b1affb 100644 --- a/src/middleware/tests/ldp/paging.test.ts +++ b/src/middleware/tests/ldp/paging.test.ts @@ -1,3 +1,4 @@ +import fetch from 'node-fetch'; import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; import { createAccount } from '../utils.ts'; @@ -44,42 +45,77 @@ describe('LDP paging tests', () => { expect(container['ldp:contains']).toHaveLength(5); }); - test('Get container with paging', async () => { - const page1 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2 }); - expect(page1['ldp:contains']).toHaveLength(2); + describe('Get through Moleculer actions', () => { + test('Get container with paging', async () => { + const page1 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2 }); + expect(page1['ldp:contains']).toHaveLength(2); - const page2 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2, page: 2 }); - expect(page2['ldp:contains']).toHaveLength(2); + const page2 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2, page: 2 }); + expect(page2['ldp:contains']).toHaveLength(2); - // The last page only has a single resource - const page3 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2, page: 3 }); - expect(page3['ldp:contains']).toHaveLength(1); + // The last page only has a single resource + const page3 = await alice.call('ldp.container.get', { containerUri, maxPerPage: 2, page: 3 }); + expect(page3['ldp:contains']).toHaveLength(1); - // All resources are in the 3 pages - expect([ - ...page1['ldp:contains'].map((r: any) => r.id), - ...page2['ldp:contains'].map((r: any) => r.id), - ...page3['ldp:contains'].map((r: any) => r.id) - ]).toEqual(expect.arrayContaining(resourcesUris)); - }); + // All resources are in the 3 pages + expect([ + ...page1['ldp:contains'].map((r: any) => r.id), + ...page2['ldp:contains'].map((r: any) => r.id), + ...page3['ldp:contains'].map((r: any) => r.id) + ]).toEqual(expect.arrayContaining(resourcesUris)); + }); + + test('Get container with paging and sorting', async () => { + let container = await alice.call('ldp.container.get', { + containerUri, + maxPerPage: 2, + sortPredicate: 'http://virtual-assembly.org/ontologies/pair#startDate', + sortOrder: 'ASC' + }); + expect(container['ldp:contains'][0]['pair:label']).toBe('Project #1'); + expect(container['ldp:contains'][1]['pair:label']).toBe('Project #2'); - test('Get container with paging and sorting', async () => { - let container = await alice.call('ldp.container.get', { - containerUri, - maxPerPage: 2, - sortPredicate: 'http://virtual-assembly.org/ontologies/pair#startDate', - sortOrder: 'ASC' + container = await alice.call('ldp.container.get', { + containerUri, + maxPerPage: 2, + sortPredicate: 'http://virtual-assembly.org/ontologies/pair#startDate', + sortOrder: 'DESC' + }); + expect(container['ldp:contains'][0]['pair:label']).toBe('Project #5'); + expect(container['ldp:contains'][1]['pair:label']).toBe('Project #4'); }); - expect(container['ldp:contains'][0]['pair:label']).toBe('Project #1'); - expect(container['ldp:contains'][1]['pair:label']).toBe('Project #2'); - - container = await alice.call('ldp.container.get', { - containerUri, - maxPerPage: 2, - sortPredicate: 'http://virtual-assembly.org/ontologies/pair#startDate', - sortOrder: 'DESC' + }); + + describe('Get through API', () => { + test('Get container with paging', async () => { + const { json: page1 } = await alice.fetch(containerUri, { + headers: new fetch.Headers({ + Prefer: 'return=representation; max-member-count="2"' + }) + }); + expect(page1['ldp:contains']).toHaveLength(2); + + const { json: page2 } = await alice.fetch(`${containerUri}?page=2`, { + headers: new fetch.Headers({ + Prefer: 'return=representation; max-member-count="2"' + }) + }); + expect(page2['ldp:contains']).toHaveLength(2); + + // The last page only has a single resource + const { json: page3 } = await alice.fetch(`${containerUri}?page=3`, { + headers: new fetch.Headers({ + Prefer: 'return=representation; max-member-count="2"' + }) + }); + expect(page3['ldp:contains']).toHaveLength(1); + + // All resources are in the 3 pages + expect([ + ...page1['ldp:contains'].map((r: any) => r.id), + ...page2['ldp:contains'].map((r: any) => r.id), + ...page3['ldp:contains'].map((r: any) => r.id) + ]).toEqual(expect.arrayContaining(resourcesUris)); }); - expect(container['ldp:contains'][0]['pair:label']).toBe('Project #5'); - expect(container['ldp:contains'][1]['pair:label']).toBe('Project #4'); }); }); From 7a2734638436e1d98f9aac6f60fc47540fed4d40 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 4 Dec 2025 10:30:58 +0100 Subject: [PATCH 138/165] Add API for sort order and predicate --- .../packages/ldp/services/api/actions/get.ts | 18 ++++++-- .../ldp/services/container/actions/get.ts | 6 ++- src/middleware/tests/ldp/paging.test.ts | 42 +++++++++++++++++++ 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index ab3f66c9d..b6a50b079 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -24,7 +24,9 @@ export default async function get(this: any, ctx: any) { const { controlledActions } = await ctx.call('ldp.registry.getByUri', { containerUri: uri }); let doNotIncludeResources = false; - let maxPerPage; + let maxPerPage: number | undefined; + let sortPredicate: string | undefined; + let sortOrder: string | undefined; // See https://www.w3.org/TR/ldp/#prefer-parameters if (ctx.meta.headers?.prefer) { @@ -32,8 +34,14 @@ export default async function get(this: any, ctx: any) { 'include="http://www.w3.org/ns/ldp#PreferMinimalContainer"' ); - const regexResults = /max-member-count="(\d+)"/.exec(ctx.meta.headers.prefer); - maxPerPage = regexResults?.[1] && parseInt(regexResults[1]); + let regexResults = /max-member-count="(\d+)"/.exec(ctx.meta.headers.prefer); + maxPerPage = regexResults?.[1] ? parseInt(regexResults[1]) : undefined; + + regexResults = /sort-predicate="([^"]+)"/.exec(ctx.meta.headers.prefer); + sortPredicate = regexResults?.[1]; + + regexResults = /sort-order="([ASC|asc|DESC|desc]+)"/.exec(ctx.meta.headers.prefer); + sortOrder = regexResults?.[1] ? regexResults?.[1].toUpperCase() : 'ASC'; } res = await ctx.call( @@ -43,7 +51,9 @@ export default async function get(this: any, ctx: any) { jsonContext: parseJson(ctx.meta.headers?.jsonldcontext), doNotIncludeResources, maxPerPage, - page: page && parseInt(page, 10) + page: page && parseInt(page, 10), + sortPredicate, + sortOrder }) ); diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 11f08aea3..74953bf5e 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -82,6 +82,10 @@ const Schema = { ` : ''; + // Transform the prefixed predicate to a full URI if necessary + const expandedSortPredicate = + sortPredicate && (await ctx.call('jsonld.parser.expandPredicate', { predicate: sortPredicate })); + const resourcesResults: any = await ctx.call('triplestore.query', { query: ` ${await ctx.call('ontologies.getRdfPrefixes')} @@ -91,7 +95,7 @@ const Schema = { <${containerUri}> ?s1 . } ${filtersQuery} - ${sortPredicate ? `GRAPH ?s1 { ?s1 <${sortPredicate}> ?sortValue }` : ''} + ${sortPredicate ? `GRAPH ?s1 { ?s1 <${expandedSortPredicate}> ?sortValue }` : ''} } ${sortPredicate ? `ORDER BY ${sortOrder}(?sortValue)` : ''} ${limitQuery} diff --git a/src/middleware/tests/ldp/paging.test.ts b/src/middleware/tests/ldp/paging.test.ts index 965b1affb..0b75efec4 100644 --- a/src/middleware/tests/ldp/paging.test.ts +++ b/src/middleware/tests/ldp/paging.test.ts @@ -117,5 +117,47 @@ describe('LDP paging tests', () => { ...page3['ldp:contains'].map((r: any) => r.id) ]).toEqual(expect.arrayContaining(resourcesUris)); }); + + test('Get container with paging and sorting', async () => { + const { json: container1 } = await alice.fetch(containerUri, { + headers: new fetch.Headers({ + Prefer: + 'return=representation; max-member-count="2"; sort-predicate="http://virtual-assembly.org/ontologies/pair#startDate"' + }) + }); + expect(container1['ldp:contains']).toHaveLength(2); + expect(container1['ldp:contains'][0]['pair:label']).toBe('Project #1'); + expect(container1['ldp:contains'][1]['pair:label']).toBe('Project #2'); + + const { json: container2 } = await alice.fetch(containerUri, { + headers: new fetch.Headers({ + Prefer: + 'return=representation; max-member-count="2"; sort-predicate="http://virtual-assembly.org/ontologies/pair#startDate"; sort-order="ASC"' + }) + }); + expect(container2['ldp:contains']).toHaveLength(2); + expect(container2['ldp:contains'][0]['pair:label']).toBe('Project #1'); + expect(container2['ldp:contains'][1]['pair:label']).toBe('Project #2'); + + const { json: container3 } = await alice.fetch(containerUri, { + headers: new fetch.Headers({ + Prefer: + 'return=representation; max-member-count="2"; sort-predicate="http://virtual-assembly.org/ontologies/pair#startDate"; sort-order="DESC"' + }) + }); + expect(container3['ldp:contains']).toHaveLength(2); + expect(container3['ldp:contains'][0]['pair:label']).toBe('Project #5'); + expect(container3['ldp:contains'][1]['pair:label']).toBe('Project #4'); + + // We can use a prefix if the ontology is known by the server + const { json: container4 } = await alice.fetch(containerUri, { + headers: new fetch.Headers({ + Prefer: 'return=representation; max-member-count="2"; sort-predicate="pair:startDate"; sort-order="DESC"' + }) + }); + expect(container4['ldp:contains']).toHaveLength(2); + expect(container4['ldp:contains'][0]['pair:label']).toBe('Project #5'); + expect(container4['ldp:contains'][1]['pair:label']).toBe('Project #4'); + }); }); }); From c63282d996845aa81ac95cb3349088cd55b24685 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 4 Dec 2025 11:07:59 +0100 Subject: [PATCH 139/165] Add links to next/prev/first/last pages --- .../packages/ldp/services/api/actions/get.ts | 21 ++++- .../ldp/services/link-header/actions/get.ts | 24 +++--- src/middleware/tests/ldp/headers.test.ts | 12 +-- src/middleware/tests/ldp/paging.test.ts | 77 ++++++++++++++++++- 4 files changed, 110 insertions(+), 24 deletions(-) diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index b6a50b079..867731ca2 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -7,7 +7,8 @@ const { MoleculerError } = Errors; export default async function get(this: any, ctx: any) { try { - const { username, slugParts, page } = ctx.params; + let { username, slugParts, page } = ctx.params; + page = page ? parseInt(page, 10) : 1; const uri = this.getUriFromSlugParts(slugParts, username); ctx.meta.dataset = getDatasetFromUri(uri); @@ -15,6 +16,7 @@ export default async function get(this: any, ctx: any) { const types = await ctx.call('ldp.resource.getTypes', { resourceUri: uri }); let res; + let links = []; if (types.includes('http://www.w3.org/ns/ldp#Container')) { /* @@ -37,6 +39,17 @@ export default async function get(this: any, ctx: any) { let regexResults = /max-member-count="(\d+)"/.exec(ctx.meta.headers.prefer); maxPerPage = regexResults?.[1] ? parseInt(regexResults[1]) : undefined; + if (maxPerPage) { + links.push({ uri: 'http://www.w3.org/ns/ldp#Page', rel: 'type' }); + links.push({ uri: `${uri}?page=${1}`, rel: 'first' }); + + const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: uri }); + const numPages = Math.ceil(resourcesUris.length / maxPerPage); + if (numPages > page) links.push({ uri: `${uri}?page=${page + 1}`, rel: 'next' }); + if (page > 1) links.push({ uri: `${uri}?page=${page - 1}`, rel: 'prev' }); + if (numPages > 1) links.push({ uri: `${uri}?page=${numPages}`, rel: 'last' }); + } + regexResults = /sort-predicate="([^"]+)"/.exec(ctx.meta.headers.prefer); sortPredicate = regexResults?.[1]; @@ -51,13 +64,13 @@ export default async function get(this: any, ctx: any) { jsonContext: parseJson(ctx.meta.headers?.jsonldcontext), doNotIncludeResources, maxPerPage, - page: page && parseInt(page, 10), + page: page === 1 ? undefined : page, sortPredicate, sortOrder }) ); - if (doNotIncludeResources) { + if (doNotIncludeResources || maxPerPage || sortPredicate) { if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; ctx.meta.$responseHeaders['Preference-Applied'] = 'return=representation'; } @@ -121,7 +134,7 @@ export default async function get(this: any, ctx: any) { } if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; - ctx.meta.$responseHeaders.Link = await ctx.call('ldp.link-header.get', { uri }); + ctx.meta.$responseHeaders.Link = await ctx.call('ldp.link-header.get', { uri, additionalLinks: links }); // Hack to make our servers work with Mastodon servers, which expect a special profile if (ctx.meta.$responseType === 'application/ld+json') diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index 1150597e7..ded9aec93 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -1,29 +1,29 @@ import LinkHeader from 'http-link-header'; import { ActionSchema } from 'moleculer'; +import { Registration } from '../../../types.ts'; -const Schema = { +const GetAction = { visibility: 'public', params: { - uri: { type: 'string' } + uri: { type: 'string' }, + additionalLinks: { type: 'array' } }, async handler(ctx) { - const { uri } = ctx.params; + const { uri, additionalLinks } = ctx.params; const linkHeader = new LinkHeader(); for (const actionName of this.registeredActionNames) { - const params = await ctx.call(actionName, { uri }); - + const params: any = await ctx.call(actionName, { uri }); if (params) { if (!params.uri) throw new Error(`An uri should be returned from the ${actionName} action`); - linkHeader.set(params); } } // Get container-specific headers (if any) - const { controlledActions } = await ctx.call('ldp.registry.getByUri', { resourceUri: uri }); + const { controlledActions }: Registration = await ctx.call('ldp.registry.getByUri', { resourceUri: uri }); if (controlledActions?.getHeaderLinks) { - const links = await ctx.call(controlledActions.getHeaderLinks, { uri }); + const links: any[] = await ctx.call(controlledActions.getHeaderLinks, { uri }); if (links && links.length > 0) { for (const link of links) { linkHeader.set(link); @@ -31,8 +31,14 @@ const Schema = { } } + if (additionalLinks) { + for (const additionalLink of additionalLinks) { + linkHeader.set(additionalLink); + } + } + return linkHeader.toString(); } } satisfies ActionSchema; -export default Schema; +export default GetAction; diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index e9b974b14..2ac54a7aa 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -63,14 +63,12 @@ describe('Headers handling of LDP server', () => { } }); - const resourceUri = postHeaders.get('Location'); - // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message + const resourceUri = postHeaders.get('Location')!; const resourcePath = new URL(resourceUri).pathname; const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); - // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message - const parsedLinks = parseLinkHeader(headers.get('link')); + const parsedLinks = parseLinkHeader(headers.get('link')!); expect(parsedLinks.refs).toMatchObject([ { @@ -91,14 +89,12 @@ describe('Headers handling of LDP server', () => { } }); - const resourceUri = postHeaders.get('Location'); - // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message + const resourceUri = postHeaders.get('Location')!; const resourcePath = new URL(resourceUri).pathname; const { headers } = await fetchServer(resourceUri, { method: 'HEAD' }); - // @ts-expect-error TS(2345): Argument of type 'string | null' is not assignable... Remove this comment to see the full error message - const parsedLinks = parseLinkHeader(headers.get('link')); + const parsedLinks = parseLinkHeader(headers.get('link')!); expect(parsedLinks.refs).toMatchObject([ { uri: urlJoin(CONFIG.HOME_URL!, '_acl', resourcePath), rel: 'acl' }, diff --git a/src/middleware/tests/ldp/paging.test.ts b/src/middleware/tests/ldp/paging.test.ts index 0b75efec4..a3ff2a839 100644 --- a/src/middleware/tests/ldp/paging.test.ts +++ b/src/middleware/tests/ldp/paging.test.ts @@ -1,5 +1,6 @@ import fetch from 'node-fetch'; import { ServiceBroker } from 'moleculer'; +import { parse as parseLinkHeader } from 'http-link-header'; import initialize from './initialize.ts'; import { createAccount } from '../utils.ts'; @@ -88,28 +89,98 @@ describe('LDP paging tests', () => { describe('Get through API', () => { test('Get container with paging', async () => { - const { json: page1 } = await alice.fetch(containerUri, { + const { json: page1, headers: headers1 } = await alice.fetch(containerUri, { headers: new fetch.Headers({ Prefer: 'return=representation; max-member-count="2"' }) }); expect(page1['ldp:contains']).toHaveLength(2); - const { json: page2 } = await alice.fetch(`${containerUri}?page=2`, { + let parsedLinks = parseLinkHeader(headers1.get('link')!); + expect(parsedLinks.refs).toEqual( + expect.arrayContaining([ + { + uri: 'http://www.w3.org/ns/ldp#Page', + rel: 'type' + }, + { + uri: `${containerUri}?page=1`, + rel: 'first' + }, + { + uri: `${containerUri}?page=2`, + rel: 'next' + }, + { + uri: `${containerUri}?page=3`, + rel: 'last' + } + ]) + ); + + const { json: page2, headers: headers2 } = await alice.fetch(`${containerUri}?page=2`, { headers: new fetch.Headers({ Prefer: 'return=representation; max-member-count="2"' }) }); expect(page2['ldp:contains']).toHaveLength(2); + parsedLinks = parseLinkHeader(headers2.get('link')!); + expect(parsedLinks.refs).toEqual( + expect.arrayContaining([ + { + uri: 'http://www.w3.org/ns/ldp#Page', + rel: 'type' + }, + { + uri: `${containerUri}?page=1`, + rel: 'first' + }, + { + uri: `${containerUri}?page=1`, + rel: 'prev' + }, + { + uri: `${containerUri}?page=3`, + rel: 'next' + }, + { + uri: `${containerUri}?page=3`, + rel: 'last' + } + ]) + ); + // The last page only has a single resource - const { json: page3 } = await alice.fetch(`${containerUri}?page=3`, { + const { json: page3, headers: headers3 } = await alice.fetch(`${containerUri}?page=3`, { headers: new fetch.Headers({ Prefer: 'return=representation; max-member-count="2"' }) }); expect(page3['ldp:contains']).toHaveLength(1); + parsedLinks = parseLinkHeader(headers3.get('link')!); + expect(parsedLinks.refs).toEqual( + expect.arrayContaining([ + { + uri: 'http://www.w3.org/ns/ldp#Page', + rel: 'type' + }, + { + uri: `${containerUri}?page=1`, + rel: 'first' + }, + { + uri: `${containerUri}?page=2`, + rel: 'prev' + }, + { + uri: `${containerUri}?page=3`, + rel: 'last' + } + ]) + ); + // All resources are in the 3 pages expect([ ...page1['ldp:contains'].map((r: any) => r.id), From fae2e076c426d50ec1fbdcbf2a3865e55fad7a00 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 4 Dec 2025 11:30:23 +0100 Subject: [PATCH 140/165] Redirect to first page if no page is provided in query string --- .../packages/ldp/services/api/actions/get.ts | 32 ++++++++++++------- src/middleware/tests/ldp/paging.test.ts | 18 ++++++++++- src/middleware/tests/utils.ts | 1 + 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index 867731ca2..ddac7e41e 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -8,7 +8,6 @@ const { MoleculerError } = Errors; export default async function get(this: any, ctx: any) { try { let { username, slugParts, page } = ctx.params; - page = page ? parseInt(page, 10) : 1; const uri = this.getUriFromSlugParts(slugParts, username); ctx.meta.dataset = getDatasetFromUri(uri); @@ -40,14 +39,25 @@ export default async function get(this: any, ctx: any) { maxPerPage = regexResults?.[1] ? parseInt(regexResults[1]) : undefined; if (maxPerPage) { - links.push({ uri: 'http://www.w3.org/ns/ldp#Page', rel: 'type' }); - links.push({ uri: `${uri}?page=${1}`, rel: 'first' }); - - const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: uri }); - const numPages = Math.ceil(resourcesUris.length / maxPerPage); - if (numPages > page) links.push({ uri: `${uri}?page=${page + 1}`, rel: 'next' }); - if (page > 1) links.push({ uri: `${uri}?page=${page - 1}`, rel: 'prev' }); - if (numPages > 1) links.push({ uri: `${uri}?page=${numPages}`, rel: 'last' }); + if (!page) { + // If a paging is requested, but the page number is not provided, redirect to first page + ctx.meta.$statusCode = 303; + ctx.meta.$location = `${uri}?page=1`; + ctx.meta.$responseHeaders = { 'Content-Length': 0 }; + return; + } else { + page = parseInt(page, 10); + + links.push({ uri: 'http://www.w3.org/ns/ldp#Page', rel: 'type' }); + links.push({ uri: `${uri}?page=1`, rel: 'first' }); + + const resourcesUris = await ctx.call('ldp.container.getUris', { containerUri: uri }); + const numPages = Math.ceil(resourcesUris.length / maxPerPage); + + if (numPages > page) links.push({ uri: `${uri}?page=${page + 1}`, rel: 'next' }); + if (page > 1) links.push({ uri: `${uri}?page=${page - 1}`, rel: 'prev' }); + if (numPages > 1) links.push({ uri: `${uri}?page=${numPages}`, rel: 'last' }); + } } regexResults = /sort-predicate="([^"]+)"/.exec(ctx.meta.headers.prefer); @@ -64,7 +74,7 @@ export default async function get(this: any, ctx: any) { jsonContext: parseJson(ctx.meta.headers?.jsonldcontext), doNotIncludeResources, maxPerPage, - page: page === 1 ? undefined : page, + page: maxPerPage ? page : undefined, sortPredicate, sortOrder }) @@ -72,7 +82,7 @@ export default async function get(this: any, ctx: any) { if (doNotIncludeResources || maxPerPage || sortPredicate) { if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; - ctx.meta.$responseHeaders['Preference-Applied'] = 'return=representation'; + ctx.meta.$responseHeaders['Preference-Applied'] = ctx.meta.headers.prefer; } } else { /* diff --git a/src/middleware/tests/ldp/paging.test.ts b/src/middleware/tests/ldp/paging.test.ts index a3ff2a839..38d492454 100644 --- a/src/middleware/tests/ldp/paging.test.ts +++ b/src/middleware/tests/ldp/paging.test.ts @@ -89,12 +89,25 @@ describe('LDP paging tests', () => { describe('Get through API', () => { test('Get container with paging', async () => { + // First fetch without automatic redirect, to ensure the redirection is correct + const { status, statusText, headers } = await alice.fetch(containerUri, { + headers: new fetch.Headers({ + Prefer: 'return=representation; max-member-count="2"' + }), + redirect: 'manual' + }); + + expect(status).toBe(303); + expect(statusText).toBe('See Other'); + expect(headers.get('location')).toBe(`${containerUri}?page=1`); + const { json: page1, headers: headers1 } = await alice.fetch(containerUri, { headers: new fetch.Headers({ Prefer: 'return=representation; max-member-count="2"' }) }); expect(page1['ldp:contains']).toHaveLength(2); + expect(headers1.get('Preference-Applied')).toBe('return=representation; max-member-count="2"'); let parsedLinks = parseLinkHeader(headers1.get('link')!); expect(parsedLinks.refs).toEqual( @@ -190,7 +203,7 @@ describe('LDP paging tests', () => { }); test('Get container with paging and sorting', async () => { - const { json: container1 } = await alice.fetch(containerUri, { + const { json: container1, headers } = await alice.fetch(containerUri, { headers: new fetch.Headers({ Prefer: 'return=representation; max-member-count="2"; sort-predicate="http://virtual-assembly.org/ontologies/pair#startDate"' @@ -199,6 +212,9 @@ describe('LDP paging tests', () => { expect(container1['ldp:contains']).toHaveLength(2); expect(container1['ldp:contains'][0]['pair:label']).toBe('Project #1'); expect(container1['ldp:contains'][1]['pair:label']).toBe('Project #2'); + expect(headers.get('Preference-Applied')).toBe( + 'return=representation; max-member-count="2"; sort-predicate="http://virtual-assembly.org/ontologies/pair#startDate"' + ); const { json: container2 } = await alice.fetch(containerUri, { headers: new fetch.Headers({ diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index a30fb0b0e..14cb4b042 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -71,6 +71,7 @@ export const fetchServer = async (url: string, options: FetchOptions = {}) => { } return fetch(url, { + ...options, method: options.method || 'GET', body: options.body as fetch.BodyInit, headers: options.headers From 5a7778c8a42cb910e714d1597dd24804df863482 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 4 Dec 2025 12:04:21 +0100 Subject: [PATCH 141/165] Fix all tests --- .../packages/ldp/services/link-header/actions/get.ts | 2 +- src/middleware/tests/ldp/api.test.ts | 4 +++- src/middleware/tests/utils.ts | 6 ++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index ded9aec93..58ff14e99 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -6,7 +6,7 @@ const GetAction = { visibility: 'public', params: { uri: { type: 'string' }, - additionalLinks: { type: 'array' } + additionalLinks: { type: 'array', optional: true } }, async handler(ctx) { const { uri, additionalLinks } = ctx.params; diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index dbb1e1607..605dae1dc 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -138,7 +138,9 @@ describe('LDP handling through API', () => { }); expect(json['ldp:contains']).toBeUndefined(); - expect(headers.get('Preference-Applied')).toBe('return=representation'); + expect(headers.get('Preference-Applied')).toBe( + 'return=representation; include="http://www.w3.org/ns/ldp#PreferMinimalContainer"' + ); }); test('Replace resource', async () => { diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 14cb4b042..579b563ef 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -3,11 +3,12 @@ import fetch from 'node-fetch'; import Redis from 'ioredis'; import { ActionParamSchema, CallingOptions, ServiceBroker, ServiceSchema } from 'moleculer'; import { Account } from '@semapps/auth'; -import * as CONFIG from './config.ts'; import { delay } from '@semapps/ldp'; +import * as CONFIG from './config.ts'; type FetchOptions = Omit & { body?: ArrayBuffer | ArrayBufferView | ReadableStream | string | URLSearchParams | FormData | object; + headers?: fetch.Headers; }; export const listDatasets = async (): Promise => { @@ -51,16 +52,13 @@ export const fetchServer = async (url: string, options: FetchOptions = {}) => { case 'POST': case 'PATCH': case 'PUT': - // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json'); - // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Content-Type')) options.headers.set('Content-Type', 'application/ld+json'); break; case 'DELETE': break; case 'GET': default: - // @ts-expect-error TS(2339): Property 'headers' does not exist on type '{}'. if (!options.headers.has('Accept')) options.headers.set('Accept', 'application/ld+json'); break; } From 1137c261f40d195726f276d7ea34e7d00d0fff4b Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 4 Dec 2025 12:16:23 +0100 Subject: [PATCH 142/165] Update documentation --- .../ldp/services/container/actions/clear.ts | 1 - website/docs/middleware/ldp/container.md | 75 ++++++------------- 2 files changed, 21 insertions(+), 55 deletions(-) diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index 93199b935..12ed95a4c 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -14,7 +14,6 @@ const Schema = { this.logger.info(`Deleting ${resourcesUris.length} resources...`); for (let resourceUri of resourcesUris) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. this.logger.info(`Deleting ${resourceUri}...`); await ctx.call('ldp.resource.delete', { resourceUri, webId }); } diff --git a/website/docs/middleware/ldp/container.md b/website/docs/middleware/ldp/container.md index f7e02b815..be73dbd89 100644 --- a/website/docs/middleware/ldp/container.md +++ b/website/docs/middleware/ldp/container.md @@ -33,34 +33,16 @@ Delete all the resources attached to a container ### `create` -- Create a new LDP container -- This does **not** create the relative API routes. +Create a new LDP container ##### Parameters -| Property | Type | Default | Description | -| -------------- | -------- | ------------------- | --------------------------------------------- | -| `containerUri` | `String` | **required** | URI of the container to create | -| `title` | `String` | | Title of the container | -| `description` | `String` | | Description of the container | -| `permissions` | `String` | | WAC permissions to apply to the new container | -| `webId` | `String` | Logged user's webId | User doing the action | - -### `createAndAttach` - -- Create a container and attach it to its parent container(s) -- Recursively create the parent container(s) if they don't exist -- In Pod provider config, the webId is required to find the Pod root - -##### Parameters - -| Property | Type | Default | Description | -| -------------- | -------- | ------------------- | --------------------------------------------- | -| `containerUri` | `String` | **required** | URI of the container to create | -| `title` | `String` | | Title of the container | -| `description` | `String` | | Description of the container | -| `permissions` | `String` | | WAC permissions to apply to the new container | -| `webId` | `String` | Logged user's webId | User doing the action | +| Property | Type | Default | Description | +| -------------- | -------------- | ------------ | ------------------------------ | +| `containerUri` | `String` | **required** | URI of the container to create | +| `title` | `String` | | Title of the container | +| `description` | `String` | | Description of the container | +| `registration` | `Registration` | | The container options | ### `detach` @@ -94,20 +76,21 @@ Get the LDP container with all its resources (which are dereferenced) ##### Parameters -| Property | Type | Default | Description | -| ----------------------- | ------------------- | ------------------- | -------------------------------------------------- | -| `containerUri` | `String` | **required** | URI of container | -| `accept` | `String` | **required** | Type to return | -| `filters` | `Object` | | Key/value with predicates and value | -| `doNotIncludeResources` | `Boolean` | false | If true, does not return the contained resources | -| `jsonContext` | `Object`or `String` | | JSON-LD context to use when compacting the results | -| `webId` | `String` | Logged user's webId | User doing the action | - -You can also pass parameters defined in the [container options](index.md#container-options). +| Property | Type | Default | Description | +| ----------------------- | ------------------- | ------------------- | --------------------------------------------------------------------- | +| `containerUri` | `String` | **required** | URI of container | +| `filters` | `Object` | | Key/value with predicates and value | +| `doNotIncludeResources` | `Boolean` | false | If true, does not return the contained resources | +| `maxPerPage` | `Number` | | Number of resources to return | +| `page` | `Number` | 1 | If paging is activated, the page to display | +| `sortPredicate` | `String` | | Sort the resources according to this predicate (full URI or prefixed) | +| `sortOrder` | `String` | "ASC" | Sort the resources in ascending (ASC) or descending (DESC) order | +| `jsonContext` | `Object`or `String` | | JSON-LD context to use when compacting the results | +| `webId` | `String` | Logged user's webId | User doing the action | -##### Return +#### Return -Triples, Turtle or JSON-LD depending on `accept` type. +The LDP container in JSON-LD format ### `getAll` @@ -123,25 +106,9 @@ Get the list of all existing containers Array of URIs -### `getPath` - -Get the container path based on the provided resourceType. -For example, if you pass `pair:ProjectType`, it will return `/pair/project-type`. -Ontologies must be previously [registered](../ontologies#register) or the action will throw an error. - -##### Parameters - -| Property | Type | Default | Description | -| -------------- | -------- | ------------ | ----------------------------- | -| `resourceType` | `String` | **required** | URI or prefixed resource type | - -##### Return - -The path of the container - ### `getUris` -Get the list of all resources within a container +Get the URIs of all resources within a container ##### Parameters From 8bf94d06e93e47587bbe9cb19aad32210552041c Mon Sep 17 00:00:00 2001 From: SlyRock Date: Wed, 31 Dec 2025 12:02:21 +0100 Subject: [PATCH 143/165] Enhance named graph functionality in triplestore service by implementing create, check existence, clear, and delete operations in adapters. Update NamedGraphService to utilize these new adapter methods, ensuring compatibility with both Fuseki and NextGraph. Add tests to validate named graph operations across different backends. --- .../packages/triplestore/adapters/base.ts | 15 ++++- .../packages/triplestore/adapters/fuseki.ts | 67 ++++++++++++++++--- .../triplestore/adapters/nextgraph.ts | 56 ++++++++++++++++ .../packages/triplestore/service.ts | 1 + .../triplestore/subservices/named-graph.ts | 60 +++++------------ .../tests/triplestore/initialize.ts | 12 ++-- .../tests/triplestore/triplestore.test.ts | 51 +++++++------- 7 files changed, 176 insertions(+), 86 deletions(-) diff --git a/src/middleware/packages/triplestore/adapters/base.ts b/src/middleware/packages/triplestore/adapters/base.ts index 514a5f0ca..8a3c3794c 100644 --- a/src/middleware/packages/triplestore/adapters/base.ts +++ b/src/middleware/packages/triplestore/adapters/base.ts @@ -12,6 +12,10 @@ export interface AdapterInterface { listDatasets(): Promise; deleteDataset(dataset: string): Promise; backupDataset(dataset: string): Promise; + createNamedGraph(dataset: string, graphUri?: string): Promise; + namedGraphExists(dataset: string, graphUri: string): Promise; + clearNamedGraph(dataset: string, graphUri: string): Promise; + deleteNamedGraph(dataset: string, graphUri: string): Promise; } export abstract class BaseAdapter implements AdapterInterface { @@ -31,7 +35,6 @@ export abstract class BaseAdapter implements AdapterInterface { return console; // Fallback to console } - // Default no-op implementation, override if needed async cleanup(): Promise { return Promise.resolve(); @@ -52,4 +55,12 @@ export abstract class BaseAdapter implements AdapterInterface { abstract deleteDataset(dataset: string): Promise; abstract backupDataset(dataset: string): Promise; -} \ No newline at end of file + + abstract createNamedGraph(dataset: string, graphUri?: string): Promise; + + abstract namedGraphExists(dataset: string, graphUri: string): Promise; + + abstract clearNamedGraph(dataset: string, graphUri: string): Promise; + + abstract deleteNamedGraph(dataset: string, graphUri: string): Promise; +} diff --git a/src/middleware/packages/triplestore/adapters/fuseki.ts b/src/middleware/packages/triplestore/adapters/fuseki.ts index 60dd854f1..414610b30 100644 --- a/src/middleware/packages/triplestore/adapters/fuseki.ts +++ b/src/middleware/packages/triplestore/adapters/fuseki.ts @@ -1,5 +1,7 @@ import fetch from 'node-fetch'; import urlJoin from 'url-join'; +// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message +import { v4 as uuidv4 } from 'uuid'; import { SparqlJsonParser } from 'sparqljson-parse'; import { throw403, throw500, throw404 } from '@semapps/middlewares'; import { Errors } from 'moleculer'; @@ -12,9 +14,9 @@ export default class FusekiAdapter extends BaseAdapter { name = 'fuseki'; private settings: { - url: string, // The URL of the Fuseki server - user: string, // The username for the Fuseki server - password: string // The password for the Fuseki server + url: string; // The URL of the Fuseki server + user: string; // The username for the Fuseki server + password: string; // The password for the Fuseki server }; private sparqlJsonParser: SparqlJsonParser; @@ -31,14 +33,22 @@ export default class FusekiAdapter extends BaseAdapter { /* * Fetch the given URL with the given method, body and headers * Intended to be used internally to call the Fuseki server - * + * * @param url - The URL to fetch * @param method - The method to use (default is POST) * @param body - The body to send (default is undefined) * @param headers - The headers to send (default is Accept: application/json, and the authorization header) * @returns The response from the URL */ - async fetch(url:string, { operation = 'unknown operation', method = 'POST', body, headers }: { operation?: string, method?: string, body?: any, headers?: any }) { + async fetch( + url: string, + { + operation = 'unknown operation', + method = 'POST', + body, + headers + }: { operation?: string; method?: string; body?: any; headers?: any } + ) { const response = await fetch(url, { method, body, @@ -57,7 +67,9 @@ export default class FusekiAdapter extends BaseAdapter { } else if (response.status === 404) { throw404(`Fuseki ${operation} failed: ${text}\nURL: ${url}\nQuery: ${body}`); } else { - throw500(`Fuseki ${operation} failed: Unable to reach SPARQL endpoint ${url}. Error message: ${response.statusText}. Query: ${body}`); + throw500( + `Fuseki ${operation} failed: Unable to reach SPARQL endpoint ${url}. Error message: ${response.statusText}. Query: ${body}` + ); } } @@ -94,7 +106,7 @@ export default class FusekiAdapter extends BaseAdapter { operation: 'update', body: query, headers: { - 'Content-Type': 'application/sparql-update', + 'Content-Type': 'application/sparql-update' } }); } @@ -112,7 +124,7 @@ export default class FusekiAdapter extends BaseAdapter { async createDataset(dataset: string) { await this.fetch(urlJoin(this.settings.url, '$/datasets') + `?dbName=${dataset}&dbType=tdb2`, { operation: 'createDataset', - method: 'POST', + method: 'POST' }); await this.waitForDatasetCreation(dataset); this.getLogger().info(`Fuseki dataset created: ${dataset}`); @@ -121,7 +133,7 @@ export default class FusekiAdapter extends BaseAdapter { async datasetExists(dataset: string): Promise { try { const response = await this.fetch(urlJoin(this.settings.url, '$/datasets/', dataset), { - operation: 'datasetExists', + operation: 'datasetExists' }); return response.status === 200; } catch (error) { @@ -151,7 +163,7 @@ export default class FusekiAdapter extends BaseAdapter { async backupDataset(dataset: string) { // Ask Fuseki to backup the given dataset const response = await this.fetch(urlJoin(this.settings.url, '$/backup', dataset), { - operation: 'backupDataset', + operation: 'backupDataset' }); // Wait for backup to complete @@ -160,6 +172,39 @@ export default class FusekiAdapter extends BaseAdapter { this.getLogger().info(`Fuseki dataset backed up: ${dataset}`); } + // No fuseki related operation here as empty named graphs are not maintained by fuseki + // Inserting data into a non-existent named graph will create it + // Simply return the graph URI + async createNamedGraph(dataset: string, graphUri?: string) { + // TODO : use the base URI of the app for the graph URI + return graphUri || `http://semapps.org/graph/${uuidv4()}`; + } + + // Always consider a named graph exists as fuseki does not maintain empty named graphs + // And inserting data into a non-existent named graph will create it + async namedGraphExists(dataset: string, graphUri: string) { + return true; + } + + async clearNamedGraph(dataset: string, graphUri: string) { + // Use deleteNamedGraph to clear the named graph, as fuseki does not maintain empty named graphs + this.getLogger().info( + `Clearing fuseki named graph: ${graphUri}, using deleteNamedGraph operation as fuseki wouldn't maintain an empty named graph...` + ); + await this.deleteNamedGraph(dataset, graphUri); + } + + async deleteNamedGraph(dataset: string, graphUri: string) { + await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { + operation: 'deleteNamedGraph', + body: `DROP GRAPH <${graphUri}>`, + headers: { + 'Content-Type': 'application/sparql-update' + } + }); + this.getLogger().info(`Fuseki named graph deleted: ${graphUri}`); + } + async waitForDatasetCreation(dataset: string) { let datasetExist; do { @@ -182,4 +227,4 @@ export default class FusekiAdapter extends BaseAdapter { } } while (!task || !task.finished); } -} \ No newline at end of file +} diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index fbff8989a..76178d69b 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -238,6 +238,62 @@ export default class NextGraphAdapter extends BaseAdapter { throw new Error('Backup not implemented for NextGraph'); } + async createNamedGraph(dataset: string, graphUri?: string): Promise { + if (graphUri) { + throw new Error('Explicit graph URI is not supported for NextGraph'); + } + let session; + try { + session = await this.openSession(dataset); + const protectedRepoId = session.protected_store_id.substring(2, 46); + return await ng.doc_create(session.session_id, 'Graph', 'data:graph', 'store', 'protected', protectedRepoId); + } catch (error) { + throw new Error(`NextGraph createNamedGraph failed: ${error}\nDataset: ${dataset}`); + } finally { + this.closeSession(session); + } + } + + async namedGraphExists(dataset: string, graphUri: string): Promise { + try { + await this.query(dataset, `ASK { GRAPH <${graphUri}> { ?s ?p ?o } }`); + return true; + } catch (error) { + const messages = [`Graph ${graphUri} not found in dataset`, 'Invalid graph_name (too short) in parse_graph_name']; + if (messages.some(message => (error as Error).message.includes(message))) { + return false; + } + throw new Error(`NextGraph namedGraphExists failed: ${error}\nGraph URI: ${graphUri}`); + } + } + + async clearNamedGraph(dataset: string, graphUri: string): Promise { + let session; + try { + session = await this.openSession(dataset); + await ng.sparql_update(session.session_id, 'DELETE WHERE { ?s ?p ?o }', graphUri); + } catch (error) { + throw new Error(`NextGraph clearNamedGraph failed: ${error}\nDataset: ${dataset}\nGraph URI: ${graphUri}`); + } finally { + this.closeSession(session); + } + // await ng.sparql_update(session_id, "DELETE WHERE { ?s ?p ?o }", nuri); + // await this.update(dataset, `DELETE { ?s ?p ?o } WHERE { GRAPH <${graphUri}> { ?s ?p ?o } }`); + // throw new Error('Clear named graph not implemented for NextGraph'); + } + + async deleteNamedGraph(dataset: string, graphUri: string): Promise { + let session; + try { + session = await this.openSession(dataset); + await ng.sparql_update(session.session_id, `DROP GRAPH <${graphUri}>`); + } catch (error) { + throw new Error(`NextGraph deleteNamedGraph failed: ${error}\nDataset: ${dataset}\nGraph URI: ${graphUri}`); + } finally { + this.closeSession(session); + } + } + async openSession(dataset: string) { try { const userId = await this.getUserIdForDataset(dataset); diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 44486783c..a201c99b6 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -49,6 +49,7 @@ const TripleStoreService = { mixins: [NamedGraphService], settings: { defaultDataset, + adapter, ...namedGraph } }); diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index ad89bcd22..545096332 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -7,6 +7,11 @@ const NamedGraphService = { settings: { defaultDataset: null }, + async created() { + if (!this.settings.adapter) { + throw new Error('Adapter is required'); + } + }, actions: { create: { async handler(ctx) { @@ -14,22 +19,7 @@ const NamedGraphService = { let { uri } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; - if (!uri) { - uri = `http://example.org/graph/${uuidv4()}`; - } - - if (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })) { - throw new Error(`Cannot create named graph as it already exists`); - } - - // Insert a placeholder triple to ensure the named graph persists in Fuseki 5.0 - // This is necessary because Fuseki 5.0 doesn't maintain empty named graphs - await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${uri}> { <${uri}> } }`, - dataset - }); - - return uri; + return await this.settings.adapter.createNamedGraph(dataset, uri); } }, @@ -39,10 +29,7 @@ const NamedGraphService = { if (!uri) throw new Error('Unable to check if named graph exists. The parameter uri is missing'); const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; - return await ctx.call('triplestore.query', { - query: `ASK { GRAPH <${uri}> {} }`, - dataset - }); + return await this.settings.adapter.namedGraphExists(dataset, uri); } }, @@ -58,36 +45,23 @@ const NamedGraphService = { throw new Error(`Cannot clear named graph as it doesn't exist`); } - await ctx.call('triplestore.update', { - query: ` - DELETE - WHERE { - GRAPH <${uri}> { - ?s1 ?p1 ?o1 . - } - } - `, - dataset - }); - - // Re-insert the placeholder triple - await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${uri}> { <${uri}> } }`, - dataset - }); + await this.settings.adapter.clearNamedGraph(dataset, uri); } }, delete: { async handler(ctx) { const { uri } = ctx.params; - const dataset = ctx.params.dataset || ctx.meta.dataset; + const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; + + if (!uri) throw new Error('Unable to delete named graph. The parameter uri is missing'); + if (!dataset) throw new Error('Unable to delete named graph. The parameter dataset is missing'); + + if (!(await this.actions.exist({ uri, dataset }, { parentCtx: ctx }))) { + throw new Error(`Cannot delete named graph as it doesn't exist`); + } - // We need to manually drop the graph, otherwise Fuseki will consider it still exists - await ctx.call('triplestore.update', { - query: `DROP GRAPH <${uri}>`, - dataset - }); + await this.settings.adapter.deleteNamedGraph(dataset, uri); } } } diff --git a/src/middleware/tests/triplestore/initialize.ts b/src/middleware/tests/triplestore/initialize.ts index c942c6085..8793f194e 100644 --- a/src/middleware/tests/triplestore/initialize.ts +++ b/src/middleware/tests/triplestore/initialize.ts @@ -37,13 +37,13 @@ export default async triplestore => { if (triplestore === 'ng') { // TODO : Environmentalize the nextgraph settings. adapter = new NextGraphAdapter({ - adminUserId: 'XOct97tUc-ccyFUGe5sDUkHyXdTQ7LtGW1RVyYZzIYgA', + adminUserId: 'XOct97tUc-ccyFUGe5sDUkHyXdTQ7LtGW1RVyYZzIYgA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. mappingsNuri: - 'did:ng:o:5ZwPgEib6okmEbVlWRJVfGUNnbdtmQpC_x1uTy9wjcoA:v:asrmmGCr1WTq3oAGkgtVwUxsJgA5MIsV2FIYhDRyPagA', - serverPeerId: 'zT_iEzpHeO5znVU9ZYcvenJjb8pWrRWFzEO6eUE_SrAA', - adminUserKey: 'dwtQ9wWEovJwv6_3VArHKHRyr_zLAuR2_bFB1LiLfqEA', - clientPeerKey: 'ryv9v1Y3jJqdQYH-_rMxGTGyDtC_eOaA0a4ibRLhmX4A', - serverAddr: '127.0.0.1:14400' + 'did:ng:o:5ZwPgEib6okmEbVlWRJVfGUNnbdtmQpC_x1uTy9wjcoA:v:asrmmGCr1WTq3oAGkgtVwUxsJgA5MIsV2FIYhDRyPagA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + serverPeerId: 'zT_iEzpHeO5znVU9ZYcvenJjb8pWrRWFzEO6eUE_SrAA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + adminUserKey: 'dwtQ9wWEovJwv6_3VArHKHRyr_zLAuR2_bFB1LiLfqEA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + clientPeerKey: 'ryv9v1Y3jJqdQYH-_rMxGTGyDtC_eOaA0a4ibRLhmX4A', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + serverAddr: '127.0.0.1:14400' // TODO : Environmentalize the nextgraph settings. Even though this value is the genric one for the nextgraph broker }); } else if (triplestore === 'fuseki') { adapter = new FusekiAdapter({ diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index 10ae674f5..42a558ba7 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -3,10 +3,7 @@ import initialize from './initialize.ts'; jest.setTimeout(30000); -describe.each([ - 'fuseki' - // 'ng' -])('Triplestore service tests with %s', (triplestore: any) => { +describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestore: any) => { let broker: any; const testDataset = 'test_dataset'; @@ -586,11 +583,12 @@ describe.each([ ).toBeTruthy(); }); - test('Check named graph existence should return false with non-existent named graph', async () => { - await expect( - broker.call('triplestore.named-graph.exist', { uri: 'http://example.org/graph', dataset: testDataset }) - ).resolves.toBeFalsy(); - }); + if (triplestore === 'ng') + test('Check named graph existence should return false with non-existent named graph', async () => { + await expect( + broker.call('triplestore.named-graph.exist', { uri: 'http://example.org/graph', dataset: testDataset }) + ).resolves.toBeFalsy(); + }); test('Clear named graph should clear the named graph, and only it', async () => { // Assert the the named graphs exist @@ -607,13 +605,13 @@ describe.each([ // graphName: namedGraphUri, dataset: testDataset }); - expect(resultFirstNamedGraph).toHaveLength(3); + expect(resultFirstNamedGraph).toHaveLength(2); const resultSecondNamedGraph = await broker.call('triplestore.query', { query: `SELECT * FROM <${secondNamedGraphUri}> { ?s ?p ?o }`, // graphName: secondNamedGraphUri, dataset: testDataset }); - expect(resultSecondNamedGraph).toHaveLength(3); + expect(resultSecondNamedGraph).toHaveLength(2); // Clear the named graph await broker.call('triplestore.named-graph.clear', { uri: namedGraphUri, dataset: testDataset }); @@ -623,27 +621,32 @@ describe.each([ query: `SELECT * FROM <${namedGraphUri}> WHERE { ?s ?p ?o }`, dataset: testDataset }); - expect(result).toHaveLength(1); // the placeholder triple + expect(result).toHaveLength(0); // the placeholder triple // Assert the data is still in the second named graph const resultSecondNamedGraphAfterClear = await broker.call('triplestore.query', { query: `SELECT * FROM <${secondNamedGraphUri}> WHERE { ?s ?p ?o }`, dataset: testDataset }); - expect(resultSecondNamedGraphAfterClear).toHaveLength(3); + expect(resultSecondNamedGraphAfterClear).toHaveLength(2); }); - test('Delete named graph', async () => { - await broker.call('triplestore.named-graph.delete', { uri: namedGraphUri, dataset: testDataset }); - // Assert the named graph doesn't exist - expect( - await broker.call('triplestore.named-graph.exist', { uri: namedGraphUri, dataset: testDataset }) - ).toBeFalsy(); - // Assert the second named graph still exists - expect( - await broker.call('triplestore.named-graph.exist', { uri: secondNamedGraphUri, dataset: testDataset }) - ).toBeTruthy(); - }); + if (triplestore === 'fuseki') + test('Delete named graph', async () => { + await broker.call('triplestore.named-graph.delete', { uri: namedGraphUri, dataset: testDataset }); + // Assert the named graph doesn't exist through a query + const result = await broker.call('triplestore.query', { + query: `SELECT * FROM <${namedGraphUri}> WHERE { ?s ?p ?o }`, + dataset: testDataset + }); + expect(result).toHaveLength(0); + // Assert the second named graph still exists through a query + const resultSecondNamedGraph = await broker.call('triplestore.query', { + query: `SELECT * FROM <${secondNamedGraphUri}> WHERE { ?s ?p ?o }`, + dataset: testDataset + }); + expect(resultSecondNamedGraph).toHaveLength(2); + }); }); describe('Error handling', () => { From c8bb0ea405e4ae5a8b4977bf7a73cb26c727bb7f Mon Sep 17 00:00:00 2001 From: SlyRock Date: Thu, 8 Jan 2026 12:02:44 +0100 Subject: [PATCH 144/165] Update NextGraph adapter documentation to clarify client peer key generation process. Modify triplestore tests to ensure proper dataset cleanup after tests. --- .../packages/triplestore/adapters/nextgraph.ts | 2 +- src/middleware/tests/triplestore/triplestore.test.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index 76178d69b..d0383ffc4 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -5,7 +5,7 @@ import { BaseAdapter } from './base.ts'; type NextGraphAdapterSettings = { serverPeerId: string; // The server peer id, is provided in the console of the NextGraph server adminUserKey: string; // The admin user key, can be retrieved using the GUI of the NextGraph server - clientPeerKey: string; // TODO : remember how to retrieve/generate/guess/invoke/create out of thin air the client peer key ^^ + clientPeerKey: string; // The client peer key, can be generated usinf the CLI of the NextGraph server ex with cargo : cargo run --bin ngcli gen-key serverAddr: string; // The server address, can be retrieved using the console of the NextGraph server adminUserId: string; // The admin user id, must be saved when first creating the user mappingsNuri: string; // The mappings nuri, must be saved when first creating the document diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index 42a558ba7..ea67c7f3b 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -16,6 +16,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor afterAll(async () => { // Clean up test dataset + await broker.call('triplestore.dataset.delete', { dataset: testDataset, iKnowWhatImDoing: true }); if (broker) await broker.stop(); }); @@ -100,11 +101,10 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor query: 'SELECT * WHERE { ?s ?p ?o }', dataset: testDataset }); - // includes the data inserted in the previous tests - expect(result).toHaveLength(3); - expect(result[2].s.value).toBe('http://example.org/subject'); - expect(result[2].p.value).toBe('http://example.org/predicate'); - expect(result[2].o.value).toBe('object'); + expect(result).toHaveLength(1); + expect(result[0].s.value).toBe('http://example.org/subject'); + expect(result[0].p.value).toBe('http://example.org/predicate'); + expect(result[0].o.value).toBe('object'); }); test('Insert JSON-LD data with type', async () => { From bc27e323f5f05a82c0b772908ff873d2a28aa378 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 8 Jan 2026 18:23:03 +0100 Subject: [PATCH 145/165] Fix tests, remove iKnowWhatImDoing param --- src/middleware/.yarnrc | 5 - src/middleware/package.json | 3 +- .../packages/triplestore/package.json | 2 +- .../triplestore/subservices/dataset.ts | 11 +- .../tests/triplestore/initialize.ts | 12 +- .../tests/triplestore/triplestore.test.ts | 36 +- src/middleware/yarn.lock | 29017 +++++++--------- 7 files changed, 11960 insertions(+), 17126 deletions(-) delete mode 100644 src/middleware/.yarnrc diff --git a/src/middleware/.yarnrc b/src/middleware/.yarnrc deleted file mode 100644 index 85b738b8d..000000000 --- a/src/middleware/.yarnrc +++ /dev/null @@ -1,5 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -yarn-path ".yarn/releases/yarn-1.22.22.cjs" diff --git a/src/middleware/package.json b/src/middleware/package.json index cab309537..6678c3bad 100644 --- a/src/middleware/package.json +++ b/src/middleware/package.json @@ -45,6 +45,5 @@ "engines": { "node": ">=22.12.0" }, - "version": "0.7.0", - "packageManager": "yarn@4.9.2" + "version": "0.7.0" } diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index 2a88a8f42..516a2ea39 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -9,7 +9,7 @@ "@semapps/mime-types": "1.1.4", "jsonld": "^3.3.2", "negotiator": "^0.6.2", - "nextgraph": "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", + "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/ng-sdk-js/pkg-node", "node-fetch": "^2.6.6", "sparqljs": "^3.5.2", "sparqljson-parse": "^1.5.1", diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index b20e58209..6dbc12d1a 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -55,23 +55,18 @@ const DatasetService = { }, isSecure: { - async handler(ctx) { + async handler() { return false; } }, delete: { params: { - dataset: { type: 'string' }, - iKnowWhatImDoing: { type: 'boolean' } + dataset: { type: 'string' } }, async handler(ctx) { - const { dataset, iKnowWhatImDoing } = ctx.params; - if (!iKnowWhatImDoing) { - throw new Error('Please confirm that you know what you are doing by setting `iKnowWhatImDoing` to `true`.'); - } + const { dataset } = ctx.params; - if (!dataset) throw new Error('Unable to delete dataset. The parameter dataset is missing'); await this.settings.adapter.deleteDataset(dataset); } } diff --git a/src/middleware/tests/triplestore/initialize.ts b/src/middleware/tests/triplestore/initialize.ts index 8793f194e..bbb24641b 100644 --- a/src/middleware/tests/triplestore/initialize.ts +++ b/src/middleware/tests/triplestore/initialize.ts @@ -5,7 +5,7 @@ import { OntologiesService } from '@semapps/ontologies'; import ApiGatewayService from 'moleculer-web'; import * as CONFIG from '../config.ts'; -export default async triplestore => { +export default async (triplestore: string) => { const broker = new ServiceBroker({ logger: { type: 'Console', @@ -37,12 +37,12 @@ export default async triplestore => { if (triplestore === 'ng') { // TODO : Environmentalize the nextgraph settings. adapter = new NextGraphAdapter({ - adminUserId: 'XOct97tUc-ccyFUGe5sDUkHyXdTQ7LtGW1RVyYZzIYgA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + adminUserId: '-n1RqVQA0k2sqm-51CbIYnoS4Zhh89IRH1cxnLKnVlYA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. mappingsNuri: - 'did:ng:o:5ZwPgEib6okmEbVlWRJVfGUNnbdtmQpC_x1uTy9wjcoA:v:asrmmGCr1WTq3oAGkgtVwUxsJgA5MIsV2FIYhDRyPagA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - serverPeerId: 'zT_iEzpHeO5znVU9ZYcvenJjb8pWrRWFzEO6eUE_SrAA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - adminUserKey: 'dwtQ9wWEovJwv6_3VArHKHRyr_zLAuR2_bFB1LiLfqEA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - clientPeerKey: 'ryv9v1Y3jJqdQYH-_rMxGTGyDtC_eOaA0a4ibRLhmX4A', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + 'did:ng:o:7PeIu8q34t7h6XLqZIDt7dbuGjGruBz3ZWeQ7QOc2EoA:v:UmGokb5dUKofXw_IXFRl5xmb3Pbo5S2KWK6ShU01GkcA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + serverPeerId: 'QlJkY0KELV4W1aVZehn6Qvx5eauRkICSJbdYqIbFHPEA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + adminUserKey: 'bE0rIy0V8YQAEfXhqYas-erDrddazpTjhsoJHVqvSDIA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + clientPeerKey: 'HV_9Rh-yDpEqsvtwYUjcxqIARUnuP8g2JA4hEH1Nh7QA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. serverAddr: '127.0.0.1:14400' // TODO : Environmentalize the nextgraph settings. Even though this value is the genric one for the nextgraph broker }); } else if (triplestore === 'fuseki') { diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index ea67c7f3b..ced26579c 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -16,7 +16,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor afterAll(async () => { // Clean up test dataset - await broker.call('triplestore.dataset.delete', { dataset: testDataset, iKnowWhatImDoing: true }); + await broker.call('triplestore.dataset.delete', { dataset: testDataset }); if (broker) await broker.stop(); }); @@ -31,10 +31,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor test('Create a new dataset', async () => { // Delete if exists try { - await broker.call('triplestore.dataset.delete', { - dataset: testDatasetForSubServiceTests, - iKnowWhatImDoing: true - }); + await broker.call('triplestore.dataset.delete', { dataset: testDatasetForSubServiceTests }); } catch (error) { // Intentionally ignore errors if dataset does not exist } @@ -63,24 +60,11 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor await expect( broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests }) ).resolves.toBeTruthy(); - await broker.call('triplestore.dataset.delete', { - dataset: testDatasetForSubServiceTests, - iKnowWhatImDoing: true - }); + await broker.call('triplestore.dataset.delete', { dataset: testDatasetForSubServiceTests }); await expect( broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests }) ).resolves.toBeFalsy(); }); - - test('Delete dataset without confirmation should fail', async () => { - await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); - await expect( - broker.call('triplestore.dataset.delete', { - dataset: testDatasetForSubServiceTests, - iKnowWhatImDoing: false - }) - ).rejects.toThrow('Please confirm that you know what you are doing'); - }); }); describe('Insert action', () => { @@ -188,10 +172,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor expect(result).toHaveLength(1); // Clean up - await broker.call('triplestore.dataset.delete', { - dataset: secondDataset, - iKnowWhatImDoing: true - }); + await broker.call('triplestore.dataset.delete', { dataset: secondDataset }); }); test('Insert should fail with non-existent dataset', async () => { @@ -388,7 +369,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor { subject: { termType: 'NamedNode', value: 'http://example.org/person1' }, predicate: { termType: 'NamedNode', value: 'http://example.org/name' }, - object: { termType: 'Literal', value: 'John Updated' } + object: { termType: 'Literal', value: 'John Updated Again' } } ] } @@ -417,7 +398,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor dataset: testDataset }); expect(result).toHaveLength(1); - expect(result[0].name.value).toBe('John Updated'); + expect(result[0].name.value).toBe('John Updated Again'); }); test('UPDATE with wildcard dataset updates all datasets', async () => { @@ -471,10 +452,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor expect(result[0].age.value).toBe('30'); // Clean up - await broker.call('triplestore.dataset.delete', { - dataset: secondDataset, - iKnowWhatImDoing: true - }); + await broker.call('triplestore.dataset.delete', { dataset: secondDataset }); }); test('UPDATE should fail with non-existent dataset', async () => { diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index e76dfe62c..26a45692d 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -1,17077 +1,11944 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/code-frame@npm:7.27.1" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.27.1" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.1.1" - checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/compat-data@npm:7.26.5" - checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/compat-data@npm:7.27.2" - checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/compat-data@npm:7.28.0" - checksum: 10c0/c4e527302bcd61052423f757355a71c3bc62362bac13f7f130de16e439716f66091ff5bdecda418e8fa0271d4c725f860f0ee23ab7bf6e769f7a8bb16dfcb531 - languageName: node - linkType: hard - -"@babel/core@npm:^7.23.9": - version: 7.26.0 - resolution: "@babel/core@npm:7.26.0" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.26.0" - "@babel/generator": "npm:^7.26.0" - "@babel/helper-compilation-targets": "npm:^7.25.9" - "@babel/helper-module-transforms": "npm:^7.26.0" - "@babel/helpers": "npm:^7.26.0" - "@babel/parser": "npm:^7.26.0" - "@babel/template": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e - languageName: node - linkType: hard - -"@babel/core@npm:^7.27.4, @babel/core@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/core@npm:7.28.0" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-module-transforms": "npm:^7.27.3" - "@babel/helpers": "npm:^7.27.6" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/traverse": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/423302e7c721e73b1c096217880272e02020dfb697a55ccca60ad01bba90037015f84d0c20c6ce297cf33a19bb704bc5c2b3d3095f5284dfa592bd1de0b9e8c3 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/generator@npm:7.26.5" - dependencies: - "@babel/parser": "npm:^7.26.5" - "@babel/types": "npm:^7.26.5" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/generator@npm:7.27.1" - dependencies: - "@babel/parser": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/generator@npm:7.28.0" - dependencies: - "@babel/parser": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10c0/1b3d122268ea3df50fde707ad864d9a55c72621357d5cebb972db3dd76859c45810c56e16ad23123f18f80cc2692f5a015d2858361300f0f224a05dc43d36a92 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" - dependencies: - "@babel/types": "npm:^7.27.3" - checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.25.9": - version: 7.26.5 - resolution: "@babel/helper-compilation-targets@npm:7.26.5" - dependencies: - "@babel/compat-data": "npm:^7.26.5" - "@babel/helper-validator-option": "npm:^7.25.9" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/helper-compilation-targets@npm:7.27.2" - dependencies: - "@babel/compat-data": "npm:^7.27.2" - "@babel/helper-validator-option": "npm:^7.27.1" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-member-expression-to-functions": "npm:^7.27.1" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/4ee199671d6b9bdd4988aa2eea4bdced9a73abfc831d81b00c7634f49a8fc271b3ceda01c067af58018eb720c6151322015d463abea7072a368ee13f35adbb4c - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - regexpu-core: "npm:^6.2.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/591fe8bd3bb39679cc49588889b83bd628d8c4b99c55bafa81e80b1e605a348b64da955e3fd891c4ba3f36fd015367ba2eadea22af6a7de1610fbb5bcc2d3df0 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.6.5": - version: 0.6.5 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - debug: "npm:^4.4.1" - lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.22.10" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e - languageName: node - linkType: hard - -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-module-imports@npm:7.25.9" - dependencies: - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-imports@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helper-module-transforms@npm:7.26.0" - dependencies: - "@babel/helper-module-imports": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-transforms@npm:7.27.1" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-module-transforms@npm:7.27.3" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.3" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/fccb4f512a13b4c069af51e1b56b20f54024bcf1591e31e978a30f3502567f34f90a80da6a19a6148c249216292a8074a0121f9e52602510ef0f32dbce95ca01 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" - dependencies: - "@babel/types": "npm:^7.27.1" - checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.26.5 - resolution: "@babel/helper-plugin-utils@npm:7.26.5" - checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-plugin-utils@npm:7.27.1" - checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-wrap-function": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-replace-supers@npm:7.27.1" - dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.27.1" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-identifier@npm:7.27.1" - checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-option@npm:7.25.9" - checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-option@npm:7.27.1" - checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-wrap-function@npm:7.27.1" - dependencies: - "@babel/template": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/c472f75c0951bc657ab0a117538c7c116566ae7579ed47ac3f572c42dc78bd6f1e18f52ebe80d38300c991c3fcaa06979e2f8864ee919369dabd59072288de30 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helpers@npm:7.26.0" - dependencies: - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" - checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.27.6": - version: 7.28.2 - resolution: "@babel/helpers@npm:7.28.2" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.2" - checksum: 10c0/f3e7b21517e2699c4ca193663ecfb1bf1b2ae2762d8ba4a9f1786feaca0d6984537fc60bf2206e92c43640a6dada6b438f523cc1ad78610d0151aeb061b37f63 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6": - version: 7.26.5 - resolution: "@babel/parser@npm:7.26.5" - dependencies: - "@babel/types": "npm:^7.26.5" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e - languageName: node - linkType: hard - -"@babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/parser@npm:7.27.2" - dependencies: - "@babel/types": "npm:^7.27.1" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/parser@npm:7.28.0" - dependencies: - "@babel/types": "npm:^7.28.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/7dfffa978ae1cd179641a7c4b4ad688c6828c2c58ec96b118c2fb10bc3715223de6b88bff1ebff67056bb5fccc568ae773e3b83c592a1b843423319f80c99ebd - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.13.0 - checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/b94e6c3fc019e988b1499490829c327a1067b4ddea8ad402f6d0554793c9124148c2125338c723661b6dff040951abc1f092afbf3f2d234319cd580b68e52445 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.12.13" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/06a954ee672f7a7c44d52b6e55598da43a7064e80df219765c51c37a0692641277e90411028f7cae4f4d1dedeed084f0c453576fa421c35a81f1603c5e3e0146 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.26.0 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d - languageName: node - linkType: hard - -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/739d577e649d7d7b9845dc309e132964327ab3eaea43ad04d04a7dcb977c63f9aa9a423d1ca39baf10939128d02f52e6fda39c834fb9f1753785b1497e72c4dc - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e76b1f6f9c3bbf72e17d7639406d47f09481806de4db99a8de375a0bb40957ea309b20aa705f0c25ab1d7c845e3f365af67eafa368034521151a0e352a03ef2f - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/787d85e72a92917e735aa54e23062fa777031f8a07046e67f5026eff3d91e64eb535575dd1df917b0011bee014ae51287478af14c1d4ba60bc81e326bc044cfc - languageName: node - linkType: hard - -"@babel/plugin-transform-class-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cc0662633c0fe6df95819fef223506ddf26c369c8d64ab21a728d9007ec866bf9436a253909819216c24a82186b6ccbc1ec94d7aaf3f82df227c7c02fa6a704b - languageName: node - linkType: hard - -"@babel/plugin-transform-class-static-block@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 10c0/396997dd81fc1cf242b921e337d25089d6b9dc3596e81322ff11a6359326dc44f2f8b82dcc279c2e514cafaf8964dc7ed39e9fab4b8af1308b57387d111f6a20 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-classes@npm:7.28.0" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3b213b43104fe99dd7e79401a86d09e545836e057a70ffe77e8196a87bf67ae167e502ae90afdf0d1a2be683be5652514aaeda743bd984e583523dd8ecfef887 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/template": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e09a12f8c8ae0e6a6144c102956947b4ec05f6c844169121d0ec4529c2d30ad1dc59fee67736193b87a402f44552c888a519a680a31853bdb4d34788c28af3b0 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-destructuring@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cc7ccafa952b3ff7888544d5688cfafaba78c69ce1e2f04f3233f4f78c9de5e46e9695f5ea42c085b0c0cfa39b10f366d362a2be245b6d35b66d3eb1d427ccb2 - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f9caddfad9a551b4dabe0dcb7c040f458fbaaa7bbb44200c20198b32c8259be8e050e58d2c853fdac901a4cfe490b86aa857036d8d461b192dd010d0e242dedb - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/121502a252b3206913e1e990a47fea34397b4cbf7804d4cd872d45961bc45b603423f60ca87f3a3023a62528f5feb475ac1c9ec76096899ec182fcb135eba375 - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 - languageName: node - linkType: hard - -"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3baa706af3112adf2ae0c7ec0dc61b63dd02695eb5582f3c3a2b2d05399c6aa7756f55e7bbbd5412e613a6ba1dd6b6736904074b4d7ebd6b45a1e3f9145e4094 - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/953d21e01fed76da8e08fb5094cade7bf8927c1bb79301916bec2db0593b41dbcfbca1024ad5db886b72208a93ada8f57a219525aad048cf15814eeb65cf760d - languageName: node - linkType: hard - -"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-for-of@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-function-name@npm:7.27.1" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c - languageName: node - linkType: hard - -"@babel/plugin-transform-json-strings@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2379714aca025516452a7c1afa1ca42a22b9b51a5050a653cc6198a51665ab82bdecf36106d32d731512706a1e373c5637f5ff635737319aa42f3827da2326d6 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca - languageName: node - linkType: hard - -"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5b0abc7c0d09d562bf555c646dce63a30288e5db46fd2ce809a61d064415da6efc3b2b3c59b8e4fe98accd072c89a2f7c3765b400e4bf488651735d314d9feeb - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4def972dcd23375a266ea1189115a4ff61744b2c9366fc1de648b3fab2c650faf1a94092de93a33ff18858d2e6c4dddeeee5384cb42ba0129baeab01a5cdf1e2 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f16fca62d144d9cbf558e7b5f83e13bb6d0f21fdeff3024b0cecd42ffdec0b4151461da42bd0963512783ece31aafa5ffe03446b4869220ddd095b24d414e2b5 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-new-target@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 - languageName: node - linkType: hard - -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a435fc03aaa65c6ef8e99b2d61af0994eb5cdd4a28562d78c3b0b0228ca7e501aa255e1dff091a6996d7d3ea808eb5a65fd50ecd28dfb10687a8a1095dcadc7a - languageName: node - linkType: hard - -"@babel/plugin-transform-numeric-separator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/b72cbebbfe46fcf319504edc1cf59f3f41c992dd6840db766367f6a1d232cd2c52143c5eaf57e0316710bee251cae94be97c6d646b5022fcd9274ccb131b470c - languageName: node - linkType: hard - -"@babel/plugin-transform-object-rest-spread@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.0" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/360dc6fd5285ee5e1d3be8a1fb0decd120b2a1726800317b4ab48b7c91616247030239b7fa06ceaa1a8a586fde1e143c24d45f8d41956876099d97d664f8ef1e - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-object-super@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/807a4330f1fac08e2682d57bc82e714868fc651c8876f9a8b3a3fd8f53c129e87371f8243e712ac7dae11e090b737a2219a02fe1b6459a29e664fa073c3277bb - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5b18ff5124e503f0a25d6b195be7351a028b3992d6f2a91fb4037e2a2c386400d66bc1df8f6df0a94c708524f318729e81a95c41906e5a7919a06a43e573a525 - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.27.7": - version: 7.27.7 - resolution: "@babel/plugin-transform-parameters@npm:7.27.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f - languageName: node - linkType: hard - -"@babel/plugin-transform-private-methods@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/232bedfe9d28df215fb03cc7623bdde468b1246bdd6dc24465ff4bf9cc5f5a256ae33daea1fafa6cc59705e4d29da9024bb79baccaa5cd92811ac5db9b9244f2 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a8c4536273ca716dcc98e74ea25ca76431528554922f184392be3ddaf1761d4aa0e06f1311577755bd1613f7054fb51d29de2ada1130f743d329170a1aa1fe56 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.28.0": - version: 7.28.1 - resolution: "@babel/plugin-transform-regenerator@npm:7.28.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6c9e6eb80ce9c0bde0876c80979e078fbc85dc802272cba4ee72b5b1c858472e38167c418917e4f0d4384ce888706d95544a8d266880c0e199e167e078168b67 - languageName: node - linkType: hard - -"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/31ae596ab56751cf43468a6c0a9d6bc3521d306d2bee9c6957cdb64bea53812ce24bd13a32f766150d62b737bca5b0650b2c62db379382fff0dccbf076055c33 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 - languageName: node - linkType: hard - -"@babel/plugin-transform-runtime@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-runtime@npm:7.28.0" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - babel-plugin-polyfill-corejs2: "npm:^0.4.14" - babel-plugin-polyfill-corejs3: "npm:^0.13.0" - babel-plugin-polyfill-regenerator: "npm:^0.6.5" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/71eba1e6aaafacb2ec0fd468394c7aeaff32265b21424bd9b2d963368a4a5260547e06976bb34e2553a7179463c3a3a4c2a4552256b5112c8b7dcadb7bd5bb07 - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-spread@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/b34fc58b33bd35b47d67416655c2cbc8578fbb3948b4592bc15eb6d8b4046986e25c06e3b9929460fa4ab08e9653582415e7ef8b87d265e1239251bdf5a4c162 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 - languageName: node - linkType: hard - -"@babel/plugin-transform-typescript@npm:^7.27.1": - version: 7.28.0 - resolution: "@babel/plugin-transform-typescript@npm:7.28.0" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/plugin-syntax-typescript": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/049c2bd3407bbf5041d8c95805a4fadee6d176e034f6b94ce7967b92a846f1e00f323cf7dfbb2d06c93485f241fb8cf4c10520e30096a6059d251b94e80386e9 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a332bc3cb3eeea67c47502bc52d13a0f8abae5a7bfcb08b93a8300ddaff8d9e1238f912969494c1b494c1898c6f19687054440706700b6d12cb0b90d88beb4d0 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/236645f4d0a1fba7c18dc8ffe3975933af93e478f2665650c2d91cf528cfa1587cde5cfe277e0e501fc03b5bf57638369575d6539cef478632fb93bd7d7d7178 - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/preset-env@npm:7.28.0" - dependencies: - "@babel/compat-data": "npm:^7.28.0" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-option": "npm:^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.27.1" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1" - "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" - "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" - "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" - "@babel/plugin-transform-async-generator-functions": "npm:^7.28.0" - "@babel/plugin-transform-async-to-generator": "npm:^7.27.1" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" - "@babel/plugin-transform-block-scoping": "npm:^7.28.0" - "@babel/plugin-transform-class-properties": "npm:^7.27.1" - "@babel/plugin-transform-class-static-block": "npm:^7.27.1" - "@babel/plugin-transform-classes": "npm:^7.28.0" - "@babel/plugin-transform-computed-properties": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" - "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1" - "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" - "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.0" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.27.1" - "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" - "@babel/plugin-transform-for-of": "npm:^7.27.1" - "@babel/plugin-transform-function-name": "npm:^7.27.1" - "@babel/plugin-transform-json-strings": "npm:^7.27.1" - "@babel/plugin-transform-literals": "npm:^7.27.1" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.27.1" - "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" - "@babel/plugin-transform-modules-amd": "npm:^7.27.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" - "@babel/plugin-transform-modules-systemjs": "npm:^7.27.1" - "@babel/plugin-transform-modules-umd": "npm:^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" - "@babel/plugin-transform-new-target": "npm:^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1" - "@babel/plugin-transform-numeric-separator": "npm:^7.27.1" - "@babel/plugin-transform-object-rest-spread": "npm:^7.28.0" - "@babel/plugin-transform-object-super": "npm:^7.27.1" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/plugin-transform-private-methods": "npm:^7.27.1" - "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" - "@babel/plugin-transform-property-literals": "npm:^7.27.1" - "@babel/plugin-transform-regenerator": "npm:^7.28.0" - "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" - "@babel/plugin-transform-reserved-words": "npm:^7.27.1" - "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" - "@babel/plugin-transform-spread": "npm:^7.27.1" - "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" - "@babel/plugin-transform-template-literals": "npm:^7.27.1" - "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" - "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1" - "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1" - "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.14" - babel-plugin-polyfill-corejs3: "npm:^0.13.0" - babel-plugin-polyfill-regenerator: "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f343103b8f0e8da5be4ae031aff8bf35da4764997af4af78ae9506f421b785dd45da1bc09f845b1fc308c8b7d134aead4a1f89e7fb6e213cd2f9fe1d2aa78bc9 - languageName: node - linkType: hard - -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@babel/types": "npm:^7.4.4" - esutils: "npm:^2.0.2" - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/preset-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-option": "npm:^7.27.1" - "@babel/plugin-syntax-jsx": "npm:^7.27.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" - "@babel/plugin-transform-typescript": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cba6ca793d915f8aff9fe2f13b0dfbf5fd3f2e9a17f17478ec9878e9af0d206dcfe93154b9fd353727f16c1dca7c7a3ceb4943f8d28b216235f106bc0fbbcaa3 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.13.9": - version: 7.28.2 - resolution: "@babel/runtime@npm:7.28.2" - checksum: 10c0/c20afe253629d53a405a610b12a62ac74d341a2c1e0fb202bbef0c118f6b5c84f94bf16039f58fd0483dd256901259930a43976845bdeb180cab1f882c21b6e0 - languageName: node - linkType: hard - -"@babel/template@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" - dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab - languageName: node - linkType: hard - -"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/template@npm:7.27.2" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.2" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.25.9": - version: 7.26.5 - resolution: "@babel/traverse@npm:7.26.5" - dependencies: - "@babel/code-frame": "npm:^7.26.2" - "@babel/generator": "npm:^7.26.5" - "@babel/parser": "npm:^7.26.5" - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.5" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/traverse@npm:7.27.1" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.1" - "@babel/template": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/traverse@npm:7.28.0" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.0" - debug: "npm:^4.3.1" - checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5, @babel/types@npm:^7.6.1, @babel/types@npm:^7.9.6": - version: 7.26.5 - resolution: "@babel/types@npm:7.26.5" - dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/types@npm:7.27.1" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2, @babel/types@npm:^7.4.4": - version: 7.28.2 - resolution: "@babel/types@npm:7.28.2" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/24b11c9368e7e2c291fe3c1bcd1ed66f6593a3975f479cbb9dd7b8c8d8eab8a962b0d2fca616c043396ce82500ac7d23d594fbbbd013828182c01596370a0b10 - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 - languageName: node - linkType: hard - -"@comunica/actor-abstract-mediatyped@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-abstract-mediatyped@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/7812dbca52fc7442579ccc95a1b2a0e7b41058dcfab56c55e18a142c666e7ba8f7b7ff62f64ed205c6f0a4128cbab63dd1a84faaf5d8a84545b3e635c447a2ac - languageName: node - linkType: hard - -"@comunica/actor-http-native@npm:~1.22.0": - version: 1.22.1 - resolution: "@comunica/actor-http-native@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@types/parse-link-header": "npm:^1.0.0" - cross-fetch: "npm:^3.0.5" - follow-redirects: "npm:^1.5.1" - parse-link-header: "npm:^1.0.1" - peerDependencies: - "@comunica/bus-http": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/65288a5ae2cbefdcc5b7315851a4a7488966357de3ecf35510aa8f379241675d8579a9d595b44bffbc93eec544071fb6107d2c51ce6555f224e5273273dab07f - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-microdata@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-microdata@npm:1.22.0" - dependencies: - microdata-rdf-streaming-parser: "npm:^1.2.0" - peerDependencies: - "@comunica/bus-rdf-parse-html": ^1.17.0 - "@comunica/core": ^1.17.0 - checksum: 10c0/ceeb80e597ffa78dec991cd0c6fdd0af54f4a0fe93708aa2c41cecef6f10a9374b2f7fbfb221cce60d6f4ea4792e9eec04eb774b60005073545937c46b56ee6e - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-rdfa@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-rdfa@npm:1.22.0" - dependencies: - rdfa-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse-html": ^1.0.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/0a9969b1227f5a94712f58c9b45501174a49689e225d4b4805b7edbc9a8b035c1bc77a46b08e00b9b1f4354f5054e82b7d4197889cce44fce8b18390dfdc2742 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-script@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-script@npm:1.22.0" - dependencies: - "@comunica/bus-rdf-parse-html": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - relative-to-absolute-iri: "npm:^1.0.5" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.4.0 - "@comunica/core": ^1.4.0 - checksum: 10c0/7da4ddf8aaffd7f17d96c56b800a27c2cf7f87ad6b00daa620a89a800184ae7d32cdc871a3dcef202a8dd95fcfd316744ac72289681593be009dca74620b81c0 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html@npm:1.22.0" - dependencies: - "@comunica/bus-rdf-parse-html": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^7.0.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.8.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/9a0e2932d6f4e4242438a581e0fd88a3149395c5a2b8bdc5e120c757a8a42423ad1e5e3c7fbfa110bab3bea06041a41bb207ca6a68dbfc6b7c9e4fe4d23191a1 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-jsonld@npm:^1.22.0": - version: 1.22.1 - resolution: "@comunica/actor-rdf-parse-jsonld@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - jsonld-context-parser: "npm:^2.1.2" - jsonld-streaming-parser: "npm:^2.4.0" - stream-to-string: "npm:^1.2.0" - peerDependencies: - "@comunica/bus-http": ^1.0.0 - "@comunica/bus-rdf-parse": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/959e5abe524083704705f1e13470cbaf00fdcdf6f8434b657e98155f390b13d651544899200c85456f5bb800a78367c3a9bef241a574707712091a430269eb31 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-n3@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-n3@npm:1.22.0" - dependencies: - "@types/n3": "npm:^1.4.4" - n3: "npm:^1.6.3" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/5651a13e6b07ac4f45f73fd525077f1fd5c43af64944b4882ec7bd4f31eae12c87a763f3a39fbccb8018a39144f60e11fac2db2a725e73ca1f2595f936d05f37 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-rdfxml@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-rdfxml@npm:1.22.0" - dependencies: - rdfxml-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.1.0 - "@comunica/core": ^1.1.0 - checksum: 10c0/c4cf0c85794995fe94438108ea54fe5ff74928d8bb179aa3b52bc1bdcb3dcade02d9ef16dfbdf27e22cf4760ba1786f6989b34c2eed3fbd1c80815ca0cf5aa13 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-xml-rdfa@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-xml-rdfa@npm:1.22.0" - dependencies: - rdfa-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.8.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/d517f28fc6b63b0d88a31b0a7a2053f9f0d74c4d3040669b139c3e64a193b364ec59bb7a291eda08ca10b74e51d9b7045724f5772ee99731278ac06093243da5 - languageName: node - linkType: hard - -"@comunica/bus-http@npm:~1.22.0": - version: 1.22.1 - resolution: "@comunica/bus-http@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@types/readable-stream": "npm:^2.3.11" - is-stream: "npm:^2.0.0" - readable-web-to-node-stream: "npm:^3.0.2" - web-streams-node: "npm:^0.4.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/5578a14ab438e11a4da413119a24d4da1b3f681be44ab7c05711bfbff563d9601de793e081c524747ae6a66fad413a82d3d52814915ba8c92fb96055f5f37f41 - languageName: node - linkType: hard - -"@comunica/bus-init@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-init@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/76ed0ad2c12125788a98611276ed30ebd1e7f2ae52541e8f64ebde71fcb513bf6d6eed38322da3fc955197f104d20571aa1a0c54444907c8bbbd5c58058ba101 - languageName: node - linkType: hard - -"@comunica/bus-rdf-parse-html@npm:^1.22.0, @comunica/bus-rdf-parse-html@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-rdf-parse-html@npm:1.22.0" - dependencies: - "@rdfjs/types": "npm:*" - peerDependencies: - "@comunica/core": ^1.8.0 - checksum: 10c0/fb68896db681674831130d521e0e41d85bb2e3fea2be96f2f44f9304cb9e1271b1c51221d16c3d8bb015b55e2c108611562657e3c89fc8bd6e5c087f04290bfa - languageName: node - linkType: hard - -"@comunica/bus-rdf-parse@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-rdf-parse@npm:1.22.0" - dependencies: - "@comunica/actor-abstract-mediatyped": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/f4e3eb35b7757a93a44f1050de542f6e8fc39fcf74b22c89100eaec4556653b270163422f918a9e09833f57244e82553b7a03a80bbdab64c82b97b3aebf7dd02 - languageName: node - linkType: hard - -"@comunica/context-entries@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/context-entries@npm:1.22.0" - checksum: 10c0/edd1cb3e7861f043e63040f98e9959ace55a1c9b90ed5ab9ab0bc40eea182ec81b75e7c1650e1e1a64dc97634f33f6c6b57878f0003bd0217f696040ec8b9234 - languageName: node - linkType: hard - -"@comunica/core@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/core@npm:1.22.0" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@comunica/types": "npm:^1.22.0" - immutable: "npm:^3.8.2" - checksum: 10c0/73b4d0228b87ee8807d7219c7cae045389cf8b967b2cbfe024f244bb9cffb73b38c516673cf80764fa02ab3c1d32f803a0de05b88d9b38c0eff8a701f97a1c03 - languageName: node - linkType: hard - -"@comunica/mediator-combine-union@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-combine-union@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/72cee255c14709a3039149b64f281a480c32d2deade1c704587c3714d827ecc5e1ecbb1762211d2d554cf4759d4ba1a4fddd243c1e8bfda4493883b7bd07dca0 - languageName: node - linkType: hard - -"@comunica/mediator-number@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-number@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/f7fb1863ae17b4316da03af93333e9a288d4a4067a9f09e838e9a59aeee70f385e1c21dd3f144d352991d865dbcd7d809ddddfa26b7e6dedf65dbc56124bf4ae - languageName: node - linkType: hard - -"@comunica/mediator-race@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-race@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/6506d8fe2631a55be151c2ca4d2efdeab2fa0a376d650bbdab1b78aa5773507df5ab874eac0931990d1965879cc0566fa056663e1461f71fec67eb7d93d810ca - languageName: node - linkType: hard - -"@comunica/types@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/types@npm:1.22.0" - dependencies: - "@rdfjs/types": "npm:*" - asynciterator: "npm:^3.2.0" - immutable: "npm:^3.8.2" - sparqlalgebrajs: "npm:^3.0.1" - checksum: 10c0/55810c126392810f973467ae0b411e942b4d3202cd67500994321621dd550f4a9a470bba24a095d100edc8ad207e8936627ab6a6a4fbb33cc1c1098d10e1db88 - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": "npm:0.3.9" - checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 - languageName: node - linkType: hard - -"@digitalbazaar/credentials-context@npm:^3.1.0": - version: 3.1.0 - resolution: "@digitalbazaar/credentials-context@npm:3.1.0" - checksum: 10c0/0fa22d00542450b3e0567511779dafcd943bcba75a2be83fa80b95c1f255f1b2f701ea64a0ab3959c8503a9f1682f724de0ffe8f5eea18b065d5074d61e52cb7 - languageName: node - linkType: hard - -"@digitalbazaar/data-integrity@npm:^2.5.0": - version: 2.5.0 - resolution: "@digitalbazaar/data-integrity@npm:2.5.0" - dependencies: - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - jsonld-signatures: "npm:^11.3.0" - checksum: 10c0/0080cbbd5425ef83e0ca3855fb8bc18f6d382a5f2aebba9a1dc7003dc6e066d2fd1ad95737f6ea36c3c8c2f696330316991aabb46d518420220487b8444086f5 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-multikey@npm:^1.0.0, @digitalbazaar/ed25519-multikey@npm:^1.1.0, @digitalbazaar/ed25519-multikey@npm:^1.3.0": - version: 1.3.0 - resolution: "@digitalbazaar/ed25519-multikey@npm:1.3.0" - dependencies: - "@noble/ed25519": "npm:^1.6.0" - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - checksum: 10c0/07cf6ea5591a269fca5b9709481e249b20cf83145ab56c25c8b75f668739163af95eae6742b50b8575522075e0933242343564d14d661f5bcae70fade13726b5 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-signature-2020@npm:^5.4.0": - version: 5.4.0 - resolution: "@digitalbazaar/ed25519-signature-2020@npm:5.4.0" - dependencies: - "@digitalbazaar/ed25519-multikey": "npm:^1.1.0" - "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.1.0" - base58-universal: "npm:^2.0.0" - ed25519-signature-2020-context: "npm:^1.1.0" - jsonld-signatures: "npm:^11.3.0" - checksum: 10c0/7fcdd54c18d85dbbf937464ff8f330876de336d2607c944981fa8e69bcc2df59a5181441d364c27e269d1a6d2028217ed3f662028634c57ab55e739c3af42c16 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-verification-key-2020@npm:^4.1.0, @digitalbazaar/ed25519-verification-key-2020@npm:^4.2.0": - version: 4.2.0 - resolution: "@digitalbazaar/ed25519-verification-key-2020@npm:4.2.0" - dependencies: - "@noble/ed25519": "npm:^1.6.0" - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - crypto-ld: "npm:^7.0.0" - checksum: 10c0/386b4be965e10b0253c5fd620c4e386c2f57587937c9215ed0127c3f42016d32e99844cc5eabbddc41642ade31760539e67e97d69cfdb0df6b3beb58737b9a01 - languageName: node - linkType: hard - -"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:^1.2.0": - version: 1.2.0 - resolution: "@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:1.2.0" - dependencies: - "@digitalbazaar/ed25519-multikey": "npm:^1.0.0" - jsonld: "npm:^8.1.0" - rdf-canonize: "npm:^4.0.1" - checksum: 10c0/2473ddb96cf50ab6e478f203ff3eaa7b530a9a96bb45c5f8cfada1fe4fb29dc04cd92cff86c6b9286848b86531deccbd3cdfca7fc0821a09880e94af8b3d8bed - languageName: node - linkType: hard - -"@digitalbazaar/http-client@npm:^3.4.1": - version: 3.4.1 - resolution: "@digitalbazaar/http-client@npm:3.4.1" - dependencies: - ky: "npm:^0.33.3" - ky-universal: "npm:^0.11.0" - undici: "npm:^5.21.2" - checksum: 10c0/218240da52e7303a63e822448fb6dc2eb3a42d0418f51fd9240b267703ffad2e45c17df01d5d8f6886ea8d0cdcf65ee929ae5377703c0e9d2db4f68313f8246c - languageName: node - linkType: hard - -"@digitalbazaar/security-context@npm:^1.0.0": - version: 1.0.1 - resolution: "@digitalbazaar/security-context@npm:1.0.1" - checksum: 10c0/6d1444002958454be5dd70cc6ba4d0df952f90162756d6320d88501ff44fc7d48dcb2aa3452b77e8941a9da4e4c7d050d3510827db93637ff469b92391c63324 - languageName: node - linkType: hard - -"@digitalbazaar/vc@npm:^7.1.0": - version: 7.1.0 - resolution: "@digitalbazaar/vc@npm:7.1.0" - dependencies: - "@digitalbazaar/credentials-context": "npm:^3.1.0" - ed25519-signature-2018-context: "npm:^1.1.0" - jsonld: "npm:^8.3.1" - jsonld-signatures: "npm:^11.2.1" - checksum: 10c0/4914cd7bfc2556512b7b1b78b7032180fcd8a966d365ecd62f0534da2347fa43b9023f2460f15fd9c8029088af8ecc81481603fe9cf953e40393a956338356bb - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/core@npm:1.3.1" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.1" - tslib: "npm:^2.4.0" - checksum: 10c0/d3be1044ad704e2c486641bc18908523490f28c7d38bd12d9c1d4ce37d39dae6c4aecd2f2eaf44c6e3bd90eaf04e0591acc440b1b038cdf43cce078a355a0ea0 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.4.3": - version: 1.4.5 - resolution: "@emnapi/core@npm:1.4.5" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.4" - tslib: "npm:^2.4.0" - checksum: 10c0/da4a57f65f325d720d0e0d1a9c6618b90c4c43a5027834a110476984e1d47c95ebaed4d316b5dddb9c0ed9a493ffeb97d1934f9677035f336d8a36c1f3b2818f - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/runtime@npm:1.3.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.4.3": - version: 1.4.5 - resolution: "@emnapi/runtime@npm:1.4.5" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/37a0278be5ac81e918efe36f1449875cbafba947039c53c65a1f8fc238001b866446fc66041513b286baaff5d6f9bec667f5164b3ca481373a8d9cb65bfc984b - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.1": - version: 1.0.1 - resolution: "@emnapi/wasi-threads@npm:1.0.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/1e0c8036b8d53e9b07cc9acf021705ef6c86ab6b13e1acda7fffaf541a2d3565072afb92597419173ced9ea14f6bf32fce149106e669b5902b825e8b499e5c6c - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.4": - version: 1.0.4 - resolution: "@emnapi/wasi-threads@npm:1.0.4" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/2c91a53e62f875800baf035c4d42c9c0d18e5afd9a31ca2aac8b435aeaeaeaac386b5b3d0d0e70aa7a5a9852bbe05106b1f680cd82cce03145c703b423d41313 - languageName: node - linkType: hard - -"@es-joy/jsdoccomment@npm:~0.46.0": - version: 0.46.0 - resolution: "@es-joy/jsdoccomment@npm:0.46.0" - dependencies: - comment-parser: "npm:1.4.1" - esquery: "npm:^1.6.0" - jsdoc-type-pratt-parser: "npm:~4.0.0" - checksum: 10c0/a7a67936ebf6d9aaf74af018c3ac744769af3552b05ad9b88fca96b2ffdca16e724b0ff497f53634ec4cca81e98d8c471b6b6bde0fa5b725af4222ad9a0707f0 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.1 - resolution: "@eslint-community/eslint-utils@npm:4.4.1" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 - languageName: node - linkType: hard - -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^1.0.0": - version: 1.2.1 - resolution: "@fastify/busboy@npm:1.2.1" - dependencies: - text-decoding: "npm:^1.0.0" - checksum: 10c0/fe13effa7a7a2aa270ef62586cd8d04339036b10ffa1d3d6a883e502fcc1bdc6d8de1bd7ac9d46ef7718bed3b1202cac058e281f5053dee262af7538243cb780 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" - dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c - languageName: node - linkType: hard - -"@hutson/parse-repository-url@npm:^3.0.0": - version: 3.0.2 - resolution: "@hutson/parse-repository-url@npm:3.0.2" - checksum: 10c0/d9197757ecad2df18d29d3e1d1fe0716d458fd88b849c71cbec9e78239f911074c97e8d764dfd8ed890431c1137e52dd7a337207fd65be20ce0784f7860ae4d1 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@isaacs/string-locale-compare@npm:^1.1.0": - version: 1.1.0 - resolution: "@isaacs/string-locale-compare@npm:1.1.0" - checksum: 10c0/d67226ff7ac544a495c77df38187e69e0e3a0783724777f86caadafb306e2155dc3b5787d5927916ddd7fb4a53561ac8f705448ac3235d18ea60da5854829fdf - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: "npm:^5.3.1" - find-up: "npm:^4.1.0" - get-package-type: "npm:^0.1.0" - js-yaml: "npm:^3.13.1" - resolve-from: "npm:^5.0.0" - checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a - languageName: node - linkType: hard - -"@jest/console@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/console@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - slash: "npm:^3.0.0" - checksum: 10c0/1400e9ee281dd070f543f8f8696b9aca4ba1f81d5cbfb3cae030664012ff5961c76ac2c8ccee172e416e15f88af3b10840548adbee4de0ec63100d44416b17ef - languageName: node - linkType: hard - -"@jest/core@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/core@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/pattern": "npm:30.0.1" - "@jest/reporters": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.3.2" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - exit-x: "npm:^0.2.2" - graceful-fs: "npm:^4.2.11" - jest-changed-files: "npm:30.0.5" - jest-config: "npm:30.0.5" - jest-haste-map: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-resolve-dependencies: "npm:30.0.5" - jest-runner: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - jest-watcher: "npm:30.0.5" - micromatch: "npm:^4.0.8" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/d3437dca1fccbb44c6c8a327b93e510e10999745b7c7dae94ad88d4fa4ce6d3c823e49d17caf79560b69a7db91fc10c7443a8014f8178622a0b11514b5106aa6 - languageName: node - linkType: hard - -"@jest/diff-sequences@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/diff-sequences@npm:30.0.1" - checksum: 10c0/3a840404e6021725ef7f86b11f7b2d13dd02846481264db0e447ee33b7ee992134e402cdc8b8b0ac969d37c6c0183044e382dedee72001cdf50cfb3c8088de74 - languageName: node - linkType: hard - -"@jest/environment@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/environment@npm:30.0.5" - dependencies: - "@jest/fake-timers": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-mock: "npm:30.0.5" - checksum: 10c0/e403b6f98fa3e39dd6462fa192e3bd55e9ac9c2322ca4471b9342495913a90ecaa5fc53238d4ad8a0dca7d53aa4b9de122721234e36f3a0445031c25757a3178 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/expect-utils@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - checksum: 10c0/d0ee162a1d1816724580bea53e7b422b891af073bdae439e78d04d5db09e6557e334f4c3d2892b9de750a59e79605f55d3ca8dbec9fb2ba33d8b803ed98463ad - languageName: node - linkType: hard - -"@jest/expect@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/expect@npm:30.0.5" - dependencies: - expect: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - checksum: 10c0/6ff40adf2f2cfa53f7a23bc2b85ae99d3264420e81202d45d1dc198009f4441ee575d910e79e589f69c2dd47e0ef9a3b66018f44760da02d98f474361f7c4d1c - languageName: node - linkType: hard - -"@jest/fake-timers@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/fake-timers@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@sinonjs/fake-timers": "npm:^13.0.0" - "@types/node": "npm:*" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - checksum: 10c0/4c403e624d758780016c2012b23112ff421efd601def289b201c4a5e03c46f995c7c3509d7b0b56dbe17cd5cbc66920734bd976ebe12125d6fd864d71888a50d - languageName: node - linkType: hard - -"@jest/get-type@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/get-type@npm:30.0.1" - checksum: 10c0/92437ae42d0df57e8acc2d067288151439db4752cde4f5e680c73c8a6e34568bbd8c1c81a2f2f9a637a619c2aac8bc87553fb80e31475b59e2ed789a71e5e540 - languageName: node - linkType: hard - -"@jest/globals@npm:30.0.5, @jest/globals@npm:^30.0.5": - version: 30.0.5 - resolution: "@jest/globals@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/expect": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - jest-mock: "npm:30.0.5" - checksum: 10c0/abe8e4b11f30c2885e42afa9e01d4364db8c6de4c3221f411b00a9081d3cc67226f84775efbbd17735dedb391222253f945ee260714d78b2a7304b7afa61b6d8 - languageName: node - linkType: hard - -"@jest/pattern@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/pattern@npm:30.0.1" - dependencies: - "@types/node": "npm:*" - jest-regex-util: "npm:30.0.1" - checksum: 10c0/32c5a7bfb6c591f004dac0ed36d645002ed168971e4c89bd915d1577031672870032594767557b855c5bc330aa1e39a2f54bf150d2ee88a7a0886e9cb65318bc - languageName: node - linkType: hard - -"@jest/reporters@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/reporters@npm:30.0.5" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - collect-v8-coverage: "npm:^1.0.2" - exit-x: "npm:^0.2.2" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^6.0.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^5.0.0" - istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-worker: "npm:30.0.5" - slash: "npm:^3.0.0" - string-length: "npm:^4.0.2" - v8-to-istanbul: "npm:^9.0.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/9f8a214ff69427b644e26981fa92af49b77819d512ac17d0b4190d1dc110b0bebeb7791faa7548b8097f010b094c3b5e3244e18f3837a3fe8385ff60c7114539 - languageName: node - linkType: hard - -"@jest/schemas@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/schemas@npm:30.0.5" - dependencies: - "@sinclair/typebox": "npm:^0.34.0" - checksum: 10c0/449dcd7ec5c6505e9ac3169d1143937e67044ae3e66a729ce4baf31812dfd30535f2b3b2934393c97cfdf5984ff581120e6b38f62b8560c8b5b7cc07f4175f65 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be - languageName: node - linkType: hard - -"@jest/snapshot-utils@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/snapshot-utils@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - natural-compare: "npm:^1.4.0" - checksum: 10c0/db270c2d6e216d132c5e0b05d8ff5bbe4fbd4e65b2de4cf94eacb44152e8f17fbbba8bdd2cb83b5fc2b1094db6424c7e1507b7eaade518dbc815cfacbdf6598b - languageName: node - linkType: hard - -"@jest/source-map@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/source-map@npm:30.0.1" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.25" - callsites: "npm:^3.1.0" - graceful-fs: "npm:^4.2.11" - checksum: 10c0/e7bda2786fc9f483d9dd7566c58c4bd948830997be862dfe80a3ae5550ff3f84753abb52e705d02ebe9db9f34ba7ebec4c2db11882048cdeef7a66f6332b3897 - languageName: node - linkType: hard - -"@jest/test-result@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/test-result@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/istanbul-lib-coverage": "npm:^2.0.6" - collect-v8-coverage: "npm:^1.0.2" - checksum: 10c0/2a43134ee28616a178b5a6379c837f2fb054a5e4a6ab411b9d15b85224e5d459d88902cdbf83edf5821c2c77fe13e67d078eff64c6871f3b08ebff0548a9a2e4 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/test-sequencer@npm:30.0.5" - dependencies: - "@jest/test-result": "npm:30.0.5" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - slash: "npm:^3.0.0" - checksum: 10c0/3caaea0558474764cd616f38acdc22ff4ce6ef806d931134ed366429fdea7110352b89d702e9cc1d71fa142d79e86f2f4e6eb0441a76a1896682e124ed8f42b4 - languageName: node - linkType: hard - -"@jest/transform@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/transform@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@jest/types": "npm:30.0.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - babel-plugin-istanbul: "npm:^7.0.0" - chalk: "npm:^4.1.2" - convert-source-map: "npm:^2.0.0" - fast-json-stable-stringify: "npm:^2.1.0" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-util: "npm:30.0.5" - micromatch: "npm:^4.0.8" - pirates: "npm:^4.0.7" - slash: "npm:^3.0.0" - write-file-atomic: "npm:^5.0.1" - checksum: 10c0/771f57b1bede66049de80dcbf984c74b7d3c072e905f2516ff3f86dc01abd2f79d821b9a6ae21f27cb26d484cd539c13b1a51f71c15e1aed0c62314203c5a186 - languageName: node - linkType: hard - -"@jest/types@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/types@npm:30.0.5" - dependencies: - "@jest/pattern": "npm:30.0.1" - "@jest/schemas": "npm:30.0.5" - "@types/istanbul-lib-coverage": "npm:^2.0.6" - "@types/istanbul-reports": "npm:^3.0.4" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.33" - chalk: "npm:^4.1.2" - checksum: 10c0/fd097a390e36edacbd2c92a8378ec0cd67abec5e234bab7a80aec6eb8625568052b0c32acf472388d04c4cf384b8fa2871d0d12a56b4b06eaea93f2c6df0ec6c - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.12": - version: 0.3.12 - resolution: "@jridgewell/gen-mapping@npm:0.3.12" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/32f771ae2467e4d440be609581f7338d786d3d621bac3469e943b9d6d116c23c4becb36f84898a92bbf2f3c0511365c54a945a3b86a83141547a2a360a5ec0c7 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.8 - resolution: "@jridgewell/gen-mapping@npm:0.3.8" - dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.4 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" - checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.0.3" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.29 - resolution: "@jridgewell/trace-mapping@npm:0.3.29" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/fb547ba31658c4d74eb17e7389f4908bf7c44cef47acb4c5baa57289daf68e6fe53c639f41f751b3923aca67010501264f70e7b49978ad1f040294b22c37b333 - languageName: node - linkType: hard - -"@lerna/create@npm:8.1.9": - version: 8.1.9 - resolution: "@lerna/create@npm:8.1.9" - dependencies: - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" - "@octokit/plugin-enterprise-rest": "npm:6.0.1" - "@octokit/rest": "npm:19.0.11" - aproba: "npm:2.0.0" - byte-size: "npm:8.1.1" - chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" - cmd-shim: "npm:6.0.3" - color-support: "npm:1.1.3" - columnify: "npm:1.6.0" - console-control-strings: "npm:^1.1.0" - conventional-changelog-core: "npm:5.0.1" - conventional-recommended-bump: "npm:7.0.1" - cosmiconfig: "npm:9.0.0" - dedent: "npm:1.5.3" - execa: "npm:5.0.0" - fs-extra: "npm:^11.2.0" - get-stream: "npm:6.0.0" - git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - globby: "npm:11.1.0" - graceful-fs: "npm:4.2.11" - has-unicode: "npm:2.0.1" - ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" - is-ci: "npm:3.0.1" - is-stream: "npm:2.0.0" - js-yaml: "npm:4.1.0" - libnpmpublish: "npm:9.0.9" - load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" - make-dir: "npm:4.0.0" - minimatch: "npm:3.0.5" - multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" - p-map: "npm:4.0.0" - p-map-series: "npm:2.1.0" - p-queue: "npm:6.6.2" - p-reduce: "npm:^2.1.0" - pacote: "npm:^18.0.6" - pify: "npm:5.0.0" - read-cmd-shim: "npm:4.0.0" - resolve-from: "npm:5.0.0" - rimraf: "npm:^4.4.1" - semver: "npm:^7.3.4" - set-blocking: "npm:^2.0.0" - signal-exit: "npm:3.0.7" - slash: "npm:^3.0.0" - ssri: "npm:^10.0.6" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - strong-log-transformer: "npm:2.1.0" - tar: "npm:6.2.1" - temp-dir: "npm:1.0.0" - upath: "npm:2.0.1" - uuid: "npm:^10.0.0" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:5.0.1" - wide-align: "npm:1.1.5" - write-file-atomic: "npm:5.0.1" - write-pkg: "npm:4.0.0" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - checksum: 10c0/f050e79c0bd982c6fdf9b7347275a94cc80f7a6599094f1cf114c10d5373c21afac9bd1a5c0b2ca400e6aaf18da883c384dfd6e5c84a186a2c09c912bf9b2238 - languageName: node - linkType: hard - -"@mapbox/node-pre-gyp@npm:^1.0.11": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" - dependencies: - detect-libc: "npm:^2.0.0" - https-proxy-agent: "npm:^5.0.0" - make-dir: "npm:^3.1.0" - node-fetch: "npm:^2.6.7" - nopt: "npm:^5.0.0" - npmlog: "npm:^5.0.1" - rimraf: "npm:^3.0.2" - semver: "npm:^7.3.5" - tar: "npm:^6.1.11" - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:0.2.4": - version: 0.2.4 - resolution: "@napi-rs/wasm-runtime@npm:0.2.4" - dependencies: - "@emnapi/core": "npm:^1.1.0" - "@emnapi/runtime": "npm:^1.1.0" - "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/1040de49b2ef509db207e2517465dbf7fb3474f20e8ec32897672a962ff4f59872385666dac61dc9dbeae3cae5dad265d8dc3865da756adeb07d1634c67b03a1 - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:^0.2.11": - version: 0.2.12 - resolution: "@napi-rs/wasm-runtime@npm:0.2.12" - dependencies: - "@emnapi/core": "npm:^1.4.3" - "@emnapi/runtime": "npm:^1.4.3" - "@tybys/wasm-util": "npm:^0.10.0" - checksum: 10c0/6d07922c0613aab30c6a497f4df297ca7c54e5b480e00035e0209b872d5c6aab7162fc49477267556109c2c7ed1eb9c65a174e27e9b87568106a87b0a6e3ca7d - languageName: node - linkType: hard - -"@noble/ed25519@npm:^1.6.0": - version: 1.7.3 - resolution: "@noble/ed25519@npm:1.7.3" - checksum: 10c0/dc162c3be5ae5a3cc0e6aff8209c8d175f24bba22f2b473aa849e102471193c83664b06f0ba2b5e01e9aa1a67a44daf313f478adb9f38768408a8bcad6145a48 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@nolyfill/is-core-module@npm:1.0.39": - version: 1.0.39 - resolution: "@nolyfill/is-core-module@npm:1.0.39" - checksum: 10c0/34ab85fdc2e0250879518841f74a30c276bca4f6c3e13526d2d1fe515e1adf6d46c25fcd5989d22ea056d76f7c39210945180b4859fc83b050e2da411aa86289 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae - languageName: node - linkType: hard - -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 - languageName: node - linkType: hard - -"@npmcli/arborist@npm:7.5.4": - version: 7.5.4 - resolution: "@npmcli/arborist@npm:7.5.4" - dependencies: - "@isaacs/string-locale-compare": "npm:^1.1.0" - "@npmcli/fs": "npm:^3.1.1" - "@npmcli/installed-package-contents": "npm:^2.1.0" - "@npmcli/map-workspaces": "npm:^3.0.2" - "@npmcli/metavuln-calculator": "npm:^7.1.1" - "@npmcli/name-from-folder": "npm:^2.0.0" - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/query": "npm:^3.1.0" - "@npmcli/redact": "npm:^2.0.0" - "@npmcli/run-script": "npm:^8.1.0" - bin-links: "npm:^4.0.4" - cacache: "npm:^18.0.3" - common-ancestor-path: "npm:^1.0.1" - hosted-git-info: "npm:^7.0.2" - json-parse-even-better-errors: "npm:^3.0.2" - json-stringify-nice: "npm:^1.1.4" - lru-cache: "npm:^10.2.2" - minimatch: "npm:^9.0.4" - nopt: "npm:^7.2.1" - npm-install-checks: "npm:^6.2.0" - npm-package-arg: "npm:^11.0.2" - npm-pick-manifest: "npm:^9.0.1" - npm-registry-fetch: "npm:^17.0.1" - pacote: "npm:^18.0.6" - parse-conflict-json: "npm:^3.0.0" - proc-log: "npm:^4.2.0" - proggy: "npm:^2.0.0" - promise-all-reject-late: "npm:^1.0.0" - promise-call-limit: "npm:^3.0.1" - read-package-json-fast: "npm:^3.0.2" - semver: "npm:^7.3.7" - ssri: "npm:^10.0.6" - treeverse: "npm:^3.0.0" - walk-up-path: "npm:^3.0.1" - bin: - arborist: bin/index.js - checksum: 10c0/22417b804872e68b6486187bb769eabef7245c5d3fa055d5473f84a7088580543235f34af3047a0e9b357e70fccd768e8ef5c6c8664ed6909f659d07607ad955 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/fs@npm:4.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 - languageName: node - linkType: hard - -"@npmcli/git@npm:^5.0.0": - version: 5.0.8 - resolution: "@npmcli/git@npm:5.0.8" - dependencies: - "@npmcli/promise-spawn": "npm:^7.0.0" - ini: "npm:^4.1.3" - lru-cache: "npm:^10.0.1" - npm-pick-manifest: "npm:^9.0.0" - proc-log: "npm:^4.0.0" - promise-inflight: "npm:^1.0.1" - promise-retry: "npm:^2.0.1" - semver: "npm:^7.3.5" - which: "npm:^4.0.0" - checksum: 10c0/892441c968404950809c7b515a93b78167ea1db2252f259f390feae22a2c5477f3e1629e105e19a084c05afc56e585bf3f13c2f13b54a06bfd6786f0c8429532 - languageName: node - linkType: hard - -"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/installed-package-contents@npm:2.1.0" - dependencies: - npm-bundled: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - bin: - installed-package-contents: bin/index.js - checksum: 10c0/f5ecba0d45fc762f3e0d5def29fbfabd5d55e8147b01ae0a101769245c2e0038bc82a167836513a98aaed0a15c3d81fcdb232056bb8a962972a432533e518fce - languageName: node - linkType: hard - -"@npmcli/map-workspaces@npm:^3.0.2": - version: 3.0.6 - resolution: "@npmcli/map-workspaces@npm:3.0.6" - dependencies: - "@npmcli/name-from-folder": "npm:^2.0.0" - glob: "npm:^10.2.2" - minimatch: "npm:^9.0.0" - read-package-json-fast: "npm:^3.0.0" - checksum: 10c0/6bfcf8ca05ab9ddc2bd19c0fd91e9982f03cc6e67b0c03f04ba4d2f29b7d83f96e759c0f8f1f4b6dbe3182272483643a0d1269788352edd0c883d6fbfa2f3f14 - languageName: node - linkType: hard - -"@npmcli/metavuln-calculator@npm:^7.1.1": - version: 7.1.1 - resolution: "@npmcli/metavuln-calculator@npm:7.1.1" - dependencies: - cacache: "npm:^18.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - pacote: "npm:^18.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - checksum: 10c0/27402cab124bb1fca56af7549f730c38c0ab40de60cbef6264a4193c26c2d28cefb2adac29ed27f368031795704f9f8fe0c547c4c8cb0c0fa94d72330d56ac80 - languageName: node - linkType: hard - -"@npmcli/name-from-folder@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/name-from-folder@npm:2.0.0" - checksum: 10c0/1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 - languageName: node - linkType: hard - -"@npmcli/node-gyp@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/node-gyp@npm:3.0.0" - checksum: 10c0/5d0ac17dacf2dd6e45312af2c1ae2749bb0730fcc82da101c37d3a4fd963a5e1c5d39781e5e1e5e5828df4ab1ad4e3fdbab1d69b7cd0abebad9983efb87df985 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:5.2.0": - version: 5.2.0 - resolution: "@npmcli/package-json@npm:5.2.0" - dependencies: - "@npmcli/git": "npm:^5.0.0" - glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.5.3" - checksum: 10c0/bdce8c7eed0dee1d272bf8ba500c4bce6d8ed2b4dd2ce43075d3ba02ffd3bb70c46dbcf8b3a35e19d9492d039b720dc3a4b30d1a2ddc30b7918e1d5232faa1f7 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": - version: 5.2.1 - resolution: "@npmcli/package-json@npm:5.2.1" - dependencies: - "@npmcli/git": "npm:^5.0.0" - glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.5.3" - checksum: 10c0/b852e31e3121a0afe5fa20bbf4faa701a59dbc9d9dd7141f7fd57b8e919ce22c1285dcdfea490851fe410fa0f7bc9c397cafba0d268aaa53420a12d7c561dde1 - languageName: node - linkType: hard - -"@npmcli/promise-spawn@npm:^7.0.0": - version: 7.0.2 - resolution: "@npmcli/promise-spawn@npm:7.0.2" - dependencies: - which: "npm:^4.0.0" - checksum: 10c0/8f2af5bc2c1b1ccfb9bcd91da8873ab4723616d8bd5af877c0daa40b1e2cbfa4afb79e052611284179cae918c945a1b99ae1c565d78a355bec1a461011e89f71 - languageName: node - linkType: hard - -"@npmcli/query@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/query@npm:3.1.0" - dependencies: - postcss-selector-parser: "npm:^6.0.10" - checksum: 10c0/9a099677dd188a2d9eb7a49e32c69d315b09faea59e851b7c2013b5bda915a38434efa7295565c40a1098916c06ebfa1840f68d831180e36842f48c24f4c5186 - languageName: node - linkType: hard - -"@npmcli/redact@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/redact@npm:2.0.1" - checksum: 10c0/5f346f7ef224b44c90009939f93c446a865a3d9e5a7ebe0246cdb0ebd03219de3962ee6c6e9197298d8c6127ea33535e8c44814276e4941394dc1cdf1f30f6bc - languageName: node - linkType: hard - -"@npmcli/run-script@npm:8.1.0, @npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": - version: 8.1.0 - resolution: "@npmcli/run-script@npm:8.1.0" - dependencies: - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.0.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - node-gyp: "npm:^10.0.0" - proc-log: "npm:^4.0.0" - which: "npm:^4.0.0" - checksum: 10c0/f9f40ecff0406a9ce1b77c9f714fc7c71b561289361efc6e2e0e48ca2d630aa98d277cbbf269750f9467a40eaaac79e78766d67c458046aa9507c8c354650fee - languageName: node - linkType: hard - -"@nrwl/tao@npm:v17.2.5": - version: 17.2.5 - resolution: "@nrwl/tao@npm:17.2.5" - dependencies: - nx: "npm:v17.2.5" - tslib: "npm:^2.3.0" - bin: - tao: index.js - checksum: 10c0/d98361141704d83487f2401116cafa7348acb30a1637336ddc471fdc42313503280767777c9752e91df0e56d3b7491251894172817e0e5ee514fe44d3ab2bf09 - languageName: node - linkType: hard - -"@nx/devkit@npm:>=17.1.2 < 21": - version: 20.3.2 - resolution: "@nx/devkit@npm:20.3.2" - dependencies: - ejs: "npm:^3.1.7" - enquirer: "npm:~2.3.6" - ignore: "npm:^5.0.4" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.3" - tmp: "npm:~0.2.1" - tslib: "npm:^2.3.0" - yargs-parser: "npm:21.1.1" - peerDependencies: - nx: ">= 19 <= 21" - checksum: 10c0/0c59aaea2c6b45712c28186b95792ae2530f928025aa7cea7d0175f9e0532ad3feeaa85b84d23e35378182c689819baa47daeb76ee4d26d823c926421830afd4 - languageName: node - linkType: hard - -"@nx/nx-darwin-arm64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-darwin-arm64@npm:20.3.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-darwin-arm64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-darwin-arm64@npm:17.2.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-darwin-x64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-darwin-x64@npm:20.3.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-darwin-x64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-darwin-x64@npm:17.2.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-freebsd-x64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-freebsd-x64@npm:20.3.2" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-freebsd-x64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-freebsd-x64@npm:17.2.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-linux-arm-gnueabihf@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.3.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@nx/nx-linux-arm-gnueabihf@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:17.2.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-gnu@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm64-gnu@npm:20.3.2" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-gnu@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm64-gnu@npm:17.2.5" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-musl@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm64-musl@npm:20.3.2" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-musl@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm64-musl@npm:17.2.5" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-x64-gnu@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-x64-gnu@npm:20.3.2" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-x64-gnu@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-x64-gnu@npm:17.2.5" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-x64-musl@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-x64-musl@npm:20.3.2" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-x64-musl@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-x64-musl@npm:17.2.5" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-win32-arm64-msvc@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-win32-arm64-msvc@npm:20.3.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-win32-arm64-msvc@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-win32-arm64-msvc@npm:17.2.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-win32-x64-msvc@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-win32-x64-msvc@npm:20.3.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-win32-x64-msvc@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-win32-x64-msvc@npm:17.2.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@octokit/auth-token@npm:^3.0.0": - version: 3.0.4 - resolution: "@octokit/auth-token@npm:3.0.4" - checksum: 10c0/abdf5e2da36344de9727c70ba782d58004f5ae1da0f65fa9bc9216af596ef23c0e4675f386df2f6886806612558091d603564051b693b0ad1986aa6160b7a231 - languageName: node - linkType: hard - -"@octokit/core@npm:^4.2.1": - version: 4.2.4 - resolution: "@octokit/core@npm:4.2.4" - dependencies: - "@octokit/auth-token": "npm:^3.0.0" - "@octokit/graphql": "npm:^5.0.0" - "@octokit/request": "npm:^6.0.0" - "@octokit/request-error": "npm:^3.0.0" - "@octokit/types": "npm:^9.0.0" - before-after-hook: "npm:^2.2.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/e54081a56884e628d1804837fddcd48c10d516117bb891551c8dc9d8e3dad449aeb9b4677ca71e8f0e76268c2b7656c953099506679aaa4666765228474a3ce6 - languageName: node - linkType: hard - -"@octokit/endpoint@npm:^7.0.0": - version: 7.0.6 - resolution: "@octokit/endpoint@npm:7.0.6" - dependencies: - "@octokit/types": "npm:^9.0.0" - is-plain-object: "npm:^5.0.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/fd147a55010b54af7567bf90791359f7096a1c9916a2b7c72f8afd0c53141338b3d78da3a4ab3e3bdfeb26218a1b73735432d8987ccc04996b1019219299f115 - languageName: node - linkType: hard - -"@octokit/graphql@npm:^5.0.0": - version: 5.0.6 - resolution: "@octokit/graphql@npm:5.0.6" - dependencies: - "@octokit/request": "npm:^6.0.0" - "@octokit/types": "npm:^9.0.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/de1d839d97fe6d96179925f6714bf96e7af6f77929892596bb4211adab14add3291fc5872b269a3d0e91a4dcf248d16096c82606c4a43538cf241b815c2e2a36 - languageName: node - linkType: hard - -"@octokit/openapi-types@npm:^18.0.0": - version: 18.1.1 - resolution: "@octokit/openapi-types@npm:18.1.1" - checksum: 10c0/856d3bb9f8c666e837dd5e8b8c216ee4342b9ed63ff8da922ca4ce5883ed1dfbec73390eb13d69fbcb4703a4c8b8b6a586df3b0e675ff93bf3d46b5b4fe0968e - languageName: node - linkType: hard - -"@octokit/plugin-enterprise-rest@npm:6.0.1": - version: 6.0.1 - resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" - checksum: 10c0/26bd0a30582954efcd29b41e16698db79e9d20e3f88c4069b43b183223cee69862621f18b6a7a1c9257b1cd07c24477e403b75c74688660ecf31d467b9d8fd9e - languageName: node - linkType: hard - -"@octokit/plugin-paginate-rest@npm:^6.1.2": - version: 6.1.2 - resolution: "@octokit/plugin-paginate-rest@npm:6.1.2" - dependencies: - "@octokit/tsconfig": "npm:^1.0.2" - "@octokit/types": "npm:^9.2.3" - peerDependencies: - "@octokit/core": ">=4" - checksum: 10c0/def241c4f00b864822ab6414eaadd8679a6d332004c7e77467cfc1e6d5bdcc453c76bd185710ee942e4df201f9dd2170d960f46af5b14ef6f261a0068f656364 - languageName: node - linkType: hard - -"@octokit/plugin-request-log@npm:^1.0.4": - version: 1.0.4 - resolution: "@octokit/plugin-request-log@npm:1.0.4" - peerDependencies: - "@octokit/core": ">=3" - checksum: 10c0/7238585445555db553912e0cdef82801c89c6e5cbc62c23ae086761c23cc4a403d6c3fddd20348bbd42fb7508e2c2fce370eb18fdbe3fbae2c0d2c8be974f4cc - languageName: node - linkType: hard - -"@octokit/plugin-rest-endpoint-methods@npm:^7.1.2": - version: 7.2.3 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" - dependencies: - "@octokit/types": "npm:^10.0.0" - peerDependencies: - "@octokit/core": ">=3" - checksum: 10c0/8bffbc5852695dd08d65cc64b6ab7d2871ed9df1e791608f48b488a3908b5b655e3686b5dd72fc37c824e82bdd4dfc9d24e2e50205bbc324667def1d705bc9da - languageName: node - linkType: hard - -"@octokit/request-error@npm:^3.0.0": - version: 3.0.3 - resolution: "@octokit/request-error@npm:3.0.3" - dependencies: - "@octokit/types": "npm:^9.0.0" - deprecation: "npm:^2.0.0" - once: "npm:^1.4.0" - checksum: 10c0/1e252ac193c8af23b709909911aa327ed5372cbafcba09e4aff41e0f640a7c152579ab0a60311a92e37b4e7936392d59ee4c2feae5cdc387ee8587a33d8afa60 - languageName: node - linkType: hard - -"@octokit/request@npm:^6.0.0": - version: 6.2.8 - resolution: "@octokit/request@npm:6.2.8" - dependencies: - "@octokit/endpoint": "npm:^7.0.0" - "@octokit/request-error": "npm:^3.0.0" - "@octokit/types": "npm:^9.0.0" - is-plain-object: "npm:^5.0.0" - node-fetch: "npm:^2.6.7" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/6b6079ed45bac44c4579b40990bfd1905b03d4bc4e5255f3d5a10cf5182171578ebe19abeab32ebb11a806f1131947f2a06b7a077bd7e77ade7b15fe2882174b - languageName: node - linkType: hard - -"@octokit/rest@npm:19.0.11": - version: 19.0.11 - resolution: "@octokit/rest@npm:19.0.11" - dependencies: - "@octokit/core": "npm:^4.2.1" - "@octokit/plugin-paginate-rest": "npm:^6.1.2" - "@octokit/plugin-request-log": "npm:^1.0.4" - "@octokit/plugin-rest-endpoint-methods": "npm:^7.1.2" - checksum: 10c0/a14ae31fc5e70e76d2492aae63d3453cbb71f44e7492400f885ab5ac6b2612bcb244bafa29e45a59461f3e5d99807ff9c88d48af8317ffa4f8ad3f8f11fdd035 - languageName: node - linkType: hard - -"@octokit/tsconfig@npm:^1.0.2": - version: 1.0.2 - resolution: "@octokit/tsconfig@npm:1.0.2" - checksum: 10c0/84db70b495beeed69259dd4def14cdfb600edeb65ef32811558c99413ee2b414ed10bff9c4dcc7a43451d0fd36b4925ada9ef7d4272b5eae38cb005cc2f459ac - languageName: node - linkType: hard - -"@octokit/types@npm:^10.0.0": - version: 10.0.0 - resolution: "@octokit/types@npm:10.0.0" - dependencies: - "@octokit/openapi-types": "npm:^18.0.0" - checksum: 10c0/9bbbec1e452c271752e5ba735c161a558933f2e35f3004bb0b6e8d6ba574af48b68bab2f293112a8e68c595435a2fbcc76f3e7333f45ba1888bb5193777a943e - languageName: node - linkType: hard - -"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": - version: 9.3.2 - resolution: "@octokit/types@npm:9.3.2" - dependencies: - "@octokit/openapi-types": "npm:^18.0.0" - checksum: 10c0/2925479aa378a4491762b4fcf381bdc7daca39b4e0b2dd7062bce5d74a32ed7d79d20d3c65ceaca6d105cf4b1f7417fea634219bf90f79a57d03e2dac629ec45 - languageName: node - linkType: hard - -"@panva/asn1.js@npm:^1.0.0": - version: 1.0.0 - resolution: "@panva/asn1.js@npm:1.0.0" - checksum: 10c0/5d6e7ec460b65b017043e2702e25f323936baad2aa248dbd9bf54c9508e351d236bffac96fa033c6e36cb0482a9dd73c3605948a36a59bd6bec49353ba8d7b62 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.1.0": - version: 0.1.1 - resolution: "@pkgr/core@npm:0.1.1" - checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.2.9": - version: 0.2.9 - resolution: "@pkgr/core@npm:0.2.9" - checksum: 10c0/ac8e4e8138b1a7a4ac6282873aef7389c352f1f8b577b4850778f5182e4a39a5241facbe48361fec817f56d02b51691b383010843fb08b34a8e8ea3614688fd5 - languageName: node - linkType: hard - -"@rdfjs/data-model@npm:^1.3.4": - version: 1.3.4 - resolution: "@rdfjs/data-model@npm:1.3.4" - dependencies: - "@rdfjs/types": "npm:>=1.0.1" - bin: - rdfjs-data-model-test: bin/test.js - checksum: 10c0/2f9f04b0f74cbcfd90b521eb51d7ab708164df16cc582ea4322dc364f66ad39ca9f1fc52d0db0b1c93e3043e86a5568ab2ecf66d7633051714e853e02e793ce8 - languageName: node - linkType: hard - -"@rdfjs/types@npm:*, @rdfjs/types@npm:>=1.0.0, @rdfjs/types@npm:>=1.0.1": - version: 2.0.1 - resolution: "@rdfjs/types@npm:2.0.1" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/81012b02e28737e15dfc27068664bbab7b989cc2ff82e0a6a341df492d9d97210b5e462d85bfb7882aa0ef5bf84e2c5e95647fb779b67b7b1910b1837d79c500 - languageName: node - linkType: hard - -"@rdfjs/types@npm:^1.0.0, @rdfjs/types@npm:^1.1.0": - version: 1.1.2 - resolution: "@rdfjs/types@npm:1.1.2" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/128242157d44453d1f5eac9d93cecfddb44acc4e6675751b2cccbc6c33b44492573785eb748e1841fd4a29921ba8e0412ba038824103d97c38a19f72033d9a5c - languageName: node - linkType: hard - -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b - languageName: node - linkType: hard - -"@seald-io/binary-search-tree@npm:^1.0.2": - version: 1.0.3 - resolution: "@seald-io/binary-search-tree@npm:1.0.3" - checksum: 10c0/cf86bfca881c84cf22fa11a96dffd358f58424bd779c9afb7e36934be2e8ad923da54252972a12a2d42a9473557829a573950b0f78213b901ceb9dcc862397e1 - languageName: node - linkType: hard - -"@seald-io/nedb@npm:^3.0.0": - version: 3.1.0 - resolution: "@seald-io/nedb@npm:3.1.0" - dependencies: - "@seald-io/binary-search-tree": "npm:^1.0.2" - localforage: "npm:^1.9.0" - util: "npm:^0.12.4" - checksum: 10c0/2bced9094700b188ce9cbf29502e60cb37b4165b53a9a636d08d985cac976da5d056fd0e990d8b90c4a2b0b58c3c15243a2cbd49aef80ac87f5e31bacb0d1bb0 - languageName: node - linkType: hard - -"@semapps/activitypub@npm:1.1.4, @semapps/activitypub@workspace:packages/activitypub": - version: 0.0.0-use.local - resolution: "@semapps/activitypub@workspace:packages/activitypub" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - handlebars: "npm:^4.7.7" - moleculer-bull: "npm:^0.2.5" - moleculer-db: "npm:^0.8.16" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/auth@npm:1.1.4, @semapps/auth@workspace:packages/auth": - version: 0.0.0-use.local - resolution: "@semapps/auth@workspace:packages/auth" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - bcrypt: "npm:^5.0.1" - express-session: "npm:^1.17.0" - jsonwebtoken: "npm:^9.0.2" - moleculer-db: "npm:^0.8.16" - moleculer-mail: "npm:^1.2.5" - moleculer-web: "npm:^0.10.0-beta1" - openid-client: "npm:^4.7.4" - passport: "npm:^0.4.1" - passport-cas2: "npm:0.0.12" - passport-local: "npm:^1.0.0" - pug: "npm:^3.0.2" - speakingurl: "npm:^14.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/backup@workspace:packages/backup": - version: 0.0.0-use.local - resolution: "@semapps/backup@workspace:packages/backup" - dependencies: - cron: "npm:^1.8.2" - fs-extra: "npm:^10.0.0" - rsync: "npm:^0.6.1" - ssh2-sftp-client: "npm:^7.2.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/core@npm:1.1.4, @semapps/core@workspace:packages/core": - version: 0.0.0-use.local - resolution: "@semapps/core@workspace:packages/core" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/jsonld": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/sparql-endpoint": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/void": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - "@semapps/webfinger": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - moleculer-web: "npm:^0.10.0-beta1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/crypto@npm:1.1.4, @semapps/crypto@workspace:packages/crypto": - version: 0.0.0-use.local - resolution: "@semapps/crypto@workspace:packages/crypto" - dependencies: - "@digitalbazaar/data-integrity": "npm:^2.5.0" - "@digitalbazaar/ed25519-multikey": "npm:^1.3.0" - "@digitalbazaar/ed25519-signature-2020": "npm:^5.4.0" - "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.2.0" - "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "npm:^1.2.0" - "@digitalbazaar/vc": "npm:^7.1.0" - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - crypto-ld: "npm:^7.0.0" - http-signature: "npm:^1.3.4" - http-signature-header: "npm:^1.3.1" - jose: "npm:^5.2.0" - jsonld-signatures: "npm:^11.3.2" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - vc-js: "npm:^0.6.4" - peerDependencies: - moleculer: ^0.14.35 - moleculer-web: ^0.10.0-beta1 - languageName: unknown - linkType: soft - -"@semapps/importer@workspace:packages/importer": - version: 0.0.0-use.local - resolution: "@semapps/importer@workspace:packages/importer" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - cron-parser: "npm:^4.2.1" - google-libphonenumber: "npm:^3.2.26" - node-fetch: "npm:^2.6.6" - sanitize-html: "npm:^2.6.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/inference@npm:1.1.4, @semapps/inference@workspace:packages/inference": - version: 0.0.0-use.local - resolution: "@semapps/inference@workspace:packages/inference" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - n3: "npm:^1.6.3" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/jsonld@npm:1.1.4, @semapps/jsonld@workspace:packages/jsonld": - version: 0.0.0-use.local - resolution: "@semapps/jsonld@workspace:packages/jsonld" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@types/jsonld": "npm:1.5.15" - jsonld: "npm:^3.3.2" - jsonld-context-parser: "npm:^2.4.0" - jsonld-streaming-parser: "npm:^2.4.2" - jsonld-streaming-serializer: "npm:^1.2.0" - lru-cache: "npm:^6.0.0" - n3: "npm:^1.26.0" - rdf-parse: "npm:^1.7.0" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/ldp@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/ldp@npm:1.0.10" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.0.10" - "@semapps/mime-types": "npm:1.0.10" - "@semapps/ontologies": "npm:1.0.10" - "@semapps/triplestore": "npm:1.0.10" - dashify: "npm:^2.0.0" - http-link-header: "npm:^1.1.1" - mime-types: "npm:^2.1.35" - moleculer: "npm:^0.14.17" - moleculer-db: "npm:^0.8.16" - moleculer-schedule: "npm:^0.2.3" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - path-to-regexp: "npm:^6.2.0" - rdf-parse: "npm:^1.7.0" - sharp: "npm:^0.31.2" - sparqljs: "npm:^3.5.2" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/dc8e8a673b4c04e46976f1440bbe7f6e024974fda979f1bdaf8731a1803260381bceba2f8e4fd9ee7b6191cc92738ebb4441a75768edeee3d75d08bba16c21fb - languageName: node - linkType: hard - -"@semapps/ldp@npm:1.1.4, @semapps/ldp@workspace:packages/ldp": - version: 0.0.0-use.local - resolution: "@semapps/ldp@workspace:packages/ldp" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - bytes: "npm:^3.1.2" - cron: "npm:^4.1.4" - dashify: "npm:^2.0.0" - http-link-header: "npm:^1.1.1" - mime-types: "npm:^2.1.35" - moleculer-db: "npm:^0.8.16" - moleculer-schedule: "npm:^0.2.3" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - path-to-regexp: "npm:^6.2.0" - rdf-parse: "npm:^1.7.0" - sharp: "npm:^0.31.2" - sparqljs: "npm:^3.5.2" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/middlewares@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/middlewares@npm:1.0.10" - dependencies: - "@semapps/mime-types": "npm:1.0.10" - busboy: "npm:^0.3.1" - memory-streams: "npm:^0.1.3" - moleculer: "npm:^0.14.18" - checksum: 10c0/f0d72246d0342b79babe76e7eddd041787c5dbc7d5ddb12dcbc3c7e902d84b4b28989f983e79f8dba668cfe673aeea6be4c7f9cf7c527b47ed908098eb7b23bf - languageName: node - linkType: hard - -"@semapps/middlewares@npm:1.1.4, @semapps/middlewares@workspace:packages/middlewares": - version: 0.0.0-use.local - resolution: "@semapps/middlewares@workspace:packages/middlewares" - dependencies: - "@semapps/mime-types": "npm:1.1.4" - busboy: "npm:^0.3.1" - memory-streams: "npm:^0.1.3" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/migration@workspace:packages/migration": - version: 0.0.0-use.local - resolution: "@semapps/migration@workspace:packages/migration" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/mime-types@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/mime-types@npm:1.0.10" - dependencies: - moleculer: "npm:^0.14.18" - negotiator: "npm:^0.6.2" - checksum: 10c0/aefb957dc606d2bc31994f9a0370d43ddeb73d3135f3aadcd2ed629b84aa361b1706cb01ed4c5f7c35aa82831d2834df2632adf811ffdb5693ab44eb55891030 - languageName: node - linkType: hard - -"@semapps/mime-types@npm:1.1.4, @semapps/mime-types@workspace:packages/mime-types": - version: 0.0.0-use.local - resolution: "@semapps/mime-types@workspace:packages/mime-types" - dependencies: - negotiator: "npm:^0.6.2" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/nodeinfo@workspace:packages/nodeinfo": - version: 0.0.0-use.local - resolution: "@semapps/nodeinfo@workspace:packages/nodeinfo" - dependencies: - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/notifications@workspace:packages/notifications": - version: 0.0.0-use.local - resolution: "@semapps/notifications@workspace:packages/notifications" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - cron-parser: "npm:^4.3.0" - expo-server-sdk: "npm:^3.4.0" - moleculer-db: "npm:^0.8.15" - moleculer-mail: "npm:^1.2.5" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/ontologies@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/ontologies@npm:1.0.10" - dependencies: - "@semapps/triplestore": "npm:1.0.10" - moleculer-db: "npm:^0.8.16" - node-fetch: "npm:^2.6.6" - checksum: 10c0/aa6eb56b330f46fdbcd2591925a79723ecfd718e4ae10a22f5e590017d416da9c85b51d83b40e37cbace55a1257c3204965271709d83c871a379bbd98d140c7b - languageName: node - linkType: hard - -"@semapps/ontologies@npm:1.1.4, @semapps/ontologies@workspace:packages/ontologies": - version: 0.0.0-use.local - resolution: "@semapps/ontologies@workspace:packages/ontologies" - dependencies: - "@semapps/triplestore": "npm:1.1.4" - moleculer-db: "npm:^0.8.16" - node-fetch: "npm:^2.6.6" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/solid@workspace:packages/solid": - version: 0.0.0-use.local - resolution: "@semapps/solid@workspace:packages/solid" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - http-link-header: "npm:^1.1.1" - moleculer-bull: "npm:^0.2.5" - moleculer-db: "npm:^0.8.16" - moleculer-web: "npm:^0.10.0-beta1" - moment: "npm:2.30.1" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/sparql-endpoint@npm:1.1.4, @semapps/sparql-endpoint@workspace:packages/sparql-endpoint": - version: 0.0.0-use.local - resolution: "@semapps/sparql-endpoint@workspace:packages/sparql-endpoint" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - moleculer-web: "npm:^0.10.0-beta1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/sync@npm:1.1.4, @semapps/sync@workspace:packages/sync": - version: 0.0.0-use.local - resolution: "@semapps/sync@workspace:packages/sync" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/triplestore@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/triplestore@npm:1.0.10" - dependencies: - "@semapps/middlewares": "npm:1.0.10" - "@semapps/mime-types": "npm:1.0.10" - jsonld: "npm:^3.3.2" - moleculer: "npm:^0.14.29" - negotiator: "npm:^0.6.2" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/c205ea8c85d5a6d9914c3c9f5cafe0f9bc4c3cc3e424b63db2173942fad6c7a5e5082126600ea9a2e7a246d21f5d4b905f82302ec2f042734ea400cd5f00c9f1 - languageName: node - linkType: hard - -"@semapps/triplestore@npm:1.1.4": - version: 1.1.4 - resolution: "@semapps/triplestore@npm:1.1.4" - dependencies: - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - jsonld: "npm:^3.3.2" - moleculer: "npm:^0.14.29" - negotiator: "npm:^0.6.2" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/5e46b023cbd9c7cb2f977fa53da2581770b84cbb498e2de665a8d1eec8a49446ac323d3ee7a66d38ebb68058b11b18cd0e9da5d3b0b88d9037e104bdf20d5014 - languageName: node - linkType: hard - -"@semapps/triplestore@workspace:packages/triplestore": - version: 0.0.0-use.local - resolution: "@semapps/triplestore@workspace:packages/triplestore" - dependencies: - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - jsonld: "npm:^3.3.2" - negotiator: "npm:^0.6.2" - nextgraph: "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/void@npm:1.1.4, @semapps/void@workspace:packages/void": - version: 0.0.0-use.local - resolution: "@semapps/void@workspace:packages/void" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - jsonld-streaming-serializer: "npm:^1.2.0" - n3: "npm:^1.8.0" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webacl@npm:1.1.4, @semapps/webacl@workspace:packages/webacl": - version: 0.0.0-use.local - resolution: "@semapps/webacl@workspace:packages/webacl" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@types/url-join": "npm:^4.0.1" - jsonld-streaming-serializer: "npm:^1.2.0" - n3: "npm:^1.8.0" - rdf-parse: "npm:^1.7.0" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webfinger@npm:1.1.4, @semapps/webfinger@workspace:packages/webfinger": - version: 0.0.0-use.local - resolution: "@semapps/webfinger@workspace:packages/webfinger" - dependencies: - "@semapps/mime-types": "npm:1.1.4" - node-fetch: "npm:^2.6.6" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webhooks@workspace:packages/webhooks": - version: 0.0.0-use.local - resolution: "@semapps/webhooks@workspace:packages/webhooks" - dependencies: - "@semapps/ldp": "npm:1.0.10" - "@semapps/triplestore": "npm:1.0.10" - moleculer-db: "npm:^0.8.15" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webid@npm:1.1.4, @semapps/webid@workspace:packages/webid": - version: 0.0.0-use.local - resolution: "@semapps/webid@workspace:packages/webid" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@sigstore/bundle@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/bundle@npm:2.3.2" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10c0/872a95928236bd9950a2ecc66af1c60a82f6b482a62a20d0f817392d568a60739a2432cad70449ac01e44e9eaf85822d6d9ebc6ade6cb3e79a7d62226622eb5d - languageName: node - linkType: hard - -"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": - version: 1.1.0 - resolution: "@sigstore/core@npm:1.1.0" - checksum: 10c0/3b3420c1bd17de0371e1ac7c8f07a2cbcd24d6b49ace5bbf2b63f559ee08c4a80622a4d1c0ae42f2c9872166e9cb111f33f78bff763d47e5ef1efc62b8e457ea - languageName: node - linkType: hard - -"@sigstore/protobuf-specs@npm:^0.3.2": - version: 0.3.3 - resolution: "@sigstore/protobuf-specs@npm:0.3.3" - checksum: 10c0/e0a68795fa19e437fca2c3993e5a57e989642d65434beda54b29017c1629176cc8abeb81bb1e0923259cdfb19fe1fee6f1b8680a8f8240dc14c7a7de2bbae7af - languageName: node - linkType: hard - -"@sigstore/sign@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/sign@npm:2.3.2" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - make-fetch-happen: "npm:^13.0.1" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - checksum: 10c0/a1e7908f3e4898f04db4d713fa10ddb3ae4f851592c9b554f1269073211e1417528b5088ecee60f27039fde5a5426ae573481d77cfd7e4395d2a0ddfcf5f365f - languageName: node - linkType: hard - -"@sigstore/tuf@npm:^2.3.4": - version: 2.3.4 - resolution: "@sigstore/tuf@npm:2.3.4" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - tuf-js: "npm:^2.2.1" - checksum: 10c0/97839882d787196517933df5505fae4634975807cc7adcd1783c7840c2a9729efb83ada47556ec326d544b9cb0d1851af990dc46eebb5fe7ea17bf7ce1fc0b8c - languageName: node - linkType: hard - -"@sigstore/verify@npm:^1.2.1": - version: 1.2.1 - resolution: "@sigstore/verify@npm:1.2.1" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.1.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10c0/af06580a8d5357c31259da1ac7323137054e0ac41e933278d95a4bc409a4463620125cb4c00b502f6bc32fdd68c2293019391b0d31ed921ee3852a9e84358628 - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.34.0": - version: 0.34.38 - resolution: "@sinclair/typebox@npm:0.34.38" - checksum: 10c0/c1b9a1547c64de01ff5c89351baf289d2d5f19cfef3ae30fe4748a103eb58d0842618318543cd3de964cb0370d5a859e24aba231ade9b43ee2ef4d0bb4db7084 - languageName: node - linkType: hard - -"@sindresorhus/is@npm:^4.0.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.1": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: "npm:4.0.8" - checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^13.0.0": - version: 13.0.5 - resolution: "@sinonjs/fake-timers@npm:13.0.5" - dependencies: - "@sinonjs/commons": "npm:^3.0.1" - checksum: 10c0/a707476efd523d2138ef6bba916c83c4a377a8372ef04fad87499458af9f01afc58f4f245c5fd062793d6d70587309330c6f96947b5bd5697961c18004dc3e26 - languageName: node - linkType: hard - -"@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.6 - resolution: "@szmarczak/http-timer@npm:4.0.6" - dependencies: - defer-to-connect: "npm:^2.0.0" - checksum: 10c0/73946918c025339db68b09abd91fa3001e87fc749c619d2e9c2003a663039d4c3cb89836c98a96598b3d47dec2481284ba85355392644911f5ecd2336536697f - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node10@npm:1.0.11" - checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb - languageName: node - linkType: hard - -"@tufjs/canonical-json@npm:2.0.0": - version: 2.0.0 - resolution: "@tufjs/canonical-json@npm:2.0.0" - checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 - languageName: node - linkType: hard - -"@tufjs/models@npm:2.0.1": - version: 2.0.1 - resolution: "@tufjs/models@npm:2.0.1" - dependencies: - "@tufjs/canonical-json": "npm:2.0.0" - minimatch: "npm:^9.0.4" - checksum: 10c0/ad9e82fd921954501fd90ed34ae062254637595577ad13fdc1e076405c0ea5ee7d8aebad09e63032972fd92b07f1786c15b24a195a171fc8ac470ca8e2ffbcc4 - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:^0.10.0": - version: 0.10.0 - resolution: "@tybys/wasm-util@npm:0.10.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/044feba55c1e2af703aa4946139969badb183ce1a659a75ed60bc195a90e73a3f3fc53bcd643497c9954597763ddb051fec62f80962b2ca6fc716ba897dc696e - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:^0.9.0": - version: 0.9.0 - resolution: "@tybys/wasm-util@npm:0.9.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.20.5": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" - dependencies: - "@babel/types": "npm:^7.0.0" - checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" - dependencies: - "@babel/parser": "npm:^7.1.0" - "@babel/types": "npm:^7.0.0" - checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*": - version: 7.20.6 - resolution: "@types/babel__traverse@npm:7.20.6" - dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 - languageName: node - linkType: hard - -"@types/cacheable-request@npm:^6.0.1": - version: 6.0.3 - resolution: "@types/cacheable-request@npm:6.0.3" - dependencies: - "@types/http-cache-semantics": "npm:*" - "@types/keyv": "npm:^3.1.4" - "@types/node": "npm:*" - "@types/responselike": "npm:^1.0.0" - checksum: 10c0/10816a88e4e5b144d43c1d15a81003f86d649776c7f410c9b5e6579d0ad9d4ca71c541962fb403077388b446e41af7ae38d313e46692144985f006ac5e11fa03 - languageName: node - linkType: hard - -"@types/dotenv-flow@npm:^3.3.3": - version: 3.3.3 - resolution: "@types/dotenv-flow@npm:3.3.3" - checksum: 10c0/a67ecdec769e0e5bf376219ee80a2ffab423d9120dd121b538860d666bf46af07ff336860a7db2b1d41fcdd2dd006fc0ec6fa98f82cd01e566c37b00038b91ec - languageName: node - linkType: hard - -"@types/http-cache-semantics@npm:*": - version: 4.0.4 - resolution: "@types/http-cache-semantics@npm:4.0.4" - checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 - languageName: node - linkType: hard - -"@types/http-link-header@npm:^1.0.1": - version: 1.0.7 - resolution: "@types/http-link-header@npm:1.0.7" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ffde4514a286ee62fab86bd5164958f5c9ad9d8012eaeb4f5536efa6157e6cf9f93121d5a39bf160c3712554d945300a223a9f8b1f3fb08cc70b73f539767338 - languageName: node - linkType: hard - -"@types/ioredis@npm:^4.27.0": - version: 4.28.10 - resolution: "@types/ioredis@npm:4.28.10" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ff680fef6750721c465ee9d6060d3229e49e5b217d68503c4972c4b869b8f84b91cbd9b7d5195a40fb0bff6ab9a4f5e24a2cc17a368ddb0bfe2dfd4eb5fc1872 - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "npm:*" - checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.4": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "npm:*" - checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee - languageName: node - linkType: hard - -"@types/jest@npm:^30.0.0": - version: 30.0.0 - resolution: "@types/jest@npm:30.0.0" - dependencies: - expect: "npm:^30.0.0" - pretty-format: "npm:^30.0.0" - checksum: 10c0/20c6ce574154bc16f8dd6a97afacca4b8c4921a819496a3970382031c509ebe87a1b37b152a1b8475089b82d8ca951a9e95beb4b9bf78fbf579b1536f0b65969 - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.9": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac - languageName: node - linkType: hard - -"@types/jsonld@npm:1.5.15": - version: 1.5.15 - resolution: "@types/jsonld@npm:1.5.15" - checksum: 10c0/d01fbf07c10f4fc53a5b85f28a5691cf7cea4f5f041e0266c5e8d9e4ca94cd410ef427129b2bd930065f675104cbf0a36a7792ba42d3c9b0ec7305c9f01d34c4 - languageName: node - linkType: hard - -"@types/keyv@npm:^3.1.4": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ff8f54fc49621210291f815fe5b15d809fd7d032941b3180743440bd507ecdf08b9e844625fa346af568c84bf34114eb378dcdc3e921a08ba1e2a08d7e3c809c - languageName: node - linkType: hard - -"@types/luxon@npm:~3.6.0": - version: 3.6.2 - resolution: "@types/luxon@npm:3.6.2" - checksum: 10c0/7572ee52b3d3e9dd10464b90561a728b90f34b9a257751cc3ce23762693dd1d14fa98b7f103e2efe2c6f49033331f91de5681ffd65cca88618cefe555be326db - languageName: node - linkType: hard - -"@types/minimatch@npm:^3.0.3": - version: 3.0.5 - resolution: "@types/minimatch@npm:3.0.5" - checksum: 10c0/a1a19ba342d6f39b569510f621ae4bbe972dc9378d15e9a5e47904c440ee60744f5b09225bc73be1c6490e3a9c938eee69eb53debf55ce1f15761201aa965f97 - languageName: node - linkType: hard - -"@types/minimist@npm:^1.2.0": - version: 1.2.5 - resolution: "@types/minimist@npm:1.2.5" - checksum: 10c0/3f791258d8e99a1d7d0ca2bda1ca6ea5a94e5e7b8fc6cde84dd79b0552da6fb68ade750f0e17718f6587783c24254bbca0357648dd59dc3812c150305cabdc46 - languageName: node - linkType: hard - -"@types/n3@npm:^1.4.4": - version: 1.21.1 - resolution: "@types/n3@npm:1.21.1" - dependencies: - "@rdfjs/types": "npm:^1.1.0" - "@types/node": "npm:*" - checksum: 10c0/be0236650cc702207590e5ad37d9ae62a3c74ae74914afed2d929c5eaae7dc4a251f6f44c5f36be317f2e404f02e63ed360ebf041651d5dac3e63867193bf66e - languageName: node - linkType: hard - -"@types/node-fetch@npm:^2.6.13": - version: 2.6.13 - resolution: "@types/node-fetch@npm:2.6.13" - dependencies: - "@types/node": "npm:*" - form-data: "npm:^4.0.4" - checksum: 10c0/6313c89f62c50bd0513a6839cdff0a06727ac5495ccbb2eeda51bb2bbbc4f3c0a76c0393a491b7610af703d3d2deb6cf60e37e59c81ceeca803ffde745dbf309 - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 22.10.7 - resolution: "@types/node@npm:22.10.7" - dependencies: - undici-types: "npm:~6.20.0" - checksum: 10c0/c941b4689dfc4044b64a5f601306cbcb0c7210be853ba378a5dd44137898c45accedd796ee002ad9407024cac7ecaf5049304951cb1d80ce3d7cebbbae56f20e - languageName: node - linkType: hard - -"@types/node@npm:^13.1.0": - version: 13.13.52 - resolution: "@types/node@npm:13.13.52" - checksum: 10c0/9224aaea219fe7f8b903039bb146d4c38b391d0166a8226a1efa2d43a35b5b7dddfe021c32941bb454a1543da94921c112687934da88e2a019f4bd44f9d517b5 - languageName: node - linkType: hard - -"@types/node@npm:^18.0.0": - version: 18.19.71 - resolution: "@types/node@npm:18.19.71" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/9f9b4a1c4e2db2994ef36f165322b3bb807466e3f92751ed52a40af0212917bc6ecd12dc6775eb829176b71b26570bea9c6a0a2d9e3ae6b496721c71934244db - languageName: node - linkType: hard - -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.4 - resolution: "@types/normalize-package-data@npm:2.4.4" - checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 - languageName: node - linkType: hard - -"@types/parse-link-header@npm:^1.0.0": - version: 1.0.1 - resolution: "@types/parse-link-header@npm:1.0.1" - checksum: 10c0/88b38f5a51083e512a9b23ba13a37543867508927544dbfd08b20ba81cafdc678a320db83c360fbff79689af0147dcbd8ad27a429a0d0f4c28145f47c708a637 - languageName: node - linkType: hard - -"@types/readable-stream@npm:^2.3.11": - version: 2.3.15 - resolution: "@types/readable-stream@npm:2.3.15" - dependencies: - "@types/node": "npm:*" - safe-buffer: "npm:~5.1.1" - checksum: 10c0/789e0948a8fd2f2cbf880a0f8c95601ac2fd8782a5a8fe653f68fad7fc3a74f44e8559484e331c1ff5d5b00fa467bec97557bb683aa833a3b29a69506f7aee59 - languageName: node - linkType: hard - -"@types/responselike@npm:^1.0.0": - version: 1.0.3 - resolution: "@types/responselike@npm:1.0.3" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/a58ba341cb9e7d74f71810a88862da7b2a6fa42e2a1fc0ce40498f6ea1d44382f0640117057da779f74c47039f7166bf48fad02dc876f94e005c7afa50f5e129 - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.12": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa - languageName: node - linkType: hard - -"@types/sparqljs@npm:^3.1.2": - version: 3.1.12 - resolution: "@types/sparqljs@npm:3.1.12" - dependencies: - "@rdfjs/types": "npm:>=1.0.0" - checksum: 10c0/832bb888a99d852f194c6fc1a2160992a769b3c4291424b7e22d50b29377692168d2cbd180cc4ed5a30d0cf1effffcfc0fc9155ea6628851c231e3ed1d28b4e2 - languageName: node - linkType: hard - -"@types/stack-utils@npm:^2.0.3": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c - languageName: node - linkType: hard - -"@types/streamify-string@npm:^1.0.4": - version: 1.0.4 - resolution: "@types/streamify-string@npm:1.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/5686610fb3d7b242ff6dd01ca6b9925296b4425c3a94f605bd71eeb5c746991e15131b42a81637f937c3de4f5894f42bb65d18a2f61a6b4ded50d055a9b206e2 - languageName: node - linkType: hard - -"@types/url-join@npm:^4.0.1": - version: 4.0.3 - resolution: "@types/url-join@npm:4.0.3" - checksum: 10c0/7f0f86693070355ce731ec3861d47c03eaae09ab0ea1a72dde6b38a2a17089941acc59bac9ea2472376b6f96e189478da0a7ed29e2d282d1543382e92408d6ca - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.33": - version: 17.0.33 - resolution: "@types/yargs@npm:17.0.33" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^7.1.1": - version: 7.18.0 - resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/type-utils": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.3.1" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - "@typescript-eslint/parser": ^7.0.0 - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^7.5.0": - version: 7.18.0 - resolution: "@typescript-eslint/parser@npm:7.18.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/scope-manager@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/type-utils@npm:7.18.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/types@npm:7.18.0" - checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/utils@npm:7.18.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - peerDependencies: - eslint: ^8.56.0 - checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:^5.10.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.1 - resolution: "@ungap/structured-clone@npm:1.2.1" - checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.3.0": - version: 1.3.0 - resolution: "@ungap/structured-clone@npm:1.3.0" - checksum: 10c0/0fc3097c2540ada1fc340ee56d58d96b5b536a2a0dab6e3ec17d4bfc8c4c86db345f61a375a8185f9da96f01c69678f836a2b57eeaa9e4b8eeafd26428e57b0a - languageName: node - linkType: hard - -"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-android-arm64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-x64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" - dependencies: - "@napi-rs/wasm-runtime": "npm:^0.2.11" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@yarnpkg/lockfile@npm:^1.1.0": - version: 1.1.0 - resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda - languageName: node - linkType: hard - -"@yarnpkg/parsers@npm:3.0.0-rc.46": - version: 3.0.0-rc.46 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.46" - dependencies: - js-yaml: "npm:^3.10.0" - tslib: "npm:^2.4.0" - checksum: 10c0/c7f421c6885142f351459031c093fb2e79abcce6f4a89765a10e600bb7ab122949c54bcea2b23de9572a2b34ba29f822b17831c1c43ba50373ceb8cb5b336667 - languageName: node - linkType: hard - -"@yarnpkg/parsers@npm:3.0.2": - version: 3.0.2 - resolution: "@yarnpkg/parsers@npm:3.0.2" - dependencies: - js-yaml: "npm:^3.10.0" - tslib: "npm:^2.4.0" - checksum: 10c0/a0c340e13129643162423d7e666061c0b39b143bfad3fc5a74c7d92a30fd740f6665d41cd4e61832c20375889d793eea1d1d103cacb39ed68f7acd168add8c53 - languageName: node - linkType: hard - -"@zkochan/js-yaml@npm:0.0.6": - version: 0.0.6 - resolution: "@zkochan/js-yaml@npm:0.0.6" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/5ce27ae75fb1db9657d4065bf6b380b4c0f756feb1bdf42bfde40551a74bcc0ec918f748cbdbd5d95b7107d00bc2f731ee731b5cfe93acb6f7da5639b16aa1f8 - languageName: node - linkType: hard - -"@zkochan/js-yaml@npm:0.0.7": - version: 0.0.7 - resolution: "@zkochan/js-yaml@npm:0.0.7" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/c8b3525717912811f9422ed50e94c5751ed6f771eb1b7e5cde097f14835654931e2bdaecb1e5fc37b51cf8d822410a307f16dd1581d46149398c30215f3f9bac - languageName: node - linkType: hard - -"JSONStream@npm:^1.3.3, JSONStream@npm:^1.3.5": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: "npm:^1.2.0" - through: "npm:>=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 - languageName: node - linkType: hard - -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 - languageName: node - linkType: hard - -"abbrev@npm:^3.0.0": - version: 3.0.1 - resolution: "abbrev@npm:3.0.1" - checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf - languageName: node - linkType: hard - -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: "npm:^5.0.0" - checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": - version: 8.3.4 - resolution: "acorn-walk@npm:8.3.4" - dependencies: - acorn: "npm:^8.11.0" - checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 - languageName: node - linkType: hard - -"acorn@npm:^7.1.1": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 - languageName: node - linkType: hard - -"acorn@npm:^8.11.0, acorn@npm:^8.4.1": - version: 8.15.0 - resolution: "acorn@npm:8.15.0" - bin: - acorn: bin/acorn - checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec - languageName: node - linkType: hard - -"acorn@npm:^8.14.0, acorn@npm:^8.9.0": - version: 8.14.0 - resolution: "acorn@npm:8.14.0" - bin: - acorn: bin/acorn - checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 - languageName: node - linkType: hard - -"add-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "add-stream@npm:1.0.0" - checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc - languageName: node - linkType: hard - -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: "npm:4" - checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.3 - resolution: "agent-base@npm:7.1.3" - checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0, aggregate-error@npm:^3.1.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 - languageName: node - linkType: hard - -"ajv@npm:^6.12.3, ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.1.0 - resolution: "ansi-regex@npm:6.1.0" - checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c - languageName: node - linkType: hard - -"anymatch@npm:^3.1.3": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - -"aproba@npm:2.0.0, aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 - languageName: node - linkType: hard - -"are-docs-informative@npm:^0.0.2": - version: 0.0.2 - resolution: "are-docs-informative@npm:0.0.2" - checksum: 10c0/f0326981bd699c372d268b526b170a28f2e1aec2cf99d7de0686083528427ecdf6ae41fef5d9988e224a5616298af747ad8a76e7306b0a7c97cc085a99636d60 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: "npm:^1.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e - languageName: node - linkType: hard - -"args@npm:^5.0.3": - version: 5.0.3 - resolution: "args@npm:5.0.3" - dependencies: - camelcase: "npm:5.0.0" - chalk: "npm:2.4.2" - leven: "npm:2.1.0" - mri: "npm:1.1.4" - checksum: 10c0/213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "array-buffer-byte-length@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - is-array-buffer: "npm:^3.0.5" - checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d - languageName: node - linkType: hard - -"array-differ@npm:^3.0.0": - version: 3.0.0 - resolution: "array-differ@npm:3.0.0" - checksum: 10c0/c0d924cc2b7e3f5a0e6ae932e8941c5fddc0412bcecf8d5152641910e60f5e1c1e87da2b32083dec2f92f9a8f78e916ea68c22a0579794ba49886951ae783123 - languageName: node - linkType: hard - -"array-ify@npm:^1.0.0": - version: 1.0.0 - resolution: "array-ify@npm:1.0.0" - checksum: 10c0/75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c - languageName: node - linkType: hard - -"array-includes@npm:^3.1.8": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - is-string: "npm:^1.0.7" - checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"array.prototype.findlastindex@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.2": - version: 1.3.3 - resolution: "array.prototype.flat@npm:1.3.3" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": - version: 1.3.3 - resolution: "array.prototype.flatmap@npm:1.3.3" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 - languageName: node - linkType: hard - -"array.prototype.reduce@npm:^1.0.6": - version: 1.0.7 - resolution: "array.prototype.reduce@npm:1.0.7" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-array-method-boxes-properly: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - is-string: "npm:^1.0.7" - checksum: 10c0/97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2 - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.4": - version: 1.0.4 - resolution: "arraybuffer.prototype.slice@npm:1.0.4" - dependencies: - array-buffer-byte-length: "npm:^1.0.1" - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - is-array-buffer: "npm:^3.0.4" - checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 - languageName: node - linkType: hard - -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 10c0/c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab - languageName: node - linkType: hard - -"arrify@npm:^2.0.1": - version: 2.0.1 - resolution: "arrify@npm:2.0.1" - checksum: 10c0/3fb30b5e7c37abea1907a60b28a554d2f0fc088757ca9bf5b684786e583fdf14360721eb12575c1ce6f995282eab936712d3c4389122682eafab0e0b57f78dbb - languageName: node - linkType: hard - -"asap@npm:~2.0.3": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d - languageName: node - linkType: hard - -"asn1@npm:^0.2.6, asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" - dependencies: - safer-buffer: "npm:~2.1.0" - checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 - languageName: node - linkType: hard - -"assert-never@npm:^1.2.1": - version: 1.4.0 - resolution: "assert-never@npm:1.4.0" - checksum: 10c0/494db08b89fb43d6231c9b4c48da22824f1912d88992bf0268e43b3dad0f64bd56d380addbb997d2dea7d859421d5e2904e8bd01243794f2bb5bfbc8d32d1fc6 - languageName: node - linkType: hard - -"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": - version: 1.0.0 - resolution: "assert-plus@npm:1.0.0" - checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 - languageName: node - linkType: hard - -"async@npm:^3.1.0, async@npm:^3.2.3": - version: 3.2.6 - resolution: "async@npm:3.2.6" - checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 - languageName: node - linkType: hard - -"asynciterator@npm:^3.2.0": - version: 3.9.0 - resolution: "asynciterator@npm:3.9.0" - checksum: 10c0/62e4c76ca2f2bbc8f3eae6a685c9b5c8ed82afd969f24cfb9aff1347b50d5e92a7dae61d2a3c24e834f193b303082d855cf688720059d6236cc06650a4fe2c22 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" - dependencies: - possible-typed-array-names: "npm:^1.0.0" - checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 - languageName: node - linkType: hard - -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 - languageName: node - linkType: hard - -"aws4@npm:^1.8.0": - version: 1.13.2 - resolution: "aws4@npm:1.13.2" - checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 - languageName: node - linkType: hard - -"axios@npm:^1.5.1, axios@npm:^1.7.4": - version: 1.7.9 - resolution: "axios@npm:1.7.9" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.0" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/b7a41e24b59fee5f0f26c1fc844b45b17442832eb3a0fb42dd4f1430eb4abc571fe168e67913e8a1d91c993232bd1d1ab03e20e4d1fee8c6147649b576fc1b0b - languageName: node - linkType: hard - -"babel-jest@npm:30.0.5, babel-jest@npm:^30.0.5": - version: 30.0.5 - resolution: "babel-jest@npm:30.0.5" - dependencies: - "@jest/transform": "npm:30.0.5" - "@types/babel__core": "npm:^7.20.5" - babel-plugin-istanbul: "npm:^7.0.0" - babel-preset-jest: "npm:30.0.1" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - slash: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.11.0 - checksum: 10c0/48fcdbf97519216f8897c4d83c0d2a64dffd90e4876b386e4ea4530021aaedbd7253de65a71d554cb57fdeb7bd8509bed43a6c016eb150e49e1fbe1236248f0f - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^7.0.0": - version: 7.0.0 - resolution: "babel-plugin-istanbul@npm:7.0.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@istanbuljs/load-nyc-config": "npm:^1.0.0" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-instrument: "npm:^6.0.2" - test-exclude: "npm:^6.0.0" - checksum: 10c0/79c37bd59ea9bcb16218e874993621e24048776fac7ee72eabe78f0909200851bdb93b32f6eba5b463206f15a1ee7ad40a725af8447952321ae1fdf14e740fe9 - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:30.0.1": - version: 30.0.1 - resolution: "babel-plugin-jest-hoist@npm:30.0.1" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.27.3" - "@types/babel__core": "npm:^7.20.5" - checksum: 10c0/49087f45c8ac359d68c622f4bd471300376b0ca2b6bd6ecaa1bd254ea87eda8fa3ce6144848e3bbabad337d276474a47e2ac3f6272f82e1f2337924ff49a02bd - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.14": - version: 0.4.14 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" - dependencies: - "@babel/compat-data": "npm:^7.27.7" - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.13.0": - version: 0.13.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.6.5": - version: 0.6.5 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d - languageName: node - linkType: hard - -"babel-plugin-transform-import-meta@npm:^2.3.3": - version: 2.3.3 - resolution: "babel-plugin-transform-import-meta@npm:2.3.3" - dependencies: - "@babel/template": "npm:^7.25.9" - tslib: "npm:^2.8.1" - peerDependencies: - "@babel/core": ^7.10.0 - checksum: 10c0/184275ef4f1c14a79e46fa2084e5743fbcfbaa52a9372f713e0e97e45aab4ac5be214c7eb4893fb9ea0088d32913772651776c660bee38bd2c8d52ef92750c07 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-env@npm:1.0.3": - version: 1.0.3 - resolution: "babel-plugin-transform-vite-meta-env@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - checksum: 10c0/fd602e8e9b64b06c93106b295a75f41a89a527d825ac3984baafab428108d3b1a12b6280e0bf19a58bda25e65e839a67f71bf1d916424fc81201dc14de241b64 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-glob@npm:1.1.2": - version: 1.1.2 - resolution: "babel-plugin-transform-vite-meta-glob@npm:1.1.2" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - glob: "npm:^10.3.10" - checksum: 10c0/1c3262dcba1548a3f478c77d9175b9e09c79ce257f0a9d2993d5a3bf74d5857f14825079c5430bc627f6dfca7a91fedcbe042580deab71062ec75f73ad54d7b2 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-hot@npm:1.0.0": - version: 1.0.0 - resolution: "babel-plugin-transform-vite-meta-hot@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - checksum: 10c0/718176522cfbdb6f1dfcd40431c99f89bfafa74bd52c3a96c03e63e06b1797eb599e397e54c0eeebdb2fcdcfe60a63ae66b08775e2c1c52297708e3caedebac6 - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.1.0": - version: 1.2.0 - resolution: "babel-preset-current-node-syntax@npm:1.2.0" - dependencies: - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0 || ^8.0.0-0 - checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 - languageName: node - linkType: hard - -"babel-preset-jest@npm:30.0.1": - version: 30.0.1 - resolution: "babel-preset-jest@npm:30.0.1" - dependencies: - babel-plugin-jest-hoist: "npm:30.0.1" - babel-preset-current-node-syntax: "npm:^1.1.0" - peerDependencies: - "@babel/core": ^7.11.0 - checksum: 10c0/33da0094965929b1742b02e55272b544f189cd487d55bbba60e68d96d62d48f466264fe51f65950454829d4f2271541f2433e1c1c5e6a7ff5b9e91f1303471b7 - languageName: node - linkType: hard - -"babel-preset-vite@npm:^1.1.3": - version: 1.1.3 - resolution: "babel-preset-vite@npm:1.1.3" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - babel-plugin-transform-vite-meta-env: "npm:1.0.3" - babel-plugin-transform-vite-meta-glob: "npm:1.1.2" - babel-plugin-transform-vite-meta-hot: "npm:1.0.0" - checksum: 10c0/380bc48988b5fe94b372eb72ba695410f644d9e4375e6dfc15f313e6d4b9bce2284ec0373e9f481f44a884e4a3820ab63b05dcd532cf78a1772e873431cfc8d6 - languageName: node - linkType: hard - -"babel-walk@npm:3.0.0-canary-5": - version: 3.0.0-canary-5 - resolution: "babel-walk@npm:3.0.0-canary-5" - dependencies: - "@babel/types": "npm:^7.9.6" - checksum: 10c0/17b689874d15c37714cedf6797dd9321dcb998d8e0dda9a8fe8c8bbbf128bbdeb8935cf56e8630d6b67eae76d2a0bc1e470751e082c3b0e30b80d58beafb5e64 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"base-x@npm:^3.0.2": - version: 3.0.10 - resolution: "base-x@npm:3.0.10" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/a13a34b71439ee5381667efa630b3bf640cf17f632c5ba01990483367592e72f247d7fb4f8c6d0e3ff8c0fb7224b3ac682ff5be09b87063a45b3968f0457e563 - languageName: node - linkType: hard - -"base58-universal@npm:^2.0.0": - version: 2.0.0 - resolution: "base58-universal@npm:2.0.0" - checksum: 10c0/f21fd50904e1f2d083832e39269058ffbd95592ad27fc2acc53ad3d9d7eacfa82c4e655181e0fd8a817619f4c925a42baca877276dd73e755d30f52def748ab6 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf - languageName: node - linkType: hard - -"base64url-universal@npm:^1.0.1": - version: 1.1.0 - resolution: "base64url-universal@npm:1.1.0" - dependencies: - base64url: "npm:^3.0.0" - checksum: 10c0/d1408b3062c7a73cca75c6cc47eaefc47089ca20e019f5b6c3ab4641d7a87caec3e8e1fb17165b63380bef924f62f59dc7f257586490d5718c8c352f1dfc98e2 - languageName: node - linkType: hard - -"base64url-universal@npm:^2.0.0": - version: 2.0.0 - resolution: "base64url-universal@npm:2.0.0" - dependencies: - base64url: "npm:^3.0.1" - checksum: 10c0/6143326c1b5011d987d410a7451fcacad33af9282f9e7d06a21e1d4d7ed9d884e6c09a8f0d178f6c9ef3b11f8cda10ece4c84768e43dc9cb4dc47d1b5056de40 - languageName: node - linkType: hard - -"base64url@npm:^3.0.0, base64url@npm:^3.0.1": - version: 3.0.1 - resolution: "base64url@npm:3.0.1" - checksum: 10c0/5ca9d6064e9440a2a45749558dddd2549ca439a305793d4f14a900b7256b5f4438ef1b7a494e1addc66ced5d20f5c010716d353ed267e4b769e6c78074991241 - languageName: node - linkType: hard - -"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": - version: 1.0.2 - resolution: "bcrypt-pbkdf@npm:1.0.2" - dependencies: - tweetnacl: "npm:^0.14.3" - checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 - languageName: node - linkType: hard - -"bcrypt@npm:^5.0.1": - version: 5.1.1 - resolution: "bcrypt@npm:5.1.1" - dependencies: - "@mapbox/node-pre-gyp": "npm:^1.0.11" - node-addon-api: "npm:^5.0.0" - checksum: 10c0/743231158c866bddc46f25eb8e9617fe38bc1a6f5f3052aba35e361d349b7f8fb80e96b45c48a4c23c45c29967ccd11c81cf31166454fc0ab019801c336cab40 - languageName: node - linkType: hard - -"before-after-hook@npm:^2.2.0": - version: 2.2.3 - resolution: "before-after-hook@npm:2.2.3" - checksum: 10c0/0488c4ae12df758ca9d49b3bb27b47fd559677965c52cae7b335784724fb8bf96c42b6e5ba7d7afcbc31facb0e294c3ef717cc41c5bc2f7bd9e76f8b90acd31c - languageName: node - linkType: hard - -"bin-links@npm:^4.0.4": - version: 4.0.4 - resolution: "bin-links@npm:4.0.4" - dependencies: - cmd-shim: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - read-cmd-shim: "npm:^4.0.0" - write-file-atomic: "npm:^5.0.0" - checksum: 10c0/feb664e786429289d189c19c193b28d855c2898bc53b8391306cbad2273b59ccecb91fd31a433020019552c3bad3a1e0eeecca1c12e739a12ce2ca94f7553a17 - languageName: node - linkType: hard - -"bl@npm:^4.0.3, bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: "npm:^5.5.0" - inherits: "npm:^2.0.4" - readable-stream: "npm:^3.4.0" - checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f - languageName: node - linkType: hard - -"bluebird@npm:^3.0.0, bluebird@npm:^3.1.1, bluebird@npm:^3.7.2": - version: 3.7.2 - resolution: "bluebird@npm:3.7.2" - checksum: 10c0/680de03adc54ff925eaa6c7bb9a47a0690e8b5de60f4792604aae8ed618c65e6b63a7893b57ca924beaf53eee69c5af4f8314148c08124c550fe1df1add897d2 - languageName: node - linkType: hard - -"body-parser@npm:^1.19.0": - version: 1.20.3 - resolution: "body-parser@npm:1.20.3" - dependencies: - bytes: "npm:3.1.2" - content-type: "npm:~1.0.5" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - on-finished: "npm:2.4.1" - qs: "npm:6.13.0" - raw-body: "npm:2.5.2" - type-is: "npm:~1.6.18" - unpipe: "npm:1.0.0" - checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 - languageName: node - linkType: hard - -"boolbase@npm:~1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"browserslist@npm:^4.24.0": - version: 4.24.4 - resolution: "browserslist@npm:4.24.4" - dependencies: - caniuse-lite: "npm:^1.0.30001688" - electron-to-chromium: "npm:^1.5.73" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.1" - bin: - browserslist: cli.js - checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 - languageName: node - linkType: hard - -"browserslist@npm:^4.25.1": - version: 4.25.2 - resolution: "browserslist@npm:4.25.2" - dependencies: - caniuse-lite: "npm:^1.0.30001733" - electron-to-chromium: "npm:^1.5.199" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.3" - bin: - browserslist: cli.js - checksum: 10c0/3fd27c6d569125e08b476d0ded78232c756bffeb79f29cfa548961dfd62fa560f8bf60fdb52d496ba276aea0c843968dd38ed4138a724277715be3b41dac8861 - languageName: node - linkType: hard - -"bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: "npm:^3.0.2" - checksum: 10c0/613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: "npm:^0.4.0" - checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 - languageName: node - linkType: hard - -"buffer-equal-constant-time@npm:1.0.1": - version: 1.0.1 - resolution: "buffer-equal-constant-time@npm:1.0.1" - checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 - languageName: node - linkType: hard - -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.1.13" - checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e - languageName: node - linkType: hard - -"buffer@npm:^6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.2.1" - checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 - languageName: node - linkType: hard - -"buildcheck@npm:~0.0.6": - version: 0.0.6 - resolution: "buildcheck@npm:0.0.6" - checksum: 10c0/8cbdb89f41bc484b8325f4828db4135b206a0dffb641eb6cdb2b7022483c45dd0e5aac6d820c9a67bdd2caab3a02c76d7ceec7bd9ec494b5a2270d2806b01a76 - languageName: node - linkType: hard - -"bull@npm:^3.15.0": - version: 3.29.3 - resolution: "bull@npm:3.29.3" - dependencies: - cron-parser: "npm:^2.13.0" - debuglog: "npm:^1.0.0" - get-port: "npm:^5.1.1" - ioredis: "npm:^4.27.0" - lodash: "npm:^4.17.21" - p-timeout: "npm:^3.2.0" - promise.prototype.finally: "npm:^3.1.2" - semver: "npm:^7.3.2" - util.promisify: "npm:^1.0.1" - uuid: "npm:^8.3.0" - checksum: 10c0/6860a17a2abc45bfa887c8fed0f666da2291d382dea3b5be581b82ba992e6edc487d55b5cf2e668f29e7123930958d2bdefae5a2bb003414767d4f209ebc2b4f - languageName: node - linkType: hard - -"busboy@npm:^0.3.1": - version: 0.3.1 - resolution: "busboy@npm:0.3.1" - dependencies: - dicer: "npm:0.3.0" - checksum: 10c0/15b3382816f657302956ba68e48342891b4f36ae1164f1ad47d96302dd2cda634672513d03c7e5dde0dc90e2889becf3fa32f9b3b391d0f8ab4a5a675b5b5581 - languageName: node - linkType: hard - -"byte-size@npm:8.1.1": - version: 8.1.1 - resolution: "byte-size@npm:8.1.1" - checksum: 10c0/83170a16820fde48ebaef93bf6b2e86c5f72041f76e44eba1f3c738cceb699aeadf11088198944d5d7c6f970b465ab1e3dddc2e60bfb49a74374f3447a8db5b9 - languageName: node - linkType: hard - -"bytes@npm:3.1.2, bytes@npm:^3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e - languageName: node - linkType: hard - -"cacache@npm:^18.0.0, cacache@npm:^18.0.3": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" - dependencies: - "@npmcli/fs": "npm:^3.1.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f - languageName: node - linkType: hard - -"cacache@npm:^19.0.1": - version: 19.0.1 - resolution: "cacache@npm:19.0.1" - dependencies: - "@npmcli/fs": "npm:^4.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" - unique-filename: "npm:^4.0.0" - checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c - languageName: node - linkType: hard - -"cacheable-lookup@npm:^5.0.3": - version: 5.0.4 - resolution: "cacheable-lookup@npm:5.0.4" - checksum: 10c0/a6547fb4954b318aa831cbdd2f7b376824bc784fb1fa67610e4147099e3074726072d9af89f12efb69121415a0e1f2918a8ddd4aafcbcf4e91fbeef4a59cd42c - languageName: node - linkType: hard - -"cacheable-request@npm:^7.0.2": - version: 7.0.4 - resolution: "cacheable-request@npm:7.0.4" - dependencies: - clone-response: "npm:^1.0.2" - get-stream: "npm:^5.1.0" - http-cache-semantics: "npm:^4.0.0" - keyv: "npm:^4.0.0" - lowercase-keys: "npm:^2.0.0" - normalize-url: "npm:^6.0.1" - responselike: "npm:^2.0.0" - checksum: 10c0/0834a7d17ae71a177bc34eab06de112a43f9b5ad05ebe929bec983d890a7d9f2bc5f1aa8bb67ea2b65e07a3bc74bea35fa62dd36dbac52876afe36fdcf83da41 - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": - version: 1.0.8 - resolution: "call-bind@npm:1.0.8" - dependencies: - call-bind-apply-helpers: "npm:^1.0.0" - es-define-property: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.2" - checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - get-intrinsic: "npm:^1.3.0" - checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0, callsites@npm:^3.1.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"camelcase-keys@npm:^6.2.2": - version: 6.2.2 - resolution: "camelcase-keys@npm:6.2.2" - dependencies: - camelcase: "npm:^5.3.1" - map-obj: "npm:^4.0.0" - quick-lru: "npm:^4.0.1" - checksum: 10c0/bf1a28348c0f285c6c6f68fb98a9d088d3c0269fed0cdff3ea680d5a42df8a067b4de374e7a33e619eb9d5266a448fe66c2dd1f8e0c9209ebc348632882a3526 - languageName: node - linkType: hard - -"camelcase@npm:5.0.0": - version: 5.0.0 - resolution: "camelcase@npm:5.0.0" - checksum: 10c0/515f1ce911d65949708d9e179f1a40af71eb7de668230a0c85961a35590f7da39af79cfb48d834883dbcc7995bdb7dd6bae8027b101e37a10d95337ec8732800 - languageName: node - linkType: hard - -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"camelcase@npm:^6.3.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001688": - version: 1.0.30001695 - resolution: "caniuse-lite@npm:1.0.30001695" - checksum: 10c0/acf90a767051fdd8083711b3ff9f07a28149c55e394115d8f874f149aa4f130e6bc50cea1dd94fe03035b9ebbe13b64f446518a6d2e19f72650962bdff44b2c5 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001733": - version: 1.0.30001734 - resolution: "caniuse-lite@npm:1.0.30001734" - checksum: 10c0/5869cb6a01e7a012a8c5d7b0482e2c910be3a2a469d4ef516a54db3f846fbaedb2600eeaa270dae9e2ad9328e33f39782e6f459405fcca620021f5f06694542d - languageName: node - linkType: hard - -"canonicalize@npm:^1.0.1": - version: 1.0.8 - resolution: "canonicalize@npm:1.0.8" - checksum: 10c0/6fafcfa73855a49c86eed26d2f23734713a542a3107a23a6ab16fb22b6cee6bb2d92ad32b2244d52594bd69bc08bec820413911cd566dcc5399048012ce26a83 - languageName: node - linkType: hard +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== + +"@babel/core@^7.23.9", "@babel/core@^7.27.4", "@babel/core@^7.28.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.27.5", "@babel/generator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== + dependencies: + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" + integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.5" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" + lodash.debounce "^4.0.8" + resolve "^1.22.10" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== + dependencies: + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helper-wrap-function@^7.27.1": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" + integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== + dependencies: + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" + +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== + dependencies: + "@babel/types" "^7.28.5" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz#373f6e2de0016f73caf8f27004f61d167743742a" + integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" + +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-block-scoping@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz#e0d3af63bd8c80de2e567e690a54e84d85eb16f6" + integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-static-block@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852" + integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-classes@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" + integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.4" + +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" + +"@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" + +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + +"@babel/plugin-transform-exponentiation-operator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz#7cc90a8170e83532676cfa505278e147056e94fe" + integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== + dependencies: + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-logical-assignment-operators@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz#d028fd6db8c081dee4abebc812c2325e24a85b0e" + integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-systemjs@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2" + integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== + dependencies: + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.5" + +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-object-rest-spread@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" + integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.4" + +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26" + integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regenerator@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" + integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-runtime@^7.28.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17" + integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typescript@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz#441c5f9a4a1315039516c6c612fc66d5f4594e72" + integrity sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/preset-env@^7.28.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" + integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== + dependencies: + "@babel/compat-data" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.5" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.4" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.28.5" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.28.5" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.4" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.28.5" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.4" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.27.1": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c" + integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.28.5" + +"@babel/runtime@^7.13.9": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== + +"@babel/template@^7.25.9", "@babel/template@^7.27.1", "@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.5" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.4.4", "@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@comunica/actor-abstract-mediatyped@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.22.0.tgz#e61a4dad537096a84a9684bf7cd6ec1b8fda2368" + integrity sha512-+KQLPpx8GFqrhWFfuvrsA4Rjlfbo/QOIo2IvzSgmDwy6YVQZXaSQiNQv/BnrnedaFCf2ONV+w+PMLqXgzn8N9A== + +"@comunica/actor-http-native@~1.22.0": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@comunica/actor-http-native/-/actor-http-native-1.22.1.tgz#60671bc654d6e63c4775f9dd678fd3c67fbfc214" + integrity sha512-BdB+hvQ9CJF9tI42hNhcvTMagOty+jw21LIQDJWI628xMcXZ88BJaUX0Ulc7g2nrWH97ZRm5+KjLC4Zf+OGwZg== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@types/parse-link-header" "^1.0.0" + cross-fetch "^3.0.5" + follow-redirects "^1.5.1" + parse-link-header "^1.0.1" + +"@comunica/actor-rdf-parse-html-microdata@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.22.0.tgz#a4476bc1430e7e367f5b733eeb71eea3ca26e041" + integrity sha512-OdB3Z7ZCtVAcsVU2Vs0ytGbiz0eYkeBwVA3k0vGVhSN3ygng5Thj+t8jxG6QWHlLvaIXfJFh0x57qY5tXkr8uQ== + dependencies: + microdata-rdf-streaming-parser "^1.2.0" + +"@comunica/actor-rdf-parse-html-rdfa@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.22.0.tgz#d7ea6b5e0cb27321990b387348ecb2131ffcfefa" + integrity sha512-yVjYLpm9rbpPiqU1OE4Yioyk/YHtO6ywVMbdOPUNLeOwrtWou8vKX0Xh4UUR24Qrt8nuhE+p0kCJiZZtM1PmSQ== + dependencies: + rdfa-streaming-parser "^1.5.0" + +"@comunica/actor-rdf-parse-html-script@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.22.0.tgz#8bbaabd28c05b6fb6d400c8858ef8e1647fcade1" + integrity sha512-gQSY56wkS/uftRyjQf+/dQFRpA/jZ6z2o2RgGbQc2avgKTkhaiTtPxpfO1oarLskm1sPlQOFo24ZwqUSqjOwcA== + dependencies: + "@comunica/bus-rdf-parse-html" "^1.22.0" + "@rdfjs/types" "*" + relative-to-absolute-iri "^1.0.5" + +"@comunica/actor-rdf-parse-html@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.22.0.tgz#b217e491f77ee4853190c2ab0613c3cf46dbd71e" + integrity sha512-U9pznSpQ1POSH+ekOke3lYKO0fsUbNdv1g1nfuWz/MV3xMCF/d2f3CVBjXRSx9qwyb/2zUrOjBCJRrYkfZ6geQ== + dependencies: + "@comunica/bus-rdf-parse-html" "^1.22.0" + "@rdfjs/types" "*" + htmlparser2 "^7.0.0" + +"@comunica/actor-rdf-parse-jsonld@^1.22.0": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.22.1.tgz#7f071607fe42dd2c5668ce6d744c5fd976ef889d" + integrity sha512-MFFhJ6eGyO40Be80zsFKAbRjkPXr80PvCqvVKsEstdv3u9C6GFV3nqZpCwvsVCz22IPQhW+rzb8ZyasmgHnurA== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@rdfjs/types" "*" + jsonld-context-parser "^2.1.2" + jsonld-streaming-parser "^2.4.0" + stream-to-string "^1.2.0" + +"@comunica/actor-rdf-parse-n3@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.22.0.tgz#c027a84980e2891e5696cd16ac6c01b0c9d62496" + integrity sha512-qHrGfh5k/pZa4imy7m9gJ1kt9aW1uxXqLDKnLKvR2l0m09YiEx/YOYWr1Wtu1YtH/Yyc13OX4mo/OwaE5PfrHQ== + dependencies: + "@types/n3" "^1.4.4" + n3 "^1.6.3" + +"@comunica/actor-rdf-parse-rdfxml@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.22.0.tgz#ea7260db32d409d6568a2e3422fbe7eb0ff10512" + integrity sha512-k47WEAZ6qKEhf1eBZZeI5aVywlrUUKP3BKHw2zKJUjuWq5k+w/rp2WALCyt0Owtb37UlJbET3fTlUhXKvT+2aw== + dependencies: + rdfxml-streaming-parser "^1.5.0" + +"@comunica/actor-rdf-parse-xml-rdfa@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.22.0.tgz#6bf1248e057b7137060db16438da8ab13282ffbc" + integrity sha512-y315YcZTz7AizKf8Jl022IocAJIh3OHSlzNrRNH3zB7i/ch+WHj1VL9pjIf6y77PD4BR75EdeoQCPafpm5Gsbg== + dependencies: + rdfa-streaming-parser "^1.5.0" + +"@comunica/bus-http@~1.22.0": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@comunica/bus-http/-/bus-http-1.22.1.tgz#0ac597826a9aa4e5b230edc62250e6bc445fc46a" + integrity sha512-CZ0NDWZH0k0FOshuRQJzYr3Z+2ZM1vqr9ZepONuaoYDwyKaxl29xPs3hNfjSy6YawjEQP+elr/WDc3TxKIpu8g== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@types/readable-stream" "^2.3.11" + is-stream "^2.0.0" + readable-web-to-node-stream "^3.0.2" + web-streams-node "^0.4.0" + +"@comunica/bus-init@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-init/-/bus-init-1.22.0.tgz#b75976f6e59ad66eb6e7f45dd5257f9486b852dc" + integrity sha512-NIfEJLI8EYFdTWJB0PV/lxPagStPl+gUj3LtOnovcF1ZhC5rgcJSC/tq1r04n0TziY2KVangnLDsF4752LjD6g== + +"@comunica/bus-rdf-parse-html@^1.22.0", "@comunica/bus-rdf-parse-html@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.22.0.tgz#6854946ca7bfecd1f962bf8535b8b112ced93420" + integrity sha512-zqdLdF5qvru1vnzN4t9eXpJhi6khKm1ZWhUovBB9pfYnnyGRCQCPlFpcgJPrD8JfKd6nTvhgdLB5QcAbBb1I0A== + dependencies: + "@rdfjs/types" "*" + +"@comunica/bus-rdf-parse@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.22.0.tgz#e94d93b3d941017f20bb3786fb0f7edbe047934e" + integrity sha512-ohZGlabX5K+dEmn+v4BzP+IZVyRc1ovWItHDLznnRqsHQr8W19WPG21lEFh5kk2MK4YnyQWmlUax1Yxrg7cbXg== + dependencies: + "@comunica/actor-abstract-mediatyped" "^1.22.0" + "@rdfjs/types" "*" + +"@comunica/context-entries@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/context-entries/-/context-entries-1.22.0.tgz#31e61298cf93289449ee67197789baa27b89c591" + integrity sha512-HOYr1HdhgavxABpw8saZa9pueLAeGVVd/6cZ3FWcYnH3CvfQu6Ima06Gd00QdIAiGjQm01qQcWCxp0xURiqLKg== + +"@comunica/core@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/core/-/core-1.22.0.tgz#b60bde5e202a48bfb577a237a4ae6d756166477a" + integrity sha512-tgozygRFTd6t6l0YyvfVUWNC+KXWiTlBclkxtzFioQsplKvUSvg1TPjopRk8hhAvMaNRGMNBK2ZafNaqNTkI4w== + dependencies: + "@comunica/context-entries" "^1.22.0" + "@comunica/types" "^1.22.0" + immutable "^3.8.2" + +"@comunica/mediator-combine-union@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-combine-union/-/mediator-combine-union-1.22.0.tgz#665ca2f5d31bf4805259b93fede7ccbf8810e3a3" + integrity sha512-iUHmEGgWVmk02e80uB7w8xZ5vgTLpiqzrImvbokolJzWcVbobVCUkq8DUxzz3FJbNVRGipZUFrOqkRPAuAX6FA== + +"@comunica/mediator-number@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-number/-/mediator-number-1.22.0.tgz#81c4b5526663f0ab266662370d6232517d6cb253" + integrity sha512-KDPlJEvj0Lu+JygGXjnH8pf33k01lJ+wgzUlWK216jZJ1Px2lTlfc/COhSqi/e0y+k4ZSBcxx0gnjt2awMpbrQ== + +"@comunica/mediator-race@~1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-race/-/mediator-race-1.22.0.tgz#ffe852edb3e163817f4d12ebadd4464561cbdb40" + integrity sha512-hIMaHyf9M4jOS0199OURSVgWFmzkyF2K2keuAb+iHoCH3UUcUnWjPOL1TrdkxvaUnrxmsBWR9SXbnqgMnhIsiQ== + +"@comunica/types@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@comunica/types/-/types-1.22.0.tgz#ba984437d80d37c52636049325a1a16f6368a142" + integrity sha512-ZQ8p+ZvMAKmdq6Hz2QwqIQ2JScwRMotiWz0iSw2zYHsYQOhVmLg7HSMzMHpWNEA5UWzO/A5A+Co/ONXMhlnx3g== + dependencies: + "@rdfjs/types" "*" + asynciterator "^3.2.0" + immutable "^3.8.2" + sparqlalgebrajs "^3.0.1" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@digitalbazaar/credentials-context@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/credentials-context/-/credentials-context-3.2.0.tgz#c5efa74744c25be8d3a7d26b1d4d2fd349b19ae8" + integrity sha512-WruXZAF182pCYq/z2JPJ4N4mVDu6pd/hr7widdCqbKekA53BXHoX7XhL9tmRmQ8kfmkaStBfla67QHhkchWYBQ== + +"@digitalbazaar/data-integrity@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz#3fe9eee7bbe750da8977866c8f8ded16bf7d4ce2" + integrity sha512-ohIieLfgtPQU9BYfj0eKNiz55/ZDOk5YSE9FN/Hn0eXzI8WQzLkzRvC8pvBnzuzXDgCsjPdSqYvzok5PoClMBQ== + dependencies: + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + jsonld-signatures "^11.3.0" + +"@digitalbazaar/ed25519-multikey@^1.0.0", "@digitalbazaar/ed25519-multikey@^1.1.0", "@digitalbazaar/ed25519-multikey@^1.3.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-multikey/-/ed25519-multikey-1.3.1.tgz#905620b8809d39cbab8af880c05059dbcbb05509" + integrity sha512-55qIbOaAyswVCFfZ70ap7SN2bDSwYmcVbUtGCrpVF/CjuJ8IPqf6z8fDPJzB+CE7Q896SaZlcDukz4LOwIRCPA== + dependencies: + "@noble/ed25519" "^1.6.0" + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + +"@digitalbazaar/ed25519-signature-2020@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-signature-2020/-/ed25519-signature-2020-5.4.0.tgz#a5dc3d357299c5c94463688d5c157cfc21d8d9fc" + integrity sha512-dHjOv41wiKLoPaE1S9g4NCMKNnelYtBa5fCJKwrqo+cPlLuKcEhtD7w/uuc5non7bf/GX5sa5YfDI/sRUOS6iw== + dependencies: + "@digitalbazaar/ed25519-multikey" "^1.1.0" + "@digitalbazaar/ed25519-verification-key-2020" "^4.1.0" + base58-universal "^2.0.0" + ed25519-signature-2020-context "^1.1.0" + jsonld-signatures "^11.3.0" + +"@digitalbazaar/ed25519-verification-key-2020@^4.1.0", "@digitalbazaar/ed25519-verification-key-2020@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.2.0.tgz#4a394c7c137ead8edf415c83bbd3c40b73c95b49" + integrity sha512-urEVTYkt+uYD8GjdoS6gkm2sKBich1hqx42b6vvUOmNgF0agZ95JlUjiJXEx+VOwu7WSjJSnEBph2Qatkrk1CA== + dependencies: + "@noble/ed25519" "^1.6.0" + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + crypto-ld "^7.0.0" + +"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/-/eddsa-rdfc-2022-cryptosuite-1.2.0.tgz#9c282d5f558ecce4d336e9947b06d45c58615cc9" + integrity sha512-a3PyICe1SI55SgHXgtPRYpzmZ2FMtloQDkVcbhUZ9dpoLcZg5TqsS4U7ap2ggCD4MUXz7uz6ErikJf76Iwyd0g== + dependencies: + "@digitalbazaar/ed25519-multikey" "^1.0.0" + jsonld "^8.1.0" + rdf-canonize "^4.0.1" + +"@digitalbazaar/http-client@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@digitalbazaar/http-client/-/http-client-3.4.1.tgz#5116fc44290d647cfe4b615d1f3fad9d6005e44d" + integrity sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g== + dependencies: + ky "^0.33.3" + ky-universal "^0.11.0" + undici "^5.21.2" + +"@digitalbazaar/security-context@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@digitalbazaar/security-context/-/security-context-1.0.1.tgz#badc4b8da03411a32d4e7321ce7c4b355776b410" + integrity sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA== + +"@digitalbazaar/vc@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@digitalbazaar/vc/-/vc-7.2.0.tgz#68b8597f8ac7e709b76be8343963943129f0c125" + integrity sha512-Fpa7MG+/pxwV0vJbstKJc1DLrVzFYz7mlqZfRMkFOodR0YvVp3GGdiybCKtj7oxv/cuskzuqB/MFmDhq8tEd9g== + dependencies: + "@digitalbazaar/credentials-context" "^3.2.0" + ed25519-signature-2018-context "^1.1.0" + jsonld "^8.3.3" + jsonld-signatures "^11.5.0" + +"@emnapi/core@^1.1.0", "@emnapi/core@^1.4.3": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.8.1.tgz#fd9efe721a616288345ffee17a1f26ac5dd01349" + integrity sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg== + dependencies: + "@emnapi/wasi-threads" "1.1.0" + tslib "^2.4.0" + +"@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.3": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.8.1.tgz#550fa7e3c0d49c5fb175a116e8cd70614f9a22a5" + integrity sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" + integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== + dependencies: + tslib "^2.4.0" + +"@es-joy/jsdoccomment@~0.46.0": + version "0.46.0" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz#47a2ee4bfc0081f252e058272dfab680aaed464d" + integrity sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ== + dependencies: + comment-parser "1.4.1" + esquery "^1.6.0" + jsdoc-type-pratt-parser "~4.0.0" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@fastify/busboy@^1.0.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.2.1.tgz#9c6db24a55f8b803b5222753b24fe3aea2ba9ca3" + integrity sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q== + dependencies: + text-decoding "^1.0.0" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@inquirer/external-editor@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== + dependencies: + chardet "^2.1.1" + iconv-lite "^0.7.0" + +"@ioredis/commands@^1.0.2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.5.0.tgz#3dddcea446a4b1dc177d0743a1e07ff50691652a" + integrity sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-30.2.0.tgz#c52fcd5b58fdd2e8eb66b2fd8ae56f2f64d05b28" + integrity sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ== + dependencies: + "@jest/types" "30.2.0" + "@types/node" "*" + chalk "^4.1.2" + jest-message-util "30.2.0" + jest-util "30.2.0" + slash "^3.0.0" + +"@jest/core@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-30.2.0.tgz#813d59faa5abd5510964a8b3a7b17cc77b775275" + integrity sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ== + dependencies: + "@jest/console" "30.2.0" + "@jest/pattern" "30.0.1" + "@jest/reporters" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + ci-info "^4.2.0" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-changed-files "30.2.0" + jest-config "30.2.0" + jest-haste-map "30.2.0" + jest-message-util "30.2.0" + jest-regex-util "30.0.1" + jest-resolve "30.2.0" + jest-resolve-dependencies "30.2.0" + jest-runner "30.2.0" + jest-runtime "30.2.0" + jest-snapshot "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" + jest-watcher "30.2.0" + micromatch "^4.0.8" + pretty-format "30.2.0" + slash "^3.0.0" + +"@jest/diff-sequences@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz#0ededeae4d071f5c8ffe3678d15f3a1be09156be" + integrity sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw== + +"@jest/environment@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-30.2.0.tgz#1e673cdb8b93ded707cf6631b8353011460831fa" + integrity sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g== + dependencies: + "@jest/fake-timers" "30.2.0" + "@jest/types" "30.2.0" + "@types/node" "*" + jest-mock "30.2.0" + +"@jest/expect-utils@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-30.2.0.tgz#4f95413d4748454fdb17404bf1141827d15e6011" + integrity sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA== + dependencies: + "@jest/get-type" "30.1.0" + +"@jest/expect@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-30.2.0.tgz#9a5968499bb8add2bbb09136f69f7df5ddbf3185" + integrity sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA== + dependencies: + expect "30.2.0" + jest-snapshot "30.2.0" + +"@jest/fake-timers@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-30.2.0.tgz#0941ddc28a339b9819542495b5408622dc9e94ec" + integrity sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw== + dependencies: + "@jest/types" "30.2.0" + "@sinonjs/fake-timers" "^13.0.0" + "@types/node" "*" + jest-message-util "30.2.0" + jest-mock "30.2.0" + jest-util "30.2.0" + +"@jest/get-type@30.1.0": + version "30.1.0" + resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc" + integrity sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA== + +"@jest/globals@30.2.0", "@jest/globals@^30.0.5": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-30.2.0.tgz#2f4b696d5862664b89c4ee2e49ae24d2bb7e0988" + integrity sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw== + dependencies: + "@jest/environment" "30.2.0" + "@jest/expect" "30.2.0" + "@jest/types" "30.2.0" + jest-mock "30.2.0" + +"@jest/pattern@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.0.1.tgz#d5304147f49a052900b4b853dedb111d080e199f" + integrity sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA== + dependencies: + "@types/node" "*" + jest-regex-util "30.0.1" + +"@jest/reporters@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-30.2.0.tgz#a36b28fcbaf0c4595250b108e6f20e363348fd91" + integrity sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" + "@jridgewell/trace-mapping" "^0.3.25" + "@types/node" "*" + chalk "^4.1.2" + collect-v8-coverage "^1.0.2" + exit-x "^0.2.2" + glob "^10.3.10" + graceful-fs "^4.2.11" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^5.0.0" + istanbul-reports "^3.1.3" + jest-message-util "30.2.0" + jest-util "30.2.0" + jest-worker "30.2.0" + slash "^3.0.0" + string-length "^4.0.2" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@30.0.5": + version "30.0.5" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.5.tgz#7bdf69fc5a368a5abdb49fd91036c55225846473" + integrity sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA== + dependencies: + "@sinclair/typebox" "^0.34.0" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/snapshot-utils@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz#387858eb90c2f98f67bff327435a532ac5309fbe" + integrity sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug== + dependencies: + "@jest/types" "30.2.0" + chalk "^4.1.2" + graceful-fs "^4.2.11" + natural-compare "^1.4.0" + +"@jest/source-map@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-30.0.1.tgz#305ebec50468f13e658b3d5c26f85107a5620aaa" + integrity sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + callsites "^3.1.0" + graceful-fs "^4.2.11" + +"@jest/test-result@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-30.2.0.tgz#9c0124377fb7996cdffb86eda3dbc56eacab363d" + integrity sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg== + dependencies: + "@jest/console" "30.2.0" + "@jest/types" "30.2.0" + "@types/istanbul-lib-coverage" "^2.0.6" + collect-v8-coverage "^1.0.2" + +"@jest/test-sequencer@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz#bf0066bc72e176d58f5dfa7f212b6e7eee44f221" + integrity sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q== + dependencies: + "@jest/test-result" "30.2.0" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" + slash "^3.0.0" + +"@jest/transform@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-30.2.0.tgz#54bef1a4510dcbd58d5d4de4fe2980a63077ef2a" + integrity sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA== + dependencies: + "@babel/core" "^7.27.4" + "@jest/types" "30.2.0" + "@jridgewell/trace-mapping" "^0.3.25" + babel-plugin-istanbul "^7.0.1" + chalk "^4.1.2" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" + jest-regex-util "30.0.1" + jest-util "30.2.0" + micromatch "^4.0.8" + pirates "^4.0.7" + slash "^3.0.0" + write-file-atomic "^5.0.1" + +"@jest/types@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.2.0.tgz#1c678a7924b8f59eafd4c77d56b6d0ba976d62b8" + integrity sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg== + dependencies: + "@jest/pattern" "30.0.1" + "@jest/schemas" "30.0.5" + "@types/istanbul-lib-coverage" "^2.0.6" + "@types/istanbul-reports" "^3.0.4" + "@types/node" "*" + "@types/yargs" "^17.0.33" + chalk "^4.1.2" + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@lerna/create@8.2.4": + version "8.2.4" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.2.4.tgz#59a050f58681e9236db38cc5bcc6986ae79d1389" + integrity sha512-A8AlzetnS2WIuhijdAzKUyFpR5YbLLfV3luQ4lzBgIBgRfuoBDZeF+RSZPhra+7A6/zTUlrbhKZIOi/MNhqgvQ== + dependencies: + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + execa "5.0.0" + fs-extra "^11.2.0" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "6.0.3" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-reduce "^2.1.0" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.4" + set-blocking "^2.0.0" + signal-exit "3.0.7" + slash "^3.0.0" + ssri "^10.0.6" + string-width "^4.2.3" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" + +"@mapbox/node-pre-gyp@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@napi-rs/wasm-runtime@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz#d27788176f250d86e498081e3c5ff48a17606918" + integrity sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== + dependencies: + "@emnapi/core" "^1.1.0" + "@emnapi/runtime" "^1.1.0" + "@tybys/wasm-util" "^0.9.0" + +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2" + integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.10.0" + +"@noble/ed25519@^1.6.0": + version "1.7.5" + resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.5.tgz#94df8bdb9fec9c4644a56007eecb57b0e9fbd0d7" + integrity sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + +"@npmcli/agent@^2.0.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" + integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/arborist@7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" + integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.1" + "@npmcli/installed-package-contents" "^2.1.0" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^7.1.1" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.1.0" + "@npmcli/query" "^3.1.0" + "@npmcli/redact" "^2.0.0" + "@npmcli/run-script" "^8.1.0" + bin-links "^4.0.4" + cacache "^18.0.3" + common-ancestor-path "^1.0.1" + hosted-git-info "^7.0.2" + json-parse-even-better-errors "^3.0.2" + json-stringify-nice "^1.1.4" + lru-cache "^10.2.2" + minimatch "^9.0.4" + nopt "^7.2.1" + npm-install-checks "^6.2.0" + npm-package-arg "^11.0.2" + npm-pick-manifest "^9.0.1" + npm-registry-fetch "^17.0.1" + pacote "^18.0.6" + parse-conflict-json "^3.0.0" + proc-log "^4.2.0" + proggy "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^3.0.1" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.6" + treeverse "^3.0.0" + walk-up-path "^3.0.1" + +"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" + integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^5.0.0": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" + integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== + dependencies: + "@npmcli/promise-spawn" "^7.0.0" + ini "^4.1.3" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" + proc-log "^4.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^4.0.0" + +"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" + integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/map-workspaces@^3.0.2": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" + integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== + dependencies: + "@npmcli/name-from-folder" "^2.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + read-package-json-fast "^3.0.0" + +"@npmcli/metavuln-calculator@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf" + integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g== + dependencies: + cacache "^18.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^18.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + +"@npmcli/name-from-folder@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/package-json@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" + integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" + +"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" + integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" + +"@npmcli/promise-spawn@^7.0.0": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" + integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== + dependencies: + which "^4.0.0" + +"@npmcli/query@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" + integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== + dependencies: + postcss-selector-parser "^6.0.10" + +"@npmcli/redact@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" + integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== + +"@npmcli/run-script@8.1.0", "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" + integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" + proc-log "^4.0.0" + which "^4.0.0" + +"@nrwl/tao@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-17.2.5.tgz#48b941569f83a1669023aeecaaf64f0ea09b5aec" + integrity sha512-hA89BirzFb2MBm26ZPTTJ/RWRjmZ9R39J8321kVEldehStluA4E5zobNd7MJVp77fBK/CCTlIhFeUEP9qmxhZA== + dependencies: + nx v17.2.5 + tslib "^2.3.0" + +"@nx/devkit@>=17.1.2 < 21": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-20.8.3.tgz#5f94f7787102345943df5fec4b21e88debbec9e7" + integrity sha512-5lbfJ6ICFOiGeirldQOU5fQ/W/VQ8L3dfWnmHG4UgpWSLoK/YFdRf4lTB4rS0aDXsBL0gyWABz3sZGLPGNYnPA== + dependencies: + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + minimatch "9.0.3" + semver "^7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@nx/nx-darwin-arm64@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.3.tgz#d220fa2d3a34d6647835a2a0a39d2373417d24b4" + integrity sha512-BeYnPAcnaerg6q+qR0bAb0nebwwrsvm4STSVqqVlaqLmmQpU3Bfpx44CEa5d6T9b0V11ZqVE/bkmRhMqhUcrhw== + +"@nx/nx-darwin-arm64@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.5.tgz#411b861cb0a98540082b7639dbaaa9f48044a25a" + integrity sha512-AGF/XnMkXymS8xYMsbeyNKZWKflfU8TTqEJqlcADMHYcr8OD1Jyq1YYHp/vvPBWqEhUL4bx3GPspQn5YiiCrWw== + +"@nx/nx-darwin-x64@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.3.tgz#df629a051d5a55ab6269c284803c4e8ca1506438" + integrity sha512-RIFg1VkQ4jhI+ErqEZuIeGBcJGD8t+u9J5CdQBDIASd8QRhtudBkiYLYCJb+qaQly09G7nVfxuyItlS2uRW3qA== + +"@nx/nx-darwin-x64@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.5.tgz#94900e137763b03abeb41f2279e214ea606ad9a8" + integrity sha512-YQQG+kijDNedE6bwEIeKWtVQOxJD+NHW69z6sb/S+ub8NO293YgNtYXgilet9RwOKBubeSyBqWr+yYbRhOuz+A== + +"@nx/nx-freebsd-x64@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.3.tgz#39fe84724926a2a37d3be19b699b721949ec151a" + integrity sha512-boQTgMUdnqpZhHMrV/xgnp/dTg5dfxw8I4d16NBwmW4j+Sez7zi/dydgsJpfZsj8TicOHvPu6KK4W5wzp82NPw== + +"@nx/nx-freebsd-x64@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.5.tgz#731ffa2f70142a28ce33fd59ef564e24ba94ee5f" + integrity sha512-AzcYELtNDukSTtO6zTAuu9pUI2634/2ZFLdS15C9cqUrK0XNvBcbj6R1KNGjgaBDUJc9H49+fqU8VnLPpJjBKQ== + +"@nx/nx-linux-arm-gnueabihf@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.3.tgz#f586efd300597bfb0935a64c5ba05938173310dc" + integrity sha512-wpiNyY1igx1rLN3EsTLum2lDtblFijdBZB9/9u/6UDub4z9CaQ4yaC4h9n5v7yFYILwfL44YTsQKzrE+iv0y1Q== + +"@nx/nx-linux-arm-gnueabihf@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.5.tgz#4d21f74981baeb7528ff2259a5a433e14af6d8f8" + integrity sha512-24Q5N4krcSV6rbFYGRRgbHTc2eSDoJSWesvAtxAW5Sgh6+wAuqFKVwLwY9ZOn1GQwlySB87YwzH2BMkOfEuorw== + +"@nx/nx-linux-arm64-gnu@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.3.tgz#371b1fa291259952974db4f4dfd8aacc8c091f0f" + integrity sha512-nbi/eZtJfWxuDwdUCiP+VJolFubtrz6XxVtB26eMAkODnREOKELHZtMOrlm8JBZCdtWCvTqibq9Az74XsqSfdA== + +"@nx/nx-linux-arm64-gnu@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.5.tgz#067d2e9adccbd1bff4dbad7ac1338c02ddb3bf9c" + integrity sha512-ty08Jnhk/eCVzxdm6o9EaGAZQ4t1WQCO9I/FjriEqtt4e5If6YKJPGjRzu/1OCvppv4d7j0SEN6FiyGkESpBPw== + +"@nx/nx-linux-arm64-musl@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.3.tgz#8091084146289a7250ad71d84ba680094e62be82" + integrity sha512-LTTGzI8YVPlF1v0YlVf+exM+1q7rpsiUbjTTHJcfHFRU5t4BsiZD54K19Y1UBg1XFx5cwhEaIomSmJ88RwPPVQ== + +"@nx/nx-linux-arm64-musl@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.5.tgz#7257b80b3e36070136d06d38f7a45d5732146c80" + integrity sha512-iW/hOgkpELTTu53UYNYAUvs5dAXDR94P50HZFvTQeTQH6xr8igMdOBFdApYFZIjD7IrKqNBSeAiyl4TyI6vFag== + +"@nx/nx-linux-x64-gnu@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.3.tgz#a3f6db458aa177d99c5a24b630d6fcc851cb0766" + integrity sha512-SlA4GtXvQbSzSIWLgiIiLBOjdINPOUR/im+TUbaEMZ8wiGrOY8cnk0PVt95TIQJVBeXBCeb5HnoY0lHJpMOODg== + +"@nx/nx-linux-x64-gnu@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.5.tgz#21d0ed9ecb8fc3742ba5220a4f2a6f4e0d9780d4" + integrity sha512-BJi195AOHSHurMrPzT2mNGslIDn4LVxfKKdiRqVeOvQxT3cZij4fzPTUYxdOFnrWU5YPfW4A9p3ydFz8MDapOg== + +"@nx/nx-linux-x64-musl@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.3.tgz#4410e5cb710405733eaad9a5eb2ee33b75be28de" + integrity sha512-MNzkEwPktp5SQH9dJDH2wP9hgG9LsBDhKJXJfKw6sUI/6qz5+/aAjFziKy+zBnhU4AO1yXt5qEWzR8lDcIriVQ== + +"@nx/nx-linux-x64-musl@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.5.tgz#ed68c1df2521259ef1e522f034af63eaa19771ea" + integrity sha512-r1TrCFvdAIvogNry3Oy0IrWT2Ed5nZHR0lcuW5ImF0HinMmH/o4Ey7Q4IRo5hB88gxq4AUTWt+WoQbImIvoGPg== + +"@nx/nx-win32-arm64-msvc@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.3.tgz#fd7e9bba166edc0ef6327c478740aa722a877916" + integrity sha512-qUV7CyXKwRCM/lkvyS6Xa1MqgAuK5da6w27RAehh7LATBUKn1I4/M7DGn6L7ERCxpZuh1TrDz9pUzEy0R+Ekkg== + +"@nx/nx-win32-arm64-msvc@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.5.tgz#151c69871e59b061eace5ef9dedac2b684be4fa3" + integrity sha512-TyMH8mys+r4Vgq5LYE6zY70LsL2F7JC85O+jHeVPR0vDNGm5Nb/UHobT5Y/PLpLxIx0aIeRuu6VI3j3oh1JhNw== + +"@nx/nx-win32-x64-msvc@20.8.3": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.3.tgz#baa5d0bff6489f16fae7012549209f8ab9ec1914" + integrity sha512-gX1G8u6W6EPX6PO/wv07+B++UHyCHBXyVWXITA3Kv6HoSajOxIa2Kk1rv1iDQGmX1WWxBaj3bUyYJAFBDITe4w== + +"@nx/nx-win32-x64-msvc@v17.2.5": + version "17.2.5" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.5.tgz#89d2ffa519f8ab4e17469b7d65e353d787feb52e" + integrity sha512-I/LWvNasB+iUEzIeejbuaeeezMCfMjpDBsiPdnS5nfHMVnTOrIbfzQOWLWUr+/7R0fYl1BXTp352iaD+M10Agw== + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + +"@octokit/core@^5.0.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.2.tgz#252805732de9b4e8e4f658d34b80c4c9b2534761" + integrity sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0" + integrity sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw== + dependencies: + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.1.tgz#79d9f3d0c96a8fd13d64186fe5c33606d48b79cc" + integrity sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g== + dependencies: + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" + integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== + +"@octokit/plugin-enterprise-rest@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@11.4.4-cjs.2": + version "11.4.4-cjs.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz#979a10d577bce7a393e8e65953887e42b0a05000" + integrity sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw== + dependencies: + "@octokit/types" "^13.7.0" + +"@octokit/plugin-request-log@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz#98a3ca96e0b107380664708111864cb96551f958" + integrity sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA== + +"@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1": + version "13.3.2-cjs.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz#d0a142ff41d8f7892b6ccef45979049f51ecaa8d" + integrity sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ== + dependencies: + "@octokit/types" "^13.8.0" + +"@octokit/request-error@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805" + integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== + dependencies: + "@octokit/types" "^13.1.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486" + integrity sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw== + dependencies: + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@20.1.2": + version "20.1.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-20.1.2.tgz#1d74d0c72ade0d64f7c5416448d5c885f5e3ccc4" + integrity sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA== + dependencies: + "@octokit/core" "^5.0.2" + "@octokit/plugin-paginate-rest" "11.4.4-cjs.2" + "@octokit/plugin-request-log" "^4.0.0" + "@octokit/plugin-rest-endpoint-methods" "13.3.2-cjs.1" + +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0": + version "13.10.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" + integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== + dependencies: + "@octokit/openapi-types" "^24.2.0" + +"@panva/asn1.js@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" + integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.2.tgz#1cf95080bb7072fafaa3cb13b442fab4695c3893" + integrity sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ== + +"@pkgr/core@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" + integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== + +"@rdfjs/data-model@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@rdfjs/data-model/-/data-model-1.3.4.tgz#2b1b3e52755ab1283bf66aa2d3ac97fd8a0332c2" + integrity sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ== + dependencies: + "@rdfjs/types" ">=1.0.1" + +"@rdfjs/types@*", "@rdfjs/types@>=1.0.0", "@rdfjs/types@>=1.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-2.0.1.tgz#f10b50ceffff00b961c4265e60ac9f74550251da" + integrity sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA== + dependencies: + "@types/node" "*" + +"@rdfjs/types@^1.0.0": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-1.1.2.tgz#9c2f9848c44c26d383bed2a808571de3b93b808d" + integrity sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg== + dependencies: + "@types/node" "*" + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@seald-io/binary-search-tree@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz#165a9a456eaa30d15885b25db83861bcce2c6a74" + integrity sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA== + +"@seald-io/nedb@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@seald-io/nedb/-/nedb-3.1.0.tgz#6105345a18596f6f9d69f46d7f572efdae32af8e" + integrity sha512-5G0hCQGJjOelOutvW1l4VD581XMhTPxpj1BUaCWTEM2MPXR9TzIr0MKMnEjnTA5nEKfujPyvVW7iF3etm1/gKQ== + dependencies: + "@seald-io/binary-search-tree" "^1.0.2" + localforage "^1.9.0" + util "^0.12.4" + +"@semapps/ldp@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@semapps/ldp/-/ldp-1.0.10.tgz#ac09d77b10782d18a7ca5c2781983620d2913f1e" + integrity sha512-3RHJ1/hGUdCH9oNFYVrvCpliqg6uEGmFjHXcnaJwE60oJjMgd5rylsG6zUrZK6ArGwSTiQK9mTQiqMlup/SDEw== + dependencies: + "@rdfjs/data-model" "^1.3.4" + "@semapps/middlewares" "1.0.10" + "@semapps/mime-types" "1.0.10" + "@semapps/ontologies" "1.0.10" + "@semapps/triplestore" "1.0.10" + dashify "^2.0.0" + http-link-header "^1.1.1" + mime-types "^2.1.35" + moleculer "^0.14.17" + moleculer-db "^0.8.16" + moleculer-schedule "^0.2.3" + moleculer-web "^0.10.0-beta1" + node-fetch "^2.6.6" + path-to-regexp "^6.2.0" + rdf-parse "^1.7.0" + sharp "^0.31.2" + sparqljs "^3.5.2" + speakingurl "^14.0.1" + streamify-string "^1.0.1" + url-join "^4.0.1" + uuid "^9.0.1" + +"@semapps/middlewares@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@semapps/middlewares/-/middlewares-1.0.10.tgz#100122e0b76c6a964199f3888dbd94ab00a113de" + integrity sha512-eyWJr5XLJ93Rw90fjw8WxAOHbrDMyAjjK5HG6zaxeYct7DsVBXB8mgIBmqkl+q/GZddY9j4kNGBjx4sm5JLhuA== + dependencies: + "@semapps/mime-types" "1.0.10" + busboy "^0.3.1" + memory-streams "^0.1.3" + moleculer "^0.14.18" + +"@semapps/mime-types@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@semapps/mime-types/-/mime-types-1.0.10.tgz#4724b72ffb91e832da94909efb739be3606e3977" + integrity sha512-QfAlYiuYhZktn+AsJvo4U2bgcuVsVm5JQDVSz5E2amVlfrkB0U9clUsSGkktBy0p6kUmkuD8m54uJx9fSnrARg== + dependencies: + moleculer "^0.14.18" + negotiator "^0.6.2" + +"@semapps/ontologies@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@semapps/ontologies/-/ontologies-1.0.10.tgz#77eeb691fc06e85a7a40d4630c5e755bfba5c34e" + integrity sha512-FBJ+ZT0cxpYrxbO/y4RO+aew4Ljfv8p+AQbCbPeJIDNd9lXiL4IgqEsBHobYuvvs6JiCjIttURzbYOxExZBk6Q== + dependencies: + "@semapps/triplestore" "1.0.10" + moleculer-db "^0.8.16" + node-fetch "^2.6.6" + +"@semapps/triplestore@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@semapps/triplestore/-/triplestore-1.0.10.tgz#c52a6bae54380eb353afee0c26147b95bd8c045e" + integrity sha512-mBO2nm8W35M4vNL4jiUWq8VFE1iVIzKVSQdLNq/vPPqFW09aSqz26xe5qiqAi4NzWnQ0Gdjjecnuasi3lW/uGw== + dependencies: + "@semapps/middlewares" "1.0.10" + "@semapps/mime-types" "1.0.10" + jsonld "^3.3.2" + moleculer "^0.14.29" + negotiator "^0.6.2" + node-fetch "^2.6.6" + sparqljs "^3.5.2" + sparqljson-parse "^1.5.1" + string-template "^1.0.0" + url-join "^4.0.1" + uuid "^9.0.1" + +"@sigstore/bundle@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" + integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + +"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" + integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== + +"@sigstore/protobuf-specs@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz#7dd46d68b76c322873a2ef7581ed955af6f4dcde" + integrity sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ== + +"@sigstore/sign@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" + integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + make-fetch-happen "^13.0.1" + proc-log "^4.2.0" + promise-retry "^2.0.1" + +"@sigstore/tuf@^2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" + integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + tuf-js "^2.2.1" + +"@sigstore/verify@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" + integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.1.0" + "@sigstore/protobuf-specs" "^0.3.2" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinclair/typebox@^0.34.0": + version "0.34.47" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.47.tgz#61b684d8a20d2890b9f1f7b0d4f76b4b39f5bc0d" + integrity sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sinonjs/commons@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^13.0.0": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz#36b9dbc21ad5546486ea9173d6bea063eb1717d5" + integrity sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw== + dependencies: + "@sinonjs/commons" "^3.0.1" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.12.tgz#be57ceac1e4692b41be9de6be8c32a106636dba4" + integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" + integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.4" + +"@tybys/wasm-util@^0.10.0": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== + dependencies: + tslib "^2.4.0" + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + +"@types/babel__core@^7.1.12", "@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== + dependencies: + "@babel/types" "^7.28.2" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/dotenv-flow@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@types/dotenv-flow/-/dotenv-flow-3.3.3.tgz#d8bdbb08f35c0a62869b8ce72796055569a44258" + integrity sha512-aJjBsKw4bfGjvaRwrxBtEOfYZxCAq+LiFTpZ4DGTEK2b9eLVt/IAClapSxMfgV4Mi/2bIBKKjoTCO0lOh4ACLg== + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/http-link-header@^1.0.1": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.7.tgz#bb1a1671a8c6d93717e0057072e9253113fdc875" + integrity sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw== + dependencies: + "@types/node" "*" + +"@types/ioredis@^4.27.0": + version "4.28.10" + resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.28.10.tgz#40ceb157a4141088d1394bb87c98ed09a75a06ff" + integrity sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^30.0.0": + version "30.0.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-30.0.0.tgz#5e85ae568006712e4ad66f25433e9bdac8801f1d" + integrity sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA== + dependencies: + expect "^30.0.0" + pretty-format "^30.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/jsonld@1.5.15": + version "1.5.15" + resolved "https://registry.yarnpkg.com/@types/jsonld/-/jsonld-1.5.15.tgz#55dde3077c23986e5f2a3b62356d667bfb03fc71" + integrity sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/luxon@~3.7.0": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.7.1.tgz#ef51b960ff86801e4e2de80c68813a96e529d531" + integrity sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/n3@^1.4.4": + version "1.26.1" + resolved "https://registry.yarnpkg.com/@types/n3/-/n3-1.26.1.tgz#c696b45a1bcbc37b0cf5db01e107ec9937f858fe" + integrity sha512-TilYHzpU6ecXVJAbV+6o17Z8ZkWLWx6ZJD3IluaU4RiGHxqjU2or9fopxFHS6iXS6qcl5Mg1K3wSx9L8xxJaJQ== + dependencies: + "@rdfjs/types" "*" + "@types/node" "*" + +"@types/node-fetch@^2.6.13": + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== + dependencies: + "@types/node" "*" + form-data "^4.0.4" + +"@types/node@*": + version "25.0.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.3.tgz#79b9ac8318f373fbfaaf6e2784893efa9701f269" + integrity sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA== + dependencies: + undici-types "~7.16.0" + +"@types/node@^13.1.0": + version "13.13.52" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" + integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== + +"@types/node@^18.0.0": + version "18.19.130" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.130.tgz#da4c6324793a79defb7a62cba3947ec5add00d59" + integrity sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg== + dependencies: + undici-types "~5.26.4" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/parse-link-header@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.1.tgz#6eade790736a050b9242c7c6b2fceda9b3dc394a" + integrity sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg== + +"@types/readable-stream@^2.3.11": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.1.tgz#3ce3af1a5524ef327d2da9e4fd8b6d95c8d70528" + integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA== + +"@types/sparqljs@^3.1.2": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@types/sparqljs/-/sparqljs-3.1.12.tgz#29a030615a3aed6eb05fbd618ecf58ab345506f8" + integrity sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ== + dependencies: + "@rdfjs/types" ">=1.0.0" + +"@types/stack-utils@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/streamify-string@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/streamify-string/-/streamify-string-1.0.4.tgz#93254a61c44e2760b450ccec520ef9c4de5247f2" + integrity sha512-lFME26GYMkG5C9ydkqaIZ9Jnylk0yhEO2MYpKCf1CifCq32alaXfhi3HcquydYnOGM/VTb9S++JRFZ44rBvRZQ== + dependencies: + "@types/node" "*" + +"@types/url-join@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.3.tgz#09ede6753b846a274301b9bd3a6ed117050daecd" + integrity sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.33": + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^7.1.1": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^7.5.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0", "@ungap/structured-clone@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@unrs/resolver-binding-android-arm-eabi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz#9f5b04503088e6a354295e8ea8fe3cb99e43af81" + integrity sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw== + +"@unrs/resolver-binding-android-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz#7414885431bd7178b989aedc4d25cccb3865bc9f" + integrity sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g== + +"@unrs/resolver-binding-darwin-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz#b4a8556f42171fb9c9f7bac8235045e82aa0cbdf" + integrity sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g== + +"@unrs/resolver-binding-darwin-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz#fd4d81257b13f4d1a083890a6a17c00de571f0dc" + integrity sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ== + +"@unrs/resolver-binding-freebsd-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz#d2513084d0f37c407757e22f32bd924a78cfd99b" + integrity sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz#844d2605d057488d77fab09705f2866b86164e0a" + integrity sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz#204892995cefb6bd1d017d52d097193bc61ddad3" + integrity sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw== + +"@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz#023eb0c3aac46066a10be7a3f362e7b34f3bdf9d" + integrity sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ== + +"@unrs/resolver-binding-linux-arm64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz#9e6f9abb06424e3140a60ac996139786f5d99be0" + integrity sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz#b111417f17c9d1b02efbec8e08398f0c5527bb44" + integrity sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz#92ffbf02748af3e99873945c9a8a5ead01d508a9" + integrity sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ== + +"@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz#0bec6f1258fc390e6b305e9ff44256cb207de165" + integrity sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew== + +"@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz#577843a084c5952f5906770633ccfb89dac9bc94" + integrity sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg== + +"@unrs/resolver-binding-linux-x64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz#36fb318eebdd690f6da32ac5e0499a76fa881935" + integrity sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w== + +"@unrs/resolver-binding-linux-x64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz#bfb9af75f783f98f6a22c4244214efe4df1853d6" + integrity sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA== + +"@unrs/resolver-binding-wasm32-wasi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz#752c359dd875684b27429500d88226d7cc72f71d" + integrity sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz#ce5735e600e4c2fbb409cd051b3b7da4a399af35" + integrity sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw== + +"@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz#72fc57bc7c64ec5c3de0d64ee0d1810317bc60a6" + integrity sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ== + +"@unrs/resolver-binding-win32-x64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz#538b1e103bf8d9864e7b85cc96fa8d6fb6c40777" + integrity sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@yarnpkg/parsers@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.2.tgz#48a1517a0f49124827f4c37c284a689c607b2f32" + integrity sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +"@zkochan/js-yaml@0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz#4b0cb785220d7c28ce0ec4d0804deb5d821eae89" + integrity sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.3.3, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1, acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + +aggregate-error@^3.0.0, aggregate-error@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0, ansi-styles@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + +anymatch@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +"aproba@^1.0.3 || ^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" + integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== + +are-docs-informative@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +args@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" + integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== + dependencies: + camelcase "5.0.0" + chalk "2.4.2" + leven "2.1.0" + mri "1.1.4" + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.reduce@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz#42f97f5078daedca687d4463fd3c05cbfd83da57" + integrity sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + is-string "^1.1.1" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1@^0.2.6, asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-never@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.4.0.tgz#b0d4988628c87f35eb94716cc54422a63927e175" + integrity sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA== + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +async@^3.1.0, async@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +asynciterator@^3.2.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-3.10.0.tgz#b9baade3792078235dbb6b35f6d28e88db76c5ce" + integrity sha512-eDOBoUf2m+4ht0ETVn2SCfuBIZZ6UWyyQbP++LRPKoK7PmrCQq37pJ6vRvyef4o1Pn+CwWnzMlkXxGdh/krVIw== + dependencies: + tiny-set-immediate "^1.0.2" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +axios@^1.5.1, axios@^1.8.3: + version "1.13.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" + integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" + +babel-jest@30.2.0, babel-jest@^30.0.5: + version "30.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.2.0.tgz#fd44a1ec9552be35ead881f7381faa7d8f3b95ac" + integrity sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw== + dependencies: + "@jest/transform" "30.2.0" + "@types/babel__core" "^7.20.5" + babel-plugin-istanbul "^7.0.1" + babel-preset-jest "30.2.0" + chalk "^4.1.2" + graceful-fs "^4.2.11" + slash "^3.0.0" + +babel-plugin-istanbul@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz#d8b518c8ea199364cf84ccc82de89740236daf92" + integrity sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-instrument "^6.0.2" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz#94c250d36b43f95900f3a219241e0f4648191ce2" + integrity sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA== + dependencies: + "@types/babel__core" "^7.20.5" + +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== + dependencies: + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" + +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + +babel-plugin-transform-import-meta@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-import-meta/-/babel-plugin-transform-import-meta-2.3.3.tgz#863de841f7df37e2bf39a057572a24e4f65f3c51" + integrity sha512-bbh30qz1m6ZU1ybJoNOhA2zaDvmeXMnGNBMVMDOJ1Fni4+wMBoy/j7MTRVmqAUCIcy54/rEnr9VEBsfcgbpm3Q== + dependencies: + "@babel/template" "^7.25.9" + tslib "^2.8.1" + +babel-plugin-transform-vite-meta-env@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vite-meta-env/-/babel-plugin-transform-vite-meta-env-1.0.3.tgz#cbf81becc95b71dcc170ee4863cb7f6919ed99bb" + integrity sha512-eyfuDEXrMu667TQpmctHeTlJrZA6jXYHyEJFjcM0yEa60LS/LXlOg2PBbMb8DVS+V9CnTj/j9itdlDVMcY2zEg== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + +babel-plugin-transform-vite-meta-glob@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vite-meta-glob/-/babel-plugin-transform-vite-meta-glob-1.1.2.tgz#6bccd7b695f445d8c73a5dd47fa50c85ba5395f3" + integrity sha512-o984FUo++WYnfgUaC8ymzmNPng5Kda5A6j6PFC0uOqhFXlAsD6mNhEBhaNzbUGfq/aPcyeGo67fYXlg20rh9aA== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + glob "^10.3.10" + +babel-plugin-transform-vite-meta-hot@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vite-meta-hot/-/babel-plugin-transform-vite-meta-hot-1.0.0.tgz#d806de0b1f9826eb3fe0c4e82996973d818895df" + integrity sha512-qF7T46bDG5UPPOfy4MFgQJyd3mZvm1sGOR2gZ4lIHy6DEcxAVTIt39/adAn89il44CvwestshuEybKPMR+L/Tg== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + +babel-preset-current-node-syntax@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz#04717843e561347781d6d7f69c81e6bcc3ed11ce" + integrity sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ== + dependencies: + babel-plugin-jest-hoist "30.2.0" + babel-preset-current-node-syntax "^1.2.0" + +babel-preset-vite@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-vite/-/babel-preset-vite-1.1.3.tgz#9cbc685fe04d52cd3956d095e664ed1e1262364f" + integrity sha512-xSt/EiezzeMd4RI2hjMCNyn/FGzGeroKODPMAUTsgpeHC4dFf2qiCQfyNuiNzn1OwoF4n+NYSsORhUN5G/2KTA== + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + babel-plugin-transform-vite-meta-env "1.0.3" + babel-plugin-transform-vite-meta-glob "1.1.2" + babel-plugin-transform-vite-meta-hot "1.0.0" + +babel-walk@3.0.0-canary-5: + version "3.0.0-canary-5" + resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" + integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== + dependencies: + "@babel/types" "^7.9.6" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== + dependencies: + safe-buffer "^5.0.1" + +base58-universal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base58-universal/-/base58-universal-2.0.0.tgz#243c8256591afa7d5210f87ad1655e05081f4be4" + integrity sha512-BgkgF8zVLOAygszG4W8NkLm7iXrw80VYAOcedrzANrIhS14+4W6zVqjyGTFUBM/FpqkHUt8aAYd4DbBBfn3zKg== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64url-universal@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-1.1.0.tgz#94da6356c1d43ead55b1d91c045c0a5b09ec8181" + integrity sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA== + dependencies: + base64url "^3.0.0" + +base64url-universal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-2.0.0.tgz#6023785c0e349a90de1cf396e8a4519750a4e67b" + integrity sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw== + dependencies: + base64url "^3.0.1" + +base64url@^3.0.0, base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +baseline-browser-mapping@^2.9.0: + version "2.9.13" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.13.tgz#e1d39147f6a7492438131476026e705d816b10cb" + integrity sha512-WhtvB2NG2wjr04+h77sg3klAIwrgOqnjS49GGudnUPGFFgg7G17y7Qecqp+2Dr5kUDxNRBca0SK7cG8JwzkWDQ== + +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bcrypt@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.1.tgz#0f732c6dcb4e12e5b70a25e326a72965879ba6e2" + integrity sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.11" + node-addon-api "^5.0.0" + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bin-links@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" + integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== + dependencies: + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.0.0, bluebird@^3.1.1, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@^1.19.0: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== + dependencies: + bytes "~3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" + type-is "~1.6.18" + unpipe "~1.0.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.24.0, browserslist@^4.28.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + dependencies: + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" + +bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-equal-constant-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buildcheck@~0.0.6: + version "0.0.7" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.7.tgz#07a5e76c10ead8fa67d9e4c587b68f49e8f29d61" + integrity sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA== + +bull@^3.15.0: + version "3.29.3" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" + integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== + dependencies: + cron-parser "^2.13.0" + debuglog "^1.0.0" + get-port "^5.1.1" + ioredis "^4.27.0" + lodash "^4.17.21" + p-timeout "^3.2.0" + promise.prototype.finally "^3.1.2" + semver "^7.3.2" + util.promisify "^1.0.1" + uuid "^8.3.0" + +busboy@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" + integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== + dependencies: + dicer "0.3.0" + +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== + +bytes@^3.1.2, bytes@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^18.0.0, cacache@^18.0.3: + version "18.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.0, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0, callsites@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001759: + version "1.0.30001763" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001763.tgz#9397446dd110b1aeadb0df249c41b2ece7f90f09" + integrity sha512-mh/dGtq56uN98LlNX9qdbKnzINhX0QzhiWBFEkFfsFO4QyCvL8YegrJAazCwXIeqkIob8BlZPGM3xdnY+sgmvQ== + +canonicalize@^1.0.1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" + integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== "cas@git+https://github.com/joshchan/node-cas.git": - version: 0.0.5 - resolution: "cas@https://github.com/joshchan/node-cas.git#commit=344a8bfba9d054e2e378adaf95b720c898ae48a2" - dependencies: - cheerio: "npm:0.19.0" - checksum: 10c0/03467fd69a10bd1b03cbca35f25b2249855b99857e908aeb54727cb8d8f17658fa909f7b1296a77eaf7537dc24a0fa16f5da438a8f161260f189d0db1e60f5c6 - languageName: node - linkType: hard - -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 - languageName: node - linkType: hard - -"chalk@npm:2.4.2, chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:4.1.0": - version: 4.1.0 - resolution: "chalk@npm:4.1.0" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/3787bd65ecd98ab3a1acc3b4f71d006268a675875e49ee6ea75fb54ba73d268b97544368358c18c42445e408e076ae8ad5cec8fbad36942a2c7ac654883dc61e - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e - languageName: node - linkType: hard - -"character-parser@npm:^2.2.0": - version: 2.2.0 - resolution: "character-parser@npm:2.2.0" - dependencies: - is-regex: "npm:^1.0.3" - checksum: 10c0/5a8d3eff2c912a6878c84e2ebf9d42524e858aa7e1a1c7e8bb79ab54da109ad008fe9057a9d2b3230541d7ff858eda98983a2ae15db57ba01af2e989d29e932e - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"cheerio@npm:0.19.0": - version: 0.19.0 - resolution: "cheerio@npm:0.19.0" - dependencies: - css-select: "npm:~1.0.0" - dom-serializer: "npm:~0.1.0" - entities: "npm:~1.1.1" - htmlparser2: "npm:~3.8.1" - lodash: "npm:^3.2.0" - checksum: 10c0/af96cc6a6b595334ed7c1a47b1a999dfad20645a563acdc8bf5338b3774cf050c99b6f4c9040ef0f4c03b7c915e3d3735bedcbb95968d9aecf9cf2e44dcf4896 - languageName: node - linkType: hard - -"cheerio@npm:^0.22.0": - version: 0.22.0 - resolution: "cheerio@npm:0.22.0" - dependencies: - css-select: "npm:~1.2.0" - dom-serializer: "npm:~0.1.0" - entities: "npm:~1.1.1" - htmlparser2: "npm:^3.9.1" - lodash.assignin: "npm:^4.0.9" - lodash.bind: "npm:^4.1.4" - lodash.defaults: "npm:^4.0.1" - lodash.filter: "npm:^4.4.0" - lodash.flatten: "npm:^4.2.0" - lodash.foreach: "npm:^4.3.0" - lodash.map: "npm:^4.4.0" - lodash.merge: "npm:^4.4.0" - lodash.pick: "npm:^4.2.1" - lodash.reduce: "npm:^4.4.0" - lodash.reject: "npm:^4.4.0" - lodash.some: "npm:^4.4.0" - checksum: 10c0/b067fadb3d0ada1f614ce27b2795c206df2c612ab066393f833c798ba29c73a610a3202567d2223658743026f5385cda61f6b52370b22f28a924e52883933340 - languageName: node - linkType: hard - -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a - languageName: node - linkType: hard - -"ci-info@npm:^4.0.0": - version: 4.1.0 - resolution: "ci-info@npm:4.1.0" - checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 - languageName: node - linkType: hard - -"ci-info@npm:^4.2.0": - version: 4.3.0 - resolution: "ci-info@npm:4.3.0" - checksum: 10c0/60d3dfe95d75c01454ec1cfd5108617dd598a28a2a3e148bd7e1523c1c208b5f5a3007cafcbe293e6fd0a5a310cc32217c5dc54743eeabc0a2bec80072fc055c - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^2.1.0": - version: 2.1.0 - resolution: "cjs-module-lexer@npm:2.1.0" - checksum: 10c0/91cf28686dc3948e4a06dfa03a2fccb14b7a97471ffe7ae0124f62060ddf2de28e8e997f60007babe6e122b1b06a47c01a1b72cc015f185824d9cac3ccfa5533 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - -"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: "npm:^3.1.0" - checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 - languageName: node - linkType: hard - -"cli-spinners@npm:2.6.1": - version: 2.6.1 - resolution: "cli-spinners@npm:2.6.1" - checksum: 10c0/6abcdfef59aa68e6b51376d87d257f9120a0a7120a39dd21633702d24797decb6dc747dff2217c88732710db892b5053c5c672d221b6c4d13bbcb5372e203596 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.5.0": - version: 2.9.2 - resolution: "cli-spinners@npm:2.9.2" - checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 - languageName: node - linkType: hard - -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 10c0/125a62810e59a2564268c80fdff56c23159a7690c003e34aeb2e68497dccff26911998ff49c33916fcfdf71e824322cc3953e3f7b48b27267c7a062c81348a9a - languageName: node - linkType: hard - -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 - languageName: node - linkType: hard - -"clone-deep@npm:4.0.1": - version: 4.0.1 - resolution: "clone-deep@npm:4.0.1" - dependencies: - is-plain-object: "npm:^2.0.4" - kind-of: "npm:^6.0.2" - shallow-clone: "npm:^3.0.0" - checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 - languageName: node - linkType: hard - -"clone-response@npm:^1.0.2": - version: 1.0.3 - resolution: "clone-response@npm:1.0.3" - dependencies: - mimic-response: "npm:^1.0.0" - checksum: 10c0/06a2b611824efb128810708baee3bd169ec9a1bf5976a5258cd7eb3f7db25f00166c6eee5961f075c7e38e194f373d4fdf86b8166ad5b9c7e82bbd2e333a6087 - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b - languageName: node - linkType: hard - -"cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: 10c0/d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 - languageName: node - linkType: hard - -"cmd-shim@npm:6.0.3, cmd-shim@npm:^6.0.0": - version: 6.0.3 - resolution: "cmd-shim@npm:6.0.3" - checksum: 10c0/dc09fe0bf39e86250529456d9a87dd6d5208d053e449101a600e96dc956c100e0bc312cdb413a91266201f3bd8057d4abf63875cafb99039553a1937d8f3da36 - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.2": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: "npm:^1.0.0" - simple-swizzle: "npm:^0.2.2" - checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 - languageName: node - linkType: hard - -"color-support@npm:1.1.3, color-support@npm:^1.1.2": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 - languageName: node - linkType: hard - -"color@npm:^4.2.3": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: "npm:^2.0.1" - color-string: "npm:^1.9.0" - checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 - languageName: node - linkType: hard - -"columnify@npm:1.6.0": - version: 1.6.0 - resolution: "columnify@npm:1.6.0" - dependencies: - strip-ansi: "npm:^6.0.1" - wcwidth: "npm:^1.0.0" - checksum: 10c0/25b90b59129331bbb8b0c838f8df69924349b83e8eab9549f431062a20a39094b8d744bb83265be38fd5d03140ce4bfbd85837c293f618925e83157ae9535f1d - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^2.15.1, commander@npm:^2.20.3": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 - languageName: node - linkType: hard - -"comment-parser@npm:1.4.1": - version: 1.4.1 - resolution: "comment-parser@npm:1.4.1" - checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd - languageName: node - linkType: hard - -"common-ancestor-path@npm:^1.0.1": - version: 1.0.1 - resolution: "common-ancestor-path@npm:1.0.1" - checksum: 10c0/390c08d2a67a7a106d39499c002d827d2874966d938012453fd7ca34cd306881e2b9d604f657fa7a8e6e4896d67f39ebc09bf1bfd8da8ff318e0fb7a8752c534 - languageName: node - linkType: hard - -"compare-func@npm:^2.0.0": - version: 2.0.0 - resolution: "compare-func@npm:2.0.0" - dependencies: - array-ify: "npm:^1.0.0" - dot-prop: "npm:^5.1.0" - checksum: 10c0/78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 - languageName: node - linkType: hard - -"component-emitter@npm:^1.2.0": - version: 1.3.1 - resolution: "component-emitter@npm:1.3.1" - checksum: 10c0/e4900b1b790b5e76b8d71b328da41482118c0f3523a516a41be598dc2785a07fd721098d9bf6e22d89b19f4fa4e1025160dc00317ea111633a3e4f75c2b86032 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"concat-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "concat-stream@npm:2.0.0" - dependencies: - buffer-from: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.0.2" - typedarray: "npm:^0.0.6" - checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a - languageName: node - linkType: hard - -"confusing-browser-globals@npm:^1.0.10": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e - languageName: node - linkType: hard - -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 - languageName: node - linkType: hard - -"consolidate@npm:^0.14.2": - version: 0.14.5 - resolution: "consolidate@npm:0.14.5" - dependencies: - bluebird: "npm:^3.1.1" - checksum: 10c0/9affd54c3013932e0c475c9a3fd431f8b2dd81d2ef9c8267c9c99941e5f763cfb3e7719625783615c9e231f1bb3b7646b4362a60fc8b625a3b9ebe6f51ac4888 - languageName: node - linkType: hard - -"constantinople@npm:^4.0.1": - version: 4.0.1 - resolution: "constantinople@npm:4.0.1" - dependencies: - "@babel/parser": "npm:^7.6.0" - "@babel/types": "npm:^7.6.1" - checksum: 10c0/15129adef19b1af2c3ade8bd38f97c34781bf461472a30ab414384b28d072be83070c8d2175787c045ef7c222c415101ae609936e7903427796a0c0eca8449fd - languageName: node - linkType: hard - -"content-type@npm:~1.0.5": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af - languageName: node - linkType: hard - -"conventional-changelog-angular@npm:7.0.0": - version: 7.0.0 - resolution: "conventional-changelog-angular@npm:7.0.0" - dependencies: - compare-func: "npm:^2.0.0" - checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e - languageName: node - linkType: hard - -"conventional-changelog-core@npm:5.0.1": - version: 5.0.1 - resolution: "conventional-changelog-core@npm:5.0.1" - dependencies: - add-stream: "npm:^1.0.0" - conventional-changelog-writer: "npm:^6.0.0" - conventional-commits-parser: "npm:^4.0.0" - dateformat: "npm:^3.0.3" - get-pkg-repo: "npm:^4.2.1" - git-raw-commits: "npm:^3.0.0" - git-remote-origin-url: "npm:^2.0.0" - git-semver-tags: "npm:^5.0.0" - normalize-package-data: "npm:^3.0.3" - read-pkg: "npm:^3.0.0" - read-pkg-up: "npm:^3.0.0" - checksum: 10c0/c026da415ea58346c167e58f8dd717592e92afc897aa604189a6d69f48b6943e7a656b2c83433810feea32dda117b0914a7f5860ed338a21f6ee9b0f56788b37 - languageName: node - linkType: hard - -"conventional-changelog-preset-loader@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-changelog-preset-loader@npm:3.0.0" - checksum: 10c0/5de23c4aa8b8526c3542fd5abe9758d56eed79821f32cc16d1fdf480cecc44855edbe4680113f229509dcaf4b97cc41e786ac8e3b0822b44fd9d0b98542ed0e0 - languageName: node - linkType: hard - -"conventional-changelog-writer@npm:^6.0.0": - version: 6.0.1 - resolution: "conventional-changelog-writer@npm:6.0.1" - dependencies: - conventional-commits-filter: "npm:^3.0.0" - dateformat: "npm:^3.0.3" - handlebars: "npm:^4.7.7" - json-stringify-safe: "npm:^5.0.1" - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - split: "npm:^1.0.1" - bin: - conventional-changelog-writer: cli.js - checksum: 10c0/50790b0d92e06c5ab1c02cc4eb2ecd74575244d31cfacea1885d7c8afeae1bc7bbc169140fe062f2438b9952400762240b796e59521c0246278859296b323338 - languageName: node - linkType: hard - -"conventional-commits-filter@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-commits-filter@npm:3.0.0" - dependencies: - lodash.ismatch: "npm:^4.4.0" - modify-values: "npm:^1.0.1" - checksum: 10c0/9d43cf9029bf39b70b394c551846a57b6f0473028ba5628c38bd447672655cc27bb80ba502d9a7e41335f63ad62b754cb26579f3d4bae7398dfc092acbb32578 - languageName: node - linkType: hard - -"conventional-commits-parser@npm:^4.0.0": - version: 4.0.0 - resolution: "conventional-commits-parser@npm:4.0.0" - dependencies: - JSONStream: "npm:^1.3.5" - is-text-path: "npm:^1.0.1" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - conventional-commits-parser: cli.js - checksum: 10c0/12e390cc80ad8a825c5775a329b95e11cf47a6df7b8a3875d375e28b8cb27c4f32955842ea73e4e357cff9757a6be99fdffe4fda87a23e9d8e73f983425537a0 - languageName: node - linkType: hard - -"conventional-recommended-bump@npm:7.0.1": - version: 7.0.1 - resolution: "conventional-recommended-bump@npm:7.0.1" - dependencies: - concat-stream: "npm:^2.0.0" - conventional-changelog-preset-loader: "npm:^3.0.0" - conventional-commits-filter: "npm:^3.0.0" - conventional-commits-parser: "npm:^4.0.0" - git-raw-commits: "npm:^3.0.0" - git-semver-tags: "npm:^5.0.0" - meow: "npm:^8.1.2" - bin: - conventional-recommended-bump: cli.js - checksum: 10c0/ff751a256ddfbec62efd5a32de059b01659e945073793c6766143a8242864fd8099804a90bbf1e6a61928ade3d12292d6f66f721a113630de392d54eb7f0b0c3 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b - languageName: node - linkType: hard - -"cookie-signature@npm:1.0.7": - version: 1.0.7 - resolution: "cookie-signature@npm:1.0.7" - checksum: 10c0/e7731ad2995ae2efeed6435ec1e22cdd21afef29d300c27281438b1eab2bae04ef0d1a203928c0afec2cee72aa36540b8747406ebe308ad23c8e8cc3c26c9c51 - languageName: node - linkType: hard - -"cookie@npm:0.7.2": - version: 0.7.2 - resolution: "cookie@npm:0.7.2" - checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 - languageName: node - linkType: hard - -"cookiejar@npm:^2.1.0": - version: 2.1.4 - resolution: "cookiejar@npm:2.1.4" - checksum: 10c0/2dae55611c6e1678f34d93984cbd4bda58f4fe3e5247cc4993f4a305cd19c913bbaf325086ed952e892108115073a747596453d3dc1c34947f47f731818b8ad1 - languageName: node - linkType: hard - -"core-js-compat@npm:^3.43.0": - version: 3.45.0 - resolution: "core-js-compat@npm:3.45.0" - dependencies: - browserslist: "npm:^4.25.1" - checksum: 10c0/3515955d2c83846f0bf8c4a0f96fc514a6b711e9b3ee19a8df3683a6b0720d762fef60a63bb5c07907f9d18aa00c5904ef690dd4150bc39e2d47e01f05154fda - languageName: node - linkType: hard - -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 - languageName: node - linkType: hard - -"cosmiconfig@npm:9.0.0": - version: 9.0.0 - resolution: "cosmiconfig@npm:9.0.0" - dependencies: - env-paths: "npm:^2.2.1" - import-fresh: "npm:^3.3.0" - js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.2.0" - peerDependencies: - typescript: ">=4.9.5" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee - languageName: node - linkType: hard - -"cpu-features@npm:~0.0.10": - version: 0.0.10 - resolution: "cpu-features@npm:0.0.10" - dependencies: - buildcheck: "npm:~0.0.6" - nan: "npm:^2.19.0" - node-gyp: "npm:latest" - checksum: 10c0/0c4a12904657b22477ffbcfd2b4b2bdd45b174f283616b18d9e1ade495083f9f6098493feb09f4ae2d0b36b240f9ecd32cfb4afe210cf0d0f8f0cc257bd58e54 - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 - languageName: node - linkType: hard - -"credentials-context@npm:^1.0.0": - version: 1.0.0 - resolution: "credentials-context@npm:1.0.0" - checksum: 10c0/ceefd9cba384fed7e2cfe85d8e9fee15da27ef8989ddcecb7cc8a678fa83d691e834100cf0280deb52349f09f5da1fb3b3ba144404faeabea44b0130651ac74d - languageName: node - linkType: hard - -"cron-parser@npm:^2.13.0": - version: 2.18.0 - resolution: "cron-parser@npm:2.18.0" - dependencies: - is-nan: "npm:^1.3.0" - moment-timezone: "npm:^0.5.31" - checksum: 10c0/1361cf0af8a749a355c7dd45ec85d94f8b1b768e6ce19955fea38d72b22874c0c63add070a1fe543a4ee4fa5229b6ae43760934df0d4aed6499581108657df25 - languageName: node - linkType: hard - -"cron-parser@npm:^4.2.0, cron-parser@npm:^4.2.1, cron-parser@npm:^4.3.0": - version: 4.9.0 - resolution: "cron-parser@npm:4.9.0" - dependencies: - luxon: "npm:^3.2.1" - checksum: 10c0/348622bdcd1a15695b61fc33af8a60133e5913a85cf99f6344367579e7002896514ba3b0a9d6bb569b02667d6b06836722bf2295fcd101b3de378f71d37bed0b - languageName: node - linkType: hard - -"cron@npm:^1.8.2": - version: 1.8.3 - resolution: "cron@npm:1.8.3" - dependencies: - luxon: "npm:^1.23.x" - checksum: 10c0/f3cd0960c34bebe8ac70404120ad1822bceb4cca216b0951a997e5a673c8b140d73b567633248485811cfced99926cdf4ff624e067cf26ec72d5cfce06f0468c - languageName: node - linkType: hard - -"cron@npm:^4.1.4": - version: 4.3.0 - resolution: "cron@npm:4.3.0" - dependencies: - "@types/luxon": "npm:~3.6.0" - luxon: "npm:~3.6.0" - checksum: 10c0/859805a56ce6af19177a0abff3688e917d2124c0fa086234333d20fd4ca6efe333af2ab4ba6ba06c3aa68c6b2eec30e375c795e97e735c70fcac126057332f10 - languageName: node - linkType: hard - -"cross-fetch@npm:^3.0.5, cross-fetch@npm:^3.0.6": - version: 3.2.0 - resolution: "cross-fetch@npm:3.2.0" - dependencies: - node-fetch: "npm:^2.7.0" - checksum: 10c0/d8596adf0269130098a676f6739a0922f3cc7b71cc89729925411ebe851a87026171c82ea89154c4811c9867c01c44793205a52e618ce2684650218c7fbeeb9f - languageName: node - linkType: hard - -"cross-spawn@npm:^5.1.0": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: "npm:^4.0.1" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10c0/1918621fddb9f8c61e02118b2dbf81f611ccd1544ceaca0d026525341832b8511ce2504c60f935dbc06b35e5ef156fe8c1e72708c27dd486f034e9c0e1e07201 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"crypto-ld@npm:^3.7.0": - version: 3.9.0 - resolution: "crypto-ld@npm:3.9.0" - dependencies: - base64url-universal: "npm:^1.0.1" - bs58: "npm:^4.0.1" - node-forge: "npm:~0.10.0" - semver: "npm:^6.2.0" - sodium-native: "npm:^3.2.0" - dependenciesMeta: - sodium-native: - optional: true - checksum: 10c0/78fd545e802db3b0ade0bacf177dde7c52dd24d801faca79a7b5b7d6226d114db7fc1307397ff119798709376d28c3271e08e457723720c141ab4f50e47473e1 - languageName: node - linkType: hard - -"crypto-ld@npm:^7.0.0": - version: 7.0.0 - resolution: "crypto-ld@npm:7.0.0" - checksum: 10c0/67fac3bf5c52d71e02ae436a305f223376746cb43d2aa6550764d2885e15e8802267c8fd6a451c4255b90b58eeab1c036b6ee6e88f21425620a3d5ecc8b36d92 - languageName: node - linkType: hard - -"css-select@npm:~1.0.0": - version: 1.0.0 - resolution: "css-select@npm:1.0.0" - dependencies: - boolbase: "npm:~1.0.0" - css-what: "npm:1.0" - domutils: "npm:1.4" - nth-check: "npm:~1.0.0" - checksum: 10c0/2311812bb619d39263f620a7f5f3900c08cc25a5a0817b76e6f677dbe5b062a434cdac7f5de0bfc025cd249de53c509ddc87c77c62c99466b2a891f7df935338 - languageName: node - linkType: hard - -"css-select@npm:~1.2.0": - version: 1.2.0 - resolution: "css-select@npm:1.2.0" - dependencies: - boolbase: "npm:~1.0.0" - css-what: "npm:2.1" - domutils: "npm:1.5.1" - nth-check: "npm:~1.0.1" - checksum: 10c0/16e91cd4a8606e76eb2d93ded43e2d20fe315effa7e1dedf16e81fab5c6bbd18b394f78cb59c04e2dddc7d4c68e31a0617b7f4f196dff48398cf3ac83e78475c - languageName: node - linkType: hard - -"css-what@npm:1.0": - version: 1.0.0 - resolution: "css-what@npm:1.0.0" - checksum: 10c0/dbcba5c7251e11643fd531d6cfd625007ac147485c1004d8a9e6c2d768ab43ab1f2f57da5f73df235990cd30d2d80fdb64d54f4c943baec460a2b2beaf646808 - languageName: node - linkType: hard - -"css-what@npm:2.1": - version: 2.1.3 - resolution: "css-what@npm:2.1.3" - checksum: 10c0/4f1a25855be8bdfebdd431ccb084f6481951408dbf076eebf7a1c045ae45dd5651b32fe55deaa16a59e98eb25d5bb066dcf6bdff7aa3cc2ed5bdbe5fe1aa7fd7 - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - -"dargs@npm:^7.0.0": - version: 7.0.0 - resolution: "dargs@npm:7.0.0" - checksum: 10c0/ec7f6a8315a8fa2f8b12d39207615bdf62b4d01f631b96fbe536c8ad5469ab9ed710d55811e564d0d5c1d548fc8cb6cc70bf0939f2415790159f5a75e0f96c92 - languageName: node - linkType: hard - -"dashdash@npm:^1.12.0": - version: 1.14.1 - resolution: "dashdash@npm:1.14.1" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a - languageName: node - linkType: hard - -"dashify@npm:^2.0.0": - version: 2.0.0 - resolution: "dashify@npm:2.0.0" - checksum: 10c0/b9ab76cbd9739b6dba4359083cc9a670e6a0876f90ab3409b9984cf386b82a28a89009afe15d13ce62f97bc84ce49be2fe85f3a6791481a8d31e962cd0f0e710 - languageName: node - linkType: hard - -"data-uri-to-buffer@npm:^4.0.0": - version: 4.0.1 - resolution: "data-uri-to-buffer@npm:4.0.1" - checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b - languageName: node - linkType: hard - -"data-view-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-buffer@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.2" - checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c - languageName: node - linkType: hard - -"data-view-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-byte-length@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.2" - checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 - languageName: node - linkType: hard - -"data-view-byte-offset@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-offset@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 - languageName: node - linkType: hard - -"datauri@npm:^2.0.0": - version: 2.0.0 - resolution: "datauri@npm:2.0.0" - dependencies: - image-size: "npm:^0.7.3" - mimer: "npm:^1.0.0" - checksum: 10c0/3f70d6e51585657d12dc4e2342623998fc227b2464d87b25d440e2c6e996a1f67647d59025d3978ba1a38a24719d7eb3cd1656d3287ef93d9fe87b80aefded79 - languageName: node - linkType: hard - -"dateformat@npm:^3.0.3": - version: 3.0.3 - resolution: "dateformat@npm:3.0.3" - checksum: 10c0/2effb8bef52ff912f87a05e4adbeacff46353e91313ad1ea9ed31412db26849f5a0fcc7e3ce36dbfb84fc6c881a986d5694f84838ad0da7000d5150693e78678 - languageName: node - linkType: hard - -"debug@npm:2.6.9, debug@npm:^2.2.0": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: "npm:2.0.0" - checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7": - version: 4.4.0 - resolution: "debug@npm:4.4.0" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de - languageName: node - linkType: hard - -"debug@npm:^3.1.0, debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: "npm:^2.1.1" - checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a - languageName: node - linkType: hard - -"debug@npm:^4.4.1": - version: 4.4.1 - resolution: "debug@npm:4.4.1" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 - languageName: node - linkType: hard - -"debuglog@npm:^1.0.0": - version: 1.0.1 - resolution: "debuglog@npm:1.0.1" - checksum: 10c0/d98ac9abe6a528fcbb4d843b1caf5a9116998c76e1263d8ff4db2c086aa96fa7ea4c752a81050fa2e4304129ef330e6e4dc9dd4d47141afd7db80bf699f08219 - languageName: node - linkType: hard - -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: "npm:^1.1.0" - map-obj: "npm:^1.0.0" - checksum: 10c0/4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d - languageName: node - linkType: hard - -"decamelize@npm:^1.1.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"decompress-response@npm:^6.0.0": - version: 6.0.0 - resolution: "decompress-response@npm:6.0.0" - dependencies: - mimic-response: "npm:^3.1.0" - checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e - languageName: node - linkType: hard - -"dedent@npm:1.5.3": - version: 1.5.3 - resolution: "dedent@npm:1.5.3" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 - languageName: node - linkType: hard - -"dedent@npm:^1.6.0": - version: 1.6.0 - resolution: "dedent@npm:1.6.0" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/671b8f5e390dd2a560862c4511dd6d2638e71911486f78cb32116551f8f2aa6fcaf50579ffffb2f866d46b5b80fd72470659ca5760ede8f967619ef7df79e8a5 - languageName: node - linkType: hard - -"deep-extend@npm:^0.5.1": - version: 0.5.1 - resolution: "deep-extend@npm:0.5.1" - checksum: 10c0/a0b86d1ff2d62b7fe531a568bf5fef3f9fe477ada35e3d97310ab989cb588acde607283ef587a4552eaf05c3491045536ddf5741021523574d93de472c61d24f - languageName: node - linkType: hard - -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: "npm:^1.0.2" - checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a - languageName: node - linkType: hard - -"defer-to-connect@npm:^2.0.0": - version: 2.0.1 - resolution: "defer-to-connect@npm:2.0.1" - checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 - languageName: node - linkType: hard - -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.0.1" - checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 - languageName: node - linkType: hard - -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - object-keys: "npm:^1.1.1" - checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 - languageName: node - linkType: hard - -"denque@npm:^1.1.0": - version: 1.5.1 - resolution: "denque@npm:1.5.1" - checksum: 10c0/9e6fc1a63e1c9ded38325290302fef40e5ad28471ad8c66d68eaea623ef847bd25fc75a7c3f47396206dc967922615999066470a364e1786f2758d61337872b7 - languageName: node - linkType: hard - -"depd@npm:2.0.0, depd@npm:~2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c - languageName: node - linkType: hard - -"deprecation@npm:^2.0.0": - version: 2.3.1 - resolution: "deprecation@npm:2.3.1" - checksum: 10c0/23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032 - languageName: node - linkType: hard - -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 - languageName: node - linkType: hard - -"detect-indent@npm:^5.0.0": - version: 5.0.0 - resolution: "detect-indent@npm:5.0.0" - checksum: 10c0/58d985dd5b4d5e5aad6fe7d8ecc74538fa92c807c894794b8505569e45651bf01a38755b65d9d3d17e512239a26d3131837cbef43cf4226968d5abf175bbcc9d - languageName: node - linkType: hard - -"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": - version: 2.0.3 - resolution: "detect-libc@npm:2.0.3" - checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 - languageName: node - linkType: hard - -"detect-newline@npm:^3.1.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d - languageName: node - linkType: hard - -"dicer@npm:0.3.0": - version: 0.3.0 - resolution: "dicer@npm:0.3.0" - dependencies: - streamsearch: "npm:0.1.2" - checksum: 10c0/4486f0448233145216cfadd5f6bbb4c26c3a28824da5344322b06051632e99d6af2b44f893fa8b30f1749ad175b4e565d301c760d0437226d9e41ccdb6546f35 - languageName: node - linkType: hard - -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 - languageName: node - linkType: hard - -"doctypes@npm:^1.1.0": - version: 1.1.0 - resolution: "doctypes@npm:1.1.0" - checksum: 10c0/b3f9d597ad8b9ac6aeba9d64df61f0098174f7570e3d34f7ee245ebc736c7bee122d9738a18e22010b98983fd9a340d63043d3841f02d8a7742a2d96d2c72610 - languageName: node - linkType: hard - -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: "npm:^2.0.1" - entities: "npm:^2.0.0" - checksum: 10c0/5cb595fb77e1a23eca56742f47631e6f4af66ce1982c7ed28b3d0ef21f1f50304c067adc29d3eaf824c572be022cee88627d0ac9b929408f24e923f3c7bed37b - languageName: node - linkType: hard - -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.2.0" - entities: "npm:^2.0.0" - checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 - languageName: node - linkType: hard - -"dom-serializer@npm:^2.0.0": - version: 2.0.0 - resolution: "dom-serializer@npm:2.0.0" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.2" - entities: "npm:^4.2.0" - checksum: 10c0/d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 - languageName: node - linkType: hard - -"dom-serializer@npm:~0.1.0": - version: 0.1.1 - resolution: "dom-serializer@npm:0.1.1" - dependencies: - domelementtype: "npm:^1.3.0" - entities: "npm:^1.1.1" - checksum: 10c0/bb710d0a49dbe7b1019e8bf314102495e8894b9da188d00187c0ac52939ded630bc5f9eacc97bfa462d535cd321c734c0b02fefd5e4d93162ab886dccc6666f3 - languageName: node - linkType: hard - -"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 10c0/6d4f5761060a21eaf3c96545501e9d188745c7e1c31b8d141bf15d8748feeadba868f4ea32877751b8678b286fb1afbe6ae905ca3fb8f0214d8322e482cdbec0 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 - languageName: node - linkType: hard - -"domhandler@npm:2.3": - version: 2.3.0 - resolution: "domhandler@npm:2.3.0" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/f434a1c08392821751b85081fd8ff11b17d7fd6e5da59335af87ee038b816be24d35a12f45d85034e3e137158beb031d5a3df21fcd05a7dd4490e2f01a6d0e82 - languageName: node - linkType: hard - -"domhandler@npm:^2.3.0": - version: 2.4.2 - resolution: "domhandler@npm:2.4.2" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/6670cab73e97e3c6771dcf22b537db3f6a0be0ad6b370f03bb5f1b585d3b563d326787fdabe1190b7ca9d81c804e9b3f8a1431159c27c44f6c05f94afa92be2d - languageName: node - linkType: hard - -"domhandler@npm:^3.0.0": - version: 3.3.0 - resolution: "domhandler@npm:3.3.0" - dependencies: - domelementtype: "npm:^2.0.1" - checksum: 10c0/376e6462a6144121f6ae50c9c1b8e0b22d2e0c68f9fb2ef6e57a5f4f9395854b1258cb638c58b171ee291359a5f41a4a57f403954db976484a59ffcee4c1e405 - languageName: node - linkType: hard - -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: "npm:^2.2.0" - checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b - languageName: node - linkType: hard - -"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": - version: 5.0.3 - resolution: "domhandler@npm:5.0.3" - dependencies: - domelementtype: "npm:^2.3.0" - checksum: 10c0/bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a - languageName: node - linkType: hard - -"domutils@npm:1.4": - version: 1.4.3 - resolution: "domutils@npm:1.4.3" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/ce345ccc3a964aa6f5415a4fd9b3a11db743e8ac5c4383d7ad3dd53fe7a8f23ee03dca580209d8005f49261ddab976082bcd5652e913bcb6044b8c959fb5401b - languageName: node - linkType: hard - -"domutils@npm:1.5, domutils@npm:1.5.1": - version: 1.5.1 - resolution: "domutils@npm:1.5.1" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10c0/8707a18c974be54d33fd846d174d523ddf4955b2fcc1ec713cbe6ff490f60da22106b153fea6269332477eb81dc1a25a83f5b2afaf78b6dc9e2161fd7b80f7ba - languageName: node - linkType: hard - -"domutils@npm:^1.5.1": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10c0/437fcd2d6d6be03f488152e73c6f953e289c58496baa22be9626b2b46f9cfd40486ae77d144487ff6b102929a3231cdb9a8bf8ef485fb7b7c30c985daedc77eb - languageName: node - linkType: hard - -"domutils@npm:^2.0.0, domutils@npm:^2.5.2, domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: "npm:^1.0.1" - domelementtype: "npm:^2.2.0" - domhandler: "npm:^4.2.0" - checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db - languageName: node - linkType: hard - -"domutils@npm:^3.0.1": - version: 3.2.2 - resolution: "domutils@npm:3.2.2" - dependencies: - dom-serializer: "npm:^2.0.0" - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - checksum: 10c0/47938f473b987ea71cd59e59626eb8666d3aa8feba5266e45527f3b636c7883cca7e582d901531961f742c519d7514636b7973353b648762b2e3bedbf235fada - languageName: node - linkType: hard - -"dot-prop@npm:^5.1.0": - version: 5.3.0 - resolution: "dot-prop@npm:5.3.0" - dependencies: - is-obj: "npm:^2.0.0" - checksum: 10c0/93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 - languageName: node - linkType: hard - -"dotenv-expand@npm:~10.0.0": - version: 10.0.0 - resolution: "dotenv-expand@npm:10.0.0" - checksum: 10c0/298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e - languageName: node - linkType: hard - -"dotenv-expand@npm:~11.0.6": - version: 11.0.7 - resolution: "dotenv-expand@npm:11.0.7" - dependencies: - dotenv: "npm:^16.4.5" - checksum: 10c0/d80b8a7be085edf351270b96ac0e794bc3ddd7f36157912939577cb4d33ba6492ebee349d59798b71b90e36f498d24a2a564fb4aa00073b2ef4c2a3a49c467b1 - languageName: node - linkType: hard - -"dotenv-flow@npm:^3.1.0": - version: 3.3.0 - resolution: "dotenv-flow@npm:3.3.0" - dependencies: - dotenv: "npm:^8.6.0" - checksum: 10c0/64f367f66532bdd2abad84360ff37668d8718e9362b442ba293ed518b573449c6e8d15e3e50001f7bac4f2c932287a5c8c5e98435b252f230f67bcc30cd27b87 - languageName: node - linkType: hard - -"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": - version: 16.4.7 - resolution: "dotenv@npm:16.4.7" - checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462 - languageName: node - linkType: hard - -"dotenv@npm:^8.6.0": - version: 8.6.0 - resolution: "dotenv@npm:8.6.0" - checksum: 10c0/6750431dea8efbd54b9f2d9681b04e1ccc7989486461dcf058bb708d9e3d63b04115fcdf8840e38ad1e24a4a2e1e7c1560626c5e3ac7bc09371b127c49e2d45f - languageName: node - linkType: hard - -"dotenv@npm:~16.3.1": - version: 16.3.2 - resolution: "dotenv@npm:16.3.2" - checksum: 10c0/a87d62cef0810b670cb477db1a24a42a093b6b428c9e65c185ce1d6368ad7175234b13547718ba08da18df43faae4f814180cc0366e11be1ded2277abc4dd22e - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"duplexer@npm:^0.1.1": - version: 0.1.2 - resolution: "duplexer@npm:0.1.2" - checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"ecc-jsbn@npm:~0.1.1": - version: 0.1.2 - resolution: "ecc-jsbn@npm:0.1.2" - dependencies: - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.1.0" - checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 - languageName: node - linkType: hard - -"ecdsa-sig-formatter@npm:1.0.11": - version: 1.0.11 - resolution: "ecdsa-sig-formatter@npm:1.0.11" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c - languageName: node - linkType: hard - -"ed25519-signature-2018-context@npm:^1.1.0": - version: 1.1.0 - resolution: "ed25519-signature-2018-context@npm:1.1.0" - checksum: 10c0/c0fb62dd448de59f9cb45ac55f026b793b8da9c0dbe83014d0ddf73d50ea78e37e6bf88b9445f2301a6ead3a42031ef5839f625e3186169d07897e19a056de7c - languageName: node - linkType: hard - -"ed25519-signature-2020-context@npm:^1.1.0": - version: 1.1.0 - resolution: "ed25519-signature-2020-context@npm:1.1.0" - checksum: 10c0/7e5fba0ad8c1979412c45439654c0e1ac05372305760ad7c53e6b8d9a8106ed2f109e57ef19a7f0b23ea0efd69fee9c045d38280d18be11ef3dd68a433e55c46 - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 - languageName: node - linkType: hard - -"ejs@npm:^3.1.7": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.199": - version: 1.5.199 - resolution: "electron-to-chromium@npm:1.5.199" - checksum: 10c0/5586d20455407edc583e33422e370bbdc07913d8f5c73da2ae1c6adcc79c3be7384ecaf893978027cb26a410c1354f199a05edb99b1ab03dd0346e2201525148 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.73": - version: 1.5.84 - resolution: "electron-to-chromium@npm:1.5.84" - checksum: 10c0/8362d556360eba420ea3475a7878c8fa8507a42c4ebfbf44108f6acc4edbe30a1cde79e95613bdc9ae6e7d73bf1776347cf7f615c1a220f63e34a0fa029568e0 - languageName: node - linkType: hard - -"email-templates@npm:^2.7.1": - version: 2.7.1 - resolution: "email-templates@npm:2.7.1" - dependencies: - bluebird: "npm:^3.0.0" - consolidate: "npm:^0.14.2" - debug: "npm:^2.2.0" - glob: "npm:^6.0.0" - juice: "npm:^4.1.0" - lodash: "npm:^4.0.1" - checksum: 10c0/dad652679e8da4ae47a86fa8d7bcd708fab4aa866b4a397605b7f55a437d2cf8b3b05d9dc4a04d39d2773364d09fe17e092b1e9b3673eb8c1f9d97735b4607d0 - languageName: node - linkType: hard - -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec - languageName: node - linkType: hard - -"encodeurl@npm:~2.0.0": - version: 2.0.0 - resolution: "encodeurl@npm:2.0.0" - checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: "npm:^1.4.0" - checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.15.0": - version: 5.18.0 - resolution: "enhanced-resolve@npm:5.18.0" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10c0/5fcc264a6040754ab5b349628cac2bb5f89cee475cbe340804e657a5b9565f70e6aafb338d5895554eb0ced9f66c50f38a255274a0591dcb64ee17c549c459ce - languageName: node - linkType: hard - -"enquirer@npm:~2.3.6": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: "npm:^4.1.1" - checksum: 10c0/8e070e052c2c64326a2803db9084d21c8aaa8c688327f133bf65c4a712586beb126fd98c8a01cfb0433e82a4bd3b6262705c55a63e0f7fb91d06b9cedbde9a11 - languageName: node - linkType: hard - -"entities@npm:1.0": - version: 1.0.0 - resolution: "entities@npm:1.0.0" - checksum: 10c0/fd382add860bab507c942a054ef98445028bf988d16f53cbae24c70533c280d4ea116a5bc6308f6ca66901818faf4f495316f9873c6337af7cffaaf3859da407 - languageName: node - linkType: hard - -"entities@npm:^1.1.1, entities@npm:~1.1.1": - version: 1.1.2 - resolution: "entities@npm:1.1.2" - checksum: 10c0/5b12fa8c4fb942f88af6f8791bbe7be0a59ebd91c8933cee091d94455efd1eeb200418c7b1bc8dd0f74cdd4db8cf4538eb043db14cfd1919130c25d8c6095215 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 - languageName: node - linkType: hard - -"entities@npm:^3.0.1": - version: 3.0.1 - resolution: "entities@npm:3.0.1" - checksum: 10c0/2d93f48fd86de0b0ed8ee34456aa47b4e74a916a5e663cfcc7048302e2c7e932002926daf5a00ad6d5691e3c90673a15d413704d86d7e1b9532f9bc00d975590 - languageName: node - linkType: hard - -"entities@npm:^4.2.0, entities@npm:^4.4.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"envinfo@npm:7.13.0": - version: 7.13.0 - resolution: "envinfo@npm:7.13.0" - bin: - envinfo: dist/cli.js - checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce - languageName: node - linkType: hard - -"es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9": - version: 1.23.9 - resolution: "es-abstract@npm:1.23.9" - dependencies: - array-buffer-byte-length: "npm:^1.0.2" - arraybuffer.prototype.slice: "npm:^1.0.4" - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - data-view-buffer: "npm:^1.0.2" - data-view-byte-length: "npm:^1.0.2" - data-view-byte-offset: "npm:^1.0.1" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-set-tostringtag: "npm:^2.1.0" - es-to-primitive: "npm:^1.3.0" - function.prototype.name: "npm:^1.1.8" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.0" - get-symbol-description: "npm:^1.1.0" - globalthis: "npm:^1.0.4" - gopd: "npm:^1.2.0" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - internal-slot: "npm:^1.1.0" - is-array-buffer: "npm:^3.0.5" - is-callable: "npm:^1.2.7" - is-data-view: "npm:^1.0.2" - is-regex: "npm:^1.2.1" - is-shared-array-buffer: "npm:^1.0.4" - is-string: "npm:^1.1.1" - is-typed-array: "npm:^1.1.15" - is-weakref: "npm:^1.1.0" - math-intrinsics: "npm:^1.1.0" - object-inspect: "npm:^1.13.3" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.7" - own-keys: "npm:^1.0.1" - regexp.prototype.flags: "npm:^1.5.3" - safe-array-concat: "npm:^1.1.3" - safe-push-apply: "npm:^1.0.0" - safe-regex-test: "npm:^1.1.0" - set-proto: "npm:^1.0.0" - string.prototype.trim: "npm:^1.2.10" - string.prototype.trimend: "npm:^1.0.9" - string.prototype.trimstart: "npm:^1.0.8" - typed-array-buffer: "npm:^1.0.3" - typed-array-byte-length: "npm:^1.0.3" - typed-array-byte-offset: "npm:^1.0.4" - typed-array-length: "npm:^1.0.7" - unbox-primitive: "npm:^1.1.0" - which-typed-array: "npm:^1.1.18" - checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b - languageName: node - linkType: hard - -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 10c0/4b7617d3fbd460d6f051f684ceca6cf7e88e6724671d9480388d3ecdd72119ddaa46ca31f2c69c5426a82e4b3091c1e81867c71dcdc453565cd90005ff2c382d - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.0.0, es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.5.3": - version: 1.6.0 - resolution: "es-module-lexer@npm:1.6.0" - checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.2": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" - dependencies: - hasown: "npm:^2.0.0" - checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.3.0": - version: 1.3.0 - resolution: "es-to-primitive@npm:1.3.0" - dependencies: - is-callable: "npm:^1.2.7" - is-date-object: "npm:^1.0.5" - is-symbol: "npm:^1.0.4" - checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b - languageName: node - linkType: hard - -"es6-error@npm:^4.1.1": - version: 4.1.1 - resolution: "es6-error@npm:4.1.1" - checksum: 10c0/357663fb1e845c047d548c3d30f86e005db71e122678f4184ced0693f634688c3f3ef2d7de7d4af732f734de01f528b05954e270f06aa7d133679fb9fe6600ef - languageName: node - linkType: hard - -"escalade@npm:^3.1.1, escalade@npm:^3.2.0": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 - languageName: node - linkType: hard - -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - -"eslint-config-airbnb-base@npm:^15.0.0": - version: 15.0.0 - resolution: "eslint-config-airbnb-base@npm:15.0.0" - dependencies: - confusing-browser-globals: "npm:^1.0.10" - object.assign: "npm:^4.1.2" - object.entries: "npm:^1.1.5" - semver: "npm:^6.3.0" - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f - languageName: node - linkType: hard - -"eslint-config-airbnb@npm:^19.0.4": - version: 19.0.4 - resolution: "eslint-config-airbnb@npm:19.0.4" - dependencies: - eslint-config-airbnb-base: "npm:^15.0.0" - object.assign: "npm:^4.1.2" - object.entries: "npm:^1.1.5" - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.28.0 - eslint-plugin-react-hooks: ^4.3.0 - checksum: 10c0/867feeda45c4b480b1b8eff8fabc1bb107e837da8b48e5039e0c175ae6ad34af383b1924fc163bbfcef24a324e6651b1515e5bd12cbcbb19535a8838e2544a02 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^9.1.0": - version: 9.1.0 - resolution: "eslint-config-prettier@npm:9.1.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: "npm:^3.2.7" - is-core-module: "npm:^2.13.0" - resolve: "npm:^1.22.4" - checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 - languageName: node - linkType: hard - -"eslint-import-resolver-typescript@npm:^3.6.1": - version: 3.7.0 - resolution: "eslint-import-resolver-typescript@npm:3.7.0" - dependencies: - "@nolyfill/is-core-module": "npm:1.0.39" - debug: "npm:^4.3.7" - enhanced-resolve: "npm:^5.15.0" - fast-glob: "npm:^3.3.2" - get-tsconfig: "npm:^4.7.5" - is-bun-module: "npm:^1.0.2" - is-glob: "npm:^4.0.3" - stable-hash: "npm:^0.0.4" - peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - eslint-plugin-import-x: "*" - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - checksum: 10c0/b1dec542a31486b3b5730f71f08a8ee2ac4915dbc4aa1493fd15bc8fcadcb029772ab39a425824c235045b3a7e629290a339d4a7e7f3dd32b24e715106352d40 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.12.0": - version: 2.12.0 - resolution: "eslint-module-utils@npm:2.12.0" - dependencies: - debug: "npm:^3.2.7" - peerDependenciesMeta: - eslint: - optional: true - checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 - languageName: node - linkType: hard - -"eslint-plugin-es@npm:^3.0.0": - version: 3.0.1 - resolution: "eslint-plugin-es@npm:3.0.1" - dependencies: - eslint-utils: "npm:^2.0.0" - regexpp: "npm:^3.0.0" - peerDependencies: - eslint: ">=4.19.1" - checksum: 10c0/12ae730aa9603e680af048e1653aac15e529411b68b8d0da6e290700b17c695485af7c3f5360f531f80970786cab7288c2c1d4a58c35ec1bb89649897c016c4a - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.29.1": - version: 2.31.0 - resolution: "eslint-plugin-import@npm:2.31.0" - dependencies: - "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.8" - array.prototype.findlastindex: "npm:^1.2.5" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" - debug: "npm:^3.2.7" - doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.0" - hasown: "npm:^2.0.2" - is-core-module: "npm:^2.15.1" - is-glob: "npm:^4.0.3" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.0" - semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.8" - tsconfig-paths: "npm:^3.15.0" - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a - languageName: node - linkType: hard - -"eslint-plugin-jest@npm:^27.9.0": - version: 27.9.0 - resolution: "eslint-plugin-jest@npm:27.9.0" - dependencies: - "@typescript-eslint/utils": "npm:^5.10.0" - peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: "*" - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 10c0/b8b09f7d8ba3d84a8779a6e95702a6e4dce45ab034e4edf5ddb631e77cd38dcdf791dfd9228e0a0d1d80d1eb2d278deb62ad2ec39f10fb8fd43cec07304e0c38 - languageName: node - linkType: hard - -"eslint-plugin-jsdoc@npm:^48.2.1": - version: 48.11.0 - resolution: "eslint-plugin-jsdoc@npm:48.11.0" - dependencies: - "@es-joy/jsdoccomment": "npm:~0.46.0" - are-docs-informative: "npm:^0.0.2" - comment-parser: "npm:1.4.1" - debug: "npm:^4.3.5" - escape-string-regexp: "npm:^4.0.0" - espree: "npm:^10.1.0" - esquery: "npm:^1.6.0" - parse-imports: "npm:^2.1.1" - semver: "npm:^7.6.3" - spdx-expression-parse: "npm:^4.0.0" - synckit: "npm:^0.9.1" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/f78bac109e62f838c14f90ebd572a06a865f2896a16201c9324cb92be25b5ba8deb54ee1d8ea36232ee53a41c177d5d5ac80662c0fe2479d1e1e1e7633385659 - languageName: node - linkType: hard - -"eslint-plugin-node@npm:^11.1.0": - version: 11.1.0 - resolution: "eslint-plugin-node@npm:11.1.0" - dependencies: - eslint-plugin-es: "npm:^3.0.0" - eslint-utils: "npm:^2.0.0" - ignore: "npm:^5.1.1" - minimatch: "npm:^3.0.4" - resolve: "npm:^1.10.1" - semver: "npm:^6.1.0" - peerDependencies: - eslint: ">=5.16.0" - checksum: 10c0/c7716adac4020cb852fd2410dcd8bdb13a227004de77f96d7f9806d0cf2274f24e0920a7ca73bcd72d90003696c1f17fdd9fe3ca218e64ee03dc2b840e4416fa - languageName: node - linkType: hard - -"eslint-plugin-prettier@npm:^5.1.3": - version: 5.2.3 - resolution: "eslint-plugin-prettier@npm:5.2.3" - dependencies: - prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.9.1" - peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" - peerDependenciesMeta: - "@types/eslint": - optional: true - eslint-config-prettier: - optional: true - checksum: 10c0/60d9c03491ec6080ac1d71d0bee1361539ff6beb9b91ac98cfa7176c9ed52b7dbe7119ebee5b441b479d447d17d802a4a492ee06095ef2f22c460e3dd6459302 - languageName: node - linkType: hard - -"eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^4.1.1" - checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 - languageName: node - linkType: hard - -"eslint-utils@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" - dependencies: - eslint-visitor-keys: "npm:^1.1.0" - checksum: 10c0/69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^1.1.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 - languageName: node - linkType: hard - -"eslint@npm:^8.2.0": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.1" - "@humanwhocodes/config-array": "npm:^0.13.0" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" - bin: - eslint: bin/eslint.js - checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 - languageName: node - linkType: hard - -"espree@npm:^10.1.0": - version: 10.3.0 - resolution: "espree@npm:10.3.0" - dependencies: - acorn: "npm:^8.14.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2, esquery@npm:^1.6.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 - languageName: node - linkType: hard - -"etag@npm:^1.8.1, etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 - languageName: node - linkType: hard - -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b - languageName: node - linkType: hard - -"eventemitter2@npm:^6.4.9": - version: 6.4.9 - resolution: "eventemitter2@npm:6.4.9" - checksum: 10c0/b2adf7d9f1544aa2d95ee271b0621acaf1e309d85ebcef1244fb0ebc7ab0afa6ffd5e371535d0981bc46195ad67fd6ff57a8d1db030584dee69aa5e371a27ea7 - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.4": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b - languageName: node - linkType: hard - -"events@npm:^3.3.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 - languageName: node - linkType: hard - -"execa@npm:5.0.0": - version: 5.0.0 - resolution: "execa@npm:5.0.0" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/e110add7ca0de63aea415385ebad7236c8de281d5d9a916dbd69f59009dac3d5d631e6252c2ea5d0258220b0d22acf25649b2caf05fa162eaa1401339fc69ba4 - languageName: node - linkType: hard - -"execa@npm:^5.1.1": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f - languageName: node - linkType: hard - -"exit-x@npm:^0.2.2": - version: 0.2.2 - resolution: "exit-x@npm:0.2.2" - checksum: 10c0/212a7a095ca5540e9581f1ef2d1d6a40df7a6027c8cc96e78ce1d16b86d1a88326d4a0eff8dff2b5ec1e68bb0c1edd5d0dfdde87df1869bf7514d4bc6a5cbd72 - languageName: node - linkType: hard - -"expand-template@npm:^2.0.3": - version: 2.0.3 - resolution: "expand-template@npm:2.0.3" - checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 - languageName: node - linkType: hard - -"expect-type@npm:^1.2.2": - version: 1.2.2 - resolution: "expect-type@npm:1.2.2" - checksum: 10c0/6019019566063bbc7a690d9281d920b1a91284a4a093c2d55d71ffade5ac890cf37a51e1da4602546c4b56569d2ad2fc175a2ccee77d1ae06cb3af91ef84f44b - languageName: node - linkType: hard - -"expect@npm:30.0.5, expect@npm:^30.0.0": - version: 30.0.5 - resolution: "expect@npm:30.0.5" - dependencies: - "@jest/expect-utils": "npm:30.0.5" - "@jest/get-type": "npm:30.0.1" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - checksum: 10c0/e08e4ced2856a0898b3a4e8d09aab7f8e2212cde701e41a560c3ab7e9053517947ff1a762fc425dbe0c48ed54e131aa7190de67a402f98b4e5ada23eb21c0a9f - languageName: node - linkType: hard - -"expo-server-sdk@npm:^3.4.0": - version: 3.13.0 - resolution: "expo-server-sdk@npm:3.13.0" - dependencies: - node-fetch: "npm:^2.6.0" - promise-limit: "npm:^2.7.0" - promise-retry: "npm:^2.0.1" - checksum: 10c0/08fbebd2d6a38ff9af37c9dc0a3d9a33c16dff6908078716cd887fbf8d08d50167d9fa4ec7713e452935c6ede8f29233d533b166e91118eb0db56280282645f4 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 - languageName: node - linkType: hard - -"express-session@npm:^1.17.0": - version: 1.18.1 - resolution: "express-session@npm:1.18.1" - dependencies: - cookie: "npm:0.7.2" - cookie-signature: "npm:1.0.7" - debug: "npm:2.6.9" - depd: "npm:~2.0.0" - on-headers: "npm:~1.0.2" - parseurl: "npm:~1.3.3" - safe-buffer: "npm:5.2.1" - uid-safe: "npm:~2.1.5" - checksum: 10c0/7999f128df1528430044c97bb1aac95093afaee86c5fa54b2890c4aad9898d79745301f8c90c2df057d6dfe7af7f8ee220340bf5eb53dca5eff37e52cc2fbec7 - languageName: node - linkType: hard - -"extend@npm:^3.0.0, extend@npm:~3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 - languageName: node - linkType: hard - -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"extsprintf@npm:1.3.0": - version: 1.3.0 - resolution: "extsprintf@npm:1.3.0" - checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 - languageName: node - linkType: hard - -"extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-diff@npm:^1.1.2": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 - languageName: node - linkType: hard - -"fastest-validator@npm:^1.19.0": - version: 1.19.0 - resolution: "fastest-validator@npm:1.19.0" - checksum: 10c0/86dc0620a3cb593378f90017e45c4843a9f40442a1df84ce76cdf68f205dbf45a194aee1ed68d25391ec15ad4b23febf3e4fda9d2f6218e9655cc649beaf0d15 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.18.0 - resolution: "fastq@npm:1.18.0" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.2": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: "npm:2.1.1" - checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 - languageName: node - linkType: hard - -"fdir@npm:^6.4.4": - version: 6.4.6 - resolution: "fdir@npm:6.4.6" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 - languageName: node - linkType: hard - -"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": - version: 3.2.0 - resolution: "fetch-blob@npm:3.2.0" - dependencies: - node-domexception: "npm:^1.0.0" - web-streams-polyfill: "npm:^3.0.3" - checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 - languageName: node - linkType: hard - -"figures@npm:3.2.0, figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd - languageName: node - linkType: hard - -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: "npm:^5.0.1" - checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^2.0.0": - version: 2.1.0 - resolution: "find-up@npm:2.1.0" - dependencies: - locate-path: "npm:^2.0.0" - checksum: 10c0/c080875c9fe28eb1962f35cbe83c683796a0321899f1eed31a37577800055539815de13d53495049697d3ba313013344f843bb9401dd337a1b832be5edfc6840 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.3" - rimraf: "npm:^3.0.2" - checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 - languageName: node - linkType: hard - -"flat@npm:^5.0.2": - version: 5.0.2 - resolution: "flat@npm:5.0.2" - bin: - flat: cli.js - checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.3.2 - resolution: "flatted@npm:3.3.2" - checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6, follow-redirects@npm:^1.5.1": - version: 1.15.9 - resolution: "follow-redirects@npm:1.15.9" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: "npm:^1.1.3" - checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 - languageName: node - linkType: hard - -"forever-agent@npm:~0.6.1": - version: 0.6.1 - resolution: "forever-agent@npm:0.6.1" - checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c - languageName: node - linkType: hard - -"form-data@npm:^2.3.1": - version: 2.5.2 - resolution: "form-data@npm:2.5.2" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - safe-buffer: "npm:^5.2.1" - checksum: 10c0/af7cb13fc8423ff95fd59c62d101c84b5458a73e1e426b0bc459afbf5b93b1e447dc6c225ac31c6df59f36b209904a3f1a10b4eb9e7a17e0fe394019749142cc - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.1 - resolution: "form-data@npm:4.0.1" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - mime-types: "npm:^2.1.12" - checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"form-data@npm:~2.3.2": - version: 2.3.3 - resolution: "form-data@npm:2.3.3" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 - languageName: node - linkType: hard - -"formdata-polyfill@npm:^4.0.10": - version: 4.0.10 - resolution: "formdata-polyfill@npm:4.0.10" - dependencies: - fetch-blob: "npm:^3.1.2" - checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 - languageName: node - linkType: hard - -"formidable@npm:^1.2.0": - version: 1.2.6 - resolution: "formidable@npm:1.2.6" - checksum: 10c0/9ebc45f434785051d4ecab28be3356c7a172a112119f5dd7aafc393ab7f6a6f3baa2446e5215ce21bf094c4c24dfb4bf483117d07961862e04ad11a25b9b577b - languageName: node - linkType: hard - -"fresh@npm:0.5.2, fresh@npm:^0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a - languageName: node - linkType: hard - -"front-matter@npm:^4.0.2": - version: 4.0.2 - resolution: "front-matter@npm:4.0.2" - dependencies: - js-yaml: "npm:^3.13.1" - checksum: 10c0/7a0df5ca37428dd563c057bc17a8940481fe53876609bcdc443a02ce463c70f1842c7cb4628b80916de46a253732794b36fb6a31105db0f185698a93acee4011 - languageName: node - linkType: hard - -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 - languageName: node - linkType: hard - -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": - version: 11.3.0 - resolution: "fs-extra@npm:11.3.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a - languageName: node - linkType: hard - -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 - languageName: node - linkType: hard - -"fs-extra@npm:^9.0.1": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: "npm:^1.0.0" - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"fsevents@npm:^2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": - version: 1.1.8 - resolution: "function.prototype.name@npm:1.1.8" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - functions-have-names: "npm:^1.2.3" - hasown: "npm:^2.0.2" - is-callable: "npm:^1.2.7" - checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.3": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca - languageName: node - linkType: hard - -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: "npm:^1.0.3 || ^2.0.0" - color-support: "npm:^1.1.2" - console-control-strings: "npm:^1.0.0" - has-unicode: "npm:^2.0.1" - object-assign: "npm:^4.1.1" - signal-exit: "npm:^3.0.0" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - wide-align: "npm:^1.1.2" - checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": - version: 1.3.0 - resolution: "get-intrinsic@npm:1.3.0" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be - languageName: node - linkType: hard - -"get-pkg-repo@npm:^4.2.1": - version: 4.2.1 - resolution: "get-pkg-repo@npm:4.2.1" - dependencies: - "@hutson/parse-repository-url": "npm:^3.0.0" - hosted-git-info: "npm:^4.0.0" - through2: "npm:^2.0.0" - yargs: "npm:^16.2.0" - bin: - get-pkg-repo: src/cli.js - checksum: 10c0/1338d2e048a594da4a34e7dd69d909376d72784f5ba50963a242b4b35db77533786f618b3f6a9effdee2af20af4917a3b7cf12533b4575d7f9c163886be1fb62 - languageName: node - linkType: hard - -"get-port@npm:5.1.1, get-port@npm:^5.1.1": - version: 5.1.1 - resolution: "get-port@npm:5.1.1" - checksum: 10c0/2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c - languageName: node - linkType: hard - -"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"get-stdin@npm:^7.0.0": - version: 7.0.0 - resolution: "get-stdin@npm:7.0.0" - checksum: 10c0/84d7850d17727f14d582670c4222b167317da43b296b88717abca989b6192eb80f66ca62833d63e749b3c984f3f9113cb6794dc9ecccb29969b8162565162033 - languageName: node - linkType: hard - -"get-stream@npm:6.0.0": - version: 6.0.0 - resolution: "get-stream@npm:6.0.0" - checksum: 10c0/7cd835cb9180041e7be2cc3de236e5db9f2144515921aeb60ae78d3a46f9944439d654c2aae5b0191e41eb6e2500f0237494a2e6c0790367183f788d1c9f6dd6 - languageName: node - linkType: hard - -"get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" - dependencies: - pump: "npm:^3.0.0" - checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.1.0": - version: 1.1.0 - resolution: "get-symbol-description@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b - languageName: node - linkType: hard - -"get-tsconfig@npm:^4.7.5": - version: 4.9.0 - resolution: "get-tsconfig@npm:4.9.0" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/b1b83a2f65aa589cd99036c21de928bea7424be6575a2736cb4de5fb5760c874d64ac69809f4691c1262a4e3c72c646fd2cb758e406acbff7f37ee86301943ee - languageName: node - linkType: hard - -"getpass@npm:^0.1.1": - version: 0.1.7 - resolution: "getpass@npm:0.1.7" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f - languageName: node - linkType: hard - -"git-raw-commits@npm:^3.0.0": - version: 3.0.0 - resolution: "git-raw-commits@npm:3.0.0" - dependencies: - dargs: "npm:^7.0.0" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - git-raw-commits: cli.js - checksum: 10c0/2a5db2e4b5b1ef7b6ecbdc175e559920a5400cbdb8d36f130aaef3588bfd74d8650b354a51ff89e0929eadbb265a00078a6291ff26248a525f0b2f079b001bf6 - languageName: node - linkType: hard - -"git-remote-origin-url@npm:^2.0.0": - version: 2.0.0 - resolution: "git-remote-origin-url@npm:2.0.0" - dependencies: - gitconfiglocal: "npm:^1.0.0" - pify: "npm:^2.3.0" - checksum: 10c0/3a846ce98ed36b2d0b801e8ec1ab299a236cfc6fa264bfdf9f42301abfdfd8715c946507fd83a10b9db449eb609ac6f8a2a341daf52e3af0000367487f486355 - languageName: node - linkType: hard - -"git-semver-tags@npm:^5.0.0": - version: 5.0.1 - resolution: "git-semver-tags@npm:5.0.1" - dependencies: - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - bin: - git-semver-tags: cli.js - checksum: 10c0/7cacba2f4ac19c0ccb8e6bb7301409376e5a2cc178692667afff453e6fe81f79b5f3f5040343e2be127a2f34977528d354de2aa32430917e90b64884debd3102 - languageName: node - linkType: hard - -"git-up@npm:^7.0.0": - version: 7.0.0 - resolution: "git-up@npm:7.0.0" - dependencies: - is-ssh: "npm:^1.4.0" - parse-url: "npm:^8.1.0" - checksum: 10c0/a3fa02e1a63c7c824b5ebbf23f4a9a6b34dd80031114c5dd8adb7ef53493642e39d3d80dfef4025a452128400c35c2c138d20a0f6ae5d7d7ef70d9ba13083d34 - languageName: node - linkType: hard - -"git-url-parse@npm:14.0.0": - version: 14.0.0 - resolution: "git-url-parse@npm:14.0.0" - dependencies: - git-up: "npm:^7.0.0" - checksum: 10c0/d360cf23c6278e302b74603f3dc490c3fe22e533d58b7f35e0295fad9af209ce5046a55950ccbf2f0d18de7931faefb4353e3f3fd3dda87fce77b409d48e0ba9 - languageName: node - linkType: hard - -"gitconfiglocal@npm:^1.0.0": - version: 1.0.0 - resolution: "gitconfiglocal@npm:1.0.0" - dependencies: - ini: "npm:^1.3.2" - checksum: 10c0/cfcb16344834113199f209f2758ced778dc30e075ddb49b5dde659b4dd2deadee824db0a1b77e1303cb594d9e8b2240da18c67705f657aa76affb444aa349005 - languageName: node - linkType: hard - -"github-from-package@npm:0.0.0": - version: 0.0.0 - resolution: "github-from-package@npm:0.0.0" - checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 - languageName: node - linkType: hard - -"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:7.1.4": - version: 7.1.4 - resolution: "glob@npm:7.1.4" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.0.4" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/7f6fcbf600eb2298cce34c65f6d8bbe6933ddd4f88aa5b38a9c6feec82b615bb33b63b120725303e89c4b50284413c21d2ff883414717a5c7d0c9f7cd7a0e5fe - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e - languageName: node - linkType: hard - -"glob@npm:^6.0.0": - version: 6.0.4 - resolution: "glob@npm:6.0.4" - dependencies: - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:2 || 3" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/520146ebce0f4594b8357338f86281b38ee14214debce398a2902176a28f18e0f98911ea48516d85022de64fbbaa57f074aa13715d1daa5d70e21b82cea22183 - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"glob@npm:^9.2.0": - version: 9.3.5 - resolution: "glob@npm:9.3.5" - dependencies: - fs.realpath: "npm:^1.0.0" - minimatch: "npm:^8.0.2" - minipass: "npm:^4.2.4" - path-scurry: "npm:^1.6.1" - checksum: 10c0/2f6c2b9ee019ee21dc258ae97a88719614591e4c979cb4580b1b9df6f0f778a3cb38b4bdaf18dfa584637ea10f89a3c5f2533a5e449cf8741514ad18b0951f2e - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd - languageName: node - linkType: hard - -"globalthis@npm:^1.0.4": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" - dependencies: - define-properties: "npm:^1.2.1" - gopd: "npm:^1.0.1" - checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 - languageName: node - linkType: hard - -"globby@npm:11.1.0, globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"google-libphonenumber@npm:^3.2.26": - version: 3.2.40 - resolution: "google-libphonenumber@npm:3.2.40" - checksum: 10c0/997857e0dfdd39b169171cfee72ba268e9b0f9c655317701e21f61b2725d48384df3b2dea6977b49fb47efbde319fd71a1f2ec46589e91ab832ada9f54793cff - languageName: node - linkType: hard - -"gopd@npm:^1.0.1, gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"got@npm:^11.8.0": - version: 11.8.6 - resolution: "got@npm:11.8.6" - dependencies: - "@sindresorhus/is": "npm:^4.0.0" - "@szmarczak/http-timer": "npm:^4.0.5" - "@types/cacheable-request": "npm:^6.0.1" - "@types/responselike": "npm:^1.0.0" - cacheable-lookup: "npm:^5.0.3" - cacheable-request: "npm:^7.0.2" - decompress-response: "npm:^6.0.0" - http2-wrapper: "npm:^1.0.0-beta.5.2" - lowercase-keys: "npm:^2.0.0" - p-cancelable: "npm:^2.0.0" - responselike: "npm:^2.0.0" - checksum: 10c0/754dd44877e5cf6183f1e989ff01c648d9a4719e357457bd4c78943911168881f1cfb7b2cb15d885e2105b3ad313adb8f017a67265dd7ade771afdb261ee8cb1 - languageName: node - linkType: hard - -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 - languageName: node - linkType: hard - -"handlebars@npm:^4.7.7": - version: 4.7.8 - resolution: "handlebars@npm:4.7.8" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.2" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d - languageName: node - linkType: hard - -"har-schema@npm:^2.0.0": - version: 2.0.0 - resolution: "har-schema@npm:2.0.0" - checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 - languageName: node - linkType: hard - -"har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" - dependencies: - ajv: "npm:^6.12.3" - har-schema: "npm:^2.0.0" - checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e - languageName: node - linkType: hard - -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: 10c0/febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.2": - version: 1.1.0 - resolution: "has-bigints@npm:1.1.0" - checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: "npm:^1.0.0" - checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 - languageName: node - linkType: hard - -"has-proto@npm:^1.2.0": - version: 1.2.0 - resolution: "has-proto@npm:1.2.0" - dependencies: - dunder-proto: "npm:^1.0.0" - checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c - languageName: node - linkType: hard - -"hash.js@npm:^1.1.7": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: "npm:^2.0.3" - minimalistic-assert: "npm:^1.0.1" - checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 - languageName: node - linkType: hard - -"hasown@npm:^2.0.0, hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"he@npm:^1.0.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 - languageName: node - linkType: hard - -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 - languageName: node - linkType: hard - -"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: "npm:^6.0.0" - checksum: 10c0/150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 - languageName: node - linkType: hard - -"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": - version: 7.0.2 - resolution: "hosted-git-info@npm:7.0.2" - dependencies: - lru-cache: "npm:^10.0.1" - checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 - languageName: node - linkType: hard - -"html-to-text@npm:^2.1.0": - version: 2.1.3 - resolution: "html-to-text@npm:2.1.3" - dependencies: - he: "npm:^1.0.0" - htmlparser: "npm:^1.7.7" - optimist: "npm:^0.6.1" - underscore: "npm:^1.8.3" - underscore.string: "npm:^3.2.3" - bin: - html-to-text: ./bin/cli.js - checksum: 10c0/bd37935b7370b8fb294efb96af1517f8554285349fa376d6e8b77ed3db6a1300dd30c0513d99a1640b9ba9758bf18c8d2b68f60abdfc4481872748dffe4b06fa - languageName: node - linkType: hard - -"htmlparser2@npm:^3.9.1": - version: 3.10.1 - resolution: "htmlparser2@npm:3.10.1" - dependencies: - domelementtype: "npm:^1.3.1" - domhandler: "npm:^2.3.0" - domutils: "npm:^1.5.1" - entities: "npm:^1.1.1" - inherits: "npm:^2.0.1" - readable-stream: "npm:^3.1.1" - checksum: 10c0/b1424536ff062088501efa06a2afd478545d3134a5ad2e28bbe02dc2d092784982286b90f1c87fa3d86692958dbfb8936352dfd71d1cb2ff7cb61208c00fcdb1 - languageName: node - linkType: hard - -"htmlparser2@npm:^4.0.0": - version: 4.1.0 - resolution: "htmlparser2@npm:4.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^3.0.0" - domutils: "npm:^2.0.0" - entities: "npm:^2.0.0" - checksum: 10c0/a2d8d12ba45534a657d1965b71d4d581e521d14b7fc966ef031722cdd3895a23ce769fed63024e796538b3fc370e894b3a2f5b5071e54120905a6111cd3f88b0 - languageName: node - linkType: hard - -"htmlparser2@npm:^6.0.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.0.0" - domutils: "npm:^2.5.2" - entities: "npm:^2.0.0" - checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 - languageName: node - linkType: hard - -"htmlparser2@npm:^7.0.0": - version: 7.2.0 - resolution: "htmlparser2@npm:7.2.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.2.2" - domutils: "npm:^2.8.0" - entities: "npm:^3.0.1" - checksum: 10c0/7e1fa7f3b2635f2a1c5272765e25aab33b241d84a43e9d27f28a0b7166b51a8025dec40a6a29af38d6a698a2f1d2983cb43e5c61d4e07ec5aa9df672a7460e16 - languageName: node - linkType: hard - -"htmlparser2@npm:^8.0.0": - version: 8.0.2 - resolution: "htmlparser2@npm:8.0.2" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - domutils: "npm:^3.0.1" - entities: "npm:^4.4.0" - checksum: 10c0/609cca85886d0bf2c9a5db8c6926a89f3764596877492e2caa7a25a789af4065bc6ee2cdc81807fe6b1d03a87bf8a373b5a754528a4cc05146b713c20575aab4 - languageName: node - linkType: hard - -"htmlparser2@npm:~3.8.1": - version: 3.8.3 - resolution: "htmlparser2@npm:3.8.3" - dependencies: - domelementtype: "npm:1" - domhandler: "npm:2.3" - domutils: "npm:1.5" - entities: "npm:1.0" - readable-stream: "npm:1.1" - checksum: 10c0/253a673976c1e2c2b8429e45830a5a89c3f23bb6dd34f5958aefbb104a8caf1268515b535277714deb034d894aa0bd315e901cbf2ec906e8ed0d1e49b2d73b3e - languageName: node - linkType: hard - -"htmlparser@npm:^1.7.7": - version: 1.7.7 - resolution: "htmlparser@npm:1.7.7" - checksum: 10c0/b4ef1d2031f1370f274f646f824da10c8d946e671001d92878a4db77332abe84541667728063bb374a2742659b9549fd7d2e7ecdf71605ff016ef18b328becf5 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc - languageName: node - linkType: hard - -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: "npm:2.0.0" - inherits: "npm:2.0.4" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - toidentifier: "npm:1.0.1" - checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 - languageName: node - linkType: hard - -"http-link-header@npm:^1.0.2, http-link-header@npm:^1.1.1": - version: 1.1.3 - resolution: "http-link-header@npm:1.1.3" - checksum: 10c0/56698a9d3aee4d5319d1cdfe62ef5d7179f179ec1e6432d23c9e6a0c896be642ba47a4985a45419cff91008032aef920aca9df94ff9e763e646c83bf54b7243d - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"http-signature-header@npm:^1.3.1": - version: 1.3.1 - resolution: "http-signature-header@npm:1.3.1" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/c44fb0129322c3a7825f589c82fa37d546a0cdc9d06052545208d8c0edda240aa4888e07d667d5c221e94bd583d016250829c8a510114da0d3643185ec8236b5 - languageName: node - linkType: hard - -"http-signature@npm:^1.3.4": - version: 1.4.0 - resolution: "http-signature@npm:1.4.0" - dependencies: - assert-plus: "npm:^1.0.0" - jsprim: "npm:^2.0.2" - sshpk: "npm:^1.18.0" - checksum: 10c0/b9806f5a9ed82a146589837d175c43b596b1cc8c9431665e83d47c152aa8a4629dd1b1e050f8f56e7f17f62cf97b58e888775093310441ddee5f105f28646b2b - languageName: node - linkType: hard - -"http-signature@npm:~1.2.0": - version: 1.2.0 - resolution: "http-signature@npm:1.2.0" - dependencies: - assert-plus: "npm:^1.0.0" - jsprim: "npm:^1.2.2" - sshpk: "npm:^1.7.0" - checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 - languageName: node - linkType: hard - -"http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.3 - resolution: "http2-wrapper@npm:1.0.3" - dependencies: - quick-lru: "npm:^5.1.1" - resolve-alpn: "npm:^1.0.0" - checksum: 10c0/6a9b72a033e9812e1476b9d776ce2f387bc94bc46c88aea0d5dab6bd47d0a539b8178830e77054dd26d1142c866d515a28a4dc7c3ff4232c88ff2ebe4f5d12d1 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: "npm:6" - debug: "npm:4" - checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a - languageName: node - linkType: hard - -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb - languageName: node - linkType: hard - -"ignore-walk@npm:^6.0.4": - version: 6.0.5 - resolution: "ignore-walk@npm:6.0.5" - dependencies: - minimatch: "npm:^9.0.0" - checksum: 10c0/8bd6d37c82400016c7b6538b03422dde8c9d7d3e99051c8357dd205d499d42828522fb4fbce219c9c21b4b069079445bacdc42bbd3e2e073b52856c2646d8a39 - languageName: node - linkType: hard - -"ignore@npm:^5.0.4, ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.3.1": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"image-size@npm:^0.7.3": - version: 0.7.5 - resolution: "image-size@npm:0.7.5" - bin: - image-size: bin/image-size.js - checksum: 10c0/74e978c525e7d777df145bc66cfc4a4a7aa56de8e5daead3a69b0872082dbe385deb4a3b80799810df9e34b2031467412ae28810f2f65ec2e5fe08b895aa3491 - languageName: node - linkType: hard - -"immediate@npm:~3.0.5": - version: 3.0.6 - resolution: "immediate@npm:3.0.6" - checksum: 10c0/f8ba7ede69bee9260241ad078d2d535848745ff5f6995c7c7cb41cfdc9ccc213f66e10fa5afb881f90298b24a3f7344b637b592beb4f54e582770cdce3f1f039 - languageName: node - linkType: hard - -"immutable@npm:^3.8.2": - version: 3.8.2 - resolution: "immutable@npm:3.8.2" - checksum: 10c0/fb6a2999ad3bda9e51741721e42547076dd492635ee4df9241224055fe953ec843583a700088cc4915f23dc326e5084f4e17f1bbd7388c3e872ef5a242e0ac5e - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 - languageName: node - linkType: hard - -"import-local@npm:3.1.0": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 - languageName: node - linkType: hard - -"import-local@npm:^3.2.0": - version: 3.2.0 - resolution: "import-local@npm:3.2.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"ini@npm:^1.3.2, ini@npm:^1.3.8, ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a - languageName: node - linkType: hard - -"ini@npm:^4.1.3": - version: 4.1.3 - resolution: "ini@npm:4.1.3" - checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 - languageName: node - linkType: hard - -"init-package-json@npm:6.0.3": - version: 6.0.3 - resolution: "init-package-json@npm:6.0.3" - dependencies: - "@npmcli/package-json": "npm:^5.0.0" - npm-package-arg: "npm:^11.0.0" - promzard: "npm:^1.0.0" - read: "npm:^3.0.1" - semver: "npm:^7.3.5" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/a80f024ee041a2cf4d3062ba936abf015cbc32bda625cabe994d1fa4bd942bb9af37a481afd6880d340d3e94d90bf97bed1a0a877cc8c7c9b48e723c2524ae74 - languageName: node - linkType: hard - -"inquirer@npm:^8.2.4": - version: 8.2.6 - resolution: "inquirer@npm:8.2.6" - dependencies: - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.1.1" - cli-cursor: "npm:^3.1.0" - cli-width: "npm:^3.0.0" - external-editor: "npm:^3.0.3" - figures: "npm:^3.0.0" - lodash: "npm:^4.17.21" - mute-stream: "npm:0.0.8" - ora: "npm:^5.4.1" - run-async: "npm:^2.4.0" - rxjs: "npm:^7.5.5" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - through: "npm:^2.3.6" - wrap-ansi: "npm:^6.0.1" - checksum: 10c0/eb5724de1778265323f3a68c80acfa899378cb43c24cdcb58661386500e5696b6b0b6c700e046b7aa767fe7b4823c6f04e6ddc268173e3f84116112529016296 - languageName: node - linkType: hard - -"internal-slot@npm:^1.1.0": - version: 1.1.0 - resolution: "internal-slot@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - hasown: "npm:^2.0.2" - side-channel: "npm:^1.1.0" - checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 - languageName: node - linkType: hard - -"ioredis@npm:^4.27.0": - version: 4.28.5 - resolution: "ioredis@npm:4.28.5" - dependencies: - cluster-key-slot: "npm:^1.1.0" - debug: "npm:^4.3.1" - denque: "npm:^1.1.0" - lodash.defaults: "npm:^4.2.0" - lodash.flatten: "npm:^4.4.0" - lodash.isarguments: "npm:^3.1.0" - p-map: "npm:^2.1.0" - redis-commands: "npm:1.7.0" - redis-errors: "npm:^1.2.0" - redis-parser: "npm:^3.0.0" - standard-as-callback: "npm:^2.1.0" - checksum: 10c0/6fd12957d2906f83d8aa662ba78d084df16dc7c1a0e6e18c512302ac94339dcd5936d2e7cd6f89e9e7b511e3cf96617ca2fdea63aa4679bfdf48aa2be441ad76 - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: "npm:1.1.0" - sprintf-js: "npm:^1.1.3" - checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc - languageName: node - linkType: hard - -"ipaddr.js@npm:^2.2.0": - version: 2.2.0 - resolution: "ipaddr.js@npm:2.2.0" - checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 - languageName: node - linkType: hard - -"is-arguments@npm:^1.0.4": - version: 1.2.0 - resolution: "is-arguments@npm:1.2.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": - version: 3.0.5 - resolution: "is-array-buffer@npm:3.0.5" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 - languageName: node - linkType: hard - -"is-async-function@npm:^2.0.0": - version: 2.1.0 - resolution: "is-async-function@npm:2.1.0" - dependencies: - call-bound: "npm:^1.0.3" - get-proto: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.2" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/5209b858c6d18d88a9fb56dea202a050d53d4b722448cc439fdca859b36e23edf27ee8c18958ba49330f1a71b8846576273f4581e1c0bb9d403738129d852fdb - languageName: node - linkType: hard - -"is-bigint@npm:^1.1.0": - version: 1.1.0 - resolution: "is-bigint@npm:1.1.0" - dependencies: - has-bigints: "npm:^1.0.2" - checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 - languageName: node - linkType: hard - -"is-boolean-object@npm:^1.2.1": - version: 1.2.1 - resolution: "is-boolean-object@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 - languageName: node - linkType: hard - -"is-bun-module@npm:^1.0.2": - version: 1.3.0 - resolution: "is-bun-module@npm:1.3.0" - dependencies: - semver: "npm:^7.6.3" - checksum: 10c0/2966744188fcd28e0123c52158c7073973f88babfa9ab04e2846ec5862d6b0f8f398df6413429d930f7c5ee6111ce2cbfb3eb8652d9ec42d4a37dc5089a866fb - languageName: node - linkType: hard - -"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f - languageName: node - linkType: hard - -"is-ci@npm:3.0.1": - version: 3.0.1 - resolution: "is-ci@npm:3.0.1" - dependencies: - ci-info: "npm:^3.2.0" - bin: - is-ci: bin.js - checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0, is-core-module@npm:^2.5.0": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd - languageName: node - linkType: hard - -"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": - version: 1.0.2 - resolution: "is-data-view@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.6" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 - languageName: node - linkType: hard - -"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": - version: 1.1.0 - resolution: "is-date-object@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc - languageName: node - linkType: hard - -"is-expression@npm:^4.0.0": - version: 4.0.0 - resolution: "is-expression@npm:4.0.0" - dependencies: - acorn: "npm:^7.1.1" - object-assign: "npm:^4.1.1" - checksum: 10c0/541831d39d3e7bfc8cecd966d6b0f3c0e6d9055342f17b634fb23e74f51ce90f1bfc3cf231c722fe003a61e8d4f0b9e07244fdaba57f4fc70a163c74006fd5a0 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-finalizationregistry@npm:^1.1.0": - version: 1.1.1 - resolution: "is-finalizationregistry@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d - languageName: node - linkType: hard - -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": - version: 1.1.0 - resolution: "is-generator-function@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - get-proto: "npm:^1.0.0" - has-tostringtag: "npm:^1.0.2" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 10c0/dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d - languageName: node - linkType: hard - -"is-map@npm:^2.0.3": - version: 2.0.3 - resolution: "is-map@npm:2.0.3" - checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc - languageName: node - linkType: hard - -"is-nan@npm:^1.3.0": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - checksum: 10c0/8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 - languageName: node - linkType: hard - -"is-number-object@npm:^1.1.1": - version: 1.1.1 - resolution: "is-number-object@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 - languageName: node - linkType: hard - -"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 10c0/daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: "npm:^3.0.1" - checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 - languageName: node - linkType: hard - -"is-plain-object@npm:^5.0.0": - version: 5.0.0 - resolution: "is-plain-object@npm:5.0.0" - checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c - languageName: node - linkType: hard - -"is-promise@npm:^2.0.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-regex@npm:^1.0.3, is-regex@npm:^1.2.1": - version: 1.2.1 - resolution: "is-regex@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - gopd: "npm:^1.2.0" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 - languageName: node - linkType: hard - -"is-set@npm:^2.0.3": - version: 2.0.3 - resolution: "is-set@npm:2.0.3" - checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.4": - version: 1.0.4 - resolution: "is-shared-array-buffer@npm:1.0.4" - dependencies: - call-bound: "npm:^1.0.3" - checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db - languageName: node - linkType: hard - -"is-ssh@npm:^1.4.0": - version: 1.4.0 - resolution: "is-ssh@npm:1.4.0" - dependencies: - protocols: "npm:^2.0.1" - checksum: 10c0/3eb30d1bcb4507cd25562e7ac61a1c0aa31772134c67cec9c3afe6f4d57ec17e8c2892600a608e8e583f32f53f36465b8968c0305f2855cfbff95acfd049e113 - languageName: node - linkType: hard - -"is-stream@npm:2.0.0": - version: 2.0.0 - resolution: "is-stream@npm:2.0.0" - checksum: 10c0/687f6bbd2b995573d33e6b40b2cbc8b9186a751aa3151c23e6fd2c4ca352e323a6dc010b09103f89c9ca0bf5c8c38f3fa8b74d5d9acd1c44f1499874d7e844f9 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 - languageName: node - linkType: hard - -"is-string@npm:^1.0.7, is-string@npm:^1.1.1": - version: 1.1.1 - resolution: "is-string@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": - version: 1.1.1 - resolution: "is-symbol@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.2" - has-symbols: "npm:^1.1.0" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e - languageName: node - linkType: hard - -"is-text-path@npm:^1.0.1": - version: 1.0.1 - resolution: "is-text-path@npm:1.0.1" - dependencies: - text-extensions: "npm:^1.0.0" - checksum: 10c0/61c8650c29548febb6bf69e9541fc11abbbb087a0568df7bc471ba264e95fb254def4e610631cbab4ddb0a1a07949d06416f4ebeaf37875023fb184cdb87ee84 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": - version: 1.1.15 - resolution: "is-typed-array@npm:1.1.15" - dependencies: - which-typed-array: "npm:^1.1.16" - checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 - languageName: node - linkType: hard - -"is-typedarray@npm:~1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec - languageName: node - linkType: hard - -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 - languageName: node - linkType: hard - -"is-weakmap@npm:^2.0.2": - version: 2.0.2 - resolution: "is-weakmap@npm:2.0.2" - checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": - version: 1.1.0 - resolution: "is-weakref@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b - languageName: node - linkType: hard - -"is-weakset@npm:^2.0.3": - version: 2.0.4 - resolution: "is-weakset@npm:2.0.4" - dependencies: - call-bound: "npm:^1.0.3" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 - languageName: node - linkType: hard - -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e - languageName: node - linkType: hard - -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd - languageName: node - linkType: hard - -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db - languageName: node - linkType: hard - -"isstream@npm:^0.1.2, isstream@npm:~0.1.2": - version: 0.1.2 - resolution: "isstream@npm:0.1.2" - checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2": - version: 6.0.3 - resolution: "istanbul-lib-instrument@npm:6.0.3" - dependencies: - "@babel/core": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^7.5.4" - checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^4.0.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^5.0.0": - version: 5.0.6 - resolution: "istanbul-lib-source-maps@npm:5.0.6" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.23" - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.7 - resolution: "istanbul-reports@npm:3.1.7" - dependencies: - html-escaper: "npm:^2.0.0" - istanbul-lib-report: "npm:^3.0.0" - checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.9.2 - resolution: "jake@npm:10.9.2" - dependencies: - async: "npm:^3.2.3" - chalk: "npm:^4.0.2" - filelist: "npm:^1.0.4" - minimatch: "npm:^3.1.2" - bin: - jake: bin/cli.js - checksum: 10c0/c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31 - languageName: node - linkType: hard - -"jest-changed-files@npm:30.0.5": - version: 30.0.5 - resolution: "jest-changed-files@npm:30.0.5" - dependencies: - execa: "npm:^5.1.1" - jest-util: "npm:30.0.5" - p-limit: "npm:^3.1.0" - checksum: 10c0/41ce090f324e8450443327f19f772a9c3f225b4b1374ba9704358f0c8b8cd91fd134fa41df7db4d278428ab974c432abc3eca9484e67c8f18528974378fddef6 - languageName: node - linkType: hard - -"jest-circus@npm:30.0.5": - version: 30.0.5 - resolution: "jest-circus@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/expect": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - co: "npm:^4.6.0" - dedent: "npm:^1.6.0" - is-generator-fn: "npm:^2.1.0" - jest-each: "npm:30.0.5" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - p-limit: "npm:^3.1.0" - pretty-format: "npm:30.0.5" - pure-rand: "npm:^7.0.0" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.6" - checksum: 10c0/028204897eee7bef2d04eea0216b48f94e3da77ff1d12b0e3a5e265e8e73bcd31192cec70282aa1ece91150c00fcb5662c2c68e86b3892cffbfbe7058fa7f4e5 - languageName: node - linkType: hard - -"jest-cli@npm:30.0.5": - version: 30.0.5 - resolution: "jest-cli@npm:30.0.5" - dependencies: - "@jest/core": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - exit-x: "npm:^0.2.2" - import-local: "npm:^3.2.0" - jest-config: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - yargs: "npm:^17.7.2" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: ./bin/jest.js - checksum: 10c0/bfcd7212db7825d06afaf01c19bd7168190e22220d300b6db31b3885943a31361e98c4a1bde466146368ad503ae6257a9630bc35b4a43ff0631d7a3f95b63e45 - languageName: node - linkType: hard - -"jest-config@npm:30.0.5": - version: 30.0.5 - resolution: "jest-config@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@jest/get-type": "npm:30.0.1" - "@jest/pattern": "npm:30.0.1" - "@jest/test-sequencer": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - babel-jest: "npm:30.0.5" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - deepmerge: "npm:^4.3.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - jest-circus: "npm:30.0.5" - jest-docblock: "npm:30.0.1" - jest-environment-node: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-runner: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - micromatch: "npm:^4.0.8" - parse-json: "npm:^5.2.0" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - strip-json-comments: "npm:^3.1.1" - peerDependencies: - "@types/node": "*" - esbuild-register: ">=3.4.0" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - esbuild-register: - optional: true - ts-node: - optional: true - checksum: 10c0/da68048801e6f6622bf6e9a361dcfb3859017bbd58fabcf53bade41157bdf31cc35a1bd3dab1e3cca86e69da23e2c27c7aa5e308efc04564a454e23de6f22062 - languageName: node - linkType: hard - -"jest-diff@npm:30.0.5": - version: 30.0.5 - resolution: "jest-diff@npm:30.0.5" - dependencies: - "@jest/diff-sequences": "npm:30.0.1" - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - pretty-format: "npm:30.0.5" - checksum: 10c0/b218ced37b7676f578ea866762f04caa74901bdcf3f593872aa9a4991a586302651a1d16bb0386772adacc7580a452ec621359af75d733c0b50ea947fe1881d3 - languageName: node - linkType: hard - -"jest-diff@npm:>=29.4.3 < 30, jest-diff@npm:^29.4.1": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.6.3" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 - languageName: node - linkType: hard - -"jest-docblock@npm:30.0.1": - version: 30.0.1 - resolution: "jest-docblock@npm:30.0.1" - dependencies: - detect-newline: "npm:^3.1.0" - checksum: 10c0/f9bad2651db8afa029867ea7a40f422c9d73c67657360297371846a314a40c8786424be00483261df9137499f52c2af28cd458fbd15a7bf7fac8775b4bcd6ee1 - languageName: node - linkType: hard - -"jest-each@npm:30.0.5": - version: 30.0.5 - resolution: "jest-each@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - jest-util: "npm:30.0.5" - pretty-format: "npm:30.0.5" - checksum: 10c0/fe7509bfd8b0c8553bbdaffda5d3b674a4da870c5ce9fe69c1ca8111d9e0f21a8f265799eba0f927581d16f4810e5eb5bebfd7e51f5f137cbef08cc44d8fd9cd - languageName: node - linkType: hard - -"jest-environment-node@npm:30.0.5": - version: 30.0.5 - resolution: "jest-environment-node@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/fake-timers": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - checksum: 10c0/1b608597f0755814e7c24b9ed2a45abc2340cfd8f8d3691caf929f332facd9c62ac5092e7f01056708a0ca41ae0458b6d442fd1ae9f6d21b7b416b252e1ae210 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b - languageName: node - linkType: hard - -"jest-haste-map@npm:30.0.5": - version: 30.0.5 - resolution: "jest-haste-map@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - anymatch: "npm:^3.1.3" - fb-watchman: "npm:^2.0.2" - fsevents: "npm:^2.3.3" - graceful-fs: "npm:^4.2.11" - jest-regex-util: "npm:30.0.1" - jest-util: "npm:30.0.5" - jest-worker: "npm:30.0.5" - micromatch: "npm:^4.0.8" - walker: "npm:^1.0.8" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/eab5d85d820f149bcf4bf4e0c49316f48973c85d39b4c3a2e08f57504f069afe9b0f1665e556330a98c6fc6bd5a6932767b466c1c96124fa0161aef017ab17b3 - languageName: node - linkType: hard - -"jest-leak-detector@npm:30.0.5": - version: 30.0.5 - resolution: "jest-leak-detector@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - pretty-format: "npm:30.0.5" - checksum: 10c0/04207ab6f44dec22d3d656b5f3b4f334440f4c01ccd21c55474f26706530244d34b8dc9922c9449e00e8649e5da1b8de4aca58c9895c9de19951d5ecdc0ff113 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:30.0.5": - version: 30.0.5 - resolution: "jest-matcher-utils@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - jest-diff: "npm:30.0.5" - pretty-format: "npm:30.0.5" - checksum: 10c0/231d891b29bfc218f2f5739c10873b6671426e31ad1c5538eed1531e62608fd3f60d32f41821332a6cf41f1614fd37361434c754fdd49c849b35ef2e5156c02e - languageName: node - linkType: hard - -"jest-message-util@npm:30.0.5": - version: 30.0.5 - resolution: "jest-message-util@npm:30.0.5" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@jest/types": "npm:30.0.5" - "@types/stack-utils": "npm:^2.0.3" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - micromatch: "npm:^4.0.8" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.6" - checksum: 10c0/38b710c127db6c79c36d690377d9f9f1e3c2e4b2d2e60f3b82a5b4da70efb1f4783c6cf0cf1f6be6e3b7fb2d2aed889583d2430f65afc09e7e6d68aa5fa981dc - languageName: node - linkType: hard - -"jest-mock@npm:30.0.5": - version: 30.0.5 - resolution: "jest-mock@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-util: "npm:30.0.5" - checksum: 10c0/207fd79297f514a8e26ede9b4b5035e70212b8850a2f460b51d3cc58e8e7c9585bd2dbc5df2475a3321c4cd114b90e0b24190f00d6eeb88c8f088a8ed00416d5 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.3": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac - languageName: node - linkType: hard - -"jest-regex-util@npm:30.0.1": - version: 30.0.1 - resolution: "jest-regex-util@npm:30.0.1" - checksum: 10c0/f30c70524ebde2d1012afe5ffa5691d5d00f7d5ba9e43d588f6460ac6fe96f9e620f2f9b36a02d0d3e7e77bc8efb8b3450ae3b80ac53c8be5099e01bf54f6728 - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:30.0.5": - version: 30.0.5 - resolution: "jest-resolve-dependencies@npm:30.0.5" - dependencies: - jest-regex-util: "npm:30.0.1" - jest-snapshot: "npm:30.0.5" - checksum: 10c0/7c72ef30d2e2e5c9564c53f55679184a4fe460f4d5c48eb5edc476000f17ee392341ae0c21b3ce9e531a1bff00924ebcda4fcd5b1406071c6a7b2b109fd3cf33 - languageName: node - linkType: hard - -"jest-resolve@npm:30.0.5": - version: 30.0.5 - resolution: "jest-resolve@npm:30.0.5" - dependencies: - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-pnp-resolver: "npm:^1.2.3" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - slash: "npm:^3.0.0" - unrs-resolver: "npm:^1.7.11" - checksum: 10c0/6edea75db950131513cd642743d4c5dd36c209c94652e469eebc86fdf85eb579a7614c30262668fcd429e1c841f1d17a26831259db69c17dffd0718c37f69196 - languageName: node - linkType: hard - -"jest-runner@npm:30.0.5": - version: 30.0.5 - resolution: "jest-runner@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/environment": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - emittery: "npm:^0.13.1" - exit-x: "npm:^0.2.2" - graceful-fs: "npm:^4.2.11" - jest-docblock: "npm:30.0.1" - jest-environment-node: "npm:30.0.5" - jest-haste-map: "npm:30.0.5" - jest-leak-detector: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-resolve: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-watcher: "npm:30.0.5" - jest-worker: "npm:30.0.5" - p-limit: "npm:^3.1.0" - source-map-support: "npm:0.5.13" - checksum: 10c0/5da84e4f393cc4b0c2b86a7058c154e524bc91947867f892d252300d06c595058690a61ffdbfa74381498f4ebb9cc7d8d967a62f53cb5f5383ec59fb5ed21d91 - languageName: node - linkType: hard - -"jest-runtime@npm:30.0.5": - version: 30.0.5 - resolution: "jest-runtime@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/fake-timers": "npm:30.0.5" - "@jest/globals": "npm:30.0.5" - "@jest/source-map": "npm:30.0.1" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - cjs-module-lexer: "npm:^2.1.0" - collect-v8-coverage: "npm:^1.0.2" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - slash: "npm:^3.0.0" - strip-bom: "npm:^4.0.0" - checksum: 10c0/c1afa36da0582172e9a73d69fcc23fd433efc8a7d0328ba5fee45858dc85cb01410b47ba53540bb3758277eb84bb5a42e872bc58d2e5a3cad533f4b33e3abe61 - languageName: node - linkType: hard - -"jest-snapshot@npm:30.0.5": - version: 30.0.5 - resolution: "jest-snapshot@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@babel/generator": "npm:^7.27.5" - "@babel/plugin-syntax-jsx": "npm:^7.27.1" - "@babel/plugin-syntax-typescript": "npm:^7.27.1" - "@babel/types": "npm:^7.27.3" - "@jest/expect-utils": "npm:30.0.5" - "@jest/get-type": "npm:30.0.1" - "@jest/snapshot-utils": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - babel-preset-current-node-syntax: "npm:^1.1.0" - chalk: "npm:^4.1.2" - expect: "npm:30.0.5" - graceful-fs: "npm:^4.2.11" - jest-diff: "npm:30.0.5" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - pretty-format: "npm:30.0.5" - semver: "npm:^7.7.2" - synckit: "npm:^0.11.8" - checksum: 10c0/2bda246367373003abfbd66de261bfd355618926c28261d7ffcdfac0c4c7a7f575c9f598745b0b59eb2cfa8907889dcc07db3ad65d940061275d490c1eb3e1fe - languageName: node - linkType: hard - -"jest-util@npm:30.0.5": - version: 30.0.5 - resolution: "jest-util@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - graceful-fs: "npm:^4.2.11" - picomatch: "npm:^4.0.2" - checksum: 10c0/d3808b5f7720044d0464664c795e2b795ed82edf3b5871db74b8b603c3a0a38107668730348d26f92920ca3b8245a99cbbc2c93e77d0abb1f5e27524079a4ba8 - languageName: node - linkType: hard - -"jest-validate@npm:30.0.5": - version: 30.0.5 - resolution: "jest-validate@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - "@jest/types": "npm:30.0.5" - camelcase: "npm:^6.3.0" - chalk: "npm:^4.1.2" - leven: "npm:^3.1.0" - pretty-format: "npm:30.0.5" - checksum: 10c0/739a5df57befd763ba40693c9c1d7e93234af44ca21226a42272fbf87dea076a23848072b46871ce02cc0f2614f8ad41542e98965b405320276102b4de35b063 - languageName: node - linkType: hard - -"jest-watcher@npm:30.0.5": - version: 30.0.5 - resolution: "jest-watcher@npm:30.0.5" - dependencies: - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.3.2" - chalk: "npm:^4.1.2" - emittery: "npm:^0.13.1" - jest-util: "npm:30.0.5" - string-length: "npm:^4.0.2" - checksum: 10c0/5c26617c53e6314e2143806cbc8c1cdca7100cc8de3241c7debf7b5feb0df17bdc9a92ee4a4efa953a261d8806ffd7f6c89e72d567236e62492dd554eaa91f97 - languageName: node - linkType: hard - -"jest-worker@npm:30.0.5": - version: 30.0.5 - resolution: "jest-worker@npm:30.0.5" - dependencies: - "@types/node": "npm:*" - "@ungap/structured-clone": "npm:^1.3.0" - jest-util: "npm:30.0.5" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.1.1" - checksum: 10c0/50a724b39b8691168a456544f32ef8e937c827cd6d326fa0bc27df786c80af1e1f16d9f2d9cc800af4baac85a0f9e9ed78fbd4a06f13eb32e72ec66d11b85f38 - languageName: node - linkType: hard - -"jest@npm:^30.0.5": - version: 30.0.5 - resolution: "jest@npm:30.0.5" - dependencies: - "@jest/core": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - import-local: "npm:^3.2.0" - jest-cli: "npm:30.0.5" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: ./bin/jest.js - checksum: 10c0/eff3980ebe0257f1d5a0e94b0df27fc689563539138cc9220dadcb57543e30601cea6b79cbd68a5a5bcdc69501a8a670493495cf4b1d2076796697f8a7937d4c - languageName: node - linkType: hard - -"jose@npm:^2.0.5": - version: 2.0.7 - resolution: "jose@npm:2.0.7" - dependencies: - "@panva/asn1.js": "npm:^1.0.0" - checksum: 10c0/228406f4635debd05922fa565a85c42c086426c1af03c4db2ce247d84f240d3f5985efa9540e6c90c89bab56476b1d1a0be2199740d1f497a37b075bbe2307e8 - languageName: node - linkType: hard - -"jose@npm:^5.2.0": - version: 5.9.6 - resolution: "jose@npm:5.9.6" - checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d - languageName: node - linkType: hard - -"js-stringify@npm:^1.0.2": - version: 1.0.2 - resolution: "js-stringify@npm:1.0.2" - checksum: 10c0/a450c04fde3a7e1c27f1c3c4300433f8d79322f9e3c2e76266843cef8c0b5a69b5f11b5f173212b2f15f2df09e068ef7ddf46ef775e2486f3006a6f4e912578d - languageName: node - linkType: hard - -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f - languageName: node - linkType: hard - -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 - languageName: node - linkType: hard - -"jsbn@npm:~0.1.0": - version: 0.1.1 - resolution: "jsbn@npm:0.1.1" - checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 - languageName: node - linkType: hard - -"jsdoc-type-pratt-parser@npm:~4.0.0": - version: 4.0.0 - resolution: "jsdoc-type-pratt-parser@npm:4.0.0" - checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 - languageName: node - linkType: hard - -"jsesc@npm:^3.0.2": - version: 3.1.0 - resolution: "jsesc@npm:3.1.0" - bin: - jsesc: bin/jsesc - checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 - languageName: node - linkType: hard - -"jsesc@npm:~3.0.2": - version: 3.0.2 - resolution: "jsesc@npm:3.0.2" - bin: - jsesc: bin/jsesc - checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 - languageName: node - linkType: hard - -"json-parse-better-errors@npm:^1.0.1": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": - version: 3.0.2 - resolution: "json-parse-even-better-errors@npm:3.0.2" - checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - -"json-schema@npm:0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 - languageName: node - linkType: hard - -"json-stringify-nice@npm:^1.1.4": - version: 1.1.4 - resolution: "json-stringify-nice@npm:1.1.4" - checksum: 10c0/13673b67ba9e7fde75a103cade0b0d2dd0d21cd3b918de8d8f6cd59d48ad8c78b0e85f6f4a5842073ddfc91ebdde5ef7c81c7f51945b96a33eaddc5d41324b87 - languageName: node - linkType: hard - -"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": - version: 5.0.1 - resolution: "json-stringify-safe@npm:5.0.1" - checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 - languageName: node - linkType: hard - -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: "npm:^1.2.0" - bin: - json5: lib/cli.js - checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f - languageName: node - linkType: hard - -"json5@npm:^2.2.2, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c - languageName: node - linkType: hard - -"jsonc-parser@npm:3.2.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 10c0/5a12d4d04dad381852476872a29dcee03a57439574e4181d91dca71904fcdcc5e8e4706c0a68a2c61ad9810e1e1c5806b5100d52d3e727b78f5cdc595401045b - languageName: node - linkType: hard - -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.6" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 - languageName: node - linkType: hard - -"jsonld-context-parser@npm:^2.0.0, jsonld-context-parser@npm:^2.1.2, jsonld-context-parser@npm:^2.1.3, jsonld-context-parser@npm:^2.4.0": - version: 2.4.0 - resolution: "jsonld-context-parser@npm:2.4.0" - dependencies: - "@types/http-link-header": "npm:^1.0.1" - "@types/node": "npm:^18.0.0" - cross-fetch: "npm:^3.0.6" - http-link-header: "npm:^1.0.2" - relative-to-absolute-iri: "npm:^1.0.5" - bin: - jsonld-context-parse: bin/jsonld-context-parse.js - checksum: 10c0/7d27257ac4a18698cf2750798d59f9fb956e13999c91536ceb0d5f2480b2b6b26c7966fe1f60a7d507d381a3bf460d209a3e3a23e2854c4821d010cf36718b21 - languageName: node - linkType: hard - -"jsonld-signatures@npm:^11.2.1, jsonld-signatures@npm:^11.3.0, jsonld-signatures@npm:^11.3.2": - version: 11.5.0 - resolution: "jsonld-signatures@npm:11.5.0" - dependencies: - "@digitalbazaar/security-context": "npm:^1.0.0" - jsonld: "npm:^8.0.0" - rdf-canonize: "npm:^4.0.1" - serialize-error: "npm:^8.1.0" - checksum: 10c0/a624ef4706c91064ba19dd3f1bb2a43f40cabd68f38e1c3e57fb0cea830b5ff4763364a00197313ccf704f571295803220d5c20d40df371562d84de98c5df9a0 - languageName: node - linkType: hard - -"jsonld-signatures@npm:^5.0.0": - version: 5.2.0 - resolution: "jsonld-signatures@npm:5.2.0" - dependencies: - base64url: "npm:^3.0.1" - crypto-ld: "npm:^3.7.0" - jsonld: "npm:^2.0.2" - node-forge: "npm:^0.10.0" - security-context: "npm:^4.0.0" - serialize-error: "npm:^5.0.0" - checksum: 10c0/c9966118b9ad0af8be9bed8b42cfa8fe67d57c7ef29b7dbf7b889902c5bc1f1c19527d724316666dca49a6a1e72b3b37e09be6ab77d3b74f8dd4c39b2ef8f61c - languageName: node - linkType: hard - -"jsonld-streaming-parser@npm:^2.4.0, jsonld-streaming-parser@npm:^2.4.2": - version: 2.4.3 - resolution: "jsonld-streaming-parser@npm:2.4.3" - dependencies: - "@rdfjs/types": "npm:*" - "@types/http-link-header": "npm:^1.0.1" - canonicalize: "npm:^1.0.1" - http-link-header: "npm:^1.0.2" - jsonld-context-parser: "npm:^2.1.3" - jsonparse: "npm:^1.3.1" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/f678e3b6f80471b95400b4d89b7a456e1ff798ace41a5312597e9c2d20a61b17aada2dc20364c3192806eba6abd651cd5c377fae0b9417f45187179ff6af862c - languageName: node - linkType: hard - -"jsonld-streaming-serializer@npm:^1.2.0": - version: 1.3.0 - resolution: "jsonld-streaming-serializer@npm:1.3.0" - dependencies: - "@rdfjs/types": "npm:*" - jsonld-context-parser: "npm:^2.0.0" - checksum: 10c0/c0e692a3c579a49e18af60f5d70cffef4a7e1637090c129150742feb0719e88bdfa6d73a5f0a095dd5cba72b6057fca22c0f50644e5dc5cd62d1ddc7ed3051ae - languageName: node - linkType: hard - -"jsonld@npm:^2.0.2": - version: 2.0.2 - resolution: "jsonld@npm:2.0.2" - dependencies: - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^5.1.1" - rdf-canonize: "npm:^1.0.2" - request: "npm:^2.88.0" - semver: "npm:^6.3.0" - xmldom: "npm:0.1.19" - checksum: 10c0/d5648d74aab4316b13acfb1dfe087443a0f8b7022b94732867d01a3fbd50f1ce0bec073412da883dfa760641a22e778304e27f098de7f23ea27c8503e188edf2 - languageName: node - linkType: hard - -"jsonld@npm:^3.3.2": - version: 3.3.2 - resolution: "jsonld@npm:3.3.2" - dependencies: - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^5.1.1" - object.fromentries: "npm:^2.0.2" - rdf-canonize: "npm:^2.0.1" - request: "npm:^2.88.0" - semver: "npm:^6.3.0" - xmldom: "npm:0.1.19" - checksum: 10c0/f89f4e5170a49505d552525abe37c4257a72171ca41f4c6ec38f12c021d6e6e41a473c38edee0f4bbda2af6e58d900c998bf875a4194f1e2b27e90cb8e95ef7c - languageName: node - linkType: hard - -"jsonld@npm:^8.0.0, jsonld@npm:^8.1.0, jsonld@npm:^8.3.1": - version: 8.3.3 - resolution: "jsonld@npm:8.3.3" - dependencies: - "@digitalbazaar/http-client": "npm:^3.4.1" - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^6.0.0" - rdf-canonize: "npm:^3.4.0" - checksum: 10c0/ca8c18f65a50c61deec2951533bf05b709fd8e937e2f0cb549683d7e9934df7649b6e2f6f99f0dafe7bf8dd6ae95a257306cdb37fb705ef5ee0a7439d85581c2 - languageName: node - linkType: hard - -"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": - version: 1.3.1 - resolution: "jsonparse@npm:1.3.1" - checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 - languageName: node - linkType: hard - -"jsonwebtoken@npm:^9.0.2": - version: 9.0.2 - resolution: "jsonwebtoken@npm:9.0.2" - dependencies: - jws: "npm:^3.2.2" - lodash.includes: "npm:^4.3.0" - lodash.isboolean: "npm:^3.0.3" - lodash.isinteger: "npm:^4.0.4" - lodash.isnumber: "npm:^3.0.3" - lodash.isplainobject: "npm:^4.0.6" - lodash.isstring: "npm:^4.0.1" - lodash.once: "npm:^4.0.0" - ms: "npm:^2.1.1" - semver: "npm:^7.5.4" - checksum: 10c0/d287a29814895e866db2e5a0209ce730cbc158441a0e5a70d5e940eb0d28ab7498c6bf45029cc8b479639bca94056e9a7f254e2cdb92a2f5750c7f358657a131 - languageName: node - linkType: hard - -"jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: "npm:1.0.0" - extsprintf: "npm:1.3.0" - json-schema: "npm:0.4.0" - verror: "npm:1.10.0" - checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af - languageName: node - linkType: hard - -"jsprim@npm:^2.0.2": - version: 2.0.2 - resolution: "jsprim@npm:2.0.2" - dependencies: - assert-plus: "npm:1.0.0" - extsprintf: "npm:1.3.0" - json-schema: "npm:0.4.0" - verror: "npm:1.10.0" - checksum: 10c0/677be2d41df536c92c6d0114a492ef197084018cfbb1a3e10b1fa1aad889564b2e3a7baa6af7949cc2d73678f42368b0be165a26bd4e4de6883a30dd6a24e98d - languageName: node - linkType: hard - -"jstransformer@npm:1.0.0": - version: 1.0.0 - resolution: "jstransformer@npm:1.0.0" - dependencies: - is-promise: "npm:^2.0.0" - promise: "npm:^7.0.1" - checksum: 10c0/11f9b4f368a55878dd7973154cd83b0adca27f974d21217728652530775b2bec281e92109de66f0c9e37c76af796d5b76b33f3e38363214a83d102d523a7285b - languageName: node - linkType: hard - -"juice@npm:^4.1.0": - version: 4.3.2 - resolution: "juice@npm:4.3.2" - dependencies: - cheerio: "npm:^0.22.0" - commander: "npm:^2.15.1" - cross-spawn: "npm:^5.1.0" - deep-extend: "npm:^0.5.1" - mensch: "npm:^0.3.3" - slick: "npm:^1.12.2" - web-resource-inliner: "npm:^4.2.1" - bin: - juice: bin/juice - checksum: 10c0/5ab6cb687740fd52260daf3d8c4c01fbec02c4da805574ae2f9d2947a472d950137aae4a48092a56f9acf007de486af7cced60d9d9ec2cbfc4fbc6c19c081363 - languageName: node - linkType: hard - -"just-diff-apply@npm:^5.2.0": - version: 5.5.0 - resolution: "just-diff-apply@npm:5.5.0" - checksum: 10c0/d7b85371f2a5a17a108467fda35dddd95264ab438ccec7837b67af5913c57ded7246039d1df2b5bc1ade034ccf815b56d69786c5f1e07383168a066007c796c0 - languageName: node - linkType: hard - -"just-diff@npm:^6.0.0": - version: 6.0.2 - resolution: "just-diff@npm:6.0.2" - checksum: 10c0/1931ca1f0cea4cc480172165c189a84889033ad7a60bee302268ba8ca9f222b43773fd5f272a23ee618d43d85d3048411f06b635571a198159e9a85bb2495f5c - languageName: node - linkType: hard - -"jwa@npm:^1.4.1": - version: 1.4.1 - resolution: "jwa@npm:1.4.1" - dependencies: - buffer-equal-constant-time: "npm:1.0.1" - ecdsa-sig-formatter: "npm:1.0.11" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 - languageName: node - linkType: hard - -"jws@npm:^3.2.2": - version: 3.2.2 - resolution: "jws@npm:3.2.2" - dependencies: - jwa: "npm:^1.4.1" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff - languageName: node - linkType: hard - -"keyv@npm:^4.0.0, keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 - languageName: node - linkType: hard - -"kleur@npm:^4.1.4, kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"ky-universal@npm:^0.11.0": - version: 0.11.0 - resolution: "ky-universal@npm:0.11.0" - dependencies: - abort-controller: "npm:^3.0.0" - node-fetch: "npm:^3.2.10" - peerDependencies: - ky: ">=0.31.4" - web-streams-polyfill: ">=3.2.1" - peerDependenciesMeta: - web-streams-polyfill: - optional: true - checksum: 10c0/d71a1cae6d79c93808eda3b021eea91df064ac972f0391b45aa0913cdc48bdcad9c33452d68de021bd32c1b5abe15090229ae4a45fa28f7babb8e77e39ae1596 - languageName: node - linkType: hard - -"ky@npm:^0.33.3": - version: 0.33.3 - resolution: "ky@npm:0.33.3" - checksum: 10c0/5ba8de4c97c2abe5fb1b7d1b20252f95a7b249254af03cdfac670b9615de6b2b4af747bf363a1b918d2650c4cc83259578105f8eadd284f4e1c4261081e29640 - languageName: node - linkType: hard - -"lerna@npm:^8.0.1": - version: 8.1.9 - resolution: "lerna@npm:8.1.9" - dependencies: - "@lerna/create": "npm:8.1.9" - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" - "@octokit/plugin-enterprise-rest": "npm:6.0.1" - "@octokit/rest": "npm:19.0.11" - aproba: "npm:2.0.0" - byte-size: "npm:8.1.1" - chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" - cmd-shim: "npm:6.0.3" - color-support: "npm:1.1.3" - columnify: "npm:1.6.0" - console-control-strings: "npm:^1.1.0" - conventional-changelog-angular: "npm:7.0.0" - conventional-changelog-core: "npm:5.0.1" - conventional-recommended-bump: "npm:7.0.1" - cosmiconfig: "npm:9.0.0" - dedent: "npm:1.5.3" - envinfo: "npm:7.13.0" - execa: "npm:5.0.0" - fs-extra: "npm:^11.2.0" - get-port: "npm:5.1.1" - get-stream: "npm:6.0.0" - git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - globby: "npm:11.1.0" - graceful-fs: "npm:4.2.11" - has-unicode: "npm:2.0.1" - import-local: "npm:3.1.0" - ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" - is-ci: "npm:3.0.1" - is-stream: "npm:2.0.0" - jest-diff: "npm:>=29.4.3 < 30" - js-yaml: "npm:4.1.0" - libnpmaccess: "npm:8.0.6" - libnpmpublish: "npm:9.0.9" - load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" - make-dir: "npm:4.0.0" - minimatch: "npm:3.0.5" - multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" - p-map: "npm:4.0.0" - p-map-series: "npm:2.1.0" - p-pipe: "npm:3.1.0" - p-queue: "npm:6.6.2" - p-reduce: "npm:2.1.0" - p-waterfall: "npm:2.1.1" - pacote: "npm:^18.0.6" - pify: "npm:5.0.0" - read-cmd-shim: "npm:4.0.0" - resolve-from: "npm:5.0.0" - rimraf: "npm:^4.4.1" - semver: "npm:^7.3.8" - set-blocking: "npm:^2.0.0" - signal-exit: "npm:3.0.7" - slash: "npm:3.0.0" - ssri: "npm:^10.0.6" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - strong-log-transformer: "npm:2.1.0" - tar: "npm:6.2.1" - temp-dir: "npm:1.0.0" - typescript: "npm:>=3 < 6" - upath: "npm:2.0.1" - uuid: "npm:^10.0.0" - validate-npm-package-license: "npm:3.0.4" - validate-npm-package-name: "npm:5.0.1" - wide-align: "npm:1.1.5" - write-file-atomic: "npm:5.0.1" - write-pkg: "npm:4.0.0" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - bin: - lerna: dist/cli.js - checksum: 10c0/e3362d66324f5ee9606dbdb332a6b09eeb2df6378177e36a1bbcf532927d921beb4d25dbcc717c4adf3a7dcd67e0bcee67bedf81fdbe7e78bbecce310358d762 - languageName: node - linkType: hard - -"leven@npm:2.1.0": - version: 2.1.0 - resolution: "leven@npm:2.1.0" - checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e - languageName: node - linkType: hard - -"libnpmaccess@npm:8.0.6": - version: 8.0.6 - resolution: "libnpmaccess@npm:8.0.6" - dependencies: - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - checksum: 10c0/0b63c7cb44e024b0225dae8ebfe5166a0be8a9420c1b5fb6a4f1c795e9eabbed0fff5984ab57167c5634145de018008cbeeb27fe6f808f611ba5ba1b849ec3d6 - languageName: node - linkType: hard - -"libnpmpublish@npm:9.0.9": - version: 9.0.9 - resolution: "libnpmpublish@npm:9.0.9" - dependencies: - ci-info: "npm:^4.0.0" - normalize-package-data: "npm:^6.0.1" - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - proc-log: "npm:^4.2.0" - semver: "npm:^7.3.7" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.6" - checksum: 10c0/5e4bae455d33fb7402b8b8fcc505d89a1d60ff4b7dc47dd9ba318426c00400e1892fd0435d8db6baab808f64d7f226cbf8d53792244ffad1df7fc2f94f3237fc - languageName: node - linkType: hard - -"lie@npm:3.1.1": - version: 3.1.1 - resolution: "lie@npm:3.1.1" - dependencies: - immediate: "npm:~3.0.5" - checksum: 10c0/d62685786590351b8e407814acdd89efe1cb136f05cb9236c5a97b2efdca1f631d2997310ad2d565c753db7596799870140e4777c9c9b8c44a0f6bf42d1804a1 - languageName: node - linkType: hard - -"lines-and-columns@npm:2.0.3": - version: 2.0.3 - resolution: "lines-and-columns@npm:2.0.3" - checksum: 10c0/09525c10010a925b7efe858f1dd3184eeac34f0a9bc34993075ec490efad71e948147746b18e9540279cc87cd44085b038f986903db3de65ffe96d38a7b91c4c - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d - languageName: node - linkType: hard - -"lines-and-columns@npm:~2.0.3": - version: 2.0.4 - resolution: "lines-and-columns@npm:2.0.4" - checksum: 10c0/4db28bf065cd7ad897c0700f22d3d0d7c5ed6777e138861c601c496d545340df3fc19e18bd04ff8d95a246a245eb55685b82ca2f8c2ca53a008e9c5316250379 - languageName: node - linkType: hard - -"load-json-file@npm:6.2.0": - version: 6.2.0 - resolution: "load-json-file@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.15" - parse-json: "npm:^5.0.0" - strip-bom: "npm:^4.0.0" - type-fest: "npm:^0.6.0" - checksum: 10c0/fcb46ef75bab917f37170ba76781a1690bf67144bb53931cb0ed8e4aa20ca439e9c354fcf3594aed531f47dbeb4a49800acab7fdffd553c402ac40c987706d7b - languageName: node - linkType: hard - -"load-json-file@npm:^4.0.0": - version: 4.0.0 - resolution: "load-json-file@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.2" - parse-json: "npm:^4.0.0" - pify: "npm:^3.0.0" - strip-bom: "npm:^3.0.0" - checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 - languageName: node - linkType: hard - -"localforage@npm:^1.9.0": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" - dependencies: - lie: "npm:3.1.1" - checksum: 10c0/00f19f1f97002e6721587ed5017f502d58faf80dae567d5065d4d1ee0caf0762f40d2e2dba7f0ef7d3f14ee6203242daae9ecad97359bfc10ecff36df11d85a3 - languageName: node - linkType: hard - -"locate-path@npm:^2.0.0": - version: 2.0.0 - resolution: "locate-path@npm:2.0.0" - dependencies: - p-locate: "npm:^2.0.0" - path-exists: "npm:^3.0.0" - checksum: 10c0/24efa0e589be6aa3c469b502f795126b26ab97afa378846cb508174211515633b770aa0ba610cab113caedab8d2a4902b061a08aaed5297c12ab6f5be4df0133 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: "npm:^5.0.0" - checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 - languageName: node - linkType: hard - -"lodash.assignin@npm:^4.0.9": - version: 4.2.0 - resolution: "lodash.assignin@npm:4.2.0" - checksum: 10c0/40ac405acf5d6daf27fd40b50c99f823641a9ceba6bd282b18cb9989149204af584b5671f336587c2a263e367c3a2d1105cbf7bdc5ea33cbd0f829b02b16578a - languageName: node - linkType: hard - -"lodash.bind@npm:^4.1.4": - version: 4.2.1 - resolution: "lodash.bind@npm:4.2.1" - checksum: 10c0/e47ae564101c43940fab7f102dd9fb056ae6cc534a3b7bfbaecdf7216dac904ad762150e66a80d1bd5430da7eed4df90ba93996bb24030fad096b698d2ae15af - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 - languageName: node - linkType: hard - -"lodash.defaults@npm:^4.0.1, lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 10c0/d5b77aeb702caa69b17be1358faece33a84497bcca814897383c58b28a2f8dfc381b1d9edbec239f8b425126a3bbe4916223da2a576bb0411c2cefd67df80707 - languageName: node - linkType: hard - -"lodash.filter@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.filter@npm:4.6.0" - checksum: 10c0/bb65002f3ee02b94400b9d8728a46d3ac9fc3eb7df387b3c642f36eff82d716714283ca674889a29edae3c28ea8a4048e6c7bb90598670ab9c97b5d125bffda2 - languageName: node - linkType: hard - -"lodash.flatten@npm:^4.2.0, lodash.flatten@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.flatten@npm:4.4.0" - checksum: 10c0/97e8f0d6b61fe4723c02ad0c6e67e51784c4a2c48f56ef283483e556ad01594cf9cec9c773e177bbbdbdb5d19e99b09d2487cb6b6e5dc405c2693e93b125bd3a - languageName: node - linkType: hard - -"lodash.foreach@npm:^4.3.0": - version: 4.5.0 - resolution: "lodash.foreach@npm:4.5.0" - checksum: 10c0/bd9cc83e87e805b21058ce6cf718dd22db137c7ca08eddbd608549db59989911c571b7195707f615cb37f27bb4f9a9fa9980778940d768c24095f5a04b244c84 - languageName: node - linkType: hard - -"lodash.includes@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.includes@npm:4.3.0" - checksum: 10c0/7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b - languageName: node - linkType: hard - -"lodash.isarguments@npm:^3.1.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: 10c0/5e8f95ba10975900a3920fb039a3f89a5a79359a1b5565e4e5b4310ed6ebe64011e31d402e34f577eca983a1fc01ff86c926e3cbe602e1ddfc858fdd353e62d8 - languageName: node - linkType: hard - -"lodash.isboolean@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isboolean@npm:3.0.3" - checksum: 10c0/0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7 - languageName: node - linkType: hard - -"lodash.isinteger@npm:^4.0.4": - version: 4.0.4 - resolution: "lodash.isinteger@npm:4.0.4" - checksum: 10c0/4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7 - languageName: node - linkType: hard - -"lodash.ismatch@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.ismatch@npm:4.4.0" - checksum: 10c0/8f96a5dc4b8d3fc5a033dcb259d0c3148a1044fa4d02b4a0e8dce0fa1f2ef3ec4ac131e20b5cb2c985a4e9bcb1c37c0aa5af2cef70094959389617347b8fc645 - languageName: node - linkType: hard - -"lodash.isnumber@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isnumber@npm:3.0.3" - checksum: 10c0/2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d - languageName: node - linkType: hard - -"lodash.isplainobject@npm:^4.0.6": - version: 4.0.6 - resolution: "lodash.isplainobject@npm:4.0.6" - checksum: 10c0/afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb - languageName: node - linkType: hard - -"lodash.isstring@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.isstring@npm:4.0.1" - checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 - languageName: node - linkType: hard - -"lodash.map@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.map@npm:4.6.0" - checksum: 10c0/919fe767fa58d3f8369ddd84346636eda71c88a8ef6bde1ca0d87dd37e71614da2ed8bcfc3018ca5b7741ebaf7c01c2d7078b510dca8ab6a0d0ecafd3dc1abcb - languageName: node - linkType: hard - -"lodash.merge@npm:^4.4.0, lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 - languageName: node - linkType: hard - -"lodash.once@npm:^4.0.0": - version: 4.1.1 - resolution: "lodash.once@npm:4.1.1" - checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 - languageName: node - linkType: hard - -"lodash.pick@npm:^4.2.1": - version: 4.4.0 - resolution: "lodash.pick@npm:4.4.0" - checksum: 10c0/a04c460b95d1aaa44e9513d1dacf72ea74d838da843e45831de9de64c303f13cdde1859702a6f4dcef417816898ffd47c6ae0614c957ac70245bed2809b8d2e2 - languageName: node - linkType: hard - -"lodash.reduce@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reduce@npm:4.6.0" - checksum: 10c0/5d2dab823523a1a7f81eb5f4c1edcc03aab55504b1299a2385737389644ba6d2ad219169dfc5c16632a67a345d925ef6a5e8816b4e18a36f94ed66f8e7740b36 - languageName: node - linkType: hard - -"lodash.reject@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reject@npm:4.6.0" - checksum: 10c0/653b5beb1641aeac8bd734775ef6517706897c49197dbe548788558c243434a89dd94b971866b04a0a1df411534db85e96ab7daeb8accf53650119a78de7355f - languageName: node - linkType: hard - -"lodash.some@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.some@npm:4.6.0" - checksum: 10c0/9d3cdb1c8a2ed3d19b02ce146d4962a7859016f752b40fc143d78d3e70985259d6bea71c2c31b8e78f492830f49d755f1be2cdbf85461c54a523089e0c8c0e75 - languageName: node - linkType: hard - -"lodash.unescape@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.unescape@npm:4.0.1" - checksum: 10c0/b050d4e71a1459a397e615833ea296dd679e851ae13f7b2c91d6c2a5cd9a07e9a5be070a1cac3e27ee1c0dd0433d13bc8d3eda426c205cb5c2704a7c077f062a - languageName: node - linkType: hard - -"lodash@npm:^3.2.0": - version: 3.10.1 - resolution: "lodash@npm:3.10.1" - checksum: 10c0/f5f6d3d87503c3f1db27d49b30a00bb38dc1bd9de716c5febe8970259cc7b447149a0e320452ccaf5996a7a4abd63d94df341bb91bd8d336584ad518d8eab144 - languageName: node - linkType: hard - -"lodash@npm:^4.0.1, lodash@npm:^4.17.15, lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: "npm:^4.1.0" - is-unicode-supported: "npm:^0.1.0" - checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 - languageName: node - linkType: hard - -"long-timeout@npm:0.1.1": - version: 0.1.1 - resolution: "long-timeout@npm:0.1.1" - checksum: 10c0/a62240cc8f449d7a00081e817ae543fb1ded4d9fc05492e9fa8d6868cb33b2c9d5d71176a6f8be4473df7ba4b208460b3073b0e05069c3ec286122f3e4b5747f - languageName: node - linkType: hard - -"lowercase-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "lowercase-keys@npm:2.0.0" - checksum: 10c0/f82a2b3568910509da4b7906362efa40f5b54ea14c2584778ddb313226f9cbf21020a5db35f9b9a0e95847a9b781d548601f31793d736b22a2b8ae8eb9ab1082 - languageName: node - linkType: hard - -"lru-cache@npm:10.1.0": - version: 10.1.0 - resolution: "lru-cache@npm:10.1.0" - checksum: 10c0/778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^4.0.1": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: "npm:^1.0.2" - yallist: "npm:^2.1.2" - checksum: 10c0/1ca5306814e5add9ec63556d6fd9b24a4ecdeaef8e9cea52cbf30301e6b88c8d8ddc7cab45b59b56eb763e6c45af911585dc89925a074ab65e1502e3fe8103cf - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 - languageName: node - linkType: hard - -"luxon@npm:^1.23.x": - version: 1.28.1 - resolution: "luxon@npm:1.28.1" - checksum: 10c0/5c561ce4364bb2301ca5811c74d11a9e087f82164109c7997dc8f0959e64d51259d8e630914dca2edc6702525ce5ab066a4b85caa19d04be71f10e79ffe2bc84 - languageName: node - linkType: hard - -"luxon@npm:^3.2.1": - version: 3.5.0 - resolution: "luxon@npm:3.5.0" - checksum: 10c0/335789bba95077db831ef99894edadeb23023b3eb2137a1b56acd0d290082b691cf793143d69e30bc069ec95f0b49f36419f48e951c68014f19ffe12045e3494 - languageName: node - linkType: hard - -"luxon@npm:~3.6.0": - version: 3.6.1 - resolution: "luxon@npm:3.6.1" - checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5 - languageName: node - linkType: hard - -"make-dir@npm:4.0.0, make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: "npm:^7.5.3" - checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 - languageName: node - linkType: hard - -"make-dir@npm:^2.1.0": - version: 2.1.0 - resolution: "make-dir@npm:2.1.0" - dependencies: - pify: "npm:^4.0.1" - semver: "npm:^5.6.0" - checksum: 10c0/ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 - languageName: node - linkType: hard - -"make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: "npm:^6.0.0" - checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa - languageName: node - linkType: hard - -"make-error@npm:^1.1.1, make-error@npm:^1.3.6": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f - languageName: node - linkType: hard - -"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" - dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" - http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e - languageName: node - linkType: hard - -"make-fetch-happen@npm:^14.0.3": - version: 14.0.3 - resolution: "make-fetch-happen@npm:14.0.3" - dependencies: - "@npmcli/agent": "npm:^3.0.0" - cacache: "npm:^19.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^4.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^12.0.0" - checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: "npm:1.0.5" - checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c - languageName: node - linkType: hard - -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: 10c0/ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 - languageName: node - linkType: hard - -"map-obj@npm:^4.0.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: 10c0/1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 - languageName: node - linkType: hard - -"memory-streams@npm:^0.1.3": - version: 0.1.3 - resolution: "memory-streams@npm:0.1.3" - dependencies: - readable-stream: "npm:~1.0.2" - checksum: 10c0/05d1ceff6b420e580ea7b1d8454e42118b06696cbe70c2d5ffc5e0b7df72a4a2152fa4e18216da10d8d5abbd2b2b409b354a8bb6489b30ae854c0dd998c84406 - languageName: node - linkType: hard - -"mensch@npm:^0.3.3": - version: 0.3.4 - resolution: "mensch@npm:0.3.4" - checksum: 10c0/177f9c1cb1acd93da98a971288a5da99f819ac06de19ca450040b18ddf8728c7ae0ce22309fadbbfd4ceb773bc5c03bf1cb93ceb91441da9e76e010d314da2ea - languageName: node - linkType: hard - -"meow@npm:^8.1.2": - version: 8.1.2 - resolution: "meow@npm:8.1.2" - dependencies: - "@types/minimist": "npm:^1.2.0" - camelcase-keys: "npm:^6.2.2" - decamelize-keys: "npm:^1.1.0" - hard-rejection: "npm:^2.1.0" - minimist-options: "npm:4.1.0" - normalize-package-data: "npm:^3.0.0" - read-pkg-up: "npm:^7.0.1" - redent: "npm:^3.0.0" - trim-newlines: "npm:^3.0.0" - type-fest: "npm:^0.18.0" - yargs-parser: "npm:^20.2.3" - checksum: 10c0/9a8d90e616f783650728a90f4ea1e5f763c1c5260369e6596b52430f877f4af8ecbaa8c9d952c93bbefd6d5bda4caed6a96a20ba7d27b511d2971909b01922a2 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"methods@npm:^1.1.1, methods@npm:^1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 - languageName: node - linkType: hard - -"microdata-rdf-streaming-parser@npm:^1.2.0": - version: 1.2.0 - resolution: "microdata-rdf-streaming-parser@npm:1.2.0" - dependencies: - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^6.0.0" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.2" - checksum: 10c0/fc54e45b78d9186061b6bcb915e1e2ae5796ee92e8aaeee9e548012f37487c618361e7e96f95cd8958a2bfab22dde51ddec290366b1c6b6069b94a9aa0a01f73 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mime@npm:1.6.0, mime@npm:^1.4.1": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 - languageName: node - linkType: hard - -"mimer@npm:^1.0.0": - version: 1.1.1 - resolution: "mimer@npm:1.1.1" - bin: - mimer: bin/mimer - checksum: 10c0/e832bd0d45fc2ce76b0de70f9fb8ca5c59f74b987a19d9d417a43175a67646a80846e825956cc8fdb05eae7651496b9c344fb09f5c5f52f9e4786b8291ae528c - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 - languageName: node - linkType: hard - -"mimic-response@npm:^1.0.0": - version: 1.0.1 - resolution: "mimic-response@npm:1.0.1" - checksum: 10c0/c5381a5eae997f1c3b5e90ca7f209ed58c3615caeee850e85329c598f0c000ae7bec40196580eef1781c60c709f47258131dab237cad8786f8f56750594f27fa - languageName: node - linkType: hard - -"mimic-response@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-response@npm:3.1.0" - checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 - languageName: node - linkType: hard - -"min-indent@npm:^1.0.0": - version: 1.0.1 - resolution: "min-indent@npm:1.0.1" - checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd - languageName: node - linkType: hard - -"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimatch@npm:3.0.5": - version: 3.0.5 - resolution: "minimatch@npm:3.0.5" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/f398652d0d260137c289c270a4ac98ebe0a27cd316fa0fac72b096e96cbdc89f71d80d47ac7065c716ba3b0b730783b19180bd85a35f9247535d2adfe96bba76 - languageName: node - linkType: hard - -"minimatch@npm:9.0.3": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 - languageName: node - linkType: hard - -"minimatch@npm:^8.0.2": - version: 8.0.4 - resolution: "minimatch@npm:8.0.4" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/a0a394c356dd5b4cb7f821720841a82fa6f07c9c562c5b716909d1b6ec5e56a7e4c4b5029da26dd256b7d2b3a3f38cbf9ddd8680e887b9b5282b09c05501c1ca - languageName: node - linkType: hard - -"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - kind-of: "npm:^6.0.3" - checksum: 10c0/7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"minimist@npm:~0.0.1": - version: 0.0.10 - resolution: "minimist@npm:0.0.10" - checksum: 10c0/c505a020144b6e49f2b1c7d1e378f3692b7102e989b4a49338fc171eb4229ddddb430e779ff803dcb11854050e3fe3c2298962a7d73c20df7c2044c92b2ba1da - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b - languageName: node - linkType: hard - -"minipass-fetch@npm:^4.0.0": - version: 4.0.1 - resolution: "minipass-fetch@npm:4.0.1" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^3.0.1" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^4.2.4": - version: 4.2.8 - resolution: "minipass@npm:4.2.8" - checksum: 10c0/4ea76b030d97079f4429d6e8a8affd90baf1b6a1898977c8ccce4701c5a2ba2792e033abc6709373f25c2c4d4d95440d9d5e9464b46b7b76ca44d2ce26d939ce - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1": - version: 3.0.2 - resolution: "minizlib@npm:3.0.2" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 - languageName: node - linkType: hard - -"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": - version: 0.5.3 - resolution: "mkdirp-classic@npm:0.5.3" - checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf - languageName: node - linkType: hard - -"mkdirp@npm:^3.0.1": - version: 3.0.1 - resolution: "mkdirp@npm:3.0.1" - bin: - mkdirp: dist/cjs/src/bin.js - checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d - languageName: node - linkType: hard - -"modify-values@npm:^1.0.1": - version: 1.0.1 - resolution: "modify-values@npm:1.0.1" - checksum: 10c0/6acb1b82aaf7a02f9f7b554b20cbfc159f223a79c66b0a257511c5933d50b85e12ea1220b0a90a2af6f80bc29ff784f929a52a51881867a93ae6a12ce87a729a - languageName: node - linkType: hard - -"moleculer-bull@npm:^0.2.5": - version: 0.2.8 - resolution: "moleculer-bull@npm:0.2.8" - dependencies: - bull: "npm:^3.15.0" - lodash: "npm:^4.17.15" - peerDependencies: - moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 - checksum: 10c0/744170d331eb3ddefb34d86e3e5fba02942ed9223a3a2b7c4e7ee893eb49d89c479374dfc77a6d8803a805469856cd00fcb03f63ee718e97ab318d1329eedcef - languageName: node - linkType: hard - -"moleculer-db@npm:^0.8.15, moleculer-db@npm:^0.8.16": - version: 0.8.26 - resolution: "moleculer-db@npm:0.8.26" - dependencies: - "@seald-io/nedb": "npm:^3.0.0" - bluebird: "npm:^3.7.2" - flat: "npm:^5.0.2" - lodash: "npm:^4.17.21" - peerDependencies: - moleculer: ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 - checksum: 10c0/e4797651ecc59e1aa7855ab536fc0be3e6090c6b2f37c94dda37cb397fb8ef750f2325d565b85b55d926db789b05a011a13e0b885cbe9ce81b658fca99e78ef4 - languageName: node - linkType: hard - -"moleculer-mail@npm:^1.2.5": - version: 1.2.6 - resolution: "moleculer-mail@npm:1.2.6" - dependencies: - bluebird: "npm:^3.7.2" - email-templates: "npm:^2.7.1" - lodash: "npm:^4.17.21" - nodemailer: "npm:^4.6.7" - nodemailer-html-to-text: "npm:^2.1.0" - peerDependencies: - moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 - checksum: 10c0/3a8d8af4a7471e2e618470731b989f1c5c33fb4c944c72d7410a63582bcc48bb035c85f31cd62ab552b191043cac049ca972f2088c1c2f42e91f0db0ba8ea79b - languageName: node - linkType: hard - -"moleculer-schedule@npm:^0.2.3": - version: 0.2.3 - resolution: "moleculer-schedule@npm:0.2.3" - dependencies: - lodash: "npm:^4.17.21" - node-schedule: "npm:^2.0.0" - peerDependencies: - moleculer: ^0.14.13 - checksum: 10c0/63e3ae5c5cf4631a09358742c14941ad2ffa7051c552f52bbe0128e8dacd7bf3ce9688a434d94f39d63141d80b15828942e81c2cf0f9c4c4652791ecc469f4fb - languageName: node - linkType: hard - -"moleculer-web@npm:^0.10.0-beta1, moleculer-web@npm:^0.10.7": - version: 0.10.7 - resolution: "moleculer-web@npm:0.10.7" - dependencies: - "@fastify/busboy": "npm:^1.0.0" - body-parser: "npm:^1.19.0" - es6-error: "npm:^4.1.1" - etag: "npm:^1.8.1" - fresh: "npm:^0.5.2" - isstream: "npm:^0.1.2" - kleur: "npm:^4.1.4" - lodash: "npm:^4.17.21" - path-to-regexp: "npm:^3.1.0" - qs: "npm:^6.11.0" - serve-static: "npm:^1.14.1" - peerDependencies: - moleculer: ^0.13.0 || ^0.14.0 - checksum: 10c0/af4964522fcdac7d88d61f7e810fbd7fe4500b6d6c7882c0cf8f7a4b28ac4402a32136a7b0635d1d3ceac5a4abd9648056048c5516d9a7be234541c13076024b - languageName: node - linkType: hard - -"moleculer@npm:^0.14.17, moleculer@npm:^0.14.18, moleculer@npm:^0.14.29, moleculer@npm:^0.14.35": - version: 0.14.35 - resolution: "moleculer@npm:0.14.35" - dependencies: - args: "npm:^5.0.3" - eventemitter2: "npm:^6.4.9" - fastest-validator: "npm:^1.19.0" - glob: "npm:^7.2.0" - ipaddr.js: "npm:^2.2.0" - kleur: "npm:^4.1.5" - lodash: "npm:^4.17.21" - lru-cache: "npm:^6.0.0" - node-fetch: "npm:^2.6.7" - recursive-watch: "npm:^1.1.4" - peerDependencies: - amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 - avsc: ^5.0.0 - bunyan: ^1.0.0 - cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 - dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 - debug: ^4.0.0 - etcd3: ^1.0.0 - ioredis: ^4.0.0 || ^5.0.0 - jaeger-client: ^3.0.0 - kafka-node: ^5.0.0 - log4js: ^6.0.0 - mqtt: ^4.0.0 || ^5.0.0 - msgpack5: ^5.0.0 || ^6.0.0 - nats: ^1.0.0 || ^2.0.0 - node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 - notepack.io: ^2.0.0 || ^3.0.0 - pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - protobufjs: ^6.0.0 || ^7.0.0 - redlock: ^4.0.0 - rhea-promise: ^1.0.0 || ^2.0.0 - thrift: ^0.12.0 || ^0.16.0 - winston: ^3.0.0 - peerDependenciesMeta: - amqplib: - optional: true - avsc: - optional: true - bunyan: - optional: true - cbor-x: - optional: true - dd-trace: - optional: true - debug: - optional: true - etcd3: - optional: true - ioredis: - optional: true - jaeger-client: - optional: true - kafka-node: - optional: true - log4js: - optional: true - mqtt: - optional: true - msgpack5: - optional: true - nats: - optional: true - node-nats-streaming: - optional: true - notepack.io: - optional: true - pino: - optional: true - protobufjs: - optional: true - redlock: - optional: true - rhea-promise: - optional: true - thrift: - optional: true - winston: - optional: true - bin: - moleculer-runner: bin/moleculer-runner.js - moleculer-runner-esm: bin/moleculer-runner.mjs - checksum: 10c0/471cfd38994bf3e08abc39342413bb79ad5aab518b0fbc1329b74f3c6fb9ecff0826323e7030dfbd7ae20c5f94d3743bdaebbfe6eeb4a9faa8b02d0b7e990b29 - languageName: node - linkType: hard - -"moment-timezone@npm:^0.5.31": - version: 0.5.46 - resolution: "moment-timezone@npm:0.5.46" - dependencies: - moment: "npm:^2.29.4" - checksum: 10c0/003fd278d1aa3e63afff340a318735db80157b7a343e3f807cac10e026def214f0e71b52d582b89a11ee0a19f5d9f0da2752b7959d855429f2b715d4859d3722 - languageName: node - linkType: hard - -"moment@npm:2.30.1, moment@npm:^2.29.4": - version: 2.30.1 - resolution: "moment@npm:2.30.1" - checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a - languageName: node - linkType: hard - -"mri@npm:1.1.4": - version: 1.1.4 - resolution: "mri@npm:1.1.4" - checksum: 10c0/eb577c2ef60385aa287afdac777e536996f4fd3144250c201097e7ec121568139d482c92cb9a512f90e428d6dc3e9ba8e9de89bc204424cb96f187a4bdc465c1 - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"multimatch@npm:5.0.0": - version: 5.0.0 - resolution: "multimatch@npm:5.0.0" - dependencies: - "@types/minimatch": "npm:^3.0.3" - array-differ: "npm:^3.0.0" - array-union: "npm:^2.1.0" - arrify: "npm:^2.0.1" - minimatch: "npm:^3.0.4" - checksum: 10c0/252ffae6d19491c169c22fc30cf8a99f6031f94a3495f187d3430b06200e9f05a7efae90ab9d834f090834e0d9c979ab55e7ad21f61a37995d807b4b0ccdcbd1 - languageName: node - linkType: hard - -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: 10c0/18d06d92e5d6d45e2b63c0e1b8f25376af71748ac36f53c059baa8b76ffac31c5ab225480494e7d35d30215ecdb18fed26ec23cafcd2f7733f2f14406bcd19e2 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"n3@npm:^1.26.0": - version: 1.26.0 - resolution: "n3@npm:1.26.0" - dependencies: - buffer: "npm:^6.0.3" - readable-stream: "npm:^4.0.0" - checksum: 10c0/e8a399f9295ccbd4008113bebdbdb15e5ef824e2d396a94d70cc7c1a94261a72869622bd1d78b3e94ea48056d5cd1b42e3b6d8acd1e0261f387e94ac6403013d - languageName: node - linkType: hard - -"n3@npm:^1.6.3, n3@npm:^1.8.0": - version: 1.23.1 - resolution: "n3@npm:1.23.1" - dependencies: - buffer: "npm:^6.0.3" - queue-microtask: "npm:^1.1.2" - readable-stream: "npm:^4.0.0" - checksum: 10c0/9f7f179b3f358f37c284dc65907f4f12b079657d5eaea0ed4e0f1dc248e54caf68e3c62439c6a1d3d1b3eec06edb18e20aa7d12da494b49ff112f5dd72b0d414 - languageName: node - linkType: hard - -"nan@npm:^2.19.0, nan@npm:^2.20.0": - version: 2.22.0 - resolution: "nan@npm:2.22.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/d5d31aefdb218deba308d44867c5f432b4d3aabeb57c70a2b236d62652e9fee7044e5d5afd380d9fef022fe7ebb2f2d6c85ca3cbcac5031aaca3592c844526bb - languageName: node - linkType: hard - -"nanoid@npm:^3.3.8": - version: 3.3.8 - resolution: "nanoid@npm:3.3.8" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 - languageName: node - linkType: hard - -"napi-build-utils@npm:^1.0.1": - version: 1.0.2 - resolution: "napi-build-utils@npm:1.0.2" - checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 - languageName: node - linkType: hard - -"napi-postinstall@npm:^0.3.0": - version: 0.3.3 - resolution: "napi-postinstall@npm:0.3.3" - bin: - napi-postinstall: lib/cli.js - checksum: 10c0/3f3297c002abd1f1c64730c442e9047e4b50335666bd2821e990e0546ab917f9cd000d3837930a81dbe89075495e884ed526918a85667abeef0654f659217cea - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 - languageName: node - linkType: hard - -"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": - version: 0.6.4 - resolution: "negotiator@npm:0.6.4" - checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d - languageName: node - linkType: hard - -"nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::locator=%40semapps%2Ftriplestore%40workspace%3Apackages%2Ftriplestore": - version: 0.1.1-alpha.7 - resolution: "nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node#../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::hash=d24187&locator=%40semapps%2Ftriplestore%40workspace%3Apackages%2Ftriplestore" - checksum: 10c0/64289f03d335271e8d1b412e3082090d2e6818ab81d0285ebc7673f53225c89a8ec43688b7343e35f38c5d008d18a981c17c965147b621ef1c846ba29f8d0e58 - languageName: node - linkType: hard - -"node-abi@npm:^3.3.0": - version: 3.73.0 - resolution: "node-abi@npm:3.73.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/4cd237f2507f80048310f381198a07387b11cbaab7dfac61ccc40cdc83f2296c647df02b5ddfead9f40b845c696f0ce75fdaa01973d3f3f0686151e4f96d2c8c - languageName: node - linkType: hard - -"node-addon-api@npm:^5.0.0": - version: 5.1.0 - resolution: "node-addon-api@npm:5.1.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d - languageName: node - linkType: hard - -"node-domexception@npm:^1.0.0": - version: 1.0.0 - resolution: "node-domexception@npm:1.0.0" - checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b - languageName: node - linkType: hard - -"node-fetch@npm:2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/fcae80f5ac52fbf5012f5e19df2bd3915e67d3b3ad51cb5942943df2238d32ba15890fecabd0e166876a9f98a581ab50f3f10eb942b09405c49ef8da36b826c7 - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"node-fetch@npm:^3.2.10": - version: 3.3.2 - resolution: "node-fetch@npm:3.3.2" - dependencies: - data-uri-to-buffer: "npm:^4.0.0" - fetch-blob: "npm:^3.1.4" - formdata-polyfill: "npm:^4.0.10" - checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 - languageName: node - linkType: hard - -"node-forge@npm:^0.10.0, node-forge@npm:~0.10.0": - version: 0.10.0 - resolution: "node-forge@npm:0.10.0" - checksum: 10c0/9cbf9ac8fc3889a5a46b0248f7238ee4014770bf31d22e04c0c7f04ed91c8be4584c5f534cdf6037e99f236c636c925cba960501ed2b850e077512e152760663 - languageName: node - linkType: hard - -"node-gyp-build@npm:^4.3.0": - version: 4.8.4 - resolution: "node-gyp-build@npm:4.8.4" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 - languageName: node - linkType: hard - -"node-gyp@npm:^10.0.0": - version: 10.3.1 - resolution: "node-gyp@npm:10.3.1" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - tar: "npm:^6.2.1" - which: "npm:^4.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/87c3b50e1f6f5256b5d2879a8c064eefa53ed444bad2a20870be43bc189db7cbffe22c30af056046c6d904181d73881b1726fd391d2f6f79f89b991019f195ea - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 11.3.0 - resolution: "node-gyp@npm:11.3.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^14.0.3" - nopt: "npm:^8.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.4.3" - tinyglobby: "npm:^0.2.12" - which: "npm:^5.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/5f4ad5a729386f7b50096efd4934b06c071dbfbc7d7d541a66d6959a7dccd62f53ff3dc95fffb60bf99d8da1270e23769f82246fcaa6c5645a70c967ae9a3398 - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a - languageName: node - linkType: hard - -"node-machine-id@npm:1.1.12": - version: 1.1.12 - resolution: "node-machine-id@npm:1.1.12" - checksum: 10c0/ab2fea5f75a6f1ce3c76c5e0ae3903b631230e0a99b003d176568fff8ddbdf7b2943be96cd8d220c497ca0f6149411831f8a450601929f326781cb1b59bab7f8 - languageName: node - linkType: hard - -"node-releases@npm:^2.0.19": - version: 2.0.19 - resolution: "node-releases@npm:2.0.19" - checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa - languageName: node - linkType: hard - -"node-schedule@npm:^2.0.0": - version: 2.1.1 - resolution: "node-schedule@npm:2.1.1" - dependencies: - cron-parser: "npm:^4.2.0" - long-timeout: "npm:0.1.1" - sorted-array-functions: "npm:^1.3.0" - checksum: 10c0/6ec51b34b9e676740ac25298e4ced5ee46053379f0d3aad533e51d7e083bc24ced045df1772a95bf9d9cfdb81299340bbf551549a7c5eb6e4d2dc6468c85c70e - languageName: node - linkType: hard - -"nodemailer-html-to-text@npm:^2.1.0": - version: 2.1.0 - resolution: "nodemailer-html-to-text@npm:2.1.0" - dependencies: - html-to-text: "npm:^2.1.0" - checksum: 10c0/068d6aa086a46f7d137775b87dfa1177916f352a1c0c3d1b7959e8591fc98fabcaa5e1bec32ff71c536a01fd51914dfc93f2112a0ee27a3dbaf6ab31d2ebe88c - languageName: node - linkType: hard - -"nodemailer@npm:^4.6.7": - version: 4.7.0 - resolution: "nodemailer@npm:4.7.0" - checksum: 10c0/62a330b88f0982c1474adb92b909ad33620ff194c24977e43118b71ed7f9ff17b54a34f8e5db805001925f01f6c0b5356d3765b7bd9f5cc5a07dfc78ea57263a - languageName: node - linkType: hard - -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: "npm:1" - bin: - nopt: bin/nopt.js - checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 - languageName: node - linkType: hard - -"nopt@npm:^7.0.0, nopt@npm:^7.2.1": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 - languageName: node - linkType: hard - -"nopt@npm:^8.0.0": - version: 8.1.0 - resolution: "nopt@npm:8.1.0" - dependencies: - abbrev: "npm:^3.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef - languageName: node - linkType: hard - -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: "npm:^2.1.4" - resolve: "npm:^1.10.0" - semver: "npm:2 || 3 || 4 || 5" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 - languageName: node - linkType: hard - -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: "npm:^4.0.1" - is-core-module: "npm:^2.5.0" - semver: "npm:^7.3.4" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be - languageName: node - linkType: hard - -"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": - version: 6.0.2 - resolution: "normalize-package-data@npm:6.0.2" - dependencies: - hosted-git-info: "npm:^7.0.0" - semver: "npm:^7.3.5" - validate-npm-package-license: "npm:^3.0.4" - checksum: 10c0/7e32174e7f5575ede6d3d449593247183880122b4967d4ae6edb28cea5769ca025defda54fc91ec0e3c972fdb5ab11f9284606ba278826171b264cb16a9311ef - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - -"normalize-url@npm:^6.0.1": - version: 6.1.0 - resolution: "normalize-url@npm:6.1.0" - checksum: 10c0/95d948f9bdd2cfde91aa786d1816ae40f8262946e13700bf6628105994fe0ff361662c20af3961161c38a119dc977adeb41fc0b41b1745eb77edaaf9cb22db23 - languageName: node - linkType: hard - -"npm-bundled@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-bundled@npm:3.0.1" - dependencies: - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10c0/7975590a50b7ce80dd9f3eddc87f7e990c758f2f2c4d9313dd67a9aca38f1a5ac0abe20d514b850902c441e89d2346adfc3c6f1e9cbab3ea28ebb653c4442440 - languageName: node - linkType: hard - -"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": - version: 6.3.0 - resolution: "npm-install-checks@npm:6.3.0" - dependencies: - semver: "npm:^7.1.1" - checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 - languageName: node - linkType: hard - -"npm-normalize-package-bin@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-normalize-package-bin@npm:3.0.1" - checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 - languageName: node - linkType: hard - -"npm-package-arg@npm:11.0.2": - version: 11.0.2 - resolution: "npm-package-arg@npm:11.0.2" - dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/d730572e128980db45c97c184a454cb565283bf849484bf92e3b4e8ec2d08a21bd4b2cba9467466853add3e8c7d81e5de476904ac241f3ae63e6905dfc8196d4 - languageName: node - linkType: hard - -"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": - version: 11.0.3 - resolution: "npm-package-arg@npm:11.0.3" - dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a - languageName: node - linkType: hard - -"npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": - version: 8.0.2 - resolution: "npm-packlist@npm:8.0.2" - dependencies: - ignore-walk: "npm:^6.0.4" - checksum: 10c0/ac3140980b1475c2e9acd3d0ca1acd0f8660c357aed357f1a4ebff2270975e0280a3b1c4938e2f16bd68217853ceb5725cf8779ec3752dfcc546582751ceedff - languageName: node - linkType: hard - -"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": - version: 9.1.0 - resolution: "npm-pick-manifest@npm:9.1.0" - dependencies: - npm-install-checks: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - npm-package-arg: "npm:^11.0.0" - semver: "npm:^7.3.5" - checksum: 10c0/8765f4199755b381323da2bff2202b4b15b59f59dba0d1be3f2f793b591321cd19e1b5a686ef48d9753a6bd4868550da632541a45dfb61809d55664222d73e44 - languageName: node - linkType: hard - -"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": - version: 17.1.0 - resolution: "npm-registry-fetch@npm:17.1.0" - dependencies: - "@npmcli/redact": "npm:^2.0.0" - jsonparse: "npm:^1.3.1" - make-fetch-happen: "npm:^13.0.0" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minizlib: "npm:^2.1.2" - npm-package-arg: "npm:^11.0.0" - proc-log: "npm:^4.0.0" - checksum: 10c0/3f66214e106609fd2e92704e62ac929cba1424d4013fec50f783afbb81168b0dc14457d35c1716a77e30fc482c3576bdc4e4bc5c84a714cac59cf98f96a17f47 - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: "npm:^3.0.0" - checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac - languageName: node - linkType: hard - -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: "npm:^2.0.0" - console-control-strings: "npm:^1.1.0" - gauge: "npm:^3.0.0" - set-blocking: "npm:^2.0.0" - checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa - languageName: node - linkType: hard - -"nth-check@npm:~1.0.0, nth-check@npm:~1.0.1": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: "npm:~1.0.0" - checksum: 10c0/1a67ce53a99e276eea672f892d712b29f3e6802bbbef7285ffab72ecea4f972e8244defac1ebded0daffabf459def31355bb9c64e5657ac2ab032c13f185d0fd - languageName: node - linkType: hard - -"nx@npm:17.2.5, nx@npm:v17.2.5": - version: 17.2.5 - resolution: "nx@npm:17.2.5" - dependencies: - "@nrwl/tao": "npm:v17.2.5" - "@nx/nx-darwin-arm64": "npm:v17.2.5" - "@nx/nx-darwin-x64": "npm:v17.2.5" - "@nx/nx-freebsd-x64": "npm:v17.2.5" - "@nx/nx-linux-arm-gnueabihf": "npm:v17.2.5" - "@nx/nx-linux-arm64-gnu": "npm:v17.2.5" - "@nx/nx-linux-arm64-musl": "npm:v17.2.5" - "@nx/nx-linux-x64-gnu": "npm:v17.2.5" - "@nx/nx-linux-x64-musl": "npm:v17.2.5" - "@nx/nx-win32-arm64-msvc": "npm:v17.2.5" - "@nx/nx-win32-x64-msvc": "npm:v17.2.5" - "@yarnpkg/lockfile": "npm:^1.1.0" - "@yarnpkg/parsers": "npm:3.0.0-rc.46" - "@zkochan/js-yaml": "npm:0.0.6" - axios: "npm:^1.5.1" - chalk: "npm:^4.1.0" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:^8.0.1" - dotenv: "npm:~16.3.1" - dotenv-expand: "npm:~10.0.0" - enquirer: "npm:~2.3.6" - figures: "npm:3.2.0" - flat: "npm:^5.0.2" - fs-extra: "npm:^11.1.0" - glob: "npm:7.1.4" - ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" - js-yaml: "npm:4.1.0" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:~2.0.3" - minimatch: "npm:3.0.5" - node-machine-id: "npm:1.1.12" - npm-run-path: "npm:^4.0.1" - open: "npm:^8.4.0" - semver: "npm:7.5.3" - string-width: "npm:^4.2.3" - strong-log-transformer: "npm:^2.1.0" - tar-stream: "npm:~2.2.0" - tmp: "npm:~0.2.1" - tsconfig-paths: "npm:^4.1.2" - tslib: "npm:^2.3.0" - yargs: "npm:^17.6.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.6.7 - "@swc/core": ^1.3.85 - dependenciesMeta: - "@nx/nx-darwin-arm64": - optional: true - "@nx/nx-darwin-x64": - optional: true - "@nx/nx-freebsd-x64": - optional: true - "@nx/nx-linux-arm-gnueabihf": - optional: true - "@nx/nx-linux-arm64-gnu": - optional: true - "@nx/nx-linux-arm64-musl": - optional: true - "@nx/nx-linux-x64-gnu": - optional: true - "@nx/nx-linux-x64-musl": - optional: true - "@nx/nx-win32-arm64-msvc": - optional: true - "@nx/nx-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@swc-node/register": - optional: true - "@swc/core": - optional: true - bin: - nx: bin/nx.js - nx-cloud: bin/nx-cloud.js - checksum: 10c0/5438bd50e19a6fab01f4f08847045f4d9f67d446eed279027ca7de11a2f20ca9ad0a7e2ec195d8422d2c1f9e401eb3bb7bfd01e97c7c4cd933ed763949f6dbd4 - languageName: node - linkType: hard - -"nx@npm:>=17.1.2 < 21": - version: 20.3.2 - resolution: "nx@npm:20.3.2" - dependencies: - "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:20.3.2" - "@nx/nx-darwin-x64": "npm:20.3.2" - "@nx/nx-freebsd-x64": "npm:20.3.2" - "@nx/nx-linux-arm-gnueabihf": "npm:20.3.2" - "@nx/nx-linux-arm64-gnu": "npm:20.3.2" - "@nx/nx-linux-arm64-musl": "npm:20.3.2" - "@nx/nx-linux-x64-gnu": "npm:20.3.2" - "@nx/nx-linux-x64-musl": "npm:20.3.2" - "@nx/nx-win32-arm64-msvc": "npm:20.3.2" - "@nx/nx-win32-x64-msvc": "npm:20.3.2" - "@yarnpkg/lockfile": "npm:^1.1.0" - "@yarnpkg/parsers": "npm:3.0.2" - "@zkochan/js-yaml": "npm:0.0.7" - axios: "npm:^1.7.4" - chalk: "npm:^4.1.0" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:^8.0.1" - dotenv: "npm:~16.4.5" - dotenv-expand: "npm:~11.0.6" - enquirer: "npm:~2.3.6" - figures: "npm:3.2.0" - flat: "npm:^5.0.2" - front-matter: "npm:^4.0.2" - ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:2.0.3" - minimatch: "npm:9.0.3" - node-machine-id: "npm:1.1.12" - npm-run-path: "npm:^4.0.1" - open: "npm:^8.4.0" - ora: "npm:5.3.0" - resolve.exports: "npm:2.0.3" - semver: "npm:^7.5.3" - string-width: "npm:^4.2.3" - tar-stream: "npm:~2.2.0" - tmp: "npm:~0.2.1" - tsconfig-paths: "npm:^4.1.2" - tslib: "npm:^2.3.0" - yaml: "npm:^2.6.0" - yargs: "npm:^17.6.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.8.0 - "@swc/core": ^1.3.85 - dependenciesMeta: - "@nx/nx-darwin-arm64": - optional: true - "@nx/nx-darwin-x64": - optional: true - "@nx/nx-freebsd-x64": - optional: true - "@nx/nx-linux-arm-gnueabihf": - optional: true - "@nx/nx-linux-arm64-gnu": - optional: true - "@nx/nx-linux-arm64-musl": - optional: true - "@nx/nx-linux-x64-gnu": - optional: true - "@nx/nx-linux-x64-musl": - optional: true - "@nx/nx-win32-arm64-msvc": - optional: true - "@nx/nx-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@swc-node/register": - optional: true - "@swc/core": - optional: true - bin: - nx: bin/nx.js - nx-cloud: bin/nx-cloud.js - checksum: 10c0/e84b748f45cdce3f57a17b99627a8d2d7ff9c41a4eaa9b88775576b03e3dcd9d0f707f28303b05483fe9478dce58f2d7ecf9a29e8a12902a8247e73a4ae48755 - languageName: node - linkType: hard - -"oauth-sign@npm:~0.9.0": - version: 0.9.0 - resolution: "oauth-sign@npm:0.9.0" - checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-hash@npm:^2.0.1": - version: 2.2.0 - resolution: "object-hash@npm:2.2.0" - checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.3 - resolution: "object-inspect@npm:1.13.3" - checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d - languageName: node - linkType: hard - -"object.assign@npm:^4.1.2, object.assign@npm:^4.1.7": - version: 4.1.7 - resolution: "object.assign@npm:4.1.7" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - has-symbols: "npm:^1.1.0" - object-keys: "npm:^1.1.1" - checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc - languageName: node - linkType: hard - -"object.entries@npm:^1.1.5": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.2, object.fromentries@npm:^2.0.8": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b - languageName: node - linkType: hard - -"object.getownpropertydescriptors@npm:^2.1.8": - version: 2.1.8 - resolution: "object.getownpropertydescriptors@npm:2.1.8" - dependencies: - array.prototype.reduce: "npm:^1.0.6" - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - gopd: "npm:^1.0.1" - safe-array-concat: "npm:^1.1.2" - checksum: 10c0/553e9562fd86637c9c169df23a56f1d810d8c9b580a6d4be11552c009f32469310c9347f3d10325abf0cd9cfe4afc521a1e903fbd24148ae7ec860e1e7c75cf3 - languageName: node - linkType: hard - -"object.groupby@npm:^1.0.3": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c - languageName: node - linkType: hard - -"object.values@npm:^1.2.0": - version: 1.2.1 - resolution: "object.values@npm:1.2.1" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 - languageName: node - linkType: hard - -"oidc-token-hash@npm:^5.0.1": - version: 5.0.3 - resolution: "oidc-token-hash@npm:5.0.3" - checksum: 10c0/d0dc0551406f09577874155cc83cf69c39e4b826293d50bb6c37936698aeca17d4bcee356ab910c859e53e83f2728a2acbd041020165191353b29de51fbca615 - languageName: node - linkType: hard - -"on-finished@npm:2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: "npm:1.1.1" - checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 - languageName: node - linkType: hard - -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f - languageName: node - linkType: hard - -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f - languageName: node - linkType: hard - -"open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" - dependencies: - define-lazy-prop: "npm:^2.0.0" - is-docker: "npm:^2.1.1" - is-wsl: "npm:^2.2.0" - checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 - languageName: node - linkType: hard - -"openid-client@npm:^4.7.4": - version: 4.9.1 - resolution: "openid-client@npm:4.9.1" - dependencies: - aggregate-error: "npm:^3.1.0" - got: "npm:^11.8.0" - jose: "npm:^2.0.5" - lru-cache: "npm:^6.0.0" - make-error: "npm:^1.3.6" - object-hash: "npm:^2.0.1" - oidc-token-hash: "npm:^5.0.1" - checksum: 10c0/88af2e7c17e62eaddd3f27e96567ef9c08dbd3266a6ff9c4e058128191d2d4ec07c49eaa523d9159953835fc90c59470270f6050872afb70c5c9576c387833e7 - languageName: node - linkType: hard - -"optimist@npm:^0.6.1": - version: 0.6.1 - resolution: "optimist@npm:0.6.1" - dependencies: - minimist: "npm:~0.0.1" - wordwrap: "npm:~0.0.2" - checksum: 10c0/8cb417328121e732dbfb4d94d53bb39b1406446b55323ed4ce787decc52394927e051ba879eb3ffa3171fe22a35ce13b460114b60effcead77443ee87c2f9b0f - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - dependencies: - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - word-wrap: "npm:^1.2.5" - checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 - languageName: node - linkType: hard - -"ora@npm:5.3.0": - version: 5.3.0 - resolution: "ora@npm:5.3.0" - dependencies: - bl: "npm:^4.0.3" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - log-symbols: "npm:^4.0.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10c0/30d5f3218eb75b0a2028c5fb9aa88e83e38a2f1745ab56839abb06c3ba31bae35f768f4e72c4f9e04e2a66be6a898e9312e8cf85c9333e1e3613eabb8c7cdf57 - languageName: node - linkType: hard - -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: "npm:^4.1.0" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - is-unicode-supported: "npm:^0.1.0" - log-symbols: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10c0/10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"own-keys@npm:^1.0.1": - version: 1.0.1 - resolution: "own-keys@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.2.6" - object-keys: "npm:^1.1.1" - safe-push-apply: "npm:^1.0.0" - checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a - languageName: node - linkType: hard - -"p-cancelable@npm:^2.0.0": - version: 2.1.1 - resolution: "p-cancelable@npm:2.1.1" - checksum: 10c0/8c6dc1f8dd4154fd8b96a10e55a3a832684c4365fb9108056d89e79fbf21a2465027c04a59d0d797b5ffe10b54a61a32043af287d5c4860f1e996cbdbc847f01 - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 - languageName: node - linkType: hard - -"p-limit@npm:^1.1.0": - version: 1.3.0 - resolution: "p-limit@npm:1.3.0" - dependencies: - p-try: "npm:^1.0.0" - checksum: 10c0/5c1b1d53d180b2c7501efb04b7c817448e10efe1ba46f4783f8951994d5027e4cd88f36ad79af50546682594c4ebd11702ac4b9364c47f8074890e2acad0edee - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-locate@npm:^2.0.0": - version: 2.0.0 - resolution: "p-locate@npm:2.0.0" - dependencies: - p-limit: "npm:^1.1.0" - checksum: 10c0/82da4be88fb02fd29175e66021610c881938d3cc97c813c71c1a605fac05617d57fd5d3b337494a6106c0edb2a37c860241430851411f1b265108cead34aee67 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: "npm:^3.0.2" - checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a - languageName: node - linkType: hard - -"p-map-series@npm:2.1.0": - version: 2.1.0 - resolution: "p-map-series@npm:2.1.0" - checksum: 10c0/302ca686a61c498b227fc45d4e2b2e5bfd20a03f4156a976d94c4ff7decf9cd5a815fa6846b43b37d587ffa8d4671ff2bd596fa83fe8b9113b5102da94940e2a - languageName: node - linkType: hard - -"p-map@npm:4.0.0, p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - -"p-map@npm:^2.1.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c - languageName: node - linkType: hard - -"p-pipe@npm:3.1.0": - version: 3.1.0 - resolution: "p-pipe@npm:3.1.0" - checksum: 10c0/9b3076828ea7e9469c0f92c78fa44096726208d547efdb2d6148cbe135d1a70bd449de5be13e234dd669d9515343bd68527b316bf9d5639cee639e2fdde20aaf - languageName: node - linkType: hard - -"p-queue@npm:6.6.2": - version: 6.6.2 - resolution: "p-queue@npm:6.6.2" - dependencies: - eventemitter3: "npm:^4.0.4" - p-timeout: "npm:^3.2.0" - checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e - languageName: node - linkType: hard - -"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": - version: 2.1.0 - resolution: "p-reduce@npm:2.1.0" - checksum: 10c0/27b8ff0fb044995507a06cd6357dffba0f2b98862864745972562a21885d7906ce5c794036d2aaa63ef6303158e41e19aed9f19651dfdafb38548ecec7d0de15 - languageName: node - linkType: hard - -"p-timeout@npm:^3.2.0": - version: 3.2.0 - resolution: "p-timeout@npm:3.2.0" - dependencies: - p-finally: "npm:^1.0.0" - checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 - languageName: node - linkType: hard - -"p-try@npm:^1.0.0": - version: 1.0.0 - resolution: "p-try@npm:1.0.0" - checksum: 10c0/757ba31de5819502b80c447826fac8be5f16d3cb4fbf9bc8bc4971dba0682e84ac33e4b24176ca7058c69e29f64f34d8d9e9b08e873b7b7bb0aa89d620fa224a - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"p-waterfall@npm:2.1.1": - version: 2.1.1 - resolution: "p-waterfall@npm:2.1.1" - dependencies: - p-reduce: "npm:^2.0.0" - checksum: 10c0/ccae582b75a3597018a375f8eac32b93e8bfb9fc22a8e5037787ef4ebf5958d7465c2d3cbe26443971fbbfda2bcb7b645f694b91f928fc9a71fa5031e6e33f85 - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"pacote@npm:^18.0.0, pacote@npm:^18.0.6": - version: 18.0.6 - resolution: "pacote@npm:18.0.6" - dependencies: - "@npmcli/git": "npm:^5.0.0" - "@npmcli/installed-package-contents": "npm:^2.0.1" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - "@npmcli/run-script": "npm:^8.0.0" - cacache: "npm:^18.0.0" - fs-minipass: "npm:^3.0.0" - minipass: "npm:^7.0.2" - npm-package-arg: "npm:^11.0.0" - npm-packlist: "npm:^8.0.0" - npm-pick-manifest: "npm:^9.0.0" - npm-registry-fetch: "npm:^17.0.0" - proc-log: "npm:^4.0.0" - promise-retry: "npm:^2.0.1" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - bin: - pacote: bin/index.js - checksum: 10c0/d80907375dd52a521255e0debca1ba9089ad8fd7acdf16c5a5db2ea2a5bb23045e2bcf08d1648b1ebc40fcc889657db86ff6187ff5f8d2fc312cd6ad1ec4c6ac - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"parse-conflict-json@npm:^3.0.0": - version: 3.0.1 - resolution: "parse-conflict-json@npm:3.0.1" - dependencies: - json-parse-even-better-errors: "npm:^3.0.0" - just-diff: "npm:^6.0.0" - just-diff-apply: "npm:^5.2.0" - checksum: 10c0/610b37181229ce3e945125c3a9548ec24d1de2d697a7ea3ef0f2660cccc6613715c2ba4bdbaf37c565133d6b61758703618a2c63d1ee29f97fd33c70a8aae323 - languageName: node - linkType: hard - -"parse-imports@npm:^2.1.1": - version: 2.2.1 - resolution: "parse-imports@npm:2.2.1" - dependencies: - es-module-lexer: "npm:^1.5.3" - slashes: "npm:^3.0.12" - checksum: 10c0/bc541ce4ef2ff77d53247de39a956e0ee7a1a4b9b175c3e0f898222fe7994595f011491154db4ed408cbaf5049ede9d0b6624125565be208e973a54420cbe069 - languageName: node - linkType: hard - -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: "npm:^1.3.1" - json-parse-better-errors: "npm:^1.0.1" - checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": "npm:^7.0.0" - error-ex: "npm:^1.3.1" - json-parse-even-better-errors: "npm:^2.3.0" - lines-and-columns: "npm:^1.1.6" - checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 - languageName: node - linkType: hard - -"parse-link-header@npm:^1.0.1": - version: 1.0.1 - resolution: "parse-link-header@npm:1.0.1" - dependencies: - xtend: "npm:~4.0.1" - checksum: 10c0/7d0c1f94b4d400ac8605e6d18aced0139e15a08f3dc886567894953727db82bb387febb9a7a6837a4809ca75abd32364bb54d447c050db4a017754ff8949c1fa - languageName: node - linkType: hard - -"parse-path@npm:^7.0.0": - version: 7.0.0 - resolution: "parse-path@npm:7.0.0" - dependencies: - protocols: "npm:^2.0.0" - checksum: 10c0/e7646f6b998b083bbd40102643d803557ce4ae18ae1704e6cc7ae2525ea7c5400f4a3635aca3244cfe65ce4dd0ff77db1142dde4d080e8a80c364c4b3e8fe8d2 - languageName: node - linkType: hard - -"parse-srcset@npm:^1.0.2": - version: 1.0.2 - resolution: "parse-srcset@npm:1.0.2" - checksum: 10c0/2f268e3d110d4c53d06ed2a8e8ee61a7da0cee13bf150819a6da066a8ca9b8d15b5600d6e6cae8be940e2edc50ee7c1e1052934d6ec858324065ecef848f0497 - languageName: node - linkType: hard - -"parse-url@npm:^8.1.0": - version: 8.1.0 - resolution: "parse-url@npm:8.1.0" - dependencies: - parse-path: "npm:^7.0.0" - checksum: 10c0/68b95afdf4bbf72e57c7ab66f8757c935fff888f7e2b0f1e06098b4faa19e06b6b743bddaed5bc8df4f0c2de6fc475355d787373b2fdd40092be9e4e4b996648 - languageName: node - linkType: hard - -"parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 - languageName: node - linkType: hard - -"passport-cas2@npm:0.0.12": - version: 0.0.12 - resolution: "passport-cas2@npm:0.0.12" - dependencies: - cas: "git+https://github.com/joshchan/node-cas.git" - passport-strategy: "npm:^1.0.0" - checksum: 10c0/86050abe8da35304efae98402f4b6be1be9793d43d78e30e83d7431e8ab5e389aa12c348d426144f53413ce6d19240227e7a7f22e7253c768d1f6cabf34b3409 - languageName: node - linkType: hard - -"passport-local@npm:^1.0.0": - version: 1.0.0 - resolution: "passport-local@npm:1.0.0" - dependencies: - passport-strategy: "npm:1.x.x" - checksum: 10c0/59becb988014921a5d6056470d9373c41db452fcf113323064f39d53baa6f184e72151bf269ca6770511f7f0260e13632dacc7b6afdbf60ebf63e90327e186d4 - languageName: node - linkType: hard - -"passport-strategy@npm:1.x.x, passport-strategy@npm:^1.0.0": - version: 1.0.0 - resolution: "passport-strategy@npm:1.0.0" - checksum: 10c0/cf4cd32e1bf2538a239651581292fbb91ccc83973cde47089f00d2014c24bed63d3e65af21da8ddef649a8896e089eb9c3ac9ca639f36c797654ae9ee4ed65e1 - languageName: node - linkType: hard - -"passport@npm:^0.4.1": - version: 0.4.1 - resolution: "passport@npm:0.4.1" - dependencies: - passport-strategy: "npm:1.x.x" - pause: "npm:0.0.1" - checksum: 10c0/aa1a8eb2e991368734ae1e33d354c94a02c5fcd27c4ef25c3c303b4f3df1e05512ac0159e608cedbfc8c544c166735a153124cfa3bd8d48fb01f5ded500f0c5f - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"path-to-regexp@npm:^3.1.0": - version: 3.3.0 - resolution: "path-to-regexp@npm:3.3.0" - checksum: 10c0/ffa0ebe7088d38d435a8d08b0fe6e8c93ceb2a81a65d4dd1d9a538f52e09d5e3474ed5f553cb3b180d894b0caa10698a68737ab599fd1e56b4663d1a64c9f77b - languageName: node - linkType: hard - -"path-to-regexp@npm:^6.2.0": - version: 6.3.0 - resolution: "path-to-regexp@npm:6.3.0" - checksum: 10c0/73b67f4638b41cde56254e6354e46ae3a2ebc08279583f6af3d96fe4664fc75788f74ed0d18ca44fa4a98491b69434f9eee73b97bb5314bd1b5adb700f5c18d6 - languageName: node - linkType: hard - -"path-type@npm:^3.0.0": - version: 3.0.0 - resolution: "path-type@npm:3.0.0" - dependencies: - pify: "npm:^3.0.0" - checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"pause@npm:0.0.1": - version: 0.0.1 - resolution: "pause@npm:0.0.1" - checksum: 10c0/f362655dfa7f44b946302c5a033148852ed5d05f744bd848b1c7eae6a543f743e79c7751ee896ba519fd802affdf239a358bb2ea5ca1b1c1e4e916279f83ab75 - languageName: node - linkType: hard - -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 - languageName: node - linkType: hard - -"pify@npm:5.0.0": - version: 5.0.0 - resolution: "pify@npm:5.0.0" - checksum: 10c0/9f6f3cd1f159652692f514383efe401a06473af35a699962230ad1c4c9796df5999961461fc1a3b81eed8e3e74adb8bd032474fb3f93eb6bdbd9f33328da1ed2 - languageName: node - linkType: hard - -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 - languageName: node - linkType: hard - -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf - languageName: node - linkType: hard - -"pirates@npm:^4.0.7": - version: 4.0.7 - resolution: "pirates@npm:4.0.7" - checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a - languageName: node - linkType: hard - -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: "npm:^4.0.0" - checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 - languageName: node - linkType: hard - -"possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.10": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e - languageName: node - linkType: hard - -"postcss@npm:^8.3.11": - version: 8.5.1 - resolution: "postcss@npm:8.5.1" - dependencies: - nanoid: "npm:^3.3.8" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 - languageName: node - linkType: hard - -"prebuild-install@npm:^7.1.1": - version: 7.1.2 - resolution: "prebuild-install@npm:7.1.2" - dependencies: - detect-libc: "npm:^2.0.0" - expand-template: "npm:^2.0.3" - github-from-package: "npm:0.0.0" - minimist: "npm:^1.2.3" - mkdirp-classic: "npm:^0.5.3" - napi-build-utils: "npm:^1.0.1" - node-abi: "npm:^3.3.0" - pump: "npm:^3.0.0" - rc: "npm:^1.2.7" - simple-get: "npm:^4.0.0" - tar-fs: "npm:^2.0.0" - tunnel-agent: "npm:^0.6.0" - bin: - prebuild-install: bin.js - checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd - languageName: node - linkType: hard - -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: "npm:^1.1.2" - checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab - languageName: node - linkType: hard - -"prettier@npm:^3.1.1": - version: 3.4.2 - resolution: "prettier@npm:3.4.2" - bin: - prettier: bin/prettier.cjs - checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 - languageName: node - linkType: hard - -"pretty-format@npm:30.0.5, pretty-format@npm:^30.0.0": - version: 30.0.5 - resolution: "pretty-format@npm:30.0.5" - dependencies: - "@jest/schemas": "npm:30.0.5" - ansi-styles: "npm:^5.2.0" - react-is: "npm:^18.3.1" - checksum: 10c0/9f6cf1af5c3169093866c80adbfdad32f69c692b62f24ba3ca8cdec8519336123323f896396f9fa40346a41b197c5f6be15aec4d8620819f12496afaaca93f81 - languageName: node - linkType: hard - -"pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f - languageName: node - linkType: hard - -"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 - languageName: node - linkType: hard - -"proc-log@npm:^5.0.0": - version: 5.0.0 - resolution: "proc-log@npm:5.0.0" - checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 - languageName: node - linkType: hard - -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 - languageName: node - linkType: hard - -"proggy@npm:^2.0.0": - version: 2.0.0 - resolution: "proggy@npm:2.0.0" - checksum: 10c0/1bfc14fa95769e6dd7e91f9d3cae8feb61e6d833ed7210d87ee5413bfa068f4ee7468483da96b2f138c40a7e91a2307f5d5d2eb6de9761c21e266a34602e6a5f - languageName: node - linkType: hard - -"promise-all-reject-late@npm:^1.0.0": - version: 1.0.1 - resolution: "promise-all-reject-late@npm:1.0.1" - checksum: 10c0/f1af0c7b0067e84d64751148ee5bb6c3e84f4a4d1316d6fe56261e1d2637cf71b49894bcbd2c6daf7d45afb1bc99efc3749be277c3e0518b70d0c5a29d037011 - languageName: node - linkType: hard - -"promise-call-limit@npm:^3.0.1": - version: 3.0.2 - resolution: "promise-call-limit@npm:3.0.2" - checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 - languageName: node - linkType: hard - -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc - languageName: node - linkType: hard - -"promise-limit@npm:^2.7.0": - version: 2.7.0 - resolution: "promise-limit@npm:2.7.0" - checksum: 10c0/ce220a7e11c8d0541940a3d99cc424bd16a18451b295a263f6dbaa998585d2d1afa71fcb7bb29078a61e214d2f13d96e9b082e96e8e357fbe5c5936ef2459cba - languageName: node - linkType: hard - -"promise-polyfill@npm:^1.1.6": - version: 1.1.6 - resolution: "promise-polyfill@npm:1.1.6" - checksum: 10c0/055859bba9da0b26994c6521473794cd3bd523f7cf61c5554c4a279ff86a3c11be21d222995d469efffa9b26b96577535286ded5566e4dc4d7c26338dfdf52c7 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"promise.prototype.finally@npm:^3.1.2": - version: 3.1.8 - resolution: "promise.prototype.finally@npm:3.1.8" - dependencies: - call-bind: "npm:^1.0.5" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" - es-errors: "npm:^1.0.0" - set-function-name: "npm:^2.0.1" - checksum: 10c0/5d56eaa3531c3fc03fdd5eef3b3270b3098ff158a4c82261331c9dca3f4f2b5e1c86a2a6a34e752ea978b8736cc7c130dda78ce53f8933d456c24a3c5749482e - languageName: node - linkType: hard - -"promise@npm:^7.0.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: "npm:~2.0.3" - checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f - languageName: node - linkType: hard - -"promzard@npm:^1.0.0": - version: 1.0.2 - resolution: "promzard@npm:1.0.2" - dependencies: - read: "npm:^3.0.1" - checksum: 10c0/d53c4ecb8b606b7e4bdeab14ac22c5f81a57463d29de1b8fe43bbc661106d9e4a79d07044bd3f69bde82c7ebacba7307db90a9699bc20482ce637bdea5fb8e4b - languageName: node - linkType: hard - -"protocols@npm:^2.0.0, protocols@npm:^2.0.1": - version: 2.0.1 - resolution: "protocols@npm:2.0.1" - checksum: 10c0/016cc58a596e401004a028a2f7005e3444bf89ee8f606409c411719374d1e8bba0464fc142a065cce0d19f41669b2f7ffe25a8bde4f16ce3b6eb01fabc51f2e7 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 10c0/5a91ce114c64ed3a6a553aa7d2943868811377388bb31447f9d8028271bae9b05b340fe0b6961a64e45b9c72946aeb0a4ab635e8f7cb3715ffd0ff2beeb6a679 - languageName: node - linkType: hard - -"psl@npm:^1.1.28": - version: 1.15.0 - resolution: "psl@npm:1.15.0" - dependencies: - punycode: "npm:^2.3.1" - checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a - languageName: node - linkType: hard - -"pug-attrs@npm:^3.0.0": - version: 3.0.0 - resolution: "pug-attrs@npm:3.0.0" - dependencies: - constantinople: "npm:^4.0.1" - js-stringify: "npm:^1.0.2" - pug-runtime: "npm:^3.0.0" - checksum: 10c0/28178e91c05e8eb9130861c78dccc61eae3e1610931346065bd32ad0b08b023a8dcf2470c3b2409ba45a5098d6d7ed15687717e91cf77770c6381a18626e5194 - languageName: node - linkType: hard - -"pug-code-gen@npm:^3.0.3": - version: 3.0.3 - resolution: "pug-code-gen@npm:3.0.3" - dependencies: - constantinople: "npm:^4.0.1" - doctypes: "npm:^1.1.0" - js-stringify: "npm:^1.0.2" - pug-attrs: "npm:^3.0.0" - pug-error: "npm:^2.1.0" - pug-runtime: "npm:^3.0.1" - void-elements: "npm:^3.1.0" - with: "npm:^7.0.0" - checksum: 10c0/517a93930dbc80bc7fa5f60ff324229a07cc5ab70ed9d344ce105e2fe24de68db5121c8457a9ba99cdc8d48dd18779dd34956ebfcab009b3c1c6843a3cade109 - languageName: node - linkType: hard - -"pug-error@npm:^2.0.0, pug-error@npm:^2.1.0": - version: 2.1.0 - resolution: "pug-error@npm:2.1.0" - checksum: 10c0/bbce339b17fab9890de84975c0cd8723a847bf65f35653d3ebcf77018e8ad91529d56e978ab80f4c64c9f4f07ef9e56e7a9fda3be44249c344a93ba11fccff79 - languageName: node - linkType: hard - -"pug-filters@npm:^4.0.0": - version: 4.0.0 - resolution: "pug-filters@npm:4.0.0" - dependencies: - constantinople: "npm:^4.0.1" - jstransformer: "npm:1.0.0" - pug-error: "npm:^2.0.0" - pug-walk: "npm:^2.0.0" - resolve: "npm:^1.15.1" - checksum: 10c0/7ddd62f5eb97f5242858bd56d93ffed387fef3742210a53770c980020cf91a34384b84b7fc8f0de185b43dfa77de2c4d0f63f575a4c5b3887fdef4e64b8d559d - languageName: node - linkType: hard - -"pug-lexer@npm:^5.0.1": - version: 5.0.1 - resolution: "pug-lexer@npm:5.0.1" - dependencies: - character-parser: "npm:^2.2.0" - is-expression: "npm:^4.0.0" - pug-error: "npm:^2.0.0" - checksum: 10c0/24195a5681953ab91c6a3ccd80a643f760dddb65e2f266bf8ccba145018ba0271536efe1572de2c2224163eb00873c2f1df0ad7ea7aa8bcbf79a66b586ca8435 - languageName: node - linkType: hard - -"pug-linker@npm:^4.0.0": - version: 4.0.0 - resolution: "pug-linker@npm:4.0.0" - dependencies: - pug-error: "npm:^2.0.0" - pug-walk: "npm:^2.0.0" - checksum: 10c0/db754ff34cdd4ba9d9e2d9535cce2a74178f2172e848a5fa6381907cb5bfaa0d39d4cc3eb29893d35fc1c417e83ae3cfd434640ba7d3b635c63199104fae976c - languageName: node - linkType: hard - -"pug-load@npm:^3.0.0": - version: 3.0.0 - resolution: "pug-load@npm:3.0.0" - dependencies: - object-assign: "npm:^4.1.1" - pug-walk: "npm:^2.0.0" - checksum: 10c0/2a7659dfaf9872dd25d851f85e4c27fa447d907b1db3540030cd844614159ff181e067d8f2bedf90eb6b5b1ff03747253859ecbbb822e40f4834b15591d4e108 - languageName: node - linkType: hard - -"pug-parser@npm:^6.0.0": - version: 6.0.0 - resolution: "pug-parser@npm:6.0.0" - dependencies: - pug-error: "npm:^2.0.0" - token-stream: "npm:1.0.0" - checksum: 10c0/faa6cec43afdeb2705eb8c68dfdb2e65836238df8043ae55295ffb72450b8c7a990ea1be60adbde19f58988b9e1d18a84ea42453e2c4f104d0031f78fda737b2 - languageName: node - linkType: hard - -"pug-runtime@npm:^3.0.0, pug-runtime@npm:^3.0.1": - version: 3.0.1 - resolution: "pug-runtime@npm:3.0.1" - checksum: 10c0/0db8166d2e17695a6941d1de81dcb21c8a52921299b1e03bf6a0a3d2b0036b51cf98101b3937b731c745e8d3e0268cb0b728c02f61a80a25fcfaa15c594fb1be - languageName: node - linkType: hard - -"pug-strip-comments@npm:^2.0.0": - version: 2.0.0 - resolution: "pug-strip-comments@npm:2.0.0" - dependencies: - pug-error: "npm:^2.0.0" - checksum: 10c0/ca498adedaeba51dd836b20129bbd161e2d5a397a2baaa553b1e74e888caa2258dcd7326396fc6f8fed8c7b7f906cfebc4c386ccbee8888a27b2ca0d4d86d206 - languageName: node - linkType: hard - -"pug-walk@npm:^2.0.0": - version: 2.0.0 - resolution: "pug-walk@npm:2.0.0" - checksum: 10c0/005d63177bcf057f5a618b182f6d4600afb039200b07a381a0d89288a2b3126e763a0a6c40b758eab0731c8e63cad1bbcb46d96803b9ae9cfc879f6ef5a0f8f4 - languageName: node - linkType: hard - -"pug@npm:^3.0.2": - version: 3.0.3 - resolution: "pug@npm:3.0.3" - dependencies: - pug-code-gen: "npm:^3.0.3" - pug-filters: "npm:^4.0.0" - pug-lexer: "npm:^5.0.1" - pug-linker: "npm:^4.0.0" - pug-load: "npm:^3.0.0" - pug-parser: "npm:^6.0.0" - pug-runtime: "npm:^3.0.1" - pug-strip-comments: "npm:^2.0.0" - checksum: 10c0/bda53d3a6deea1d348cd5ab17427c77f3d74165510ad16f4fd182cc63618ad09388ecda317d17122ee890c8a68f9a54b96221fce7f44a332e463fdbb10a9d1e2 - languageName: node - linkType: hard - -"pump@npm:^3.0.0": - version: 3.0.2 - resolution: "pump@npm:3.0.2" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 - languageName: node - linkType: hard - -"pure-rand@npm:^7.0.0": - version: 7.0.1 - resolution: "pure-rand@npm:7.0.1" - checksum: 10c0/9cade41030f5ec95f5d55a11a71404cd6f46b69becaad892097cd7f58e2c6248cd0a933349ca7d21336ab629f1da42ffe899699b671bc4651600eaf6e57f837e - languageName: node - linkType: hard - -"qs@npm:6.13.0": - version: 6.13.0 - resolution: "qs@npm:6.13.0" - dependencies: - side-channel: "npm:^1.0.6" - checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 - languageName: node - linkType: hard - -"qs@npm:^6.11.0, qs@npm:^6.5.1": - version: 6.14.0 - resolution: "qs@npm:6.14.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c - languageName: node - linkType: hard - -"qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.1.2, queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"quick-lru@npm:^4.0.1": - version: 4.0.1 - resolution: "quick-lru@npm:4.0.1" - checksum: 10c0/f9b1596fa7595a35c2f9d913ac312fede13d37dc8a747a51557ab36e11ce113bbe88ef4c0154968845559a7709cb6a7e7cbe75f7972182451cd45e7f057a334d - languageName: node - linkType: hard - -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da - languageName: node - linkType: hard - -"random-bytes@npm:~1.0.0": - version: 1.0.0 - resolution: "random-bytes@npm:1.0.0" - checksum: 10c0/71e7a600e0976e9ebc269793a0577d47b965fa678fcc9e9623e427f909d1b3669db5b3a178dbf61229f0724ea23dba64db389f0be0ba675c6a6b837c02f29b8f - languageName: node - linkType: hard - -"range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 - languageName: node - linkType: hard - -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: "npm:3.1.2" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - unpipe: "npm:1.0.0" - checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 - languageName: node - linkType: hard - -"rc@npm:^1.2.7": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: "npm:^0.6.0" - ini: "npm:~1.3.0" - minimist: "npm:^1.2.0" - strip-json-comments: "npm:~2.0.1" - bin: - rc: ./cli.js - checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 - languageName: node - linkType: hard - -"rdf-canonize@npm:^1.0.2": - version: 1.2.0 - resolution: "rdf-canonize@npm:1.2.0" - dependencies: - node-forge: "npm:^0.10.0" - semver: "npm:^6.3.0" - checksum: 10c0/d0955b79caa43c60a74c544163486bdb1b7462e8c4373e9bfae36afc93fb849271fb4fe2c228613d24b9c9f22195b5ed17f1cc6787538853e3dec1d0df1d3d10 - languageName: node - linkType: hard - -"rdf-canonize@npm:^2.0.1": - version: 2.0.1 - resolution: "rdf-canonize@npm:2.0.1" - dependencies: - semver: "npm:^6.3.0" - setimmediate: "npm:^1.0.5" - checksum: 10c0/2a3e158c8a2354aa5682d341c420d815b421325979c06d02e00f45dd7f3b4ef751dd0d072b227a16ebd1e5dbb1f82226a58d5b9cc6cfd246fc53fc04f7b613d0 - languageName: node - linkType: hard - -"rdf-canonize@npm:^3.4.0": - version: 3.4.0 - resolution: "rdf-canonize@npm:3.4.0" - dependencies: - setimmediate: "npm:^1.0.5" - checksum: 10c0/c78ccd8ff99abf749005f6c596d5ceb16edd7a9508e430cd636b89fba8f75e5698f2dd8294aeca389463b1f983326f8d50c9d4ad0a9195cf945f02731a720dea - languageName: node - linkType: hard - -"rdf-canonize@npm:^4.0.1": - version: 4.0.1 - resolution: "rdf-canonize@npm:4.0.1" - dependencies: - setimmediate: "npm:^1.0.5" - checksum: 10c0/8f6040847c5731817cc5ad95ca16caa588fba76c94ee3b24f282c9a3054f36226560bcb33bed8a173903960af1b9937e21db6e0dc2e90caa749682fff8228250 - languageName: node - linkType: hard - -"rdf-data-factory@npm:^1.1.0, rdf-data-factory@npm:^1.1.2": - version: 1.1.3 - resolution: "rdf-data-factory@npm:1.1.3" - dependencies: - "@rdfjs/types": "npm:^1.0.0" - checksum: 10c0/b5f5db1417afd72e690c60b0eb19388b0ed519e8d732419ccee4d3a5c15fa8cfd1b16380c9692dec26245a9bbf5ce2cb07360645d60e995337c34796da0c990a - languageName: node - linkType: hard - -"rdf-data-model@npm:^1.0.0": - version: 1.0.0 - resolution: "rdf-data-model@npm:1.0.0" - bin: - rdf-data-model-test: ./bin/test.js - checksum: 10c0/36a1a4961a186f832bc89d4831c3adafb7dbb9305e144ea7cc2a2df27c8a7df6d546f2481931f95eb081299a32d2223f7c4163d3cd18492773b443f1c938bdbc - languageName: node - linkType: hard - -"rdf-isomorphic@npm:^1.3.0": - version: 1.3.1 - resolution: "rdf-isomorphic@npm:1.3.1" - dependencies: - "@rdfjs/types": "npm:*" - hash.js: "npm:^1.1.7" - rdf-string: "npm:^1.6.0" - rdf-terms: "npm:^1.7.0" - checksum: 10c0/6da5545654045b643d12510e946677a6d724282dfeb58f215c26fa46cae1c525bfad4820bda7765f49902ee0cc75cffbcf646ca1e984ec35d71c8008ad3e6e83 - languageName: node - linkType: hard - -"rdf-parse@npm:^1.7.0": - version: 1.9.1 - resolution: "rdf-parse@npm:1.9.1" - dependencies: - "@comunica/actor-http-native": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-microdata": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-rdfa": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-script": "npm:~1.22.0" - "@comunica/actor-rdf-parse-jsonld": "npm:^1.22.0" - "@comunica/actor-rdf-parse-n3": "npm:~1.22.0" - "@comunica/actor-rdf-parse-rdfxml": "npm:~1.22.0" - "@comunica/actor-rdf-parse-xml-rdfa": "npm:~1.22.0" - "@comunica/bus-http": "npm:~1.22.0" - "@comunica/bus-init": "npm:~1.22.0" - "@comunica/bus-rdf-parse": "npm:~1.22.0" - "@comunica/bus-rdf-parse-html": "npm:~1.22.0" - "@comunica/core": "npm:~1.22.0" - "@comunica/mediator-combine-union": "npm:~1.22.0" - "@comunica/mediator-number": "npm:~1.22.0" - "@comunica/mediator-race": "npm:~1.22.0" - "@rdfjs/types": "npm:*" - stream-to-string: "npm:^1.2.0" - checksum: 10c0/b9d99f2ce16abc870e90425f626ce25ff861d389ebd1a8644313367c562551fb695c2088ea9ea72402d178238b89f67235d79d68a8e0819b2c1cad79fd9e3bea - languageName: node - linkType: hard - -"rdf-string@npm:^1.6.0": - version: 1.6.3 - resolution: "rdf-string@npm:1.6.3" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/d7fca91d659f1631708670efefe4d8243b55f18a74adb384b385f7562d3c1a7c7f0a64da09c094e08aced8dc9cfd870eadbec4fe97030d78a90ec69187f6a53c - languageName: node - linkType: hard - -"rdf-terms@npm:^1.7.0": - version: 1.11.0 - resolution: "rdf-terms@npm:1.11.0" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - rdf-string: "npm:^1.6.0" - checksum: 10c0/9603eef8b05c8254f1d12a75db894de85eb291fd1cff167d5dd4a3854ff7677ad6baea9ebbb164bc0ad0cbe37ab4317e96de61e98297937ea9237956ac951fab - languageName: node - linkType: hard - -"rdfa-streaming-parser@npm:^1.5.0": - version: 1.5.0 - resolution: "rdfa-streaming-parser@npm:1.5.0" - dependencies: - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^6.0.0" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.2" - checksum: 10c0/d2482dce371d90ca3c19b97b57b9c17ad07be5990bc6c11ec9b4a57f761ff5433567555ed87fa66144412a9239053d0b7cee85c370e4f02098b0338c2da971ba - languageName: node - linkType: hard - -"rdfxml-streaming-parser@npm:^1.5.0": - version: 1.5.0 - resolution: "rdfxml-streaming-parser@npm:1.5.0" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.0" - sax: "npm:^1.2.4" - checksum: 10c0/37a75a10608051f433d3c267b91f495f310ad1a65d7897b6c823311702c8ab2a11b2b54b64869fc2564f2792e426714c1cca478eb0105ce658caafdd78353d66 - languageName: node - linkType: hard - -"react-is@npm:^18.0.0, react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 - languageName: node - linkType: hard - -"read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": - version: 4.0.0 - resolution: "read-cmd-shim@npm:4.0.0" - checksum: 10c0/e62db17ec9708f1e7c6a31f0a46d43df2069d85cf0df3b9d1d99e5ed36e29b1e8b2f8a427fd8bbb9bc40829788df1471794f9b01057e4b95ed062806e4df5ba9 - languageName: node - linkType: hard - -"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": - version: 3.0.2 - resolution: "read-package-json-fast@npm:3.0.2" - dependencies: - json-parse-even-better-errors: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10c0/37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 - languageName: node - linkType: hard - -"read-pkg-up@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg-up@npm:3.0.0" - dependencies: - find-up: "npm:^2.0.0" - read-pkg: "npm:^3.0.0" - checksum: 10c0/2cd0a180260b0d235990e6e9c8c2330a03882d36bc2eba8930e437ef23ee52a68a894e7e1ccb1c33f03bcceb270a861ee5f7eac686f238857755e2cddfb48ffd - languageName: node - linkType: hard - -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: "npm:^4.1.0" - read-pkg: "npm:^5.2.0" - type-fest: "npm:^0.8.1" - checksum: 10c0/82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 - languageName: node - linkType: hard - -"read-pkg@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg@npm:3.0.0" - dependencies: - load-json-file: "npm:^4.0.0" - normalize-package-data: "npm:^2.3.2" - path-type: "npm:^3.0.0" - checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 - languageName: node - linkType: hard - -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" - dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^2.5.0" - parse-json: "npm:^5.0.0" - type-fest: "npm:^0.6.0" - checksum: 10c0/b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb - languageName: node - linkType: hard - -"read@npm:^3.0.1": - version: 3.0.1 - resolution: "read@npm:3.0.1" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/af524994ff7cf94aa3ebd268feac509da44e58be7ed2a02775b5ee6a7d157b93b919e8c5ead91333f86a21fbb487dc442760bc86354c18b84d334b8cec33723a - languageName: node - linkType: hard - -"readable-stream-node-to-web@npm:^1.0.1": - version: 1.0.1 - resolution: "readable-stream-node-to-web@npm:1.0.1" - checksum: 10c0/9ad4bde9ac06b7dc0b202f77ba632ee012c4782a40139d7a78ecea9d5503867181ab9871e40576891f1adde35203b795e3b46ce30c5fbbab3421404d93561442 - languageName: node - linkType: hard - -"readable-stream@npm:1.1": - version: 1.1.13 - resolution: "readable-stream@npm:1.1.13" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.1" - isarray: "npm:0.0.1" - string_decoder: "npm:~0.10.x" - checksum: 10c0/fb8edd73a37e58fdb35d006370c6cde2912c993483479fe9be232ee0aa8f0b12058f0662602760c7a678887415198888c2f8d864b7ba6ab57683e1b3774d9e66 - languageName: node - linkType: hard - -"readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa - languageName: node - linkType: hard - -"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: "npm:^2.0.3" - string_decoder: "npm:^1.1.1" - util-deprecate: "npm:^1.0.1" - checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 - languageName: node - linkType: hard - -"readable-stream@npm:^4.0.0": - version: 4.7.0 - resolution: "readable-stream@npm:4.7.0" - dependencies: - abort-controller: "npm:^3.0.0" - buffer: "npm:^6.0.3" - events: "npm:^3.3.0" - process: "npm:^0.11.10" - string_decoder: "npm:^1.3.0" - checksum: 10c0/fd86d068da21cfdb10f7a4479f2e47d9c0a9b0c862fc0c840a7e5360201580a55ac399c764b12a4f6fa291f8cee74d9c4b7562e0d53b3c4b2769f2c98155d957 - languageName: node - linkType: hard - -"readable-stream@npm:~1.0.2": - version: 1.0.34 - resolution: "readable-stream@npm:1.0.34" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.1" - isarray: "npm:0.0.1" - string_decoder: "npm:~0.10.x" - checksum: 10c0/02272551396ed8930ddee1a088bdf0379f0f7cc47ac49ed8804e998076cb7daec9fbd2b1fd9c0490ec72e56e8bb3651abeb8080492b8e0a9c3f2158330908ed6 - languageName: node - linkType: hard - -"readable-web-to-node-stream@npm:^3.0.2": - version: 3.0.2 - resolution: "readable-web-to-node-stream@npm:3.0.2" - dependencies: - readable-stream: "npm:^3.6.0" - checksum: 10c0/533d5cd1580232a2c753e52a245be13fc552e6f82c5053a8a8da7ea1063d73a34f936a86b3d4433cdb4a13dd683835cfc87f230936cb96d329a1e28b6040f42e - languageName: node - linkType: hard - -"recursive-watch@npm:^1.1.4": - version: 1.1.4 - resolution: "recursive-watch@npm:1.1.4" - dependencies: - ttl: "npm:^1.3.0" - bin: - recursive-watch: ./bin.js - checksum: 10c0/6bd6da1d85eb09a08bb9b4631fc5e2b79383d252d897c6fd3d0d5e3c334b0bb3ac6b4d1d64c169ef52814552410802fd7404ddabe55327e4d2a21a601925ef2f - languageName: node - linkType: hard - -"redent@npm:^3.0.0": - version: 3.0.0 - resolution: "redent@npm:3.0.0" - dependencies: - indent-string: "npm:^4.0.0" - strip-indent: "npm:^3.0.0" - checksum: 10c0/d64a6b5c0b50eb3ddce3ab770f866658a2b9998c678f797919ceb1b586bab9259b311407280bd80b804e2a7c7539b19238ae6a2a20c843f1a7fcff21d48c2eae - languageName: node - linkType: hard - -"redis-commands@npm:1.7.0": - version: 1.7.0 - resolution: "redis-commands@npm:1.7.0" - checksum: 10c0/c78b46d8d6e811f422961878538c57048a451ab56760d3f1657a7c8f29aaae42cc23890f75655556a59ec67611022e18cb443d2976e6c55036934bfe783aa60e - languageName: node - linkType: hard - -"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": - version: 1.2.0 - resolution: "redis-errors@npm:1.2.0" - checksum: 10c0/5b316736e9f532d91a35bff631335137a4f974927bb2fb42bf8c2f18879173a211787db8ac4c3fde8f75ed6233eb0888e55d52510b5620e30d69d7d719c8b8a7 - languageName: node - linkType: hard - -"redis-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "redis-parser@npm:3.0.0" - dependencies: - redis-errors: "npm:^1.0.0" - checksum: 10c0/ee16ac4c7b2a60b1f42a2cdaee22b005bd4453eb2d0588b8a4939718997ae269da717434da5d570fe0b05030466eeb3f902a58cf2e8e1ca058bf6c9c596f632f - languageName: node - linkType: hard - -"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": - version: 1.0.10 - resolution: "reflect.getprototypeof@npm:1.0.10" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.9" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.1" - which-builtin-type: "npm:^1.2.1" - checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.2.0": - version: 10.2.0 - resolution: "regenerate-unicode-properties@npm:10.2.0" - dependencies: - regenerate: "npm:^1.4.2" - checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.3": - version: 1.5.4 - resolution: "regexp.prototype.flags@npm:1.5.4" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - set-function-name: "npm:^2.0.2" - checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 - languageName: node - linkType: hard - -"regexpp@npm:^3.0.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: 10c0/d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710 - languageName: node - linkType: hard - -"regexpu-core@npm:^6.2.0": - version: 6.2.0 - resolution: "regexpu-core@npm:6.2.0" - dependencies: - regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.2.0" - regjsgen: "npm:^0.8.0" - regjsparser: "npm:^0.12.0" - unicode-match-property-ecmascript: "npm:^2.0.0" - unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 - languageName: node - linkType: hard - -"regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "regjsgen@npm:0.8.0" - checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd - languageName: node - linkType: hard - -"regjsparser@npm:^0.12.0": - version: 0.12.0 - resolution: "regjsparser@npm:0.12.0" - dependencies: - jsesc: "npm:~3.0.2" - bin: - regjsparser: bin/parser - checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b - languageName: node - linkType: hard - -"relative-to-absolute-iri@npm:^1.0.0, relative-to-absolute-iri@npm:^1.0.2, relative-to-absolute-iri@npm:^1.0.5": - version: 1.0.7 - resolution: "relative-to-absolute-iri@npm:1.0.7" - checksum: 10c0/8301941bb1c33818fd312d6729c91cbed47ee960963a35048e7331d88e5ded6eaaae608c33d3840ddcb959310dbf5041dfa5165540faba99334c5c53de721013 - languageName: node - linkType: hard - -"request@npm:^2.88.0": - version: 2.88.2 - resolution: "request@npm:2.88.2" - dependencies: - aws-sign2: "npm:~0.7.0" - aws4: "npm:^1.8.0" - caseless: "npm:~0.12.0" - combined-stream: "npm:~1.0.6" - extend: "npm:~3.0.2" - forever-agent: "npm:~0.6.1" - form-data: "npm:~2.3.2" - har-validator: "npm:~5.1.3" - http-signature: "npm:~1.2.0" - is-typedarray: "npm:~1.0.0" - isstream: "npm:~0.1.2" - json-stringify-safe: "npm:~5.0.1" - mime-types: "npm:~2.1.19" - oauth-sign: "npm:~0.9.0" - performance-now: "npm:^2.1.0" - qs: "npm:~6.5.2" - safe-buffer: "npm:^5.1.2" - tough-cookie: "npm:~2.5.0" - tunnel-agent: "npm:^0.6.0" - uuid: "npm:^3.3.2" - checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"resolve-alpn@npm:^1.0.0": - version: 1.2.1 - resolution: "resolve-alpn@npm:1.2.1" - checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: "npm:^5.0.0" - checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab - languageName: node - linkType: hard - -"resolve.exports@npm:2.0.3": - version: 2.0.3 - resolution: "resolve.exports@npm:2.0.3" - checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d - languageName: node - linkType: hard - -"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.15.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4": - version: 1.22.10 - resolution: "resolve@npm:1.22.10" - dependencies: - is-core-module: "npm:^2.16.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.15.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": - version: 1.22.10 - resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 - languageName: node - linkType: hard - -"responselike@npm:^2.0.0": - version: 2.0.1 - resolution: "responselike@npm:2.0.1" - dependencies: - lowercase-keys: "npm:^2.0.0" - checksum: 10c0/360b6deb5f101a9f8a4174f7837c523c3ec78b7ca8a7c1d45a1062b303659308a23757e318b1e91ed8684ad1205721142dd664d94771cd63499353fd4ee732b5 - languageName: node - linkType: hard - -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: bin.js - checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 - languageName: node - linkType: hard - -"rimraf@npm:^4.4.1": - version: 4.4.1 - resolution: "rimraf@npm:4.4.1" - dependencies: - glob: "npm:^9.2.0" - bin: - rimraf: dist/cjs/src/bin.js - checksum: 10c0/8c5e142d26d8b222be9dc9a1a41ba48e95d8f374e813e66a8533e87c6180174fcb3f573b9b592eca12740ebf8b78526d136acd971d4a790763d6f2232c34fa24 - languageName: node - linkType: hard - -"rsync@npm:^0.6.1": - version: 0.6.1 - resolution: "rsync@npm:0.6.1" - checksum: 10c0/90f6717177ae681d357806153aa27e0598c605ffe01a6c24671f96994146a594c9eebf7251b772e94ca1d1a673628dce4836e6771f0c20e0f41a57c18ccd2da7 - languageName: node - linkType: hard - -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^7.5.5": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 - languageName: node - linkType: hard - -"safe-array-concat@npm:^1.1.2, safe-array-concat@npm:^1.1.3": - version: 1.1.3 - resolution: "safe-array-concat@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.6" - has-symbols: "npm:^1.1.0" - isarray: "npm:^2.0.5" - checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d - languageName: node - linkType: hard - -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 - languageName: node - linkType: hard - -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - -"safe-push-apply@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-push-apply@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - isarray: "npm:^2.0.5" - checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 - languageName: node - linkType: hard - -"safe-regex-test@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex-test@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - is-regex: "npm:^1.2.1" - checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:^2.1.2, safer-buffer@npm:~2.1.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"sanitize-html@npm:^2.6.1": - version: 2.14.0 - resolution: "sanitize-html@npm:2.14.0" - dependencies: - deepmerge: "npm:^4.2.2" - escape-string-regexp: "npm:^4.0.0" - htmlparser2: "npm:^8.0.0" - is-plain-object: "npm:^5.0.0" - parse-srcset: "npm:^1.0.2" - postcss: "npm:^8.3.11" - checksum: 10c0/7e001ab18d09ce5c4d0dbb6837c7a36f132874267e5b724cdef79b21188b55e652a591d79d297f9473aaf80cf96bb1894c3fa1046ccba977ed9aa365d6eb3a5c - languageName: node - linkType: hard - -"sax@npm:^1.2.4": - version: 1.4.1 - resolution: "sax@npm:1.4.1" - checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c - languageName: node - linkType: hard - -"security-context@npm:^4.0.0": - version: 4.0.0 - resolution: "security-context@npm:4.0.0" - checksum: 10c0/234e466945bdaf8dedf9538ebb88b6041485076de3ce74af4fa9ad90ecb38df59ffd050aac888c513484de3a45a7e09c603692e72c0dcbce24f024e2ed03ac3c - languageName: node - linkType: hard - -"semapps-middleware@workspace:.": - version: 0.0.0-use.local - resolution: "semapps-middleware@workspace:." - dependencies: - "@types/dotenv-flow": "npm:^3.3.3" - "@types/ioredis": "npm:^4.27.0" - "@types/node-fetch": "npm:^2.6.13" - "@types/streamify-string": "npm:^1.0.4" - "@typescript-eslint/eslint-plugin": "npm:^7.1.1" - "@typescript-eslint/parser": "npm:^7.5.0" - eslint: "npm:^8.2.0" - eslint-config-airbnb: "npm:^19.0.4" - eslint-config-prettier: "npm:^9.1.0" - eslint-import-resolver-typescript: "npm:^3.6.1" - eslint-plugin-import: "npm:^2.29.1" - eslint-plugin-jest: "npm:^27.9.0" - eslint-plugin-jsdoc: "npm:^48.2.1" - eslint-plugin-node: "npm:^11.1.0" - eslint-plugin-prettier: "npm:^5.1.3" - lerna: "npm:^8.0.1" - moleculer: "npm:^0.14.35" - nx: "npm:17.2.5" - prettier: "npm:^3.1.1" - typescript: "npm:^5.9.2" - languageName: unknown - linkType: soft - -"semapps-tests@workspace:tests": - version: 0.0.0-use.local - resolution: "semapps-tests@workspace:tests" - dependencies: - "@babel/core": "npm:^7.28.0" - "@babel/plugin-transform-runtime": "npm:^7.28.0" - "@babel/preset-env": "npm:^7.28.0" - "@babel/preset-typescript": "npm:^7.27.1" - "@jest/globals": "npm:^30.0.5" - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/activitypub": "npm:1.1.4" - "@semapps/auth": "npm:1.1.4" - "@semapps/core": "npm:1.1.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/inference": "npm:1.1.4" - "@semapps/jsonld": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/sync": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - "@types/ioredis": "npm:^4.27.0" - "@types/jest": "npm:^30.0.0" - babel-jest: "npm:^30.0.5" - babel-plugin-transform-import-meta: "npm:^2.3.3" - babel-preset-vite: "npm:^1.1.3" - dotenv-flow: "npm:^3.1.0" - expect-type: "npm:^1.2.2" - fs-extra: "npm:^9.0.1" - http-link-header: "npm:^1.1.1" - ioredis: "npm:^4.27.0" - jest: "npm:^30.0.5" - lru-cache: "npm:10.1.0" - moleculer: "npm:^0.14.35" - moleculer-web: "npm:^0.10.7" - node-fetch: "npm:^2.6.6" - rdf-data-model: "npm:^1.0.0" - supertest: "npm:^4.0.2" - ts-node: "npm:^10.9.2" - url-join: "npm:^4.0.1" - wait-for-expect: "npm:^3.0.2" - languageName: unknown - linkType: soft - -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 - languageName: node - linkType: hard - -"semver@npm:7.5.3": - version: 7.5.3 - resolution: "semver@npm:7.5.3" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10c0/4cf3bab7e8cf8c2ae521fc4bcc50a4d6912a836360796b23b9f1c26f45d27a73f870e47664df4770bde0dd60dc4d4781a05fd49fe91d72376ea5519b9e791459 - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d - languageName: node - linkType: hard - -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf - languageName: node - linkType: hard - -"semver@npm:^7.7.2": - version: 7.7.2 - resolution: "semver@npm:7.7.2" - bin: - semver: bin/semver.js - checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea - languageName: node - linkType: hard - -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" - dependencies: - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - mime: "npm:1.6.0" - ms: "npm:2.1.3" - on-finished: "npm:2.4.1" - range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 - languageName: node - linkType: hard - -"serialize-error@npm:^5.0.0": - version: 5.0.0 - resolution: "serialize-error@npm:5.0.0" - dependencies: - type-fest: "npm:^0.8.0" - checksum: 10c0/6934419798421a14536178d7ab70b9676dc747813817ec9841c96aeb87759f436a71feb241593c6f6aa9a697c0429285aef892d459e7d8cd5156b1d35f1606a1 - languageName: node - linkType: hard - -"serialize-error@npm:^8.1.0": - version: 8.1.0 - resolution: "serialize-error@npm:8.1.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/8cfd89f43ca93e283c5f1d16178a536bdfac9bc6029f4a9df988610cc399bc4f2478d1f10ce40b9dff66b863a5158a19b438fbec929045c96d92174f6bca1e88 - languageName: node - linkType: hard - -"serve-static@npm:^1.14.1": - version: 1.16.2 - resolution: "serve-static@npm:1.16.2" - dependencies: - encodeurl: "npm:~2.0.0" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.3" - send: "npm:0.19.0" - checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.2": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c - languageName: node - linkType: hard - -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - functions-have-names: "npm:^1.2.3" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 - languageName: node - linkType: hard - -"set-proto@npm:^1.0.0": - version: 1.0.0 - resolution: "set-proto@npm:1.0.0" - dependencies: - dunder-proto: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a - languageName: node - linkType: hard - -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc - languageName: node - linkType: hard - -"shallow-clone@npm:^3.0.0": - version: 3.0.1 - resolution: "shallow-clone@npm:3.0.1" - dependencies: - kind-of: "npm:^6.0.2" - checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e - languageName: node - linkType: hard - -"sharp@npm:^0.31.2": - version: 0.31.3 - resolution: "sharp@npm:0.31.3" - dependencies: - color: "npm:^4.2.3" - detect-libc: "npm:^2.0.1" - node-addon-api: "npm:^5.0.0" - node-gyp: "npm:latest" - prebuild-install: "npm:^7.1.1" - semver: "npm:^7.3.8" - simple-get: "npm:^4.0.1" - tar-fs: "npm:^2.1.1" - tunnel-agent: "npm:^0.6.0" - checksum: 10c0/22cab24b7145546f25cd5e2a27841880405335ddeeb4e05be6e32d4221baac4fd89d0fb31c397a0cea31b6f1b6b139d4eb49d036cdba1f33175ffa0b1a4eccfc - languageName: node - linkType: hard - -"shebang-command@npm:^1.2.0": - version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: "npm:^1.0.0" - checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"sigstore@npm:^2.2.0": - version: 2.3.1 - resolution: "sigstore@npm:2.3.1" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - "@sigstore/sign": "npm:^2.3.2" - "@sigstore/tuf": "npm:^2.3.4" - "@sigstore/verify": "npm:^1.2.1" - checksum: 10c0/8906b1074130d430d707e46f15c66eb6996891dc0d068705f1884fb1251a4a367f437267d44102cdebcee34f1768b3f30131a2ec8fb7aac74ba250903a459aa7 - languageName: node - linkType: hard - -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 - languageName: node - linkType: hard - -"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: "npm:^6.0.0" - once: "npm:^1.3.1" - simple-concat: "npm:^1.0.0" - checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: "npm:^0.3.1" - checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 - languageName: node - linkType: hard - -"slash@npm:3.0.0, slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slashes@npm:^3.0.12": - version: 3.0.12 - resolution: "slashes@npm:3.0.12" - checksum: 10c0/71ca2a1fcd1ab6814b0fdb8cf9c33a3d54321deec2aa8d173510f0086880201446021a9b9e6a18561f7c472b69a2145977c6a8fb9c53a8ff7be31778f203d175 - languageName: node - linkType: hard - -"slick@npm:^1.12.2": - version: 1.12.2 - resolution: "slick@npm:1.12.2" - checksum: 10c0/fea97c36b2bdcd1b80caea150cd8135dc9d3ffe659bbe04fa6f4b4dff373f5d5aef09a8ef384b331c3fdd9567faf447b75b850ab35d2c69ff8a8a92def3d49e1 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" - dependencies: - ip-address: "npm:^9.0.5" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 - languageName: node - linkType: hard - -"sodium-native@npm:^3.2.0": - version: 3.4.1 - resolution: "sodium-native@npm:3.4.1" - dependencies: - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.3.0" - checksum: 10c0/b67de94d80a234d348e3bbcd27f39243f974dfdb5e2538b146433c5f2a42ce4697ce3bf5dff8a2803dab16486167e8cc755af426ff2934cb5ca393cb5b116c77 - languageName: node - linkType: hard - -"sort-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "sort-keys@npm:2.0.0" - dependencies: - is-plain-obj: "npm:^1.0.0" - checksum: 10c0/c11a6313995cb67ccf35fed4b1f6734176cc1d1e350ee311c061a2340ada4f7e23b046db064d518b63adba98c0f763739920c59fb4659a0b8482ec7a1f255081 - languageName: node - linkType: hard - -"sorted-array-functions@npm:^1.3.0": - version: 1.3.0 - resolution: "sorted-array-functions@npm:1.3.0" - checksum: 10c0/d94e3401a2bc1689dc913f56939621c892a3ff1288e984e85689a6c6e46b0ec16f65edc8b47d46b0f09d06857f67ca245553b462da597619102b9fad270476d9 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: "npm:^1.0.0" - source-map: "npm:^0.6.0" - checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e - languageName: node - linkType: hard - -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 - languageName: node - linkType: hard - -"sparqlalgebrajs@npm:^3.0.1": - version: 3.0.3 - resolution: "sparqlalgebrajs@npm:3.0.3" - dependencies: - "@rdfjs/types": "npm:*" - "@types/sparqljs": "npm:^3.1.2" - fast-deep-equal: "npm:^3.1.3" - minimist: "npm:^1.2.5" - rdf-data-factory: "npm:^1.1.0" - rdf-isomorphic: "npm:^1.3.0" - rdf-string: "npm:^1.6.0" - sparqljs: "npm:^3.4.2" - bin: - sparqlalgebrajs: bin/sparqlalgebrajs.js - checksum: 10c0/4074b864f72857303cbabe2771e790e28429cd732d89d61e541fa3629a333c239b5878e286b88001eb539fd2237e5d57273bff6dae2206da74a7c647f8cfef1d - languageName: node - linkType: hard - -"sparqljs@npm:^3.4.2, sparqljs@npm:^3.5.2": - version: 3.7.3 - resolution: "sparqljs@npm:3.7.3" - dependencies: - rdf-data-factory: "npm:^1.1.2" - bin: - sparqljs: bin/sparql-to-json - checksum: 10c0/733323136c490e6454ced4cdd02023054a8893c3bf9e739ccd39f526a96ef5edcf42352c4f0cf2c90847292a239dfe4c68bd35f044699e2f585601a0c56c1c70 - languageName: node - linkType: hard - -"sparqljson-parse@npm:^1.5.1": - version: 1.7.0 - resolution: "sparqljson-parse@npm:1.7.0" - dependencies: - "@rdfjs/types": "npm:*" - "@types/node": "npm:^13.1.0" - JSONStream: "npm:^1.3.3" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/010c94b9bc37e545c3fe2f90c53ac033a652d76bd8075e21bf9fd9d6c78c92081d67c20b3384208e937c2695ff9d849fca8344597fe95653960fe5390f605ecc - languageName: node - linkType: hard - -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: "npm:^3.0.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.5.0 - resolution: "spdx-exceptions@npm:2.5.0" - checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^4.0.0": - version: 4.0.0 - resolution: "spdx-expression-parse@npm:4.0.0" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.21 - resolution: "spdx-license-ids@npm:3.0.21" - checksum: 10c0/ecb24c698d8496aa9efe23e0b1f751f8a7a89faedcdfcbfabae772b546c2db46ccde8f3bc447a238eb86bbcd4f73fea88720ef3b8394f7896381bec3d7736411 - languageName: node - linkType: hard - -"speakingurl@npm:^14.0.1": - version: 14.0.1 - resolution: "speakingurl@npm:14.0.1" - checksum: 10c0/1de1d1b938a7c4d9e79593ff7a26d312ec04a7c3234ca40b7f9b8106daf74ea9d2110a077f5db97ecf3762b83069e3ccbf9694431b51d4fcfd863f0b3333c342 - languageName: node - linkType: hard - -"split2@npm:^3.2.2": - version: 3.2.2 - resolution: "split2@npm:3.2.2" - dependencies: - readable-stream: "npm:^3.0.0" - checksum: 10c0/2dad5603c52b353939befa3e2f108f6e3aff42b204ad0f5f16dd12fd7c2beab48d117184ce6f7c8854f9ee5ffec6faae70d243711dd7d143a9f635b4a285de4e - languageName: node - linkType: hard - -"split@npm:^1.0.1": - version: 1.0.1 - resolution: "split@npm:1.0.1" - dependencies: - through: "npm:2" - checksum: 10c0/7f489e7ed5ff8a2e43295f30a5197ffcb2d6202c9cf99357f9690d645b19c812bccf0be3ff336fea5054cda17ac96b91d67147d95dbfc31fbb5804c61962af85 - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.1, sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb - languageName: node - linkType: hard - -"ssh2-sftp-client@npm:^7.2.1": - version: 7.2.3 - resolution: "ssh2-sftp-client@npm:7.2.3" - dependencies: - concat-stream: "npm:^2.0.0" - promise-retry: "npm:^2.0.1" - ssh2: "npm:^1.8.0" - checksum: 10c0/780da50d87789af1f943490b1ad11797cf60f20761345c14ba920b90fec845a7fc8e11093ea26ddb4619ea3727fa75d71ca21dca72e6d4f3b7324c985b31801e - languageName: node - linkType: hard - -"ssh2@npm:^1.8.0": - version: 1.16.0 - resolution: "ssh2@npm:1.16.0" - dependencies: - asn1: "npm:^0.2.6" - bcrypt-pbkdf: "npm:^1.0.2" - cpu-features: "npm:~0.0.10" - nan: "npm:^2.20.0" - dependenciesMeta: - cpu-features: - optional: true - nan: - optional: true - checksum: 10c0/d336a85d87501c64ba230b6c1a2901a9b0e376fe7f7a1640a7f8dbdafe674b2e1a5dc6236ffd1329969dc0cf03cd57759b28743075e61229a984065ee1d56bed - languageName: node - linkType: hard - -"sshpk@npm:^1.18.0, sshpk@npm:^1.7.0": - version: 1.18.0 - resolution: "sshpk@npm:1.18.0" - dependencies: - asn1: "npm:~0.2.3" - assert-plus: "npm:^1.0.0" - bcrypt-pbkdf: "npm:^1.0.0" - dashdash: "npm:^1.12.0" - ecc-jsbn: "npm:~0.1.1" - getpass: "npm:^0.1.1" - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.0.2" - tweetnacl: "npm:~0.14.0" - bin: - sshpk-conv: bin/sshpk-conv - sshpk-sign: bin/sshpk-sign - sshpk-verify: bin/sshpk-verify - checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0, ssri@npm:^10.0.6": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 - languageName: node - linkType: hard - -"ssri@npm:^12.0.0": - version: 12.0.0 - resolution: "ssri@npm:12.0.0" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d - languageName: node - linkType: hard - -"stable-hash@npm:^0.0.4": - version: 0.0.4 - resolution: "stable-hash@npm:0.0.4" - checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0 - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.6": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a - languageName: node - linkType: hard - -"standard-as-callback@npm:^2.1.0": - version: 2.1.0 - resolution: "standard-as-callback@npm:2.1.0" - checksum: 10c0/012677236e3d3fdc5689d29e64ea8a599331c4babe86956bf92fc5e127d53f85411c5536ee0079c52c43beb0026b5ce7aa1d834dd35dd026e82a15d1bcaead1f - languageName: node - linkType: hard - -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 - languageName: node - linkType: hard - -"stream-to-string@npm:^1.2.0": - version: 1.2.1 - resolution: "stream-to-string@npm:1.2.1" - dependencies: - promise-polyfill: "npm:^1.1.6" - checksum: 10c0/08b764a17ad7615f5daa188120448dc4d06b097a3c515e337378e1653bc815ad25d388a44e0e2b98b7637841913c42a6734c1f60d142b2e7827f4b41d62d112a - languageName: node - linkType: hard - -"streamify-string@npm:^1.0.1": - version: 1.0.1 - resolution: "streamify-string@npm:1.0.1" - checksum: 10c0/d6b72771ab8a8a15e822a636e3bbe9debe34aa59901cc90a6b8e27cd6f02d52f0335704ed32c4cd69b2dab0a192f503877d53718a51282fe4901f7e9092c8b5b - languageName: node - linkType: hard - -"streamsearch@npm:0.1.2": - version: 0.1.2 - resolution: "streamsearch@npm:0.1.2" - checksum: 10c0/408a3db5b5643c1d6eb65c9d8ccc011b4857bfca41946d808b7f165b5b85f47755b2ff56ec1c4bbbeb5a496afcde9adfea12f9f67bd09ff3f04ae3f1f58d37c6 - languageName: node - linkType: hard - -"string-length@npm:^4.0.2": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: "npm:^1.0.2" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c - languageName: node - linkType: hard - -"string-template@npm:^1.0.0": - version: 1.0.0 - resolution: "string-template@npm:1.0.0" - checksum: 10c0/7c07ab5b4274a50b1f077a47769044b9a8f0a5a4a47811cf3f9ba5acc9d2ff1231d593a93983ea554c3211fb09949e805912f9ce9d7688990eeb41d5008b95d2 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"string.prototype.trim@npm:^1.2.10": - version: 1.2.10 - resolution: "string.prototype.trim@npm:1.2.10" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - define-data-property: "npm:^1.1.4" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-object-atoms: "npm:^1.0.0" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": - version: 1.0.9 - resolution: "string.prototype.trimend@npm:1.0.9" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: "npm:~5.2.0" - checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d - languageName: node - linkType: hard - -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: 10c0/1c628d78f974aa7539c496029f48e7019acc32487fc695464f9d6bdfec98edd7d933a06b3216bc2016918f6e75074c611d84430a53cb0e43071597d6c1ac5e25 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f - languageName: node - linkType: hard - -"strip-indent@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-indent@npm:3.0.0" - dependencies: - min-indent: "npm:^1.0.0" - checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd - languageName: node - linkType: hard - -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 - languageName: node - linkType: hard - -"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": - version: 2.1.0 - resolution: "strong-log-transformer@npm:2.1.0" - dependencies: - duplexer: "npm:^0.1.1" - minimist: "npm:^1.2.0" - through: "npm:^2.3.4" - bin: - sl-log-transformer: bin/sl-log-transformer.js - checksum: 10c0/3c3b8aa8f34d661910563ff996412e2f527fc814e699a376854b554d4a4294ab7e285b4e2c08a080a7b19c5600a9b93a98798d3ac600fe3de545ca6605c07829 - languageName: node - linkType: hard - -"superagent@npm:^3.8.3": - version: 3.8.3 - resolution: "superagent@npm:3.8.3" - dependencies: - component-emitter: "npm:^1.2.0" - cookiejar: "npm:^2.1.0" - debug: "npm:^3.1.0" - extend: "npm:^3.0.0" - form-data: "npm:^2.3.1" - formidable: "npm:^1.2.0" - methods: "npm:^1.1.1" - mime: "npm:^1.4.1" - qs: "npm:^6.5.1" - readable-stream: "npm:^2.3.5" - checksum: 10c0/e467c39aee7aa57dc2e45b5c7c76d70a7ad4fff8d3d2b57a2da0edfaca0e598562fc9f8f74a1383661744f68b3dfd2cca388a3000b41d6c2d8e0e5d031d152fe - languageName: node - linkType: hard - -"supertest@npm:^4.0.2": - version: 4.0.2 - resolution: "supertest@npm:4.0.2" - dependencies: - methods: "npm:^1.1.2" - superagent: "npm:^3.8.3" - checksum: 10c0/436ab991ae9242e695374d0006bf2dd16fbbab287966d0176c92eaf8f9a124a839a0ff6db22f46d1de0faeec3752ff8ebfbe051681c050032acab9f4af192399 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - -"supports-color@npm:^8.1.1": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - -"synckit@npm:^0.11.8": - version: 0.11.11 - resolution: "synckit@npm:0.11.11" - dependencies: - "@pkgr/core": "npm:^0.2.9" - checksum: 10c0/f0761495953d12d94a86edf6326b3a565496c72f9b94c02549b6961fb4d999f4ca316ce6b3eb8ed2e4bfc5056a8de65cda0bd03a233333a35221cd2fdc0e196b - languageName: node - linkType: hard - -"synckit@npm:^0.9.1": - version: 0.9.2 - resolution: "synckit@npm:0.9.2" - dependencies: - "@pkgr/core": "npm:^0.1.0" - tslib: "npm:^2.6.2" - checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59 - languageName: node - linkType: hard - -"tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 - languageName: node - linkType: hard - -"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": - version: 2.1.2 - resolution: "tar-fs@npm:2.1.2" - dependencies: - chownr: "npm:^1.1.1" - mkdirp-classic: "npm:^0.5.2" - pump: "npm:^3.0.0" - tar-stream: "npm:^2.1.4" - checksum: 10c0/9c704bd4a53be7565caf34ed001d1428532457fe3546d8fc1233f0f0882c3d2403f8602e8046e0b0adeb31fe95336572a69fb28851a391523126b697537670fc - languageName: node - linkType: hard - -"tar-stream@npm:^2.1.4, tar-stream@npm:~2.2.0": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" - dependencies: - bl: "npm:^4.0.3" - end-of-stream: "npm:^1.4.1" - fs-constants: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.1.1" - checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 - languageName: node - linkType: hard - -"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 - languageName: node - linkType: hard - -"tar@npm:^7.4.3": - version: 7.4.3 - resolution: "tar@npm:7.4.3" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.0.1" - mkdirp: "npm:^3.0.1" - yallist: "npm:^5.0.0" - checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d - languageName: node - linkType: hard - -"temp-dir@npm:1.0.0": - version: 1.0.0 - resolution: "temp-dir@npm:1.0.0" - checksum: 10c0/648669d5e154d1961217784c786acadccf0156519c19e0aceda7edc76f5bdfa32a40dd7f88ebea9238ed6e3dedf08b846161916c8947058c384761351be90a8e - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": "npm:^0.1.2" - glob: "npm:^7.1.4" - minimatch: "npm:^3.0.4" - checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 - languageName: node - linkType: hard - -"text-decoding@npm:^1.0.0": - version: 1.0.0 - resolution: "text-decoding@npm:1.0.0" - checksum: 10c0/290dbd6111f39a4020b3e2384de614f90051eff3cd11176329fda0a40ac0b0a07e6820b9aeb4b0b7c2cc7869b62cd3b25944c71e9e16b628bcf57299ab84e311 - languageName: node - linkType: hard - -"text-extensions@npm:^1.0.0": - version: 1.9.0 - resolution: "text-extensions@npm:1.9.0" - checksum: 10c0/9ad5a9f723a871e2d884e132d7e93f281c60b5759c95f3f6b04704856548715d93a36c10dbaf5f12b91bf405f0cf3893bf169d4d143c0f5509563b992d385443 - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c - languageName: node - linkType: hard - -"through2@npm:^2.0.0": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: "npm:~2.3.6" - xtend: "npm:~4.0.1" - checksum: 10c0/cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade - languageName: node - linkType: hard - -"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.12": - version: 0.2.14 - resolution: "tinyglobby@npm:0.2.14" - dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"tmp@npm:~0.2.1": - version: 0.2.3 - resolution: "tmp@npm:0.2.3" - checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 - languageName: node - linkType: hard - -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"toidentifier@npm:1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 - languageName: node - linkType: hard - -"token-stream@npm:1.0.0": - version: 1.0.0 - resolution: "token-stream@npm:1.0.0" - checksum: 10c0/c1924a89686fc035d579cbe856da12306571d5fe7408eeeebe80df7c25c5cc644b8ae102d5cbc0f085d0e105f391d1a48dc0e568520434c5b444ea6c7de2b822 - languageName: node - linkType: hard - -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: "npm:^1.1.28" - punycode: "npm:^2.1.1" - checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"treeverse@npm:^3.0.0": - version: 3.0.0 - resolution: "treeverse@npm:3.0.0" - checksum: 10c0/286479b9c05a8fb0538ee7d67a5502cea7704f258057c784c9c1118a2f598788b2c0f7a8d89e74648af88af0225b31766acecd78e6060736f09b21dd3fa255db - languageName: node - linkType: hard - -"trim-newlines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-newlines@npm:3.0.1" - checksum: 10c0/03cfefde6c59ff57138412b8c6be922ecc5aec30694d784f2a65ef8dcbd47faef580b7de0c949345abdc56ec4b4abf64dd1e5aea619b200316e471a3dd5bf1f6 - languageName: node - linkType: hard - -"ts-api-utils@npm:^1.3.0": - version: 1.4.3 - resolution: "ts-api-utils@npm:1.4.3" - peerDependencies: - typescript: ">=4.2.0" - checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a - languageName: node - linkType: hard - -"ts-node@npm:^10.9.2": - version: 10.9.2 - resolution: "ts-node@npm:10.9.2" - dependencies: - "@cspotcode/source-map-support": "npm:^0.8.0" - "@tsconfig/node10": "npm:^1.0.7" - "@tsconfig/node12": "npm:^1.0.7" - "@tsconfig/node14": "npm:^1.0.0" - "@tsconfig/node16": "npm:^1.0.2" - acorn: "npm:^8.4.1" - acorn-walk: "npm:^8.1.1" - arg: "npm:^4.1.0" - create-require: "npm:^1.1.0" - diff: "npm:^4.0.1" - make-error: "npm:^1.1.1" - v8-compile-cache-lib: "npm:^3.0.1" - yn: "npm:3.1.1" - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 - languageName: node - linkType: hard - -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": "npm:^0.0.29" - json5: "npm:^1.0.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 - languageName: node - linkType: hard - -"tsconfig-paths@npm:^4.1.2": - version: 4.2.0 - resolution: "tsconfig-paths@npm:4.2.0" - dependencies: - json5: "npm:^2.2.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/09a5877402d082bb1134930c10249edeebc0211f36150c35e1c542e5b91f1047b1ccf7da1e59babca1ef1f014c525510f4f870de7c9bda470c73bb4e2721b3ea - languageName: node - linkType: hard - -"tslib@npm:^1.8.1": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 - languageName: node - linkType: hard - -"ttl@npm:^1.3.0": - version: 1.3.1 - resolution: "ttl@npm:1.3.1" - checksum: 10c0/097d898ceedc4fcdcd767c28c880096c78f5d69ecf6ddd95a0b465abc61f486c8f4f9dda2d527cb159a7d51f3bbdaeb703fff71b6f968a3d12396046ecd6d13c - languageName: node - linkType: hard - -"tuf-js@npm:^2.2.1": - version: 2.2.1 - resolution: "tuf-js@npm:2.2.1" - dependencies: - "@tufjs/models": "npm:2.0.1" - debug: "npm:^4.3.4" - make-fetch-happen: "npm:^13.0.1" - checksum: 10c0/7c17b097571f001730d7be0aeaec6bec46ed2f25bf73990b1133c383d511a1ce65f831e5d6d78770940a85b67664576ff0e4c98e5421bab6d33ff36e4be500c8 - languageName: node - linkType: hard - -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a - languageName: node - linkType: hard - -"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": - version: 0.14.5 - resolution: "tweetnacl@npm:0.14.5" - checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 - languageName: node - linkType: hard - -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd - languageName: node - linkType: hard - -"type-fest@npm:^0.18.0": - version: 0.18.1 - resolution: "type-fest@npm:0.18.1" - checksum: 10c0/303f5ecf40d03e1d5b635ce7660de3b33c18ed8ebc65d64920c02974d9e684c72483c23f9084587e9dd6466a2ece1da42ddc95b412a461794dd30baca95e2bac - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"type-fest@npm:^0.4.1": - version: 0.4.1 - resolution: "type-fest@npm:0.4.1" - checksum: 10c0/2e65f43209492638244842f70d86e7325361c92dd1cc8e3bf5728c96b980305087fa5ba60652e9053d56c302ef4f1beb9652a91b72a50da0ea66c6b851f3b9cb - languageName: node - linkType: hard - -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: 10c0/0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 - languageName: node - linkType: hard - -"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 - languageName: node - linkType: hard - -"type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: "npm:0.3.0" - mime-types: "npm:~2.1.24" - checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d - languageName: node - linkType: hard - -"typed-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-buffer@npm:1.0.3" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-typed-array: "npm:^1.1.14" - checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 - languageName: node - linkType: hard - -"typed-array-byte-length@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-byte-length@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.8" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-proto: "npm:^1.2.0" - is-typed-array: "npm:^1.1.14" - checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e - languageName: node - linkType: hard - -"typed-array-byte-offset@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-byte-offset@npm:1.0.4" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-proto: "npm:^1.2.0" - is-typed-array: "npm:^1.1.15" - reflect.getprototypeof: "npm:^1.0.9" - checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.7": - version: 1.0.7 - resolution: "typed-array-length@npm:1.0.7" - dependencies: - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - is-typed-array: "npm:^1.1.13" - possible-typed-array-names: "npm:^1.0.0" - reflect.getprototypeof: "npm:^1.0.6" - checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 - languageName: node - linkType: hard - -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412 - languageName: node - linkType: hard - -"typescript@npm:>=3 < 6": - version: 5.7.3 - resolution: "typescript@npm:5.7.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa - languageName: node - linkType: hard - -"typescript@npm:^5.9.2": - version: 5.9.2 - resolution: "typescript@npm:5.9.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": - version: 5.7.3 - resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": - version: 5.9.2 - resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e - languageName: node - linkType: hard - -"uglify-js@npm:^3.1.4": - version: 3.19.3 - resolution: "uglify-js@npm:3.19.3" - bin: - uglifyjs: bin/uglifyjs - checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 - languageName: node - linkType: hard - -"uid-safe@npm:~2.1.5": - version: 2.1.5 - resolution: "uid-safe@npm:2.1.5" - dependencies: - random-bytes: "npm:~1.0.0" - checksum: 10c0/ec96862e859fd12175f3da7fda9d1359a2cf412fd521e10837cbdc6d554774079ce252f366981df9401283841c8924782f6dbee8f82a3a81f805ed8a8584595d - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.1.0": - version: 1.1.0 - resolution: "unbox-primitive@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - has-bigints: "npm:^1.0.2" - has-symbols: "npm:^1.1.0" - which-boxed-primitive: "npm:^1.1.1" - checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 - languageName: node - linkType: hard - -"underscore.string@npm:^3.2.3": - version: 3.3.6 - resolution: "underscore.string@npm:3.3.6" - dependencies: - sprintf-js: "npm:^1.1.1" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/172319c7ef5436587e6f0fb5afe0b2e6b50f723a4070c7fb3454c5dfa5398ed3b7042c049eac2826bdd44d37cbd16b2b965d0ccc1597fde354b1d3a846fd4a39 - languageName: node - linkType: hard - -"underscore@npm:^1.8.3": - version: 1.13.7 - resolution: "underscore@npm:1.13.7" - checksum: 10c0/fad2b4aac48847674aaf3c30558f383399d4fdafad6dd02dd60e4e1b8103b52c5a9e5937e0cc05dacfd26d6a0132ed0410ab4258241240757e4a4424507471cd - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 - languageName: node - linkType: hard - -"undici-types@npm:~6.20.0": - version: 6.20.0 - resolution: "undici-types@npm:6.20.0" - checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf - languageName: node - linkType: hard - -"undici@npm:^5.21.2": - version: 5.28.5 - resolution: "undici@npm:5.28.5" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/4dfaa13089fe4c0758f84ec0d34b257e58608e6be3aa540f493b9864b39e3fdcd0a1ace38e434fe79db55f833aa30bcfddd8d6cbe3e0982b0dcae8ec17b65e08 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.1 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" - checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: "npm:^2.0.0" - unicode-property-aliases-ecmascript: "npm:^2.0.0" - checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.2.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" - checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f - languageName: node - linkType: hard - -"unique-filename@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-filename@npm:4.0.0" - dependencies: - unique-slug: "npm:^5.0.0" - checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 - languageName: node - linkType: hard - -"unique-slug@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-slug@npm:5.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 - languageName: node - linkType: hard - -"universal-user-agent@npm:^6.0.0": - version: 6.0.1 - resolution: "universal-user-agent@npm:6.0.1" - checksum: 10c0/5c9c46ffe19a975e11e6443640ed4c9e0ce48fcc7203325757a8414ac49940ebb0f4667f2b1fa561489d1eb22cb2d05a0f7c82ec20c5cba42e58e188fb19b187 - languageName: node - linkType: hard - -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unpipe@npm:1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c - languageName: node - linkType: hard - -"unrs-resolver@npm:^1.7.11": - version: 1.11.1 - resolution: "unrs-resolver@npm:1.11.1" - dependencies: - "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" - "@unrs/resolver-binding-android-arm64": "npm:1.11.1" - "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" - "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" - "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" - napi-postinstall: "npm:^0.3.0" - dependenciesMeta: - "@unrs/resolver-binding-android-arm-eabi": - optional: true - "@unrs/resolver-binding-android-arm64": - optional: true - "@unrs/resolver-binding-darwin-arm64": - optional: true - "@unrs/resolver-binding-darwin-x64": - optional: true - "@unrs/resolver-binding-freebsd-x64": - optional: true - "@unrs/resolver-binding-linux-arm-gnueabihf": - optional: true - "@unrs/resolver-binding-linux-arm-musleabihf": - optional: true - "@unrs/resolver-binding-linux-arm64-gnu": - optional: true - "@unrs/resolver-binding-linux-arm64-musl": - optional: true - "@unrs/resolver-binding-linux-ppc64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-musl": - optional: true - "@unrs/resolver-binding-linux-s390x-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-musl": - optional: true - "@unrs/resolver-binding-wasm32-wasi": - optional: true - "@unrs/resolver-binding-win32-arm64-msvc": - optional: true - "@unrs/resolver-binding-win32-ia32-msvc": - optional: true - "@unrs/resolver-binding-win32-x64-msvc": - optional: true - checksum: 10c0/c91b112c71a33d6b24e5c708dab43ab80911f2df8ee65b87cd7a18fb5af446708e98c4b415ca262026ad8df326debcc7ca6a801b2935504d87fd6f0b9d70dce1 - languageName: node - linkType: hard - -"upath@npm:2.0.1": - version: 2.0.1 - resolution: "upath@npm:2.0.1" - checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.1": - version: 1.1.2 - resolution: "update-browserslist-db@npm:1.1.2" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.3": - version: 1.1.3 - resolution: "update-browserslist-db@npm:1.1.3" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - -"url-join@npm:^4.0.1": - version: 4.0.1 - resolution: "url-join@npm:4.0.1" - checksum: 10c0/ac65e2c7c562d7b49b68edddcf55385d3e922bc1dd5d90419ea40b53b6de1607d1e45ceb71efb9d60da02c681d13c6cb3a1aa8b13fc0c989dfc219df97ee992d - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 - languageName: node - linkType: hard - -"util.promisify@npm:^1.0.1": - version: 1.1.3 - resolution: "util.promisify@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-data-property: "npm:^1.1.4" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - for-each: "npm:^0.3.3" - get-intrinsic: "npm:^1.2.6" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - object.getownpropertydescriptors: "npm:^2.1.8" - safe-array-concat: "npm:^1.1.3" - checksum: 10c0/b7a2f721222ffc26f8a12a1cdc44a81b16a614b81f2d6f71f50c8b214a20afe8324d5f0700f04759d6ea33446ba0730e4ef0b4e2c4f4ef5adca16dabd502fa2b - languageName: node - linkType: hard - -"util@npm:^0.12.4": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 - languageName: node - linkType: hard - -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" - bin: - uuid: dist/bin/uuid - checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe - languageName: node - linkType: hard - -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 - languageName: node - linkType: hard - -"uuid@npm:^8.3.0": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 - languageName: node - linkType: hard - -"uuid@npm:^9.0.1": - version: 9.0.1 - resolution: "uuid@npm:9.0.1" - bin: - uuid: dist/bin/uuid - checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^9.0.1": - version: 9.3.0 - resolution: "v8-to-istanbul@npm:9.3.0" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.12" - "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^2.0.0" - checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 - languageName: node - linkType: hard - -"valid-data-url@npm:^2.0.0": - version: 2.0.0 - resolution: "valid-data-url@npm:2.0.0" - checksum: 10c0/4e34ccf43139656770ce8474b2a49aa825ab793811ef37713041fa63e24197b02715908bbd40edacc247c592a1b0fa8d3f8279983655c6417eed5bf444eb1d7a - languageName: node - linkType: hard - -"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: "npm:^3.0.0" - spdx-expression-parse: "npm:^3.0.0" - checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f - languageName: node - linkType: hard - -"validate-npm-package-name@npm:5.0.1, validate-npm-package-name@npm:^5.0.0": - version: 5.0.1 - resolution: "validate-npm-package-name@npm:5.0.1" - checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 - languageName: node - linkType: hard - -"vc-js@npm:^0.6.4": - version: 0.6.4 - resolution: "vc-js@npm:0.6.4" - dependencies: - commander: "npm:^2.20.3" - credentials-context: "npm:^1.0.0" - debug: "npm:^4.1.1" - fs-extra: "npm:^8.1.0" - get-stdin: "npm:^7.0.0" - jsonld: "npm:^2.0.2" - jsonld-signatures: "npm:^5.0.0" - supports-color: "npm:^7.1.0" - bin: - vc-js: bin/vc-js - checksum: 10c0/04b33fce6688c293ed078c09aa5a68f41a27cff0f298338290c1a3bd7db8a51e805f6220c89d3d15925d3621f2f00270f19891feed1d5bf32b8880d87484c3f4 - languageName: node - linkType: hard - -"verror@npm:1.10.0": - version: 1.10.0 - resolution: "verror@npm:1.10.0" - dependencies: - assert-plus: "npm:^1.0.0" - core-util-is: "npm:1.0.2" - extsprintf: "npm:^1.2.0" - checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d - languageName: node - linkType: hard - -"void-elements@npm:^3.1.0": - version: 3.1.0 - resolution: "void-elements@npm:3.1.0" - checksum: 10c0/0b8686f9f9aa44012e9bd5eabf287ae0cde409b9a2854c5a2335cb83920c957668ac5876e3f0d158dd424744ac411a7270e64128556b451ed3bec875ef18534d - languageName: node - linkType: hard - -"wait-for-expect@npm:^3.0.2": - version: 3.0.2 - resolution: "wait-for-expect@npm:3.0.2" - checksum: 10c0/9616b82381f6571a0f3ed235a62ecdaf529816c9eef04f665ee1b8b515c3b7e1dc90d781111b6284bb777f45c4742f6c058d549a44d9d6e367ffd4d34f5f3b9e - languageName: node - linkType: hard - -"walk-up-path@npm:^3.0.1": - version: 3.0.1 - resolution: "walk-up-path@npm:3.0.1" - checksum: 10c0/3184738e0cf33698dd58b0ee4418285b9c811e58698f52c1f025435a85c25cbc5a63fee599f1a79cb29ca7ef09a44ec9417b16bfd906b1a37c305f7aa20ee5bc - languageName: node - linkType: hard - -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: "npm:1.0.12" - checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e - languageName: node - linkType: hard - -"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: "npm:^1.0.3" - checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 - languageName: node - linkType: hard - -"web-resource-inliner@npm:^4.2.1": - version: 4.3.4 - resolution: "web-resource-inliner@npm:4.3.4" - dependencies: - async: "npm:^3.1.0" - chalk: "npm:^2.4.2" - datauri: "npm:^2.0.0" - htmlparser2: "npm:^4.0.0" - lodash.unescape: "npm:^4.0.1" - request: "npm:^2.88.0" - safer-buffer: "npm:^2.1.2" - valid-data-url: "npm:^2.0.0" - xtend: "npm:^4.0.2" - checksum: 10c0/2e7b87449ceea0220398c0c509396302a71c9b429968187a61f4fc704de428f593ff5f671335ad6d3b4a3aa0752911ad0ee9c30789cffb687176352be238bb57 - languageName: node - linkType: hard - -"web-streams-node@npm:^0.4.0": - version: 0.4.0 - resolution: "web-streams-node@npm:0.4.0" - dependencies: - is-stream: "npm:^1.1.0" - readable-stream-node-to-web: "npm:^1.0.1" - web-streams-ponyfill: "npm:^1.4.1" - checksum: 10c0/356292e85f1b9afa39a0470f6abf1ab3866504371862bce4851a9ab99f8510fc06c1c0f8490536ca2ae02797f63dec4d186482468ab2cc547e4c1a8546b4b2e3 - languageName: node - linkType: hard - -"web-streams-polyfill@npm:^3.0.3": - version: 3.3.3 - resolution: "web-streams-polyfill@npm:3.3.3" - checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f - languageName: node - linkType: hard - -"web-streams-ponyfill@npm:^1.4.1": - version: 1.4.2 - resolution: "web-streams-ponyfill@npm:1.4.2" - checksum: 10c0/bcaed7e8c6359511f2e07054d399675441f8baf05075ed171f7781020731c71a3455fbd4a70a4038a461aa82941d3186679d0c74bfeaa855537db973da390f6c - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - -"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": - version: 1.1.1 - resolution: "which-boxed-primitive@npm:1.1.1" - dependencies: - is-bigint: "npm:^1.1.0" - is-boolean-object: "npm:^1.2.1" - is-number-object: "npm:^1.1.1" - is-string: "npm:^1.1.1" - is-symbol: "npm:^1.1.1" - checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe - languageName: node - linkType: hard - -"which-builtin-type@npm:^1.2.1": - version: 1.2.1 - resolution: "which-builtin-type@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - function.prototype.name: "npm:^1.1.6" - has-tostringtag: "npm:^1.0.2" - is-async-function: "npm:^2.0.0" - is-date-object: "npm:^1.1.0" - is-finalizationregistry: "npm:^1.1.0" - is-generator-function: "npm:^1.0.10" - is-regex: "npm:^1.2.1" - is-weakref: "npm:^1.0.2" - isarray: "npm:^2.0.5" - which-boxed-primitive: "npm:^1.1.0" - which-collection: "npm:^1.0.2" - which-typed-array: "npm:^1.1.16" - checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 - languageName: node - linkType: hard - -"which-collection@npm:^1.0.2": - version: 1.0.2 - resolution: "which-collection@npm:1.0.2" - dependencies: - is-map: "npm:^2.0.3" - is-set: "npm:^2.0.3" - is-weakmap: "npm:^2.0.2" - is-weakset: "npm:^2.0.3" - checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.2": - version: 1.1.18 - resolution: "which-typed-array@npm:1.1.18" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c - languageName: node - linkType: hard - -"which@npm:^1.2.9": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: "npm:^2.0.0" - bin: - which: ./bin/which - checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a - languageName: node - linkType: hard - -"which@npm:^5.0.0": - version: 5.0.0 - resolution: "which@npm:5.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b - languageName: node - linkType: hard - -"wide-align@npm:1.1.5, wide-align@npm:^1.1.2": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: "npm:^1.0.2 || 2 || 3 || 4" - checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 - languageName: node - linkType: hard - -"with@npm:^7.0.0": - version: 7.0.2 - resolution: "with@npm:7.0.2" - dependencies: - "@babel/parser": "npm:^7.9.6" - "@babel/types": "npm:^7.9.6" - assert-never: "npm:^1.2.1" - babel-walk: "npm:3.0.0-canary-5" - checksum: 10c0/99289e49afc4b1776afae0ef85e84cfa775e8e07464d2b9853a31b0822347031d1cf77f287d25adc8c3f81e4fa68f4ee31526a9c95d4981ba08a1fe24dee111a - languageName: node - linkType: hard - -"word-wrap@npm:^1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 - languageName: node - linkType: hard - -"wordwrap@npm:~0.0.2": - version: 0.0.3 - resolution: "wordwrap@npm:0.0.3" - checksum: 10c0/b3b212f8b2167091f59bc60929ada2166eb157abb6c8c82e2a705fe5aa5876440c3966ab39eb6c7bcb2ff0ac0c8d9fba726a9c2057b83bd65cdc1858f9d816ce - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.0.1": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": - version: 5.0.1 - resolution: "write-file-atomic@npm:5.0.1" - dependencies: - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^4.0.1" - checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d - languageName: node - linkType: hard - -"write-file-atomic@npm:^2.4.2": - version: 2.4.3 - resolution: "write-file-atomic@npm:2.4.3" - dependencies: - graceful-fs: "npm:^4.1.11" - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^3.0.2" - checksum: 10c0/8cb4bba0c1ab814a9b127844da0db4fb8c5e06ddbe6317b8b319377c73b283673036c8b9360120062898508b9428d81611cf7fa97584504a00bc179b2a580b92 - languageName: node - linkType: hard - -"write-json-file@npm:^3.2.0": - version: 3.2.0 - resolution: "write-json-file@npm:3.2.0" - dependencies: - detect-indent: "npm:^5.0.0" - graceful-fs: "npm:^4.1.15" - make-dir: "npm:^2.1.0" - pify: "npm:^4.0.1" - sort-keys: "npm:^2.0.0" - write-file-atomic: "npm:^2.4.2" - checksum: 10c0/3eadcb6e832ac34dbba37d4eea8871d9fef0e0d77c486b13ed5f81d84a8fcecd9e1a04277e2691eb803c2bed39c2a315e98b96f492c271acee2836acc6276043 - languageName: node - linkType: hard - -"write-pkg@npm:4.0.0": - version: 4.0.0 - resolution: "write-pkg@npm:4.0.0" - dependencies: - sort-keys: "npm:^2.0.0" - type-fest: "npm:^0.4.1" - write-json-file: "npm:^3.2.0" - checksum: 10c0/8e20db5fa444dad04e3703c18d8e0f89679caa60accbee5da9ea3aa076430b3f32d99f50d8860d29044245775795455c62d12d16a7856d407e30df7b79f39505 - languageName: node - linkType: hard - -"xmldom@npm:0.1.19": - version: 0.1.19 - resolution: "xmldom@npm:0.1.19" - checksum: 10c0/e0634db88f7485285ce0381112b28c2136b6754109e6e0f49576a9e52c2dc6f22f9558cd37126a6f18d15c9da6cd55a546dd223f8e9643326358e3eb38d23da2 - languageName: node - linkType: hard - -"xtend@npm:^4.0.2, xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 - languageName: node - linkType: hard - -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: 10c0/0b9e25aa00adf19e01d2bcd4b208aee2b0db643d9927131797b7af5ff69480fc80f1c3db738cbf3946f0bddf39d8f2d0a5709c644fd42d4aa3a4e6e786c087b5 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard - -"yaml@npm:^2.6.0": - version: 2.7.0 - resolution: "yaml@npm:2.7.0" - bin: - yaml: bin.mjs - checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 - languageName: node - linkType: hard - -"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 - languageName: node - linkType: hard - -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 - languageName: node - linkType: hard - -"yargs@npm:17.7.2, yargs@npm:^17.6.2, yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: "npm:^8.0.1" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.1.1" - checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 - languageName: node - linkType: hard - -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - dependencies: - cliui: "npm:^7.0.2" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.0" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^20.2.2" - checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard + version "0.0.5" + resolved "git+https://github.com/joshchan/node-cas.git#344a8bfba9d054e2e378adaf95b720c898ae48a2" + dependencies: + cheerio "0.19.0" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +chalk@2.4.2, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== + dependencies: + is-regex "^1.0.3" + +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== + +cheerio@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925" + integrity sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ== + dependencies: + css-select "~1.0.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "~3.8.1" + lodash "^3.2.0" + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA== + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +ci-info@^4.0.0, ci-info@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" + integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== + +cjs-module-lexer@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz#b3ca5101843389259ade7d88c77bd06ce55849ca" + integrity sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + +cmd-shim@6.0.3, cmd-shim@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" + integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@1.1.3, color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +columnify@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.15.1, commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +comment-parser@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +consolidate@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" + integrity sha512-PZFskfj64QnpKVK9cPdY36pyWEhZNM+srRVqtwMiVTlnViSoZcvX35PpBhhUcyLTHXYvz7pZRmxvsqwzJqg9kA== + dependencies: + bluebird "^3.1.1" + +constantinople@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" + integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== + dependencies: + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.1" + +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +conventional-changelog-angular@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== + +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" + +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== + +cookie@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +cookiejar@^2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + +core-js-compat@^3.43.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" + integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== + dependencies: + browserslist "^4.28.0" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + +cpu-features@~0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== + dependencies: + buildcheck "~0.0.6" + nan "^2.19.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +credentials-context@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/credentials-context/-/credentials-context-1.0.0.tgz#a63cb4b7e0a4ca4460d247b7c9370a58b10ebac9" + integrity sha512-rF3GPhTUGY58xlpuVRif/1i0BxVpynpmFdGNS81S2ezdKPSKoFke5ZOZWB8ZUvGi8bV8CuDM+ZcM/uf4z0PQVQ== + +cron-parser@^2.13.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" + integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== + dependencies: + is-nan "^1.3.0" + moment-timezone "^0.5.31" + +cron-parser@^4.2.0, cron-parser@^4.2.1, cron-parser@^4.3.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" + integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== + dependencies: + luxon "^3.2.1" + +cron@^1.8.2: + version "1.8.3" + resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.3.tgz#2a61d7b15848716885834ec56ac072f4b9744ebd" + integrity sha512-JYR/QZFklJCIPndBLfd/2nU1nSlCMrUdtQ2mGLXSVM/qqqEK7DOrFR0gsEiyeqs0PdWrs0ve1ggH4V7XksDwXg== + dependencies: + luxon "^1.23.x" + +cron@^4.1.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cron/-/cron-4.4.0.tgz#1488444a23ea7134e2b7686c17711abdffcebba8" + integrity sha512-fkdfq+b+AHI4cKdhZlppHveI/mgz2qpiYxcm+t5E5TsxX7QrLS1VE0+7GENEk9z0EeGPcpSciGv6ez24duWhwQ== + dependencies: + "@types/luxon" "~3.7.0" + luxon "~3.7.0" + +cross-fetch@^3.0.5, cross-fetch@^3.0.6: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + dependencies: + node-fetch "^2.7.0" + +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-ld@^3.7.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-3.9.0.tgz#4f42849a143b5d65f28b018d80bc0fee6cd37ba8" + integrity sha512-PFE7V6A2QNnUp6iiPVEZI4p8wsztkEWLbY1BAXVnclm/aw4KGwpJ+1Ds4vQUCJ5BsWxj15fwE5rHQ8AWaWB2nw== + dependencies: + base64url-universal "^1.0.1" + bs58 "^4.0.1" + node-forge "~0.10.0" + semver "^6.2.0" + optionalDependencies: + sodium-native "^3.2.0" + +crypto-ld@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-7.0.0.tgz#ad593cce31da84e60bd14fd2b25221f97e8a3b74" + integrity sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw== + +css-select@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0" + integrity sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw== + dependencies: + boolbase "~1.0.0" + css-what "1.0" + domutils "1.4" + nth-check "~1.0.0" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA== + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c" + integrity sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw== + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +dashify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dashify/-/dashify-2.0.0.tgz#fff270ca2868ca427fee571de35691d6e437a648" + integrity sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A== + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +datauri@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/datauri/-/datauri-2.0.0.tgz#ff0ee23729935a6bcc81f301621bed3e692bf3c7" + integrity sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g== + dependencies: + image-size "^0.7.3" + mimer "^1.0.0" + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +dedent@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.1.tgz#364661eea3d73f3faba7089214420ec2f8f13e15" + integrity sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg== + +deep-extend@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" + integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2, deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^1.1.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +destroy@1.2.0, destroy@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +detect-newline@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +dicer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== + dependencies: + streamsearch "0.1.2" + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + integrity sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ== + dependencies: + domelementtype "1" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domhandler@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@1.4: + version "1.4.3" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f" + integrity sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w== + dependencies: + domelementtype "1" + +domutils@1.5, domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + +dotenv-expand@~11.0.6: + version "11.0.7" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" + integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== + dependencies: + dotenv "^16.4.5" + +dotenv-flow@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dotenv-flow/-/dotenv-flow-3.3.0.tgz#e22341c035d5672b923bf76feb35999f728ee456" + integrity sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A== + dependencies: + dotenv "^8.6.0" + +dotenv@^16.4.5: + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== + +dotenv@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +dotenv@~16.3.1: + version "16.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" + integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== + +dotenv@~16.4.5: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ed25519-signature-2018-context@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz#68002ea7497c32e8170667cfd67468dedf7d220e" + integrity sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA== + +ed25519-signature-2020-context@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz#b2f724f07db154ddf0fd6605410d88736e56fd07" + integrity sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.7: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.5.263: + version "1.5.267" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" + integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== + +email-templates@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-2.7.1.tgz#d7e5641fec0944c9b68a6d272d28e5685b3b223c" + integrity sha512-WJ0csXaBK3gV90dwBco5d3liu/XSH1jPEn3qfLDES/AsxOoMv4IRqp/MsQduKBexJZ81577OUbrdgnzvK2Kk9Q== + dependencies: + bluebird "^3.0.0" + consolidate "^0.14.2" + debug "^2.2.0" + glob "^6.0.0" + juice "^4.1.0" + lodash "^4.0.1" + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + integrity sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ== + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0, env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.3, es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" + integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.0.0, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.5.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb@^19.0.4: + version "19.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== + dependencies: + eslint-config-airbnb-base "^15.0.0" + object.assign "^4.1.2" + object.entries "^1.1.5" + +eslint-config-prettier@^9.1.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91" + integrity sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.6.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz#23dac32efa86a88e2b8232eb244ac499ad636db2" + integrity sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^2.0.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.13" + unrs-resolver "^1.6.2" + +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.29.1: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" + semver "^6.3.1" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" + +eslint-plugin-jest@^27.9.0: + version "27.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" + integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsdoc@^48.2.1: + version "48.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz#7c8dae6ce0d814aff54b87fdb808f02635691ade" + integrity sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA== + dependencies: + "@es-joy/jsdoccomment" "~0.46.0" + are-docs-informative "^0.0.2" + comment-parser "1.4.1" + debug "^4.3.5" + escape-string-regexp "^4.0.0" + espree "^10.1.0" + esquery "^1.6.0" + parse-imports "^2.1.1" + semver "^7.6.3" + spdx-expression-parse "^4.0.0" + synckit "^0.9.1" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-prettier@^5.1.3: + version "5.5.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c" + integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.11.7" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^8.2.0: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^10.1.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2, esquery@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@^1.8.1, etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter2@^6.4.9: + version "6.4.9" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" + integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit-x@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exit-x/-/exit-x-0.2.2.tgz#1f9052de3b8d99a696b10dad5bced9bdd5c3aa64" + integrity sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +expect-type@^1.2.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" + integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== + +expect@30.2.0, expect@^30.0.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-30.2.0.tgz#d4013bed267013c14bc1199cec8aa57cee9b5869" + integrity sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw== + dependencies: + "@jest/expect-utils" "30.2.0" + "@jest/get-type" "30.1.0" + jest-matcher-utils "30.2.0" + jest-message-util "30.2.0" + jest-mock "30.2.0" + jest-util "30.2.0" + +expo-server-sdk@^3.4.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/expo-server-sdk/-/expo-server-sdk-3.15.0.tgz#372afc98a3881f60c83063e71e889005ec50ddb5" + integrity sha512-Y71mQ7yeDhq6miHzn4kwRQOjqvBBsWeFXvyS9PYc6uqO/+UiYvrw3vMQiQqRxg2y0qgn9jMsvjf8T+mukSH85A== + dependencies: + node-fetch "^2.6.0" + promise-limit "^2.7.0" + promise-retry "^2.0.1" + +exponential-backoff@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" + integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== + +express-session@^1.17.0: + version "1.18.2" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.18.2.tgz#34db6252611b57055e877036eea09b4453dec5d8" + integrity sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A== + dependencies: + cookie "0.7.2" + cookie-signature "1.0.7" + debug "2.6.9" + depd "~2.0.0" + on-headers "~1.1.0" + parseurl "~1.3.3" + safe-buffer "5.2.1" + uid-safe "~2.1.5" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastest-validator@^1.19.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastest-validator/-/fastest-validator-1.19.1.tgz#f2c54bddb985c05317206c6d233df3060a0db015" + integrity sha512-eXiPCYOsuS5OWI+OVH9whu4LDGqO4cE7jUnZyQ8jV3rXfmC0OghQACOtYjTDxsVnblzvXIHGuizjFg0csiLE6g== + +fastq@^1.6.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fdir@^6.4.3, fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.15.6, follow-redirects@^1.5.1: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^2.3.1: + version "2.5.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.5.tgz#a5f6364ad7e4e67e95b4a07e2d8c6f711c74f624" + integrity sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.35" + safe-buffer "^5.2.1" + +form-data@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +formidable@^1.2.0: + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + +fresh@^0.5.2, fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +front-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-4.0.2.tgz#b14e54dc745cfd7293484f3210d15ea4edd7f4d5" + integrity sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== + dependencies: + js-yaml "^3.13.1" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.1.0, fs-extra@^11.2.0: + version "11.3.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.3.tgz#a27da23b72524e81ac6c3815cc0179b8c74c59ee" + integrity sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@5.1.1, get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-tsconfig@^4.10.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.0.tgz#fcdd991e6d22ab9a600f00e91c318707a5d9a0d7" + integrity sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ== + dependencies: + resolve-pkg-maps "^1.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== + dependencies: + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== + dependencies: + meow "^8.1.2" + semver "^7.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-14.0.0.tgz#18ce834726d5fbca0c25a4555101aa277017418f" + integrity sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@6.0.2, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^10.2.2, glob@^10.3.10: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +google-libphonenumber@^3.2.26: + version "3.2.43" + resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.43.tgz#c1e5107ab9c6e3848dc2108e380bde08da80931c" + integrity sha512-TbIX/UC3BFRJwCxbBeCPwuRC4Qws9Jz/CECmfTM1t9RFoI3X6eRThurv6AYr9wSrt640IA9KFIHuAD/vlyjqRw== + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^11.8.0: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@2.0.1, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== + dependencies: + lru-cache "^10.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-to-text@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-2.1.3.tgz#e50dbe4e4079912dbedcde05d278388edb8eea91" + integrity sha512-mafVvNjY6lrVrdT73ssJT4fWCtiLR8QVZDPurHbO/yT0KK7mVCpEGi+0g6jzwj4G41o4++9A48cZOSQBwvWd8Q== + dependencies: + he "^1.0.0" + htmlparser "^1.7.7" + optimist "^0.6.1" + underscore "^1.8.3" + underscore.string "^3.2.3" + +htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +htmlparser2@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + +htmlparser2@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" + integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + +htmlparser2@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +htmlparser2@~3.8.1: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + integrity sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q== + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + +htmlparser@^1.7.7: + version "1.7.7" + resolved "https://registry.yarnpkg.com/htmlparser/-/htmlparser-1.7.7.tgz#19e7b3997ff6fbac99ae5a7d2766489efe7e2d0e" + integrity sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ== + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +http-link-header@^1.0.2, http-link-header@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.1.3.tgz#b367b7a0ad1cf14027953f31aa1df40bb433da2a" + integrity sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ== + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-signature-header@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-signature-header/-/http-signature-header-1.3.1.tgz#0a2327651e444ab687d05ae437ef9f3f55983cf3" + integrity sha512-UpKpxfRlCWRK41j+MfRHHvjDWMLX67gY7pUNGQbXi13fsTZcvUHrgbhbiJtHDvGGxe5nQVYlTW7fKypMSmgXKQ== + dependencies: + assert-plus "^1.0.0" + +http-signature@^1.3.4: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.18.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.1.tgz#d4af1d2092f2bb05aab6296e5e7cd286d2f15432" + integrity sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@~0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" + integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== + dependencies: + minimatch "^9.0.0" + +ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +image-size@^0.7.3: + version "0.7.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" + integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +immutable@^3.8.2: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +import-local@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.8, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" + integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== + +init-package-json@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.3.tgz#2552fba75b6eed2495dc97f44183e2e5a5bcf8b0" + integrity sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w== + dependencies: + "@npmcli/package-json" "^5.0.0" + npm-package-arg "^11.0.0" + promzard "^1.0.0" + read "^3.0.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + +inquirer@^8.2.4: + version "8.2.7" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.7.tgz#62f6b931a9b7f8735dc42db927316d8fb6f71de8" + integrity sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA== + dependencies: + "@inquirer/external-editor" "^1.0.0" + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +ioredis@^4.27.0: + version "4.31.0" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.31.0.tgz#2aa72dc63162c04b2d65a7fa82e52277f8f23e66" + integrity sha512-tVrCrc4LWJwX82GD79dZ0teZQGq+5KJEGpXJRgzHOrhHtLgF9ME6rTwDV5+HN5bjnvmtrnS8ioXhflY16sy2HQ== + dependencies: + "@ioredis/commands" "^1.0.2" + cluster-key-slot "^1.1.0" + debug "^4.3.1" + denque "^1.1.0" + lodash.defaults "^4.2.0" + lodash.flatten "^4.4.0" + lodash.isarguments "^3.1.0" + p-map "^2.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ip-address@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== + +ipaddr.js@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== + +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.4" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.4.tgz#1ee5553818511915685d33bb13d31bf854e5059d" + integrity sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-bun-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== + dependencies: + semver "^7.7.1" + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.13.0, is-core-module@^2.16.1, is-core-module@^2.5.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-expression@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" + integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== + dependencies: + acorn "^7.1.1" + object-assign "^4.1.1" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.10, is-generator-function@^1.0.7: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== + dependencies: + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-nan@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-promise@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-regex@^1.0.3, is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-ssh@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.1.tgz#76de1cdbe8f92a8b905d1a172b6bc09704c20396" + integrity sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg== + dependencies: + protocols "^2.0.1" + +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@^0.1.2, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" + integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== + dependencies: + "@jridgewell/trace-mapping" "^0.3.23" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + +istanbul-reports@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.9.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.4.tgz#d626da108c63d5cfb00ab5c25fadc7e0084af8e6" + integrity sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA== + dependencies: + async "^3.2.6" + filelist "^1.0.4" + picocolors "^1.1.1" + +jest-changed-files@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-30.2.0.tgz#602266e478ed554e1e1469944faa7efd37cee61c" + integrity sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ== + dependencies: + execa "^5.1.1" + jest-util "30.2.0" + p-limit "^3.1.0" + +jest-circus@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-30.2.0.tgz#98b8198b958748a2f322354311023d1d02e7603f" + integrity sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg== + dependencies: + "@jest/environment" "30.2.0" + "@jest/expect" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/types" "30.2.0" + "@types/node" "*" + chalk "^4.1.2" + co "^4.6.0" + dedent "^1.6.0" + is-generator-fn "^2.1.0" + jest-each "30.2.0" + jest-matcher-utils "30.2.0" + jest-message-util "30.2.0" + jest-runtime "30.2.0" + jest-snapshot "30.2.0" + jest-util "30.2.0" + p-limit "^3.1.0" + pretty-format "30.2.0" + pure-rand "^7.0.0" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-cli@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-30.2.0.tgz#1780f8e9d66bf84a10b369aea60aeda7697dcc67" + integrity sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA== + dependencies: + "@jest/core" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/types" "30.2.0" + chalk "^4.1.2" + exit-x "^0.2.2" + import-local "^3.2.0" + jest-config "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" + yargs "^17.7.2" + +jest-config@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-30.2.0.tgz#29df8c50e2ad801cc59c406b50176c18c362a90b" + integrity sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA== + dependencies: + "@babel/core" "^7.27.4" + "@jest/get-type" "30.1.0" + "@jest/pattern" "30.0.1" + "@jest/test-sequencer" "30.2.0" + "@jest/types" "30.2.0" + babel-jest "30.2.0" + chalk "^4.1.2" + ci-info "^4.2.0" + deepmerge "^4.3.1" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-circus "30.2.0" + jest-docblock "30.2.0" + jest-environment-node "30.2.0" + jest-regex-util "30.0.1" + jest-resolve "30.2.0" + jest-runner "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" + micromatch "^4.0.8" + parse-json "^5.2.0" + pretty-format "30.2.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.2.0.tgz#e3ec3a6ea5c5747f605c9e874f83d756cba36825" + integrity sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A== + dependencies: + "@jest/diff-sequences" "30.0.1" + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + pretty-format "30.2.0" + +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-30.2.0.tgz#42cd98d69f887e531c7352309542b1ce4ee10256" + integrity sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA== + dependencies: + detect-newline "^3.1.0" + +jest-each@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-30.2.0.tgz#39e623ae71641c2ac3ee69b3ba3d258fce8e768d" + integrity sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ== + dependencies: + "@jest/get-type" "30.1.0" + "@jest/types" "30.2.0" + chalk "^4.1.2" + jest-util "30.2.0" + pretty-format "30.2.0" + +jest-environment-node@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-30.2.0.tgz#3def7980ebd2fd86e74efd4d2e681f55ab38da0f" + integrity sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA== + dependencies: + "@jest/environment" "30.2.0" + "@jest/fake-timers" "30.2.0" + "@jest/types" "30.2.0" + "@types/node" "*" + jest-mock "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-30.2.0.tgz#808e3889f288603ac70ff0ac047598345a66022e" + integrity sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw== + dependencies: + "@jest/types" "30.2.0" + "@types/node" "*" + anymatch "^3.1.3" + fb-watchman "^2.0.2" + graceful-fs "^4.2.11" + jest-regex-util "30.0.1" + jest-util "30.2.0" + jest-worker "30.2.0" + micromatch "^4.0.8" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.3" + +jest-leak-detector@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz#292fdca7b7c9cf594e1e570ace140b01d8beb736" + integrity sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ== + dependencies: + "@jest/get-type" "30.1.0" + pretty-format "30.2.0" + +jest-matcher-utils@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz#69a0d4c271066559ec8b0d8174829adc3f23a783" + integrity sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg== + dependencies: + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + jest-diff "30.2.0" + pretty-format "30.2.0" + +jest-message-util@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.2.0.tgz#fc97bf90d11f118b31e6131e2b67fc4f39f92152" + integrity sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@jest/types" "30.2.0" + "@types/stack-utils" "^2.0.3" + chalk "^4.1.2" + graceful-fs "^4.2.11" + micromatch "^4.0.8" + pretty-format "30.2.0" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-mock@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.2.0.tgz#69f991614eeb4060189459d3584f710845bff45e" + integrity sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw== + dependencies: + "@jest/types" "30.2.0" + "@types/node" "*" + jest-util "30.2.0" + +jest-pnp-resolver@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b" + integrity sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA== + +jest-resolve-dependencies@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz#3370e2c0b49cc560f6a7e8ec3a59dd99525e1a55" + integrity sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w== + dependencies: + jest-regex-util "30.0.1" + jest-snapshot "30.2.0" + +jest-resolve@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-30.2.0.tgz#2e2009cbd61e8f1f003355d5ec87225412cebcd7" + integrity sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A== + dependencies: + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" + jest-pnp-resolver "^1.2.3" + jest-util "30.2.0" + jest-validate "30.2.0" + slash "^3.0.0" + unrs-resolver "^1.7.11" + +jest-runner@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-30.2.0.tgz#c62b4c3130afa661789705e13a07bdbcec26a114" + integrity sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ== + dependencies: + "@jest/console" "30.2.0" + "@jest/environment" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" + "@types/node" "*" + chalk "^4.1.2" + emittery "^0.13.1" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-docblock "30.2.0" + jest-environment-node "30.2.0" + jest-haste-map "30.2.0" + jest-leak-detector "30.2.0" + jest-message-util "30.2.0" + jest-resolve "30.2.0" + jest-runtime "30.2.0" + jest-util "30.2.0" + jest-watcher "30.2.0" + jest-worker "30.2.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-30.2.0.tgz#395ea792cde048db1b0cd1a92dc9cb9f1921bf8a" + integrity sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg== + dependencies: + "@jest/environment" "30.2.0" + "@jest/fake-timers" "30.2.0" + "@jest/globals" "30.2.0" + "@jest/source-map" "30.0.1" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" + "@types/node" "*" + chalk "^4.1.2" + cjs-module-lexer "^2.1.0" + collect-v8-coverage "^1.0.2" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" + jest-message-util "30.2.0" + jest-mock "30.2.0" + jest-regex-util "30.0.1" + jest-resolve "30.2.0" + jest-snapshot "30.2.0" + jest-util "30.2.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-30.2.0.tgz#266fbbb4b95fc4665ce6f32f1f38eeb39f4e26d0" + integrity sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA== + dependencies: + "@babel/core" "^7.27.4" + "@babel/generator" "^7.27.5" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/types" "^7.27.3" + "@jest/expect-utils" "30.2.0" + "@jest/get-type" "30.1.0" + "@jest/snapshot-utils" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" + babel-preset-current-node-syntax "^1.2.0" + chalk "^4.1.2" + expect "30.2.0" + graceful-fs "^4.2.11" + jest-diff "30.2.0" + jest-matcher-utils "30.2.0" + jest-message-util "30.2.0" + jest-util "30.2.0" + pretty-format "30.2.0" + semver "^7.7.2" + synckit "^0.11.8" + +jest-util@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.2.0.tgz#5142adbcad6f4e53c2776c067a4db3c14f913705" + integrity sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA== + dependencies: + "@jest/types" "30.2.0" + "@types/node" "*" + chalk "^4.1.2" + ci-info "^4.2.0" + graceful-fs "^4.2.11" + picomatch "^4.0.2" + +jest-validate@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-30.2.0.tgz#273eaaed4c0963b934b5b31e96289edda6e0a2ef" + integrity sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw== + dependencies: + "@jest/get-type" "30.1.0" + "@jest/types" "30.2.0" + camelcase "^6.3.0" + chalk "^4.1.2" + leven "^3.1.0" + pretty-format "30.2.0" + +jest-watcher@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-30.2.0.tgz#f9c055de48e18c979e7756a3917e596e2d69b07b" + integrity sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg== + dependencies: + "@jest/test-result" "30.2.0" + "@jest/types" "30.2.0" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + emittery "^0.13.1" + jest-util "30.2.0" + string-length "^4.0.2" + +jest-worker@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.2.0.tgz#fd5c2a36ff6058ec8f74366ec89538cc99539d26" + integrity sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g== + dependencies: + "@types/node" "*" + "@ungap/structured-clone" "^1.3.0" + jest-util "30.2.0" + merge-stream "^2.0.0" + supports-color "^8.1.1" + +jest@^30.0.5: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-30.2.0.tgz#9f0a71e734af968f26952b5ae4b724af82681630" + integrity sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A== + dependencies: + "@jest/core" "30.2.0" + "@jest/types" "30.2.0" + import-local "^3.2.0" + jest-cli "30.2.0" + +jose@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.7.tgz#3aabbaec70bff313c108b9406498a163737b16ba" + integrity sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg== + dependencies: + "@panva/asn1.js" "^1.0.0" + +jose@^5.2.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/jose/-/jose-5.10.0.tgz#c37346a099d6467c401351a9a0c2161e0f52c4be" + integrity sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg== + +js-stringify@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" + integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdoc-type-pratt-parser@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" + integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== + +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" + integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonld-context-parser@^2.0.0, jsonld-context-parser@^2.1.2, jsonld-context-parser@^2.1.3, jsonld-context-parser@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz#fae15a56c5ceabd1c4520ab1a9cc12c9a0a8b67d" + integrity sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA== + dependencies: + "@types/http-link-header" "^1.0.1" + "@types/node" "^18.0.0" + cross-fetch "^3.0.6" + http-link-header "^1.0.2" + relative-to-absolute-iri "^1.0.5" + +jsonld-signatures@^11.3.0, jsonld-signatures@^11.3.2, jsonld-signatures@^11.5.0: + version "11.5.0" + resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz#020ad488bd1977c5169de3d2a4cc28a76dec2663" + integrity sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw== + dependencies: + "@digitalbazaar/security-context" "^1.0.0" + jsonld "^8.0.0" + rdf-canonize "^4.0.1" + serialize-error "^8.1.0" + +jsonld-signatures@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-5.2.0.tgz#2f6210c3aad0a50f925991ce3e91c78856c0752d" + integrity sha512-/dGgMElXc3oBS+/OUwMc3DTK4riHKLE9Lk7NF1Upz2ZlBTNfnOw5uLRkFQOJFBDqDEm5hK6hIfkoC/rCWFh9tQ== + dependencies: + base64url "^3.0.1" + crypto-ld "^3.7.0" + jsonld "^2.0.2" + node-forge "^0.10.0" + security-context "^4.0.0" + serialize-error "^5.0.0" + +jsonld-streaming-parser@^2.4.0, jsonld-streaming-parser@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz#d8faa1df6dc3b760fb9455602edc5f001d756ef0" + integrity sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A== + dependencies: + "@rdfjs/types" "*" + "@types/http-link-header" "^1.0.1" + canonicalize "^1.0.1" + http-link-header "^1.0.2" + jsonld-context-parser "^2.1.3" + jsonparse "^1.3.1" + rdf-data-factory "^1.1.0" + +jsonld-streaming-serializer@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.3.0.tgz#e42ec6ffefc5b80cc1bd17e8eee7943242f17a4d" + integrity sha512-QGflpxpwmr659ExvAQ5TFAY9BmJQiL/yF/MDRrP5oVWHcBBLhbPjUqDv//y2OvJxUY3UQYMXulTwzmYb1ttv2Q== + dependencies: + "@rdfjs/types" "*" + jsonld-context-parser "^2.0.0" + +jsonld@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-2.0.2.tgz#f5d0631de828ce6dee3a14f08cbdc6a53174cd15" + integrity sha512-/TQzRe75/3h2khu57IUojha5oat+M82bm8RYw0jLhlmmPrW/kTWAZ9nGzKPfZWnPYnVVJJMQVc/pU8HCmpv9xg== + dependencies: + canonicalize "^1.0.1" + lru-cache "^5.1.1" + rdf-canonize "^1.0.2" + request "^2.88.0" + semver "^6.3.0" + xmldom "0.1.19" + +jsonld@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-3.3.2.tgz#f8688b349385ff5c755e83c7f60a9cf834078fc0" + integrity sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw== + dependencies: + canonicalize "^1.0.1" + lru-cache "^5.1.1" + object.fromentries "^2.0.2" + rdf-canonize "^2.0.1" + request "^2.88.0" + semver "^6.3.0" + xmldom "0.1.19" + +jsonld@^8.0.0, jsonld@^8.1.0, jsonld@^8.3.3: + version "8.3.3" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-8.3.3.tgz#08cc927833c8684e42319d4697cc8199c0908ffc" + integrity sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg== + dependencies: + "@digitalbazaar/http-client" "^3.4.1" + canonicalize "^1.0.1" + lru-cache "^6.0.0" + rdf-canonize "^3.4.0" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonwebtoken@^9.0.2: + version "9.0.3" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" + integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== + dependencies: + jws "^4.0.1" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +juice@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/juice/-/juice-4.3.2.tgz#0a199e5f66f4f7f5cae4c079ebba81b0c2f4d1e0" + integrity sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g== + dependencies: + cheerio "^0.22.0" + commander "^2.15.1" + cross-spawn "^5.1.0" + deep-extend "^0.5.1" + mensch "^0.3.3" + slick "^1.12.2" + web-resource-inliner "^4.2.1" + +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== + +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== + +jwa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" + integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== + dependencies: + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" + integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== + dependencies: + jwa "^2.0.1" + safe-buffer "^5.0.1" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^4.1.4, kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +ky-universal@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.11.0.tgz#f5edf857865aaaea416a1968222148ad7d9e4017" + integrity sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw== + dependencies: + abort-controller "^3.0.0" + node-fetch "^3.2.10" + +ky@^0.33.3: + version "0.33.3" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.33.3.tgz#bf1ad322a3f2c3428c13cfa4b3af95e6c4a2f543" + integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== + +lerna@^8.0.1: + version "8.2.4" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.2.4.tgz#cb902f7772bf159b3612d7f63631e58302cb6fa5" + integrity sha512-0gaVWDIVT7fLfprfwpYcQajb7dBJv3EGavjG7zvJ+TmGx3/wovl5GklnSwM2/WeE0Z2wrIz7ndWhBcDUHVjOcQ== + dependencies: + "@lerna/create" "8.2.4" + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + envinfo "7.13.0" + execa "5.0.0" + fs-extra "^11.2.0" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "6.0.3" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "8.0.6" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + set-blocking "^2.0.0" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^10.0.6" + string-width "^4.2.3" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" + +leven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libnpmaccess@8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.6.tgz#73be4c236258babc0a0bca6d3b6a93a6adf937cf" + integrity sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw== + dependencies: + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + +libnpmpublish@9.0.9: + version "9.0.9" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.9.tgz#e737378c09f09738377d2a276734be35cffb85e2" + integrity sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg== + dependencies: + ci-info "^4.0.0" + normalize-package-data "^6.0.1" + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + proc-log "^4.2.0" + semver "^7.3.7" + sigstore "^2.2.0" + ssri "^10.0.6" + +lie@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== + dependencies: + immediate "~3.0.5" + +lines-and-columns@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lines-and-columns@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + +load-json-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +localforage@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" + integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== + dependencies: + lie "3.1.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== + +lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + +lodash.merge@^4.4.0, lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== + +lodash.unescape@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg== + +lodash@^3.2.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ== + +lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +long-timeout@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" + integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + +lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +luxon@^1.23.x: + version "1.28.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.1.tgz#528cdf3624a54506d710290a2341aa8e6e6c61b0" + integrity sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw== + +luxon@^3.2.1, luxon@~3.7.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" + integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== + +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1, make-error@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" + integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + proc-log "^4.2.0" + promise-retry "^2.0.1" + ssri "^10.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memory-streams@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/memory-streams/-/memory-streams-0.1.3.tgz#d9b0017b4b87f1d92f55f2745c9caacb1dc93ceb" + integrity sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA== + dependencies: + readable-stream "~1.0.2" + +mensch@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd" + integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g== + +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.1, methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +microdata-rdf-streaming-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.2.0.tgz#130967af0be59ce8ddf5fef4588a0ffa44a17d69" + integrity sha512-cMLNLEcS0mPaiA9iwq6BnsQK9sx2uBwjpRZIEvMRBNJpbvV58f8AFtPeYzNFh3OPyX9B49NYJ77bB0jNAUCurw== + dependencies: + "@rdfjs/types" "*" + htmlparser2 "^6.0.0" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.2" + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimer@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mimer/-/mimer-1.1.1.tgz#f880cef5009e58d4755a98bfd7b3f6de1ce168f4" + integrity sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw== + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" + integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +moleculer-bull@^0.2.5: + version "0.2.8" + resolved "https://registry.yarnpkg.com/moleculer-bull/-/moleculer-bull-0.2.8.tgz#304bd9f0ac8143c1202e5d0a5d328ec11434c05c" + integrity sha512-ayVIqVmc6HVD6SL0RLsmMYqDnnPqwrcEWAPpY31kbUIfU3CBH2grGaqA5adyZBNCo4gQz09+4O9m+Hqxls06Ag== + dependencies: + bull "^3.15.0" + lodash "^4.17.15" + +moleculer-db@^0.8.15, moleculer-db@^0.8.16: + version "0.8.29" + resolved "https://registry.yarnpkg.com/moleculer-db/-/moleculer-db-0.8.29.tgz#36836cafa83f7f12321958a5fc0062fe5a1c0553" + integrity sha512-0e94ia5gkI9Ls2MJ+kAuZsafC0dCFqbaN7FIuoftTizaG+Vixafpj8ezXhGrIPQ1PmOKASSdn0IhkSjzyuc9Gg== + dependencies: + "@seald-io/nedb" "^3.0.0" + lodash "^4.17.21" + +moleculer-mail@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/moleculer-mail/-/moleculer-mail-1.2.6.tgz#e92029b54747eaba620a7636227bf58e8e8a2146" + integrity sha512-i1r1lraG6JTHOeHgUxrP5nQEfvxhldZkYjlcNTgu6blvdv0aWe2GqK6/p+D/dPum4jY6QEKaNB6twI8N+nTAmA== + dependencies: + bluebird "^3.7.2" + email-templates "^2.7.1" + lodash "^4.17.21" + nodemailer "^4.6.7" + nodemailer-html-to-text "^2.1.0" + +moleculer-schedule@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/moleculer-schedule/-/moleculer-schedule-0.2.3.tgz#2aec032431fb5fafcd03c04c25f651bad4b02fe9" + integrity sha512-cFHpnHe56y6grSQov9KR1Y8OGmIFImOPelsR2poMdCulgRC49kThKDxBx11ZwASCNx/UtadmaLJ+sX8xRnuGFQ== + dependencies: + lodash "^4.17.21" + node-schedule "^2.0.0" + +moleculer-web@^0.10.0-beta1, moleculer-web@^0.10.7: + version "0.10.8" + resolved "https://registry.yarnpkg.com/moleculer-web/-/moleculer-web-0.10.8.tgz#1b13528a592d53e8f104e43dcff3efbc4bcddd92" + integrity sha512-kQtyN8AccdBqSZUh+PRLYmLPy7RBd48j/raA5682wNDo1fPEKdCHa8d7tUjtmI53gELkQZKCv3GckyMqdxZYXQ== + dependencies: + "@fastify/busboy" "^1.0.0" + body-parser "^1.19.0" + es6-error "^4.1.1" + etag "^1.8.1" + fresh "^0.5.2" + isstream "^0.1.2" + kleur "^4.1.4" + lodash "^4.17.21" + path-to-regexp "^3.1.0" + qs "^6.11.0" + serve-static "^1.14.1" + +moleculer@^0.14.17, moleculer@^0.14.18, moleculer@^0.14.29, moleculer@^0.14.35: + version "0.14.35" + resolved "https://registry.yarnpkg.com/moleculer/-/moleculer-0.14.35.tgz#529fe5fad8b85645d54a99a010a924b136ce6a3f" + integrity sha512-KB4qs0zNTjE9z7Bl27FFLPaWkAsUFJajF2njozJeor1phFCAYP5S1JsWOSrnUBTtsH7SX4gTw8tGRdcgh1eyVQ== + dependencies: + args "^5.0.3" + eventemitter2 "^6.4.9" + fastest-validator "^1.19.0" + glob "^7.2.0" + ipaddr.js "^2.2.0" + kleur "^4.1.5" + lodash "^4.17.21" + lru-cache "^6.0.0" + node-fetch "^2.6.7" + recursive-watch "^1.1.4" + +moment-timezone@^0.5.31: + version "0.5.48" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" + integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw== + dependencies: + moment "^2.29.4" + +moment@2.30.1, moment@^2.29.4: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mri@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +n3@^1.26.0, n3@^1.6.3, n3@^1.8.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/n3/-/n3-1.26.0.tgz#3d69de04bee680b9ebec9dbc1033dc1e6934d351" + integrity sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w== + dependencies: + buffer "^6.0.3" + readable-stream "^4.0.0" + +nan@^2.19.0, nan@^2.23.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.24.0.tgz#a8919b36e692aa5b260831910e4f81419fc0a283" + integrity sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +napi-build-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== + +napi-postinstall@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" + integrity sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +"nextgraph@file:../../../nextgraph-rs/ng-sdk-js/pkg-node": + version "0.1.1-alpha.7" + +node-abi@^3.3.0: + version "3.85.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.85.0.tgz#b115d575e52b2495ef08372b058e13d202875a7d" + integrity sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg== + dependencies: + semver "^7.3.5" + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +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.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.0, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^3.2.10: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-forge@^0.10.0, node-forge@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp-build@^4.3.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +node-gyp@^10.0.0: + version "10.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a" + integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + tar "^6.2.1" + which "^4.0.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + +node-schedule@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3" + integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ== + dependencies: + cron-parser "^4.2.0" + long-timeout "0.1.1" + sorted-array-functions "^1.3.0" + +nodemailer-html-to-text@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz#996decccc9aff6371ec36e3633b18ed75e0fc8f2" + integrity sha512-oaNLWoMyeC5Y8DbtYSwBRHTJVdkojKfiP6J4hh8+10Oih0QoAUqEsnM0WbFA13yhbzjyp1yXBNiDl0QV7BpoRA== + dependencies: + html-to-text "^2.1.0" + +nodemailer@^4.6.7: + version "4.7.0" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.7.0.tgz#4420e06abfffd77d0618f184ea49047db84f4ad8" + integrity sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@^7.0.0, nopt@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== + dependencies: + abbrev "^2.0.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== + dependencies: + hosted-git-info "^7.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" + integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.2.tgz#1ef8006c4a9e9204ddde403035f7ff7d718251ca" + integrity sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: + version "11.0.3" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" + integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@8.0.2, npm-packlist@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" + integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== + dependencies: + ignore-walk "^6.0.4" + +npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" + integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" + semver "^7.3.5" + +npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1" + integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA== + dependencies: + "@npmcli/redact" "^2.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^4.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +nth-check@~1.0.0, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nx@17.2.5, nx@v17.2.5: + version "17.2.5" + resolved "https://registry.yarnpkg.com/nx/-/nx-17.2.5.tgz#fc34bda5fec6b5b0eb65d17c85cb7128e9b028f8" + integrity sha512-bMjl6V+h2Pb7k/iieebQskFqiB5Z7VQgdFJNI6ScMfoMhClWVuF+/fdhxrlN4IaiWHHnZ/KDr7h4kc7puFLr9w== + dependencies: + "@nrwl/tao" v17.2.5 + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.6" + axios "^1.5.1" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + jest-diff "^29.4.1" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" v17.2.5 + "@nx/nx-darwin-x64" v17.2.5 + "@nx/nx-freebsd-x64" v17.2.5 + "@nx/nx-linux-arm-gnueabihf" v17.2.5 + "@nx/nx-linux-arm64-gnu" v17.2.5 + "@nx/nx-linux-arm64-musl" v17.2.5 + "@nx/nx-linux-x64-gnu" v17.2.5 + "@nx/nx-linux-x64-musl" v17.2.5 + "@nx/nx-win32-arm64-msvc" v17.2.5 + "@nx/nx-win32-x64-msvc" v17.2.5 + +"nx@>=17.1.2 < 21": + version "20.8.3" + resolved "https://registry.yarnpkg.com/nx/-/nx-20.8.3.tgz#44faa8e4af5b07d27e0adeaaa89c36658024c05b" + integrity sha512-8w815WSMWar3A/LFzwtmEY+E8cVW62lMiFuPDXje+C8O8hFndfvscP56QHNMn2Zdhz3q0+BZUe+se4Em1BKYdA== + dependencies: + "@napi-rs/wasm-runtime" "0.2.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.2" + "@zkochan/js-yaml" "0.0.7" + axios "^1.8.3" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + front-matter "^4.0.2" + ignore "^5.0.4" + jest-diff "^29.4.1" + jsonc-parser "3.2.0" + lines-and-columns "2.0.3" + minimatch "9.0.3" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + ora "5.3.0" + resolve.exports "2.0.3" + semver "^7.5.3" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yaml "^2.6.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "20.8.3" + "@nx/nx-darwin-x64" "20.8.3" + "@nx/nx-freebsd-x64" "20.8.3" + "@nx/nx-linux-arm-gnueabihf" "20.8.3" + "@nx/nx-linux-arm64-gnu" "20.8.3" + "@nx/nx-linux-arm64-musl" "20.8.3" + "@nx/nx-linux-x64-gnu" "20.8.3" + "@nx/nx-linux-x64-musl" "20.8.3" + "@nx/nx-win32-arm64-msvc" "20.8.3" + "@nx/nx-win32-x64-msvc" "20.8.3" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== + +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + +object.fromentries@^2.0.2, object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.getownpropertydescriptors@^2.1.8: + version "2.1.9" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz#bf9e7520f14d50de88dee2b9c9eca841166322dc" + integrity sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g== + dependencies: + array.prototype.reduce "^1.0.8" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + gopd "^1.2.0" + safe-array-concat "^1.1.3" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +oidc-token-hash@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.2.0.tgz#be8a8885c7e2478d21a674e15afa31f1bcc4a61f" + integrity sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw== + +on-finished@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +openid-client@^4.7.4: + version "4.9.1" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-4.9.1.tgz#4f00a9d1566c0fa08f0dd5986cf0e6b1e5d14186" + integrity sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w== + dependencies: + aggregate-error "^3.1.0" + got "^11.8.0" + jose "^2.0.5" + lru-cache "^6.0.0" + make-error "^1.3.6" + object-hash "^2.0.1" + oidc-token-hash "^5.0.1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g== + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" + integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@4.0.0, p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-pipe@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pacote@^18.0.0, pacote@^18.0.6: + version "18.0.6" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" + integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A== + dependencies: + "@npmcli/git" "^5.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/package-json" "^5.1.0" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^8.0.0" + cacache "^18.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^17.0.0" + proc-log "^4.0.0" + promise-retry "^2.0.1" + sigstore "^2.2.0" + ssri "^10.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-conflict-json@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== + dependencies: + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + +parse-imports@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/parse-imports/-/parse-imports-2.2.1.tgz#0a6e8b5316beb5c9905f50eb2bbb8c64a4805642" + integrity sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ== + dependencies: + es-module-lexer "^1.5.3" + slashes "^3.0.12" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-link-header@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" + integrity sha512-Z0gpfHmwCIKDr5rRzjypL+p93aHVWO7e+0rFcUl9E3sC67njjs+xHFenuboSXZGlvYtmQqRzRaE3iFpTUnLmFQ== + dependencies: + xtend "~4.0.1" + +parse-path@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.1.0.tgz#41fb513cb122831807a4c7b29c8727947a09d8c6" + integrity sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw== + dependencies: + protocols "^2.0.0" + +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +passport-cas2@0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/passport-cas2/-/passport-cas2-0.0.12.tgz#aca3364a02d158a01ca7fadd71c6c26fd8ee9370" + integrity sha512-ck/6x2lb6eYhlC/9lmw7ZTgqzSiJmYB0px7H2B00kpRZlBQuds9yPzFMi7kBWtgFpTDf0o+rwQMUYga8yO/jIg== + dependencies: + cas "https://github.com/joshchan/node-cas" + passport-strategy "^1.0.0" + +passport-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== + dependencies: + passport-strategy "1.x.x" + +passport-strategy@1.x.x, passport-strategy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== + +passport@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" + integrity sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg== + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== + +path-to-regexp@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" + integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +pify@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +postcss-selector-parser@^6.0.10: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss@^8.3.11: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prebuild-install@^7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^2.0.0" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz#6a31f88a4bad6c7adda253de12ba4edaea80ebcd" + integrity sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.1.1: + version "3.7.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.7.4.tgz#d2f8335d4b1cec47e1c8098645411b0c9dff9c0f" + integrity sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== + +pretty-format@30.2.0, pretty-format@^30.0.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.2.0.tgz#2d44fe6134529aed18506f6d11509d8a62775ebe" + integrity sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA== + dependencies: + "@jest/schemas" "30.0.5" + ansi-styles "^5.2.0" + react-is "^18.3.1" + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" + integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +proggy@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" + integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" + integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-limit@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26" + integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw== + +promise-polyfill@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-1.1.6.tgz#cd04eff46f5c95c3a7d045591d79b5e3e01f12d7" + integrity sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promise.prototype.finally@^3.1.2: + version "3.1.8" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz#b97bc1bbca74dc21b6e978c85a70752a7a0b7c3a" + integrity sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + set-function-name "^2.0.1" + +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +promzard@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.2.tgz#2226e7c6508b1da3471008ae17066a7c3251e660" + integrity sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ== + dependencies: + read "^3.0.1" + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.2.tgz#822e8fcdcb3df5356538b3e91bfd890b067fd0a4" + integrity sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +pug-attrs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" + integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== + dependencies: + constantinople "^4.0.1" + js-stringify "^1.0.2" + pug-runtime "^3.0.0" + +pug-code-gen@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.3.tgz#58133178cb423fe1716aece1c1da392a75251520" + integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw== + dependencies: + constantinople "^4.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.2" + pug-attrs "^3.0.0" + pug-error "^2.1.0" + pug-runtime "^3.0.1" + void-elements "^3.1.0" + with "^7.0.0" + +pug-error@^2.0.0, pug-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.1.0.tgz#17ea37b587b6443d4b8f148374ec27b54b406e55" + integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg== + +pug-filters@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" + integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== + dependencies: + constantinople "^4.0.1" + jstransformer "1.0.0" + pug-error "^2.0.0" + pug-walk "^2.0.0" + resolve "^1.15.1" + +pug-lexer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" + integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== + dependencies: + character-parser "^2.2.0" + is-expression "^4.0.0" + pug-error "^2.0.0" + +pug-linker@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" + integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== + dependencies: + pug-error "^2.0.0" + pug-walk "^2.0.0" + +pug-load@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" + integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== + dependencies: + object-assign "^4.1.1" + pug-walk "^2.0.0" + +pug-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" + integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== + dependencies: + pug-error "^2.0.0" + token-stream "1.0.0" + +pug-runtime@^3.0.0, pug-runtime@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" + integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== + +pug-strip-comments@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" + integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== + dependencies: + pug-error "^2.0.0" + +pug-walk@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" + integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== + +pug@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.3.tgz#e18324a314cd022883b1e0372b8af3a1a99f7597" + integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g== + dependencies: + pug-code-gen "^3.0.3" + pug-filters "^4.0.0" + pug-lexer "^5.0.1" + pug-linker "^4.0.0" + pug-load "^3.0.0" + pug-parser "^6.0.0" + pug-runtime "^3.0.1" + pug-strip-comments "^2.0.0" + +pump@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-7.0.1.tgz#6f53a5a9e3e4a47445822af96821ca509ed37566" + integrity sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== + +qs@^6.11.0, qs@^6.5.1, qs@~6.14.0: + version "6.14.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" + integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== + dependencies: + side-channel "^1.1.0" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +rdf-canonize@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-1.2.0.tgz#9872b2cc6ed92a9969e834f9f042addaf0d4f7f9" + integrity sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw== + dependencies: + node-forge "^0.10.0" + semver "^6.3.0" + +rdf-canonize@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-2.0.1.tgz#12c9b8b41570cd669d9b152c9e679063478ba194" + integrity sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA== + dependencies: + semver "^6.3.0" + setimmediate "^1.0.5" + +rdf-canonize@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-3.4.0.tgz#87f88342b173cc371d812a07de350f0c1aa9f058" + integrity sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA== + dependencies: + setimmediate "^1.0.5" + +rdf-canonize@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-4.0.1.tgz#2b5a37f147d35b484b40ff2140245fc5985a9595" + integrity sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA== + dependencies: + setimmediate "^1.0.5" + +rdf-data-factory@^1.1.0, rdf-data-factory@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz#11b39e0c80e51bca83828b2ddaa686f733be966f" + integrity sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ== + dependencies: + "@rdfjs/types" "^1.0.0" + +rdf-data-model@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rdf-data-model/-/rdf-data-model-1.0.0.tgz#e768e1c2cd904c186471b20d1a4fce77c7712a4b" + integrity sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g== + +rdf-isomorphic@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz#cd6d433cd85bf79d903d5f0fdeea42a40eb27265" + integrity sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ== + dependencies: + "@rdfjs/types" "*" + hash.js "^1.1.7" + rdf-string "^1.6.0" + rdf-terms "^1.7.0" + +rdf-parse@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/rdf-parse/-/rdf-parse-1.9.1.tgz#6ec1d70a20d7e65b2c5a5acaee811f50b03940ac" + integrity sha512-W6ouYE+ufmCNFmXD1iGs5gUZH75jZekh/I5qF8a4Sl37BUc9mY0Jz5A0CV1tiKKhx+I+HYfxyX9VjOljD8rzgQ== + dependencies: + "@comunica/actor-http-native" "~1.22.0" + "@comunica/actor-rdf-parse-html" "~1.22.0" + "@comunica/actor-rdf-parse-html-microdata" "~1.22.0" + "@comunica/actor-rdf-parse-html-rdfa" "~1.22.0" + "@comunica/actor-rdf-parse-html-script" "~1.22.0" + "@comunica/actor-rdf-parse-jsonld" "^1.22.0" + "@comunica/actor-rdf-parse-n3" "~1.22.0" + "@comunica/actor-rdf-parse-rdfxml" "~1.22.0" + "@comunica/actor-rdf-parse-xml-rdfa" "~1.22.0" + "@comunica/bus-http" "~1.22.0" + "@comunica/bus-init" "~1.22.0" + "@comunica/bus-rdf-parse" "~1.22.0" + "@comunica/bus-rdf-parse-html" "~1.22.0" + "@comunica/core" "~1.22.0" + "@comunica/mediator-combine-union" "~1.22.0" + "@comunica/mediator-number" "~1.22.0" + "@comunica/mediator-race" "~1.22.0" + "@rdfjs/types" "*" + stream-to-string "^1.2.0" + +rdf-string@^1.6.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/rdf-string/-/rdf-string-1.6.3.tgz#5c3173fad13e6328698277fb8ff151e3423282ab" + integrity sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g== + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + +rdf-terms@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/rdf-terms/-/rdf-terms-1.11.0.tgz#0c2e3a2b43f1042959c9263af27dab08dc4b084d" + integrity sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ== + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + rdf-string "^1.6.0" + +rdfa-streaming-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz#34072e760aa07e6cddf210923888f9834354fb92" + integrity sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ== + dependencies: + "@rdfjs/types" "*" + htmlparser2 "^6.0.0" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.2" + +rdfxml-streaming-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz#485af3a01abc2dc49149b8758da9a12351d34348" + integrity sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ== + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.0" + sax "^1.2.4" + +react-is@^18.0.0, react-is@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +read-cmd-shim@4.0.0, read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" + integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== + dependencies: + mute-stream "^1.0.0" + +readable-stream-node-to-web@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz#8b7614faa1465ebfa0da9b9ca6303fa27073b7cf" + integrity sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ== + +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + integrity sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.3.5, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.0.0, readable-stream@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-stream@~1.0.2: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-web-to-node-stream@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz#392ba37707af5bf62d725c36c1b5d6ef4119eefc" + integrity sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw== + dependencies: + readable-stream "^4.7.0" + +recursive-watch@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/recursive-watch/-/recursive-watch-1.1.4.tgz#7a340f860dd715836a592f008cceba5a1dd0b734" + integrity sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ== + dependencies: + ttl "^1.3.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" + integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + dependencies: + jsesc "~3.1.0" + +relative-to-absolute-iri@^1.0.0, relative-to-absolute-iri@^1.0.2, relative-to-absolute-iri@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz#f2fd6ee60c78d9ffc4926bd20bdf84479b91d765" + integrity sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q== + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve.exports@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.15.1, resolve@^1.22.10, resolve@^1.22.4: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" + +rsync@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/rsync/-/rsync-0.6.1.tgz#3681a0098bd8750448f8bf9da1fee09f7763742b" + integrity sha512-39HcwWuM67CQ9tHloazShXWUOWa2m3SGqX6XQhQMSj0VCQMkSI9PodoxM7/+hKf2p4v2umbhfoarYqd1gwII/w== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-html@^2.6.1: + version "2.17.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.17.0.tgz#a8f66420a6be981d8fe412e3397cc753782598e4" + integrity sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA== + dependencies: + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + htmlparser2 "^8.0.0" + is-plain-object "^5.0.0" + parse-srcset "^1.0.2" + postcss "^8.3.11" + +sax@^1.2.4: + version "1.4.3" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.3.tgz#fcebae3b756cdc8428321805f4b70f16ec0ab5db" + integrity sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ== + +security-context@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/security-context/-/security-context-4.0.0.tgz#e73f5d22bee9c7699a02eaaced359d001dc948e9" + integrity sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA== + +"semver@2 || 3 || 4 || 5", semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +send@~0.19.1: + version "0.19.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" + integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "~0.5.2" + http-errors "~2.0.1" + mime "1.6.0" + ms "2.1.3" + on-finished "~2.4.1" + range-parser "~1.2.1" + statuses "~2.0.2" + +serialize-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" + integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA== + dependencies: + type-fest "^0.8.0" + +serialize-error@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" + integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== + dependencies: + type-fest "^0.20.2" + +serve-static@^1.14.1: + version "1.16.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" + integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "~0.19.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +sharp@^0.31.2: + version "0.31.3" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" + integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^5.0.0" + prebuild-install "^7.1.1" + semver "^7.3.8" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" + integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + "@sigstore/sign" "^2.3.2" + "@sigstore/tuf" "^2.3.4" + "@sigstore/verify" "^1.2.1" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.4.tgz#a8d11a45a11600d6a1ecdff6363329e3648c3667" + integrity sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw== + dependencies: + is-arrayish "^0.3.1" + +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slashes@^3.0.12: + version "3.0.12" + resolved "https://registry.yarnpkg.com/slashes/-/slashes-3.0.12.tgz#3d664c877ad542dc1509eaf2c50f38d483a6435a" + integrity sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA== + +slick@^1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" + integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== + dependencies: + ip-address "^10.0.1" + smart-buffer "^4.2.0" + +sodium-native@^3.2.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-3.4.1.tgz#44616c07ccecea15195f553af88b3e574b659741" + integrity sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ== + dependencies: + node-gyp-build "^4.3.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sorted-array-functions@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" + integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sparqlalgebrajs@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sparqlalgebrajs/-/sparqlalgebrajs-3.0.3.tgz#a0b2b2ea2bacf97a74b4e3f3fc90be72b96d94a1" + integrity sha512-XFNhsO55bprayrM35h/jY0kzzuGc3oZ1On3kc+s7Un0BFQBXa046aLcMZFp4MYSvn7GtMe9eZ08ONFnBH5kEsQ== + dependencies: + "@rdfjs/types" "*" + "@types/sparqljs" "^3.1.2" + fast-deep-equal "^3.1.3" + minimist "^1.2.5" + rdf-data-factory "^1.1.0" + rdf-isomorphic "^1.3.0" + rdf-string "^1.6.0" + sparqljs "^3.4.2" + +sparqljs@^3.4.2, sparqljs@^3.5.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/sparqljs/-/sparqljs-3.7.3.tgz#075821d51ef4954284e36569503fe5558cfb71b0" + integrity sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg== + dependencies: + rdf-data-factory "^1.1.2" + +sparqljson-parse@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz#8844cae3b030864e459e37e6229bf394fc2dee14" + integrity sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw== + dependencies: + "@rdfjs/types" "*" + "@types/node" "^13.1.0" + JSONStream "^1.3.3" + rdf-data-factory "^1.1.0" + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== + +speakingurl@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" + integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssh2-sftp-client@^7.2.1: + version "7.2.3" + resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-7.2.3.tgz#b6533cb1202bb547dc3cfb53afb61ae60bde976a" + integrity sha512-Bmq4Uewu3e0XOwu5bnPbiS5KRQYv+dff5H6+85V4GZrPrt0Fkt1nUH+uXanyAkoNxUpzjnAPEEoLdOaBO9c3xw== + dependencies: + concat-stream "^2.0.0" + promise-retry "^2.0.1" + ssh2 "^1.8.0" + +ssh2@^1.8.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.17.0.tgz#dc686e8e3abdbd4ad95d46fa139615903c12258c" + integrity sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ== + dependencies: + asn1 "^0.2.6" + bcrypt-pbkdf "^1.0.2" + optionalDependencies: + cpu-features "~0.0.10" + nan "^2.23.0" + +sshpk@^1.18.0, sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^10.0.0, ssri@^10.0.6: + version "10.0.6" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" + integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== + dependencies: + minipass "^7.0.3" + +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== + +stack-utils@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + +statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + +stream-to-string@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.1.tgz#15cb325d88b33cc62accb032c7093f85eb785db2" + integrity sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA== + dependencies: + promise-polyfill "^1.1.6" + +streamify-string@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/streamify-string/-/streamify-string-1.0.1.tgz#9e220de33e1c475dd30e0206f5b1815cc6c9525b" + integrity sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw== + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== + +string-length@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-template@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96" + integrity sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg== + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supertest@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-4.0.2.tgz#c2234dbdd6dc79b6f15b99c8d6577b90e4ce3f36" + integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== + dependencies: + methods "^1.1.2" + superagent "^3.8.3" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.11.7, synckit@^0.11.8: + version "0.11.11" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" + integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== + dependencies: + "@pkgr/core" "^0.2.9" + +synckit@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.3.tgz#1cfd60d9e61f931e07fb7f56f474b5eb31b826a7" + integrity sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" + integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4, tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@6.2.1, tar@^6.1.11, tar@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-decoding@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" + integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, through@2.3.8, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tiny-set-immediate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tiny-set-immediate/-/tiny-set-immediate-1.0.2.tgz#4abcc1cd597e9cdcd6515c3c0a18c8ef4d98f292" + integrity sha512-EVbaM4zXFWS4CIqVoPzY7XIioQ5LU1p49AHizwPO1KyFyp/gxy5SA8mDmfDVl/2WLQiHgUL+esO6Ig+KhpUxUw== + +tinyglobby@0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + +tinyglobby@^0.2.13: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +tmp@~0.2.1: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +token-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" + integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +ttl@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ttl/-/ttl-1.3.1.tgz#d8fa510bedb6a956d85b60ec56a57339ae0d5b2c" + integrity sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA== + +tuf-js@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" + integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== + dependencies: + "@tufjs/models" "2.0.1" + debug "^4.3.4" + make-fetch-happen "^13.0.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.0, type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +"typescript@>=3 < 6", typescript@^5.9.2: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +uid-safe@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== + dependencies: + random-bytes "~1.0.0" + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +underscore.string@^3.2.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" + integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== + dependencies: + sprintf-js "^1.1.1" + util-deprecate "^1.0.2" + +underscore@^1.8.3: + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + +undici@^5.21.2: + version "5.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" + integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== + dependencies: + "@fastify/busboy" "^2.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz#301d4f8a43d2b75c97adfad87c9dd5350c9475d1" + integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ== + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unrs-resolver@^1.6.2, unrs-resolver@^1.7.11: + version "1.11.1" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz#be9cd8686c99ef53ecb96df2a473c64d304048a9" + integrity sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg== + dependencies: + napi-postinstall "^0.3.0" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.11.1" + "@unrs/resolver-binding-android-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-x64" "1.11.1" + "@unrs/resolver-binding-freebsd-x64" "1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-arm64-musl" "1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl" "1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-musl" "1.11.1" + "@unrs/resolver-binding-wasm32-wasi" "1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc" "1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" + "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" + +upath@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.3.tgz#3d77cf56628b4aad743e5acde8e5c44cea7dbf1c" + integrity sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + for-each "^0.3.3" + get-intrinsic "^1.2.6" + has-proto "^1.2.0" + has-symbols "^1.1.0" + object.getownpropertydescriptors "^2.1.8" + safe-array-concat "^1.1.3" + +util@^0.12.4: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +uuid@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +valid-data-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-2.0.0.tgz#2220fa9f8d4e761ebd3f3bb02770f1212b810537" + integrity sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA== + +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@5.0.1, validate-npm-package-name@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== + +vc-js@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/vc-js/-/vc-js-0.6.4.tgz#49f408c590260d28c25a3ca4e30ece0de61c3ae1" + integrity sha512-ogwYys94k8mFyFZEn1Ru3nIA5Z/9C4iCU4grNWUYOYVWldcsn6UDp6erYFbaSkilzv7RK3cQu5N8prkxfHpZwA== + dependencies: + commander "^2.20.3" + credentials-context "^1.0.0" + debug "^4.1.1" + fs-extra "^8.1.0" + get-stdin "^7.0.0" + jsonld "^2.0.2" + jsonld-signatures "^5.0.0" + supports-color "^7.1.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +void-elements@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +wait-for-expect@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" + integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== + +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-resource-inliner@^4.2.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz#07e1b4bcbcbee1021251b018e902bac5713f1be0" + integrity sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA== + dependencies: + async "^3.1.0" + chalk "^2.4.2" + datauri "^2.0.0" + htmlparser2 "^4.0.0" + lodash.unescape "^4.0.1" + request "^2.88.0" + safer-buffer "^2.1.2" + valid-data-url "^2.0.0" + xtend "^4.0.2" + +web-streams-node@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/web-streams-node/-/web-streams-node-0.4.0.tgz#641e42d7a7c4df95785a774e2484ba93d36fd672" + integrity sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w== + dependencies: + is-stream "^1.1.0" + readable-stream-node-to-web "^1.0.1" + web-streams-ponyfill "^1.4.1" + +web-streams-polyfill@^3.0.3: + 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== + +web-streams-ponyfill@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz#0ae863cc5f7493903679f16b08cbf14d432b62f4" + integrity sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +wide-align@1.1.5, wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +with@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" + integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== + dependencies: + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + assert-never "^1.2.1" + babel-walk "3.0.0-canary-5" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@5.0.1, write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +xmldom@0.1.19: + version "0.1.19" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" + integrity sha512-pDyxjQSFQgNHkU+yjvoF+GXVGJU7e9EnOg/KcGMDihBIKjTsOeDYaECwC/O9bsUWKY+Sd9izfE43JXC46EOHKA== + +xtend@^4.0.2, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.6.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== + +yargs-parser@21.1.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@17.7.2, yargs@^17.6.2, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 60204477a6b10e998edec841d90c8ab7b46a0e04 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 9 Jan 2026 12:22:19 +0100 Subject: [PATCH 146/165] Tests passing except for NextGraph not accepting HTTP URIs as graph name --- .../packages/triplestore/adapters/base.ts | 4 +- .../packages/triplestore/adapters/fuseki.ts | 31 ++++++--- .../triplestore/adapters/nextgraph.ts | 30 +++++---- .../triplestore/subservices/named-graph.ts | 33 +++------- .../tests/triplestore/initialize.ts | 5 +- .../tests/triplestore/triplestore.test.ts | 63 ++++++++++++------- 6 files changed, 95 insertions(+), 71 deletions(-) diff --git a/src/middleware/packages/triplestore/adapters/base.ts b/src/middleware/packages/triplestore/adapters/base.ts index 8a3c3794c..5a790a2c5 100644 --- a/src/middleware/packages/triplestore/adapters/base.ts +++ b/src/middleware/packages/triplestore/adapters/base.ts @@ -12,7 +12,7 @@ export interface AdapterInterface { listDatasets(): Promise; deleteDataset(dataset: string): Promise; backupDataset(dataset: string): Promise; - createNamedGraph(dataset: string, graphUri?: string): Promise; + createNamedGraph(dataset: string, baseUrl: string, slug?: string): Promise; namedGraphExists(dataset: string, graphUri: string): Promise; clearNamedGraph(dataset: string, graphUri: string): Promise; deleteNamedGraph(dataset: string, graphUri: string): Promise; @@ -56,7 +56,7 @@ export abstract class BaseAdapter implements AdapterInterface { abstract backupDataset(dataset: string): Promise; - abstract createNamedGraph(dataset: string, graphUri?: string): Promise; + abstract createNamedGraph(dataset: string, baseUrl: string, slug?: string): Promise; abstract namedGraphExists(dataset: string, graphUri: string): Promise; diff --git a/src/middleware/packages/triplestore/adapters/fuseki.ts b/src/middleware/packages/triplestore/adapters/fuseki.ts index 414610b30..dbd71d9ac 100644 --- a/src/middleware/packages/triplestore/adapters/fuseki.ts +++ b/src/middleware/packages/triplestore/adapters/fuseki.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; import urlJoin from 'url-join'; -// @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; +import createSlug from 'speakingurl'; import { SparqlJsonParser } from 'sparqljson-parse'; import { throw403, throw500, throw404 } from '@semapps/middlewares'; import { Errors } from 'moleculer'; @@ -175,15 +175,32 @@ export default class FusekiAdapter extends BaseAdapter { // No fuseki related operation here as empty named graphs are not maintained by fuseki // Inserting data into a non-existent named graph will create it // Simply return the graph URI - async createNamedGraph(dataset: string, graphUri?: string) { - // TODO : use the base URI of the app for the graph URI - return graphUri || `http://semapps.org/graph/${uuidv4()}`; + async createNamedGraph(dataset: string, baseUrl: string, slug?: string) { + let uri: string; + + // Ensure the slug does not contain special characters + if (slug) slug = createSlug(slug, { lang: 'en', custom: { '.': '.', '/': '/' } }); + + // Find an URI that does not already exists + let counter = 0; + do { + if (slug) { + if (counter > 0) { + counter += 1; + uri = urlJoin(baseUrl, slug + counter); + } else { + uri = urlJoin(baseUrl, slug); + } + } else { + uri = urlJoin(baseUrl, uuidv4()); + } + } while (await this.namedGraphExists(dataset, uri)); + + return uri; } - // Always consider a named graph exists as fuseki does not maintain empty named graphs - // And inserting data into a non-existent named graph will create it async namedGraphExists(dataset: string, graphUri: string) { - return true; + return await this.query(dataset, `ASK { GRAPH <${graphUri}> {} }`); } async clearNamedGraph(dataset: string, graphUri: string) { diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index d0383ffc4..e8d1e61a0 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -1,4 +1,5 @@ import ng from 'nextgraph'; +import urlJoin from 'url-join'; import { SparqlJsonParser } from 'sparqljson-parse'; import { BaseAdapter } from './base.ts'; @@ -102,7 +103,7 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async dropAll(dataset: string): Promise { + async dropAll(dataset: string) { let session: any; try { session = await this.openSession(dataset); @@ -143,7 +144,7 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async datasetExists(dataset: string): Promise { + async datasetExists(dataset: string) { try { const response = await ng.sparql_query( this.adminSessionid, @@ -164,7 +165,7 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async listDatasets(): Promise { + async listDatasets() { try { const response = await ng.sparql_query( this.adminSessionid, @@ -184,7 +185,7 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async deleteDataset(dataset: string): Promise { + async deleteDataset(dataset: string) { try { // First, check if the mapping exists const checkResponse = await ng.sparql_query( @@ -234,19 +235,24 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async backupDataset(dataset: string): Promise { + async backupDataset(dataset: string) { throw new Error('Backup not implemented for NextGraph'); } - async createNamedGraph(dataset: string, graphUri?: string): Promise { - if (graphUri) { - throw new Error('Explicit graph URI is not supported for NextGraph'); - } + async createNamedGraph(dataset: string, baseUrl: string) { let session; try { session = await this.openSession(dataset); const protectedRepoId = session.protected_store_id.substring(2, 46); - return await ng.doc_create(session.session_id, 'Graph', 'data:graph', 'store', 'protected', protectedRepoId); + const documentId = await ng.doc_create( + session.session_id, + 'Graph', + 'data:graph', + 'store', + 'protected', + protectedRepoId + ); + return urlJoin(baseUrl, documentId); } catch (error) { throw new Error(`NextGraph createNamedGraph failed: ${error}\nDataset: ${dataset}`); } finally { @@ -254,7 +260,7 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async namedGraphExists(dataset: string, graphUri: string): Promise { + async namedGraphExists(dataset: string, graphUri: string) { try { await this.query(dataset, `ASK { GRAPH <${graphUri}> { ?s ?p ?o } }`); return true; @@ -267,7 +273,7 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async clearNamedGraph(dataset: string, graphUri: string): Promise { + async clearNamedGraph(dataset: string, graphUri: string) { let session; try { session = await this.openSession(dataset); diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index 5f840115d..d9a9c9ba8 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -1,6 +1,3 @@ -import { v4 as uuidv4 } from 'uuid'; -import createSlug from 'speakingurl'; -import urlJoin from 'url-join'; import { ServiceSchema } from 'moleculer'; import { AdapterInterface } from '../adapters/base.ts'; @@ -17,32 +14,16 @@ const NamedGraphService = { }, actions: { create: { + params: { + dataset: { type: 'string', optional: true }, + baseUrl: { type: 'string' }, + slug: { type: 'string', optional: true } + }, async handler(ctx) { - // TODO Do not allow to pass the named graph URI on creation - let { baseUrl, slug, uri } = ctx.params; + let { baseUrl, slug } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; - if (!uri) { - // Ensure the slug does not contain special characters - if (slug) slug = createSlug(slug, { lang: 'en', custom: { '.': '.', '/': '/' } }); - - // Find an URI that does not already exists - let counter = 0; - do { - if (slug) { - if (counter > 0) { - counter += 1; - uri = urlJoin(baseUrl, slug + counter); - } else { - uri = urlJoin(baseUrl, slug); - } - } else { - uri = urlJoin(baseUrl, uuidv4()); - } - } while (await this.actions.exist({ uri, dataset }, { parentCtx: ctx })); - } - - return await this.settings.adapter.createNamedGraph(dataset, uri); + return await this.settings.adapter.createNamedGraph(dataset, baseUrl, slug); } }, diff --git a/src/middleware/tests/triplestore/initialize.ts b/src/middleware/tests/triplestore/initialize.ts index bbb24641b..0a6068e69 100644 --- a/src/middleware/tests/triplestore/initialize.ts +++ b/src/middleware/tests/triplestore/initialize.ts @@ -15,15 +15,18 @@ export default async (triplestore: string) => { } }); + // @ts-ignore Argument of type '{ mixins: { name: "jsonld"; settings: ... broker.createService({ mixins: [JsonLdService], settings: { - baseUri: CONFIG.HOME_URL + baseUrl: CONFIG.HOME_URL } }); + // @ts-ignore Argument of type '{ mixins: { name: "jsonld"; settings: ... broker.createService({ mixins: [ApiGatewayService] }); + // @ts-ignore Argument of type '{ mixins: { name: "jsonld"; settings: ... broker.createService({ mixins: [OntologiesService], settings: { diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index ced26579c..a98728d60 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -12,6 +12,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor // Ensure the test dataset exists await broker.call('triplestore.dataset.create', { dataset: testDataset }); + await broker.call('triplestore.dropAll', { dataset: testDataset }); }); afterAll(async () => { @@ -520,8 +521,14 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor let namedGraphUri: string; let secondNamedGraphUri: string; beforeAll(async () => { - namedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); - secondNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + namedGraphUri = await broker.call('triplestore.named-graph.create', { + dataset: testDataset, + baseUrl: 'https://semapps.org' + }); + secondNamedGraphUri = await broker.call('triplestore.named-graph.create', { + dataset: testDataset, + baseUrl: 'https://semapps.org' + }); // Insert test data into the first named graph const jsonLdData = { @@ -549,24 +556,42 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor }); test('Create a new named graph and verify it exists', async () => { - const localNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + const localNamedGraphUri = await broker.call('triplestore.named-graph.create', { + dataset: testDataset, + baseUrl: 'https://semapps.org' + }); - // Assert the uri is a non empty string expect(localNamedGraphUri).toBeTruthy(); + expect(localNamedGraphUri).toMatch(/^https:\/\/semapps\.org?/); expect(localNamedGraphUri).not.toBe(''); + // Fuseki considers a named graph exist only if it contains triples + if (triplestore === 'fuseki') { + await broker.call('triplestore.insert', { + resource: { + '@context': { + ex: 'http://example.org/' + }, + '@id': 'http://example.org/person1', + '@type': 'http://example.org/Person', + 'ex:name': 'John Doe' + }, + dataset: testDataset, + graphName: localNamedGraphUri + }); + } + // Assert the named graph exists expect( await broker.call('triplestore.named-graph.exist', { uri: localNamedGraphUri, dataset: testDataset }) ).toBeTruthy(); }); - if (triplestore === 'ng') - test('Check named graph existence should return false with non-existent named graph', async () => { - await expect( - broker.call('triplestore.named-graph.exist', { uri: 'http://example.org/graph', dataset: testDataset }) - ).resolves.toBeFalsy(); - }); + test('Check named graph existence should return false with non-existent named graph', async () => { + await expect( + broker.call('triplestore.named-graph.exist', { uri: 'http://example.org/graph', dataset: testDataset }) + ).resolves.toBeFalsy(); + }); test('Clear named graph should clear the named graph, and only it', async () => { // Assert the the named graphs exist @@ -611,19 +636,11 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor if (triplestore === 'fuseki') test('Delete named graph', async () => { - await broker.call('triplestore.named-graph.delete', { uri: namedGraphUri, dataset: testDataset }); - // Assert the named graph doesn't exist through a query - const result = await broker.call('triplestore.query', { - query: `SELECT * FROM <${namedGraphUri}> WHERE { ?s ?p ?o }`, - dataset: testDataset - }); - expect(result).toHaveLength(0); - // Assert the second named graph still exists through a query - const resultSecondNamedGraph = await broker.call('triplestore.query', { - query: `SELECT * FROM <${secondNamedGraphUri}> WHERE { ?s ?p ?o }`, - dataset: testDataset - }); - expect(resultSecondNamedGraph).toHaveLength(2); + await broker.call('triplestore.named-graph.delete', { uri: secondNamedGraphUri, dataset: testDataset }); + + expect( + await broker.call('triplestore.named-graph.exist', { uri: secondNamedGraphUri, dataset: testDataset }) + ).toBeFalsy(); }); }); From df1daa8f3669197876214bfa18d287b88fda7fe2 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 9 Jan 2026 15:23:06 +0100 Subject: [PATCH 147/165] Don't use a baseUrl for named graphs --- .../packages/triplestore/adapters/base.ts | 4 ++-- .../packages/triplestore/adapters/fuseki.ts | 24 ++----------------- .../triplestore/adapters/nextgraph.ts | 12 ++-------- .../triplestore/subservices/named-graph.ts | 8 +------ .../tests/triplestore/triplestore.test.ts | 20 ++++------------ 5 files changed, 11 insertions(+), 57 deletions(-) diff --git a/src/middleware/packages/triplestore/adapters/base.ts b/src/middleware/packages/triplestore/adapters/base.ts index 5a790a2c5..6dafb7c07 100644 --- a/src/middleware/packages/triplestore/adapters/base.ts +++ b/src/middleware/packages/triplestore/adapters/base.ts @@ -12,7 +12,7 @@ export interface AdapterInterface { listDatasets(): Promise; deleteDataset(dataset: string): Promise; backupDataset(dataset: string): Promise; - createNamedGraph(dataset: string, baseUrl: string, slug?: string): Promise; + createNamedGraph(dataset: string): Promise; namedGraphExists(dataset: string, graphUri: string): Promise; clearNamedGraph(dataset: string, graphUri: string): Promise; deleteNamedGraph(dataset: string, graphUri: string): Promise; @@ -56,7 +56,7 @@ export abstract class BaseAdapter implements AdapterInterface { abstract backupDataset(dataset: string): Promise; - abstract createNamedGraph(dataset: string, baseUrl: string, slug?: string): Promise; + abstract createNamedGraph(dataset: string): Promise; abstract namedGraphExists(dataset: string, graphUri: string): Promise; diff --git a/src/middleware/packages/triplestore/adapters/fuseki.ts b/src/middleware/packages/triplestore/adapters/fuseki.ts index dbd71d9ac..33d874697 100644 --- a/src/middleware/packages/triplestore/adapters/fuseki.ts +++ b/src/middleware/packages/triplestore/adapters/fuseki.ts @@ -175,28 +175,8 @@ export default class FusekiAdapter extends BaseAdapter { // No fuseki related operation here as empty named graphs are not maintained by fuseki // Inserting data into a non-existent named graph will create it // Simply return the graph URI - async createNamedGraph(dataset: string, baseUrl: string, slug?: string) { - let uri: string; - - // Ensure the slug does not contain special characters - if (slug) slug = createSlug(slug, { lang: 'en', custom: { '.': '.', '/': '/' } }); - - // Find an URI that does not already exists - let counter = 0; - do { - if (slug) { - if (counter > 0) { - counter += 1; - uri = urlJoin(baseUrl, slug + counter); - } else { - uri = urlJoin(baseUrl, slug); - } - } else { - uri = urlJoin(baseUrl, uuidv4()); - } - } while (await this.namedGraphExists(dataset, uri)); - - return uri; + async createNamedGraph(dataset: string) { + return `urn:${uuidv4()}`; } async namedGraphExists(dataset: string, graphUri: string) { diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index e8d1e61a0..6182e65dc 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -239,20 +239,12 @@ export default class NextGraphAdapter extends BaseAdapter { throw new Error('Backup not implemented for NextGraph'); } - async createNamedGraph(dataset: string, baseUrl: string) { + async createNamedGraph(dataset: string) { let session; try { session = await this.openSession(dataset); const protectedRepoId = session.protected_store_id.substring(2, 46); - const documentId = await ng.doc_create( - session.session_id, - 'Graph', - 'data:graph', - 'store', - 'protected', - protectedRepoId - ); - return urlJoin(baseUrl, documentId); + return await ng.doc_create(session.session_id, 'Graph', 'data:graph', 'store', 'protected', protectedRepoId); } catch (error) { throw new Error(`NextGraph createNamedGraph failed: ${error}\nDataset: ${dataset}`); } finally { diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index d9a9c9ba8..d4251892c 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -14,16 +14,10 @@ const NamedGraphService = { }, actions: { create: { - params: { - dataset: { type: 'string', optional: true }, - baseUrl: { type: 'string' }, - slug: { type: 'string', optional: true } - }, async handler(ctx) { - let { baseUrl, slug } = ctx.params; const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; - return await this.settings.adapter.createNamedGraph(dataset, baseUrl, slug); + return await this.settings.adapter.createNamedGraph(dataset); } }, diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index a98728d60..de808e5a9 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -17,7 +17,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor afterAll(async () => { // Clean up test dataset - await broker.call('triplestore.dataset.delete', { dataset: testDataset }); + // await broker.call('triplestore.dataset.delete', { dataset: testDataset }); if (broker) await broker.stop(); }); @@ -521,14 +521,8 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor let namedGraphUri: string; let secondNamedGraphUri: string; beforeAll(async () => { - namedGraphUri = await broker.call('triplestore.named-graph.create', { - dataset: testDataset, - baseUrl: 'https://semapps.org' - }); - secondNamedGraphUri = await broker.call('triplestore.named-graph.create', { - dataset: testDataset, - baseUrl: 'https://semapps.org' - }); + namedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); + secondNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); // Insert test data into the first named graph const jsonLdData = { @@ -556,13 +550,9 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor }); test('Create a new named graph and verify it exists', async () => { - const localNamedGraphUri = await broker.call('triplestore.named-graph.create', { - dataset: testDataset, - baseUrl: 'https://semapps.org' - }); + const localNamedGraphUri = await broker.call('triplestore.named-graph.create', { dataset: testDataset }); expect(localNamedGraphUri).toBeTruthy(); - expect(localNamedGraphUri).toMatch(/^https:\/\/semapps\.org?/); expect(localNamedGraphUri).not.toBe(''); // Fuseki considers a named graph exist only if it contains triples @@ -605,13 +595,11 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor // Assert the data is in both named graphs const resultFirstNamedGraph = await broker.call('triplestore.query', { query: `SELECT * FROM <${namedGraphUri}> { ?s ?p ?o }`, - // graphName: namedGraphUri, dataset: testDataset }); expect(resultFirstNamedGraph).toHaveLength(2); const resultSecondNamedGraph = await broker.call('triplestore.query', { query: `SELECT * FROM <${secondNamedGraphUri}> { ?s ?p ?o }`, - // graphName: secondNamedGraphUri, dataset: testDataset }); expect(resultSecondNamedGraph).toHaveLength(2); From 9667c6eef08301e40da3120edfa5f2e510ded52d Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 9 Jan 2026 17:33:51 +0100 Subject: [PATCH 148/165] Clean up and fix tests --- .../packages/triplestore/actions/insert.ts | 5 +++-- .../triplestore/adapters/nextgraph.ts | 6 +----- .../packages/triplestore/service.ts | 12 +++-------- .../tests/triplestore/initialize.ts | 7 ++++--- .../tests/triplestore/triplestore.test.ts | 21 ++++++++----------- 5 files changed, 20 insertions(+), 31 deletions(-) diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index e7540b6bb..4d2f8e998 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,4 +1,3 @@ -import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; const Schema = { @@ -36,8 +35,10 @@ const Schema = { const datasets: string[] = dataset === '*' ? await ctx.call('triplestore.dataset.list') : [dataset]; for (dataset of datasets) { - //test if graphName exists in the dataset if (datasets.length > 1) this.logger.info(`Inserting into dataset ${dataset}...`); + + // TODO Test if named graph exists in the dataset + const query = graphName ? `INSERT DATA { GRAPH <${graphName}> { ${rdf} } }` : `INSERT DATA { ${rdf} }`; await this.settings.adapter.update(dataset, query); diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index 6182e65dc..aad1cca12 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -107,8 +107,7 @@ export default class NextGraphAdapter extends BaseAdapter { let session: any; try { session = await this.openSession(dataset); - // TODO : Check if there is a drop statement in nextgraph to use instead of DELETE { ?s ?p ?o } WHERE { ?s ?p ?o } - return await ng.sparql_update(session.session_id, 'DELETE { ?s ?p ?o } WHERE { ?s ?p ?o }'); + await ng.sparql_update(session.session_id, 'DELETE WHERE { GRAPH ?g { ?s ?p ?o } }'); } catch (error) { throw new Error(`NextGraph dropAll failed: ${error}\nDataset: ${dataset}`); } finally { @@ -275,9 +274,6 @@ export default class NextGraphAdapter extends BaseAdapter { } finally { this.closeSession(session); } - // await ng.sparql_update(session_id, "DELETE WHERE { ?s ?p ?o }", nuri); - // await this.update(dataset, `DELETE { ?s ?p ?o } WHERE { GRAPH <${graphUri}> { ?s ?p ?o } }`); - // throw new Error('Clear named graph not implemented for NextGraph'); } async deleteNamedGraph(dataset: string, graphUri: string): Promise { diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index a201c99b6..3a87acffd 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -21,14 +21,12 @@ const TripleStoreService = { namedGraph: {} }, dependencies: ['jsonld.parser'], - async created() { const { dataset, namedGraph, adapter, defaultDataset } = this.settings; - if (!adapter) { - throw new Error('Adapter is required'); - } - // Initialize the adapter with + if (!adapter) throw new Error('Adapter is required'); + + // Initialize the adapter with the broker await adapter.init({ broker: this.broker }); // Create subservices @@ -55,22 +53,18 @@ const TripleStoreService = { }); } }, - started() { this.sparqlGenerator = new SparqlGenerator({}); }, - stopped() { this.settings.adapter.cleanup(); }, - actions: { insert, update, query, dropAll }, - methods: { generateSparqlQuery(query) { try { diff --git a/src/middleware/tests/triplestore/initialize.ts b/src/middleware/tests/triplestore/initialize.ts index 0a6068e69..34612cc27 100644 --- a/src/middleware/tests/triplestore/initialize.ts +++ b/src/middleware/tests/triplestore/initialize.ts @@ -15,7 +15,7 @@ export default async (triplestore: string) => { } }); - // @ts-ignore Argument of type '{ mixins: { name: "jsonld"; settings: ... + // @ts-ignore Argument of type '{ mixins: { name: ... broker.createService({ mixins: [JsonLdService], settings: { @@ -23,10 +23,10 @@ export default async (triplestore: string) => { } }); - // @ts-ignore Argument of type '{ mixins: { name: "jsonld"; settings: ... + // @ts-ignore Argument of type '{ mixins: { name: ... broker.createService({ mixins: [ApiGatewayService] }); - // @ts-ignore Argument of type '{ mixins: { name: "jsonld"; settings: ... + // @ts-ignore Argument of type '{ mixins: { name: ... broker.createService({ mixins: [OntologiesService], settings: { @@ -58,6 +58,7 @@ export default async (triplestore: string) => { throw new Error('Triplestore not supported'); } + // @ts-ignore Argument of type '{ mixins: { name: ... broker.createService({ mixins: [TripleStoreService], settings: { diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index de808e5a9..3e335d674 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -1,31 +1,28 @@ -// @ts-nocheck +import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; jest.setTimeout(30000); describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestore: any) => { - let broker: any; + let broker: ServiceBroker; const testDataset = 'test_dataset'; beforeAll(async () => { broker = await initialize(triplestore); - // Ensure the test dataset exists - await broker.call('triplestore.dataset.create', { dataset: testDataset }); - await broker.call('triplestore.dropAll', { dataset: testDataset }); + await broker.waitForServices(['triplestore']); + + if (await broker.call('triplestore.dataset.exist', { dataset: testDataset })) { + await broker.call('triplestore.dropAll', { dataset: testDataset }); + } else { + await broker.call('triplestore.dataset.create', { dataset: testDataset }); + } }); afterAll(async () => { - // Clean up test dataset - // await broker.call('triplestore.dataset.delete', { dataset: testDataset }); if (broker) await broker.stop(); }); - beforeEach(async () => { - // Clear the test dataset before each test - // await broker.call('triplestore.dropAll', { dataset: testDataset }); - }); - describe('Dataset subservice', () => { const testDatasetForSubServiceTests = 'test_dataset_for_sub_service_tests'; From 3aa0b398adbb9cb1198e6ca5b8288522a31daf96 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 13 Jan 2026 18:54:28 +0100 Subject: [PATCH 149/165] Working account test --- .../subservices/collection/actions/get.ts | 8 +- .../subservices/collection/index.ts | 12 +- .../subservices/collections-registry.ts | 5 +- .../services/activitypub/subservices/inbox.ts | 4 +- .../activitypub/services/migration.ts | 3 +- src/middleware/packages/core/service.ts | 20 +- .../packages/core/serviceTypes.d.ts | 8 +- src/middleware/packages/crypto/keys/keys.ts | 2 +- .../ldp/mixins/controlled-resource.ts | 2 +- .../packages/ldp/mixins/document-tagger.ts | 6 +- .../ldp/mixins/orphan-files-deletion.ts | 3 +- .../ldp/services/container/actions/attach.ts | 3 +- .../ldp/services/container/actions/create.ts | 14 +- .../ldp/services/container/actions/delete.ts | 3 +- .../ldp/services/container/actions/detach.ts | 3 +- .../ldp/services/container/actions/exist.ts | 2 +- .../ldp/services/container/actions/get.ts | 6 +- .../ldp/services/container/actions/getUris.ts | 3 +- .../ldp/services/container/actions/isEmpty.ts | 4 +- .../ldp/services/container/actions/post.ts | 15 +- .../ldp/services/remote/actions/delete.ts | 8 +- .../ldp/services/remote/actions/getStored.ts | 5 +- .../ldp/services/remote/actions/store.ts | 12 +- .../ldp/services/resource/actions/create.ts | 13 +- .../ldp/services/resource/actions/exist.ts | 3 +- .../ldp/services/resource/actions/get.ts | 3 +- .../resource/actions/getContainers.ts | 2 +- .../ldp/services/resource/actions/getTypes.ts | 3 +- .../ldp/services/resource/actions/patch.ts | 7 +- .../packages/solid/services/storage.ts | 19 +- .../solid/services/type-index/type-index.ts | 4 +- .../packages/sync/services/mirror.ts | 6 +- src/middleware/packages/triplestore/README.md | 81 ------ .../packages/triplestore/actions/dropAll.ts | 21 -- .../packages/triplestore/actions/query.ts | 1 - .../packages/triplestore/adapters/base.ts | 7 +- .../packages/triplestore/adapters/fuseki.ts | 26 +- .../triplestore/adapters/nextgraph.ts | 238 ++++++++++++------ .../packages/triplestore/service.ts | 4 +- .../triplestore/subservices/dataset.ts | 49 +++- .../packages/webacl/middlewares/webacl.ts | 7 +- src/middleware/packages/webacl/service.ts | 7 +- .../services/group/actions/addMember.ts | 3 +- .../webacl/services/group/actions/create.ts | 2 +- .../webacl/services/group/actions/delete.ts | 4 +- .../webacl/services/group/actions/exist.ts | 2 +- .../services/group/actions/getGroups.ts | 4 +- .../services/group/actions/getMembers.ts | 2 +- .../webacl/services/group/actions/isMember.ts | 2 +- .../services/group/actions/removeMember.ts | 2 +- .../packages/webacl/services/group/index.ts | 1 - .../services/resource/actions/addRights.ts | 10 +- .../resource/actions/deleteAllRights.ts | 2 +- .../resource/actions/deleteAllUserRights.ts | 2 +- .../services/resource/actions/getRights.ts | 28 +-- .../services/resource/actions/hasRights.ts | 27 +- .../services/resource/actions/removeRights.ts | 2 +- .../services/resource/actions/setRights.ts | 11 +- .../webacl/services/resource/index.ts | 25 +- src/middleware/packages/webacl/utils.ts | 32 +-- src/middleware/tests/account/account.test.ts | 42 ++-- src/middleware/tests/account/initialize.ts | 18 +- .../tests/triplestore/initialize.ts | 27 +- .../tests/triplestore/triplestore.test.ts | 190 +++----------- src/middleware/tests/utils.ts | 59 +++-- 65 files changed, 501 insertions(+), 648 deletions(-) delete mode 100644 src/middleware/packages/triplestore/README.md delete mode 100644 src/middleware/packages/triplestore/actions/dropAll.ts diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index bcbb9a34b..5eb826209 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,5 +1,5 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; -import { getDatasetFromUri } from '@semapps/ldp'; +import { getDatasetFromUri, getSlugFromUri } from '@semapps/ldp'; import { ActionSchema, Errors } from 'moleculer'; import { getValueFromDataType } from '../../../../../utils.ts'; @@ -19,7 +19,7 @@ async function getCollectionMetadata(ctx: any, collectionUri: any, webId: any, d PREFIX semapps: SELECT ?ordered ?summary ?dereferenceItems ?itemsPerPage ?sortPredicate ?sortOrder WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> a . # This will return [] if the user has no read permission BIND (EXISTS{<${collectionUri}> a } AS ?ordered) OPTIONAL { <${collectionUri}> as:summary ?summary . } @@ -47,7 +47,7 @@ async function verifyCursorExists(ctx: any, collectionUri: any, cursor: any, dat PREFIX as: SELECT ?itemExists WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { BIND (EXISTS{ <${collectionUri}> as:items <${cursor}> } AS ?itemExists) } } @@ -82,7 +82,7 @@ async function fetchCollectionItemURIs(ctx: any, collectionUri: any, options: an PREFIX as: SELECT DISTINCT ?itemUri WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> a as:Collection . OPTIONAL { <${collectionUri}> as:items ?itemUri . diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 02ae8bc45..03b53099b 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -1,4 +1,4 @@ -import { ControlledContainerMixin, arrayOf, getDatasetFromUri } from '@semapps/ldp'; +import { ControlledContainerMixin, arrayOf, getDatasetFromUri, getSlugFromUri } from '@semapps/ldp'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; @@ -140,7 +140,7 @@ const CollectionService = { PREFIX as: SELECT ( Count(?items) as ?count ) WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> as:items ?items . } } @@ -167,7 +167,7 @@ const CollectionService = { PREFIX as: ASK WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> a as:Collection . <${collectionUri}> as:items <${itemUri}> . } @@ -203,7 +203,7 @@ const CollectionService = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` INSERT DATA { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> <${itemUri}> } } @@ -237,7 +237,7 @@ const CollectionService = { query: sanitizeSparqlQuery` DELETE WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> <${itemUri}> } } @@ -292,7 +292,7 @@ const CollectionService = { } } WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> as:items ?s1 . } GRAPH ?g1 { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index de0e03ae7..44c982f16 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -5,6 +5,7 @@ import { arrayOf, getDatasetFromUri } from '@semapps/ldp'; import { ServiceSchema, Context } from 'moleculer'; import { AS_PREFIX } from '../../../constants.ts'; import { CollectionRegistration } from '../../../types.ts'; +import { getSlugFromUri } from '../../../utils.ts'; const CollectionsRegistryService = { name: 'activitypub.collections-registry' as const, @@ -132,7 +133,7 @@ const CollectionsRegistryService = { query: ` SELECT ?collectionUri WHERE { - GRAPH <${objectUri}> { + GRAPH <${getSlugFromUri(objectUri)}> { <${objectUri}> <${attachPredicate}> ?collectionUri } } @@ -156,7 +157,7 @@ const CollectionsRegistryService = { query: ` SELECT ?objectUri ?attachPredicate ?type WHERE { - GRAPH ?objectUri { + GRAPH ?g { ?objectUri ?attachPredicate <${collectionUri}> . FILTER ( ?attachPredicate != ) } diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index b6735c471..3bac6f5a5 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ServiceSchema, Errors } from 'moleculer'; -import { isWebId } from '@semapps/ldp'; +import { getSlugFromUri, isWebId } from '@semapps/ldp'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; @@ -168,7 +168,7 @@ const InboxService = { PREFIX xsd: SELECT DISTINCT ?activityUri WHERE { - GRAPH <${collectionUri}> { + GRAPH <${getSlugFromUri(collectionUri)}> { <${collectionUri}> a as:Collection . <${collectionUri}> as:items ?activityUri . } diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts index 7c178b66f..c0dba3c4f 100644 --- a/src/middleware/packages/activitypub/services/migration.ts +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -1,4 +1,5 @@ import { ServiceSchema } from 'moleculer'; +import { getSlugFromUri } from '../utils.ts'; const ActivitypubMigrationSchema = { name: 'activitypub.migration' as const, @@ -25,7 +26,7 @@ const ActivitypubMigrationSchema = { PREFIX as: PREFIX ldp: INSERT { - GRAPH <${collectionsContainerUri}> { + GRAPH <${getSlugFromUri(collectionsContainerUri)}> { <${collectionsContainerUri}> ldp:contains ?collectionUri } } diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 9ea7f5d1f..2dcf2f8fe 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -5,7 +5,7 @@ import { JsonLdService } from '@semapps/jsonld'; import { LdpService, DocumentTaggerMixin } from '@semapps/ldp'; import { OntologiesService } from '@semapps/ontologies'; import { SparqlEndpointService } from '@semapps/sparql-endpoint'; -import { TripleStoreService } from '@semapps/triplestore'; +import { AdapterInterface, TripleStoreService } from '@semapps/triplestore'; import { TypeIndexService, StorageService } from '@semapps/solid'; import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; @@ -19,10 +19,7 @@ const CoreService = { settings: { baseUrl: undefined, triplestore: { - url: undefined, - user: undefined, - password: undefined, - fusekiBase: undefined + adapter: null }, // Optional containers: undefined, @@ -109,6 +106,7 @@ const CoreService = { }); } + // @ts-expect-error TS(2345): Argument of type '{ mixins: ({ name: ... Remove this comment to see the full error message this.broker.createService({ mixins: [OntologiesService], settings: { @@ -189,23 +187,11 @@ const CoreService = { } if (this.settings.triplestore !== false) { - // If WebACL service is disabled, don't create a secure dataset - // We define a constant here, because this.settings.webacl is not available inside the started method - const secure = this.settings.triplestore?.secure !== false && this.settings.webacl !== false; - // @ts-expect-error TS(2322): Type '{ name: "triplestore"; settings: { url: null... Remove this comment to see the full error message this.broker.createService({ mixins: [TripleStoreService], settings: { ...triplestore - }, - async started() { - if (triplestore.mainDataset) { - await this.broker.call('triplestore.dataset.create', { - dataset: triplestore.mainDataset, - secure - }); - } } }); } diff --git a/src/middleware/packages/core/serviceTypes.d.ts b/src/middleware/packages/core/serviceTypes.d.ts index c3838c1bf..71a98d662 100644 --- a/src/middleware/packages/core/serviceTypes.d.ts +++ b/src/middleware/packages/core/serviceTypes.d.ts @@ -1,15 +1,11 @@ import { Context, ServiceSettingSchema } from 'moleculer'; import { Ontology } from '@semapps/ontologies'; +import { AdapterInterface } from '@semapps/triplestore'; export interface CoreServiceSettings extends ServiceSettingSchema { baseUrl?: string; triplestore: { - url?: string; - user?: string; - password?: string; - mainDataset?: string; - fusekiBase?: string; - secure?: boolean; + adapter: AdapterInterface | null; }; // Optional containers?: string; diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index 94ff19729..31a74905c 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -343,7 +343,7 @@ const KeysService = { await ctx.call('ldp.resource.patch', { resourceUri: webId, triplesToAdd: [rdf.quad(rdf.namedNode(webId), rdf.namedNode(keyPredicate), rdf.namedNode(publicKeyId))], - webId + webId: 'system' }); } }, diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index a32683e18..ea5d40d13 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -52,7 +52,7 @@ const ControlledResourceMixin = { query: ` SELECT ?resourceUri WHERE { - GRAPH ?resourceUri { + GRAPH ?g { ?resourceUri a ${expandedTypes.map(t => `<${t}>`).join(', ')} . } } diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 0852f18d8..6eeae576b 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,6 +1,6 @@ import { dc } from '@semapps/ontologies'; import { ServiceSchema } from 'moleculer'; -import { getDatasetFromUri } from '../utils.ts'; +import { getDatasetFromUri, getSlugFromUri } from '../utils.ts'; const Schema = { settings: { @@ -42,7 +42,7 @@ const Schema = { if (triples.length > 0) { await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${resourceUri}> { ${triples.join('\n')} } }`, + query: `INSERT DATA { GRAPH <${getSlugFromUri(resourceUri)}> { ${triples.join('\n')} } }`, dataset: dataset || getDatasetFromUri(resourceUri), webId: 'system' }); @@ -56,7 +56,7 @@ const Schema = { const now = new Date(); await ctx.call('triplestore.update', { query: ` - WITH <${resourceUri}> + WITH <${getSlugFromUri(resourceUri)}> DELETE { <${resourceUri}> <${this.settings.documentPredicates.updated}> ?updated } INSERT { <${resourceUri}> <${ this.settings.documentPredicates.updated diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index 256f2900f..5ac896ee0 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -1,5 +1,6 @@ import { CronJob } from 'cron'; import { ServiceSchema } from 'moleculer'; +import { getSlugFromUri } from '../utils.ts'; const Schema = { settings: { @@ -24,7 +25,7 @@ const Schema = { query: ` SELECT ?file WHERE { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> ?file . } FILTER NOT EXISTS { diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 3c2b871c0..85696954a 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,5 +1,6 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema, Errors } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -27,7 +28,7 @@ const Schema = { query: sanitizeSparqlQuery` PREFIX ldp: INSERT DATA { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> ldp:contains <${resourceUri}> } } diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index 96b8368eb..b60b3b928 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,22 +1,20 @@ import { ActionSchema } from 'moleculer'; +import urlJoin from 'url-join'; const CreateAction = { visibility: 'public', params: { - path: { type: 'string', optional: true }, title: { type: 'string', optional: true }, description: { type: 'string', optional: true }, registration: { type: 'object', optional: true } }, async handler(ctx) { - let { path, title, description, registration } = ctx.params; + let { title, description, registration } = ctx.params; - const baseUrl = await ctx.call('solid-storage.getBaseUrl'); + const graphName: string = await ctx.call('triplestore.named-graph.create'); - const containerUri = await ctx.call('triplestore.named-graph.create', { - baseUrl, - slug: this.settings.allowSlugs ? path || registration?.path : undefined - }); + const baseUrl: string = await ctx.call('solid-storage.getBaseUrl'); + const containerUri = urlJoin(baseUrl, graphName); await ctx.call('triplestore.insert', { resource: { @@ -25,7 +23,7 @@ const CreateAction = { 'http://purl.org/dc/terms/title': title, 'http://purl.org/dc/terms/description': description }, - graphName: containerUri, + graphName, webId: 'system' }); diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index 296a27b66..d951be4ef 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -1,5 +1,6 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -17,7 +18,7 @@ const Schema = { query: sanitizeSparqlQuery` DELETE WHERE { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> ?p1 ?o1 . } } diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index 15ab84a41..b5c8d598f 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -26,7 +27,7 @@ const Schema = { query: ` DELETE WHERE { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> <${resourceUri}> } } diff --git a/src/middleware/packages/ldp/services/container/actions/exist.ts b/src/middleware/packages/ldp/services/container/actions/exist.ts index 0fba6cee9..4b9754717 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.ts +++ b/src/middleware/packages/ldp/services/container/actions/exist.ts @@ -15,7 +15,7 @@ const Schema = { ASK WHERE { FILTER(?containerUri IN (<${containerUri}>, <${`${containerUri}/`}>)) . - GRAPH ?containerUri { + GRAPH ?g { ?containerUri a ldp:Container . } } diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 74953bf5e..49c45af3e 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,6 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema, Errors } from 'moleculer'; -import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; +import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf, getSlugFromUri } from '../../../utils.ts'; import { Registration } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -91,11 +91,11 @@ const Schema = { ${await ctx.call('ontologies.getRdfPrefixes')} SELECT ?s1 WHERE { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> ?s1 . } ${filtersQuery} - ${sortPredicate ? `GRAPH ?s1 { ?s1 <${expandedSortPredicate}> ?sortValue }` : ''} + ${sortPredicate ? `GRAPH ?g1 { ?s1 <${expandedSortPredicate}> ?sortValue }` : ''} } ${sortPredicate ? `ORDER BY ${sortOrder}(?sortValue)` : ''} ${limitQuery} diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index c1fa54cee..09ac50c2f 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -13,7 +14,7 @@ const Schema = { PREFIX ldp: SELECT ?resourceUri WHERE { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> ldp:contains ?resourceUri . } } diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index 41e4dd696..0705e9865 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -12,13 +13,12 @@ const Schema = { async handler(ctx) { const { containerUri } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. const { dataset } = ctx.meta; const res = await ctx.call('triplestore.query', { query: ` SELECT (COUNT (?o) as ?count) { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> ?o } } diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index b5a83cf42..9752a77f3 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,7 +1,8 @@ +import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; import { ActionSchema, Errors } from 'moleculer'; -import { cleanUndefined } from '../../../utils.ts'; +import { cleanUndefined, getSlugFromUri } from '../../../utils.ts'; import { Registration } from '../../../types.ts'; const { MoleculerError } = Errors; @@ -81,17 +82,17 @@ const PostAction = { ); } - const resourceUri = await ctx.call('triplestore.named-graph.create', { - baseUrl: await ctx.call('solid-storage.getBaseUrl'), - slug: this.settings.allowSlugs ? slug : undefined - }); + const graphName: string = await ctx.call('triplestore.named-graph.create'); + + const baseUrl: string = await ctx.call('solid-storage.getBaseUrl'); + const resourceUri = urlJoin(baseUrl, graphName); // We must add this first, otherwise side effects will not find the container of the created resource // But this create race conditions, especially when testing, since uncreated resources are linked to containers await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` INSERT DATA { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> <${resourceUri}> } } @@ -133,7 +134,7 @@ const PostAction = { await ctx.call('triplestore.update', { query: ` DELETE WHERE { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> <${resourceUri}> } }`, diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index 99c5b47e8..c0398907b 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const DeleteAction = { visibility: 'public', @@ -16,13 +17,14 @@ const DeleteAction = { await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Write', webId }); - const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); + const namedGraphUri = getSlugFromUri(resourceUri); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: namedGraphUri }); if (!exist) throw new Error(`No named graph found with resource ${resourceUri} (dataset: ${ctx.meta.dataset})`); const oldData = await this.actions.getStored({ resourceUri, webId: 'system' }, { parentCtx: ctx }); - await ctx.call('triplestore.named-graph.clear', { uri: resourceUri }); - await ctx.call('triplestore.named-graph.delete', { uri: resourceUri }); + await ctx.call('triplestore.named-graph.clear', { uri: namedGraphUri }); + await ctx.call('triplestore.named-graph.delete', { uri: namedGraphUri }); // Detach from all containers const containersUris: string[] = await ctx.call('ldp.resource.getContainers', { resourceUri }); diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 294ceebfd..480591f7c 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,4 +1,5 @@ import { ActionSchema, Errors } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -17,7 +18,7 @@ const Schema = { const { resourceUri, jsonContext } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: getSlugFromUri(resourceUri) }); if (!exist) throw new MoleculerError(`Resource Not found ${resourceUri} in dataset ${ctx.meta.dataset}`, 404, 'NOT_FOUND'); @@ -29,7 +30,7 @@ const Schema = { ?s ?p ?o } WHERE { - GRAPH <${resourceUri}> { + GRAPH <${getSlugFromUri(resourceUri)}> { ?s ?p ?o . } } diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index f1f6d89e0..e0ea8e9a0 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ActionSchema } from 'moleculer'; -import { hasType } from '../../../utils.ts'; +import { getSlugFromUri, hasType } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -50,13 +50,15 @@ const Schema = { }; } + let namedGraphUri = getSlugFromUri(resourceUri); + // Check if the remote resource is already stored - const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri, dataset }); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: namedGraphUri, dataset }); if (!exist) { - await ctx.call('triplestore.named-graph.create', { uri: resourceUri, dataset }); + namedGraphUri = await ctx.call('triplestore.named-graph.create', { dataset }); } else { - await ctx.call('triplestore.named-graph.clear', { uri: resourceUri, dataset }); + await ctx.call('triplestore.named-graph.clear', { uri: namedGraphUri, dataset }); } if (keepInSync) { @@ -65,7 +67,7 @@ const Schema = { await ctx.call('triplestore.insert', { resource: resource, - graphName: resourceUri, + graphName: namedGraphUri, webId: 'system', dataset }); diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index 36f37f216..b4282bed8 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,4 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; +import { getSlugFromUri } from '@semapps/webacl'; import { ActionSchema, Errors } from 'moleculer'; const { MoleculerError } = Errors; @@ -26,12 +27,12 @@ const Schema = { throw new Error(`The ldp.resource.create action now only support JSON-LD. Provided: ${contentType}`); if (await ctx.call('ldp.remote.isRemote', { resourceUri })) - throw new MoleculerError('Remote resources cannot be created', 403, 'FORBIDDEN'); + throw new MoleculerError(`Remote resource cannot be created: ${resourceUri}`, 403, 'FORBIDDEN'); - const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); - if (resourceExist) { - throw new MoleculerError(`A resource already exist with URI ${resourceUri}`, 400, 'BAD_REQUEST'); - } + // const resourceExist = await ctx.call('ldp.resource.exist', { resourceUri, webId: 'system' }); + // if (resourceExist) { + // throw new MoleculerError(`A resource already exist with URI ${resourceUri}`, 400, 'BAD_REQUEST'); + // } // Adds the default context, if it is missing if (!resource['@context']) { @@ -45,7 +46,7 @@ const Schema = { resource, contentType, webId, - graphName: resourceUri + graphName: getSlugFromUri(resourceUri) }); const { controlledActions } = registration || (await ctx.call('ldp.registry.getByUri', { resourceUri })); diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 92144abb8..ab459e70b 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -11,7 +12,7 @@ const Schema = { const { resourceUri, acceptTombstones } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const exist = await ctx.call('triplestore.named-graph.exist', { uri: resourceUri }); + const exist = await ctx.call('triplestore.named-graph.exist', { uri: getSlugFromUri(resourceUri) }); // If resource exists but we don't want tombstones, check the resource type if (exist && !acceptTombstones) { diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index 12bf93df3..5f1ccae63 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,5 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema, Errors } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -47,7 +48,7 @@ const Schema = { ?s ?p ?o } WHERE { - GRAPH <${resourceUri}> { + GRAPH <${getSlugFromUri(resourceUri)}> { ?s ?p ?o } } diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index cd9ce6b61..e0ad00987 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -15,7 +15,7 @@ const GetContainersAction = { PREFIX ldp: SELECT ?containerUri WHERE { - GRAPH ?containerUri { + GRAPH ?g { ?containerUri ldp:contains <${resourceUri}> . } } diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 41c9a54f5..6236e7aaa 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -1,4 +1,5 @@ import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -15,7 +16,7 @@ const Schema = { query: ` SELECT ?type WHERE { - GRAPH <${resourceUri}> { + GRAPH <${getSlugFromUri(resourceUri)}> { <${resourceUri}> a ?type . } } diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index b391c49ce..96be2310a 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,5 +1,6 @@ import rdf from '@rdfjs/data-model'; import { ActionSchema, Errors } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -46,6 +47,8 @@ const Schema = { await ctx.call('permissions.check', { uri: resourceUri, type: 'resource', mode: 'acl:Append', webId }); } + const namedGraphUri = getSlugFromUri(resourceUri); + // Build the SPARQL update const sparqlUpdate = { type: 'update', @@ -56,7 +59,7 @@ const Schema = { // @ts-expect-error TS(2345): Argument of type '{ updateType: string; delete: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'delete', - delete: [{ type: 'graph', triples: triplesToRemove, name: rdf.namedNode(resourceUri) }] + delete: [{ type: 'graph', triples: triplesToRemove, name: rdf.namedNode(namedGraphUri) }] }); } @@ -64,7 +67,7 @@ const Schema = { // @ts-expect-error TS(2345): Argument of type '{ updateType: string; insert: { ... Remove this comment to see the full error message sparqlUpdate.updates.push({ updateType: 'insert', - insert: [{ type: 'graph', triples: triplesToAdd, name: rdf.namedNode(resourceUri) }] + insert: [{ type: 'graph', triples: triplesToAdd, name: rdf.namedNode(namedGraphUri) }] }); } diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index e7775d693..9f1188338 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -33,11 +33,8 @@ const SolidStorageSchema = { secure: false // TODO Remove when we switch to Fuseki 5 }); - const allowSlugs = await ctx.call('ldp.getSetting', { key: 'allowSlugs' }); const baseUrl = await this.actions.getBaseUrl({ username }, { parentCtx: ctx }); - const rootContainerUri: string = await ctx.call('ldp.container.create', { path: '/data' }); - let resourcesUris: Record = {}; // Create controlled resources by priority (first webId, then type indexes, then other resources) @@ -46,10 +43,8 @@ const SolidStorageSchema = { const { controlledActions } = resourceRegistration; // TODO Put this inside the ldp.resource.create action - const resourceUri: string = await ctx.call('triplestore.named-graph.create', { - baseUrl, - slug: allowSlugs ? resourceRegistration.path : undefined - }); + const graphName: string = await ctx.call('triplestore.named-graph.create'); + const resourceUri = urlJoin(baseUrl, graphName); await ctx.call(controlledActions.create, { resourceUri, @@ -58,13 +53,17 @@ const SolidStorageSchema = { webId: 'system' }); + resourcesUris[resourceRegistration.name] = resourceUri; + } + + // Once the type indexes are created, we can create the root container and attach all controlled resources to it + const rootContainerUri: string = await ctx.call('ldp.container.create', { path: '/data' }); + for (const resourceRegistration of resourceRegistrations) { await ctx.call('ldp.container.attach', { containerUri: rootContainerUri, - resourceUri, + resourceUri: resourcesUris[resourceRegistration.name], webId: 'system' }); - - resourcesUris[resourceRegistration.name] = resourceUri; } const webId = resourcesUris.webid; diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index ca2baebab..0c68e9fe8 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -125,7 +125,7 @@ const TypeIndexService = { VALUES ?typeIndexUri { ${typeIndexUris.map(typeIndexUri => `<${typeIndexUri}>`).join(' ')} } VALUES ?instancePredicate { solid:instanceContainer solid:instance } VALUES ?indexType { solid:ListedDocument solid:UnlistedDocument } - GRAPH ?typeIndexUri { + GRAPH ?g { ?typeIndexUri a ?indexType . ?typeRegistrationUri a solid:TypeRegistration . ?typeRegistrationUri solid:forClass ?type . @@ -180,7 +180,7 @@ const TypeIndexService = { VALUES ?typeIndexUri { ${typeIndexUris.map(uri => `<${uri}>`).join(' ')} } VALUES ?instancePredicate { ${instancePredicates.join(' ')} } VALUES ?indexType { solid:ListedDocument solid:UnlistedDocument } - GRAPH ?typeIndexUri { + GRAPH ?g { ?typeIndexUri a ?indexType . ?typeRegistrationUri a solid:TypeRegistration . ?typeRegistrationUri solid:forClass <${expandedType}>, ?type . diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index 31d939245..24b62df1d 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; -import { createFragmentURL, arrayOf, getId } from '@semapps/ldp'; +import { createFragmentURL, arrayOf, getId, getSlugFromUri } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; import { ServiceSchema, Errors } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; @@ -125,7 +125,7 @@ const MirrorSchema = { query: ` PREFIX ldp: INSERT DATA { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> a ldp:Container, ldp:BasicContainer . } } @@ -144,7 +144,7 @@ const MirrorSchema = { query: ` PREFIX ldp: INSERT DATA { - GRAPH <${containerUri}> { + GRAPH <${getSlugFromUri(containerUri)}> { <${containerUri}> ldp:contains <${resourceUri}> . } } diff --git a/src/middleware/packages/triplestore/README.md b/src/middleware/packages/triplestore/README.md deleted file mode 100644 index 720645d44..000000000 --- a/src/middleware/packages/triplestore/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# @semapps/triplestore - -Triple store module for SemApps with support for multiple backends. - -## Supported Backends - -- **Fuseki**: Apache Jena Fuseki SPARQL server -- **NextGraph**: NextGraph triple store - -## Configuration - -The module automatically detects which backend to use based on your configuration. - -### Fuseki Configuration - -```javascript -{ - name: 'triplestore', - mixins: [TripleStoreService], - settings: { - url: 'http://localhost:3030', - user: 'admin', - password: 'password', - mainDataset: 'main' - } -} -``` - -### NextGraph Configuration - -```javascript -{ - name: 'triplestore', - mixins: [TripleStoreService], - settings: { - nextgraphConfig: '/path/to/nextgraph/config', - nextgraphAdminUserId: 'admin-user-id', - nextgraphMappingsNuri: 'http://semapps.org/mappings', - mainDataset: 'main' - } -} -``` - -### Explicit Backend Selection - -You can also explicitly specify the backend type: - -```javascript -{ - name: 'triplestore', - mixins: [TripleStoreService], - settings: { - backend: 'fuseki', // or 'nextgraph' - url: 'http://localhost:3030', - user: 'admin', - password: 'password', - mainDataset: 'main' - } -} -``` - -## Backward Compatibility - -Existing configurations continue to work without any changes. The module automatically detects the backend type based on the provided settings. - -## API - -The module provides the same API regardless of the backend used: - -- `triplestore.query` - Execute SPARQL queries -- `triplestore.update` - Execute SPARQL updates -- `triplestore.insert` - Insert triples -- `triplestore.dropAll` - Drop all data -- `triplestore.countTriplesOfSubject` - Count triples for a subject -- `triplestore.tripleExist` - Check if a triple exists -- `triplestore.deleteOrphanBlankNodes` - Delete orphan blank nodes - -## Dependencies - -- **Fuseki**: Uses `node-fetch` for HTTP communication -- **NextGraph**: Uses the `nextgraph` SDK (optional dependency) diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts deleted file mode 100644 index 09af07879..000000000 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ActionSchema } from 'moleculer'; - -const Schema = { - visibility: 'public', - params: { - dataset: { - type: 'string', - optional: true - } - }, - async handler(ctx) { - const dataset = ctx.params.dataset || ctx.meta.dataset || this.settings.defaultDataset; - - if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) - throw new Error(`The dataset ${dataset} doesn't exist`); - - return await this.settings.adapter.dropAll(dataset); - } -} satisfies ActionSchema; - -export default Schema; diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 602e8b203..34c454029 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -22,7 +22,6 @@ const Schema = { if (typeof query === 'object') query = this.generateSparqlQuery(query); - // Use backend implementation return await this.settings.adapter.query(dataset, query); } } satisfies ActionSchema; diff --git a/src/middleware/packages/triplestore/adapters/base.ts b/src/middleware/packages/triplestore/adapters/base.ts index 6dafb7c07..37ade4039 100644 --- a/src/middleware/packages/triplestore/adapters/base.ts +++ b/src/middleware/packages/triplestore/adapters/base.ts @@ -6,16 +6,17 @@ export interface AdapterInterface { cleanup(): Promise; query(query: string, dataset?: string): Promise; update(query: string, dataset?: string): Promise; - dropAll(dataset: string): Promise; createDataset(dataset: string): Promise; datasetExists(dataset: string): Promise; listDatasets(): Promise; + clearDataset(dataset: string): Promise; deleteDataset(dataset: string): Promise; backupDataset(dataset: string): Promise; createNamedGraph(dataset: string): Promise; namedGraphExists(dataset: string, graphUri: string): Promise; clearNamedGraph(dataset: string, graphUri: string): Promise; deleteNamedGraph(dataset: string, graphUri: string): Promise; + getWacGraph(): string; } export abstract class BaseAdapter implements AdapterInterface { @@ -44,8 +45,6 @@ export abstract class BaseAdapter implements AdapterInterface { abstract update(query: string, dataset?: string): Promise; - abstract dropAll(dataset: string): Promise; - abstract createDataset(dataset: string): Promise; abstract datasetExists(dataset: string): Promise; @@ -54,6 +53,8 @@ export abstract class BaseAdapter implements AdapterInterface { abstract deleteDataset(dataset: string): Promise; + abstract clearDataset(dataset: string): Promise; + abstract backupDataset(dataset: string): Promise; abstract createNamedGraph(dataset: string): Promise; diff --git a/src/middleware/packages/triplestore/adapters/fuseki.ts b/src/middleware/packages/triplestore/adapters/fuseki.ts index 33d874697..5072f308c 100644 --- a/src/middleware/packages/triplestore/adapters/fuseki.ts +++ b/src/middleware/packages/triplestore/adapters/fuseki.ts @@ -111,16 +111,6 @@ export default class FusekiAdapter extends BaseAdapter { }); } - async dropAll(dataset: string) { - await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { - operation: 'dropAll', - body: 'update=CLEAR+ALL', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - } - }); - } - async createDataset(dataset: string) { await this.fetch(urlJoin(this.settings.url, '$/datasets') + `?dbName=${dataset}&dbType=tdb2`, { operation: 'createDataset', @@ -159,6 +149,16 @@ export default class FusekiAdapter extends BaseAdapter { this.getLogger().info(`Fuseki dataset deleted: ${dataset}`); } + async clearDataset(dataset: string) { + await this.fetch(urlJoin(this.settings.url, dataset, 'update'), { + operation: 'dropAll', + body: 'update=CLEAR+ALL', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }); + } + // TODO : see how we can test this async backupDataset(dataset: string) { // Ask Fuseki to backup the given dataset @@ -175,7 +175,7 @@ export default class FusekiAdapter extends BaseAdapter { // No fuseki related operation here as empty named graphs are not maintained by fuseki // Inserting data into a non-existent named graph will create it // Simply return the graph URI - async createNamedGraph(dataset: string) { + async createNamedGraph() { return `urn:${uuidv4()}`; } @@ -202,6 +202,10 @@ export default class FusekiAdapter extends BaseAdapter { this.getLogger().info(`Fuseki named graph deleted: ${graphUri}`); } + async getWacGraph() { + return 'http://semapps.org/webacl'; + } + async waitForDatasetCreation(dataset: string) { let datasetExist; do { diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index aad1cca12..f3cf68f5e 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -1,5 +1,6 @@ import ng from 'nextgraph'; -import urlJoin from 'url-join'; +import fs from 'fs'; +import { join as pathJoin } from 'path'; import { SparqlJsonParser } from 'sparqljson-parse'; import { BaseAdapter } from './base.ts'; @@ -10,12 +11,29 @@ type NextGraphAdapterSettings = { serverAddr: string; // The server address, can be retrieved using the console of the NextGraph server adminUserId: string; // The admin user id, must be saved when first creating the user mappingsNuri: string; // The mappings nuri, must be saved when first creating the document + backupsPath?: string; // Path to store backups }; +type Session = { + session_id: number; + user: string; + private_store_id: string; + protected_store_id: string; + public_store_id: string; +}; + +type DatasetMetadata = { + mappingUri: string; + userId: string; + wacGraph: string; +}; + +const openSessions: { [dataset: string]: Session } = {}; + export default class NextGraphAdapter extends BaseAdapter { name = 'nextgraph'; - private settings: { adminUserId: string; mappingsNuri: string }; + private settings: { adminUserId: string; mappingsNuri: string; backupsPath: string }; private adminSessionid: string = ''; @@ -42,8 +60,10 @@ export default class NextGraphAdapter extends BaseAdapter { this.settings = { adminUserId: settings.adminUserId, - mappingsNuri: settings.mappingsNuri + mappingsNuri: settings.mappingsNuri, + backupsPath: settings.backupsPath }; + this.sparqlJsonParser = new SparqlJsonParser(); } @@ -55,9 +75,11 @@ export default class NextGraphAdapter extends BaseAdapter { try { // Initialize the nextgraph backend in headless mode await ng.init_headless(this.sdkConfig); + // Start a session for the admin user (used to manage datasets) const session = await ng.session_headless_start(this.settings.adminUserId); this.adminSessionid = session.session_id; + this.getLogger().info(`NextGraph adapter initialized. Admin session started with id: ${this.adminSessionid}`); } catch (error) { throw new Error(`NextGraph adapter initialization failed: ${error}`); @@ -103,40 +125,51 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async dropAll(dataset: string) { - let session: any; - try { - session = await this.openSession(dataset); - await ng.sparql_update(session.session_id, 'DELETE WHERE { GRAPH ?g { ?s ?p ?o } }'); - } catch (error) { - throw new Error(`NextGraph dropAll failed: ${error}\nDataset: ${dataset}`); - } finally { - this.closeSession(session); - } - } - async createDataset(dataset: string) { try { + // Create user + const userId = await ng.admin_create_user(this.sdkConfig); - // TODO: see about logger + + this.getLogger().info(`NextGraph user created for dataset ${dataset} with user id : ${userId}`); + + // Create WAC document + + const session: Session = await ng.session_headless_start(userId); + + const protectedRepoId = session.protected_store_id.substring(2, 46); + + const wacDocumentUri = await ng.doc_create( + session.session_id, + 'Graph', + 'data:graph', + 'store', + 'protected', + protectedRepoId + ); + this.getLogger().info(`NextGraph user created for dataset ${dataset} with user id : ${userId}`); + // Store the user and WAC document IDs in mappings document + const mappingUri = `http://semapps.org/mappings/${encodeURIComponent(dataset)}`; await ng.sparql_update( this.adminSessionid, ` - PREFIX semapps: - INSERT DATA { - GRAPH <${this.settings.mappingsNuri}> { - <${mappingUri}> - a semapps:Dataset ; - semapps:name "${dataset}" ; - semapps:value "${userId}" . - } - } - ` + PREFIX semapps: + INSERT DATA { + GRAPH <${this.settings.mappingsNuri}> { + <${mappingUri}> + a semapps:Dataset ; + semapps:name "${dataset}" ; + semapps:userId "${userId}" ; + semapps:wacGraph "${wacDocumentUri}" . + } + } + ` ); + this.getLogger().info(`Mapping created for dataset ${dataset} with mapping uri : ${mappingUri}`); } catch (error) { throw new Error(`NextGraph createDataset failed: ${error}\nDataset: ${dataset}`); @@ -145,20 +178,8 @@ export default class NextGraphAdapter extends BaseAdapter { async datasetExists(dataset: string) { try { - const response = await ng.sparql_query( - this.adminSessionid, - ` - PREFIX semapps: - SELECT ?userId WHERE { - GRAPH <${this.settings.mappingsNuri}> { - ?mapping a semapps:Dataset ; - semapps:name "${dataset}" ; - semapps:value ?userId . - } - } - ` - ); - return response && response.results && response.results.bindings && response.results.bindings.length > 0; + const datasetMetadata = await this.getDatasetMetadata(dataset); + return !!datasetMetadata; } catch (error) { throw new Error(`NextGraph datasetExists failed: ${error}\nDataset: ${dataset}`); } @@ -173,7 +194,7 @@ export default class NextGraphAdapter extends BaseAdapter { SELECT ?datasetName WHERE { GRAPH <${this.settings.mappingsNuri}> { ?mapping a semapps:Dataset ; - semapps:name ?datasetName . + semapps:name ?datasetName . } } ` @@ -186,47 +207,26 @@ export default class NextGraphAdapter extends BaseAdapter { async deleteDataset(dataset: string) { try { - // First, check if the mapping exists - const checkResponse = await ng.sparql_query( - this.adminSessionid, - ` - PREFIX semapps: - - SELECT ?mapping ?userId WHERE { - GRAPH <${this.settings.mappingsNuri}> { - ?mapping a semapps:Dataset ; - semapps:name "${dataset}" ; - semapps:value ?userId . - } - } - ` - ); + const datasetMetadata = await this.getDatasetMetadata(dataset); - if (!(checkResponse.results.bindings.length > 0)) { + if (!datasetMetadata) { this.getLogger().warn(`Nextgraph delete dataset : No nextgraph mapping found for dataset: ${dataset}`); return; // Nothing to delete } - const mappingUri = checkResponse.results.bindings[0].mapping.value; - const userId = checkResponse.results.bindings[0].userId.value; - // Delete the mapping from the graph await ng.sparql_update( this.adminSessionid, ` - PREFIX semapps: - - DELETE DATA { - GRAPH <${this.settings.mappingsNuri}> { - <${mappingUri}> - a semapps:Dataset ; - semapps:name "${dataset}" ; - semapps:value "${userId}" . - } - } - ` + PREFIX semapps: + DELETE WHERE { + GRAPH <${this.settings.mappingsNuri}> { + <${datasetMetadata.mappingUri}> ?p ?o . + } + } + ` ); - this.getLogger().info(`Successfully deleted mapping for dataset: ${dataset} (userId: ${userId})`); + this.getLogger().info(`Successfully deleted mapping for dataset: ${dataset} (userId: ${datasetMetadata.userId})`); // TODO : See with Niko about user deletion in nextgraph then if possible delete the actual user } catch (error) { @@ -234,8 +234,81 @@ export default class NextGraphAdapter extends BaseAdapter { } } + async clearDataset(dataset: string) { + let session: any; + try { + session = await this.openSession(dataset); + // Delete all triples in all documents + // TODO Delete also the documents when the method will be available + await ng.sparql_update(session.session_id, 'DELETE WHERE { GRAPH ?g { ?s ?p ?o } }'); + } catch (error) { + throw new Error(`NextGraph dropAll failed: ${error}\nDataset: ${dataset}`); + } finally { + this.closeSession(session); + } + } + async backupDataset(dataset: string) { - throw new Error('Backup not implemented for NextGraph'); + let session; + try { + if (!this.settings.backupsPath) + throw new Error('The backupsPath setting is required in the NextGraph adapter if you want to backup data'); + + fs.mkdirSync(this.settings.backupsPath, { recursive: true, mode: 0o777 }); + + session = await this.openSession(dataset); + + const dump = await ng.rdf_dump(session.session_id); + + // Add a dot at the end of each line, to have a valid N-Quads format + const dumpWithTrailingDots = dump + .split(/\n/) + .map(line => `${line} .`) + .join('\n'); + + fs.writeFileSync(pathJoin(this.settings.backupsPath, `${dataset}.nq`), dumpWithTrailingDots); + + // const mappingsDump = await ng.rdf_dump(this.adminSessionid); + // fs.writeFileSync(pathJoin(this.settings.backupsPath, 'mappings.nq'), mappingsDump); + } catch (error) { + throw new Error(`NextGraph backupDataset failed: ${error}\nDataset: ${dataset}`); + } finally { + this.closeSession(session); + } + } + + async getWacGraph(dataset: string) { + const datasetMetadata = await this.getDatasetMetadata(dataset); + return datasetMetadata?.wacGraph; + } + + private async getDatasetMetadata(dataset: string): Promise { + try { + const response = await ng.sparql_query( + this.adminSessionid, + ` + PREFIX semapps: + SELECT ?mappingUri ?userId ?wacGraph WHERE { + GRAPH <${this.settings.mappingsNuri}> { + ?mappingUri a semapps:Dataset ; + semapps:name "${dataset}" ; + semapps:userId ?userId ; + semapps:wacGraph ?wacGraph . + } + } + ` + ); + + if (response.results.bindings.length > 0) { + return { + mappingUri: response.results.bindings[0].mappingUri.value, + userId: response.results.bindings[0].userId.value, + wacGraph: response.results.bindings[0].wacGraph.value + }; + } + } catch (error) { + throw new Error(`NextGraph deleteDataset failed: ${error}\nDataset: ${dataset}`); + } } async createNamedGraph(dataset: string) { @@ -288,19 +361,21 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async openSession(dataset: string) { + async openSession(dataset: string): Promise { try { - const userId = await this.getUserIdForDataset(dataset); - const session = await ng.session_headless_start(userId); - return session; + if (!openSessions[dataset]) { + const userId = await this.getUserIdForDataset(dataset); + openSessions[dataset] = await ng.session_headless_start(userId); + } + return openSessions[dataset]; } catch (error) { throw new Error(`NextGraph openSession failed: ${error}`); } } - async closeSession(session: any) { + async closeSession(session?: Session) { try { - await ng.session_headless_stop(session.session_id, true); + // await ng.session_headless_stop(session.session_id, true); } catch (error) { throw new Error(`NextGraph closeSession failed: ${error}`); } @@ -316,7 +391,7 @@ export default class NextGraphAdapter extends BaseAdapter { GRAPH <${this.settings.mappingsNuri}> { ?mapping a semapps:Dataset ; semapps:name "${dataset}" ; - semapps:value ?userId . + semapps:userId ?userId . } } ` @@ -333,7 +408,8 @@ export default class NextGraphAdapter extends BaseAdapter { async cleanup() { if (this.adminSessionid) { try { - await ng.session_headless_stop(this.adminSessionid, true); + await ng.session_headless_stop(this.adminSessionid, false); + // TODO Close all sessions this.getLogger().info('NextGraph adapter cleaned up'); } catch (error) { throw new Error(`NextGraph cleanup failed: ${error}`); diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 3a87acffd..aeb9dbc34 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -1,6 +1,5 @@ import sparqljsModule from 'sparqljs'; import { ServiceSchema, Errors } from 'moleculer'; -import dropAll from './actions/dropAll.ts'; import insert from './actions/insert.ts'; import query from './actions/query.ts'; import update from './actions/update.ts'; @@ -62,8 +61,7 @@ const TripleStoreService = { actions: { insert, update, - query, - dropAll + query }, methods: { generateSparqlQuery(query) { diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 6dbc12d1a..e28ec0c7f 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -12,17 +12,6 @@ const DatasetService = { } }, actions: { - backup: { - async handler(ctx) { - const { dataset } = ctx.params; - if (!dataset) throw new Error('Unable to backup dataset. The parameter dataset is missing'); - - this.logger.info(`Backing up dataset ${dataset}...`); - await this.settings.adapter.backupDataset(dataset); - this.logger.info(`Dataset ${dataset} backed up`); - } - }, - create: { async handler(ctx) { const { dataset } = ctx.params; @@ -48,6 +37,31 @@ const DatasetService = { } }, + clear: { + params: { + dataset: { type: 'string' } + }, + async handler(ctx) { + const { dataset } = ctx.params; + + if (!(await ctx.call('triplestore.dataset.exist', { dataset }))) + throw new Error(`The dataset ${dataset} doesn't exist`); + + return await this.settings.adapter.clearDataset(dataset); + } + }, + + getWacGraph: { + params: { + dataset: { type: 'string', optional: true } + }, + async handler(ctx) { + const dataset = ctx.params.dataset || ctx.meta.dataset; + if (!dataset) throw new Error('Unable to get WAC graph. The parameter dataset is missing'); + return await this.settings.adapter.getWacGraph(dataset); + } + }, + list: { async handler() { return await this.settings.adapter.listDatasets(); @@ -69,6 +83,19 @@ const DatasetService = { await this.settings.adapter.deleteDataset(dataset); } + }, + + backup: { + params: { + dataset: { type: 'string' } + }, + async handler(ctx) { + const { dataset } = ctx.params; + + this.logger.info(`Backing up dataset ${dataset}...`); + await this.settings.adapter.backupDataset(dataset); + this.logger.info(`Dataset ${dataset} backed up`); + } } } } satisfies ServiceSchema; diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 649a7b929..752bfbd37 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -11,7 +11,12 @@ const modifyActions = [ 'ldp.resource.delete' ]; -const tripleStoreActions = ['triplestore.insert', 'triplestore.query', 'triplestore.update', 'triplestore.dropAll']; +const tripleStoreActions = [ + 'triplestore.insert', + 'triplestore.query', + 'triplestore.update', + 'triplestore.dataset.clear' +]; /** * Middleware that ensures that requests are conforming ACL records. diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index cc9f64fff..4f7a463be 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -10,19 +10,17 @@ const WebAclService = { name: 'webacl' as const, settings: { baseUrl: null, - graphName: 'http://semapps.org/webacl', superAdmins: [] }, dependencies: ['api', 'ontologies'], async created() { - const { baseUrl, graphName, superAdmins } = this.settings; + const { baseUrl, superAdmins } = this.settings; // @ts-expect-error TS(2322): Type '{ name: "webacl.resource"; settings: { baseUrl:... Remove this comment to see the full error message this.broker.createService({ mixins: [WebAclResourceService], settings: { - baseUrl, - graphName + baseUrl } }); @@ -31,7 +29,6 @@ const WebAclService = { mixins: [WebAclGroupService], settings: { baseUrl, - graphName, superAdmins } }); diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index aee22a73b..6c9daa55b 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -29,7 +29,6 @@ export const action = { if (!groupUri && !groupSlug) throw new MoleculerError('needs a groupSlug or a groupUri', 400, 'BAD_REQUEST'); - // @ts-expect-error TS(2345): Argument of type 'TypeFromSchemaParam<{ type: "str... Remove this comment to see the full error message if (!groupUri) groupUri = urlJoin(this.settings.baseUrl, '_groups', groupSlug); // TODO: check that the member exists ? @@ -52,7 +51,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: INSERT DATA { - GRAPH <${this.settings.graphName}> { + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> vcard:hasMember <${memberUri}> } } diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index d35f3f662..1537e85c2 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -71,7 +71,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: INSERT DATA { - GRAPH <${this.settings.graphName}> { + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> a vcard:Group } } diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index c89aadfc2..e24703645 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -43,7 +43,7 @@ export const action = { await ctx.call('triplestore.update', { query: sanitizeSparqlQuery` DELETE WHERE { - GRAPH <${this.settings.graphName}> { + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> ?p ?o. } } @@ -53,6 +53,6 @@ export const action = { await ctx.call('webacl.resource.deleteAllRights', { resourceUri: groupUri }); - await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, this.settings.graphName, ctx); + await removeAgentGroupOrAgentFromAuthorizations(groupUri, true, ctx); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index 1c41f3f29..732088a58 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -21,7 +21,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: ASK WHERE { - GRAPH <${this.settings.graphName}> { + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> a vcard:Group . } } diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index f845f8700..dacaa9a20 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -24,7 +24,7 @@ export const action = { PREFIX foaf: SELECT ?g WHERE - { GRAPH <${this.settings.graphName}> + { GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { ?g a vcard:Group. ?auth a acl:Authorization; acl:mode acl:Read; @@ -44,7 +44,7 @@ export const action = { PREFIX vcard: SELECT ?g WHERE { - GRAPH <${this.settings.graphName}> + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { ?g a vcard:Group } } `, diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 36cda9f83..30ee26a9a 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -42,7 +42,7 @@ export const action = { PREFIX vcard: SELECT ?m WHERE { - GRAPH <${this.settings.graphName}> { + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> vcard:hasMember ?m } } diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 310c683a4..8d1a09ba5 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -42,7 +42,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: ASK - WHERE { GRAPH <${this.settings.graphName}> { + WHERE { GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> vcard:hasMember <${memberId}> . } } `, diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 6cb066989..d06c3e683 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -52,7 +52,7 @@ export const action = { query: sanitizeSparqlQuery` PREFIX vcard: DELETE DATA { - GRAPH <${this.settings.graphName}> { + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> vcard:hasMember <${memberUri}> } } diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index 039130785..f18b8d07b 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -13,7 +13,6 @@ const WebaclGroupSchema = { name: 'webacl.group' as const, settings: { baseUrl: null, - graphName: null, superAdmins: [] }, dependencies: ['triplestore', 'webacl.resource', 'ldp.container'], diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index 82562ea4e..65eb89a82 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -85,13 +85,7 @@ export const action = { throw new MoleculerError('The rights cannot be added because they are incorrect', 400, 'BAD_REQUEST'); } - const currentPerms = await this.getExistingPerms( - ctx, - resourceUri, - this.settings.baseUrl, - this.settings.graphName, - isContainer - ); + const currentPerms = await this.getExistingPerms(ctx, resourceUri, this.settings.baseUrl, isContainer); // find the difference between addedRights and currentPerms. add only what is not existent yet. difference = addedRights.filter( @@ -132,7 +126,7 @@ export const action = { if (addRequest.length > 0) { await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }`, + query: `INSERT DATA { GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { ${addRequest} } }`, webId: 'system' }); } diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index 55b1aec98..9cd5d4d0e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -13,7 +13,7 @@ const DeleteAllRightsAction = { await ctx.call('triplestore.update', { query: ` PREFIX acl: - WITH <${this.settings.graphName}> + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { ?auth ?p2 ?o } WHERE { ?auth ?p <${resourceUri}>. FILTER (?p IN (acl:accessTo, acl:default ) ) diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index 735f5a996..265c852c8 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -11,7 +11,7 @@ const DeleteAllUserRightsAction = { await ctx.call('triplestore.update', { query: ` PREFIX acl: - WITH <${this.settings.graphName}> + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { ?auth acl:agent <${webId}> } WHERE { ?auth acl:agent <${webId}> } `, diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 19510eab8..5111b6f6e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -84,7 +84,7 @@ async function filterAcls(hasControl: any, uaSearchParam: any, acls: any) { return []; } -async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: any, graphName: any, isContainer: any) { +async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: any, isContainer: any) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. const uaSearchParam = getUserAgentSearchParam(user); @@ -103,10 +103,10 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an // Get the ACL for the resource - const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName); - const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName); - const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName); - const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName); + const reads = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read'); + const writes = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write'); + const appends = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append'); + const controls = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control'); document.push(...(await filterAcls(hasControl, uaSearchParam, reads))); document.push(...(await filterAcls(hasControl, uaSearchParam, writes))); @@ -114,10 +114,10 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an document.push(...(await filterAcls(hasControl, uaSearchParam, controls))); if (isContainer && hasControl) { - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName, true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', true))); } // Get the ACLs for all the parent containers @@ -130,10 +130,10 @@ async function getPermissions(ctx: any, resourceUri: any, baseUrl: any, user: an const containerUri = container.container.value; const aclUri = getAclUriFromResourceUri(baseUrl, containerUri); - const reads = await getAuthorizationNode(ctx, containerUri, aclUri, 'Read', graphName, true); - const writes = await getAuthorizationNode(ctx, containerUri, aclUri, 'Write', graphName, true); - const appends = await getAuthorizationNode(ctx, containerUri, aclUri, 'Append', graphName, true); - const controls = await getAuthorizationNode(ctx, containerUri, aclUri, 'Control', graphName, true); + const reads = await getAuthorizationNode(ctx, containerUri, aclUri, 'Read', true); + const writes = await getAuthorizationNode(ctx, containerUri, aclUri, 'Write', true); + const appends = await getAuthorizationNode(ctx, containerUri, aclUri, 'Append', true); + const controls = await getAuthorizationNode(ctx, containerUri, aclUri, 'Control', true); // we keep all the authorization nodes we found // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message @@ -202,6 +202,6 @@ export const action = { const isContainer = !skipResourceCheck && (await this.checkResourceOrContainerExists(ctx, resourceUri)); - return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, this.settings.graphName, isContainer); + return await getPermissions(ctx, resourceUri, this.settings.baseUrl, webId, isContainer); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index 1176cc7e6..4a142337e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -20,40 +20,31 @@ async function checkRights( askedRights: any, resultRights: any, ctx: any, - resourceUri: any, - resourceAclUri: any, + resourceUri: string, + resourceAclUri: string, uaSearchParam: any, - graphName: any, - isContainerDefault: any + isContainerDefault: boolean ) { for (const [p1, p2] of Object.entries(perms)) { if (askedRights[p1] && !resultRights[p1]) { - const permTuples = await getAuthorizationNode( - ctx, - resourceUri, - resourceAclUri, - p2, - graphName, - isContainerDefault - ); + const permTuples = await getAuthorizationNode(ctx, resourceUri, resourceAclUri, p2, isContainerDefault); const hasPerm = checkAgentPresent(permTuples, uaSearchParam); if (hasPerm) resultRights[p1] = hasPerm; } } } -async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, baseUrl: any, user: any, graphName: any) { +async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, baseUrl: any, user: any) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); const resultRights = {}; let groups; if (user !== 'anon') { // retrieve the groups of the user - groups = await getUserGroups(ctx, user, graphName); + groups = await getUserGroups(ctx, user); } const uaSearchParam = getUserAgentSearchParam(user, groups); - // @ts-expect-error TS(2554): Expected 8 arguments, but got 7. - await checkRights(askedRights, resultRights, ctx, resourceUri, resourceAclUri, uaSearchParam, graphName); + await checkRights(askedRights, resultRights, ctx, resourceUri, resourceAclUri, uaSearchParam, false); if (Object.keys(askedRights).length !== Object.keys(resultRights).length) { // we haven't found all the rights yet, we search in parent containers @@ -63,7 +54,7 @@ async function hasPermissions(ctx: any, resourceUri: any, askedRights: any, base const container = parentContainers.shift(); const containerUri = container.container.value; const aclUri = getAclUriFromResourceUri(baseUrl, containerUri); - await checkRights(askedRights, resultRights, ctx, containerUri, aclUri, uaSearchParam, graphName, true); + await checkRights(askedRights, resultRights, ctx, containerUri, aclUri, uaSearchParam, true); // if we are done finding all the asked rights, we return here, saving some processing. if (Object.keys(askedRights).length === Object.keys(resultRights).length) return resultRights; @@ -129,6 +120,6 @@ export const action = { if (Object.keys(rights).length === 0) rights = { read: true, write: true, append: true, control: true }; await this.checkResourceOrContainerExists(ctx, resourceUri); - return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId, this.settings.graphName); + return await hasPermissions(ctx, resourceUri, rights, this.settings.baseUrl, webId); } } satisfies ActionSchema; diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 970845419..2198b0093 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -32,7 +32,7 @@ const RemoveRightsAction = { query: ` PREFIX acl: DELETE DATA { - GRAPH <${this.settings.graphName}> { + GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { ${processedRights.map(right => `<${right.auth}> <${right.p}> <${right.o}> .`).join('\n')} } } diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 99fb186f9..1e81b9119 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -65,13 +65,7 @@ export const action = { if (newRights.length === 0) throw new MoleculerError('The rights cannot be changed because they are incorrect', 400, 'BAD_REQUEST'); - const currentPerms = await this.getExistingPerms( - ctx, - resourceUri, - this.settings.baseUrl, - this.settings.graphName, - isContainer - ); + const currentPerms = await this.getExistingPerms(ctx, resourceUri, this.settings.baseUrl, isContainer); // find the difference between newRights and currentPerms. add only what is not existent yet. and remove those that are not needed anymore const differenceAdd = newRights.filter( @@ -111,8 +105,9 @@ export const action = { } // we do the 2 calls in one, so it is in the same transaction, and will rollback in case of failure. + const wacGraphName = await ctx.call('triplestore.dataset.getWacGraph'); await ctx.call('triplestore.update', { - query: `INSERT DATA { GRAPH <${this.settings.graphName}> { ${addRequest} } }; DELETE DATA { GRAPH <${this.settings.graphName}> { ${deleteRequest} } }`, + query: `INSERT DATA { GRAPH <${wacGraphName}> { ${addRequest} } }; DELETE DATA { GRAPH <${wacGraphName}> { ${deleteRequest} } }`, webId: 'system' }); diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index a0f630237..46e715c5d 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -43,11 +43,10 @@ const filterAclsOnlyAgent = (acl: any) => agentPredicates.includes(acl.p.value); const WebaclResourceService = { name: 'webacl.resource' as const, settings: { - baseUrl: null, - graphName: null + baseUrl: null }, dependencies: ['triplestore', 'jsonld', 'ldp.link-header'], - started() { + async started() { // Register so that HEAD requests to LDP resources & containers may return links to ACL this.broker.call('ldp.link-header.register', { actionName: 'webacl.resource.getLink' }); }, @@ -89,7 +88,7 @@ const WebaclResourceService = { await this.broker.waitForServices(['ldp.container', 'ldp.resource']); if (resourceUri.startsWith(urlJoin(this.settings.baseUrl, '_groups'))) { - const exists = await aclGroupExists(resourceUri, ctx, this.settings.graphName); + const exists = await aclGroupExists(resourceUri, ctx); if (!exists) throw new MoleculerError(`WAC group not found ${resourceUri}`, 404, 'NOT_FOUND'); return false; // it is never a container } @@ -105,21 +104,21 @@ const WebaclResourceService = { } return true; }, - async getExistingPerms(ctx, resourceUri, baseUrl, graphName, isContainer) { + async getExistingPerms(ctx, resourceUri, baseUrl, isContainer) { const resourceAclUri = getAclUriFromResourceUri(baseUrl, resourceUri); const document = []; - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read'))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write'))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append'))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control'))); if (isContainer) { - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', graphName, true))); - document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', graphName, true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Read', true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Write', true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Append', true))); + document.push(...(await getAuthorizationNode(ctx, resourceUri, resourceAclUri, 'Control', true))); } return document diff --git a/src/middleware/packages/webacl/utils.ts b/src/middleware/packages/webacl/utils.ts index b0eebb179..ffc2c27f2 100644 --- a/src/middleware/packages/webacl/utils.ts +++ b/src/middleware/packages/webacl/utils.ts @@ -55,8 +55,8 @@ const PREFIXES = 'PREFIX ldp: \n' + 'PREFIX rdfs: \n'; -const getUserGroups = async (ctx: any, user: any, graphName: any) => { - const query = PREFIXES + USER_GROUPS_QUERY(user, graphName); +const getUserGroups = async (ctx: any, user: any) => { + const query = PREFIXES + USER_GROUPS_QUERY(user, await ctx.call('triplestore.dataset.getWacGraph')); const groups = await ctx.call('triplestore.query', { query, @@ -68,13 +68,13 @@ const getUserGroups = async (ctx: any, user: any, graphName: any) => { const AUTHORIZATION_NODE_QUERY = ( mode: any, - accesToOrDefault: any, + accessToOrDefault: any, resource: any, - graphName: any + graphName: string ) => `SELECT ?auth ?p ?o WHERE { GRAPH <${graphName}> { ?auth - acl:${accesToOrDefault} <${resource}>; + acl:${accessToOrDefault} <${resource}>; acl:mode acl:${mode}; a acl:Authorization ; ?p ?o. @@ -82,17 +82,17 @@ WHERE { GRAPH <${graphName}> { const getAuthorizationNode = async ( ctx: any, - resourceUri: any, - resourceAclUri: any, + resourceUri: string, + resourceAclUri: string, mode: any, - graphName: any, - searchForDefault?: any + searchForDefault?: boolean ) => { + const wacGraphName = await ctx.call('triplestore.dataset.getWacGraph'); const query = `PREFIX rdf: \nPREFIX acl: \n${AUTHORIZATION_NODE_QUERY( mode, searchForDefault ? 'default' : 'accessTo', resourceUri, - graphName + wacGraphName )}`; const auths = await ctx.call('triplestore.query', { @@ -175,12 +175,12 @@ const checkAgentPresent = (acls: any, agentSearchParam: any) => { const agentPredicates = [FULL_AGENTCLASS_URI, FULL_AGENT_URI, FULL_AGENT_GROUP]; -async function aclGroupExists(groupUri: any, ctx: any, graphName: any) { +async function aclGroupExists(groupUri: any, ctx: any) { return await ctx.call('triplestore.query', { query: ` PREFIX vcard: ASK - WHERE { GRAPH <${graphName}> { + WHERE { GRAPH <${await ctx.call('triplestore.dataset.getWacGraph')}> { <${groupUri}> a vcard:Group . } } `, @@ -255,18 +255,20 @@ async function convertBodyToTriples(body: any, contentType: string) { // TODO: if one day you code a delete Profile action (probably in webid service) // then you msut call the below method after deleting the user (and pass false to isGroup) -async function removeAgentGroupOrAgentFromAuthorizations(uri: any, isGroup: any, graphName: any, ctx: any) { +async function removeAgentGroupOrAgentFromAuthorizations(uri: any, isGroup: any, ctx: any) { + const wacGraphName = await ctx.call('triplestore.dataset.getWacGraph'); + // removing the acl:agentGroup relation to some Authorizations await ctx.call('triplestore.update', { query: `PREFIX acl: - DELETE WHERE { GRAPH <${graphName}> { ?auth ${isGroup ? 'acl:agentGroup' : 'acl:agent'} <${uri}> }}`, + DELETE WHERE { GRAPH <${wacGraphName}> { ?auth ${isGroup ? 'acl:agentGroup' : 'acl:agent'} <${uri}> }}`, webId: 'system' }); // removing the Authorizations that are now empty await ctx.call('triplestore.update', { query: `PREFIX acl: - WITH <${graphName}> + WITH <${wacGraphName}> DELETE { ?auth ?p ?o } WHERE { ?auth a acl:Authorization; ?p ?o FILTER NOT EXISTS { ?auth acl:agent ?z } diff --git a/src/middleware/tests/account/account.test.ts b/src/middleware/tests/account/account.test.ts index 79808ba6d..b85faf64c 100644 --- a/src/middleware/tests/account/account.test.ts +++ b/src/middleware/tests/account/account.test.ts @@ -1,21 +1,25 @@ import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; -import { createAccount, fetchServer } from '../utils.ts'; +import { backupAllDatasets, clearAllDatasets, createAccount, fetchServer } from '../utils.ts'; import * as CONFIG from '../config.ts'; jest.setTimeout(50000); let broker: ServiceBroker; let alice: any; -describe.each([true])('Account tests with allowSlugs: %s', (allowSlugs: boolean) => { +describe.each(['ng', 'fuseki'])('Account tests with triplestore %s', (triplestore: string) => { beforeAll(async () => { - broker = await initialize(allowSlugs); + broker = await initialize(triplestore); await broker.start(); - alice = await createAccount(broker, 'alice'); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice4'); }); afterAll(async () => { - if (broker) await broker.stop(); + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } }); test('WebID is created', async () => { @@ -27,10 +31,22 @@ describe.each([true])('Account tests with allowSlugs: %s', (allowSlugs: boolean) expect(webIdData).toMatchObject({ id: alice.webId, type: expect.arrayContaining(['foaf:Agent', 'foaf:Person']), - 'foaf:nick': 'alice', + 'foaf:nick': 'alice4', 'pim:storage': rootContainerUri, 'solid:oidcIssuer': CONFIG.HOME_URL!.replace(/\/$/, ''), - 'solid:publicTypeIndex': publicTypeIndexUri + 'solid:publicTypeIndex': publicTypeIndexUri, + assertionMethod: expect.objectContaining({ + type: expect.arrayContaining(['sec:Multikey', 'sec:VerificationMethod', 'urn:ed25519-key']), + controller: alice.webId, + owner: alice.webId, + publicKeyMultibase: expect.anything() + }), + publicKey: expect.objectContaining({ + type: expect.arrayContaining(['sec:VerificationMethod', 'https://www.w3.org/ns/auth/rsa#RSAKey']), + controller: alice.webId, + owner: alice.webId, + publicKeyPem: expect.anything() + }) }); }); @@ -39,18 +55,6 @@ describe.each([true])('Account tests with allowSlugs: %s', (allowSlugs: boolean) const containersUris = await alice.call('ldp.container.getUris', { containerUri: rootContainerUri }); expect(containersUris).toHaveLength(5); // 2 containers and 3 resources - - if (allowSlugs) { - expect(containersUris).toStrictEqual( - expect.arrayContaining([ - 'http://localhost:3000/alice/public-key', - 'http://localhost:3000/alice/key', - 'http://localhost:3000/alice/private-type-index', - 'http://localhost:3000/alice/public-type-index', - 'http://localhost:3000/alice/webid' - ]) - ); - } }); test('Public type index is created', async () => { diff --git a/src/middleware/tests/account/initialize.ts b/src/middleware/tests/account/initialize.ts index f7162125f..52395a7df 100644 --- a/src/middleware/tests/account/initialize.ts +++ b/src/middleware/tests/account/initialize.ts @@ -1,22 +1,17 @@ import { ServiceBroker } from 'moleculer'; import fs from 'fs'; +import { fileURLToPath } from 'url'; import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; import { as, pair, petr, semapps, solid, vcard } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; -import { fileURLToPath } from 'url'; +import { getTripleStoreAdapter } from '../utils.ts'; import * as CONFIG from '../config.ts'; -import { listDatasets, dropDataset } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const initialize = async (allowSlugs = true): Promise => { - const datasets: string[] = await listDatasets(); - for (let dataset of datasets) { - await dropDataset(dataset); - } - +const initialize = async (triplestore: string): Promise => { const uploadsPath = pathJoin(__dirname, '../uploads'); if (fs.existsSync(uploadsPath)) { fs.readdirSync(uploadsPath).forEach(f => fs.rmSync(`${uploadsPath}/${f}`, { recursive: true, force: true })); @@ -40,10 +35,7 @@ const initialize = async (allowSlugs = true): Promise => { baseUrl: CONFIG.HOME_URL, baseDir: path.resolve(__dirname, '..'), triplestore: { - url: CONFIG.SPARQL_ENDPOINT, - user: CONFIG.JENA_USER, - password: CONFIG.JENA_PASSWORD, - secure: false // TODO Remove when we move to Fuseki 5 + adapter: getTripleStoreAdapter(triplestore) }, containers: [], ontologies: [as, pair, petr, solid, vcard, semapps], @@ -51,7 +43,7 @@ const initialize = async (allowSlugs = true): Promise => { webfinger: false, webid: false, ldp: { - allowSlugs + allowSlugs: false } } }); diff --git a/src/middleware/tests/triplestore/initialize.ts b/src/middleware/tests/triplestore/initialize.ts index 34612cc27..5aeceea6f 100644 --- a/src/middleware/tests/triplestore/initialize.ts +++ b/src/middleware/tests/triplestore/initialize.ts @@ -1,9 +1,10 @@ import { ServiceBroker } from 'moleculer'; -import { FusekiAdapter, NextGraphAdapter, TripleStoreService } from '@semapps/triplestore'; +import { TripleStoreService } from '@semapps/triplestore'; import { JsonLdService } from '@semapps/jsonld'; import { OntologiesService } from '@semapps/ontologies'; import ApiGatewayService from 'moleculer-web'; import * as CONFIG from '../config.ts'; +import { getTripleStoreAdapter } from '../utils.ts'; export default async (triplestore: string) => { const broker = new ServiceBroker({ @@ -36,34 +37,12 @@ export default async (triplestore: string) => { } }); - let adapter; - if (triplestore === 'ng') { - // TODO : Environmentalize the nextgraph settings. - adapter = new NextGraphAdapter({ - adminUserId: '-n1RqVQA0k2sqm-51CbIYnoS4Zhh89IRH1cxnLKnVlYA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - mappingsNuri: - 'did:ng:o:7PeIu8q34t7h6XLqZIDt7dbuGjGruBz3ZWeQ7QOc2EoA:v:UmGokb5dUKofXw_IXFRl5xmb3Pbo5S2KWK6ShU01GkcA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - serverPeerId: 'QlJkY0KELV4W1aVZehn6Qvx5eauRkICSJbdYqIbFHPEA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - adminUserKey: 'bE0rIy0V8YQAEfXhqYas-erDrddazpTjhsoJHVqvSDIA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - clientPeerKey: 'HV_9Rh-yDpEqsvtwYUjcxqIARUnuP8g2JA4hEH1Nh7QA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - serverAddr: '127.0.0.1:14400' // TODO : Environmentalize the nextgraph settings. Even though this value is the genric one for the nextgraph broker - }); - } else if (triplestore === 'fuseki') { - adapter = new FusekiAdapter({ - url: CONFIG.SPARQL_ENDPOINT, - user: CONFIG.JENA_USER, - password: CONFIG.JENA_PASSWORD - }); - } else { - throw new Error('Triplestore not supported'); - } - // @ts-ignore Argument of type '{ mixins: { name: ... broker.createService({ mixins: [TripleStoreService], settings: { defaultDataset: CONFIG.MAIN_DATASET, - adapter + adapter: getTripleStoreAdapter(triplestore) } }); diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index 3e335d674..7adaa61d7 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -13,7 +13,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor await broker.waitForServices(['triplestore']); if (await broker.call('triplestore.dataset.exist', { dataset: testDataset })) { - await broker.call('triplestore.dropAll', { dataset: testDataset }); + await broker.call('triplestore.dataset.clear', { dataset: testDataset }); } else { await broker.call('triplestore.dataset.create', { dataset: testDataset }); } @@ -67,16 +67,15 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor describe('Insert action', () => { test('Insert JSON-LD data', async () => { - const jsonLdData = { - '@context': { - ex: 'http://example.org/', - predicate: 'ex:predicate' - }, - '@id': 'http://example.org/subject', - predicate: 'object' - }; await broker.call('triplestore.insert', { - resource: jsonLdData, + resource: { + '@context': { + ex: 'http://example.org/', + predicate: 'ex:predicate' + }, + '@id': 'http://example.org/subject', + predicate: 'object' + }, dataset: testDataset }); const result = await broker.call('triplestore.query', { @@ -90,18 +89,17 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor }); test('Insert JSON-LD data with type', async () => { - const jsonLdData = { - '@context': { - ex: 'http://example.org/', - name: 'ex:name', - type: '@type' - }, - '@id': 'http://example.org/person1', - type: 'http://example.org/Person', - name: 'John Doe' - }; await broker.call('triplestore.insert', { - resource: jsonLdData, + resource: { + '@context': { + ex: 'http://example.org/', + name: 'ex:name', + type: '@type' + }, + '@id': 'http://example.org/person1', + type: 'http://example.org/Person', + name: 'John Doe' + }, dataset: testDataset }); const result = await broker.call('triplestore.query', { @@ -113,17 +111,16 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor if (triplestore === 'fuseki') { test('Insert data with graph name', async () => { - const jsonLdData = { - '@context': { - ex: 'http://example.org/', - predicate: 'ex:predicate' - }, - '@id': 'http://example.org/subject', - predicate: 'object' - }; const graphName = 'http://example.org/graph'; await broker.call('triplestore.insert', { - resource: jsonLdData, + resource: { + '@context': { + ex: 'http://example.org/', + predicate: 'ex:predicate' + }, + '@id': 'http://example.org/subject', + predicate: 'object' + }, graphName, dataset: testDataset }); @@ -135,56 +132,17 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor }); } - test('Insert data with wildcard dataset inserts into all datasets', async () => { - const secondDataset = 'test_dataset2'; - // Create the second dataset - await broker.call('triplestore.dataset.create', { dataset: secondDataset }); - - const jsonLdData = { - '@context': { - ex: 'http://example.org/', - predicate: 'ex:predicate' - }, - '@id': 'http://example.org/subject', - predicate: 'object' - }; - await broker.call('triplestore.insert', { - resource: jsonLdData, - dataset: '*' - }); - - // Assert in first dataset - let result = await broker.call('triplestore.query', { - // modify the query to target the data inserted in this same test - query: 'SELECT * WHERE { ?s ?p ?o }', - dataset: testDataset - }); - // includes the data inserted in the previous tests - expect(result).toHaveLength(3); - - // Assert in second dataset - result = await broker.call('triplestore.query', { - query: 'SELECT * WHERE { ?s ?p ?o }', - dataset: secondDataset - }); - expect(result).toHaveLength(1); - - // Clean up - await broker.call('triplestore.dataset.delete', { dataset: secondDataset }); - }); - test('Insert should fail with non-existent dataset', async () => { - const jsonLdData = { - '@context': { - ex: 'http://example.org/', - predicate: 'ex:predicate' - }, - '@id': 'http://example.org/subject', - predicate: 'object' - }; await expect( broker.call('triplestore.insert', { - resource: jsonLdData, + resource: { + '@context': { + ex: 'http://example.org/', + predicate: 'ex:predicate' + }, + '@id': 'http://example.org/subject', + predicate: 'object' + }, dataset: 'non_existent_dataset' }) ).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); @@ -227,18 +185,6 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor test('SELECT query with JSON result', async () => { const result = await broker.call('triplestore.query', { query: 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 5', - // accept: 'application/json', - dataset: testDataset - }); - expect(Array.isArray(result)).toBeTruthy(); - // includes the data inserted in the previous tests - expect(result.length).toBe(5); - }); - - test('SELECT query with SPARQL JSON result', async () => { - const result = await broker.call('triplestore.query', { - query: 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 5', - // accept: 'application/sparql-results+json', dataset: testDataset }); expect(Array.isArray(result)).toBeTruthy(); @@ -249,7 +195,6 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor test('ASK query', async () => { const result = await broker.call('triplestore.query', { query: 'ASK WHERE { ?s a }', - // accept: 'application/json', dataset: testDataset }); expect(typeof result).toBe('boolean'); @@ -259,7 +204,6 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor test('CONSTRUCT query with JSON result', async () => { const result = await broker.call('triplestore.query', { query: 'CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 5', - // accept: 'application/json', dataset: testDataset }); expect(typeof result).toBe('object'); @@ -399,60 +343,6 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor expect(result[0].name.value).toBe('John Updated Again'); }); - test('UPDATE with wildcard dataset updates all datasets', async () => { - const secondDataset = 'test_dataset2'; - // Create the second dataset - await broker.call('triplestore.dataset.create', { dataset: secondDataset }); - - // Insert the same data into both datasets - const initialData = { - '@context': { - ex: 'http://example.org/', - age: 'ex:age' - }, - '@id': 'http://example.org/person1', - age: '29' - }; - await broker.call('triplestore.insert', { - resource: initialData, - dataset: testDataset - }); - await broker.call('triplestore.insert', { - resource: initialData, - dataset: secondDataset - }); - - // Perform the update with wildcard - const updateQuery = ` - DELETE { ?age } - INSERT { "30" } - WHERE { ?age } - `; - await broker.call('triplestore.update', { - query: updateQuery, - dataset: '*' - }); - - // Assert in first dataset - let result = await broker.call('triplestore.query', { - query: 'SELECT ?age WHERE { ?age }', - dataset: testDataset - }); - expect(result).toHaveLength(1); - expect(result[0].age.value).toBe('30'); - - // Assert in second dataset - result = await broker.call('triplestore.query', { - query: 'SELECT ?age WHERE { ?age }', - dataset: secondDataset - }); - expect(result).toHaveLength(1); - expect(result[0].age.value).toBe('30'); - - // Clean up - await broker.call('triplestore.dataset.delete', { dataset: secondDataset }); - }); - test('UPDATE should fail with non-existent dataset', async () => { const updateQuery = ` INSERT { "30" } @@ -467,7 +357,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor }); }); - describe('DropAll action', () => { + describe('Dataset clear action', () => { beforeEach(async () => { // Insert test data const jsonLdData = { @@ -494,7 +384,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor }); expect(result.length).toBeGreaterThan(0); // Drop all data - await broker.call('triplestore.dropAll', { + await broker.call('triplestore.dataset.clear', { dataset: testDataset }); // Verify data is gone @@ -507,7 +397,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor test('DropAll should fail with non-existent dataset', async () => { await expect( - broker.call('triplestore.dropAll', { + broker.call('triplestore.dataset.clear', { dataset: 'non_existent_dataset' }) ).rejects.toThrow("The dataset non_existent_dataset doesn't exist"); @@ -628,8 +518,4 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor ).toBeFalsy(); }); }); - - describe('Error handling', () => { - // TODO: Add error handling tests - }); }); diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 579b563ef..9dfc5419b 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -1,7 +1,7 @@ -import urlJoin from 'url-join'; import fetch from 'node-fetch'; import Redis from 'ioredis'; import { ActionParamSchema, CallingOptions, ServiceBroker, ServiceSchema } from 'moleculer'; +import { NextGraphAdapter, FusekiAdapter } from '@semapps/triplestore'; import { Account } from '@semapps/auth'; import { delay } from '@semapps/ldp'; import * as CONFIG from './config.ts'; @@ -11,36 +11,45 @@ type FetchOptions = Omit & { headers?: fetch.Headers; }; -export const listDatasets = async (): Promise => { - const response = await fetch(`${CONFIG.SPARQL_ENDPOINT}$/datasets`, { - headers: { - Authorization: `Basic ${Buffer.from(`${CONFIG.JENA_USER}:${CONFIG.JENA_PASSWORD}`).toString('base64')}` - } - }); - - if (response.ok) { - const json = await response.json(); - return json.datasets.map((dataset: any) => dataset['ds.name'].substring(1)); +export const getTripleStoreAdapter = (triplestore: string) => { + if (triplestore === 'ng') { + // TODO : Environmentalize the nextgraph settings. + return new NextGraphAdapter({ + adminUserId: '-n1RqVQA0k2sqm-51CbIYnoS4Zhh89IRH1cxnLKnVlYA', + mappingsNuri: + 'did:ng:o:7PeIu8q34t7h6XLqZIDt7dbuGjGruBz3ZWeQ7QOc2EoA:v:UmGokb5dUKofXw_IXFRl5xmb3Pbo5S2KWK6ShU01GkcA', + serverPeerId: 'QlJkY0KELV4W1aVZehn6Qvx5eauRkICSJbdYqIbFHPEA', + adminUserKey: 'bE0rIy0V8YQAEfXhqYas-erDrddazpTjhsoJHVqvSDIA', + clientPeerKey: 'HV_9Rh-yDpEqsvtwYUjcxqIARUnuP8g2JA4hEH1Nh7QA', + serverAddr: '127.0.0.1:14400', + backupsPath: './data/nextgraph' + }); + } else if (triplestore === 'fuseki') { + return new FusekiAdapter({ + url: CONFIG.SPARQL_ENDPOINT, + user: CONFIG.JENA_USER, + password: CONFIG.JENA_PASSWORD + }); } else { - return []; + throw new Error('Triplestore not supported'); } }; -export const dropDataset = (dataset: string) => - // @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message - fetch(urlJoin(CONFIG.SPARQL_ENDPOINT, dataset, 'update'), { - method: 'POST', - body: 'update=DROP+ALL', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - Authorization: `Basic ${Buffer.from(`${CONFIG.JENA_USER}:${CONFIG.JENA_PASSWORD}`).toString('base64')}` +export const clearAllDatasets = async (broker: ServiceBroker) => { + const datasets: string[] = await broker.call('triplestore.dataset.list'); + for (const dataset of datasets) { + if (await broker.call('triplestore.dataset.exist', { dataset })) { + await broker.call('triplestore.dataset.clear', { dataset }); } - }); + } +}; -export const dropAllDatasets = async () => { - const datasets = await listDatasets(); - for (let dataset of datasets) { - await dropDataset(dataset); +export const backupAllDatasets = async (broker: ServiceBroker) => { + const datasets: string[] = await broker.call('triplestore.dataset.list'); + for (const dataset of datasets) { + if (await broker.call('triplestore.dataset.exist', { dataset })) { + await broker.call('triplestore.dataset.backup', { dataset }); + } } }; From e22c972ee741f6d44117747b6d70a031ef7b2dd3 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Tue, 13 Jan 2026 19:07:22 +0100 Subject: [PATCH 150/165] Cleanup session handling --- .../triplestore/adapters/nextgraph.ts | 59 +++++++------------ 1 file changed, 20 insertions(+), 39 deletions(-) diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index f3cf68f5e..34087fdbe 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -33,7 +33,7 @@ const openSessions: { [dataset: string]: Session } = {}; export default class NextGraphAdapter extends BaseAdapter { name = 'nextgraph'; - private settings: { adminUserId: string; mappingsNuri: string; backupsPath: string }; + private settings: { adminUserId: string; mappingsNuri: string; backupsPath?: string }; private adminSessionid: string = ''; @@ -87,9 +87,8 @@ export default class NextGraphAdapter extends BaseAdapter { } async query(dataset: string, query: string) { - let session; try { - session = await this.openSession(dataset); + const session = await this.openOrGetSession(dataset); const result = await ng.sparql_query(session.session_id, query); const regex = /(CONSTRUCT|SELECT|ASK).*/gm; @@ -108,20 +107,15 @@ export default class NextGraphAdapter extends BaseAdapter { } } catch (error) { throw new Error(`NextGraph query failed: ${error}\nQuery: ${query}\nDataset: ${dataset}`); - } finally { - this.closeSession(session); } } async update(dataset: any, query: string) { - let session; try { - session = await this.openSession(dataset); + const session = await this.openOrGetSession(dataset); await ng.sparql_update(session.session_id, query); } catch (error) { throw new Error(`NextGraph update failed: ${error}\nQuery: ${query}\nDataset: ${dataset}`); - } finally { - this.closeSession(session); } } @@ -235,28 +229,24 @@ export default class NextGraphAdapter extends BaseAdapter { } async clearDataset(dataset: string) { - let session: any; try { - session = await this.openSession(dataset); + const session = await this.openOrGetSession(dataset); // Delete all triples in all documents // TODO Delete also the documents when the method will be available await ng.sparql_update(session.session_id, 'DELETE WHERE { GRAPH ?g { ?s ?p ?o } }'); } catch (error) { throw new Error(`NextGraph dropAll failed: ${error}\nDataset: ${dataset}`); - } finally { - this.closeSession(session); } } async backupDataset(dataset: string) { - let session; try { if (!this.settings.backupsPath) throw new Error('The backupsPath setting is required in the NextGraph adapter if you want to backup data'); fs.mkdirSync(this.settings.backupsPath, { recursive: true, mode: 0o777 }); - session = await this.openSession(dataset); + const session = await this.openOrGetSession(dataset); const dump = await ng.rdf_dump(session.session_id); @@ -272,8 +262,6 @@ export default class NextGraphAdapter extends BaseAdapter { // fs.writeFileSync(pathJoin(this.settings.backupsPath, 'mappings.nq'), mappingsDump); } catch (error) { throw new Error(`NextGraph backupDataset failed: ${error}\nDataset: ${dataset}`); - } finally { - this.closeSession(session); } } @@ -312,15 +300,12 @@ export default class NextGraphAdapter extends BaseAdapter { } async createNamedGraph(dataset: string) { - let session; try { - session = await this.openSession(dataset); + const session = await this.openOrGetSession(dataset); const protectedRepoId = session.protected_store_id.substring(2, 46); return await ng.doc_create(session.session_id, 'Graph', 'data:graph', 'store', 'protected', protectedRepoId); } catch (error) { throw new Error(`NextGraph createNamedGraph failed: ${error}\nDataset: ${dataset}`); - } finally { - this.closeSession(session); } } @@ -338,30 +323,24 @@ export default class NextGraphAdapter extends BaseAdapter { } async clearNamedGraph(dataset: string, graphUri: string) { - let session; try { - session = await this.openSession(dataset); + const session = await this.openOrGetSession(dataset); await ng.sparql_update(session.session_id, 'DELETE WHERE { ?s ?p ?o }', graphUri); } catch (error) { throw new Error(`NextGraph clearNamedGraph failed: ${error}\nDataset: ${dataset}\nGraph URI: ${graphUri}`); - } finally { - this.closeSession(session); } } async deleteNamedGraph(dataset: string, graphUri: string): Promise { - let session; try { - session = await this.openSession(dataset); + const session = await this.openOrGetSession(dataset); await ng.sparql_update(session.session_id, `DROP GRAPH <${graphUri}>`); } catch (error) { throw new Error(`NextGraph deleteNamedGraph failed: ${error}\nDataset: ${dataset}\nGraph URI: ${graphUri}`); - } finally { - this.closeSession(session); } } - async openSession(dataset: string): Promise { + async openOrGetSession(dataset: string): Promise { try { if (!openSessions[dataset]) { const userId = await this.getUserIdForDataset(dataset); @@ -373,9 +352,9 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async closeSession(session?: Session) { + async closeSession(session: Session) { try { - // await ng.session_headless_stop(session.session_id, true); + await ng.session_headless_stop(session.session_id, true); } catch (error) { throw new Error(`NextGraph closeSession failed: ${error}`); } @@ -406,14 +385,16 @@ export default class NextGraphAdapter extends BaseAdapter { } async cleanup() { - if (this.adminSessionid) { - try { - await ng.session_headless_stop(this.adminSessionid, false); - // TODO Close all sessions - this.getLogger().info('NextGraph adapter cleaned up'); - } catch (error) { - throw new Error(`NextGraph cleanup failed: ${error}`); + try { + for (const session of Object.values(openSessions)) { + await this.closeSession(session); } + + if (this.adminSessionid) await ng.session_headless_stop(this.adminSessionid, true); + + this.getLogger().info('NextGraph adapter cleaned up'); + } catch (error) { + throw new Error(`NextGraph cleanup failed: ${error}`); } } } From 084411b67ef3f9c6eecf701a5e7c803aef3e7b82 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 14 Jan 2026 18:17:17 +0100 Subject: [PATCH 151/165] Most LDP tests working except controlled containers/resources and API --- .../ldp/services/container/actions/get.ts | 2 +- .../ldp/services/resource/actions/delete.ts | 9 ++- .../ldp/services/resource/actions/exist.ts | 17 ++++- .../ldp/services/resource/actions/put.ts | 5 +- src/middleware/packages/migration/2-0-0.ts | 4 +- src/middleware/packages/migration/service.ts | 12 ++-- .../packages/triplestore/actions/insert.ts | 4 +- .../packages/triplestore/actions/query.ts | 4 +- .../packages/triplestore/actions/update.ts | 4 +- .../triplestore/adapters/nextgraph.ts | 15 ++-- src/middleware/tests/ldp/api.test.ts | 24 ++++--- src/middleware/tests/ldp/container.test.ts | 23 +++--- .../tests/ldp/content-negotiation.test.ts | 24 ++++--- .../tests/ldp/controlled-container.test.ts | 29 +++----- .../tests/ldp/controlled-resource.test.ts | 14 ++-- src/middleware/tests/ldp/headers.test.ts | 72 ++++++++++--------- src/middleware/tests/ldp/initialize.ts | 16 ++--- src/middleware/tests/ldp/paging.test.ts | 24 ++++--- src/middleware/tests/ldp/resource.test.ts | 53 ++++---------- 19 files changed, 174 insertions(+), 181 deletions(-) diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 49c45af3e..73fa26a3a 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -58,7 +58,7 @@ const Schema = { CONSTRUCT { <${containerUri}> ?p ?o . } - FROM <${containerUri}> + FROM <${getSlugFromUri(containerUri)}> WHERE { <${containerUri}> ?p ?o . MINUS { <${containerUri}> ldp:contains ?o } . diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 4279f2ec4..44ab9b64b 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,5 +1,6 @@ import fs from 'fs'; import { ActionSchema } from 'moleculer'; +import { getSlugFromUri } from '../../../utils.ts'; const Schema = { visibility: 'public', @@ -32,12 +33,12 @@ const Schema = { } ); - await ctx.call('triplestore.named-graph.clear', { uri: resourceUri }); + await ctx.call('triplestore.named-graph.clear', { uri: getSlugFromUri(resourceUri) }); - await ctx.call('triplestore.named-graph.delete', { uri: resourceUri }); + await ctx.call('triplestore.named-graph.delete', { uri: getSlugFromUri(resourceUri) }); // We must detach the resource from the containers after deletion, otherwise the permissions may fail - const containersUris = await ctx.call('ldp.resource.getContainers', { resourceUri }); + const containersUris: string[] = await ctx.call('ldp.resource.getContainers', { resourceUri }); for (const containerUri of containersUris) { await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId: 'system' }); } @@ -58,8 +59,6 @@ const Schema = { dataset: ctx.meta.dataset }; - ctx.call('triplestore.deleteOrphanBlankNodes'); - if (!ctx.meta.skipEmitEvent) { ctx.emit('ldp.resource.deleted', returnValues); } diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index ab459e70b..4fb8889f1 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -12,7 +12,22 @@ const Schema = { const { resourceUri, acceptTombstones } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; - const exist = await ctx.call('triplestore.named-graph.exist', { uri: getSlugFromUri(resourceUri) }); + let exist = await ctx.call('triplestore.named-graph.exist', { uri: getSlugFromUri(resourceUri) }); + + if (exist) { + // If the named graph exist, ensure it is not empty (otherwise consider the resource doesn't exist) + exist = await ctx.call('triplestore.query', { + query: ` + ASK + WHERE { + GRAPH <${getSlugFromUri(resourceUri)}> { + ?s ?p ?o + } + } + `, + webId: 'system' + }); + } // If resource exists but we don't want tombstones, check the resource type if (exist && !acceptTombstones) { diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 537d63ab9..11b1a16cf 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,6 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { ActionSchema, Errors } from 'moleculer'; -import { cleanUndefined } from '../../../utils.ts'; +import { cleanUndefined, getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; @@ -100,7 +100,7 @@ const Schema = { ); // Generate the query - let query = `WITH <${resourceUri}>\n`; + let query = `WITH <${getSlugFromUri(resourceUri)}>\n`; if (triplesToRemove.length > 0) query += `DELETE { ${this.triplesToString(triplesToRemove)} } `; if (triplesToAdd.length > 0) query += `INSERT { ${this.triplesToString(triplesToAdd)} } `; query += 'WHERE { '; @@ -136,7 +136,6 @@ const Schema = { oldData, newData, webId, - // @ts-expect-error TS(2339): Property 'dataset' does not exist on type '{}'. dataset: ctx.meta.dataset }, { diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index c9640f15b..514d5d0a5 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -367,7 +367,7 @@ export default { PREFIX solid: SELECT ?typeRegistrationUri WHERE { - GRAPH ?typeIndexUri { + GRAPH ?g { ?typeIndexUri a solid:TypeIndex, ${isPrivate ? 'solid:UnlistedDocument' : 'solid:ListedDocument'} . ?typeIndexUri solid:hasTypeRegistration ?typeRegistrationUri . } @@ -399,7 +399,7 @@ export default { PREFIX solid: DELETE WHERE { - GRAPH ?typeIndexUri { + GRAPH ?g { ?typeIndexUri solid:hasTypeRegistration <${typeRegistrationUri}> . } } diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts index 5ed3338b0..647d1a01d 100644 --- a/src/middleware/packages/migration/service.ts +++ b/src/middleware/packages/migration/service.ts @@ -66,7 +66,7 @@ const MigrationService = { // Change all references in WebACL graph await ctx.call('triplestore.update', { query: ` - WITH + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { ?s ?p <${oldUri}> } INSERT { ?s ?p <${newUri}> } WHERE { ?s ?p <${oldUri}> } @@ -87,7 +87,7 @@ const MigrationService = { await ctx.call('triplestore.update', { query: ` - WITH + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { <${oldGroupUri}> ?p ?o } INSERT { <${newGroupUri}> ?p ?o } WHERE { <${oldGroupUri}> ?p ?o } @@ -98,7 +98,7 @@ const MigrationService = { await ctx.call('triplestore.update', { query: ` - WITH + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { ?s ?p <${oldGroupUri}> } INSERT { ?s ?p <${newGroupUri}> } WHERE { ?s ?p <${oldGroupUri}> } @@ -123,7 +123,7 @@ const MigrationService = { await ctx.call('triplestore.update', { query: ` - WITH + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { <${oldAclUri}> ?p ?o } INSERT { <${newAclUri}> ?p ?o } WHERE { <${oldAclUri}> ?p ?o } @@ -142,7 +142,7 @@ const MigrationService = { // Remove user from all WebACL groups he may be member of await ctx.call('triplestore.update', { query: ` - WITH + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { ?groupUri <${userUri}> } WHERE { ?groupUri <${userUri}> } `, @@ -153,7 +153,7 @@ const MigrationService = { // Remove all authorization given specifically to this user await ctx.call('triplestore.update', { query: ` - WITH + WITH <${await ctx.call('triplestore.dataset.getWacGraph')}> DELETE { ?authorizationUri <${userUri}> } WHERE { ?authorizationUri <${userUri}> } `, diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 4d2f8e998..0455a23ba 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -const Schema = { +const InsertAction = { visibility: 'public', params: { resource: { @@ -46,4 +46,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default InsertAction; diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 34c454029..327f4590f 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -const Schema = { +const QueryAction = { visibility: 'public', params: { query: { @@ -26,4 +26,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default QueryAction; diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index fef79c185..3f9dbd977 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -1,6 +1,6 @@ import { ActionSchema } from 'moleculer'; -const Schema = { +const UpdateAction = { visibility: 'public', params: { query: { @@ -34,4 +34,4 @@ const Schema = { } } satisfies ActionSchema; -export default Schema; +export default UpdateAction; diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index 34087fdbe..1184f18b8 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -231,9 +231,11 @@ export default class NextGraphAdapter extends BaseAdapter { async clearDataset(dataset: string) { try { const session = await this.openOrGetSession(dataset); + // Delete all triples in all documents - // TODO Delete also the documents when the method will be available await ng.sparql_update(session.session_id, 'DELETE WHERE { GRAPH ?g { ?s ?p ?o } }'); + + // TODO Delete also the documents when the method will be available } catch (error) { throw new Error(`NextGraph dropAll failed: ${error}\nDataset: ${dataset}`); } @@ -272,6 +274,7 @@ export default class NextGraphAdapter extends BaseAdapter { private async getDatasetMetadata(dataset: string): Promise { try { + console.log('getDatasetMetadata', this.adminSessionid); const response = await ng.sparql_query( this.adminSessionid, ` @@ -295,7 +298,7 @@ export default class NextGraphAdapter extends BaseAdapter { }; } } catch (error) { - throw new Error(`NextGraph deleteDataset failed: ${error}\nDataset: ${dataset}`); + throw new Error(`NextGraph getDatasetMetadata failed: ${error}\nDataset: ${dataset}`); } } @@ -332,12 +335,8 @@ export default class NextGraphAdapter extends BaseAdapter { } async deleteNamedGraph(dataset: string, graphUri: string): Promise { - try { - const session = await this.openOrGetSession(dataset); - await ng.sparql_update(session.session_id, `DROP GRAPH <${graphUri}>`); - } catch (error) { - throw new Error(`NextGraph deleteNamedGraph failed: ${error}\nDataset: ${dataset}\nGraph URI: ${graphUri}`); - } + // TODO Delete document when the method will be available + await this.clearNamedGraph(dataset, graphUri); } async openOrGetSession(dataset: string): Promise { diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 605dae1dc..2f81adee4 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -1,23 +1,27 @@ import fetch from 'node-fetch'; import { ServiceBroker } from 'moleculer'; -import { createAccount, fetchServer } from '../utils.ts'; +import { createAccount, fetchServer, clearAllDatasets, backupAllDatasets } from '../utils.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -beforeAll(async () => { - broker = await initialize(false); - await broker.start(); - alice = await createAccount(broker, 'alice'); -}); +describe.each(['ng' /*, 'fuseki'*/])('LDP handling through API with triplestore %s', (triplestore: string) => { + beforeAll(async () => { + broker = await initialize(triplestore); + await broker.start(); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice6'); + }); -afterAll(async () => { - await broker.stop(); -}); + afterAll(async () => { + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } + }); -describe('LDP handling through API', () => { let containerUri: string; let resourceUri: any; diff --git a/src/middleware/tests/ldp/container.test.ts b/src/middleware/tests/ldp/container.test.ts index d9ce913bd..f9a70268d 100644 --- a/src/middleware/tests/ldp/container.test.ts +++ b/src/middleware/tests/ldp/container.test.ts @@ -3,22 +3,27 @@ import { ServiceBroker } from 'moleculer'; import * as CONFIG from '../config.ts'; import initialize from './initialize.ts'; import { createAccount } from '../utils.ts'; +import { clearAllDatasets, backupAllDatasets } from '../utils.ts'; jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -beforeAll(async () => { - broker = await initialize(false); - await broker.start(); - alice = await createAccount(broker, 'alice'); -}); +describe.each(['ng', 'fuseki'])('LDP container tests with triplestore %s', (triplestore: string) => { + beforeAll(async () => { + broker = await initialize(triplestore); + await broker.start(); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice7'); + }); -afterAll(async () => { - if (broker) await broker.stop(); -}); + afterAll(async () => { + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } + }); -describe('LDP container tests', () => { let resourceUri: string; let containerUri: string; diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 270429e1d..9ecbdfcbe 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -1,24 +1,28 @@ import fetch from 'node-fetch'; import { ServiceBroker } from 'moleculer'; import { MIME_TYPES } from '@semapps/mime-types'; -import { fetchServer, createAccount } from '../utils.ts'; +import { fetchServer, createAccount, clearAllDatasets, backupAllDatasets } from '../utils.ts'; import initialize from './initialize.ts'; jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -beforeAll(async () => { - broker = await initialize(false); - await broker.start(); - alice = await createAccount(broker, 'alice'); -}); +describe.each(['ng' /*, 'fuseki'*/])('Content negotiation with triplestore %s', (triplestore: string) => { + beforeAll(async () => { + broker = await initialize(triplestore); + await broker.start(); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice7'); + }); -afterAll(async () => { - await broker.stop(); -}); + afterAll(async () => { + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } + }); -describe('Content negotiation', () => { let containerUri: string; let projectUri: string; let project2Uri: string; diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 39e6d2cab..478718190 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -3,15 +3,15 @@ import { Context, ServiceBroker } from 'moleculer'; import { ControlledContainerMixin, delay, Registration } from '@semapps/ldp'; import waitForExpect from 'wait-for-expect'; import initialize from './initialize.ts'; -import { fetchServer, createAccount } from '../utils.ts'; +import { fetchServer, createAccount, clearAllDatasets, backupAllDatasets } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; let alice: any; -describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (allowSlugs: boolean) => { +describe.each(['ng' /*, 'fuseki'*/])('ControlledContainerMixin with triplestore %s', (triplestore: string) => { beforeAll(async () => { - broker = await initialize(allowSlugs); + broker = await initialize(triplestore); broker.createService({ name: 'videos', @@ -45,11 +45,15 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al }); await broker.start(); - alice = await createAccount(broker, 'alice'); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice7'); }); afterAll(async () => { - if (broker) await broker.stop(); + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } }); let containerUri: string; @@ -67,21 +71,6 @@ describe.each([false, true])('ControlledContainerMixin with allowSlugs: %s', (al const containersUris = await alice.call('ldp.container.getAll'); expect(containersUris).toHaveLength(8); // 7 containers + root container - if (allowSlugs) { - expect(containersUris).toEqual( - expect.arrayContaining([ - urlJoin(alice.baseUrl, '/key'), - urlJoin(alice.baseUrl, '/public-key'), - urlJoin(alice.baseUrl, '/videos'), - urlJoin(alice.baseUrl, '/resources'), - urlJoin(alice.baseUrl, '/places'), - urlJoin(alice.baseUrl, '/themes'), - urlJoin(alice.baseUrl, '/files'), - urlJoin(alice.baseUrl, '/data') - ]) - ); - } - containerUri = await alice.getContainerUri('as:Video'); expect(containerUri).not.toBeUndefined(); diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index 97e9c055d..030f3c39f 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -1,15 +1,15 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; -import { fetchServer, createAccount } from '../utils.ts'; +import { fetchServer, createAccount, clearAllDatasets, backupAllDatasets } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; let alice: any; -describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (allowSlugs: boolean) => { +describe.each(['ng' /*, 'fuseki'*/])('ControlledResourceMixin with triplestore %s', (triplestore: string) => { beforeAll(async () => { - broker = await initialize(allowSlugs); + broker = await initialize(triplestore); broker.createService({ name: 'address-book', @@ -34,11 +34,15 @@ describe.each([false, true])('ControlledResourceMixin with allowSlugs: %s', (all }); await broker.start(); - alice = await createAccount(broker, 'alice'); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice7'); }); afterAll(async () => { - if (broker) await broker.stop(); + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } }); let controlledResourceUri: string; diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index 2ac54a7aa..ddad2c728 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import { parse as parseLinkHeader } from 'http-link-header'; import { ServiceBroker } from 'moleculer'; import { ControlledContainerMixin } from '@semapps/ldp'; -import { fetchServer, createAccount } from '../utils.ts'; +import { fetchServer, createAccount, clearAllDatasets, backupAllDatasets } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; @@ -10,45 +10,49 @@ jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -beforeAll(async () => { - broker = await initialize(false); - - broker.createService({ - name: 'event', - mixins: [ControlledContainerMixin], - settings: { - path: '/events', - types: ['pair:Event'], - permissions: { - anon: { - read: true, - write: true +describe.each(['ng' /*, 'fuseki'*/])('Headers handling of LDP server with triplestore %s', (triplestore: string) => { + beforeAll(async () => { + broker = await initialize(triplestore); + + broker.createService({ + name: 'event', + mixins: [ControlledContainerMixin], + settings: { + path: '/events', + types: ['pair:Event'], + permissions: { + anon: { + read: true, + write: true + } } - } - }, - actions: { - getHeaderLinks: { - handler() { - return [ - { - uri: 'http://foo.bar', - rel: 'http://foo.baz' - } - ]; + }, + actions: { + getHeaderLinks: { + handler() { + return [ + { + uri: 'http://foo.bar', + rel: 'http://foo.baz' + } + ]; + } } } - } - }); + }); - await broker.start(); - alice = await createAccount(broker, 'alice'); -}); + await broker.start(); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice7'); + }); -afterAll(async () => { - if (broker) await broker.stop(); -}); + afterAll(async () => { + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } + }); -describe('Headers handling of LDP server', () => { let placesContainerUri: string; let eventsContainerUri: string; diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index a1307bcca..23ef6be8b 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -7,7 +7,7 @@ import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; import { AuthLocalService } from '@semapps/auth'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; -import { listDatasets, dropDataset } from '../utils.ts'; +import { getTripleStoreAdapter } from '../utils.ts'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -42,12 +42,7 @@ const containers = [ } ]; -const initialize = async (allowSlugs = true): Promise => { - const datasets: string[] = await listDatasets(); - for (let dataset of datasets) { - await dropDataset(dataset); - } - +const initialize = async (triplestore: string): Promise => { const uploadsPath = pathJoin(__dirname, '../uploads'); if (fs.existsSync(uploadsPath)) { fs.readdirSync(uploadsPath).forEach(f => fs.rmSync(`${uploadsPath}/${f}`, { recursive: true, force: true })); @@ -71,10 +66,7 @@ const initialize = async (allowSlugs = true): Promise => { baseUrl: CONFIG.HOME_URL, baseDir: path.resolve(__dirname, '..'), triplestore: { - url: CONFIG.SPARQL_ENDPOINT, - user: CONFIG.JENA_USER, - password: CONFIG.JENA_PASSWORD, - secure: false // TODO Remove when we move to Fuseki 5 + adapter: getTripleStoreAdapter(triplestore) }, containers, ontologies: [as, pair, petr, solid, vcard, semapps], @@ -82,7 +74,7 @@ const initialize = async (allowSlugs = true): Promise => { webfinger: false, webid: false, ldp: { - allowSlugs + allowSlugs: false } } }); diff --git a/src/middleware/tests/ldp/paging.test.ts b/src/middleware/tests/ldp/paging.test.ts index 38d492454..8ed4dbf7a 100644 --- a/src/middleware/tests/ldp/paging.test.ts +++ b/src/middleware/tests/ldp/paging.test.ts @@ -2,23 +2,27 @@ import fetch from 'node-fetch'; import { ServiceBroker } from 'moleculer'; import { parse as parseLinkHeader } from 'http-link-header'; import initialize from './initialize.ts'; -import { createAccount } from '../utils.ts'; +import { createAccount, clearAllDatasets, backupAllDatasets } from '../utils.ts'; jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -beforeAll(async () => { - broker = await initialize(true); - await broker.start(); - alice = await createAccount(broker, 'alice'); -}); +describe.each(['ng' /*, 'fuseki'*/])('LDP paging tests with triplestore %s', (triplestore: string) => { + beforeAll(async () => { + broker = await initialize(triplestore); + await broker.start(); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice'); + }); -afterAll(async () => { - if (broker) await broker.stop(); -}); + afterAll(async () => { + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } + }); -describe('LDP paging tests', () => { let containerUri: string; let resourcesUris: string[] = []; diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index ca3c30c40..9fdbcb188 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -1,23 +1,27 @@ import rdf from '@rdfjs/data-model'; import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; -import { createAccount } from '../utils.ts'; +import { createAccount, clearAllDatasets, backupAllDatasets } from '../utils.ts'; jest.setTimeout(50000); let broker: ServiceBroker; let alice: any; -beforeAll(async () => { - broker = await initialize(true); - await broker.start(); - alice = await createAccount(broker, 'alice'); -}); +describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', (triplestore: string) => { + beforeAll(async () => { + broker = await initialize(triplestore); + await broker.start(); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice6'); + }); -afterAll(async () => { - if (broker) await broker.stop(); -}); + afterAll(async () => { + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } + }); -describe('Resource CRUD operations', () => { let project1: any; let project2: any; let containerUri: string; @@ -122,7 +126,6 @@ describe('Resource CRUD operations', () => { await alice.call('ldp.resource.put', { resource: resourceUpdated }); let updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -137,17 +140,13 @@ describe('Resource CRUD operations', () => { }); expect(updatedProject['pair:label']).toBeUndefined(); expect(updatedProject['pair:hasLocation']['pair:description']).toBeUndefined(); - resourceUpdated.hasLocation = [ { label: 'Compiegne' } ]; - await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -155,7 +154,6 @@ describe('Resource CRUD operations', () => { 'pair:label': 'Compiegne' } }); - resourceUpdated.hasLocation = [ { label: 'Compiegne' @@ -167,11 +165,8 @@ describe('Resource CRUD operations', () => { label: 'Oloron' } ]; - await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -187,7 +182,6 @@ describe('Resource CRUD operations', () => { } ]) }); - resourceUpdated.hasLocation = [ { label: 'Compiegne' @@ -199,11 +193,8 @@ describe('Resource CRUD operations', () => { label: 'Compiegne' } ]; - await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -211,7 +202,6 @@ describe('Resource CRUD operations', () => { 'pair:label': 'Compiegne' } }); - resourceUpdated.hasLocation = [ { label: 'Compiegne', @@ -224,11 +214,8 @@ describe('Resource CRUD operations', () => { description: 'or not' } ]; - await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', @@ -243,25 +230,17 @@ describe('Resource CRUD operations', () => { } ]) }); - // @ts-expect-error TS(2322): Type 'undefined' is not assignable to type '{ labe... Remove this comment to see the full error message resourceUpdated.hasLocation = undefined; - await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject['pair:hasLocation']).toBeUndefined(); - // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message resourceUpdated['petr:openingTimesDay'] = [ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' } ]; - await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'petr:openingTimesDay': { @@ -269,17 +248,13 @@ describe('Resource CRUD operations', () => { 'petr:startingTime': '2021-10-07T06:40:56.123Z' } }); - // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message resourceUpdated['petr:openingTimesDay'] = [ { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' }, { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } ]; - await alice.call('ldp.resource.put', { resource: resourceUpdated }); - updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); - expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'petr:openingTimesDay': expect.arrayContaining([ From 30a2779b09d6860298b74288c48d60f7bf538b34 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 14 Jan 2026 18:17:59 +0100 Subject: [PATCH 152/165] Remove console.log --- src/middleware/packages/triplestore/adapters/nextgraph.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index 1184f18b8..edc890445 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -274,7 +274,6 @@ export default class NextGraphAdapter extends BaseAdapter { private async getDatasetMetadata(dataset: string): Promise { try { - console.log('getDatasetMetadata', this.adminSessionid); const response = await ng.sparql_query( this.adminSessionid, ` From e5256a620ab8f546c795cbd8baf35a619909d9cf Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 14 Jan 2026 19:18:05 +0100 Subject: [PATCH 153/165] All LDP tests running except binary and blank nodes --- .../packages/triplestore/adapters/nextgraph.ts | 16 +++++----------- .../packages/triplestore/subservices/dataset.ts | 4 +--- .../triplestore/subservices/named-graph.ts | 16 +++++++--------- src/middleware/tests/ldp/api.test.ts | 2 +- .../tests/ldp/content-negotiation.test.ts | 4 ++-- .../tests/ldp/controlled-container.test.ts | 3 +-- .../tests/ldp/controlled-resource.test.ts | 2 +- src/middleware/tests/ldp/headers.test.ts | 2 +- src/middleware/tests/ldp/paging.test.ts | 2 +- src/middleware/tests/ldp/resource.test.ts | 4 ++-- 10 files changed, 22 insertions(+), 33 deletions(-) diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index edc890445..0051c83b5 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -350,14 +350,6 @@ export default class NextGraphAdapter extends BaseAdapter { } } - async closeSession(session: Session) { - try { - await ng.session_headless_stop(session.session_id, true); - } catch (error) { - throw new Error(`NextGraph closeSession failed: ${error}`); - } - } - private async getUserIdForDataset(dataset: string): Promise { try { const response = await ng.sparql_query( @@ -384,11 +376,13 @@ export default class NextGraphAdapter extends BaseAdapter { async cleanup() { try { - for (const session of Object.values(openSessions)) { - await this.closeSession(session); + for (const [dataset, session] of Object.entries(openSessions)) { + await ng.session_headless_stop(session.session_id, true); + delete openSessions[dataset]; } - if (this.adminSessionid) await ng.session_headless_stop(this.adminSessionid, true); + // We can't close the admin session because it is started in init, which is called only on creation + // if (this.adminSessionid) await ng.session_headless_stop(this.adminSessionid, true); this.getLogger().info('NextGraph adapter cleaned up'); } catch (error) { diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index e28ec0c7f..36cdb825d 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -7,9 +7,7 @@ const DatasetService = { adapter: null as AdapterInterface | null }, async created() { - if (!this.settings.adapter) { - throw new Error('Adapter is required'); - } + if (!this.settings.adapter) throw new Error('Adapter is required'); }, actions: { create: { diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index d4251892c..93c98e579 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -8,9 +8,7 @@ const NamedGraphService = { adapter: null as AdapterInterface | null }, async created() { - if (!this.settings.adapter) { - throw new Error('Adapter is required'); - } + if (!this.settings.adapter) throw new Error('Adapter is required'); }, actions: { create: { @@ -39,9 +37,9 @@ const NamedGraphService = { if (!uri) throw new Error('Unable to clear named graph. The parameter uri is missing'); if (!dataset) throw new Error('Unable to clear named graph. The parameter dataset is missing'); - if (!(await this.actions.exist({ uri, dataset }, { parentCtx: ctx }))) { - throw new Error(`Cannot clear named graph as it doesn't exist`); - } + // if (!(await this.actions.exist({ uri, dataset }, { parentCtx: ctx }))) { + // throw new Error(`Cannot clear named graph as it doesn't exist`); + // } await this.settings.adapter.clearNamedGraph(dataset, uri); } @@ -55,9 +53,9 @@ const NamedGraphService = { if (!uri) throw new Error('Unable to delete named graph. The parameter uri is missing'); if (!dataset) throw new Error('Unable to delete named graph. The parameter dataset is missing'); - if (!(await this.actions.exist({ uri, dataset }, { parentCtx: ctx }))) { - throw new Error(`Cannot delete named graph as it doesn't exist`); - } + // if (!(await this.actions.exist({ uri, dataset }, { parentCtx: ctx }))) { + // throw new Error(`Cannot delete named graph as it doesn't exist`); + // } await this.settings.adapter.deleteNamedGraph(dataset, uri); } diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index 2f81adee4..fa1c1e3f1 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -7,7 +7,7 @@ jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -describe.each(['ng' /*, 'fuseki'*/])('LDP handling through API with triplestore %s', (triplestore: string) => { +describe.each(['ng', 'fuseki'])('LDP handling through API with triplestore %s', (triplestore: string) => { beforeAll(async () => { broker = await initialize(triplestore); await broker.start(); diff --git a/src/middleware/tests/ldp/content-negotiation.test.ts b/src/middleware/tests/ldp/content-negotiation.test.ts index 9ecbdfcbe..c6bab1846 100644 --- a/src/middleware/tests/ldp/content-negotiation.test.ts +++ b/src/middleware/tests/ldp/content-negotiation.test.ts @@ -8,7 +8,7 @@ jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -describe.each(['ng' /*, 'fuseki'*/])('Content negotiation with triplestore %s', (triplestore: string) => { +describe.each(['ng', 'fuseki'])('Content negotiation with triplestore %s', (triplestore: string) => { beforeAll(async () => { broker = await initialize(triplestore); await broker.start(); @@ -86,7 +86,7 @@ describe.each(['ng' /*, 'fuseki'*/])('Content negotiation with triplestore %s', }) }); - expect(body).toMatch(new RegExp(`a ldp:Container, ldp:BasicContainer`)); + expect(body).toMatch(new RegExp(`ldp:BasicContainer`)); expect(body).toMatch(new RegExp(`ldp:contains <${projectUri}>`)); expect(body).toMatch(new RegExp(`a pair:Project`)); diff --git a/src/middleware/tests/ldp/controlled-container.test.ts b/src/middleware/tests/ldp/controlled-container.test.ts index 478718190..c797b5f67 100644 --- a/src/middleware/tests/ldp/controlled-container.test.ts +++ b/src/middleware/tests/ldp/controlled-container.test.ts @@ -1,4 +1,3 @@ -import urlJoin from 'url-join'; import { Context, ServiceBroker } from 'moleculer'; import { ControlledContainerMixin, delay, Registration } from '@semapps/ldp'; import waitForExpect from 'wait-for-expect'; @@ -9,7 +8,7 @@ jest.setTimeout(50000); let broker: ServiceBroker; let alice: any; -describe.each(['ng' /*, 'fuseki'*/])('ControlledContainerMixin with triplestore %s', (triplestore: string) => { +describe.each(['ng', 'fuseki'])('ControlledContainerMixin with triplestore %s', (triplestore: string) => { beforeAll(async () => { broker = await initialize(triplestore); diff --git a/src/middleware/tests/ldp/controlled-resource.test.ts b/src/middleware/tests/ldp/controlled-resource.test.ts index 030f3c39f..c5ad30bc7 100644 --- a/src/middleware/tests/ldp/controlled-resource.test.ts +++ b/src/middleware/tests/ldp/controlled-resource.test.ts @@ -7,7 +7,7 @@ jest.setTimeout(50000); let broker: ServiceBroker; let alice: any; -describe.each(['ng' /*, 'fuseki'*/])('ControlledResourceMixin with triplestore %s', (triplestore: string) => { +describe.each(['ng', 'fuseki'])('ControlledResourceMixin with triplestore %s', (triplestore: string) => { beforeAll(async () => { broker = await initialize(triplestore); diff --git a/src/middleware/tests/ldp/headers.test.ts b/src/middleware/tests/ldp/headers.test.ts index ddad2c728..d6582a824 100644 --- a/src/middleware/tests/ldp/headers.test.ts +++ b/src/middleware/tests/ldp/headers.test.ts @@ -10,7 +10,7 @@ jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -describe.each(['ng' /*, 'fuseki'*/])('Headers handling of LDP server with triplestore %s', (triplestore: string) => { +describe.each(['ng', 'fuseki'])('Headers handling of LDP server with triplestore %s', (triplestore: string) => { beforeAll(async () => { broker = await initialize(triplestore); diff --git a/src/middleware/tests/ldp/paging.test.ts b/src/middleware/tests/ldp/paging.test.ts index 8ed4dbf7a..c675bd107 100644 --- a/src/middleware/tests/ldp/paging.test.ts +++ b/src/middleware/tests/ldp/paging.test.ts @@ -8,7 +8,7 @@ jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -describe.each(['ng' /*, 'fuseki'*/])('LDP paging tests with triplestore %s', (triplestore: string) => { +describe.each(['ng', 'fuseki'])('LDP paging tests with triplestore %s', (triplestore: string) => { beforeAll(async () => { broker = await initialize(triplestore); await broker.start(); diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index 9fdbcb188..748b13e83 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -324,13 +324,13 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', { 'pair:label': 'Paris', 'pair:hasPostalAddress': { - 'pair:addressCountry': 'France' + 'pair:addressCountry': 'USA' } }, { 'pair:label': 'Paris', 'pair:hasPostalAddress': { - 'pair:addressCountry': 'USA' + 'pair:addressCountry': 'France' } } ] From 256eda3cf037c68c088fd3e4a35e569d18317132 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 19 Jan 2026 18:18:11 +0100 Subject: [PATCH 154/165] Fix all LDP tests --- src/middleware/packages/jsonld/package.json | 1 + .../jsonld/services/context/actions/get.ts | 6 +- .../services/context/actions/getLocal.ts | 5 +- .../services/context/actions/validate.ts | 1 - .../packages/jsonld/services/context/index.ts | 2 +- .../ldp/adapters/fs-binary-adapter.ts | 71 +++------- .../ldp/adapters/ng-binary-adapter.ts | 97 +++++++------- src/middleware/packages/ldp/index.ts | 4 +- src/middleware/packages/ldp/package.json | 1 + .../packages/ldp/services/api/actions/get.ts | 26 ++-- .../ldp/services/binary/actions/delete.ts | 8 +- .../ldp/services/binary/actions/getRdf.ts | 27 ++++ .../packages/ldp/services/binary/index.ts | 5 +- .../ldp/services/container/actions/post.ts | 6 +- .../ldp/services/resource/actions/delete.ts | 12 +- .../ldp/services/resource/actions/get.ts | 4 + .../ldp/services/resource/actions/getTypes.ts | 19 ++- src/middleware/packages/ldp/types.ts | 4 +- src/middleware/packages/ldp/utilTypes.d.ts | 6 - src/middleware/packages/ldp/utils.ts | 124 +++++++++++------- .../packages/triplestore/adapters/base.ts | 4 +- .../packages/triplestore/adapters/fuseki.ts | 5 +- .../triplestore/adapters/nextgraph.ts | 4 +- src/middleware/tests/.env | 6 - src/middleware/tests/ldp/binary.test.ts | 121 ++++++++++------- src/middleware/tests/ldp/initialize.ts | 26 +++- src/middleware/tests/ldp/resource.test.ts | 86 ++++++------ src/middleware/tests/utils.ts | 4 +- 28 files changed, 363 insertions(+), 322 deletions(-) create mode 100644 src/middleware/packages/ldp/services/binary/actions/getRdf.ts delete mode 100644 src/middleware/packages/ldp/utilTypes.d.ts diff --git a/src/middleware/packages/jsonld/package.json b/src/middleware/packages/jsonld/package.json index 00ed7dea1..be1f8d14f 100644 --- a/src/middleware/packages/jsonld/package.json +++ b/src/middleware/packages/jsonld/package.json @@ -6,6 +6,7 @@ "author": "Virtual Assembly", "dependencies": { "@semapps/ldp": "1.1.4", + "@semapps/ontologies": "1.1.4", "jsonld": "^3.3.2", "jsonld-context-parser": "^2.4.0", "jsonld-streaming-parser": "^2.4.2", diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index 9521a212d..ae6d1cab9 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -1,4 +1,5 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; +import type { Ontology } from '@semapps/ontologies'; const Schema = { visibility: 'public', @@ -6,7 +7,7 @@ const Schema = { async handler(ctx) { let context: any = []; - const ontologies = await ctx.call('ontologies.list'); + const ontologies: Ontology[] = await ctx.call('ontologies.list'); for (const ontology of ontologies) { if (ontology.preserveContextUri === true) { @@ -18,7 +19,6 @@ const Schema = { const localContext = await this.actions.getLocal({}, { parentCtx: ctx }); // Include the local context only if it is not empty if (Object.keys(localContext['@context']).length > 0) { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. context = context.concat(this.settings.localContextUri); } diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts index e0c45b559..119a17281 100644 --- a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts +++ b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts @@ -1,4 +1,5 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; +import type { Ontology } from '@semapps/ontologies'; const Schema = { visibility: 'public', @@ -6,7 +7,7 @@ const Schema = { async handler(ctx) { let context: any = []; - let ontologies = await ctx.call('ontologies.list'); + let ontologies: Ontology[] = await ctx.call('ontologies.list'); // Do not include ontologies which want to preserve their context URI ontologies = ontologies.filter((ont: any) => ont.preserveContextUri !== true); diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index 5ad95d5bd..1f578fcc9 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -11,7 +11,6 @@ const Schema = { async handler(ctx) { const { context } = ctx.params; try { - // @ts-expect-error TS(2533): Object is possibly 'null' or 'undefined'. await this.contextParser.parse(context); return true; } catch (e) { diff --git a/src/middleware/packages/jsonld/services/context/index.ts b/src/middleware/packages/jsonld/services/context/index.ts index 6a514eab9..faeba89d7 100644 --- a/src/middleware/packages/jsonld/services/context/index.ts +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -18,7 +18,7 @@ const JsonldContextSchema = { load: async url => { const result = await this.broker .call('jsonld.document-loader.loadWithCache', { url }) - .then(context => context.document); + .then((context: any) => context.document); // Manually clear the contextParser inner cache as we don't want to use it // See https://github.com/rubensworks/jsonld-context-parser.js/issues/75 diff --git a/src/middleware/packages/ldp/adapters/fs-binary-adapter.ts b/src/middleware/packages/ldp/adapters/fs-binary-adapter.ts index caaf2d646..33fd6335e 100644 --- a/src/middleware/packages/ldp/adapters/fs-binary-adapter.ts +++ b/src/middleware/packages/ldp/adapters/fs-binary-adapter.ts @@ -1,43 +1,12 @@ import fs from 'fs'; -import bytes from 'bytes'; import path from 'path'; import { Readable } from 'stream'; import { IBindings } from 'sparqljson-parse'; import urlJoin from 'url-join'; -import { Errors, ServiceBroker } from 'moleculer'; -import { v4 as uuidv4 } from 'uuid'; -import { AdapterInterface } from '@semapps/triplestore/adapters/base.ts'; -import { getDatasetFromUri, getSlugFromUri } from '../utils.ts'; +import { FusekiAdapter, NextGraphAdapter } from '@semapps/triplestore'; +import { getDatasetFromUri, getSlugFromUri, createDirectoryIfNotExist, streamToFile } from '../utils.ts'; import { Binary, BinaryAdapterInterface } from '../types.ts'; -const { MoleculerError } = Errors; - -const streamToFile = (inputStream: Readable, filePath: string, maxSize: string | number): Promise => { - return new Promise((resolve, reject) => { - const fileWriteStream = fs.createWriteStream(filePath); - const maxSizeInBytes = maxSize && bytes.parse(maxSize); - let fileSize = 0; - inputStream - .on('data', (chunk: Buffer) => { - fileSize += chunk.length; - if (maxSizeInBytes && fileSize > maxSizeInBytes) { - fileWriteStream.destroy(); // Stop persisting the file - reject(new MoleculerError(`The file size is limited to ${maxSize}`, 413, 'CONTENT TOO LARGE')); - } - }) - .pipe(fileWriteStream) - .on('finish', () => resolve(fileSize)) - .on('error', reject); - }); -}; - -const createDirectoryIfNotExist = (dirPath: string): void => { - if (!fs.existsSync(dirPath)) { - process.umask(0); - fs.mkdirSync(dirPath, { recursive: true, mode: 0o0777 }); - } -}; - class FsBinaryAdapter implements BinaryAdapterInterface { name: 'filesystem'; @@ -46,24 +15,18 @@ class FsBinaryAdapter implements BinaryAdapterInterface { constructor(settings: FsBinaryAdapterSettings) { this.name = 'filesystem'; this.settings = settings; - } - async init({ broker } = { broker: ServiceBroker }) { createDirectoryIfNotExist(this.settings.rootDir); - - // Temporary solution. The adapter should be initialized through the TripleStoreService - await this.settings.tripleStoreAdapter.init({ broker }); } async storeBinary(stream: Readable, mimeType: string, dataset: string): Promise { const dirPath = path.join(this.settings.rootDir, dataset); createDirectoryIfNotExist(dirPath); - // Replace with this.createNamedGraph() ? - const uuid = uuidv4(); - const fileUri = urlJoin(this.settings.baseUrl, dataset, uuid); + const graphName = await this.settings.tripleStoreAdapter.createNamedGraph(dataset); + const fileUri = urlJoin(this.settings.baseUrl, dataset, graphName); - const filePath = path.join(dirPath, uuid); + const filePath = path.join(dirPath, graphName); const fileSize = await streamToFile(stream, filePath, this.settings.maxSize); @@ -73,7 +36,7 @@ class FsBinaryAdapter implements BinaryAdapterInterface { dataset, ` INSERT DATA { - GRAPH <${fileUri}> { + GRAPH <${graphName}> { <${fileUri}> a , . <${fileUri}> ${fileSize} . <${fileUri}> "${now.toISOString()}"^^ . @@ -90,8 +53,6 @@ class FsBinaryAdapter implements BinaryAdapterInterface { async isBinary(uri: string): Promise { const dataset = getDatasetFromUri(uri)!; - // For NextGraph, we can look if the uri starts with "did:ng:j:" - const result: boolean = await this.settings.tripleStoreAdapter.query( dataset, ` @@ -113,10 +74,10 @@ class FsBinaryAdapter implements BinaryAdapterInterface { const result: IBindings[] = await this.settings.tripleStoreAdapter.query( dataset, ` - SELECT ?ianaMimeType ?size ?time + SELECT ?type ?size ?time WHERE { - GRAPH <${uri}> { - <${uri}> a , ?ianaMimeType . + GRAPH ?g { + <${uri}> a ?type . <${uri}> ?size . <${uri}> ?time . } @@ -126,9 +87,11 @@ class FsBinaryAdapter implements BinaryAdapterInterface { if (result.length === 0) throw new Error(`Binary not found ${uri}`); - const regexResults = /^https:\/\/www\.w3\.org\/ns\/iana\/media-types\/(.*)#Resource$/.exec( - result[0].ianaMimeType.value - ); + const ianaMimeType = result.find( + node => node.type.value !== 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource' + )!.type.value; + + const regexResults = /^https:\/\/www\.w3\.org\/ns\/iana\/media-types\/(.*)#Resource$/.exec(ianaMimeType); return { file: fs.readFileSync(this.getPathFromUri(uri)), @@ -138,9 +101,7 @@ class FsBinaryAdapter implements BinaryAdapterInterface { }; } - async deleteBinary(uri: string): Promise { - const dataset = getDatasetFromUri(uri)!; - + async deleteBinary(dataset: string, uri: string): Promise { // Replace with this.deleteNamedGraph(uri) ? await this.settings.tripleStoreAdapter.query( dataset, @@ -170,7 +131,7 @@ interface FsBinaryAdapterSettings { rootDir: string; baseUrl: string; maxSize: string | number; - tripleStoreAdapter: AdapterInterface; + tripleStoreAdapter: FusekiAdapter | NextGraphAdapter; } export default FsBinaryAdapter; diff --git a/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts b/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts index ca8b6ce06..85fb030c3 100644 --- a/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts +++ b/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts @@ -1,23 +1,13 @@ import ng from 'nextgraph'; import { Readable } from 'stream'; +import path from 'path'; +import fs from 'fs'; import urlJoin from 'url-join'; -import { ServiceBroker } from 'moleculer'; -import { AdapterInterface } from '@semapps/triplestore/adapters/base.ts'; -import { getDatasetFromUri, getSlugFromUri } from '../utils.ts'; +import { v4 as uuidv4 } from 'uuid'; +import { NextGraphAdapter } from '@semapps/triplestore'; +import { getDatasetFromUri, getSlugFromUri, streamToFile } from '../utils.ts'; import { Binary, BinaryAdapterInterface } from '../types.ts'; -const streamToString = (stream: Readable) => { - let res: string = ''; - return new Promise((resolve, reject) => { - stream.on('data', (chunk: Buffer) => { - res += chunk; - return res; - }); - stream.on('error', (err: Error) => reject(err)); - stream.on('end', () => resolve(res)); - }); -}; - class NgBinaryAdapter implements BinaryAdapterInterface { name: 'nextgraph'; @@ -28,19 +18,19 @@ class NgBinaryAdapter implements BinaryAdapterInterface { this.settings = settings; } - async init({ broker } = { broker: ServiceBroker }) { - // Temporary solution. The adapter should be initialized through the TripleStoreService - await this.settings.ngAdapter.init({ broker }); - } - async storeBinary(stream: Readable, mimeType: string, dataset: string): Promise { - const session = await this.settings.ngAdapter.openSession(dataset); + const session = await this.settings.ngAdapter.openOrGetSession(dataset); + + const tmpFilePath = path.join(this.settings.tmpDir, `${uuidv4()}.tmp`); - const fileContent = streamToString(stream); + // TODO Convert stream to string, or pass directly the stream to NG method + // const fileContent = (await streamToString(stream)) as string; + await streamToFile(stream, tmpFilePath, this.settings.maxSize); - const uuid = await ng.file_put_to_private_store(session.session_id, fileContent, mimeType); + const uuid = await ng.file_put_to_private_store(session.session_id, tmpFilePath, mimeType); - await this.settings.ngAdapter.closeSession(session); + // Delete the temporary file + fs.unlinkSync(tmpFilePath); return urlJoin(this.settings.baseUrl, dataset, uuid); } @@ -53,44 +43,45 @@ class NgBinaryAdapter implements BinaryAdapterInterface { async getBinary(uri: string): Promise { const uuid = getSlugFromUri(uri)!; - const dataset = getDatasetFromUri(uri); - - const session = await this.settings.ngAdapter.openSession(dataset); - - let content: string; - let buffers: Buffer[] = []; - let metadata: NgFileMeta; - - await ng.file_get_from_private_store(session.session_id, uuid, async (blob: any) => { - if (blob.V0.FileMeta) { - metadata = blob.V0.FileMeta; - } else if (blob.V0.FileBinary) { - if (blob.V0.FileBinary.byteLength > 0) { - buffers.push(blob.V0.FileBinary); + const dataset = getDatasetFromUri(uri)!; + + const session = await this.settings.ngAdapter.openOrGetSession(dataset); + + return new Promise(resolve => { + let buffers: Buffer[] = []; + let metadata: NgFileMeta; + + ng.file_get_from_private_store(session.session_id, uuid, (blob: any) => { + if (blob.V0.FileMeta) { + metadata = blob.V0.FileMeta; + } else if (blob.V0.FileBinary) { + if (blob.V0.FileBinary.byteLength > 0) { + buffers.push(blob.V0.FileBinary); + } + } else if (blob.V0 === 'EndOfStream') { + resolve({ + file: Buffer.concat(buffers), // TODO If content is text, add .toString('utf8') ? + mimeType: metadata.content_type, + size: metadata.size, + time: undefined // NextGraph does not save creation time + }); } - } else if (blob.V0 === 'EndOfStream') { - content = Buffer.concat(buffers).toString('utf8'); // See if we need encoding - } + }); }); - - await this.settings.ngAdapter.closeSession(session); - - return { - file: content, - mimeType: metadata.content_type, - size: metadata.size, - time: undefined // NextGraph does not save creation time - }; } - async deleteBinary(uri: string): Promise { - await this.settings.ngAdapter.deleteNamedGraph(uri); + async deleteBinary(dataset: string, uri: string): Promise { + throw new Error(`Not implemented in NextGraph yet`); + // const session = await this.settings.ngAdapter.openOrGetSession(dataset); + // await ng.file_delete_from_private_store(session.session_id, uri); } } interface NgBinaryAdapterSettings { + tmpDir: string; baseUrl: string; - ngAdapter: AdapterInterface; + maxSize: string | number; + ngAdapter: NextGraphAdapter; } // https://git.nextgraph.org/NextGraph/nextgraph-rs/src/commit/f5758d250f81a0c485744973268c4c946bdee8e1/engine/net/src/app_protocol.rs#L1225-L1228 diff --git a/src/middleware/packages/ldp/index.ts b/src/middleware/packages/ldp/index.ts index c23f04840..9d2ac2e24 100644 --- a/src/middleware/packages/ldp/index.ts +++ b/src/middleware/packages/ldp/index.ts @@ -16,6 +16,7 @@ import SpecialEndpointMixin from './mixins/special-endpoint.ts'; import OrphanFilesDeletionMixin from './mixins/orphan-files-deletion.ts'; import defaultContainerOptions from './services/registry/defaultOptions.ts'; import FsBinaryAdapter from './adapters/fs-binary-adapter.ts'; +import NgBinaryAdapter from './adapters/ng-binary-adapter.ts'; export * from './utils.ts'; export * from './types.ts'; @@ -37,5 +38,6 @@ export { SpecialEndpointMixin, OrphanFilesDeletionMixin, defaultContainerOptions, - FsBinaryAdapter + FsBinaryAdapter, + NgBinaryAdapter }; diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index 7b8140efd..17a3d9c34 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -20,6 +20,7 @@ "mime-types": "^2.1.35", "moleculer-db": "^0.8.16", "moleculer-web": "^0.10.0-beta1", + "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/ng-sdk-js/pkg-node", "node-fetch": "^2.6.6", "path-to-regexp": "^6.2.0", "rdf-parse": "^1.7.0", diff --git a/src/middleware/packages/ldp/services/api/actions/get.ts b/src/middleware/packages/ldp/services/api/actions/get.ts index 10d36479e..6c3c8c6f9 100644 --- a/src/middleware/packages/ldp/services/api/actions/get.ts +++ b/src/middleware/packages/ldp/services/api/actions/get.ts @@ -84,10 +84,7 @@ export default async function get(this: any, ctx: any) { if (!ctx.meta.$responseHeaders) ctx.meta.$responseHeaders = {}; ctx.meta.$responseHeaders['Preference-Applied'] = ctx.meta.headers.prefer; } - } else if ( - types.includes('https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource') && - ![MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE].includes(ctx.meta.originalHeaders?.accept) - ) { + } else if (types.includes('https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource')) { /* * LDP BINARY */ @@ -95,15 +92,20 @@ export default async function get(this: any, ctx: any) { try { const binary: Binary = await ctx.call('ldp.binary.get', { resourceUri: uri }); - ctx.meta.$responseType = binary.mimeType; - // Since files are currently immutable, we set a maximum browser cache age - // We do that after the file is read, otherwise the error 404 will be cached by the browser - ctx.meta.$responseHeaders = { - 'Cache-Control': 'public, max-age=31536000', - Vary: 'Accept' - }; + if ([MIME_TYPES.JSON, MIME_TYPES.TURTLE, MIME_TYPES.TRIPLE].includes(ctx.meta.originalHeaders?.accept)) { + res = await ctx.call('ldp.binary.getRdf', { resourceUri: uri }); + } else { + ctx.meta.$responseType = binary.mimeType; - return binary.file; + // Since files are currently immutable, we set a maximum browser cache age + // We do that after the file is read, otherwise the error 404 will be cached by the browser + ctx.meta.$responseHeaders = { + 'Cache-Control': 'public, max-age=31536000', + Vary: 'Accept' + }; + + return binary.file; + } } catch (e) { throw new MoleculerError('File Not found', 404, 'NOT_FOUND'); } diff --git a/src/middleware/packages/ldp/services/binary/actions/delete.ts b/src/middleware/packages/ldp/services/binary/actions/delete.ts index 2f1db1078..e2e07aed8 100644 --- a/src/middleware/packages/ldp/services/binary/actions/delete.ts +++ b/src/middleware/packages/ldp/services/binary/actions/delete.ts @@ -8,7 +8,13 @@ const DeleteAction = { async handler(ctx) { const { resourceUri } = ctx.params; - await this.settings.adapter.deleteBinary(resourceUri); + await this.settings.adapter.deleteBinary(ctx.meta.dataset, resourceUri); + + // Detach the binary from containing containers + const containersUris: string[] = await ctx.call('ldp.resource.getContainers', { resourceUri }); + for (const containerUri of containersUris) { + await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId: 'system' }); + } } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/services/binary/actions/getRdf.ts b/src/middleware/packages/ldp/services/binary/actions/getRdf.ts new file mode 100644 index 000000000..9344f9c33 --- /dev/null +++ b/src/middleware/packages/ldp/services/binary/actions/getRdf.ts @@ -0,0 +1,27 @@ +import { ActionSchema } from 'moleculer'; +import { Binary } from '../../../types.ts'; + +const getRdfAction = { + visibility: 'public', + params: { + resourceUri: { type: 'string' } + }, + async handler(ctx) { + const { resourceUri } = ctx.params; + + const binary: Binary = await this.settings.adapter.getBinary(resourceUri); + + return { + '@context': await ctx.call('jsonld.context.get'), + id: resourceUri, + type: [ + 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', + `https://www.w3.org/ns/iana/media-types/${binary.mimeType}#Resource` + ], + 'stat:size': `${binary.size}`, + 'stat:mtime': binary.time?.toISOString() + }; + } +} satisfies ActionSchema; + +export default getRdfAction; diff --git a/src/middleware/packages/ldp/services/binary/index.ts b/src/middleware/packages/ldp/services/binary/index.ts index 87dfbc05b..f8d711688 100644 --- a/src/middleware/packages/ldp/services/binary/index.ts +++ b/src/middleware/packages/ldp/services/binary/index.ts @@ -2,6 +2,7 @@ import { ServiceSchema } from 'moleculer'; import storeAction from './actions/store.ts'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; +import getRdfAction from './actions/getRdf.ts'; import isBinaryAction from './actions/isBinary.ts'; const LdpBinaryService = { @@ -13,10 +14,8 @@ const LdpBinaryService = { store: storeAction, delete: deleteAction, get: getAction, + getRdf: getRdfAction, isBinary: isBinaryAction - }, - async started() { - await this.settings.adapter.init({ broker: this.broker }); } } satisfies ServiceSchema; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index a79055085..727e835a5 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -13,10 +13,6 @@ const PostAction = { containerUri: { type: 'string' }, - slug: { - type: 'string', - optional: true - }, resource: { type: 'object', optional: true @@ -35,7 +31,7 @@ const PostAction = { } }, async handler(ctx) { - let { resource, containerUri, slug, contentType, file } = ctx.params; + let { resource, containerUri, contentType, file } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; let isContainer = false; let expandedResource; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 73a4c6b32..0d2431723 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -11,6 +11,10 @@ const Schema = { const { resourceUri } = ctx.params; const webId = ctx.params.webId || ctx.meta.webId || 'anon'; + if (await ctx.call('ldp.binary.isBinary', { resourceUri })) { + return await ctx.call('ldp.binary.delete', { resourceUri }); + } + if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { return await ctx.call('ldp.remote.delete', { resourceUri, webId }); } @@ -42,14 +46,6 @@ const Schema = { await ctx.call('ldp.container.detach', { containerUri, resourceUri, webId: 'system' }); } - if (await ctx.call('ldp.binary.isBinary', { resourceUri })) { - try { - await ctx.call('ldp.binary.delete', { resourceUri }); - } catch (e) { - // Ignore errors (file may have been deleted already) - } - } - const returnValues = { resourceUri, containersUris, diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index 5f1ccae63..e8ca0e363 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -32,6 +32,10 @@ const Schema = { if (accept && accept !== MIME_TYPES.JSON) throw new Error(`The ldp.resource.get action now only support JSON-LD. Provided: ${accept}`); + if (await ctx.call('ldp.binary.isBinary', { resourceUri })) { + return await ctx.call('ldp.binary.getRdf', { resourceUri }); + } + if (await ctx.call('ldp.remote.isRemote', { resourceUri })) { return await ctx.call('ldp.remote.get', ctx.params); } diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index 6236e7aaa..55f7f514a 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -1,4 +1,5 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; +import type { IBindings } from 'sparqljson-parse'; import { getSlugFromUri } from '../../../utils.ts'; const Schema = { @@ -12,8 +13,13 @@ const Schema = { async handler(ctx) { const { resourceUri } = ctx.params; - const result = await ctx.call('triplestore.query', { - query: ` + if (await ctx.call('ldp.binary.isBinary', { resourceUri })) { + const binaryRdf: any = await ctx.call('ldp.binary.getRdf', { resourceUri }); + + return binaryRdf.type; + } else { + const result: IBindings[] = await ctx.call('triplestore.query', { + query: ` SELECT ?type WHERE { GRAPH <${getSlugFromUri(resourceUri)}> { @@ -21,10 +27,11 @@ const Schema = { } } `, - webId: 'system' - }); + webId: 'system' + }); - return result.map((node: any) => node.type.value); + return result.map(node => node.type.value); + } } } satisfies ActionSchema; diff --git a/src/middleware/packages/ldp/types.ts b/src/middleware/packages/ldp/types.ts index e70c93949..541454aa3 100644 --- a/src/middleware/packages/ldp/types.ts +++ b/src/middleware/packages/ldp/types.ts @@ -35,7 +35,7 @@ export interface LdpRegistryServiceSettings { } export interface Binary { - file: Buffer; + file: string; mimeType: string; size: number; time?: Date; @@ -46,5 +46,5 @@ export interface BinaryAdapterInterface { storeBinary(stream: Readable, mimeType: string, dataset: string): Promise; isBinary(uri: string): Promise; getBinary(uri: string): Promise; - deleteBinary(uri: string): Promise; + deleteBinary(dataset: string, uri: string): Promise; } diff --git a/src/middleware/packages/ldp/utilTypes.d.ts b/src/middleware/packages/ldp/utilTypes.d.ts deleted file mode 100644 index fe17e754c..000000000 --- a/src/middleware/packages/ldp/utilTypes.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare async function waitForResource( - ms: number, - fieldNames?: keyof T | string | (string | keyof T)[], - maxTries: number, - callback: () => T -): T; diff --git a/src/middleware/packages/ldp/utils.ts b/src/middleware/packages/ldp/utils.ts index 64adfc72b..c9b403775 100644 --- a/src/middleware/packages/ldp/utils.ts +++ b/src/middleware/packages/ldp/utils.ts @@ -1,21 +1,27 @@ +import bytes from 'bytes'; +import fs from 'fs'; +import { Readable } from 'stream'; import urlJoin from 'url-join'; +import { Errors } from 'moleculer'; -const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); -const regexProtocolAndHostAndPort = new RegExp('^http(s)?:\\/\\/([\\w-\\.:]*)'); +const { MoleculerError } = Errors; -function createFragmentURL(baseUrl: any, serverUrl: any) { +export const regexPrefix = new RegExp('^@prefix ([\\w-]*: +<.*>) .', 'gm'); +export const regexProtocolAndHostAndPort = new RegExp('^http(s)?:\\/\\/([\\w-\\.:]*)'); + +export const createFragmentURL = (baseUrl: any, serverUrl: any) => { let fragment = 'me'; const res = serverUrl.match(regexProtocolAndHostAndPort); if (res) fragment = res[2].replace('-', '_').replace('.', '_').replace(':', '_'); return urlJoin(baseUrl, `#${fragment}`); -} +}; -const isMirror = (resourceUri: any, baseUrl: any) => { +export const isMirror = (resourceUri: any, baseUrl: any) => { return !urlJoin(resourceUri, '/').startsWith(baseUrl); }; -const buildBlankNodesQuery = (depth: any) => { +export const buildBlankNodesQuery = (depth: any) => { const BASE_QUERY = '?s1 ?p1 ?o1 .'; let construct = BASE_QUERY; let where = ''; @@ -39,15 +45,15 @@ const buildBlankNodesQuery = (depth: any) => { return { construct, where }; }; -const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); +export const isURL = (value: any) => (typeof value === 'string' || value instanceof String) && value.startsWith('http'); /** If the value starts with `http` or `urn:` */ -const isURI = (value: any) => +export const isURI = (value: any) => (typeof value === 'string' || value instanceof String) && (value.startsWith('http') || value.startsWith('urn:')); -const isWebId = (value: any) => value !== 'system' && value !== 'anon' && isURL(value); +export const isWebId = (value: any) => value !== 'system' && value !== 'anon' && isURL(value); -const buildFiltersQuery = (filters: any) => { +export const buildFiltersQuery = (filters: any) => { let query = ''; if (filters) { Object.keys(filters).forEach((predicate, i) => { @@ -68,13 +74,13 @@ const buildFiltersQuery = (filters: any) => { return query; }; -const isObject = (value: any) => typeof value === 'object' && !Array.isArray(value) && value !== null; -const getSlugFromUri = (uri: any) => uri.match(new RegExp(`.*/(.*)`))[1]; +export const isObject = (value: any) => typeof value === 'object' && !Array.isArray(value) && value !== null; +export const getSlugFromUri = (uri: any) => uri.match(new RegExp(`.*/(.*)`))[1]; /** @deprecated Use the ldp.resource.getContainers action instead */ -const getContainerFromUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; +export const getContainerFromUri = (uri: any) => uri.match(new RegExp(`(.*)/.*`))[1]; -const getPathFromUri = (uri: any) => { +export const getPathFromUri = (uri: any) => { try { const urlObject = new URL(uri); return urlObject.pathname; @@ -84,7 +90,7 @@ const getPathFromUri = (uri: any) => { }; // Transforms "http://localhost:3000/alice/{uuid}" to "alice" -const getDatasetFromUri = (uri: string): string | undefined => { +export const getDatasetFromUri = (uri: string): string | undefined => { const path = getPathFromUri(uri); if (path) { const parts = path.split('/'); @@ -95,32 +101,32 @@ const getDatasetFromUri = (uri: string): string | undefined => { }; // Transforms "http://localhost:3000/alice/{uuid}" to "http://localhost:3000/alice" -const getBaseUrlFromUri = (uri: string): string => { +export const getBaseUrlFromUri = (uri: string): string => { const { origin } = new URL(uri); const dataset = getDatasetFromUri(uri); return urlJoin(origin, dataset!); }; -const getId = (resource: any) => resource.id || resource['@id']; -const getType = (resource: any) => resource.type || resource['@type']; +export const getId = (resource: any) => resource.id || resource['@id']; +export const getType = (resource: any) => resource.type || resource['@type']; -const hasType = (resource: any, type: any) => { +export const hasType = (resource: any, type: any) => { const resourceType = getType(resource); return Array.isArray(resourceType) ? resourceType.includes(type) : resourceType === type; }; -const isContainer = (resource: any) => hasType(resource, 'ldp:Container'); +export const isContainer = (resource: any) => hasType(resource, 'ldp:Container'); /** @deprecated Use arrayOf instead */ -const defaultToArray = (value: any) => (!value ? undefined : Array.isArray(value) ? value : [value]); +export const defaultToArray = (value: any) => (!value ? undefined : Array.isArray(value) ? value : [value]); -const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); +export const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); // Remove undefined values from object -const cleanUndefined = (obj: any) => +export const cleanUndefined = (obj: any) => Object.keys(obj).reduce((acc, key) => (obj[key] === undefined ? acc : { ...acc, [key]: obj[key] }), {}); -const parseJson = (json: any) => { +export const parseJson = (json: any) => { try { if (json) { return JSON.parse(json); @@ -131,7 +137,7 @@ const parseJson = (json: any) => { return json; }; -const arrayOf = (value: any) => { +export const arrayOf = (value: any) => { // If the field is null-ish, we suppose there are no values. if (value === null || value === undefined) { return []; @@ -149,9 +155,13 @@ const arrayOf = (value: any) => { * If not, try again after `delayMs` until `maxTries` is reached. * If `fieldNames` is `undefined`, the return value of `callback` is expected to not be * `undefined`. - * @type {import("./utilTypes").waitForResource} */ -const waitForResource = async (delayMs: any, fieldNames: any, maxTries: any, callback: any) => { +export const waitForResource = async ( + delayMs: number, + fieldNames: keyof T | string | (string | keyof T)[], + maxTries: number, + callback: () => T +): Promise => { for (let i = 0; i < maxTries; i += 1) { const result = await callback(); // If a result (and the expected field, if required) is present, return. @@ -163,28 +173,40 @@ const waitForResource = async (delayMs: any, fieldNames: any, maxTries: any, cal throw new Error(`Waiting for resource failed. No results after ${maxTries} tries`); }; -export { - buildBlankNodesQuery, - buildFiltersQuery, - isURL, - isURI, - isWebId, - isObject, - getSlugFromUri, - getContainerFromUri, - getDatasetFromUri, - getBaseUrlFromUri, - getId, - getType, - hasType, - isContainer, - defaultToArray, - delay, - cleanUndefined, - parseJson, - isMirror, - createFragmentURL, - regexPrefix, - waitForResource, - arrayOf +export const streamToString = (stream: Readable) => { + let res: string = ''; + return new Promise((resolve, reject) => { + stream.on('data', (chunk: Buffer) => { + res += chunk; + return res; + }); + stream.on('error', (err: Error) => reject(err)); + stream.on('end', () => resolve(res)); + }); +}; + +export const streamToFile = (inputStream: Readable, filePath: string, maxSize: string | number): Promise => { + return new Promise((resolve, reject) => { + const fileWriteStream = fs.createWriteStream(filePath); + const maxSizeInBytes = maxSize && bytes.parse(maxSize); + let fileSize = 0; + inputStream + .on('data', (chunk: Buffer) => { + fileSize += chunk.length; + if (maxSizeInBytes && fileSize > maxSizeInBytes) { + fileWriteStream.destroy(); // Stop persisting the file + reject(new MoleculerError(`The file size is limited to ${maxSize}`, 413, 'CONTENT TOO LARGE')); + } + }) + .pipe(fileWriteStream) + .on('finish', () => resolve(fileSize)) + .on('error', reject); + }); +}; + +export const createDirectoryIfNotExist = (dirPath: string): void => { + if (!fs.existsSync(dirPath)) { + process.umask(0); + fs.mkdirSync(dirPath, { recursive: true, mode: 0o0777 }); + } }; diff --git a/src/middleware/packages/triplestore/adapters/base.ts b/src/middleware/packages/triplestore/adapters/base.ts index 37ade4039..7310d356a 100644 --- a/src/middleware/packages/triplestore/adapters/base.ts +++ b/src/middleware/packages/triplestore/adapters/base.ts @@ -16,7 +16,7 @@ export interface AdapterInterface { namedGraphExists(dataset: string, graphUri: string): Promise; clearNamedGraph(dataset: string, graphUri: string): Promise; deleteNamedGraph(dataset: string, graphUri: string): Promise; - getWacGraph(): string; + getWacGraph(dataset: string): Promise; } export abstract class BaseAdapter implements AdapterInterface { @@ -64,4 +64,6 @@ export abstract class BaseAdapter implements AdapterInterface { abstract clearNamedGraph(dataset: string, graphUri: string): Promise; abstract deleteNamedGraph(dataset: string, graphUri: string): Promise; + + abstract getWacGraph(dataset: string): Promise; } diff --git a/src/middleware/packages/triplestore/adapters/fuseki.ts b/src/middleware/packages/triplestore/adapters/fuseki.ts index 5072f308c..297ce704d 100644 --- a/src/middleware/packages/triplestore/adapters/fuseki.ts +++ b/src/middleware/packages/triplestore/adapters/fuseki.ts @@ -1,16 +1,15 @@ import fetch from 'node-fetch'; import urlJoin from 'url-join'; import { v4 as uuidv4 } from 'uuid'; -import createSlug from 'speakingurl'; import { SparqlJsonParser } from 'sparqljson-parse'; import { throw403, throw500, throw404 } from '@semapps/middlewares'; import { Errors } from 'moleculer'; -import { BaseAdapter } from './base.ts'; +import { AdapterInterface, BaseAdapter } from './base.ts'; const delay = (t: any) => new Promise(resolve => setTimeout(resolve, t)); const { MoleculerError } = Errors; -export default class FusekiAdapter extends BaseAdapter { +export default class FusekiAdapter extends BaseAdapter implements AdapterInterface { name = 'fuseki'; private settings: { diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index 0051c83b5..dd40bc72a 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -2,7 +2,7 @@ import ng from 'nextgraph'; import fs from 'fs'; import { join as pathJoin } from 'path'; import { SparqlJsonParser } from 'sparqljson-parse'; -import { BaseAdapter } from './base.ts'; +import { AdapterInterface, BaseAdapter } from './base.ts'; type NextGraphAdapterSettings = { serverPeerId: string; // The server peer id, is provided in the console of the NextGraph server @@ -30,7 +30,7 @@ type DatasetMetadata = { const openSessions: { [dataset: string]: Session } = {}; -export default class NextGraphAdapter extends BaseAdapter { +export default class NextGraphAdapter extends BaseAdapter implements AdapterInterface { name = 'nextgraph'; private settings: { adminUserId: string; mappingsNuri: string; backupsPath?: string }; diff --git a/src/middleware/tests/.env b/src/middleware/tests/.env index e228321f2..82e42360d 100644 --- a/src/middleware/tests/.env +++ b/src/middleware/tests/.env @@ -8,9 +8,3 @@ SEMAPPS_MAIN_DATASET=testData SEMAPPS_SETTINGS_DATASET=settings_test SEMAPPS_JENA_USER=admin SEMAPPS_JENA_PASSWORD=admin - -# Fuseki instance without ACL -SEMAPPS_NO_ACL_SPARQL_ENDPOINT=http://localhost:3050/ -SEMAPPS_NO_ACL_MAIN_DATASET=testData -SEMAPPS_NO_ACL_JENA_USER=admin -SEMAPPS_NO_ACL_JENA_PASSWORD=admin diff --git a/src/middleware/tests/ldp/binary.test.ts b/src/middleware/tests/ldp/binary.test.ts index ab09a1f07..9e77f4188 100644 --- a/src/middleware/tests/ldp/binary.test.ts +++ b/src/middleware/tests/ldp/binary.test.ts @@ -4,7 +4,7 @@ import { ServiceBroker } from 'moleculer'; import path, { join as pathJoin } from 'path'; import { Binary } from '@semapps/ldp'; import { fileURLToPath } from 'url'; -import { createAccount } from '../utils.ts'; +import { createAccount, clearAllDatasets, backupAllDatasets } from '../utils.ts'; import initialize from './initialize.ts'; import * as CONFIG from '../config.ts'; @@ -14,17 +14,21 @@ jest.setTimeout(20000); let broker: ServiceBroker; let alice: any; -beforeAll(async () => { - broker = await initialize(false); - await broker.start(); - alice = await createAccount(broker, 'alice'); -}); +describe.each(['ng', 'fuseki'])('Binary handling with triplestore %s', (triplestore: string) => { + beforeAll(async () => { + broker = await initialize(triplestore); + await broker.start(); + await clearAllDatasets(broker); + alice = await createAccount(broker, 'alice7'); + }); -afterAll(async () => { - if (broker) await broker.stop(); -}); + afterAll(async () => { + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } + }); -describe('Binary handling of LDP server', () => { let fileUri: string; let filePath: string | null; let binary: Binary; @@ -48,7 +52,9 @@ describe('Binary handling of LDP server', () => { filePath = fileUri!.replace(CONFIG.HOME_URL!, ''); - expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); + if (triplestore === 'fuseki') { + expect(fs.existsSync(pathJoin(__dirname, '../uploads', filePath))).toBeTruthy(); + } }); test('Get binary (via Moleculer action)', async () => { @@ -58,27 +64,30 @@ describe('Binary handling of LDP server', () => { file: expect.anything(), mimeType: 'image/png', size: 3181, - time: expect.anything() + time: triplestore === 'fuseki' ? expect.anything() : undefined }); }); test('Get container (via API)', async () => { - await expect(alice.fetch(containerUri)).resolves.toMatchObject({ - json: { - type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), - 'ldp:contains': [ - { - id: fileUri, - type: expect.arrayContaining([ - 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', - 'https://www.w3.org/ns/iana/media-types/image/png#Resource' - ]), - 'stat:size': '3181', - 'stat:mtime': binary.time.toISOString() - } - ] - } + const { json } = await alice.fetch(containerUri); + + expect(json).toMatchObject({ + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'ldp:contains': [ + { + id: fileUri, + type: expect.arrayContaining([ + 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', + 'https://www.w3.org/ns/iana/media-types/image/png#Resource' + ]), + 'stat:size': '3181' + } + ] }); + + if (triplestore === 'fuseki') { + expect(json['ldp:contains'][0]['stat:mtime']).toBe(binary.time?.toISOString()); + } }); test('Get image as binary (via API)', async () => { @@ -104,41 +113,51 @@ describe('Binary handling of LDP server', () => { 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', 'https://www.w3.org/ns/iana/media-types/image/png#Resource' ]), - 'stat:size': '3181', - 'stat:mtime': binary.time.toISOString() + 'stat:size': '3181' }); + + if (triplestore === 'fuseki') { + expect(json['stat:mtime']).toBe(binary.time?.toISOString()); + } }); test('Get image as resource (via Moleculer action)', async () => { - await expect(alice.call('ldp.resource.get', { resourceUri: fileUri })).resolves.toMatchObject({ + const resource = await alice.call('ldp.resource.get', { resourceUri: fileUri }); + + expect(resource).toMatchObject({ id: fileUri, type: expect.arrayContaining([ 'https://www.w3.org/ns/iana/media-types/application/octet-stream#Resource', 'https://www.w3.org/ns/iana/media-types/image/png#Resource' ]), - 'stat:size': '3181', - 'stat:mtime': binary.time.toISOString() - }); - }); - - test('Delete image (via API)', async () => { - await expect( - alice.fetch(fileUri, { - method: 'DELETE' - }) - ).resolves.toMatchObject({ - status: 204 + 'stat:size': '3181' }); - expect(fs.existsSync(pathJoin(__dirname, '../uploads/files/av-icon.png'))).toBeFalsy(); - - await expect(alice.fetch(fileUri)).resolves.toMatchObject({ status: 404 }); + if (triplestore === 'fuseki') { + expect(resource['stat:mtime']).toBe(binary.time?.toISOString()); + } + }); - await expect(alice.fetch(containerUri)).resolves.toMatchObject({ - json: { - type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), - 'ldp:contains': [] - } + if (triplestore === 'fuseki') { + test('Delete image (via API)', async () => { + await expect( + alice.fetch(fileUri, { + method: 'DELETE' + }) + ).resolves.toMatchObject({ + status: 204 + }); + + expect(fs.existsSync(pathJoin(__dirname, '../uploads/files/av-icon.png'))).toBeFalsy(); + + await expect(alice.fetch(fileUri)).resolves.toMatchObject({ status: 404 }); + + await expect(alice.fetch(containerUri)).resolves.toMatchObject({ + json: { + type: expect.arrayContaining(['ldp:Container', 'ldp:BasicContainer']), + 'ldp:contains': [] + } + }); }); - }); + } }); diff --git a/src/middleware/tests/ldp/initialize.ts b/src/middleware/tests/ldp/initialize.ts index 0dea7ba2e..9ebf297a1 100644 --- a/src/middleware/tests/ldp/initialize.ts +++ b/src/middleware/tests/ldp/initialize.ts @@ -2,9 +2,10 @@ import { ServiceBroker } from 'moleculer'; import fs from 'fs'; import path, { join as pathJoin } from 'path'; import { CoreService } from '@semapps/core'; -import { FsBinaryAdapter } from '@semapps/ldp'; +import { FsBinaryAdapter, NgBinaryAdapter } from '@semapps/ldp'; import { as, pair, petr, semapps, solid, vcard } from '@semapps/ontologies'; import { WebAclMiddleware, CacherMiddleware } from '@semapps/webacl'; +import { NextGraphAdapter } from '@semapps/triplestore'; import { AuthLocalService } from '@semapps/auth'; import { fileURLToPath } from 'url'; import * as CONFIG from '../config.ts'; @@ -62,6 +63,21 @@ const initialize = async (triplestore: string): Promise => { const tripleStoreAdapter = getTripleStoreAdapter(triplestore); + const binaryAdapter = + triplestore === 'fuseki' + ? new FsBinaryAdapter({ + rootDir: uploadsPath, + baseUrl: CONFIG.HOME_URL!, + maxSize: '80Mb', + tripleStoreAdapter + }) + : new NgBinaryAdapter({ + tmpDir: uploadsPath, + baseUrl: CONFIG.HOME_URL!, + maxSize: '80Mb', + ngAdapter: tripleStoreAdapter as NextGraphAdapter + }); + broker.createService({ // @ts-expect-error TS(2345): Argument of type '{ mixins: { name: "core"; settin... Remove this comment to see the full error message mixins: [CoreService], @@ -69,6 +85,7 @@ const initialize = async (triplestore: string): Promise => { baseUrl: CONFIG.HOME_URL, baseDir: path.resolve(__dirname, '..'), triplestore: { + defaultDataset: CONFIG.MAIN_DATASET, adapter: tripleStoreAdapter }, containers, @@ -78,12 +95,7 @@ const initialize = async (triplestore: string): Promise => { webid: false, ldp: { allowSlugs: false, - binaryAdapter: new FsBinaryAdapter({ - rootDir: uploadsPath, - baseUrl: CONFIG.HOME_URL!, - maxSize: '80Mb', - tripleStoreAdapter - }) + binaryAdapter } } }); diff --git a/src/middleware/tests/ldp/resource.test.ts b/src/middleware/tests/ldp/resource.test.ts index 748b13e83..689fc73ca 100644 --- a/src/middleware/tests/ldp/resource.test.ts +++ b/src/middleware/tests/ldp/resource.test.ts @@ -130,12 +130,12 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', 'pair:hasLocation': expect.arrayContaining([ - { + expect.objectContaining({ 'pair:label': 'Nantes' - }, - { + }), + expect.objectContaining({ 'pair:label': 'Compiegne' - } + }) ]) }); expect(updatedProject['pair:label']).toBeUndefined(); @@ -171,15 +171,15 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', 'pair:hasLocation': expect.arrayContaining([ - { + expect.objectContaining({ 'pair:label': 'Compiegne' - }, - { + }), + expect.objectContaining({ 'pair:label': 'Nantes' - }, - { + }), + expect.objectContaining({ 'pair:label': 'Oloron' - } + }) ]) }); resourceUpdated.hasLocation = [ @@ -220,14 +220,14 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', 'pair:description': 'myProjectUpdatedAgain', 'pair:affiliates': 'http://localhost:3000/users/pierre', 'pair:hasLocation': expect.arrayContaining([ - { + expect.objectContaining({ 'pair:label': 'Compiegne', 'pair:description': 'the place to be' - }, - { + }), + expect.objectContaining({ 'pair:label': 'Compiegne', 'pair:description': 'or not' - } + }) ]) }); // @ts-expect-error TS(2322): Type 'undefined' is not assignable to type '{ labe... Remove this comment to see the full error message @@ -243,10 +243,10 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', updatedProject = await alice.call('ldp.resource.get', { resourceUri: project1Uri }); expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', - 'petr:openingTimesDay': { + 'petr:openingTimesDay': expect.objectContaining({ 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' - } + }) }); // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message resourceUpdated['petr:openingTimesDay'] = [ @@ -258,8 +258,14 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'petr:openingTimesDay': expect.arrayContaining([ - { 'petr:endingTime': '2021-10-07T09:40:56.131Z', 'petr:startingTime': '2021-10-07T06:40:56.123Z' }, - { 'petr:startingTime': '2021-10-07T10:44:54.883Z', 'petr:endingTime': '2021-10-07T16:44:54.888Z' } + expect.objectContaining({ + 'petr:endingTime': '2021-10-07T09:40:56.131Z', + 'petr:startingTime': '2021-10-07T06:40:56.123Z' + }), + expect.objectContaining({ + 'petr:startingTime': '2021-10-07T10:44:54.883Z', + 'petr:endingTime': '2021-10-07T16:44:54.888Z' + }) ]) }); }); @@ -320,20 +326,20 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', const project3 = await alice.call('ldp.resource.get', { resourceUri: resourceUri3 }); expect(project3).toMatchObject({ - 'pair:hasLocation': [ - { + 'pair:hasLocation': expect.arrayContaining([ + expect.objectContaining({ 'pair:label': 'Paris', - 'pair:hasPostalAddress': { + 'pair:hasPostalAddress': expect.objectContaining({ 'pair:addressCountry': 'USA' - } - }, - { + }) + }), + expect.objectContaining({ 'pair:label': 'Paris', - 'pair:hasPostalAddress': { + 'pair:hasPostalAddress': expect.objectContaining({ 'pair:addressCountry': 'France' - } - } - ] + }) + }) + ]) }); // @ts-expect-error TS(2739): Type '{ label: string; hasPostalAddress: { address... Remove this comment to see the full error message @@ -407,18 +413,18 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', expect(updatedProject).toMatchObject({ 'pair:description': 'myProjectUpdatedAgain', 'pair:hasLocation': expect.arrayContaining([ - { + expect.objectContaining({ 'pair:label': 'Paris', - 'pair:hasPostalAddress': { + 'pair:hasPostalAddress': expect.objectContaining({ 'pair:addressCountry': 'France' - } - }, - { + }) + }), + expect.objectContaining({ 'pair:label': 'Paris', - 'pair:hasPostalAddress': { + 'pair:hasPostalAddress': expect.objectContaining({ 'pair:addressCountry': 'USA' - } - } + }) + }) ]) }); @@ -622,14 +628,14 @@ describe.each(['ng', 'fuseki'])('Resource CRUD operations with triplestore %s', id: projectUri, 'pair:label': 'ActivityPods', 'pair:hasLocation': expect.arrayContaining([ - { + expect.objectContaining({ type: 'pair:Place', 'pair:label': 'Paris' - }, - { + }), + expect.objectContaining({ type: 'pair:Place', 'pair:label': 'Compiègne' - } + }) ]) }); }, 20000); diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 9dfc5419b..7f0b2f4d8 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -15,9 +15,9 @@ export const getTripleStoreAdapter = (triplestore: string) => { if (triplestore === 'ng') { // TODO : Environmentalize the nextgraph settings. return new NextGraphAdapter({ - adminUserId: '-n1RqVQA0k2sqm-51CbIYnoS4Zhh89IRH1cxnLKnVlYA', + adminUserId: 'Ez4plcHN27PQneZoAitrS4gfkaq0-XNqGynvODTOOSoA', mappingsNuri: - 'did:ng:o:7PeIu8q34t7h6XLqZIDt7dbuGjGruBz3ZWeQ7QOc2EoA:v:UmGokb5dUKofXw_IXFRl5xmb3Pbo5S2KWK6ShU01GkcA', + 'did:ng:o:n2fJ7TM5CkpSxIQLZV57CFt3YrGBY9Y8hk8cAnZrIe0A:v:CT179cL3HgJg1OkYoE79iPNQ9vtcMcAZUHQq5RXUFeQA', serverPeerId: 'QlJkY0KELV4W1aVZehn6Qvx5eauRkICSJbdYqIbFHPEA', adminUserKey: 'bE0rIy0V8YQAEfXhqYas-erDrddazpTjhsoJHVqvSDIA', clientPeerKey: 'HV_9Rh-yDpEqsvtwYUjcxqIARUnuP8g2JA4hEH1Nh7QA', From 4599d24ed7fc60e3d9050e00c781d16516f7a395 Mon Sep 17 00:00:00 2001 From: SlyRock Date: Tue, 20 Jan 2026 14:11:37 +0100 Subject: [PATCH 155/165] Update Docker Compose configuration for ng_tests service and enhance triplestore initialization with environmentalized settings. Add new dependencies in package.json for improved test functionality. --- src/middleware/package-lock.json | 19169 +++++++++++ src/middleware/tests/docker-compose.yaml | 21 +- src/middleware/tests/package-lock.json | 14599 +++++++++ src/middleware/tests/package.json | 1 + .../tests/triplestore/initialize.ts | 18 +- src/middleware/yarn.lock | 26400 ++++++---------- 6 files changed, 43124 insertions(+), 17084 deletions(-) create mode 100644 src/middleware/package-lock.json create mode 100644 src/middleware/tests/package-lock.json diff --git a/src/middleware/package-lock.json b/src/middleware/package-lock.json new file mode 100644 index 000000000..812b3f590 --- /dev/null +++ b/src/middleware/package-lock.json @@ -0,0 +1,19169 @@ +{ + "name": "semapps-middleware", + "version": "0.7.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "semapps-middleware", + "version": "0.7.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "workspaces": [ + "packages/*", + "tests" + ], + "devDependencies": { + "@types/dotenv-flow": "^3.3.3", + "@types/ioredis": "^4.27.0", + "@types/node-fetch": "^2.6.13", + "@types/streamify-string": "^1.0.4", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.5.0", + "eslint": "^8.2.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-jest": "^27.9.0", + "eslint-plugin-jsdoc": "^48.2.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.1.3", + "lerna": "^8.0.1", + "moleculer": "^0.14.35", + "nx": "17.2.5", + "prettier": "^3.1.1", + "typescript": "^5.9.2" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node": { + "name": "nextgraph", + "version": "0.1.1-alpha.7", + "license": "MIT/Apache-2.0" + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "license": "MIT" + }, + "node_modules/@comunica/actor-abstract-mediatyped": { + "version": "1.22.0", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-http-native": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@types/parse-link-header": "^1.0.0", + "cross-fetch": "^3.0.5", + "follow-redirects": "^1.5.1", + "parse-link-header": "^1.0.1" + }, + "peerDependencies": { + "@comunica/bus-http": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^1.22.0", + "@rdfjs/types": "*", + "htmlparser2": "^7.0.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.8.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "microdata-rdf-streaming-parser": "^1.2.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse-html": "^1.17.0", + "@comunica/core": "^1.17.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "rdfa-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse-html": "^1.0.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^1.22.0", + "@rdfjs/types": "*", + "relative-to-absolute-iri": "^1.0.5" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.4.0", + "@comunica/core": "^1.4.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/entities": { + "version": "3.0.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/htmlparser2": { + "version": "7.2.0", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.1.2", + "jsonld-streaming-parser": "^2.4.0", + "stream-to-string": "^1.2.0" + }, + "peerDependencies": { + "@comunica/bus-http": "^1.0.0", + "@comunica/bus-rdf-parse": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-n3": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "@types/n3": "^1.4.4", + "n3": "^1.6.3" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "rdfxml-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.1.0", + "@comunica/core": "^1.1.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "rdfa-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.8.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/bus-http": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@types/readable-stream": "^2.3.11", + "is-stream": "^2.0.0", + "readable-web-to-node-stream": "^3.0.2", + "web-streams-node": "^0.4.0" + }, + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-init": { + "version": "1.22.0", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-rdf-parse": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^1.22.0", + "@rdfjs/types": "*" + }, + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-rdf-parse-html": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + }, + "peerDependencies": { + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/context-entries": { + "version": "1.22.0", + "license": "MIT" + }, + "node_modules/@comunica/core": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@comunica/types": "^1.22.0", + "immutable": "^3.8.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@comunica/mediator-combine-union": { + "version": "1.22.0", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/mediator-number": { + "version": "1.22.0", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/mediator-race": { + "version": "1.22.0", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/types": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "asynciterator": "^3.2.0", + "immutable": "^3.8.2", + "sparqlalgebrajs": "^3.0.1" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@digitalbazaar/credentials-context": { + "version": "3.2.0", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/@digitalbazaar/data-integrity": { + "version": "2.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0", + "jsonld-signatures": "^11.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/ed25519-multikey": { + "version": "1.3.1", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/ed25519": "^1.6.0", + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@digitalbazaar/ed25519-signature-2020": { + "version": "5.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/ed25519-multikey": "^1.1.0", + "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", + "base58-universal": "^2.0.0", + "ed25519-signature-2020-context": "^1.1.0", + "jsonld-signatures": "^11.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/ed25519-verification-key-2020": { + "version": "4.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/ed25519": "^1.6.0", + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0", + "crypto-ld": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite": { + "version": "1.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/ed25519-multikey": "^1.0.0", + "jsonld": "^8.1.0", + "rdf-canonize": "^4.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/jsonld": { + "version": "8.3.3", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/node_modules/jsonld/node_modules/rdf-canonize": { + "version": "3.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "license": "BSD-3-Clause", + "dependencies": { + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalbazaar/vc": { + "version": "7.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/credentials-context": "^3.2.0", + "ed25519-signature-2018-context": "^1.1.0", + "jsonld": "^8.3.3", + "jsonld-signatures": "^11.5.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/vc/node_modules/jsonld": { + "version": "8.3.3", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/vc/node_modules/rdf-canonize": { + "version": "3.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@emnapi/core": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.46.0", + "dev": true, + "license": "MIT", + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "text-decoding": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/console": "30.1.2", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.1.3", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.0.5", + "jest-config": "30.1.3", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.1.3", + "jest-resolve-dependencies": "30.1.3", + "jest-runner": "30.1.3", + "jest-runtime": "30.1.3", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "jest-watcher": "30.1.3", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "expect": "30.1.2", + "jest-snapshot": "30.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.1.2", + "@jest/expect": "30.1.2", + "@jest/types": "30.0.5", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.1.2", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "jest-worker": "30.1.0", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "30.0.5", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/schemas/node_modules/@sinclair/typebox": { + "version": "0.34.41", + "license": "MIT" + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/console": "30.1.2", + "@jest/types": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.1.3", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.0", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/types": { + "version": "30.0.5", + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lerna/create": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "20.1.2", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "init-package-json": "6.0.3", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.0", + "libnpmpublish": "9.0.9", + "load-json-file": "6.2.0", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "nx": ">=17.1.2 < 21", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-reduce": "^2.1.0", + "pacote": "^18.0.6", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.4", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "^3.0.0", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "tar": "6.2.1", + "temp-dir": "1.0.0", + "through": "2.3.8", + "tinyglobby": "0.2.12", + "upath": "2.0.1", + "uuid": "^10.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "5.0.1", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@lerna/create/node_modules/@npmcli/package-json": { + "version": "5.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@lerna/create/node_modules/@nx/devkit": { + "version": "20.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 19 <= 21" + } + }, + "node_modules/@lerna/create/node_modules/@nx/devkit/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/cli-spinners": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@lerna/create/node_modules/get-stream": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/is-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/lines-and-columns": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@lerna/create/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@lerna/create/node_modules/minipass": { + "version": "4.2.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/node-fetch": { + "version": "2.6.7", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@lerna/create/node_modules/npm-package-arg": { + "version": "11.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@lerna/create/node_modules/nx": { + "version": "20.8.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.8.3", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "resolve.exports": "2.0.3", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "20.8.2", + "@nx/nx-darwin-x64": "20.8.2", + "@nx/nx-freebsd-x64": "20.8.2", + "@nx/nx-linux-arm-gnueabihf": "20.8.2", + "@nx/nx-linux-arm64-gnu": "20.8.2", + "@nx/nx-linux-arm64-musl": "20.8.2", + "@nx/nx-linux-x64-gnu": "20.8.2", + "@nx/nx-linux-x64-musl": "20.8.2", + "@nx/nx-win32-arm64-msvc": "20.8.2", + "@nx/nx-win32-x64-msvc": "20.8.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@lerna/create/node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/nx/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/ora": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/ora/node_modules/cli-spinners": { + "version": "2.9.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/pify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/rimraf": { + "version": "4.4.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/tinyglobby": { + "version": "0.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/@lerna/create/node_modules/uuid": { + "version": "10.0.0", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@noble/ed25519": { + "version": "1.7.5", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/arborist": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.1", + "@npmcli/installed-package-contents": "^2.1.0", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^7.1.1", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.1.0", + "@npmcli/query": "^3.1.0", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "bin-links": "^4.0.4", + "cacache": "^18.0.3", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^7.0.2", + "json-parse-even-better-errors": "^3.0.2", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^7.2.1", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-registry-fetch": "^17.0.1", + "pacote": "^18.0.6", + "parse-conflict-json": "^3.0.0", + "proc-log": "^4.2.0", + "proggy": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.6", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/arborist/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/metavuln-calculator": { + "version": "7.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cacache": "^18.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^18.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/query": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "8.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "10.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/tao": { + "version": "v17.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "v17.2.5", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.8.2", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "11.4.4-cjs.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.7.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.3.2-cjs.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.8.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5" + } + }, + "node_modules/@octokit/request": { + "version": "8.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/rest": { + "version": "20.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.4.4-cjs.2", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.3.2-cjs.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "13.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/types": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@seald-io/binary-search-tree": { + "version": "1.0.3" + }, + "node_modules/@seald-io/nedb": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@seald-io/binary-search-tree": "^1.0.2", + "localforage": "^1.9.0", + "util": "^0.12.4" + } + }, + "node_modules/@semapps/activitypub": { + "resolved": "packages/activitypub", + "link": true + }, + "node_modules/@semapps/auth": { + "resolved": "packages/auth", + "link": true + }, + "node_modules/@semapps/backup": { + "resolved": "packages/backup", + "link": true + }, + "node_modules/@semapps/core": { + "resolved": "packages/core", + "link": true + }, + "node_modules/@semapps/crypto": { + "resolved": "packages/crypto", + "link": true + }, + "node_modules/@semapps/importer": { + "resolved": "packages/importer", + "link": true + }, + "node_modules/@semapps/inference": { + "resolved": "packages/inference", + "link": true + }, + "node_modules/@semapps/jsonld": { + "resolved": "packages/jsonld", + "link": true + }, + "node_modules/@semapps/ldp": { + "resolved": "packages/ldp", + "link": true + }, + "node_modules/@semapps/middlewares": { + "resolved": "packages/middlewares", + "link": true + }, + "node_modules/@semapps/migration": { + "resolved": "packages/migration", + "link": true + }, + "node_modules/@semapps/mime-types": { + "resolved": "packages/mime-types", + "link": true + }, + "node_modules/@semapps/nodeinfo": { + "resolved": "packages/nodeinfo", + "link": true + }, + "node_modules/@semapps/notifications": { + "resolved": "packages/notifications", + "link": true + }, + "node_modules/@semapps/ontologies": { + "resolved": "packages/ontologies", + "link": true + }, + "node_modules/@semapps/solid": { + "resolved": "packages/solid", + "link": true + }, + "node_modules/@semapps/sparql-endpoint": { + "resolved": "packages/sparql-endpoint", + "link": true + }, + "node_modules/@semapps/sync": { + "resolved": "packages/sync", + "link": true + }, + "node_modules/@semapps/triplestore": { + "resolved": "packages/triplestore", + "link": true + }, + "node_modules/@semapps/void": { + "resolved": "packages/void", + "link": true + }, + "node_modules/@semapps/webacl": { + "resolved": "packages/webacl", + "link": true + }, + "node_modules/@semapps/webfinger": { + "resolved": "packages/webfinger", + "link": true + }, + "node_modules/@semapps/webhooks": { + "resolved": "packages/webhooks", + "link": true + }, + "node_modules/@semapps/webid": { + "resolved": "packages/webid", + "link": true + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/dotenv-flow": { + "version": "3.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/@types/http-link-header": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ioredis": { + "version": "4.28.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "30.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonld": { + "version": "1.5.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/luxon": { + "version": "3.7.1", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/n3": { + "version": "1.26.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "24.5.2", + "license": "MIT", + "dependencies": { + "undici-types": "~7.12.0" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-link-header": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sparqljs": { + "version": "3.1.12", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "license": "MIT" + }, + "node_modules/@types/streamify-string": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/url-join": { + "version": "4.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/abbrev": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/args": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "camelcase": "5.0.0", + "chalk": "2.4.2", + "leven": "2.1.0", + "mri": "1.1.4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/args/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/camelcase": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/args/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/args/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/args/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/args/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-never": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/async": { + "version": "3.2.6", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynciterator": { + "version": "3.9.0", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "license": "MIT" + }, + "node_modules/axe-core": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/transform": "30.1.2", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.0", + "babel-preset-jest": "30.0.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.1", + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.0.1", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-import-meta": { + "version": "2.3.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/template": "^7.25.9", + "tslib": "^2.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.10.0" + } + }, + "node_modules/babel-plugin-transform-vite-meta-env": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12" + } + }, + "node_modules/babel-plugin-transform-vite-meta-glob": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12", + "glob": "^10.3.10" + } + }, + "node_modules/babel-plugin-transform-vite-meta-hot": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.0.1", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.0.1", + "babel-preset-current-node-syntax": "^1.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" + } + }, + "node_modules/babel-preset-vite": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12", + "babel-plugin-transform-vite-meta-env": "1.0.3", + "babel-plugin-transform-vite-meta-glob": "1.1.2", + "babel-plugin-transform-vite-meta-hot": "1.0.0" + } + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.11", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base58-universal": { + "version": "2.0.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/base64url-universal": { + "version": "2.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.6", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bin-links": { + "version": "4.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.2", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bull": { + "version": "3.29.3", + "license": "MIT", + "dependencies": { + "cron-parser": "^2.13.0", + "debuglog": "^1.0.0", + "get-port": "^5.1.1", + "ioredis": "^4.27.0", + "lodash": "^4.17.21", + "p-timeout": "^3.2.0", + "promise.prototype.finally": "^3.1.2", + "semver": "^7.3.2", + "util.promisify": "^1.0.1", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bull/node_modules/cron-parser": { + "version": "2.18.0", + "license": "MIT", + "dependencies": { + "is-nan": "^1.3.0", + "moment-timezone": "^0.5.31" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/bull/node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/busboy": { + "version": "0.3.1", + "dependencies": { + "dicer": "0.3.0" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/byte-size": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001743", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "license": "Apache-2.0" + }, + "node_modules/cas": { + "version": "0.0.5", + "dependencies": { + "cheerio": "0.19.0" + } + }, + "node_modules/cas/node_modules/cheerio": { + "version": "0.19.0", + "license": "MIT", + "dependencies": { + "css-select": "~1.0.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "lodash": "^3.2.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cas/node_modules/css-select": { + "version": "1.0.0", + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "1.0", + "domutils": "1.4", + "nth-check": "~1.0.0" + } + }, + "node_modules/cas/node_modules/css-what": { + "version": "1.0.0", + "license": "BSD-like", + "engines": { + "node": "*" + } + }, + "node_modules/cas/node_modules/dom-serializer": { + "version": "0.1.1", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/cas/node_modules/domelementtype": { + "version": "1.3.1", + "license": "BSD-2-Clause" + }, + "node_modules/cas/node_modules/domhandler": { + "version": "2.3.0", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/cas/node_modules/domutils": { + "version": "1.4.3", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/cas/node_modules/entities": { + "version": "1.1.2", + "license": "BSD-2-Clause" + }, + "node_modules/cas/node_modules/htmlparser2": { + "version": "3.8.3", + "license": "MIT", + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/cas/node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/cas/node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/cas/node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cas/node_modules/htmlparser2/node_modules/domutils": { + "version": "1.5.1", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/cas/node_modules/htmlparser2/node_modules/entities": { + "version": "1.0.0", + "license": "BSD-like" + }, + "node_modules/cas/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/cas/node_modules/lodash": { + "version": "3.10.1", + "license": "MIT" + }, + "node_modules/cas/node_modules/readable-stream": { + "version": "1.1.14", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/cas/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" + }, + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/chardet": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cheerio": { + "version": "0.22.0", + "license": "MIT", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "0.1.1", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/cheerio/node_modules/domelementtype": { + "version": "1.3.1", + "license": "BSD-2-Clause" + }, + "node_modules/cheerio/node_modules/domhandler": { + "version": "2.4.2", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "1.7.0", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/cheerio/node_modules/domutils/node_modules/dom-serializer": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/cheerio/node_modules/domutils/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/cheerio/node_modules/domutils/node_modules/entities": { + "version": "2.2.0", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "1.1.2", + "license": "BSD-2-Clause" + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "3.10.1", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "4.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmd-shim": { + "version": "6.0.3", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/columnify": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/consolidate": { + "version": "0.14.5", + "license": "MIT", + "dependencies": { + "bluebird": "^3.1.1" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-parser": "^4.0.0", + "dateformat": "^3.0.3", + "get-pkg-repo": "^4.2.1", + "git-raw-commits": "^3.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^5.0.0", + "normalize-package-data": "^3.0.3", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^3.0.0", + "dateformat": "^3.0.3", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "meow": "^8.1.2", + "semver": "^7.0.0", + "split": "^1.0.1" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-commits-filter": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-commits-parser": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^3.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "git-raw-commits": "^3.0.0", + "git-semver-tags": "^5.0.0", + "meow": "^8.1.2" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.45.1", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cpu-features": { + "version": "0.0.10", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/credentials-context": { + "version": "1.0.0", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/cron": { + "version": "4.3.3", + "license": "MIT", + "dependencies": { + "@types/luxon": "~3.7.0", + "luxon": "~3.7.0" + }, + "engines": { + "node": ">=18.x" + } + }, + "node_modules/cron-parser": { + "version": "4.9.0", + "license": "MIT", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-ld": { + "version": "7.0.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14" + } + }, + "node_modules/css-select": { + "version": "1.2.0", + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-select/node_modules/domelementtype": { + "version": "1.3.1", + "license": "BSD-2-Clause" + }, + "node_modules/css-select/node_modules/domutils": { + "version": "1.5.1", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "license": "BSD-2-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/dargs": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dashify": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/datauri": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "image-size": "^0.7.3", + "mimer": "^1.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/denque": { + "version": "1.5.1", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-libc": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dicer": { + "version": "0.3.0", + "dependencies": { + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/domutils/node_modules/dom-serializer": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-flow": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "dotenv": "^8.6.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/dotenv-flow/node_modules/dotenv": { + "version": "8.6.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ed25519-signature-2018-context": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/ed25519-signature-2020-context": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.222", + "license": "ISC" + }, + "node_modules/email-templates": { + "version": "2.7.1", + "license": "MIT", + "dependencies": { + "bluebird": "^3.0.0", + "consolidate": "^0.14.2", + "debug": "^2.2.0", + "glob": "^6.0.0", + "juice": "^4.1.0", + "lodash": "^4.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/email-templates/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/email-templates/node_modules/glob": { + "version": "6.0.4", + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/email-templates/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/emittery": { + "version": "0.13.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envfile": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/envfile/-/envfile-7.1.0.tgz", + "integrity": "sha512-dyH4QnnZsArCLhPASr29eqBWDvKpq0GggQFTmysTT/S9TTmt1JrEKNvTBc09Cd7ujVZQful2HBGRMe2agu7Krg==", + "license": "Artistic-2.0", + "bin": { + "envfile": "bin.cjs" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.4", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "48.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@es-joy/jsdoccomment": "~0.46.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.5", + "escape-string-regexp": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "10.4.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/synckit": { + "version": "0.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.9", + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit-x": { + "version": "0.2.2", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/expect": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.1.2", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/expo-server-sdk": { + "version": "3.15.0", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.0", + "promise-limit": "^2.7.0", + "promise-retry": "^2.0.1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express-session": { + "version": "1.18.2", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.1.0", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-validator": { + "version": "1.19.1", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up/node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up/node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/formidable": { + "version": "1.2.6", + "license": "MIT", + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/front-matter": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/front-matter/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/aproba": { + "version": "2.1.0", + "license": "ISC" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stdin": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^7.0.0", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^8.1.2", + "semver": "^7.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-up": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "node_modules/git-url-parse": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^7.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "dev": true, + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "license": "MIT" + }, + "node_modules/glob": { + "version": "10.4.5", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/google-libphonenumber": { + "version": "3.2.43", + "license": "(MIT AND Apache-2.0)", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "license": "ISC" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/html-to-text": { + "version": "2.1.3", + "license": "MIT", + "dependencies": { + "he": "^1.0.0", + "htmlparser": "^1.7.7", + "optimist": "^0.6.1", + "underscore": "^1.8.3", + "underscore.string": "^3.2.3" + }, + "bin": { + "html-to-text": "bin/cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/htmlparser": { + "version": "1.7.7", + "engines": { + "node": ">=0.1.33" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-link-header": { + "version": "1.1.3", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/http-signature-header": { + "version": "1.3.1", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.7.5", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "license": "MIT" + }, + "node_modules/immutable": { + "version": "3.8.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/init-package-json": { + "version": "6.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^5.0.0", + "npm-package-arg": "^11.0.0", + "promzard": "^1.0.0", + "read": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ioredis": { + "version": "4.30.1", + "license": "MIT", + "dependencies": { + "@ioredis/commands": "^1.0.2", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.1", + "denque": "^1.1.0", + "lodash.defaults": "^4.2.0", + "lodash.flatten": "^4.4.0", + "lodash.isarguments": "^3.1.0", + "p-map": "^2.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ioredis/node_modules/p-map": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ip-address": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "3.9.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/core": "30.1.3", + "@jest/types": "30.0.5", + "import-local": "^3.2.0", + "jest-cli": "30.1.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "30.0.5", + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "jest-util": "30.0.5", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-circus": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.1.2", + "@jest/expect": "30.1.2", + "@jest/test-result": "30.1.3", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.1.0", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-runtime": "30.1.3", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", + "p-limit": "^3.1.0", + "pretty-format": "30.0.5", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/dedent": { + "version": "1.7.0", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/jest-cli": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/core": "30.1.3", + "@jest/test-result": "30.1.3", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.1.3", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.1.3", + "@jest/types": "30.0.5", + "babel-jest": "30.1.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.1.3", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.1.2", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.1.3", + "jest-runner": "30.1.3", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/@jest/schemas": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "30.0.1", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each": { + "version": "30.1.0", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "jest-util": "30.0.5", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.1.2", + "@jest/fake-timers": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.1.0", + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "jest-worker": "30.1.0", + "micromatch": "^4.0.8", + "walker": "^1.0.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-leak-detector": { + "version": "30.1.0", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.1.2", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-diff": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "30.1.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.5", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock": { + "version": "30.0.5", + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "30.0.1", + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/console": "30.1.2", + "@jest/environment": "30.1.2", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.1.2", + "jest-haste-map": "30.1.0", + "jest-leak-detector": "30.1.0", + "jest-message-util": "30.1.0", + "jest-resolve": "30.1.3", + "jest-runtime": "30.1.3", + "jest-util": "30.0.5", + "jest-watcher": "30.1.3", + "jest-worker": "30.1.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.1.2", + "@jest/fake-timers": "30.1.2", + "@jest/globals": "30.1.2", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.1.3", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.1.2", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.1.2", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "babel-preset-current-node-syntax": "^1.1.0", + "chalk": "^4.1.2", + "expect": "30.1.2", + "graceful-fs": "^4.2.11", + "jest-diff": "30.1.2", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "pretty-format": "30.0.5", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "30.1.2", + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util": { + "version": "30.0.5", + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate": { + "version": "30.1.0", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.0.5", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/leven": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-watcher": { + "version": "30.1.3", + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.1.3", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.0.5", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker": { + "version": "30.1.0", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.0.5", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jose": { + "version": "5.10.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld": { + "version": "3.3.2", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "object.fromentries": "^2.0.2", + "rdf-canonize": "^2.0.1", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonld-context-parser": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/jsonld-context-parser/node_modules/@types/node": { + "version": "18.19.127", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/jsonld-context-parser/node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, + "node_modules/jsonld-signatures": { + "version": "11.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "jsonld": "^8.0.0", + "rdf-canonize": "^4.0.1", + "serialize-error": "^8.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsonld-signatures/node_modules/jsonld": { + "version": "8.3.3", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsonld-signatures/node_modules/jsonld/node_modules/rdf-canonize": { + "version": "3.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsonld-streaming-parser": { + "version": "2.4.3", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.1.3", + "jsonparse": "^1.3.1", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/jsonld-streaming-serializer": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.0.0" + } + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/jsonld/node_modules/rdf-canonize": { + "version": "2.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "semver": "^6.3.0", + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonld/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jsonld/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/juice": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "cheerio": "^0.22.0", + "commander": "^2.15.1", + "cross-spawn": "^5.1.0", + "deep-extend": "^0.5.1", + "mensch": "^0.3.3", + "slick": "^1.12.2", + "web-resource-inliner": "^4.2.1" + }, + "bin": { + "juice": "bin/juice" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/juice/node_modules/cross-spawn": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/juice/node_modules/deep-extend": { + "version": "0.5.1", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/juice/node_modules/lru-cache": { + "version": "4.1.5", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/juice/node_modules/shebang-command": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/juice/node_modules/shebang-regex": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/juice/node_modules/which": { + "version": "1.3.1", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/juice/node_modules/yallist": { + "version": "2.1.2", + "license": "ISC" + }, + "node_modules/just-diff": { + "version": "6.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jwa": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ky": { + "version": "0.33.3", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.11.0", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.3.2", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lerna": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create": "8.2.4", + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "20.1.2", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-angular": "7.0.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "envinfo": "7.13.0", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "import-local": "3.1.0", + "ini": "^1.3.8", + "init-package-json": "6.0.3", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "jest-diff": ">=29.4.3 < 30", + "js-yaml": "4.1.0", + "libnpmaccess": "8.0.6", + "libnpmpublish": "9.0.9", + "load-json-file": "6.2.0", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "nx": ">=17.1.2 < 21", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-pipe": "3.1.0", + "p-queue": "6.6.2", + "p-reduce": "2.1.0", + "p-waterfall": "2.1.1", + "pacote": "^18.0.6", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.8", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "tar": "6.2.1", + "temp-dir": "1.0.0", + "through": "2.3.8", + "tinyglobby": "0.2.12", + "typescript": ">=3 < 6", + "upath": "2.0.1", + "uuid": "^10.0.0", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "5.0.1", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "lerna": "dist/cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/lerna/node_modules/@npmcli/package-json": { + "version": "5.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/@nx/devkit": { + "version": "20.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 19 <= 21" + } + }, + "node_modules/lerna/node_modules/@nx/devkit/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/cli-spinners": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/lerna/node_modules/get-stream": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/is-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/lines-and-columns": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lerna/node_modules/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/lerna/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/lerna/node_modules/minipass": { + "version": "4.2.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/node-fetch": { + "version": "2.6.7", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/npm-package-arg": { + "version": "11.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/nx": { + "version": "20.8.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.8.3", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "resolve.exports": "2.0.3", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "20.8.2", + "@nx/nx-darwin-x64": "20.8.2", + "@nx/nx-freebsd-x64": "20.8.2", + "@nx/nx-linux-arm-gnueabihf": "20.8.2", + "@nx/nx-linux-arm64-gnu": "20.8.2", + "@nx/nx-linux-arm64-musl": "20.8.2", + "@nx/nx-linux-x64-gnu": "20.8.2", + "@nx/nx-linux-x64-musl": "20.8.2", + "@nx/nx-win32-arm64-msvc": "20.8.2", + "@nx/nx-win32-x64-msvc": "20.8.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/nx/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/ora": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/ora/node_modules/cli-spinners": { + "version": "2.9.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/pify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/rimraf": { + "version": "4.4.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/tinyglobby": { + "version": "0.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/lerna/node_modules/uuid": { + "version": "10.0.0", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/leven": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "8.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish": { + "version": "9.0.9", + "dev": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", + "semver": "^7.3.7", + "sigstore": "^2.2.0", + "ssri": "^10.0.6" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "license": "MIT" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "license": "MIT" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "license": "MIT" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "license": "MIT" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "license": "MIT" + }, + "node_modules/lodash.unescape": { + "version": "4.0.1", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long-timeout": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/luxon": { + "version": "3.7.2", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-streams": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.2" + } + }, + "node_modules/memory-streams/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/memory-streams/node_modules/readable-stream": { + "version": "1.0.34", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/memory-streams/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" + }, + "node_modules/mensch": { + "version": "0.3.4", + "license": "MIT" + }, + "node_modules/meow": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/microdata-rdf-streaming-parser": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^6.0.0", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimer": { + "version": "1.1.1", + "license": "MIT", + "bin": { + "mimer": "bin/mimer" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.12", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "license": "MIT" + }, + "node_modules/modify-values": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/moleculer": { + "version": "0.14.35", + "license": "MIT", + "dependencies": { + "args": "^5.0.3", + "eventemitter2": "^6.4.9", + "fastest-validator": "^1.19.0", + "glob": "^7.2.0", + "ipaddr.js": "^2.2.0", + "kleur": "^4.1.5", + "lodash": "^4.17.21", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "recursive-watch": "^1.1.4" + }, + "bin": { + "moleculer-runner": "bin/moleculer-runner.js", + "moleculer-runner-esm": "bin/moleculer-runner.mjs" + }, + "engines": { + "node": ">= 10.x.x" + }, + "funding": { + "url": "https://github.com/moleculerjs/moleculer?sponsor=1" + }, + "peerDependencies": { + "amqplib": "^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "avsc": "^5.0.0", + "bunyan": "^1.0.0", + "cbor-x": "^0.8.3 || ^0.9.0 || ^1.2.0", + "dd-trace": "^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0", + "debug": "^4.0.0", + "etcd3": "^1.0.0", + "ioredis": "^4.0.0 || ^5.0.0", + "jaeger-client": "^3.0.0", + "kafka-node": "^5.0.0", + "log4js": "^6.0.0", + "mqtt": "^4.0.0 || ^5.0.0", + "msgpack5": "^5.0.0 || ^6.0.0", + "nats": "^1.0.0 || ^2.0.0", + "node-nats-streaming": "^0.0.51 || ^0.2.0 || ^0.3.0", + "notepack.io": "^2.0.0 || ^3.0.0", + "pino": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "protobufjs": "^6.0.0 || ^7.0.0", + "redlock": "^4.0.0", + "rhea-promise": "^1.0.0 || ^2.0.0", + "thrift": "^0.12.0 || ^0.16.0", + "winston": "^3.0.0" + }, + "peerDependenciesMeta": { + "amqplib": { + "optional": true + }, + "avsc": { + "optional": true + }, + "bunyan": { + "optional": true + }, + "cbor-x": { + "optional": true + }, + "dd-trace": { + "optional": true + }, + "debug": { + "optional": true + }, + "etcd3": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "jaeger-client": { + "optional": true + }, + "kafka-node": { + "optional": true + }, + "log4js": { + "optional": true + }, + "mqtt": { + "optional": true + }, + "msgpack5": { + "optional": true + }, + "nats": { + "optional": true + }, + "node-nats-streaming": { + "optional": true + }, + "notepack.io": { + "optional": true + }, + "pino": { + "optional": true + }, + "protobufjs": { + "optional": true + }, + "redlock": { + "optional": true + }, + "rhea-promise": { + "optional": true + }, + "thrift": { + "optional": true + }, + "winston": { + "optional": true + } + } + }, + "node_modules/moleculer-bull": { + "version": "0.2.8", + "license": "MIT", + "dependencies": { + "bull": "^3.15.0", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" + } + }, + "node_modules/moleculer-db": { + "version": "0.8.29", + "license": "MIT", + "dependencies": { + "@seald-io/nedb": "^3.0.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0" + } + }, + "node_modules/moleculer-mail": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "email-templates": "^2.7.1", + "lodash": "^4.17.21", + "nodemailer": "^4.6.7", + "nodemailer-html-to-text": "^2.1.0" + }, + "engines": { + "node": ">= 6.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" + } + }, + "node_modules/moleculer-schedule": { + "version": "0.2.3", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "node-schedule": "^2.0.0" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.13" + } + }, + "node_modules/moleculer-web": { + "version": "0.10.8", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^1.0.0", + "body-parser": "^1.19.0", + "es6-error": "^4.1.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "isstream": "^0.1.2", + "kleur": "^4.1.4", + "lodash": "^4.17.21", + "path-to-regexp": "^3.1.0", + "qs": "^6.11.0", + "serve-static": "^1.14.1" + }, + "engines": { + "node": ">= 10.x.x" + }, + "peerDependencies": { + "moleculer": "^0.13.0 || ^0.14.0" + } + }, + "node_modules/moleculer-web/node_modules/path-to-regexp": { + "version": "3.3.0", + "license": "MIT" + }, + "node_modules/moleculer/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.48", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mri": { + "version": "1.1.4", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/n3": { + "version": "1.26.0", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/n3/node_modules/readable-stream": { + "version": "4.7.0", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/nan": { + "version": "2.23.0", + "license": "MIT", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/napi-postinstall": { + "version": "0.3.3", + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "license": "MIT" + }, + "node_modules/nextgraph": { + "resolved": "../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", + "link": true + }, + "node_modules/node-abi": { + "version": "3.77.0", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.21", + "license": "MIT" + }, + "node_modules/node-schedule": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "cron-parser": "^4.2.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/nodemailer": { + "version": "4.7.0", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemailer-html-to-text": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "html-to-text": "^2.1.0" + } + }, + "node_modules/nopt": { + "version": "7.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/nx": { + "version": "v17.2.5", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nrwl/tao": "v17.2.5", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.5.1", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "v17.2.5", + "@nx/nx-darwin-x64": "v17.2.5", + "@nx/nx-freebsd-x64": "v17.2.5", + "@nx/nx-linux-arm-gnueabihf": "v17.2.5", + "@nx/nx-linux-arm64-gnu": "v17.2.5", + "@nx/nx-linux-arm64-musl": "v17.2.5", + "@nx/nx-linux-x64-gnu": "v17.2.5", + "@nx/nx-linux-x64-musl": "v17.2.5", + "@nx/nx-win32-arm64-msvc": "v17.2.5", + "@nx/nx-win32-x64-msvc": "v17.2.5" + }, + "peerDependencies": { + "@swc-node/register": "^1.6.7", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/@nx/nx-linux-x64-gnu": { + "version": "v17.2.5", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/nx/node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/nx/node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/nx/node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nx/node_modules/cli-spinners": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nx/node_modules/dotenv": { + "version": "16.3.2", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/nx/node_modules/dotenv-expand": { + "version": "10.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/lines-and-columns": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/semver": { + "version": "7.5.3", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oidc-token-hash": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client": { + "version": "4.9.1", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.1.0", + "got": "^11.8.0", + "jose": "^2.0.5", + "lru-cache": "^6.0.0", + "make-error": "^1.3.6", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "engines": { + "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/jose": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "@panva/asn1.js": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "license": "MIT/X11", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "license": "MIT" + }, + "node_modules/optimist/node_modules/wordwrap": { + "version": "0.0.3", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "18.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-conflict-json": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/parse-imports": { + "version": "2.2.1", + "dev": true, + "license": "Apache-2.0 AND MIT", + "dependencies": { + "es-module-lexer": "^1.5.3", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/parse-link-header": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "xtend": "~4.0.1" + } + }, + "node_modules/parse-path": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/parse-url": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/passport": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-cas2": { + "version": "0.0.12", + "license": "MIT", + "dependencies": { + "cas": "https://github.com/joshchan/node-cas", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-local": { + "version": "1.0.0", + "dependencies": { + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pause": { + "version": "0.0.1" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "30.0.5", + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "4.2.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/proggy": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-limit": { + "version": "2.7.0", + "license": "ISC" + }, + "node_modules/promise-polyfill": { + "version": "1.1.6", + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/promzard": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/protocols": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.15.0", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pug": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.3", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "7.0.1", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rdf-canonize": { + "version": "4.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/rdf-data-factory": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.0" + } + }, + "node_modules/rdf-data-factory/node_modules/@rdfjs/types": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-data-model": { + "version": "1.0.0", + "license": "MIT", + "bin": { + "rdf-data-model-test": "bin/test.js" + } + }, + "node_modules/rdf-isomorphic": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "hash.js": "^1.1.7", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.7.0" + } + }, + "node_modules/rdf-parse": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "@comunica/actor-http-native": "~1.22.0", + "@comunica/actor-rdf-parse-html": "~1.22.0", + "@comunica/actor-rdf-parse-html-microdata": "~1.22.0", + "@comunica/actor-rdf-parse-html-rdfa": "~1.22.0", + "@comunica/actor-rdf-parse-html-script": "~1.22.0", + "@comunica/actor-rdf-parse-jsonld": "^1.22.0", + "@comunica/actor-rdf-parse-n3": "~1.22.0", + "@comunica/actor-rdf-parse-rdfxml": "~1.22.0", + "@comunica/actor-rdf-parse-xml-rdfa": "~1.22.0", + "@comunica/bus-http": "~1.22.0", + "@comunica/bus-init": "~1.22.0", + "@comunica/bus-rdf-parse": "~1.22.0", + "@comunica/bus-rdf-parse-html": "~1.22.0", + "@comunica/core": "~1.22.0", + "@comunica/mediator-combine-union": "~1.22.0", + "@comunica/mediator-number": "~1.22.0", + "@comunica/mediator-race": "~1.22.0", + "@rdfjs/types": "*", + "stream-to-string": "^1.2.0" + } + }, + "node_modules/rdf-string": { + "version": "1.6.3", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/rdf-terms": { + "version": "1.11.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "rdf-string": "^1.6.0" + } + }, + "node_modules/rdfa-streaming-parser": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^6.0.0", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/rdfxml-streaming-parser": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.0", + "sax": "^1.2.4" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "license": "MIT" + }, + "node_modules/read": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-stream-node-to-web": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "readable-stream": "^4.7.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "4.7.0", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/recursive-watch": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "ttl": "^1.3.0" + }, + "bin": { + "recursive-watch": "bin.js" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "6.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/relative-to-absolute-iri": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/request": { + "version": "2.88.2", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/http-signature": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/request/node_modules/jsprim": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rsync": { + "version": "0.6.1", + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sanitize-html": { + "version": "2.17.0", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^8.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/dom-serializer": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domhandler": { + "version": "5.0.3", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domutils": { + "version": "3.2.2", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/entities": { + "version": "4.5.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/htmlparser2": { + "version": "8.0.2", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/sanitize-html/node_modules/is-plain-object": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "license": "ISC" + }, + "node_modules/security-context": { + "version": "4.0.0" + }, + "node_modules/semapps-tests": { + "resolved": "tests", + "link": true + }, + "node_modules/semver": { + "version": "7.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sharp": { + "version": "0.31.3", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "2.3.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.4", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slashes": { + "version": "3.0.12", + "dev": true, + "license": "ISC" + }, + "node_modules/slick": { + "version": "1.12.2", + "license": "MIT (http://mootools.net/license.txt)", + "engines": { + "node": "*" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/sodium-native": { + "version": "3.4.1", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparqlalgebrajs": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/sparqljs": "^3.1.2", + "fast-deep-equal": "^3.1.3", + "minimist": "^1.2.5", + "rdf-data-factory": "^1.1.0", + "rdf-isomorphic": "^1.3.0", + "rdf-string": "^1.6.0", + "sparqljs": "^3.4.2" + }, + "bin": { + "sparqlalgebrajs": "bin/sparqlalgebrajs.js" + } + }, + "node_modules/sparqljs": { + "version": "3.7.3", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^1.1.2" + }, + "bin": { + "sparqljs": "bin/sparql-to-json" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/sparqljson-parse": { + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "^13.1.0", + "JSONStream": "^1.3.3", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/sparqljson-parse/node_modules/@types/node": { + "version": "13.13.52", + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/ssh2": { + "version": "1.17.0", + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.23.0" + } + }, + "node_modules/ssh2-sftp-client": { + "version": "7.2.3", + "license": "Apache-2.0", + "dependencies": { + "concat-stream": "^2.0.0", + "promise-retry": "^2.0.1", + "ssh2": "^1.8.0" + }, + "engines": { + "node": ">=10.24.1" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "10.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-to-string": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "promise-polyfill": "^1.1.6" + } + }, + "node_modules/streamify-string": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-template": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/superagent": { + "version": "3.8.3", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/superagent/node_modules/form-data": { + "version": "2.5.5", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/superagent/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/superagent/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/superagent/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/superagent/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/superagent/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/supertest": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^3.8.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.11.11", + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/synckit/node_modules/@pkgr/core": { + "version": "0.2.9", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/text-decoding": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/treeverse": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/ttl": { + "version": "1.3.1", + "license": "MIT" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.2", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "license": "MIT" + }, + "node_modules/underscore.string": { + "version": "3.3.6", + "license": "MIT", + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/underscore.string/node_modules/sprintf-js": { + "version": "1.1.3", + "license": "BSD-3-Clause" + }, + "node_modules/undici": { + "version": "5.29.0", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "7.12.0", + "license": "MIT" + }, + "node_modules/undici/node_modules/@fastify/busboy": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "for-each": "^0.3.3", + "get-intrinsic": "^1.2.6", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "object.getownpropertydescriptors": "^2.1.8", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-data-url": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vc-js": { + "version": "0.6.4", + "license": "BSD-3-Clause", + "dependencies": { + "commander": "^2.20.3", + "credentials-context": "^1.0.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0", + "get-stdin": "^7.0.0", + "jsonld": "^2.0.2", + "jsonld-signatures": "^5.0.0", + "supports-color": "^7.1.0" + }, + "bin": { + "vc-js": "bin/vc-js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/base64url-universal": { + "version": "1.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/vc-js/node_modules/crypto-ld": { + "version": "3.9.0", + "license": "BSD-3-Clause", + "dependencies": { + "base64url-universal": "^1.0.1", + "bs58": "^4.0.1", + "node-forge": "~0.10.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8.3.0" + }, + "optionalDependencies": { + "sodium-native": "^3.2.0" + } + }, + "node_modules/vc-js/node_modules/fs-extra": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/vc-js/node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/vc-js/node_modules/jsonld": { + "version": "2.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "rdf-canonize": "^1.0.2", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vc-js/node_modules/jsonld-signatures": { + "version": "5.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1", + "crypto-ld": "^3.7.0", + "jsonld": "^2.0.2", + "node-forge": "^0.10.0", + "security-context": "^4.0.0", + "serialize-error": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/vc-js/node_modules/rdf-canonize": { + "version": "1.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "node-forge": "^0.10.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vc-js/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/vc-js/node_modules/serialize-error": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/type-fest": { + "version": "0.8.1", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/vc-js/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/verror": { + "version": "1.10.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/verror/node_modules/extsprintf": { + "version": "1.4.1", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/void-elements": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wait-for-expect": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/walk-up-path": { + "version": "3.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/walker": { + "version": "1.0.8", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-resource-inliner": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "async": "^3.1.0", + "chalk": "^2.4.2", + "datauri": "^2.0.0", + "htmlparser2": "^4.0.0", + "lodash.unescape": "^4.0.1", + "request": "^2.88.0", + "safer-buffer": "^2.1.2", + "valid-data-url": "^2.0.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/web-resource-inliner/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/web-resource-inliner/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/web-resource-inliner/node_modules/domhandler": { + "version": "3.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/web-resource-inliner/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/htmlparser2": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/web-resource-inliner/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-streams-node": { + "version": "0.4.0", + "license": "Apache-2.0", + "dependencies": { + "is-stream": "^1.1.0", + "readable-stream-node-to-web": "^1.0.1", + "web-streams-ponyfill": "^1.4.1" + } + }, + "node_modules/web-streams-node/node_modules/is-stream": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-streams-ponyfill": { + "version": "1.4.2", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/with": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/write-json-file": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/xmldom": { + "version": "0.1.19", + "engines": { + "node": ">=0.1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.1", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/activitypub": { + "name": "@semapps/activitypub", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/crypto": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "handlebars": "^4.7.7", + "moleculer-bull": "^0.2.5", + "moleculer-db": "^0.8.16", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/auth": { + "name": "@semapps/auth", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/triplestore": "1.1.4", + "bcrypt": "^5.0.1", + "express-session": "^1.17.0", + "jsonwebtoken": "^9.0.2", + "moleculer-db": "^0.8.16", + "moleculer-mail": "^1.2.5", + "moleculer-web": "^0.10.0-beta1", + "openid-client": "^4.7.4", + "passport": "^0.4.1", + "passport-cas2": "0.0.12", + "passport-local": "^1.0.0", + "pug": "^3.0.2", + "speakingurl": "^14.0.1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/backup": { + "name": "@semapps/backup", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "cron": "^1.8.2", + "fs-extra": "^10.0.0", + "rsync": "^0.6.1", + "ssh2-sftp-client": "^7.2.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/backup/node_modules/cron": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "moment-timezone": "^0.5.x" + } + }, + "packages/core": { + "name": "@semapps/core", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/crypto": "1.1.4", + "@semapps/jsonld": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/sparql-endpoint": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/void": "1.1.4", + "@semapps/webacl": "1.1.4", + "@semapps/webfinger": "1.1.4", + "@semapps/webid": "1.1.4", + "moleculer-web": "^0.10.0-beta1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/crypto": { + "name": "@semapps/crypto", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@digitalbazaar/data-integrity": "^2.5.0", + "@digitalbazaar/ed25519-multikey": "^1.3.0", + "@digitalbazaar/ed25519-signature-2020": "^5.4.0", + "@digitalbazaar/ed25519-verification-key-2020": "^4.2.0", + "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "^1.2.0", + "@digitalbazaar/vc": "^7.1.0", + "@rdfjs/data-model": "^1.3.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "crypto-ld": "^7.0.0", + "http-signature": "^1.3.4", + "http-signature-header": "^1.3.1", + "jose": "^5.2.0", + "jsonld-signatures": "^11.3.2", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1", + "vc-js": "^0.6.4" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35", + "moleculer-web": "^0.10.0-beta1" + } + }, + "packages/importer": { + "name": "@semapps/importer", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "cron-parser": "^4.2.1", + "google-libphonenumber": "^3.2.26", + "node-fetch": "^2.6.6", + "sanitize-html": "^2.6.1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/inference": { + "name": "@semapps/inference", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "n3": "^1.6.3", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/jsonld": { + "name": "@semapps/jsonld", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "jsonld": "^3.3.2", + "jsonld-context-parser": "^2.4.0", + "jsonld-streaming-parser": "^2.4.2", + "jsonld-streaming-serializer": "^1.2.0", + "lru-cache": "^6.0.0", + "n3": "^1.26.0", + "rdf-parse": "^1.7.0", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1" + }, + "devDependencies": { + "@types/jsonld": "1.5.15" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/ldp": { + "name": "@semapps/ldp", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "bytes": "^3.1.2", + "cron": "^4.1.4", + "dashify": "^2.0.0", + "http-link-header": "^1.1.1", + "mime-types": "^2.1.35", + "moleculer-db": "^0.8.16", + "moleculer-schedule": "^0.2.3", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "path-to-regexp": "^6.2.0", + "rdf-parse": "^1.7.0", + "sharp": "^0.31.2", + "sparqljs": "^3.5.2", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/middlewares": { + "name": "@semapps/middlewares", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.1.4", + "busboy": "^0.3.1", + "memory-streams": "^0.1.3" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/migration": { + "name": "@semapps/migration", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/webacl": "1.1.4", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/mime-types": { + "name": "@semapps/mime-types", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "negotiator": "^0.6.2" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/nodeinfo": { + "name": "@semapps/nodeinfo", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/notifications": { + "name": "@semapps/notifications", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/triplestore": "1.1.4", + "cron-parser": "^4.3.0", + "expo-server-sdk": "^3.4.0", + "moleculer-db": "^0.8.15", + "moleculer-mail": "^1.2.5", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/ontologies": { + "name": "@semapps/ontologies", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/triplestore": "1.1.4", + "moleculer-db": "^0.8.16", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/solid": { + "name": "@semapps/solid", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/webid": "1.1.4", + "http-link-header": "^1.1.1", + "moleculer-bull": "^0.2.5", + "moleculer-db": "^0.8.16", + "moleculer-web": "^0.10.0-beta1", + "moment": "2.30.1", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/sparql-endpoint": { + "name": "@semapps/sparql-endpoint", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/triplestore": "1.1.4", + "moleculer-web": "^0.10.0-beta1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/sync": { + "name": "@semapps/sync", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/triplestore": { + "name": "@semapps/triplestore", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "jsonld": "^3.3.2", + "negotiator": "^0.6.2", + "nextgraph": "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "sparqljson-parse": "^1.5.1", + "string-template": "^1.0.0", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/void": { + "name": "@semapps/void", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "jsonld-streaming-serializer": "^1.2.0", + "n3": "^1.8.0", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/webacl": { + "name": "@semapps/webacl", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "jsonld-streaming-serializer": "^1.2.0", + "n3": "^1.8.0", + "rdf-parse": "^1.7.0", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1" + }, + "devDependencies": { + "@types/url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/webfinger": { + "name": "@semapps/webfinger", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.1.4", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/webhooks": { + "name": "@semapps/webhooks", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.0.10", + "@semapps/triplestore": "1.0.10", + "moleculer-db": "^0.8.15", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "packages/webhooks/node_modules/@semapps/ldp": { + "version": "1.0.10", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.0.10", + "@semapps/mime-types": "1.0.10", + "@semapps/ontologies": "1.0.10", + "@semapps/triplestore": "1.0.10", + "dashify": "^2.0.0", + "http-link-header": "^1.1.1", + "mime-types": "^2.1.35", + "moleculer": "^0.14.17", + "moleculer-db": "^0.8.16", + "moleculer-schedule": "^0.2.3", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "path-to-regexp": "^6.2.0", + "rdf-parse": "^1.7.0", + "sharp": "^0.31.2", + "sparqljs": "^3.5.2", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/middlewares": { + "version": "1.0.10", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.0.10", + "busboy": "^0.3.1", + "memory-streams": "^0.1.3", + "moleculer": "^0.14.18" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/mime-types": { + "version": "1.0.10", + "license": "Apache-2.0", + "dependencies": { + "moleculer": "^0.14.18", + "negotiator": "^0.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/ontologies": { + "version": "1.0.10", + "license": "Apache-2.0", + "dependencies": { + "@semapps/triplestore": "1.0.10", + "moleculer-db": "^0.8.16", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webhooks/node_modules/@semapps/triplestore": { + "version": "1.0.10", + "license": "Apache-2.0", + "dependencies": { + "@semapps/middlewares": "1.0.10", + "@semapps/mime-types": "1.0.10", + "jsonld": "^3.3.2", + "moleculer": "^0.14.29", + "negotiator": "^0.6.2", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "sparqljson-parse": "^1.5.1", + "string-template": "^1.0.0", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/webid": { + "name": "@semapps/webid", + "version": "1.1.4", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=22.10.0" + }, + "peerDependencies": { + "moleculer": "^0.14.35" + } + }, + "tests": { + "name": "semapps-tests", + "version": "1.1.3", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/activitypub": "1.1.4", + "@semapps/auth": "1.1.4", + "@semapps/core": "1.1.4", + "@semapps/crypto": "1.1.4", + "@semapps/inference": "1.1.4", + "@semapps/jsonld": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/sync": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/webacl": "1.1.4", + "@semapps/webid": "1.1.4", + "dotenv-flow": "^3.1.0", + "envfile": "^7.1.0", + "expect-type": "^1.2.2", + "fs-extra": "^9.0.1", + "http-link-header": "^1.1.1", + "ioredis": "^4.27.0", + "jest": "^30.0.5", + "lru-cache": "10.1.0", + "moleculer": "^0.14.35", + "moleculer-web": "^0.10.7", + "node-fetch": "^2.6.6", + "rdf-data-model": "^1.0.0", + "supertest": "^4.0.2", + "ts-node": "^10.9.2", + "url-join": "^4.0.1", + "wait-for-expect": "^3.0.2" + }, + "devDependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-runtime": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@babel/preset-typescript": "^7.27.1", + "@jest/globals": "^30.0.5", + "@types/ioredis": "^4.27.0", + "@types/jest": "^30.0.0", + "babel-jest": "^30.0.5", + "babel-plugin-transform-import-meta": "^2.3.3", + "babel-preset-vite": "^1.1.3" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "tests/node_modules/fs-extra": { + "version": "9.1.0", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "tests/node_modules/lru-cache": { + "version": "10.1.0", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + } + } +} diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 36450ab7d..8c72d01be 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -1,4 +1,23 @@ services: + ng_tests: + image: nextgraph-rs:ubuntu + container_name: ng_tests + # command: ["/nextgraph-rs/target/release/ngd", "-v", "-p", "eth0:14400", "-l", "14400"] + #command: ["/bin/bash"] + stdin_open: true + tty: true + restart: always + volumes: + - ./data/ng:/nextgraph-rs/.ng:z + - ../../../..:/stack-root + # network_mode: "host" + ports: + - '14400:14400/tcp' + expose: + - '14400/tcp' + environment: + ENV_FILE_NAME: .env.test-ng + ENV_PATH: ngScripts fuseki_tests: image: stain/jena-fuseki:5.1.0 container_name: fuseki_tests @@ -21,7 +40,7 @@ services: - '6379:6379' volumes: - ./data/redis:/data:z - command: ['redis-server', '--appendonly', 'yes'] + command: [ 'redis-server', '--appendonly', 'yes' ] arena: image: activitypods/arena diff --git a/src/middleware/tests/package-lock.json b/src/middleware/tests/package-lock.json new file mode 100644 index 000000000..af350916d --- /dev/null +++ b/src/middleware/tests/package-lock.json @@ -0,0 +1,14599 @@ +{ + "name": "semapps-tests", + "version": "1.1.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "semapps-tests", + "version": "1.1.3", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/activitypub": "1.1.4", + "@semapps/auth": "1.1.4", + "@semapps/core": "1.1.4", + "@semapps/crypto": "1.1.4", + "@semapps/inference": "1.1.4", + "@semapps/jsonld": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/sync": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/webacl": "1.1.4", + "@semapps/webid": "1.1.4", + "dotenv-flow": "^3.1.0", + "envfile": "^7.1.0", + "expect-type": "^1.2.2", + "fs-extra": "^9.0.1", + "http-link-header": "^1.1.1", + "ioredis": "^4.27.0", + "jest": "^30.0.5", + "lru-cache": "10.1.0", + "moleculer": "^0.14.35", + "moleculer-web": "^0.10.7", + "node-fetch": "^2.6.6", + "rdf-data-model": "^1.0.0", + "supertest": "^4.0.2", + "ts-node": "^10.9.2", + "url-join": "^4.0.1", + "wait-for-expect": "^3.0.2" + }, + "devDependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-runtime": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@babel/preset-typescript": "^7.27.1", + "@jest/globals": "^30.0.5", + "@types/ioredis": "^4.27.0", + "@types/jest": "^30.0.0", + "babel-jest": "^30.0.5", + "babel-plugin-transform-import-meta": "^2.3.3", + "babel-preset-vite": "^1.1.3" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz", + "integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz", + "integrity": "sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz", + "integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.6.tgz", + "integrity": "sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.6", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.28.6", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.6", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "license": "MIT" + }, + "node_modules/@comunica/actor-abstract-mediatyped": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.22.0.tgz", + "integrity": "sha512-+KQLPpx8GFqrhWFfuvrsA4Rjlfbo/QOIo2IvzSgmDwy6YVQZXaSQiNQv/BnrnedaFCf2ONV+w+PMLqXgzn8N9A==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-http-native": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-native/-/actor-http-native-1.22.1.tgz", + "integrity": "sha512-BdB+hvQ9CJF9tI42hNhcvTMagOty+jw21LIQDJWI628xMcXZ88BJaUX0Ulc7g2nrWH97ZRm5+KjLC4Zf+OGwZg==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@types/parse-link-header": "^1.0.0", + "cross-fetch": "^3.0.5", + "follow-redirects": "^1.5.1", + "parse-link-header": "^1.0.1" + }, + "peerDependencies": { + "@comunica/bus-http": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.22.0.tgz", + "integrity": "sha512-U9pznSpQ1POSH+ekOke3lYKO0fsUbNdv1g1nfuWz/MV3xMCF/d2f3CVBjXRSx9qwyb/2zUrOjBCJRrYkfZ6geQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^1.22.0", + "@rdfjs/types": "*", + "htmlparser2": "^7.0.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.8.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.22.0.tgz", + "integrity": "sha512-OdB3Z7ZCtVAcsVU2Vs0ytGbiz0eYkeBwVA3k0vGVhSN3ygng5Thj+t8jxG6QWHlLvaIXfJFh0x57qY5tXkr8uQ==", + "license": "MIT", + "dependencies": { + "microdata-rdf-streaming-parser": "^1.2.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse-html": "^1.17.0", + "@comunica/core": "^1.17.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.22.0.tgz", + "integrity": "sha512-yVjYLpm9rbpPiqU1OE4Yioyk/YHtO6ywVMbdOPUNLeOwrtWou8vKX0Xh4UUR24Qrt8nuhE+p0kCJiZZtM1PmSQ==", + "license": "MIT", + "dependencies": { + "rdfa-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse-html": "^1.0.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.22.0.tgz", + "integrity": "sha512-gQSY56wkS/uftRyjQf+/dQFRpA/jZ6z2o2RgGbQc2avgKTkhaiTtPxpfO1oarLskm1sPlQOFo24ZwqUSqjOwcA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^1.22.0", + "@rdfjs/types": "*", + "relative-to-absolute-iri": "^1.0.5" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.4.0", + "@comunica/core": "^1.4.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.22.1.tgz", + "integrity": "sha512-MFFhJ6eGyO40Be80zsFKAbRjkPXr80PvCqvVKsEstdv3u9C6GFV3nqZpCwvsVCz22IPQhW+rzb8ZyasmgHnurA==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.1.2", + "jsonld-streaming-parser": "^2.4.0", + "stream-to-string": "^1.2.0" + }, + "peerDependencies": { + "@comunica/bus-http": "^1.0.0", + "@comunica/bus-rdf-parse": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-n3": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.22.0.tgz", + "integrity": "sha512-qHrGfh5k/pZa4imy7m9gJ1kt9aW1uxXqLDKnLKvR2l0m09YiEx/YOYWr1Wtu1YtH/Yyc13OX4mo/OwaE5PfrHQ==", + "license": "MIT", + "dependencies": { + "@types/n3": "^1.4.4", + "n3": "^1.6.3" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.0.0", + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.22.0.tgz", + "integrity": "sha512-k47WEAZ6qKEhf1eBZZeI5aVywlrUUKP3BKHw2zKJUjuWq5k+w/rp2WALCyt0Owtb37UlJbET3fTlUhXKvT+2aw==", + "license": "MIT", + "dependencies": { + "rdfxml-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.1.0", + "@comunica/core": "^1.1.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.22.0.tgz", + "integrity": "sha512-y315YcZTz7AizKf8Jl022IocAJIh3OHSlzNrRNH3zB7i/ch+WHj1VL9pjIf6y77PD4BR75EdeoQCPafpm5Gsbg==", + "license": "MIT", + "dependencies": { + "rdfa-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@comunica/bus-rdf-parse": "^1.8.0", + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/bus-http": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-1.22.1.tgz", + "integrity": "sha512-CZ0NDWZH0k0FOshuRQJzYr3Z+2ZM1vqr9ZepONuaoYDwyKaxl29xPs3hNfjSy6YawjEQP+elr/WDc3TxKIpu8g==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@types/readable-stream": "^2.3.11", + "is-stream": "^2.0.0", + "readable-web-to-node-stream": "^3.0.2", + "web-streams-node": "^0.4.0" + }, + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-init": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-1.22.0.tgz", + "integrity": "sha512-NIfEJLI8EYFdTWJB0PV/lxPagStPl+gUj3LtOnovcF1ZhC5rgcJSC/tq1r04n0TziY2KVangnLDsF4752LjD6g==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-rdf-parse": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.22.0.tgz", + "integrity": "sha512-ohZGlabX5K+dEmn+v4BzP+IZVyRc1ovWItHDLznnRqsHQr8W19WPG21lEFh5kk2MK4YnyQWmlUax1Yxrg7cbXg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^1.22.0", + "@rdfjs/types": "*" + }, + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/bus-rdf-parse-html": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.22.0.tgz", + "integrity": "sha512-zqdLdF5qvru1vnzN4t9eXpJhi6khKm1ZWhUovBB9pfYnnyGRCQCPlFpcgJPrD8JfKd6nTvhgdLB5QcAbBb1I0A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + }, + "peerDependencies": { + "@comunica/core": "^1.8.0" + } + }, + "node_modules/@comunica/context-entries": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-1.22.0.tgz", + "integrity": "sha512-HOYr1HdhgavxABpw8saZa9pueLAeGVVd/6cZ3FWcYnH3CvfQu6Ima06Gd00QdIAiGjQm01qQcWCxp0xURiqLKg==", + "license": "MIT" + }, + "node_modules/@comunica/core": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-1.22.0.tgz", + "integrity": "sha512-tgozygRFTd6t6l0YyvfVUWNC+KXWiTlBclkxtzFioQsplKvUSvg1TPjopRk8hhAvMaNRGMNBK2ZafNaqNTkI4w==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^1.22.0", + "@comunica/types": "^1.22.0", + "immutable": "^3.8.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@comunica/mediator-combine-union": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-1.22.0.tgz", + "integrity": "sha512-iUHmEGgWVmk02e80uB7w8xZ5vgTLpiqzrImvbokolJzWcVbobVCUkq8DUxzz3FJbNVRGipZUFrOqkRPAuAX6FA==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/mediator-number": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-1.22.0.tgz", + "integrity": "sha512-KDPlJEvj0Lu+JygGXjnH8pf33k01lJ+wgzUlWK216jZJ1Px2lTlfc/COhSqi/e0y+k4ZSBcxx0gnjt2awMpbrQ==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/mediator-race": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-1.22.0.tgz", + "integrity": "sha512-hIMaHyf9M4jOS0199OURSVgWFmzkyF2K2keuAb+iHoCH3UUcUnWjPOL1TrdkxvaUnrxmsBWR9SXbnqgMnhIsiQ==", + "license": "MIT", + "peerDependencies": { + "@comunica/core": "^1.0.0" + } + }, + "node_modules/@comunica/types": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-1.22.0.tgz", + "integrity": "sha512-ZQ8p+ZvMAKmdq6Hz2QwqIQ2JScwRMotiWz0iSw2zYHsYQOhVmLg7HSMzMHpWNEA5UWzO/A5A+Co/ONXMhlnx3g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "asynciterator": "^3.2.0", + "immutable": "^3.8.2", + "sparqlalgebrajs": "^3.0.1" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@digitalbazaar/credentials-context": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/credentials-context/-/credentials-context-3.2.0.tgz", + "integrity": "sha512-WruXZAF182pCYq/z2JPJ4N4mVDu6pd/hr7widdCqbKekA53BXHoX7XhL9tmRmQ8kfmkaStBfla67QHhkchWYBQ==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/@digitalbazaar/data-integrity": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz", + "integrity": "sha512-ohIieLfgtPQU9BYfj0eKNiz55/ZDOk5YSE9FN/Hn0eXzI8WQzLkzRvC8pvBnzuzXDgCsjPdSqYvzok5PoClMBQ==", + "license": "BSD-3-Clause", + "dependencies": { + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0", + "jsonld-signatures": "^11.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/ed25519-multikey": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-multikey/-/ed25519-multikey-1.3.1.tgz", + "integrity": "sha512-55qIbOaAyswVCFfZ70ap7SN2bDSwYmcVbUtGCrpVF/CjuJ8IPqf6z8fDPJzB+CE7Q896SaZlcDukz4LOwIRCPA==", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/ed25519": "^1.6.0", + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@digitalbazaar/ed25519-signature-2020": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-signature-2020/-/ed25519-signature-2020-5.4.0.tgz", + "integrity": "sha512-dHjOv41wiKLoPaE1S9g4NCMKNnelYtBa5fCJKwrqo+cPlLuKcEhtD7w/uuc5non7bf/GX5sa5YfDI/sRUOS6iw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/ed25519-multikey": "^1.1.0", + "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", + "base58-universal": "^2.0.0", + "ed25519-signature-2020-context": "^1.1.0", + "jsonld-signatures": "^11.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/ed25519-verification-key-2020": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.2.0.tgz", + "integrity": "sha512-urEVTYkt+uYD8GjdoS6gkm2sKBich1hqx42b6vvUOmNgF0agZ95JlUjiJXEx+VOwu7WSjJSnEBph2Qatkrk1CA==", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/ed25519": "^1.6.0", + "base58-universal": "^2.0.0", + "base64url-universal": "^2.0.0", + "crypto-ld": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/eddsa-rdfc-2022-cryptosuite": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/eddsa-rdfc-2022-cryptosuite/-/eddsa-rdfc-2022-cryptosuite-1.2.0.tgz", + "integrity": "sha512-a3PyICe1SI55SgHXgtPRYpzmZ2FMtloQDkVcbhUZ9dpoLcZg5TqsS4U7ap2ggCD4MUXz7uz6ErikJf76Iwyd0g==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/ed25519-multikey": "^1.0.0", + "jsonld": "^8.1.0", + "rdf-canonize": "^4.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "license": "BSD-3-Clause", + "dependencies": { + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", + "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalbazaar/vc": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-7.2.0.tgz", + "integrity": "sha512-Fpa7MG+/pxwV0vJbstKJc1DLrVzFYz7mlqZfRMkFOodR0YvVp3GGdiybCKtj7oxv/cuskzuqB/MFmDhq8tEd9g==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/credentials-context": "^3.2.0", + "ed25519-signature-2018-context": "^1.1.0", + "jsonld": "^8.3.3", + "jsonld-signatures": "^11.5.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", + "integrity": "sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==", + "license": "MIT", + "dependencies": { + "text-decoding": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.0.tgz", + "integrity": "sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", + "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "30.2.0", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", + "license": "MIT", + "dependencies": { + "expect": "30.2.0", + "jest-snapshot": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", + "license": "MIT", + "dependencies": { + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/types": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@noble/ed25519": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.5.tgz", + "integrity": "sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@seald-io/binary-search-tree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", + "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" + }, + "node_modules/@seald-io/nedb": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-3.1.0.tgz", + "integrity": "sha512-5G0hCQGJjOelOutvW1l4VD581XMhTPxpj1BUaCWTEM2MPXR9TzIr0MKMnEjnTA5nEKfujPyvVW7iF3etm1/gKQ==", + "license": "MIT", + "dependencies": { + "@seald-io/binary-search-tree": "^1.0.2", + "localforage": "^1.9.0", + "util": "^0.12.4" + } + }, + "node_modules/@semapps/activitypub": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/activitypub/-/activitypub-1.1.4.tgz", + "integrity": "sha512-xv1DxnG0ZXgnkHwLZJQrtcxQQSD9wrDdKsoiw+3NH+PXfYLO0kSZ5d92/Hr440zLMb9LoYXA5Epkqr1JSjQsDg==", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/crypto": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "handlebars": "^4.7.7", + "moleculer": "^0.14.18", + "moleculer-bull": "^0.2.5", + "moleculer-db": "^0.8.16", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/auth": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/auth/-/auth-1.1.4.tgz", + "integrity": "sha512-CLWNPVp62yNbR8Fe4Dvs508w7/br4/AK7mTvRHuksJVQsAqGjhB1KiMZ0FeAGehwD5Y6wvlznohptW0doSphBQ==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/triplestore": "1.1.4", + "bcrypt": "^5.0.1", + "express-session": "^1.17.0", + "jsonwebtoken": "^9.0.2", + "moleculer": "^0.14.17", + "moleculer-db": "^0.8.16", + "moleculer-mail": "^1.2.5", + "moleculer-web": "^0.10.0-beta1", + "openid-client": "^4.7.4", + "passport": "^0.4.1", + "passport-cas2": "0.0.12", + "passport-local": "^1.0.0", + "pug": "^3.0.2", + "speakingurl": "^14.0.1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/core/-/core-1.1.4.tgz", + "integrity": "sha512-giAHwmKhitCBYUEG1YvFU3Zqp8B8PFjWoSIPtN3gbfpgxf4jDMIGLdwkzNRClm3LSJ6+ViFm5W5UP+fRmbCpWg==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/crypto": "1.1.4", + "@semapps/jsonld": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/sparql-endpoint": "1.1.4", + "@semapps/triplestore": "1.1.4", + "@semapps/void": "1.1.4", + "@semapps/webacl": "1.1.4", + "@semapps/webfinger": "1.1.4", + "@semapps/webid": "1.1.4", + "moleculer": "^0.14.19", + "moleculer-web": "^0.10.0-beta1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/crypto": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/crypto/-/crypto-1.1.4.tgz", + "integrity": "sha512-aZ6ILDQXvpKpzDd6ww0p+PtTEfGafrNbBD9/JrRHQk23iYjuTwv6QXOq+MdQFZYigR3zk1l+NnYBdtjMDuPvrA==", + "license": "Apache-2.0", + "dependencies": { + "@digitalbazaar/data-integrity": "^2.5.0", + "@digitalbazaar/ed25519-multikey": "^1.3.0", + "@digitalbazaar/ed25519-signature-2020": "^5.4.0", + "@digitalbazaar/ed25519-verification-key-2020": "^4.2.0", + "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "^1.2.0", + "@digitalbazaar/vc": "^7.1.0", + "@rdfjs/data-model": "^1.3.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "crypto-ld": "^7.0.0", + "http-signature": "^1.3.4", + "http-signature-header": "^1.3.1", + "jose": "^5.2.0", + "jsonld-signatures": "^11.3.2", + "moleculer": "^0.14.18", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1", + "vc-js": "^0.6.4" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@semapps/inference": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/inference/-/inference-1.1.4.tgz", + "integrity": "sha512-Vede38IyNAqTG9dbkj+a4uIg7Zl30jf8sjhRosT3A2ykmbQeQ1QLb4ptZSHvFgjwNoW0i2+ypTGJ+OyKxau2hA==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "n3": "^1.6.3", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/jsonld": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/jsonld/-/jsonld-1.1.4.tgz", + "integrity": "sha512-JzaJceMNEc3ReCOheqTGUqvZU8h7oAVwgtOrDP6Zs9Fn0fLGFYdb4fU6zqAqPaxhTwTKJZFrDGHRT72b0Rv0yQ==", + "license": "Apache-2.0", + "dependencies": { + "jsonld": "^3.3.2", + "jsonld-context-parser": "^2.4.0", + "jsonld-streaming-parser": "^2.4.2", + "lru-cache": "^6.0.0", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/jsonld/node_modules/jsonld": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-3.3.2.tgz", + "integrity": "sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw==", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "object.fromentries": "^2.0.2", + "rdf-canonize": "^2.0.1", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semapps/jsonld/node_modules/jsonld/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@semapps/jsonld/node_modules/jsonld/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/@semapps/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semapps/jsonld/node_modules/rdf-canonize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-2.0.1.tgz", + "integrity": "sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA==", + "license": "BSD-3-Clause", + "dependencies": { + "semver": "^6.3.0", + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semapps/ldp": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/ldp/-/ldp-1.1.4.tgz", + "integrity": "sha512-654vENk52blR0b9lN0neEtmh2ywmDrxTlO/m1UsruLLkZcex9lk3o8JAKYwi105M9NVAXPU9WdH69l0hDTyRog==", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "bytes": "^3.1.2", + "cron": "^4.1.4", + "dashify": "^2.0.0", + "http-link-header": "^1.1.1", + "mime-types": "^2.1.35", + "moleculer": "^0.14.17", + "moleculer-db": "^0.8.16", + "moleculer-schedule": "^0.2.3", + "moleculer-web": "^0.10.0-beta1", + "node-fetch": "^2.6.6", + "path-to-regexp": "^6.2.0", + "rdf-parse": "^1.7.0", + "sharp": "^0.31.2", + "sparqljs": "^3.5.2", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/middlewares": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/middlewares/-/middlewares-1.1.4.tgz", + "integrity": "sha512-O55db7Nn3p6fRrfY1RZbkD2whKGgInB45YSoX7fR15jgiJJUuRuRh33fV/iMVo81xfojyJM8VKBLSw9JcpCzqA==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.1.4", + "busboy": "^0.3.1", + "memory-streams": "^0.1.3", + "moleculer": "^0.14.18" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/mime-types": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/mime-types/-/mime-types-1.1.4.tgz", + "integrity": "sha512-DkZYIcDEC/Y2jlZgJFpGOB1WRsIN5YzSXQKmkXuHJEAKArCJs+reXj63/RtzIG3b5GW9+gs74HJWvPgbx/JnPA==", + "license": "Apache-2.0", + "dependencies": { + "moleculer": "^0.14.18", + "negotiator": "^0.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/ontologies": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/ontologies/-/ontologies-1.1.4.tgz", + "integrity": "sha512-yoSK2Tyu4+cftih8CDHUYC664MZntqZ0VrpRznwug1CZ2v0yAmrlVKMhVXAQqAh/bTAaeHEjVvcE0QKw4MIOwg==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/triplestore": "1.1.4", + "moleculer-db": "^0.8.16", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/sparql-endpoint": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/sparql-endpoint/-/sparql-endpoint-1.1.4.tgz", + "integrity": "sha512-YB4Tjuo0+liTRjLFFnPnmaLiQcQL4WSaJAIuICIBIgSLqmUa+Gr3Dl20zPRNrPLHhDnEz38EWiR7JOXFK8JNng==", + "license": "Apache-2.0", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/triplestore": "1.1.4", + "moleculer": "^0.14.18", + "moleculer-web": "^0.10.0-beta1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/sync/-/sync-1.1.4.tgz", + "integrity": "sha512-N69zmcdtdxi5s/c5nzci47aEz1ztTZ/GrgqDhhOV1m4dKa/oqSokvcWuCHNDymjoQfQ4oe6XBdKE87VqOAzK9Q==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "moleculer": "^0.14.17", + "node-fetch": "^2.6.6", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/triplestore": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/triplestore/-/triplestore-1.1.4.tgz", + "integrity": "sha512-G3p203fD8kaekJaGPH/peTV2Ibn/tuhdm1XlEp0gbeEg4YVS1sNkPF1uFOacmo3CFFi5+VmqpspPdt5lZjNQoA==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "jsonld": "^3.3.2", + "moleculer": "^0.14.29", + "negotiator": "^0.6.2", + "node-fetch": "^2.6.6", + "sparqljs": "^3.5.2", + "sparqljson-parse": "^1.5.1", + "string-template": "^1.0.0", + "url-join": "^4.0.1", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/triplestore/node_modules/jsonld": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-3.3.2.tgz", + "integrity": "sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw==", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "object.fromentries": "^2.0.2", + "rdf-canonize": "^2.0.1", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semapps/triplestore/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@semapps/triplestore/node_modules/rdf-canonize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-2.0.1.tgz", + "integrity": "sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA==", + "license": "BSD-3-Clause", + "dependencies": { + "semver": "^6.3.0", + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semapps/triplestore/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/@semapps/void": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/void/-/void-1.1.4.tgz", + "integrity": "sha512-noj8/dmfhrXHLS2RoogQrBpPZAtkj4Y5cjw3RKRGolUzy6qIxhaaglfTvFgbilfEGPrX6S86BBoyTaRiZhVYnQ==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "jsonld-streaming-serializer": "^1.2.0", + "moleculer": "^0.14.17", + "n3": "^1.8.0", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/webacl": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/webacl/-/webacl-1.1.4.tgz", + "integrity": "sha512-DhRn7o3UhrnsoEqpwk2JCAGQs/V1O+G0AAqnbWoFMPLn2QEwLnzdaMRF2SVoR6BGdlwGcBDWJrJM7H2coMSh3w==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/middlewares": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "@semapps/triplestore": "1.1.4", + "jsonld-streaming-serializer": "^1.2.0", + "moleculer": "^0.14.18", + "n3": "^1.8.0", + "rdf-parse": "^1.7.0", + "speakingurl": "^14.0.1", + "streamify-string": "^1.0.1", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/webfinger": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/webfinger/-/webfinger-1.1.4.tgz", + "integrity": "sha512-TzQ53BBycRo5PKBsuu1EuBBJleROvstR5Nstkz4ixvWMQH1W22csnijUySNTfix2lfGpZdSkEh6SvEQMgoB08g==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/mime-types": "1.1.4", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semapps/webid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@semapps/webid/-/webid-1.1.4.tgz", + "integrity": "sha512-j9ENNV9QqcnkYmEEBt6D1KaIKoFrlmTcuHbB/W1ahpp0lxAwRx/IQwg1T8RKSTgXuchPzZ6eWjlZU2m5o9Z3uw==", + "license": "Apache-2.0", + "dependencies": { + "@semapps/activitypub": "1.1.4", + "@semapps/ldp": "1.1.4", + "@semapps/mime-types": "1.1.4", + "@semapps/ontologies": "1.1.4", + "url-join": "^4.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.47", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", + "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-link-header": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", + "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ioredis": { + "version": "4.28.10", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", + "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" + } + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/luxon": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", + "license": "MIT" + }, + "node_modules/@types/n3": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.26.1.tgz", + "integrity": "sha512-TilYHzpU6ecXVJAbV+6o17Z8ZkWLWx6ZJD3IluaU4RiGHxqjU2or9fopxFHS6iXS6qcl5Mg1K3wSx9L8xxJaJQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "25.0.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz", + "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/parse-link-header": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/parse-link-header/-/parse-link-header-1.0.1.tgz", + "integrity": "sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg==", + "license": "MIT" + }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sparqljs": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", + "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/args": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", + "license": "MIT", + "dependencies": { + "camelcase": "5.0.0", + "chalk": "2.4.2", + "leven": "2.1.0", + "mri": "1.1.4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/args/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/args/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/args/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/args/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/args/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynciterator": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.10.0.tgz", + "integrity": "sha512-eDOBoUf2m+4ht0ETVn2SCfuBIZZ6UWyyQbP++LRPKoK7PmrCQq37pJ6vRvyef4o1Pn+CwWnzMlkXxGdh/krVIw==", + "license": "MIT", + "dependencies": { + "tiny-set-immediate": "^1.0.2" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", + "license": "MIT", + "dependencies": { + "@jest/transform": "30.2.0", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", + "license": "MIT", + "dependencies": { + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-import-meta": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-import-meta/-/babel-plugin-transform-import-meta-2.3.3.tgz", + "integrity": "sha512-bbh30qz1m6ZU1ybJoNOhA2zaDvmeXMnGNBMVMDOJ1Fni4+wMBoy/j7MTRVmqAUCIcy54/rEnr9VEBsfcgbpm3Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/template": "^7.25.9", + "tslib": "^2.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.10.0" + } + }, + "node_modules/babel-plugin-transform-vite-meta-env": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-env/-/babel-plugin-transform-vite-meta-env-1.0.3.tgz", + "integrity": "sha512-eyfuDEXrMu667TQpmctHeTlJrZA6jXYHyEJFjcM0yEa60LS/LXlOg2PBbMb8DVS+V9CnTj/j9itdlDVMcY2zEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12" + } + }, + "node_modules/babel-plugin-transform-vite-meta-glob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-glob/-/babel-plugin-transform-vite-meta-glob-1.1.2.tgz", + "integrity": "sha512-o984FUo++WYnfgUaC8ymzmNPng5Kda5A6j6PFC0uOqhFXlAsD6mNhEBhaNzbUGfq/aPcyeGo67fYXlg20rh9aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12", + "glob": "^10.3.10" + } + }, + "node_modules/babel-plugin-transform-vite-meta-hot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-hot/-/babel-plugin-transform-vite-meta-hot-1.0.0.tgz", + "integrity": "sha512-qF7T46bDG5UPPOfy4MFgQJyd3mZvm1sGOR2gZ4lIHy6DEcxAVTIt39/adAn89il44CvwestshuEybKPMR+L/Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + } + }, + "node_modules/babel-preset-vite": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-vite/-/babel-preset-vite-1.1.3.tgz", + "integrity": "sha512-xSt/EiezzeMd4RI2hjMCNyn/FGzGeroKODPMAUTsgpeHC4dFf2qiCQfyNuiNzn1OwoF4n+NYSsORhUN5G/2KTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12", + "babel-plugin-transform-vite-meta-env": "1.0.3", + "babel-plugin-transform-vite-meta-glob": "1.1.2", + "babel-plugin-transform-vite-meta-hot": "1.0.0" + } + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base58-universal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base58-universal/-/base58-universal-2.0.0.tgz", + "integrity": "sha512-BgkgF8zVLOAygszG4W8NkLm7iXrw80VYAOcedrzANrIhS14+4W6zVqjyGTFUBM/FpqkHUt8aAYd4DbBBfn3zKg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/base64url-universal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", + "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", + "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bull": { + "version": "3.29.3", + "resolved": "https://registry.npmjs.org/bull/-/bull-3.29.3.tgz", + "integrity": "sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg==", + "license": "MIT", + "dependencies": { + "cron-parser": "^2.13.0", + "debuglog": "^1.0.0", + "get-port": "^5.1.1", + "ioredis": "^4.27.0", + "lodash": "^4.17.21", + "p-timeout": "^3.2.0", + "promise.prototype.finally": "^3.1.2", + "semver": "^7.3.2", + "util.promisify": "^1.0.1", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bull/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bull/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/busboy": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", + "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", + "dependencies": { + "dicer": "0.3.0" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001764", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", + "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0" + }, + "node_modules/cas": { + "version": "0.0.5", + "resolved": "git+ssh://git@github.com/joshchan/node-cas.git#344a8bfba9d054e2e378adaf95b720c898ae48a2", + "dependencies": { + "cheerio": "0.19.0" + } + }, + "node_modules/cas/node_modules/cheerio": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", + "integrity": "sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ==", + "license": "MIT", + "dependencies": { + "css-select": "~1.0.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "lodash": "^3.2.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cas/node_modules/css-select": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", + "integrity": "sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw==", + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "1.0", + "domutils": "1.4", + "nth-check": "~1.0.0" + } + }, + "node_modules/cas/node_modules/css-select/node_modules/domutils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", + "integrity": "sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/cas/node_modules/css-what": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", + "integrity": "sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw==", + "license": "BSD-like", + "engines": { + "node": "*" + } + }, + "node_modules/cas/node_modules/domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/cas/node_modules/htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", + "license": "MIT", + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/cas/node_modules/htmlparser2/node_modules/entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", + "license": "BSD-like" + }, + "node_modules/cas/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==", + "license": "MIT" + }, + "node_modules/cas/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "license": "MIT", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, + "node_modules/consolidate": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha512-PZFskfj64QnpKVK9cPdY36pyWEhZNM+srRVqtwMiVTlnViSoZcvX35PpBhhUcyLTHXYvz7pZRmxvsqwzJqg9kA==", + "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", + "license": "MIT", + "dependencies": { + "bluebird": "^3.1.1" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", + "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" + }, + "node_modules/credentials-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-1.0.0.tgz", + "integrity": "sha512-rF3GPhTUGY58xlpuVRif/1i0BxVpynpmFdGNS81S2ezdKPSKoFke5ZOZWB8ZUvGi8bV8CuDM+ZcM/uf4z0PQVQ==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/cron": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cron/-/cron-4.4.0.tgz", + "integrity": "sha512-fkdfq+b+AHI4cKdhZlppHveI/mgz2qpiYxcm+t5E5TsxX7QrLS1VE0+7GENEk9z0EeGPcpSciGv6ez24duWhwQ==", + "license": "MIT", + "dependencies": { + "@types/luxon": "~3.7.0", + "luxon": "~3.7.0" + }, + "engines": { + "node": ">=18.x" + }, + "funding": { + "type": "ko-fi", + "url": "https://ko-fi.com/intcreator" + } + }, + "node_modules/cron-parser": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz", + "integrity": "sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==", + "license": "MIT", + "dependencies": { + "is-nan": "^1.3.0", + "moment-timezone": "^0.5.31" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-ld": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-7.0.0.tgz", + "integrity": "sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14" + } + }, + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "license": "BSD-2-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dashify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dashify/-/dashify-2.0.0.tgz", + "integrity": "sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/datauri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz", + "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==", + "license": "MIT", + "dependencies": { + "image-size": "^0.7.3", + "mimer": "^1.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "dependencies": { + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-flow": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dotenv-flow/-/dotenv-flow-3.3.0.tgz", + "integrity": "sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A==", + "license": "MIT", + "dependencies": { + "dotenv": "^8.6.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ed25519-signature-2018-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", + "license": "BSD-3-Clause" + }, + "node_modules/ed25519-signature-2020-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", + "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "license": "ISC" + }, + "node_modules/email-templates": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/email-templates/-/email-templates-2.7.1.tgz", + "integrity": "sha512-WJ0csXaBK3gV90dwBco5d3liu/XSH1jPEn3qfLDES/AsxOoMv4IRqp/MsQduKBexJZ81577OUbrdgnzvK2Kk9Q==", + "deprecated": "We just released outbound SMTP support! Try it out at @ https://forwardemail.net/docs/how-to-javascript-contact-forms-node-js 🚀 ✉️ 👽", + "license": "MIT", + "dependencies": { + "bluebird": "^3.0.0", + "consolidate": "^0.14.2", + "debug": "^2.2.0", + "glob": "^6.0.0", + "juice": "^4.1.0", + "lodash": "^4.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/email-templates/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/email-templates/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/email-templates/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/email-templates/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/email-templates/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "license": "BSD-2-Clause" + }, + "node_modules/envfile": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/envfile/-/envfile-7.1.0.tgz", + "integrity": "sha512-dyH4QnnZsArCLhPASr29eqBWDvKpq0GggQFTmysTT/S9TTmt1JrEKNvTBc09Cd7ujVZQful2HBGRMe2agu7Krg==", + "license": "Artistic-2.0", + "bin": { + "envfile": "bin.cjs" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express-session": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.2.tgz", + "integrity": "sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.1.0", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fastest-validator": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastest-validator/-/fastest-validator-1.19.1.tgz", + "integrity": "sha512-eXiPCYOsuS5OWI+OVH9whu4LDGqO4cE7jUnZyQ8jV3rXfmC0OghQACOtYjTDxsVnblzvXIHGuizjFg0csiLE6g==", + "license": "MIT" + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "license": "MIT", + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-to-text": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-2.1.3.tgz", + "integrity": "sha512-mafVvNjY6lrVrdT73ssJT4fWCtiLR8QVZDPurHbO/yT0KK7mVCpEGi+0g6jzwj4G41o4++9A48cZOSQBwvWd8Q==", + "license": "MIT", + "dependencies": { + "he": "^1.0.0", + "htmlparser": "^1.7.7", + "optimist": "^0.6.1", + "underscore": "^1.8.3", + "underscore.string": "^3.2.3" + }, + "bin": { + "html-to-text": "bin/cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/htmlparser": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/htmlparser/-/htmlparser-1.7.7.tgz", + "integrity": "sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ==", + "engines": { + "node": ">=0.1.33" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/htmlparser2/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-link-header": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/http-signature-header": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-signature-header/-/http-signature-header-1.3.1.tgz", + "integrity": "sha512-UpKpxfRlCWRK41j+MfRHHvjDWMLX67gY7pUNGQbXi13fsTZcvUHrgbhbiJtHDvGGxe5nQVYlTW7fKypMSmgXKQ==", + "deprecated": "This package has been renamed to @digitalbazaar/http-signature-header. Install using @digitalbazaar/http-signature-header instead.", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ioredis": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.31.0.tgz", + "integrity": "sha512-tVrCrc4LWJwX82GD79dZ0teZQGq+5KJEGpXJRgzHOrhHtLgF9ME6rTwDV5+HN5bjnvmtrnS8ioXhflY16sy2HQ==", + "license": "MIT", + "dependencies": { + "@ioredis/commands": "^1.0.2", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.1", + "denque": "^1.1.0", + "lodash.defaults": "^4.2.0", + "lodash.flatten": "^4.4.0", + "lodash.isarguments": "^3.1.0", + "p-map": "^2.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", + "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "license": "MIT", + "dependencies": { + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", + "import-local": "^3.2.0", + "jest-cli": "30.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", + "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "jest-util": "30.2.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "p-limit": "^3.1.0", + "pretty-format": "30.2.0", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", + "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", + "license": "MIT", + "dependencies": { + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "jest-util": "30.2.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "micromatch": "^4.0.8", + "walker": "^1.0.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-leak-detector": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", + "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", + "license": "MIT", + "dependencies": { + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.2.0", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.2.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jose": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsonld-context-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/jsonld-context-parser/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/jsonld-context-parser/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/jsonld-signatures": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", + "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "jsonld": "^8.0.0", + "rdf-canonize": "^4.0.1", + "serialize-error": "^8.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsonld-streaming-parser": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", + "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.1.3", + "jsonparse": "^1.3.1", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/jsonld-streaming-serializer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.3.0.tgz", + "integrity": "sha512-QGflpxpwmr659ExvAQ5TFAY9BmJQiL/yF/MDRrP5oVWHcBBLhbPjUqDv//y2OvJxUY3UQYMXulTwzmYb1ttv2Q==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.0.0" + } + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonld/node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/juice": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/juice/-/juice-4.3.2.tgz", + "integrity": "sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g==", + "license": "MIT", + "dependencies": { + "cheerio": "^0.22.0", + "commander": "^2.15.1", + "cross-spawn": "^5.1.0", + "deep-extend": "^0.5.1", + "mensch": "^0.3.3", + "slick": "^1.12.2", + "web-resource-inliner": "^4.2.1" + }, + "bin": { + "juice": "bin/juice" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/juice/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/juice/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/juice/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/juice/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/juice/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/juice/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "license": "ISC" + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", + "license": "MIT" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "deprecated": "This package is deprecated. Use destructuring assignment syntax instead.", + "license": "MIT" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", + "license": "MIT" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", + "license": "MIT" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "license": "MIT" + }, + "node_modules/lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==", + "license": "MIT" + }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "10.1.0", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-streams": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/memory-streams/-/memory-streams-0.1.3.tgz", + "integrity": "sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==", + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.2" + } + }, + "node_modules/mensch": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", + "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/microdata-rdf-streaming-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.2.0.tgz", + "integrity": "sha512-cMLNLEcS0mPaiA9iwq6BnsQK9sx2uBwjpRZIEvMRBNJpbvV58f8AFtPeYzNFh3OPyX9B49NYJ77bB0jNAUCurw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^6.0.0", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/microdata-rdf-streaming-parser/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/microdata-rdf-streaming-parser/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/microdata-rdf-streaming-parser/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/microdata-rdf-streaming-parser/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/microdata-rdf-streaming-parser/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/microdata-rdf-streaming-parser/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.1.1.tgz", + "integrity": "sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g==", + "license": "MIT", + "bin": { + "mimer": "bin/mimer" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/moleculer": { + "version": "0.14.35", + "resolved": "https://registry.npmjs.org/moleculer/-/moleculer-0.14.35.tgz", + "integrity": "sha512-KB4qs0zNTjE9z7Bl27FFLPaWkAsUFJajF2njozJeor1phFCAYP5S1JsWOSrnUBTtsH7SX4gTw8tGRdcgh1eyVQ==", + "license": "MIT", + "dependencies": { + "args": "^5.0.3", + "eventemitter2": "^6.4.9", + "fastest-validator": "^1.19.0", + "glob": "^7.2.0", + "ipaddr.js": "^2.2.0", + "kleur": "^4.1.5", + "lodash": "^4.17.21", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "recursive-watch": "^1.1.4" + }, + "bin": { + "moleculer-runner": "bin/moleculer-runner.js", + "moleculer-runner-esm": "bin/moleculer-runner.mjs" + }, + "engines": { + "node": ">= 10.x.x" + }, + "funding": { + "url": "https://github.com/moleculerjs/moleculer?sponsor=1" + }, + "peerDependencies": { + "amqplib": "^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "avsc": "^5.0.0", + "bunyan": "^1.0.0", + "cbor-x": "^0.8.3 || ^0.9.0 || ^1.2.0", + "dd-trace": "^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0", + "debug": "^4.0.0", + "etcd3": "^1.0.0", + "ioredis": "^4.0.0 || ^5.0.0", + "jaeger-client": "^3.0.0", + "kafka-node": "^5.0.0", + "log4js": "^6.0.0", + "mqtt": "^4.0.0 || ^5.0.0", + "msgpack5": "^5.0.0 || ^6.0.0", + "nats": "^1.0.0 || ^2.0.0", + "node-nats-streaming": "^0.0.51 || ^0.2.0 || ^0.3.0", + "notepack.io": "^2.0.0 || ^3.0.0", + "pino": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "protobufjs": "^6.0.0 || ^7.0.0", + "redlock": "^4.0.0", + "rhea-promise": "^1.0.0 || ^2.0.0", + "thrift": "^0.12.0 || ^0.16.0", + "winston": "^3.0.0" + }, + "peerDependenciesMeta": { + "amqplib": { + "optional": true + }, + "avsc": { + "optional": true + }, + "bunyan": { + "optional": true + }, + "cbor-x": { + "optional": true + }, + "dd-trace": { + "optional": true + }, + "debug": { + "optional": true + }, + "etcd3": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "jaeger-client": { + "optional": true + }, + "kafka-node": { + "optional": true + }, + "log4js": { + "optional": true + }, + "mqtt": { + "optional": true + }, + "msgpack5": { + "optional": true + }, + "nats": { + "optional": true + }, + "node-nats-streaming": { + "optional": true + }, + "notepack.io": { + "optional": true + }, + "pino": { + "optional": true + }, + "protobufjs": { + "optional": true + }, + "redlock": { + "optional": true + }, + "rhea-promise": { + "optional": true + }, + "thrift": { + "optional": true + }, + "winston": { + "optional": true + } + } + }, + "node_modules/moleculer-bull": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/moleculer-bull/-/moleculer-bull-0.2.8.tgz", + "integrity": "sha512-ayVIqVmc6HVD6SL0RLsmMYqDnnPqwrcEWAPpY31kbUIfU3CBH2grGaqA5adyZBNCo4gQz09+4O9m+Hqxls06Ag==", + "license": "MIT", + "dependencies": { + "bull": "^3.15.0", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" + } + }, + "node_modules/moleculer-db": { + "version": "0.8.29", + "resolved": "https://registry.npmjs.org/moleculer-db/-/moleculer-db-0.8.29.tgz", + "integrity": "sha512-0e94ia5gkI9Ls2MJ+kAuZsafC0dCFqbaN7FIuoftTizaG+Vixafpj8ezXhGrIPQ1PmOKASSdn0IhkSjzyuc9Gg==", + "license": "MIT", + "dependencies": { + "@seald-io/nedb": "^3.0.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0" + } + }, + "node_modules/moleculer-mail": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/moleculer-mail/-/moleculer-mail-1.2.6.tgz", + "integrity": "sha512-i1r1lraG6JTHOeHgUxrP5nQEfvxhldZkYjlcNTgu6blvdv0aWe2GqK6/p+D/dPum4jY6QEKaNB6twI8N+nTAmA==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "email-templates": "^2.7.1", + "lodash": "^4.17.21", + "nodemailer": "^4.6.7", + "nodemailer-html-to-text": "^2.1.0" + }, + "engines": { + "node": ">= 6.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.0 || ^0.13.0 || ^0.12.0" + } + }, + "node_modules/moleculer-schedule": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/moleculer-schedule/-/moleculer-schedule-0.2.3.tgz", + "integrity": "sha512-cFHpnHe56y6grSQov9KR1Y8OGmIFImOPelsR2poMdCulgRC49kThKDxBx11ZwASCNx/UtadmaLJ+sX8xRnuGFQ==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "node-schedule": "^2.0.0" + }, + "engines": { + "node": ">= 8.x.x" + }, + "peerDependencies": { + "moleculer": "^0.14.13" + } + }, + "node_modules/moleculer-web": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/moleculer-web/-/moleculer-web-0.10.8.tgz", + "integrity": "sha512-kQtyN8AccdBqSZUh+PRLYmLPy7RBd48j/raA5682wNDo1fPEKdCHa8d7tUjtmI53gELkQZKCv3GckyMqdxZYXQ==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^1.0.0", + "body-parser": "^1.19.0", + "es6-error": "^4.1.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "isstream": "^0.1.2", + "kleur": "^4.1.4", + "lodash": "^4.17.21", + "path-to-regexp": "^3.1.0", + "qs": "^6.11.0", + "serve-static": "^1.14.1" + }, + "engines": { + "node": ">= 10.x.x" + }, + "peerDependencies": { + "moleculer": "^0.13.0 || ^0.14.0" + } + }, + "node_modules/moleculer-web/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/moleculer/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/moleculer/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/moleculer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moleculer/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.48", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", + "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/n3": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.26.0.tgz", + "integrity": "sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/n3/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/n3/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.85.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.85.0.tgz", + "integrity": "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "license": "MIT" + }, + "node_modules/node-schedule": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "license": "MIT", + "dependencies": { + "cron-parser": "^4.2.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/node-schedule/node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "license": "MIT", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/nodemailer": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", + "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemailer-html-to-text": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz", + "integrity": "sha512-oaNLWoMyeC5Y8DbtYSwBRHTJVdkojKfiP6J4hh8+10Oih0QoAUqEsnM0WbFA13yhbzjyp1yXBNiDl0QV7BpoRA==", + "license": "MIT", + "dependencies": { + "html-to-text": "^2.1.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz", + "integrity": "sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g==", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.8", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "gopd": "^1.2.0", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oidc-token-hash": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.2.0.tgz", + "integrity": "sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz", + "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.1.0", + "got": "^11.8.0", + "jose": "^2.0.5", + "lru-cache": "^6.0.0", + "make-error": "^1.3.6", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "engines": { + "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/jose": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz", + "integrity": "sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==", + "license": "MIT", + "dependencies": { + "@panva/asn1.js": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "license": "MIT/X11", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "license": "MIT" + }, + "node_modules/optimist/node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-link-header": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-1.0.1.tgz", + "integrity": "sha512-Z0gpfHmwCIKDr5rRzjypL+p93aHVWO7e+0rFcUl9E3sC67njjs+xHFenuboSXZGlvYtmQqRzRaE3iFpTUnLmFQ==", + "license": "MIT", + "dependencies": { + "xtend": "~4.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "license": "MIT", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-cas2": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/passport-cas2/-/passport-cas2-0.0.12.tgz", + "integrity": "sha512-ck/6x2lb6eYhlC/9lmw7ZTgqzSiJmYB0px7H2B00kpRZlBQuds9yPzFMi7kBWtgFpTDf0o+rwQMUYga8yO/jIg==", + "license": "MIT", + "dependencies": { + "cas": "git+https://github.com/joshchan/node-cas.git", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", + "dependencies": { + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-polyfill": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", + "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==", + "license": "MIT" + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz", + "integrity": "sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pug": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.3", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rdf-canonize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/rdf-data-factory": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz", + "integrity": "sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.0" + } + }, + "node_modules/rdf-data-factory/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-data-model": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rdf-data-model/-/rdf-data-model-1.0.0.tgz", + "integrity": "sha512-waBjxCLPB1GeHTBibzsXfr897XwnM+m6gZgmCD5kgRlsq/uarUISRtLjTmRS9BNtU9GCdFMyA0sWQVHv1VzO4g==", + "deprecated": "This package is deprecated and got replaced by @rdfjs/data-model", + "license": "MIT", + "bin": { + "rdf-data-model-test": "bin/test.js" + } + }, + "node_modules/rdf-isomorphic": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", + "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "hash.js": "^1.1.7", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.7.0" + } + }, + "node_modules/rdf-parse": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-1.9.1.tgz", + "integrity": "sha512-W6ouYE+ufmCNFmXD1iGs5gUZH75jZekh/I5qF8a4Sl37BUc9mY0Jz5A0CV1tiKKhx+I+HYfxyX9VjOljD8rzgQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-http-native": "~1.22.0", + "@comunica/actor-rdf-parse-html": "~1.22.0", + "@comunica/actor-rdf-parse-html-microdata": "~1.22.0", + "@comunica/actor-rdf-parse-html-rdfa": "~1.22.0", + "@comunica/actor-rdf-parse-html-script": "~1.22.0", + "@comunica/actor-rdf-parse-jsonld": "^1.22.0", + "@comunica/actor-rdf-parse-n3": "~1.22.0", + "@comunica/actor-rdf-parse-rdfxml": "~1.22.0", + "@comunica/actor-rdf-parse-xml-rdfa": "~1.22.0", + "@comunica/bus-http": "~1.22.0", + "@comunica/bus-init": "~1.22.0", + "@comunica/bus-rdf-parse": "~1.22.0", + "@comunica/bus-rdf-parse-html": "~1.22.0", + "@comunica/core": "~1.22.0", + "@comunica/mediator-combine-union": "~1.22.0", + "@comunica/mediator-number": "~1.22.0", + "@comunica/mediator-race": "~1.22.0", + "@rdfjs/types": "*", + "stream-to-string": "^1.2.0" + } + }, + "node_modules/rdf-string": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/rdf-terms": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", + "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "rdf-string": "^1.6.0" + } + }, + "node_modules/rdfa-streaming-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz", + "integrity": "sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^6.0.0", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/rdfa-streaming-parser/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/rdfa-streaming-parser/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/rdfa-streaming-parser/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/rdfa-streaming-parser/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/rdfa-streaming-parser/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/rdfa-streaming-parser/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/rdfxml-streaming-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz", + "integrity": "sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.0", + "sax": "^1.2.4" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readable-stream-node-to-web": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", + "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==", + "license": "MIT" + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz", + "integrity": "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^4.7.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/recursive-watch": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/recursive-watch/-/recursive-watch-1.1.4.tgz", + "integrity": "sha512-fWejAmdLi7B/jipBUjTLnqId+PK+573fbGNbdaNA/AiAnQAx6OYOLCGWRs0W5+PyM1rLzZSWK2f40QpHSR49PQ==", + "license": "MIT", + "dependencies": { + "ttl": "^1.3.0" + }, + "bin": { + "recursive-watch": "bin.js" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/relative-to-absolute-iri": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", + "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==", + "license": "MIT" + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/request/node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/security-context": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", + "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", + "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slick": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", + "license": "MIT (http://mootools.net/license.txt)", + "engines": { + "node": "*" + } + }, + "node_modules/sodium-native": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.4.1.tgz", + "integrity": "sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + } + }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparqlalgebrajs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-3.0.3.tgz", + "integrity": "sha512-XFNhsO55bprayrM35h/jY0kzzuGc3oZ1On3kc+s7Un0BFQBXa046aLcMZFp4MYSvn7GtMe9eZ08ONFnBH5kEsQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/sparqljs": "^3.1.2", + "fast-deep-equal": "^3.1.3", + "minimist": "^1.2.5", + "rdf-data-factory": "^1.1.0", + "rdf-isomorphic": "^1.3.0", + "rdf-string": "^1.6.0", + "sparqljs": "^3.4.2" + }, + "bin": { + "sparqlalgebrajs": "bin/sparqlalgebrajs.js" + } + }, + "node_modules/sparqljs": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", + "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^1.1.2" + }, + "bin": { + "sparqljs": "bin/sparql-to-json" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/sparqljson-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz", + "integrity": "sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "^13.1.0", + "JSONStream": "^1.3.3", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/sparqljson-parse/node_modules/@types/node": { + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", + "license": "MIT" + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-to-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", + "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", + "license": "MIT", + "dependencies": { + "promise-polyfill": "^1.1.6" + } + }, + "node_modules/streamify-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", + "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==", + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/superagent/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/superagent/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/superagent/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/superagent/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/supertest": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", + "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", + "deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net", + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^3.8.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-decoding": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", + "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==", + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tiny-set-immediate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tiny-set-immediate/-/tiny-set-immediate-1.0.2.tgz", + "integrity": "sha512-EVbaM4zXFWS4CIqVoPzY7XIioQ5LU1p49AHizwPO1KyFyp/gxy5SA8mDmfDVl/2WLQiHgUL+esO6Ig+KhpUxUw==", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "devOptional": true, + "license": "0BSD" + }, + "node_modules/ttl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ttl/-/ttl-1.3.1.tgz", + "integrity": "sha512-+bGy9iDAqg3WSfc2ZrprToSPJhZjqy7vUv9wupQzsiv+BVPVx1T2a6G4T0290SpQj+56Toaw9BiLO5j5Bd7QzA==", + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "license": "MIT", + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/underscore.string/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/undici/node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.3.tgz", + "integrity": "sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "for-each": "^0.3.3", + "get-intrinsic": "^1.2.6", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "object.getownpropertydescriptors": "^2.1.8", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-data-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz", + "integrity": "sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/vc-js": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/vc-js/-/vc-js-0.6.4.tgz", + "integrity": "sha512-ogwYys94k8mFyFZEn1Ru3nIA5Z/9C4iCU4grNWUYOYVWldcsn6UDp6erYFbaSkilzv7RK3cQu5N8prkxfHpZwA==", + "license": "BSD-3-Clause", + "dependencies": { + "commander": "^2.20.3", + "credentials-context": "^1.0.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0", + "get-stdin": "^7.0.0", + "jsonld": "^2.0.2", + "jsonld-signatures": "^5.0.0", + "supports-color": "^7.1.0" + }, + "bin": { + "vc-js": "bin/vc-js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/base64url-universal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", + "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/vc-js/node_modules/crypto-ld": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-3.9.0.tgz", + "integrity": "sha512-PFE7V6A2QNnUp6iiPVEZI4p8wsztkEWLbY1BAXVnclm/aw4KGwpJ+1Ds4vQUCJ5BsWxj15fwE5rHQ8AWaWB2nw==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url-universal": "^1.0.1", + "bs58": "^4.0.1", + "node-forge": "~0.10.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8.3.0" + }, + "optionalDependencies": { + "sodium-native": "^3.2.0" + } + }, + "node_modules/vc-js/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/vc-js/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/vc-js/node_modules/jsonld": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-2.0.2.tgz", + "integrity": "sha512-/TQzRe75/3h2khu57IUojha5oat+M82bm8RYw0jLhlmmPrW/kTWAZ9nGzKPfZWnPYnVVJJMQVc/pU8HCmpv9xg==", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "rdf-canonize": "^1.0.2", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vc-js/node_modules/jsonld-signatures": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-5.2.0.tgz", + "integrity": "sha512-/dGgMElXc3oBS+/OUwMc3DTK4riHKLE9Lk7NF1Upz2ZlBTNfnOw5uLRkFQOJFBDqDEm5hK6hIfkoC/rCWFh9tQ==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1", + "crypto-ld": "^3.7.0", + "jsonld": "^2.0.2", + "node-forge": "^0.10.0", + "security-context": "^4.0.0", + "serialize-error": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/vc-js/node_modules/rdf-canonize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-1.2.0.tgz", + "integrity": "sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw==", + "license": "BSD-3-Clause", + "dependencies": { + "node-forge": "^0.10.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vc-js/node_modules/serialize-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", + "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/vc-js/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/vc-js/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wait-for-expect": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", + "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==", + "license": "MIT" + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/web-resource-inliner": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz", + "integrity": "sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA==", + "license": "MIT", + "dependencies": { + "async": "^3.1.0", + "chalk": "^2.4.2", + "datauri": "^2.0.0", + "htmlparser2": "^4.0.0", + "lodash.unescape": "^4.0.1", + "request": "^2.88.0", + "safer-buffer": "^2.1.2", + "valid-data-url": "^2.0.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/web-resource-inliner/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/web-resource-inliner/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/web-resource-inliner/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/web-resource-inliner/node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domutils/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/web-resource-inliner/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/web-resource-inliner/node_modules/htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/web-resource-inliner/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/web-streams-node": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/web-streams-node/-/web-streams-node-0.4.0.tgz", + "integrity": "sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w==", + "license": "Apache-2.0", + "dependencies": { + "is-stream": "^1.1.0", + "readable-stream-node-to-web": "^1.0.1", + "web-streams-ponyfill": "^1.4.1" + } + }, + "node_modules/web-streams-node/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-streams-ponyfill": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", + "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/xmldom": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", + "integrity": "sha512-pDyxjQSFQgNHkU+yjvoF+GXVGJU7e9EnOg/KcGMDihBIKjTsOeDYaECwC/O9bsUWKY+Sd9izfE43JXC46EOHKA==", + "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", + "engines": { + "node": ">=0.1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/middleware/tests/package.json b/src/middleware/tests/package.json index ac0410f16..a7b76ee52 100644 --- a/src/middleware/tests/package.json +++ b/src/middleware/tests/package.json @@ -26,6 +26,7 @@ "@semapps/webacl": "1.1.4", "@semapps/webid": "1.1.4", "dotenv-flow": "^3.1.0", + "envfile": "^7.1.0", "expect-type": "^1.2.2", "fs-extra": "^9.0.1", "http-link-header": "^1.1.1", diff --git a/src/middleware/tests/triplestore/initialize.ts b/src/middleware/tests/triplestore/initialize.ts index 8793f194e..c1fc84c84 100644 --- a/src/middleware/tests/triplestore/initialize.ts +++ b/src/middleware/tests/triplestore/initialize.ts @@ -37,13 +37,19 @@ export default async triplestore => { if (triplestore === 'ng') { // TODO : Environmentalize the nextgraph settings. adapter = new NextGraphAdapter({ - adminUserId: 'XOct97tUc-ccyFUGe5sDUkHyXdTQ7LtGW1RVyYZzIYgA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + adminUserId: 'bEr4dYFLtrsRUUvNEFN2RX0AhrKNSRYz0PS9NZY1lZQA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. mappingsNuri: - 'did:ng:o:5ZwPgEib6okmEbVlWRJVfGUNnbdtmQpC_x1uTy9wjcoA:v:asrmmGCr1WTq3oAGkgtVwUxsJgA5MIsV2FIYhDRyPagA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - serverPeerId: 'zT_iEzpHeO5znVU9ZYcvenJjb8pWrRWFzEO6eUE_SrAA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - adminUserKey: 'dwtQ9wWEovJwv6_3VArHKHRyr_zLAuR2_bFB1LiLfqEA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - clientPeerKey: 'ryv9v1Y3jJqdQYH-_rMxGTGyDtC_eOaA0a4ibRLhmX4A', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. - serverAddr: '127.0.0.1:14400' // TODO : Environmentalize the nextgraph settings. Even though this value is the genric one for the nextgraph broker + 'did:ng:o:8gyu054sT9gWjNLFEKU4qg8hwdqCzH4SSShKm5MBobYA:v:T2LzS8YAXq3YsER-B11J9SQ3CWXSVsXqORysd7_pVUkA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + serverPeerId: 'Xu4VrduboqBGtHVk4s7KvTLi9c0vnQOLgKH0LNrmNtYA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + adminUserKey: 'qC2IxeD86FrA6oB7Dy0Kt-mTtzhfs1J-f2qOdUy12vEA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + clientPeerKey: 'wfq6Rkt_6sWPLu7UWIjZM2iZn6VKgavy4x2i5ZAv2r8A', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + // adminUserId: '-tIS6TbpjR3JHlqwT8s5b4BlYI6n6YwVldf6RYLg9hwA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + // mappingsNuri: + // 'did:ng:o:4zWo1oSYoDLme9kfvft7Qfr5Tym0R8cYPMNz5KHY4B8A:v:LWpg1kzHdLZeqZK3TlU3wcqxLoZ7rloxFakIT0pB40wA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + // serverPeerId: 'edWkiejqaFuRnJmjreszhou7MdFBCBnEN4J3kdnl5iwA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + // adminUserKey: '4WzLq7Dg9-ImFATldkQeApMi_vUeh7rfVDC4EJ7YDVIA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + // clientPeerKey: '_NdCrMT9zLCC02WWdbbDZTG01W4os-9f9wZdv7W4iyMA', // TODO : Environmentalize the nextgraph settings. this value is specific to a local environment. + serverAddr: '172.21.0.3:1440' // TODO : Environmentalize the nextgraph settings. Even though this value is the genric one for the nextgraph broker }); } else if (triplestore === 'fuseki') { adapter = new FusekiAdapter({ diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index e76dfe62c..a2074c5f5 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -1,17077 +1,9323 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/code-frame@npm:7.27.1" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.27.1" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.1.1" - checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/compat-data@npm:7.26.5" - checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/compat-data@npm:7.27.2" - checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/compat-data@npm:7.28.0" - checksum: 10c0/c4e527302bcd61052423f757355a71c3bc62362bac13f7f130de16e439716f66091ff5bdecda418e8fa0271d4c725f860f0ee23ab7bf6e769f7a8bb16dfcb531 - languageName: node - linkType: hard - -"@babel/core@npm:^7.23.9": - version: 7.26.0 - resolution: "@babel/core@npm:7.26.0" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.26.0" - "@babel/generator": "npm:^7.26.0" - "@babel/helper-compilation-targets": "npm:^7.25.9" - "@babel/helper-module-transforms": "npm:^7.26.0" - "@babel/helpers": "npm:^7.26.0" - "@babel/parser": "npm:^7.26.0" - "@babel/template": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e - languageName: node - linkType: hard - -"@babel/core@npm:^7.27.4, @babel/core@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/core@npm:7.28.0" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-module-transforms": "npm:^7.27.3" - "@babel/helpers": "npm:^7.27.6" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/traverse": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/423302e7c721e73b1c096217880272e02020dfb697a55ccca60ad01bba90037015f84d0c20c6ce297cf33a19bb704bc5c2b3d3095f5284dfa592bd1de0b9e8c3 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/generator@npm:7.26.5" - dependencies: - "@babel/parser": "npm:^7.26.5" - "@babel/types": "npm:^7.26.5" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/generator@npm:7.27.1" - dependencies: - "@babel/parser": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/generator@npm:7.28.0" - dependencies: - "@babel/parser": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10c0/1b3d122268ea3df50fde707ad864d9a55c72621357d5cebb972db3dd76859c45810c56e16ad23123f18f80cc2692f5a015d2858361300f0f224a05dc43d36a92 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" - dependencies: - "@babel/types": "npm:^7.27.3" - checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.25.9": - version: 7.26.5 - resolution: "@babel/helper-compilation-targets@npm:7.26.5" - dependencies: - "@babel/compat-data": "npm:^7.26.5" - "@babel/helper-validator-option": "npm:^7.25.9" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/helper-compilation-targets@npm:7.27.2" - dependencies: - "@babel/compat-data": "npm:^7.27.2" - "@babel/helper-validator-option": "npm:^7.27.1" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-member-expression-to-functions": "npm:^7.27.1" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/4ee199671d6b9bdd4988aa2eea4bdced9a73abfc831d81b00c7634f49a8fc271b3ceda01c067af58018eb720c6151322015d463abea7072a368ee13f35adbb4c - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - regexpu-core: "npm:^6.2.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/591fe8bd3bb39679cc49588889b83bd628d8c4b99c55bafa81e80b1e605a348b64da955e3fd891c4ba3f36fd015367ba2eadea22af6a7de1610fbb5bcc2d3df0 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.6.5": - version: 0.6.5 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - debug: "npm:^4.4.1" - lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.22.10" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e - languageName: node - linkType: hard - -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-module-imports@npm:7.25.9" - dependencies: - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-imports@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helper-module-transforms@npm:7.26.0" - dependencies: - "@babel/helper-module-imports": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-transforms@npm:7.27.1" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-module-transforms@npm:7.27.3" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.3" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/fccb4f512a13b4c069af51e1b56b20f54024bcf1591e31e978a30f3502567f34f90a80da6a19a6148c249216292a8074a0121f9e52602510ef0f32dbce95ca01 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" - dependencies: - "@babel/types": "npm:^7.27.1" - checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.26.5 - resolution: "@babel/helper-plugin-utils@npm:7.26.5" - checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-plugin-utils@npm:7.27.1" - checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-wrap-function": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-replace-supers@npm:7.27.1" - dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.27.1" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-identifier@npm:7.27.1" - checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-option@npm:7.25.9" - checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-option@npm:7.27.1" - checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-wrap-function@npm:7.27.1" - dependencies: - "@babel/template": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/c472f75c0951bc657ab0a117538c7c116566ae7579ed47ac3f572c42dc78bd6f1e18f52ebe80d38300c991c3fcaa06979e2f8864ee919369dabd59072288de30 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helpers@npm:7.26.0" - dependencies: - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" - checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.27.6": - version: 7.28.2 - resolution: "@babel/helpers@npm:7.28.2" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.2" - checksum: 10c0/f3e7b21517e2699c4ca193663ecfb1bf1b2ae2762d8ba4a9f1786feaca0d6984537fc60bf2206e92c43640a6dada6b438f523cc1ad78610d0151aeb061b37f63 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6": - version: 7.26.5 - resolution: "@babel/parser@npm:7.26.5" - dependencies: - "@babel/types": "npm:^7.26.5" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e - languageName: node - linkType: hard - -"@babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/parser@npm:7.27.2" - dependencies: - "@babel/types": "npm:^7.27.1" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/parser@npm:7.28.0" - dependencies: - "@babel/types": "npm:^7.28.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/7dfffa978ae1cd179641a7c4b4ad688c6828c2c58ec96b118c2fb10bc3715223de6b88bff1ebff67056bb5fccc568ae773e3b83c592a1b843423319f80c99ebd - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.13.0 - checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/b94e6c3fc019e988b1499490829c327a1067b4ddea8ad402f6d0554793c9124148c2125338c723661b6dff040951abc1f092afbf3f2d234319cd580b68e52445 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.12.13" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/06a954ee672f7a7c44d52b6e55598da43a7064e80df219765c51c37a0692641277e90411028f7cae4f4d1dedeed084f0c453576fa421c35a81f1603c5e3e0146 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.26.0 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d - languageName: node - linkType: hard - -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/739d577e649d7d7b9845dc309e132964327ab3eaea43ad04d04a7dcb977c63f9aa9a423d1ca39baf10939128d02f52e6fda39c834fb9f1753785b1497e72c4dc - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e76b1f6f9c3bbf72e17d7639406d47f09481806de4db99a8de375a0bb40957ea309b20aa705f0c25ab1d7c845e3f365af67eafa368034521151a0e352a03ef2f - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/787d85e72a92917e735aa54e23062fa777031f8a07046e67f5026eff3d91e64eb535575dd1df917b0011bee014ae51287478af14c1d4ba60bc81e326bc044cfc - languageName: node - linkType: hard - -"@babel/plugin-transform-class-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cc0662633c0fe6df95819fef223506ddf26c369c8d64ab21a728d9007ec866bf9436a253909819216c24a82186b6ccbc1ec94d7aaf3f82df227c7c02fa6a704b - languageName: node - linkType: hard - -"@babel/plugin-transform-class-static-block@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 10c0/396997dd81fc1cf242b921e337d25089d6b9dc3596e81322ff11a6359326dc44f2f8b82dcc279c2e514cafaf8964dc7ed39e9fab4b8af1308b57387d111f6a20 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-classes@npm:7.28.0" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3b213b43104fe99dd7e79401a86d09e545836e057a70ffe77e8196a87bf67ae167e502ae90afdf0d1a2be683be5652514aaeda743bd984e583523dd8ecfef887 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/template": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e09a12f8c8ae0e6a6144c102956947b4ec05f6c844169121d0ec4529c2d30ad1dc59fee67736193b87a402f44552c888a519a680a31853bdb4d34788c28af3b0 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-destructuring@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cc7ccafa952b3ff7888544d5688cfafaba78c69ce1e2f04f3233f4f78c9de5e46e9695f5ea42c085b0c0cfa39b10f366d362a2be245b6d35b66d3eb1d427ccb2 - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f9caddfad9a551b4dabe0dcb7c040f458fbaaa7bbb44200c20198b32c8259be8e050e58d2c853fdac901a4cfe490b86aa857036d8d461b192dd010d0e242dedb - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/121502a252b3206913e1e990a47fea34397b4cbf7804d4cd872d45961bc45b603423f60ca87f3a3023a62528f5feb475ac1c9ec76096899ec182fcb135eba375 - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 - languageName: node - linkType: hard - -"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3baa706af3112adf2ae0c7ec0dc61b63dd02695eb5582f3c3a2b2d05399c6aa7756f55e7bbbd5412e613a6ba1dd6b6736904074b4d7ebd6b45a1e3f9145e4094 - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/953d21e01fed76da8e08fb5094cade7bf8927c1bb79301916bec2db0593b41dbcfbca1024ad5db886b72208a93ada8f57a219525aad048cf15814eeb65cf760d - languageName: node - linkType: hard - -"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-for-of@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-function-name@npm:7.27.1" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c - languageName: node - linkType: hard - -"@babel/plugin-transform-json-strings@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2379714aca025516452a7c1afa1ca42a22b9b51a5050a653cc6198a51665ab82bdecf36106d32d731512706a1e373c5637f5ff635737319aa42f3827da2326d6 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca - languageName: node - linkType: hard - -"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5b0abc7c0d09d562bf555c646dce63a30288e5db46fd2ce809a61d064415da6efc3b2b3c59b8e4fe98accd072c89a2f7c3765b400e4bf488651735d314d9feeb - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4def972dcd23375a266ea1189115a4ff61744b2c9366fc1de648b3fab2c650faf1a94092de93a33ff18858d2e6c4dddeeee5384cb42ba0129baeab01a5cdf1e2 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f16fca62d144d9cbf558e7b5f83e13bb6d0f21fdeff3024b0cecd42ffdec0b4151461da42bd0963512783ece31aafa5ffe03446b4869220ddd095b24d414e2b5 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-new-target@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 - languageName: node - linkType: hard - -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a435fc03aaa65c6ef8e99b2d61af0994eb5cdd4a28562d78c3b0b0228ca7e501aa255e1dff091a6996d7d3ea808eb5a65fd50ecd28dfb10687a8a1095dcadc7a - languageName: node - linkType: hard - -"@babel/plugin-transform-numeric-separator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/b72cbebbfe46fcf319504edc1cf59f3f41c992dd6840db766367f6a1d232cd2c52143c5eaf57e0316710bee251cae94be97c6d646b5022fcd9274ccb131b470c - languageName: node - linkType: hard - -"@babel/plugin-transform-object-rest-spread@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.0" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/traverse": "npm:^7.28.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/360dc6fd5285ee5e1d3be8a1fb0decd120b2a1726800317b4ab48b7c91616247030239b7fa06ceaa1a8a586fde1e143c24d45f8d41956876099d97d664f8ef1e - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-object-super@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/807a4330f1fac08e2682d57bc82e714868fc651c8876f9a8b3a3fd8f53c129e87371f8243e712ac7dae11e090b737a2219a02fe1b6459a29e664fa073c3277bb - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5b18ff5124e503f0a25d6b195be7351a028b3992d6f2a91fb4037e2a2c386400d66bc1df8f6df0a94c708524f318729e81a95c41906e5a7919a06a43e573a525 - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.27.7": - version: 7.27.7 - resolution: "@babel/plugin-transform-parameters@npm:7.27.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f - languageName: node - linkType: hard - -"@babel/plugin-transform-private-methods@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/232bedfe9d28df215fb03cc7623bdde468b1246bdd6dc24465ff4bf9cc5f5a256ae33daea1fafa6cc59705e4d29da9024bb79baccaa5cd92811ac5db9b9244f2 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a8c4536273ca716dcc98e74ea25ca76431528554922f184392be3ddaf1761d4aa0e06f1311577755bd1613f7054fb51d29de2ada1130f743d329170a1aa1fe56 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.28.0": - version: 7.28.1 - resolution: "@babel/plugin-transform-regenerator@npm:7.28.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6c9e6eb80ce9c0bde0876c80979e078fbc85dc802272cba4ee72b5b1c858472e38167c418917e4f0d4384ce888706d95544a8d266880c0e199e167e078168b67 - languageName: node - linkType: hard - -"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/31ae596ab56751cf43468a6c0a9d6bc3521d306d2bee9c6957cdb64bea53812ce24bd13a32f766150d62b737bca5b0650b2c62db379382fff0dccbf076055c33 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 - languageName: node - linkType: hard - -"@babel/plugin-transform-runtime@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-runtime@npm:7.28.0" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - babel-plugin-polyfill-corejs2: "npm:^0.4.14" - babel-plugin-polyfill-corejs3: "npm:^0.13.0" - babel-plugin-polyfill-regenerator: "npm:^0.6.5" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/71eba1e6aaafacb2ec0fd468394c7aeaff32265b21424bd9b2d963368a4a5260547e06976bb34e2553a7179463c3a3a4c2a4552256b5112c8b7dcadb7bd5bb07 - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-spread@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/b34fc58b33bd35b47d67416655c2cbc8578fbb3948b4592bc15eb6d8b4046986e25c06e3b9929460fa4ab08e9653582415e7ef8b87d265e1239251bdf5a4c162 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 - languageName: node - linkType: hard - -"@babel/plugin-transform-typescript@npm:^7.27.1": - version: 7.28.0 - resolution: "@babel/plugin-transform-typescript@npm:7.28.0" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/plugin-syntax-typescript": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/049c2bd3407bbf5041d8c95805a4fadee6d176e034f6b94ce7967b92a846f1e00f323cf7dfbb2d06c93485f241fb8cf4c10520e30096a6059d251b94e80386e9 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a332bc3cb3eeea67c47502bc52d13a0f8abae5a7bfcb08b93a8300ddaff8d9e1238f912969494c1b494c1898c6f19687054440706700b6d12cb0b90d88beb4d0 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/236645f4d0a1fba7c18dc8ffe3975933af93e478f2665650c2d91cf528cfa1587cde5cfe277e0e501fc03b5bf57638369575d6539cef478632fb93bd7d7d7178 - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/preset-env@npm:7.28.0" - dependencies: - "@babel/compat-data": "npm:^7.28.0" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-option": "npm:^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.27.1" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1" - "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" - "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" - "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" - "@babel/plugin-transform-async-generator-functions": "npm:^7.28.0" - "@babel/plugin-transform-async-to-generator": "npm:^7.27.1" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" - "@babel/plugin-transform-block-scoping": "npm:^7.28.0" - "@babel/plugin-transform-class-properties": "npm:^7.27.1" - "@babel/plugin-transform-class-static-block": "npm:^7.27.1" - "@babel/plugin-transform-classes": "npm:^7.28.0" - "@babel/plugin-transform-computed-properties": "npm:^7.27.1" - "@babel/plugin-transform-destructuring": "npm:^7.28.0" - "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" - "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1" - "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" - "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.0" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.27.1" - "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" - "@babel/plugin-transform-for-of": "npm:^7.27.1" - "@babel/plugin-transform-function-name": "npm:^7.27.1" - "@babel/plugin-transform-json-strings": "npm:^7.27.1" - "@babel/plugin-transform-literals": "npm:^7.27.1" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.27.1" - "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" - "@babel/plugin-transform-modules-amd": "npm:^7.27.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" - "@babel/plugin-transform-modules-systemjs": "npm:^7.27.1" - "@babel/plugin-transform-modules-umd": "npm:^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" - "@babel/plugin-transform-new-target": "npm:^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1" - "@babel/plugin-transform-numeric-separator": "npm:^7.27.1" - "@babel/plugin-transform-object-rest-spread": "npm:^7.28.0" - "@babel/plugin-transform-object-super": "npm:^7.27.1" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/plugin-transform-private-methods": "npm:^7.27.1" - "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" - "@babel/plugin-transform-property-literals": "npm:^7.27.1" - "@babel/plugin-transform-regenerator": "npm:^7.28.0" - "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" - "@babel/plugin-transform-reserved-words": "npm:^7.27.1" - "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" - "@babel/plugin-transform-spread": "npm:^7.27.1" - "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" - "@babel/plugin-transform-template-literals": "npm:^7.27.1" - "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" - "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1" - "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1" - "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.14" - babel-plugin-polyfill-corejs3: "npm:^0.13.0" - babel-plugin-polyfill-regenerator: "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f343103b8f0e8da5be4ae031aff8bf35da4764997af4af78ae9506f421b785dd45da1bc09f845b1fc308c8b7d134aead4a1f89e7fb6e213cd2f9fe1d2aa78bc9 - languageName: node - linkType: hard - -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@babel/types": "npm:^7.4.4" - esutils: "npm:^2.0.2" - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/preset-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-option": "npm:^7.27.1" - "@babel/plugin-syntax-jsx": "npm:^7.27.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" - "@babel/plugin-transform-typescript": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/cba6ca793d915f8aff9fe2f13b0dfbf5fd3f2e9a17f17478ec9878e9af0d206dcfe93154b9fd353727f16c1dca7c7a3ceb4943f8d28b216235f106bc0fbbcaa3 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.13.9": - version: 7.28.2 - resolution: "@babel/runtime@npm:7.28.2" - checksum: 10c0/c20afe253629d53a405a610b12a62ac74d341a2c1e0fb202bbef0c118f6b5c84f94bf16039f58fd0483dd256901259930a43976845bdeb180cab1f882c21b6e0 - languageName: node - linkType: hard - -"@babel/template@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" - dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab - languageName: node - linkType: hard - -"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/template@npm:7.27.2" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.2" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.25.9": - version: 7.26.5 - resolution: "@babel/traverse@npm:7.26.5" - dependencies: - "@babel/code-frame": "npm:^7.26.2" - "@babel/generator": "npm:^7.26.5" - "@babel/parser": "npm:^7.26.5" - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.5" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/traverse@npm:7.27.1" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.1" - "@babel/template": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/traverse@npm:7.28.0" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.0" - debug: "npm:^4.3.1" - checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5, @babel/types@npm:^7.6.1, @babel/types@npm:^7.9.6": - version: 7.26.5 - resolution: "@babel/types@npm:7.26.5" - dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/types@npm:7.27.1" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2, @babel/types@npm:^7.4.4": - version: 7.28.2 - resolution: "@babel/types@npm:7.28.2" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/24b11c9368e7e2c291fe3c1bcd1ed66f6593a3975f479cbb9dd7b8c8d8eab8a962b0d2fca616c043396ce82500ac7d23d594fbbbd013828182c01596370a0b10 - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 - languageName: node - linkType: hard - -"@comunica/actor-abstract-mediatyped@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-abstract-mediatyped@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/7812dbca52fc7442579ccc95a1b2a0e7b41058dcfab56c55e18a142c666e7ba8f7b7ff62f64ed205c6f0a4128cbab63dd1a84faaf5d8a84545b3e635c447a2ac - languageName: node - linkType: hard - -"@comunica/actor-http-native@npm:~1.22.0": - version: 1.22.1 - resolution: "@comunica/actor-http-native@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@types/parse-link-header": "npm:^1.0.0" - cross-fetch: "npm:^3.0.5" - follow-redirects: "npm:^1.5.1" - parse-link-header: "npm:^1.0.1" - peerDependencies: - "@comunica/bus-http": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/65288a5ae2cbefdcc5b7315851a4a7488966357de3ecf35510aa8f379241675d8579a9d595b44bffbc93eec544071fb6107d2c51ce6555f224e5273273dab07f - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-microdata@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-microdata@npm:1.22.0" - dependencies: - microdata-rdf-streaming-parser: "npm:^1.2.0" - peerDependencies: - "@comunica/bus-rdf-parse-html": ^1.17.0 - "@comunica/core": ^1.17.0 - checksum: 10c0/ceeb80e597ffa78dec991cd0c6fdd0af54f4a0fe93708aa2c41cecef6f10a9374b2f7fbfb221cce60d6f4ea4792e9eec04eb774b60005073545937c46b56ee6e - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-rdfa@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-rdfa@npm:1.22.0" - dependencies: - rdfa-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse-html": ^1.0.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/0a9969b1227f5a94712f58c9b45501174a49689e225d4b4805b7edbc9a8b035c1bc77a46b08e00b9b1f4354f5054e82b7d4197889cce44fce8b18390dfdc2742 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html-script@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html-script@npm:1.22.0" - dependencies: - "@comunica/bus-rdf-parse-html": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - relative-to-absolute-iri: "npm:^1.0.5" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.4.0 - "@comunica/core": ^1.4.0 - checksum: 10c0/7da4ddf8aaffd7f17d96c56b800a27c2cf7f87ad6b00daa620a89a800184ae7d32cdc871a3dcef202a8dd95fcfd316744ac72289681593be009dca74620b81c0 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-html@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-html@npm:1.22.0" - dependencies: - "@comunica/bus-rdf-parse-html": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^7.0.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.8.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/9a0e2932d6f4e4242438a581e0fd88a3149395c5a2b8bdc5e120c757a8a42423ad1e5e3c7fbfa110bab3bea06041a41bb207ca6a68dbfc6b7c9e4fe4d23191a1 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-jsonld@npm:^1.22.0": - version: 1.22.1 - resolution: "@comunica/actor-rdf-parse-jsonld@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - jsonld-context-parser: "npm:^2.1.2" - jsonld-streaming-parser: "npm:^2.4.0" - stream-to-string: "npm:^1.2.0" - peerDependencies: - "@comunica/bus-http": ^1.0.0 - "@comunica/bus-rdf-parse": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/959e5abe524083704705f1e13470cbaf00fdcdf6f8434b657e98155f390b13d651544899200c85456f5bb800a78367c3a9bef241a574707712091a430269eb31 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-n3@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-n3@npm:1.22.0" - dependencies: - "@types/n3": "npm:^1.4.4" - n3: "npm:^1.6.3" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.0.0 - "@comunica/core": ^1.0.0 - checksum: 10c0/5651a13e6b07ac4f45f73fd525077f1fd5c43af64944b4882ec7bd4f31eae12c87a763f3a39fbccb8018a39144f60e11fac2db2a725e73ca1f2595f936d05f37 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-rdfxml@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-rdfxml@npm:1.22.0" - dependencies: - rdfxml-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.1.0 - "@comunica/core": ^1.1.0 - checksum: 10c0/c4cf0c85794995fe94438108ea54fe5ff74928d8bb179aa3b52bc1bdcb3dcade02d9ef16dfbdf27e22cf4760ba1786f6989b34c2eed3fbd1c80815ca0cf5aa13 - languageName: node - linkType: hard - -"@comunica/actor-rdf-parse-xml-rdfa@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/actor-rdf-parse-xml-rdfa@npm:1.22.0" - dependencies: - rdfa-streaming-parser: "npm:^1.5.0" - peerDependencies: - "@comunica/bus-rdf-parse": ^1.8.0 - "@comunica/core": ^1.8.0 - checksum: 10c0/d517f28fc6b63b0d88a31b0a7a2053f9f0d74c4d3040669b139c3e64a193b364ec59bb7a291eda08ca10b74e51d9b7045724f5772ee99731278ac06093243da5 - languageName: node - linkType: hard - -"@comunica/bus-http@npm:~1.22.0": - version: 1.22.1 - resolution: "@comunica/bus-http@npm:1.22.1" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@types/readable-stream": "npm:^2.3.11" - is-stream: "npm:^2.0.0" - readable-web-to-node-stream: "npm:^3.0.2" - web-streams-node: "npm:^0.4.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/5578a14ab438e11a4da413119a24d4da1b3f681be44ab7c05711bfbff563d9601de793e081c524747ae6a66fad413a82d3d52814915ba8c92fb96055f5f37f41 - languageName: node - linkType: hard - -"@comunica/bus-init@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-init@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/76ed0ad2c12125788a98611276ed30ebd1e7f2ae52541e8f64ebde71fcb513bf6d6eed38322da3fc955197f104d20571aa1a0c54444907c8bbbd5c58058ba101 - languageName: node - linkType: hard - -"@comunica/bus-rdf-parse-html@npm:^1.22.0, @comunica/bus-rdf-parse-html@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-rdf-parse-html@npm:1.22.0" - dependencies: - "@rdfjs/types": "npm:*" - peerDependencies: - "@comunica/core": ^1.8.0 - checksum: 10c0/fb68896db681674831130d521e0e41d85bb2e3fea2be96f2f44f9304cb9e1271b1c51221d16c3d8bb015b55e2c108611562657e3c89fc8bd6e5c087f04290bfa - languageName: node - linkType: hard - -"@comunica/bus-rdf-parse@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/bus-rdf-parse@npm:1.22.0" - dependencies: - "@comunica/actor-abstract-mediatyped": "npm:^1.22.0" - "@rdfjs/types": "npm:*" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/f4e3eb35b7757a93a44f1050de542f6e8fc39fcf74b22c89100eaec4556653b270163422f918a9e09833f57244e82553b7a03a80bbdab64c82b97b3aebf7dd02 - languageName: node - linkType: hard - -"@comunica/context-entries@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/context-entries@npm:1.22.0" - checksum: 10c0/edd1cb3e7861f043e63040f98e9959ace55a1c9b90ed5ab9ab0bc40eea182ec81b75e7c1650e1e1a64dc97634f33f6c6b57878f0003bd0217f696040ec8b9234 - languageName: node - linkType: hard - -"@comunica/core@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/core@npm:1.22.0" - dependencies: - "@comunica/context-entries": "npm:^1.22.0" - "@comunica/types": "npm:^1.22.0" - immutable: "npm:^3.8.2" - checksum: 10c0/73b4d0228b87ee8807d7219c7cae045389cf8b967b2cbfe024f244bb9cffb73b38c516673cf80764fa02ab3c1d32f803a0de05b88d9b38c0eff8a701f97a1c03 - languageName: node - linkType: hard - -"@comunica/mediator-combine-union@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-combine-union@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/72cee255c14709a3039149b64f281a480c32d2deade1c704587c3714d827ecc5e1ecbb1762211d2d554cf4759d4ba1a4fddd243c1e8bfda4493883b7bd07dca0 - languageName: node - linkType: hard - -"@comunica/mediator-number@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-number@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/f7fb1863ae17b4316da03af93333e9a288d4a4067a9f09e838e9a59aeee70f385e1c21dd3f144d352991d865dbcd7d809ddddfa26b7e6dedf65dbc56124bf4ae - languageName: node - linkType: hard - -"@comunica/mediator-race@npm:~1.22.0": - version: 1.22.0 - resolution: "@comunica/mediator-race@npm:1.22.0" - peerDependencies: - "@comunica/core": ^1.0.0 - checksum: 10c0/6506d8fe2631a55be151c2ca4d2efdeab2fa0a376d650bbdab1b78aa5773507df5ab874eac0931990d1965879cc0566fa056663e1461f71fec67eb7d93d810ca - languageName: node - linkType: hard - -"@comunica/types@npm:^1.22.0": - version: 1.22.0 - resolution: "@comunica/types@npm:1.22.0" - dependencies: - "@rdfjs/types": "npm:*" - asynciterator: "npm:^3.2.0" - immutable: "npm:^3.8.2" - sparqlalgebrajs: "npm:^3.0.1" - checksum: 10c0/55810c126392810f973467ae0b411e942b4d3202cd67500994321621dd550f4a9a470bba24a095d100edc8ad207e8936627ab6a6a4fbb33cc1c1098d10e1db88 - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": "npm:0.3.9" - checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 - languageName: node - linkType: hard - -"@digitalbazaar/credentials-context@npm:^3.1.0": - version: 3.1.0 - resolution: "@digitalbazaar/credentials-context@npm:3.1.0" - checksum: 10c0/0fa22d00542450b3e0567511779dafcd943bcba75a2be83fa80b95c1f255f1b2f701ea64a0ab3959c8503a9f1682f724de0ffe8f5eea18b065d5074d61e52cb7 - languageName: node - linkType: hard - -"@digitalbazaar/data-integrity@npm:^2.5.0": - version: 2.5.0 - resolution: "@digitalbazaar/data-integrity@npm:2.5.0" - dependencies: - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - jsonld-signatures: "npm:^11.3.0" - checksum: 10c0/0080cbbd5425ef83e0ca3855fb8bc18f6d382a5f2aebba9a1dc7003dc6e066d2fd1ad95737f6ea36c3c8c2f696330316991aabb46d518420220487b8444086f5 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-multikey@npm:^1.0.0, @digitalbazaar/ed25519-multikey@npm:^1.1.0, @digitalbazaar/ed25519-multikey@npm:^1.3.0": - version: 1.3.0 - resolution: "@digitalbazaar/ed25519-multikey@npm:1.3.0" - dependencies: - "@noble/ed25519": "npm:^1.6.0" - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - checksum: 10c0/07cf6ea5591a269fca5b9709481e249b20cf83145ab56c25c8b75f668739163af95eae6742b50b8575522075e0933242343564d14d661f5bcae70fade13726b5 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-signature-2020@npm:^5.4.0": - version: 5.4.0 - resolution: "@digitalbazaar/ed25519-signature-2020@npm:5.4.0" - dependencies: - "@digitalbazaar/ed25519-multikey": "npm:^1.1.0" - "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.1.0" - base58-universal: "npm:^2.0.0" - ed25519-signature-2020-context: "npm:^1.1.0" - jsonld-signatures: "npm:^11.3.0" - checksum: 10c0/7fcdd54c18d85dbbf937464ff8f330876de336d2607c944981fa8e69bcc2df59a5181441d364c27e269d1a6d2028217ed3f662028634c57ab55e739c3af42c16 - languageName: node - linkType: hard - -"@digitalbazaar/ed25519-verification-key-2020@npm:^4.1.0, @digitalbazaar/ed25519-verification-key-2020@npm:^4.2.0": - version: 4.2.0 - resolution: "@digitalbazaar/ed25519-verification-key-2020@npm:4.2.0" - dependencies: - "@noble/ed25519": "npm:^1.6.0" - base58-universal: "npm:^2.0.0" - base64url-universal: "npm:^2.0.0" - crypto-ld: "npm:^7.0.0" - checksum: 10c0/386b4be965e10b0253c5fd620c4e386c2f57587937c9215ed0127c3f42016d32e99844cc5eabbddc41642ade31760539e67e97d69cfdb0df6b3beb58737b9a01 - languageName: node - linkType: hard - -"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:^1.2.0": - version: 1.2.0 - resolution: "@digitalbazaar/eddsa-rdfc-2022-cryptosuite@npm:1.2.0" - dependencies: - "@digitalbazaar/ed25519-multikey": "npm:^1.0.0" - jsonld: "npm:^8.1.0" - rdf-canonize: "npm:^4.0.1" - checksum: 10c0/2473ddb96cf50ab6e478f203ff3eaa7b530a9a96bb45c5f8cfada1fe4fb29dc04cd92cff86c6b9286848b86531deccbd3cdfca7fc0821a09880e94af8b3d8bed - languageName: node - linkType: hard - -"@digitalbazaar/http-client@npm:^3.4.1": - version: 3.4.1 - resolution: "@digitalbazaar/http-client@npm:3.4.1" - dependencies: - ky: "npm:^0.33.3" - ky-universal: "npm:^0.11.0" - undici: "npm:^5.21.2" - checksum: 10c0/218240da52e7303a63e822448fb6dc2eb3a42d0418f51fd9240b267703ffad2e45c17df01d5d8f6886ea8d0cdcf65ee929ae5377703c0e9d2db4f68313f8246c - languageName: node - linkType: hard - -"@digitalbazaar/security-context@npm:^1.0.0": - version: 1.0.1 - resolution: "@digitalbazaar/security-context@npm:1.0.1" - checksum: 10c0/6d1444002958454be5dd70cc6ba4d0df952f90162756d6320d88501ff44fc7d48dcb2aa3452b77e8941a9da4e4c7d050d3510827db93637ff469b92391c63324 - languageName: node - linkType: hard - -"@digitalbazaar/vc@npm:^7.1.0": - version: 7.1.0 - resolution: "@digitalbazaar/vc@npm:7.1.0" - dependencies: - "@digitalbazaar/credentials-context": "npm:^3.1.0" - ed25519-signature-2018-context: "npm:^1.1.0" - jsonld: "npm:^8.3.1" - jsonld-signatures: "npm:^11.2.1" - checksum: 10c0/4914cd7bfc2556512b7b1b78b7032180fcd8a966d365ecd62f0534da2347fa43b9023f2460f15fd9c8029088af8ecc81481603fe9cf953e40393a956338356bb - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/core@npm:1.3.1" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.1" - tslib: "npm:^2.4.0" - checksum: 10c0/d3be1044ad704e2c486641bc18908523490f28c7d38bd12d9c1d4ce37d39dae6c4aecd2f2eaf44c6e3bd90eaf04e0591acc440b1b038cdf43cce078a355a0ea0 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.4.3": - version: 1.4.5 - resolution: "@emnapi/core@npm:1.4.5" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.4" - tslib: "npm:^2.4.0" - checksum: 10c0/da4a57f65f325d720d0e0d1a9c6618b90c4c43a5027834a110476984e1d47c95ebaed4d316b5dddb9c0ed9a493ffeb97d1934f9677035f336d8a36c1f3b2818f - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/runtime@npm:1.3.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.4.3": - version: 1.4.5 - resolution: "@emnapi/runtime@npm:1.4.5" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/37a0278be5ac81e918efe36f1449875cbafba947039c53c65a1f8fc238001b866446fc66041513b286baaff5d6f9bec667f5164b3ca481373a8d9cb65bfc984b - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.1": - version: 1.0.1 - resolution: "@emnapi/wasi-threads@npm:1.0.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/1e0c8036b8d53e9b07cc9acf021705ef6c86ab6b13e1acda7fffaf541a2d3565072afb92597419173ced9ea14f6bf32fce149106e669b5902b825e8b499e5c6c - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.4": - version: 1.0.4 - resolution: "@emnapi/wasi-threads@npm:1.0.4" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/2c91a53e62f875800baf035c4d42c9c0d18e5afd9a31ca2aac8b435aeaeaeaac386b5b3d0d0e70aa7a5a9852bbe05106b1f680cd82cce03145c703b423d41313 - languageName: node - linkType: hard - -"@es-joy/jsdoccomment@npm:~0.46.0": - version: 0.46.0 - resolution: "@es-joy/jsdoccomment@npm:0.46.0" - dependencies: - comment-parser: "npm:1.4.1" - esquery: "npm:^1.6.0" - jsdoc-type-pratt-parser: "npm:~4.0.0" - checksum: 10c0/a7a67936ebf6d9aaf74af018c3ac744769af3552b05ad9b88fca96b2ffdca16e724b0ff497f53634ec4cca81e98d8c471b6b6bde0fa5b725af4222ad9a0707f0 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.1 - resolution: "@eslint-community/eslint-utils@npm:4.4.1" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 - languageName: node - linkType: hard - -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^1.0.0": - version: 1.2.1 - resolution: "@fastify/busboy@npm:1.2.1" - dependencies: - text-decoding: "npm:^1.0.0" - checksum: 10c0/fe13effa7a7a2aa270ef62586cd8d04339036b10ffa1d3d6a883e502fcc1bdc6d8de1bd7ac9d46ef7718bed3b1202cac058e281f5053dee262af7538243cb780 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" - dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c - languageName: node - linkType: hard - -"@hutson/parse-repository-url@npm:^3.0.0": - version: 3.0.2 - resolution: "@hutson/parse-repository-url@npm:3.0.2" - checksum: 10c0/d9197757ecad2df18d29d3e1d1fe0716d458fd88b849c71cbec9e78239f911074c97e8d764dfd8ed890431c1137e52dd7a337207fd65be20ce0784f7860ae4d1 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@isaacs/string-locale-compare@npm:^1.1.0": - version: 1.1.0 - resolution: "@isaacs/string-locale-compare@npm:1.1.0" - checksum: 10c0/d67226ff7ac544a495c77df38187e69e0e3a0783724777f86caadafb306e2155dc3b5787d5927916ddd7fb4a53561ac8f705448ac3235d18ea60da5854829fdf - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: "npm:^5.3.1" - find-up: "npm:^4.1.0" - get-package-type: "npm:^0.1.0" - js-yaml: "npm:^3.13.1" - resolve-from: "npm:^5.0.0" - checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a - languageName: node - linkType: hard - -"@jest/console@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/console@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - slash: "npm:^3.0.0" - checksum: 10c0/1400e9ee281dd070f543f8f8696b9aca4ba1f81d5cbfb3cae030664012ff5961c76ac2c8ccee172e416e15f88af3b10840548adbee4de0ec63100d44416b17ef - languageName: node - linkType: hard - -"@jest/core@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/core@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/pattern": "npm:30.0.1" - "@jest/reporters": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.3.2" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - exit-x: "npm:^0.2.2" - graceful-fs: "npm:^4.2.11" - jest-changed-files: "npm:30.0.5" - jest-config: "npm:30.0.5" - jest-haste-map: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-resolve-dependencies: "npm:30.0.5" - jest-runner: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - jest-watcher: "npm:30.0.5" - micromatch: "npm:^4.0.8" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/d3437dca1fccbb44c6c8a327b93e510e10999745b7c7dae94ad88d4fa4ce6d3c823e49d17caf79560b69a7db91fc10c7443a8014f8178622a0b11514b5106aa6 - languageName: node - linkType: hard - -"@jest/diff-sequences@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/diff-sequences@npm:30.0.1" - checksum: 10c0/3a840404e6021725ef7f86b11f7b2d13dd02846481264db0e447ee33b7ee992134e402cdc8b8b0ac969d37c6c0183044e382dedee72001cdf50cfb3c8088de74 - languageName: node - linkType: hard - -"@jest/environment@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/environment@npm:30.0.5" - dependencies: - "@jest/fake-timers": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-mock: "npm:30.0.5" - checksum: 10c0/e403b6f98fa3e39dd6462fa192e3bd55e9ac9c2322ca4471b9342495913a90ecaa5fc53238d4ad8a0dca7d53aa4b9de122721234e36f3a0445031c25757a3178 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/expect-utils@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - checksum: 10c0/d0ee162a1d1816724580bea53e7b422b891af073bdae439e78d04d5db09e6557e334f4c3d2892b9de750a59e79605f55d3ca8dbec9fb2ba33d8b803ed98463ad - languageName: node - linkType: hard - -"@jest/expect@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/expect@npm:30.0.5" - dependencies: - expect: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - checksum: 10c0/6ff40adf2f2cfa53f7a23bc2b85ae99d3264420e81202d45d1dc198009f4441ee575d910e79e589f69c2dd47e0ef9a3b66018f44760da02d98f474361f7c4d1c - languageName: node - linkType: hard - -"@jest/fake-timers@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/fake-timers@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@sinonjs/fake-timers": "npm:^13.0.0" - "@types/node": "npm:*" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - checksum: 10c0/4c403e624d758780016c2012b23112ff421efd601def289b201c4a5e03c46f995c7c3509d7b0b56dbe17cd5cbc66920734bd976ebe12125d6fd864d71888a50d - languageName: node - linkType: hard - -"@jest/get-type@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/get-type@npm:30.0.1" - checksum: 10c0/92437ae42d0df57e8acc2d067288151439db4752cde4f5e680c73c8a6e34568bbd8c1c81a2f2f9a637a619c2aac8bc87553fb80e31475b59e2ed789a71e5e540 - languageName: node - linkType: hard - -"@jest/globals@npm:30.0.5, @jest/globals@npm:^30.0.5": - version: 30.0.5 - resolution: "@jest/globals@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/expect": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - jest-mock: "npm:30.0.5" - checksum: 10c0/abe8e4b11f30c2885e42afa9e01d4364db8c6de4c3221f411b00a9081d3cc67226f84775efbbd17735dedb391222253f945ee260714d78b2a7304b7afa61b6d8 - languageName: node - linkType: hard - -"@jest/pattern@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/pattern@npm:30.0.1" - dependencies: - "@types/node": "npm:*" - jest-regex-util: "npm:30.0.1" - checksum: 10c0/32c5a7bfb6c591f004dac0ed36d645002ed168971e4c89bd915d1577031672870032594767557b855c5bc330aa1e39a2f54bf150d2ee88a7a0886e9cb65318bc - languageName: node - linkType: hard - -"@jest/reporters@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/reporters@npm:30.0.5" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - collect-v8-coverage: "npm:^1.0.2" - exit-x: "npm:^0.2.2" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^6.0.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^5.0.0" - istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-worker: "npm:30.0.5" - slash: "npm:^3.0.0" - string-length: "npm:^4.0.2" - v8-to-istanbul: "npm:^9.0.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/9f8a214ff69427b644e26981fa92af49b77819d512ac17d0b4190d1dc110b0bebeb7791faa7548b8097f010b094c3b5e3244e18f3837a3fe8385ff60c7114539 - languageName: node - linkType: hard - -"@jest/schemas@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/schemas@npm:30.0.5" - dependencies: - "@sinclair/typebox": "npm:^0.34.0" - checksum: 10c0/449dcd7ec5c6505e9ac3169d1143937e67044ae3e66a729ce4baf31812dfd30535f2b3b2934393c97cfdf5984ff581120e6b38f62b8560c8b5b7cc07f4175f65 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be - languageName: node - linkType: hard - -"@jest/snapshot-utils@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/snapshot-utils@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - natural-compare: "npm:^1.4.0" - checksum: 10c0/db270c2d6e216d132c5e0b05d8ff5bbe4fbd4e65b2de4cf94eacb44152e8f17fbbba8bdd2cb83b5fc2b1094db6424c7e1507b7eaade518dbc815cfacbdf6598b - languageName: node - linkType: hard - -"@jest/source-map@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/source-map@npm:30.0.1" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.25" - callsites: "npm:^3.1.0" - graceful-fs: "npm:^4.2.11" - checksum: 10c0/e7bda2786fc9f483d9dd7566c58c4bd948830997be862dfe80a3ae5550ff3f84753abb52e705d02ebe9db9f34ba7ebec4c2db11882048cdeef7a66f6332b3897 - languageName: node - linkType: hard - -"@jest/test-result@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/test-result@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/istanbul-lib-coverage": "npm:^2.0.6" - collect-v8-coverage: "npm:^1.0.2" - checksum: 10c0/2a43134ee28616a178b5a6379c837f2fb054a5e4a6ab411b9d15b85224e5d459d88902cdbf83edf5821c2c77fe13e67d078eff64c6871f3b08ebff0548a9a2e4 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/test-sequencer@npm:30.0.5" - dependencies: - "@jest/test-result": "npm:30.0.5" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - slash: "npm:^3.0.0" - checksum: 10c0/3caaea0558474764cd616f38acdc22ff4ce6ef806d931134ed366429fdea7110352b89d702e9cc1d71fa142d79e86f2f4e6eb0441a76a1896682e124ed8f42b4 - languageName: node - linkType: hard - -"@jest/transform@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/transform@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@jest/types": "npm:30.0.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - babel-plugin-istanbul: "npm:^7.0.0" - chalk: "npm:^4.1.2" - convert-source-map: "npm:^2.0.0" - fast-json-stable-stringify: "npm:^2.1.0" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-util: "npm:30.0.5" - micromatch: "npm:^4.0.8" - pirates: "npm:^4.0.7" - slash: "npm:^3.0.0" - write-file-atomic: "npm:^5.0.1" - checksum: 10c0/771f57b1bede66049de80dcbf984c74b7d3c072e905f2516ff3f86dc01abd2f79d821b9a6ae21f27cb26d484cd539c13b1a51f71c15e1aed0c62314203c5a186 - languageName: node - linkType: hard - -"@jest/types@npm:30.0.5": - version: 30.0.5 - resolution: "@jest/types@npm:30.0.5" - dependencies: - "@jest/pattern": "npm:30.0.1" - "@jest/schemas": "npm:30.0.5" - "@types/istanbul-lib-coverage": "npm:^2.0.6" - "@types/istanbul-reports": "npm:^3.0.4" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.33" - chalk: "npm:^4.1.2" - checksum: 10c0/fd097a390e36edacbd2c92a8378ec0cd67abec5e234bab7a80aec6eb8625568052b0c32acf472388d04c4cf384b8fa2871d0d12a56b4b06eaea93f2c6df0ec6c - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.12": - version: 0.3.12 - resolution: "@jridgewell/gen-mapping@npm:0.3.12" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/32f771ae2467e4d440be609581f7338d786d3d621bac3469e943b9d6d116c23c4becb36f84898a92bbf2f3c0511365c54a945a3b86a83141547a2a360a5ec0c7 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.8 - resolution: "@jridgewell/gen-mapping@npm:0.3.8" - dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.4 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" - checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.0.3" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.29 - resolution: "@jridgewell/trace-mapping@npm:0.3.29" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/fb547ba31658c4d74eb17e7389f4908bf7c44cef47acb4c5baa57289daf68e6fe53c639f41f751b3923aca67010501264f70e7b49978ad1f040294b22c37b333 - languageName: node - linkType: hard - -"@lerna/create@npm:8.1.9": - version: 8.1.9 - resolution: "@lerna/create@npm:8.1.9" - dependencies: - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" - "@octokit/plugin-enterprise-rest": "npm:6.0.1" - "@octokit/rest": "npm:19.0.11" - aproba: "npm:2.0.0" - byte-size: "npm:8.1.1" - chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" - cmd-shim: "npm:6.0.3" - color-support: "npm:1.1.3" - columnify: "npm:1.6.0" - console-control-strings: "npm:^1.1.0" - conventional-changelog-core: "npm:5.0.1" - conventional-recommended-bump: "npm:7.0.1" - cosmiconfig: "npm:9.0.0" - dedent: "npm:1.5.3" - execa: "npm:5.0.0" - fs-extra: "npm:^11.2.0" - get-stream: "npm:6.0.0" - git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - globby: "npm:11.1.0" - graceful-fs: "npm:4.2.11" - has-unicode: "npm:2.0.1" - ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" - is-ci: "npm:3.0.1" - is-stream: "npm:2.0.0" - js-yaml: "npm:4.1.0" - libnpmpublish: "npm:9.0.9" - load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" - make-dir: "npm:4.0.0" - minimatch: "npm:3.0.5" - multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" - p-map: "npm:4.0.0" - p-map-series: "npm:2.1.0" - p-queue: "npm:6.6.2" - p-reduce: "npm:^2.1.0" - pacote: "npm:^18.0.6" - pify: "npm:5.0.0" - read-cmd-shim: "npm:4.0.0" - resolve-from: "npm:5.0.0" - rimraf: "npm:^4.4.1" - semver: "npm:^7.3.4" - set-blocking: "npm:^2.0.0" - signal-exit: "npm:3.0.7" - slash: "npm:^3.0.0" - ssri: "npm:^10.0.6" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - strong-log-transformer: "npm:2.1.0" - tar: "npm:6.2.1" - temp-dir: "npm:1.0.0" - upath: "npm:2.0.1" - uuid: "npm:^10.0.0" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:5.0.1" - wide-align: "npm:1.1.5" - write-file-atomic: "npm:5.0.1" - write-pkg: "npm:4.0.0" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - checksum: 10c0/f050e79c0bd982c6fdf9b7347275a94cc80f7a6599094f1cf114c10d5373c21afac9bd1a5c0b2ca400e6aaf18da883c384dfd6e5c84a186a2c09c912bf9b2238 - languageName: node - linkType: hard - -"@mapbox/node-pre-gyp@npm:^1.0.11": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" - dependencies: - detect-libc: "npm:^2.0.0" - https-proxy-agent: "npm:^5.0.0" - make-dir: "npm:^3.1.0" - node-fetch: "npm:^2.6.7" - nopt: "npm:^5.0.0" - npmlog: "npm:^5.0.1" - rimraf: "npm:^3.0.2" - semver: "npm:^7.3.5" - tar: "npm:^6.1.11" - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:0.2.4": - version: 0.2.4 - resolution: "@napi-rs/wasm-runtime@npm:0.2.4" - dependencies: - "@emnapi/core": "npm:^1.1.0" - "@emnapi/runtime": "npm:^1.1.0" - "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/1040de49b2ef509db207e2517465dbf7fb3474f20e8ec32897672a962ff4f59872385666dac61dc9dbeae3cae5dad265d8dc3865da756adeb07d1634c67b03a1 - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:^0.2.11": - version: 0.2.12 - resolution: "@napi-rs/wasm-runtime@npm:0.2.12" - dependencies: - "@emnapi/core": "npm:^1.4.3" - "@emnapi/runtime": "npm:^1.4.3" - "@tybys/wasm-util": "npm:^0.10.0" - checksum: 10c0/6d07922c0613aab30c6a497f4df297ca7c54e5b480e00035e0209b872d5c6aab7162fc49477267556109c2c7ed1eb9c65a174e27e9b87568106a87b0a6e3ca7d - languageName: node - linkType: hard - -"@noble/ed25519@npm:^1.6.0": - version: 1.7.3 - resolution: "@noble/ed25519@npm:1.7.3" - checksum: 10c0/dc162c3be5ae5a3cc0e6aff8209c8d175f24bba22f2b473aa849e102471193c83664b06f0ba2b5e01e9aa1a67a44daf313f478adb9f38768408a8bcad6145a48 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@nolyfill/is-core-module@npm:1.0.39": - version: 1.0.39 - resolution: "@nolyfill/is-core-module@npm:1.0.39" - checksum: 10c0/34ab85fdc2e0250879518841f74a30c276bca4f6c3e13526d2d1fe515e1adf6d46c25fcd5989d22ea056d76f7c39210945180b4859fc83b050e2da411aa86289 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae - languageName: node - linkType: hard - -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 - languageName: node - linkType: hard - -"@npmcli/arborist@npm:7.5.4": - version: 7.5.4 - resolution: "@npmcli/arborist@npm:7.5.4" - dependencies: - "@isaacs/string-locale-compare": "npm:^1.1.0" - "@npmcli/fs": "npm:^3.1.1" - "@npmcli/installed-package-contents": "npm:^2.1.0" - "@npmcli/map-workspaces": "npm:^3.0.2" - "@npmcli/metavuln-calculator": "npm:^7.1.1" - "@npmcli/name-from-folder": "npm:^2.0.0" - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/query": "npm:^3.1.0" - "@npmcli/redact": "npm:^2.0.0" - "@npmcli/run-script": "npm:^8.1.0" - bin-links: "npm:^4.0.4" - cacache: "npm:^18.0.3" - common-ancestor-path: "npm:^1.0.1" - hosted-git-info: "npm:^7.0.2" - json-parse-even-better-errors: "npm:^3.0.2" - json-stringify-nice: "npm:^1.1.4" - lru-cache: "npm:^10.2.2" - minimatch: "npm:^9.0.4" - nopt: "npm:^7.2.1" - npm-install-checks: "npm:^6.2.0" - npm-package-arg: "npm:^11.0.2" - npm-pick-manifest: "npm:^9.0.1" - npm-registry-fetch: "npm:^17.0.1" - pacote: "npm:^18.0.6" - parse-conflict-json: "npm:^3.0.0" - proc-log: "npm:^4.2.0" - proggy: "npm:^2.0.0" - promise-all-reject-late: "npm:^1.0.0" - promise-call-limit: "npm:^3.0.1" - read-package-json-fast: "npm:^3.0.2" - semver: "npm:^7.3.7" - ssri: "npm:^10.0.6" - treeverse: "npm:^3.0.0" - walk-up-path: "npm:^3.0.1" - bin: - arborist: bin/index.js - checksum: 10c0/22417b804872e68b6486187bb769eabef7245c5d3fa055d5473f84a7088580543235f34af3047a0e9b357e70fccd768e8ef5c6c8664ed6909f659d07607ad955 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/fs@npm:4.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 - languageName: node - linkType: hard - -"@npmcli/git@npm:^5.0.0": - version: 5.0.8 - resolution: "@npmcli/git@npm:5.0.8" - dependencies: - "@npmcli/promise-spawn": "npm:^7.0.0" - ini: "npm:^4.1.3" - lru-cache: "npm:^10.0.1" - npm-pick-manifest: "npm:^9.0.0" - proc-log: "npm:^4.0.0" - promise-inflight: "npm:^1.0.1" - promise-retry: "npm:^2.0.1" - semver: "npm:^7.3.5" - which: "npm:^4.0.0" - checksum: 10c0/892441c968404950809c7b515a93b78167ea1db2252f259f390feae22a2c5477f3e1629e105e19a084c05afc56e585bf3f13c2f13b54a06bfd6786f0c8429532 - languageName: node - linkType: hard - -"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/installed-package-contents@npm:2.1.0" - dependencies: - npm-bundled: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - bin: - installed-package-contents: bin/index.js - checksum: 10c0/f5ecba0d45fc762f3e0d5def29fbfabd5d55e8147b01ae0a101769245c2e0038bc82a167836513a98aaed0a15c3d81fcdb232056bb8a962972a432533e518fce - languageName: node - linkType: hard - -"@npmcli/map-workspaces@npm:^3.0.2": - version: 3.0.6 - resolution: "@npmcli/map-workspaces@npm:3.0.6" - dependencies: - "@npmcli/name-from-folder": "npm:^2.0.0" - glob: "npm:^10.2.2" - minimatch: "npm:^9.0.0" - read-package-json-fast: "npm:^3.0.0" - checksum: 10c0/6bfcf8ca05ab9ddc2bd19c0fd91e9982f03cc6e67b0c03f04ba4d2f29b7d83f96e759c0f8f1f4b6dbe3182272483643a0d1269788352edd0c883d6fbfa2f3f14 - languageName: node - linkType: hard - -"@npmcli/metavuln-calculator@npm:^7.1.1": - version: 7.1.1 - resolution: "@npmcli/metavuln-calculator@npm:7.1.1" - dependencies: - cacache: "npm:^18.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - pacote: "npm:^18.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - checksum: 10c0/27402cab124bb1fca56af7549f730c38c0ab40de60cbef6264a4193c26c2d28cefb2adac29ed27f368031795704f9f8fe0c547c4c8cb0c0fa94d72330d56ac80 - languageName: node - linkType: hard - -"@npmcli/name-from-folder@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/name-from-folder@npm:2.0.0" - checksum: 10c0/1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 - languageName: node - linkType: hard - -"@npmcli/node-gyp@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/node-gyp@npm:3.0.0" - checksum: 10c0/5d0ac17dacf2dd6e45312af2c1ae2749bb0730fcc82da101c37d3a4fd963a5e1c5d39781e5e1e5e5828df4ab1ad4e3fdbab1d69b7cd0abebad9983efb87df985 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:5.2.0": - version: 5.2.0 - resolution: "@npmcli/package-json@npm:5.2.0" - dependencies: - "@npmcli/git": "npm:^5.0.0" - glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.5.3" - checksum: 10c0/bdce8c7eed0dee1d272bf8ba500c4bce6d8ed2b4dd2ce43075d3ba02ffd3bb70c46dbcf8b3a35e19d9492d039b720dc3a4b30d1a2ddc30b7918e1d5232faa1f7 - languageName: node - linkType: hard - -"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": - version: 5.2.1 - resolution: "@npmcli/package-json@npm:5.2.1" - dependencies: - "@npmcli/git": "npm:^5.0.0" - glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.5.3" - checksum: 10c0/b852e31e3121a0afe5fa20bbf4faa701a59dbc9d9dd7141f7fd57b8e919ce22c1285dcdfea490851fe410fa0f7bc9c397cafba0d268aaa53420a12d7c561dde1 - languageName: node - linkType: hard - -"@npmcli/promise-spawn@npm:^7.0.0": - version: 7.0.2 - resolution: "@npmcli/promise-spawn@npm:7.0.2" - dependencies: - which: "npm:^4.0.0" - checksum: 10c0/8f2af5bc2c1b1ccfb9bcd91da8873ab4723616d8bd5af877c0daa40b1e2cbfa4afb79e052611284179cae918c945a1b99ae1c565d78a355bec1a461011e89f71 - languageName: node - linkType: hard - -"@npmcli/query@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/query@npm:3.1.0" - dependencies: - postcss-selector-parser: "npm:^6.0.10" - checksum: 10c0/9a099677dd188a2d9eb7a49e32c69d315b09faea59e851b7c2013b5bda915a38434efa7295565c40a1098916c06ebfa1840f68d831180e36842f48c24f4c5186 - languageName: node - linkType: hard - -"@npmcli/redact@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/redact@npm:2.0.1" - checksum: 10c0/5f346f7ef224b44c90009939f93c446a865a3d9e5a7ebe0246cdb0ebd03219de3962ee6c6e9197298d8c6127ea33535e8c44814276e4941394dc1cdf1f30f6bc - languageName: node - linkType: hard - -"@npmcli/run-script@npm:8.1.0, @npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": - version: 8.1.0 - resolution: "@npmcli/run-script@npm:8.1.0" - dependencies: - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.0.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - node-gyp: "npm:^10.0.0" - proc-log: "npm:^4.0.0" - which: "npm:^4.0.0" - checksum: 10c0/f9f40ecff0406a9ce1b77c9f714fc7c71b561289361efc6e2e0e48ca2d630aa98d277cbbf269750f9467a40eaaac79e78766d67c458046aa9507c8c354650fee - languageName: node - linkType: hard - -"@nrwl/tao@npm:v17.2.5": - version: 17.2.5 - resolution: "@nrwl/tao@npm:17.2.5" - dependencies: - nx: "npm:v17.2.5" - tslib: "npm:^2.3.0" - bin: - tao: index.js - checksum: 10c0/d98361141704d83487f2401116cafa7348acb30a1637336ddc471fdc42313503280767777c9752e91df0e56d3b7491251894172817e0e5ee514fe44d3ab2bf09 - languageName: node - linkType: hard - -"@nx/devkit@npm:>=17.1.2 < 21": - version: 20.3.2 - resolution: "@nx/devkit@npm:20.3.2" - dependencies: - ejs: "npm:^3.1.7" - enquirer: "npm:~2.3.6" - ignore: "npm:^5.0.4" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.3" - tmp: "npm:~0.2.1" - tslib: "npm:^2.3.0" - yargs-parser: "npm:21.1.1" - peerDependencies: - nx: ">= 19 <= 21" - checksum: 10c0/0c59aaea2c6b45712c28186b95792ae2530f928025aa7cea7d0175f9e0532ad3feeaa85b84d23e35378182c689819baa47daeb76ee4d26d823c926421830afd4 - languageName: node - linkType: hard - -"@nx/nx-darwin-arm64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-darwin-arm64@npm:20.3.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-darwin-arm64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-darwin-arm64@npm:17.2.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-darwin-x64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-darwin-x64@npm:20.3.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-darwin-x64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-darwin-x64@npm:17.2.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-freebsd-x64@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-freebsd-x64@npm:20.3.2" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-freebsd-x64@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-freebsd-x64@npm:17.2.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-linux-arm-gnueabihf@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.3.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@nx/nx-linux-arm-gnueabihf@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:17.2.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-gnu@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm64-gnu@npm:20.3.2" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-gnu@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm64-gnu@npm:17.2.5" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-musl@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-arm64-musl@npm:20.3.2" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-arm64-musl@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-arm64-musl@npm:17.2.5" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-x64-gnu@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-x64-gnu@npm:20.3.2" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-x64-gnu@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-x64-gnu@npm:17.2.5" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nx/nx-linux-x64-musl@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-linux-x64-musl@npm:20.3.2" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-linux-x64-musl@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-linux-x64-musl@npm:17.2.5" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nx/nx-win32-arm64-msvc@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-win32-arm64-msvc@npm:20.3.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-win32-arm64-msvc@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-win32-arm64-msvc@npm:17.2.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nx/nx-win32-x64-msvc@npm:20.3.2": - version: 20.3.2 - resolution: "@nx/nx-win32-x64-msvc@npm:20.3.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@nx/nx-win32-x64-msvc@npm:v17.2.5": - version: 17.2.5 - resolution: "@nx/nx-win32-x64-msvc@npm:17.2.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@octokit/auth-token@npm:^3.0.0": - version: 3.0.4 - resolution: "@octokit/auth-token@npm:3.0.4" - checksum: 10c0/abdf5e2da36344de9727c70ba782d58004f5ae1da0f65fa9bc9216af596ef23c0e4675f386df2f6886806612558091d603564051b693b0ad1986aa6160b7a231 - languageName: node - linkType: hard - -"@octokit/core@npm:^4.2.1": - version: 4.2.4 - resolution: "@octokit/core@npm:4.2.4" - dependencies: - "@octokit/auth-token": "npm:^3.0.0" - "@octokit/graphql": "npm:^5.0.0" - "@octokit/request": "npm:^6.0.0" - "@octokit/request-error": "npm:^3.0.0" - "@octokit/types": "npm:^9.0.0" - before-after-hook: "npm:^2.2.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/e54081a56884e628d1804837fddcd48c10d516117bb891551c8dc9d8e3dad449aeb9b4677ca71e8f0e76268c2b7656c953099506679aaa4666765228474a3ce6 - languageName: node - linkType: hard - -"@octokit/endpoint@npm:^7.0.0": - version: 7.0.6 - resolution: "@octokit/endpoint@npm:7.0.6" - dependencies: - "@octokit/types": "npm:^9.0.0" - is-plain-object: "npm:^5.0.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/fd147a55010b54af7567bf90791359f7096a1c9916a2b7c72f8afd0c53141338b3d78da3a4ab3e3bdfeb26218a1b73735432d8987ccc04996b1019219299f115 - languageName: node - linkType: hard - -"@octokit/graphql@npm:^5.0.0": - version: 5.0.6 - resolution: "@octokit/graphql@npm:5.0.6" - dependencies: - "@octokit/request": "npm:^6.0.0" - "@octokit/types": "npm:^9.0.0" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/de1d839d97fe6d96179925f6714bf96e7af6f77929892596bb4211adab14add3291fc5872b269a3d0e91a4dcf248d16096c82606c4a43538cf241b815c2e2a36 - languageName: node - linkType: hard - -"@octokit/openapi-types@npm:^18.0.0": - version: 18.1.1 - resolution: "@octokit/openapi-types@npm:18.1.1" - checksum: 10c0/856d3bb9f8c666e837dd5e8b8c216ee4342b9ed63ff8da922ca4ce5883ed1dfbec73390eb13d69fbcb4703a4c8b8b6a586df3b0e675ff93bf3d46b5b4fe0968e - languageName: node - linkType: hard - -"@octokit/plugin-enterprise-rest@npm:6.0.1": - version: 6.0.1 - resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" - checksum: 10c0/26bd0a30582954efcd29b41e16698db79e9d20e3f88c4069b43b183223cee69862621f18b6a7a1c9257b1cd07c24477e403b75c74688660ecf31d467b9d8fd9e - languageName: node - linkType: hard - -"@octokit/plugin-paginate-rest@npm:^6.1.2": - version: 6.1.2 - resolution: "@octokit/plugin-paginate-rest@npm:6.1.2" - dependencies: - "@octokit/tsconfig": "npm:^1.0.2" - "@octokit/types": "npm:^9.2.3" - peerDependencies: - "@octokit/core": ">=4" - checksum: 10c0/def241c4f00b864822ab6414eaadd8679a6d332004c7e77467cfc1e6d5bdcc453c76bd185710ee942e4df201f9dd2170d960f46af5b14ef6f261a0068f656364 - languageName: node - linkType: hard - -"@octokit/plugin-request-log@npm:^1.0.4": - version: 1.0.4 - resolution: "@octokit/plugin-request-log@npm:1.0.4" - peerDependencies: - "@octokit/core": ">=3" - checksum: 10c0/7238585445555db553912e0cdef82801c89c6e5cbc62c23ae086761c23cc4a403d6c3fddd20348bbd42fb7508e2c2fce370eb18fdbe3fbae2c0d2c8be974f4cc - languageName: node - linkType: hard - -"@octokit/plugin-rest-endpoint-methods@npm:^7.1.2": - version: 7.2.3 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" - dependencies: - "@octokit/types": "npm:^10.0.0" - peerDependencies: - "@octokit/core": ">=3" - checksum: 10c0/8bffbc5852695dd08d65cc64b6ab7d2871ed9df1e791608f48b488a3908b5b655e3686b5dd72fc37c824e82bdd4dfc9d24e2e50205bbc324667def1d705bc9da - languageName: node - linkType: hard - -"@octokit/request-error@npm:^3.0.0": - version: 3.0.3 - resolution: "@octokit/request-error@npm:3.0.3" - dependencies: - "@octokit/types": "npm:^9.0.0" - deprecation: "npm:^2.0.0" - once: "npm:^1.4.0" - checksum: 10c0/1e252ac193c8af23b709909911aa327ed5372cbafcba09e4aff41e0f640a7c152579ab0a60311a92e37b4e7936392d59ee4c2feae5cdc387ee8587a33d8afa60 - languageName: node - linkType: hard - -"@octokit/request@npm:^6.0.0": - version: 6.2.8 - resolution: "@octokit/request@npm:6.2.8" - dependencies: - "@octokit/endpoint": "npm:^7.0.0" - "@octokit/request-error": "npm:^3.0.0" - "@octokit/types": "npm:^9.0.0" - is-plain-object: "npm:^5.0.0" - node-fetch: "npm:^2.6.7" - universal-user-agent: "npm:^6.0.0" - checksum: 10c0/6b6079ed45bac44c4579b40990bfd1905b03d4bc4e5255f3d5a10cf5182171578ebe19abeab32ebb11a806f1131947f2a06b7a077bd7e77ade7b15fe2882174b - languageName: node - linkType: hard - -"@octokit/rest@npm:19.0.11": - version: 19.0.11 - resolution: "@octokit/rest@npm:19.0.11" - dependencies: - "@octokit/core": "npm:^4.2.1" - "@octokit/plugin-paginate-rest": "npm:^6.1.2" - "@octokit/plugin-request-log": "npm:^1.0.4" - "@octokit/plugin-rest-endpoint-methods": "npm:^7.1.2" - checksum: 10c0/a14ae31fc5e70e76d2492aae63d3453cbb71f44e7492400f885ab5ac6b2612bcb244bafa29e45a59461f3e5d99807ff9c88d48af8317ffa4f8ad3f8f11fdd035 - languageName: node - linkType: hard - -"@octokit/tsconfig@npm:^1.0.2": - version: 1.0.2 - resolution: "@octokit/tsconfig@npm:1.0.2" - checksum: 10c0/84db70b495beeed69259dd4def14cdfb600edeb65ef32811558c99413ee2b414ed10bff9c4dcc7a43451d0fd36b4925ada9ef7d4272b5eae38cb005cc2f459ac - languageName: node - linkType: hard - -"@octokit/types@npm:^10.0.0": - version: 10.0.0 - resolution: "@octokit/types@npm:10.0.0" - dependencies: - "@octokit/openapi-types": "npm:^18.0.0" - checksum: 10c0/9bbbec1e452c271752e5ba735c161a558933f2e35f3004bb0b6e8d6ba574af48b68bab2f293112a8e68c595435a2fbcc76f3e7333f45ba1888bb5193777a943e - languageName: node - linkType: hard - -"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": - version: 9.3.2 - resolution: "@octokit/types@npm:9.3.2" - dependencies: - "@octokit/openapi-types": "npm:^18.0.0" - checksum: 10c0/2925479aa378a4491762b4fcf381bdc7daca39b4e0b2dd7062bce5d74a32ed7d79d20d3c65ceaca6d105cf4b1f7417fea634219bf90f79a57d03e2dac629ec45 - languageName: node - linkType: hard - -"@panva/asn1.js@npm:^1.0.0": - version: 1.0.0 - resolution: "@panva/asn1.js@npm:1.0.0" - checksum: 10c0/5d6e7ec460b65b017043e2702e25f323936baad2aa248dbd9bf54c9508e351d236bffac96fa033c6e36cb0482a9dd73c3605948a36a59bd6bec49353ba8d7b62 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.1.0": - version: 0.1.1 - resolution: "@pkgr/core@npm:0.1.1" - checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.2.9": - version: 0.2.9 - resolution: "@pkgr/core@npm:0.2.9" - checksum: 10c0/ac8e4e8138b1a7a4ac6282873aef7389c352f1f8b577b4850778f5182e4a39a5241facbe48361fec817f56d02b51691b383010843fb08b34a8e8ea3614688fd5 - languageName: node - linkType: hard - -"@rdfjs/data-model@npm:^1.3.4": - version: 1.3.4 - resolution: "@rdfjs/data-model@npm:1.3.4" - dependencies: - "@rdfjs/types": "npm:>=1.0.1" - bin: - rdfjs-data-model-test: bin/test.js - checksum: 10c0/2f9f04b0f74cbcfd90b521eb51d7ab708164df16cc582ea4322dc364f66ad39ca9f1fc52d0db0b1c93e3043e86a5568ab2ecf66d7633051714e853e02e793ce8 - languageName: node - linkType: hard - -"@rdfjs/types@npm:*, @rdfjs/types@npm:>=1.0.0, @rdfjs/types@npm:>=1.0.1": - version: 2.0.1 - resolution: "@rdfjs/types@npm:2.0.1" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/81012b02e28737e15dfc27068664bbab7b989cc2ff82e0a6a341df492d9d97210b5e462d85bfb7882aa0ef5bf84e2c5e95647fb779b67b7b1910b1837d79c500 - languageName: node - linkType: hard - -"@rdfjs/types@npm:^1.0.0, @rdfjs/types@npm:^1.1.0": - version: 1.1.2 - resolution: "@rdfjs/types@npm:1.1.2" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/128242157d44453d1f5eac9d93cecfddb44acc4e6675751b2cccbc6c33b44492573785eb748e1841fd4a29921ba8e0412ba038824103d97c38a19f72033d9a5c - languageName: node - linkType: hard - -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b - languageName: node - linkType: hard - -"@seald-io/binary-search-tree@npm:^1.0.2": - version: 1.0.3 - resolution: "@seald-io/binary-search-tree@npm:1.0.3" - checksum: 10c0/cf86bfca881c84cf22fa11a96dffd358f58424bd779c9afb7e36934be2e8ad923da54252972a12a2d42a9473557829a573950b0f78213b901ceb9dcc862397e1 - languageName: node - linkType: hard - -"@seald-io/nedb@npm:^3.0.0": - version: 3.1.0 - resolution: "@seald-io/nedb@npm:3.1.0" - dependencies: - "@seald-io/binary-search-tree": "npm:^1.0.2" - localforage: "npm:^1.9.0" - util: "npm:^0.12.4" - checksum: 10c0/2bced9094700b188ce9cbf29502e60cb37b4165b53a9a636d08d985cac976da5d056fd0e990d8b90c4a2b0b58c3c15243a2cbd49aef80ac87f5e31bacb0d1bb0 - languageName: node - linkType: hard - -"@semapps/activitypub@npm:1.1.4, @semapps/activitypub@workspace:packages/activitypub": - version: 0.0.0-use.local - resolution: "@semapps/activitypub@workspace:packages/activitypub" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - handlebars: "npm:^4.7.7" - moleculer-bull: "npm:^0.2.5" - moleculer-db: "npm:^0.8.16" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/auth@npm:1.1.4, @semapps/auth@workspace:packages/auth": - version: 0.0.0-use.local - resolution: "@semapps/auth@workspace:packages/auth" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - bcrypt: "npm:^5.0.1" - express-session: "npm:^1.17.0" - jsonwebtoken: "npm:^9.0.2" - moleculer-db: "npm:^0.8.16" - moleculer-mail: "npm:^1.2.5" - moleculer-web: "npm:^0.10.0-beta1" - openid-client: "npm:^4.7.4" - passport: "npm:^0.4.1" - passport-cas2: "npm:0.0.12" - passport-local: "npm:^1.0.0" - pug: "npm:^3.0.2" - speakingurl: "npm:^14.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/backup@workspace:packages/backup": - version: 0.0.0-use.local - resolution: "@semapps/backup@workspace:packages/backup" - dependencies: - cron: "npm:^1.8.2" - fs-extra: "npm:^10.0.0" - rsync: "npm:^0.6.1" - ssh2-sftp-client: "npm:^7.2.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/core@npm:1.1.4, @semapps/core@workspace:packages/core": - version: 0.0.0-use.local - resolution: "@semapps/core@workspace:packages/core" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/jsonld": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/sparql-endpoint": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/void": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - "@semapps/webfinger": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - moleculer-web: "npm:^0.10.0-beta1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/crypto@npm:1.1.4, @semapps/crypto@workspace:packages/crypto": - version: 0.0.0-use.local - resolution: "@semapps/crypto@workspace:packages/crypto" - dependencies: - "@digitalbazaar/data-integrity": "npm:^2.5.0" - "@digitalbazaar/ed25519-multikey": "npm:^1.3.0" - "@digitalbazaar/ed25519-signature-2020": "npm:^5.4.0" - "@digitalbazaar/ed25519-verification-key-2020": "npm:^4.2.0" - "@digitalbazaar/eddsa-rdfc-2022-cryptosuite": "npm:^1.2.0" - "@digitalbazaar/vc": "npm:^7.1.0" - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - crypto-ld: "npm:^7.0.0" - http-signature: "npm:^1.3.4" - http-signature-header: "npm:^1.3.1" - jose: "npm:^5.2.0" - jsonld-signatures: "npm:^11.3.2" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - vc-js: "npm:^0.6.4" - peerDependencies: - moleculer: ^0.14.35 - moleculer-web: ^0.10.0-beta1 - languageName: unknown - linkType: soft - -"@semapps/importer@workspace:packages/importer": - version: 0.0.0-use.local - resolution: "@semapps/importer@workspace:packages/importer" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - cron-parser: "npm:^4.2.1" - google-libphonenumber: "npm:^3.2.26" - node-fetch: "npm:^2.6.6" - sanitize-html: "npm:^2.6.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/inference@npm:1.1.4, @semapps/inference@workspace:packages/inference": - version: 0.0.0-use.local - resolution: "@semapps/inference@workspace:packages/inference" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - n3: "npm:^1.6.3" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/jsonld@npm:1.1.4, @semapps/jsonld@workspace:packages/jsonld": - version: 0.0.0-use.local - resolution: "@semapps/jsonld@workspace:packages/jsonld" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@types/jsonld": "npm:1.5.15" - jsonld: "npm:^3.3.2" - jsonld-context-parser: "npm:^2.4.0" - jsonld-streaming-parser: "npm:^2.4.2" - jsonld-streaming-serializer: "npm:^1.2.0" - lru-cache: "npm:^6.0.0" - n3: "npm:^1.26.0" - rdf-parse: "npm:^1.7.0" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/ldp@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/ldp@npm:1.0.10" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.0.10" - "@semapps/mime-types": "npm:1.0.10" - "@semapps/ontologies": "npm:1.0.10" - "@semapps/triplestore": "npm:1.0.10" - dashify: "npm:^2.0.0" - http-link-header: "npm:^1.1.1" - mime-types: "npm:^2.1.35" - moleculer: "npm:^0.14.17" - moleculer-db: "npm:^0.8.16" - moleculer-schedule: "npm:^0.2.3" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - path-to-regexp: "npm:^6.2.0" - rdf-parse: "npm:^1.7.0" - sharp: "npm:^0.31.2" - sparqljs: "npm:^3.5.2" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/dc8e8a673b4c04e46976f1440bbe7f6e024974fda979f1bdaf8731a1803260381bceba2f8e4fd9ee7b6191cc92738ebb4441a75768edeee3d75d08bba16c21fb - languageName: node - linkType: hard - -"@semapps/ldp@npm:1.1.4, @semapps/ldp@workspace:packages/ldp": - version: 0.0.0-use.local - resolution: "@semapps/ldp@workspace:packages/ldp" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - bytes: "npm:^3.1.2" - cron: "npm:^4.1.4" - dashify: "npm:^2.0.0" - http-link-header: "npm:^1.1.1" - mime-types: "npm:^2.1.35" - moleculer-db: "npm:^0.8.16" - moleculer-schedule: "npm:^0.2.3" - moleculer-web: "npm:^0.10.0-beta1" - node-fetch: "npm:^2.6.6" - path-to-regexp: "npm:^6.2.0" - rdf-parse: "npm:^1.7.0" - sharp: "npm:^0.31.2" - sparqljs: "npm:^3.5.2" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/middlewares@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/middlewares@npm:1.0.10" - dependencies: - "@semapps/mime-types": "npm:1.0.10" - busboy: "npm:^0.3.1" - memory-streams: "npm:^0.1.3" - moleculer: "npm:^0.14.18" - checksum: 10c0/f0d72246d0342b79babe76e7eddd041787c5dbc7d5ddb12dcbc3c7e902d84b4b28989f983e79f8dba668cfe673aeea6be4c7f9cf7c527b47ed908098eb7b23bf - languageName: node - linkType: hard - -"@semapps/middlewares@npm:1.1.4, @semapps/middlewares@workspace:packages/middlewares": - version: 0.0.0-use.local - resolution: "@semapps/middlewares@workspace:packages/middlewares" - dependencies: - "@semapps/mime-types": "npm:1.1.4" - busboy: "npm:^0.3.1" - memory-streams: "npm:^0.1.3" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/migration@workspace:packages/migration": - version: 0.0.0-use.local - resolution: "@semapps/migration@workspace:packages/migration" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/mime-types@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/mime-types@npm:1.0.10" - dependencies: - moleculer: "npm:^0.14.18" - negotiator: "npm:^0.6.2" - checksum: 10c0/aefb957dc606d2bc31994f9a0370d43ddeb73d3135f3aadcd2ed629b84aa361b1706cb01ed4c5f7c35aa82831d2834df2632adf811ffdb5693ab44eb55891030 - languageName: node - linkType: hard - -"@semapps/mime-types@npm:1.1.4, @semapps/mime-types@workspace:packages/mime-types": - version: 0.0.0-use.local - resolution: "@semapps/mime-types@workspace:packages/mime-types" - dependencies: - negotiator: "npm:^0.6.2" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/nodeinfo@workspace:packages/nodeinfo": - version: 0.0.0-use.local - resolution: "@semapps/nodeinfo@workspace:packages/nodeinfo" - dependencies: - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/notifications@workspace:packages/notifications": - version: 0.0.0-use.local - resolution: "@semapps/notifications@workspace:packages/notifications" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - cron-parser: "npm:^4.3.0" - expo-server-sdk: "npm:^3.4.0" - moleculer-db: "npm:^0.8.15" - moleculer-mail: "npm:^1.2.5" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/ontologies@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/ontologies@npm:1.0.10" - dependencies: - "@semapps/triplestore": "npm:1.0.10" - moleculer-db: "npm:^0.8.16" - node-fetch: "npm:^2.6.6" - checksum: 10c0/aa6eb56b330f46fdbcd2591925a79723ecfd718e4ae10a22f5e590017d416da9c85b51d83b40e37cbace55a1257c3204965271709d83c871a379bbd98d140c7b - languageName: node - linkType: hard - -"@semapps/ontologies@npm:1.1.4, @semapps/ontologies@workspace:packages/ontologies": - version: 0.0.0-use.local - resolution: "@semapps/ontologies@workspace:packages/ontologies" - dependencies: - "@semapps/triplestore": "npm:1.1.4" - moleculer-db: "npm:^0.8.16" - node-fetch: "npm:^2.6.6" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/solid@workspace:packages/solid": - version: 0.0.0-use.local - resolution: "@semapps/solid@workspace:packages/solid" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - http-link-header: "npm:^1.1.1" - moleculer-bull: "npm:^0.2.5" - moleculer-db: "npm:^0.8.16" - moleculer-web: "npm:^0.10.0-beta1" - moment: "npm:2.30.1" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/sparql-endpoint@npm:1.1.4, @semapps/sparql-endpoint@workspace:packages/sparql-endpoint": - version: 0.0.0-use.local - resolution: "@semapps/sparql-endpoint@workspace:packages/sparql-endpoint" - dependencies: - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - moleculer-web: "npm:^0.10.0-beta1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/sync@npm:1.1.4, @semapps/sync@workspace:packages/sync": - version: 0.0.0-use.local - resolution: "@semapps/sync@workspace:packages/sync" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - node-fetch: "npm:^2.6.6" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/triplestore@npm:1.0.10": - version: 1.0.10 - resolution: "@semapps/triplestore@npm:1.0.10" - dependencies: - "@semapps/middlewares": "npm:1.0.10" - "@semapps/mime-types": "npm:1.0.10" - jsonld: "npm:^3.3.2" - moleculer: "npm:^0.14.29" - negotiator: "npm:^0.6.2" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/c205ea8c85d5a6d9914c3c9f5cafe0f9bc4c3cc3e424b63db2173942fad6c7a5e5082126600ea9a2e7a246d21f5d4b905f82302ec2f042734ea400cd5f00c9f1 - languageName: node - linkType: hard - -"@semapps/triplestore@npm:1.1.4": - version: 1.1.4 - resolution: "@semapps/triplestore@npm:1.1.4" - dependencies: - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - jsonld: "npm:^3.3.2" - moleculer: "npm:^0.14.29" - negotiator: "npm:^0.6.2" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - checksum: 10c0/5e46b023cbd9c7cb2f977fa53da2581770b84cbb498e2de665a8d1eec8a49446ac323d3ee7a66d38ebb68058b11b18cd0e9da5d3b0b88d9037e104bdf20d5014 - languageName: node - linkType: hard - -"@semapps/triplestore@workspace:packages/triplestore": - version: 0.0.0-use.local - resolution: "@semapps/triplestore@workspace:packages/triplestore" - dependencies: - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - jsonld: "npm:^3.3.2" - negotiator: "npm:^0.6.2" - nextgraph: "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node" - node-fetch: "npm:^2.6.6" - sparqljs: "npm:^3.5.2" - sparqljson-parse: "npm:^1.5.1" - string-template: "npm:^1.0.0" - url-join: "npm:^4.0.1" - uuid: "npm:^9.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/void@npm:1.1.4, @semapps/void@workspace:packages/void": - version: 0.0.0-use.local - resolution: "@semapps/void@workspace:packages/void" - dependencies: - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - jsonld-streaming-serializer: "npm:^1.2.0" - n3: "npm:^1.8.0" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webacl@npm:1.1.4, @semapps/webacl@workspace:packages/webacl": - version: 0.0.0-use.local - resolution: "@semapps/webacl@workspace:packages/webacl" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@types/url-join": "npm:^4.0.1" - jsonld-streaming-serializer: "npm:^1.2.0" - n3: "npm:^1.8.0" - rdf-parse: "npm:^1.7.0" - speakingurl: "npm:^14.0.1" - streamify-string: "npm:^1.0.1" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webfinger@npm:1.1.4, @semapps/webfinger@workspace:packages/webfinger": - version: 0.0.0-use.local - resolution: "@semapps/webfinger@workspace:packages/webfinger" - dependencies: - "@semapps/mime-types": "npm:1.1.4" - node-fetch: "npm:^2.6.6" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webhooks@workspace:packages/webhooks": - version: 0.0.0-use.local - resolution: "@semapps/webhooks@workspace:packages/webhooks" - dependencies: - "@semapps/ldp": "npm:1.0.10" - "@semapps/triplestore": "npm:1.0.10" - moleculer-db: "npm:^0.8.15" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@semapps/webid@npm:1.1.4, @semapps/webid@workspace:packages/webid": - version: 0.0.0-use.local - resolution: "@semapps/webid@workspace:packages/webid" - dependencies: - "@semapps/activitypub": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - url-join: "npm:^4.0.1" - peerDependencies: - moleculer: ^0.14.35 - languageName: unknown - linkType: soft - -"@sigstore/bundle@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/bundle@npm:2.3.2" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10c0/872a95928236bd9950a2ecc66af1c60a82f6b482a62a20d0f817392d568a60739a2432cad70449ac01e44e9eaf85822d6d9ebc6ade6cb3e79a7d62226622eb5d - languageName: node - linkType: hard - -"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": - version: 1.1.0 - resolution: "@sigstore/core@npm:1.1.0" - checksum: 10c0/3b3420c1bd17de0371e1ac7c8f07a2cbcd24d6b49ace5bbf2b63f559ee08c4a80622a4d1c0ae42f2c9872166e9cb111f33f78bff763d47e5ef1efc62b8e457ea - languageName: node - linkType: hard - -"@sigstore/protobuf-specs@npm:^0.3.2": - version: 0.3.3 - resolution: "@sigstore/protobuf-specs@npm:0.3.3" - checksum: 10c0/e0a68795fa19e437fca2c3993e5a57e989642d65434beda54b29017c1629176cc8abeb81bb1e0923259cdfb19fe1fee6f1b8680a8f8240dc14c7a7de2bbae7af - languageName: node - linkType: hard - -"@sigstore/sign@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/sign@npm:2.3.2" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - make-fetch-happen: "npm:^13.0.1" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - checksum: 10c0/a1e7908f3e4898f04db4d713fa10ddb3ae4f851592c9b554f1269073211e1417528b5088ecee60f27039fde5a5426ae573481d77cfd7e4395d2a0ddfcf5f365f - languageName: node - linkType: hard - -"@sigstore/tuf@npm:^2.3.4": - version: 2.3.4 - resolution: "@sigstore/tuf@npm:2.3.4" - dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - tuf-js: "npm:^2.2.1" - checksum: 10c0/97839882d787196517933df5505fae4634975807cc7adcd1783c7840c2a9729efb83ada47556ec326d544b9cb0d1851af990dc46eebb5fe7ea17bf7ce1fc0b8c - languageName: node - linkType: hard - -"@sigstore/verify@npm:^1.2.1": - version: 1.2.1 - resolution: "@sigstore/verify@npm:1.2.1" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.1.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10c0/af06580a8d5357c31259da1ac7323137054e0ac41e933278d95a4bc409a4463620125cb4c00b502f6bc32fdd68c2293019391b0d31ed921ee3852a9e84358628 - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.34.0": - version: 0.34.38 - resolution: "@sinclair/typebox@npm:0.34.38" - checksum: 10c0/c1b9a1547c64de01ff5c89351baf289d2d5f19cfef3ae30fe4748a103eb58d0842618318543cd3de964cb0370d5a859e24aba231ade9b43ee2ef4d0bb4db7084 - languageName: node - linkType: hard - -"@sindresorhus/is@npm:^4.0.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.1": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: "npm:4.0.8" - checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^13.0.0": - version: 13.0.5 - resolution: "@sinonjs/fake-timers@npm:13.0.5" - dependencies: - "@sinonjs/commons": "npm:^3.0.1" - checksum: 10c0/a707476efd523d2138ef6bba916c83c4a377a8372ef04fad87499458af9f01afc58f4f245c5fd062793d6d70587309330c6f96947b5bd5697961c18004dc3e26 - languageName: node - linkType: hard - -"@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.6 - resolution: "@szmarczak/http-timer@npm:4.0.6" - dependencies: - defer-to-connect: "npm:^2.0.0" - checksum: 10c0/73946918c025339db68b09abd91fa3001e87fc749c619d2e9c2003a663039d4c3cb89836c98a96598b3d47dec2481284ba85355392644911f5ecd2336536697f - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node10@npm:1.0.11" - checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb - languageName: node - linkType: hard - -"@tufjs/canonical-json@npm:2.0.0": - version: 2.0.0 - resolution: "@tufjs/canonical-json@npm:2.0.0" - checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 - languageName: node - linkType: hard - -"@tufjs/models@npm:2.0.1": - version: 2.0.1 - resolution: "@tufjs/models@npm:2.0.1" - dependencies: - "@tufjs/canonical-json": "npm:2.0.0" - minimatch: "npm:^9.0.4" - checksum: 10c0/ad9e82fd921954501fd90ed34ae062254637595577ad13fdc1e076405c0ea5ee7d8aebad09e63032972fd92b07f1786c15b24a195a171fc8ac470ca8e2ffbcc4 - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:^0.10.0": - version: 0.10.0 - resolution: "@tybys/wasm-util@npm:0.10.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/044feba55c1e2af703aa4946139969badb183ce1a659a75ed60bc195a90e73a3f3fc53bcd643497c9954597763ddb051fec62f80962b2ca6fc716ba897dc696e - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:^0.9.0": - version: 0.9.0 - resolution: "@tybys/wasm-util@npm:0.9.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.20.5": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" - dependencies: - "@babel/types": "npm:^7.0.0" - checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" - dependencies: - "@babel/parser": "npm:^7.1.0" - "@babel/types": "npm:^7.0.0" - checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*": - version: 7.20.6 - resolution: "@types/babel__traverse@npm:7.20.6" - dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 - languageName: node - linkType: hard - -"@types/cacheable-request@npm:^6.0.1": - version: 6.0.3 - resolution: "@types/cacheable-request@npm:6.0.3" - dependencies: - "@types/http-cache-semantics": "npm:*" - "@types/keyv": "npm:^3.1.4" - "@types/node": "npm:*" - "@types/responselike": "npm:^1.0.0" - checksum: 10c0/10816a88e4e5b144d43c1d15a81003f86d649776c7f410c9b5e6579d0ad9d4ca71c541962fb403077388b446e41af7ae38d313e46692144985f006ac5e11fa03 - languageName: node - linkType: hard - -"@types/dotenv-flow@npm:^3.3.3": - version: 3.3.3 - resolution: "@types/dotenv-flow@npm:3.3.3" - checksum: 10c0/a67ecdec769e0e5bf376219ee80a2ffab423d9120dd121b538860d666bf46af07ff336860a7db2b1d41fcdd2dd006fc0ec6fa98f82cd01e566c37b00038b91ec - languageName: node - linkType: hard - -"@types/http-cache-semantics@npm:*": - version: 4.0.4 - resolution: "@types/http-cache-semantics@npm:4.0.4" - checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 - languageName: node - linkType: hard - -"@types/http-link-header@npm:^1.0.1": - version: 1.0.7 - resolution: "@types/http-link-header@npm:1.0.7" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ffde4514a286ee62fab86bd5164958f5c9ad9d8012eaeb4f5536efa6157e6cf9f93121d5a39bf160c3712554d945300a223a9f8b1f3fb08cc70b73f539767338 - languageName: node - linkType: hard - -"@types/ioredis@npm:^4.27.0": - version: 4.28.10 - resolution: "@types/ioredis@npm:4.28.10" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ff680fef6750721c465ee9d6060d3229e49e5b217d68503c4972c4b869b8f84b91cbd9b7d5195a40fb0bff6ab9a4f5e24a2cc17a368ddb0bfe2dfd4eb5fc1872 - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "npm:*" - checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.4": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "npm:*" - checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee - languageName: node - linkType: hard - -"@types/jest@npm:^30.0.0": - version: 30.0.0 - resolution: "@types/jest@npm:30.0.0" - dependencies: - expect: "npm:^30.0.0" - pretty-format: "npm:^30.0.0" - checksum: 10c0/20c6ce574154bc16f8dd6a97afacca4b8c4921a819496a3970382031c509ebe87a1b37b152a1b8475089b82d8ca951a9e95beb4b9bf78fbf579b1536f0b65969 - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.9": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac - languageName: node - linkType: hard - -"@types/jsonld@npm:1.5.15": - version: 1.5.15 - resolution: "@types/jsonld@npm:1.5.15" - checksum: 10c0/d01fbf07c10f4fc53a5b85f28a5691cf7cea4f5f041e0266c5e8d9e4ca94cd410ef427129b2bd930065f675104cbf0a36a7792ba42d3c9b0ec7305c9f01d34c4 - languageName: node - linkType: hard - -"@types/keyv@npm:^3.1.4": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/ff8f54fc49621210291f815fe5b15d809fd7d032941b3180743440bd507ecdf08b9e844625fa346af568c84bf34114eb378dcdc3e921a08ba1e2a08d7e3c809c - languageName: node - linkType: hard - -"@types/luxon@npm:~3.6.0": - version: 3.6.2 - resolution: "@types/luxon@npm:3.6.2" - checksum: 10c0/7572ee52b3d3e9dd10464b90561a728b90f34b9a257751cc3ce23762693dd1d14fa98b7f103e2efe2c6f49033331f91de5681ffd65cca88618cefe555be326db - languageName: node - linkType: hard - -"@types/minimatch@npm:^3.0.3": - version: 3.0.5 - resolution: "@types/minimatch@npm:3.0.5" - checksum: 10c0/a1a19ba342d6f39b569510f621ae4bbe972dc9378d15e9a5e47904c440ee60744f5b09225bc73be1c6490e3a9c938eee69eb53debf55ce1f15761201aa965f97 - languageName: node - linkType: hard - -"@types/minimist@npm:^1.2.0": - version: 1.2.5 - resolution: "@types/minimist@npm:1.2.5" - checksum: 10c0/3f791258d8e99a1d7d0ca2bda1ca6ea5a94e5e7b8fc6cde84dd79b0552da6fb68ade750f0e17718f6587783c24254bbca0357648dd59dc3812c150305cabdc46 - languageName: node - linkType: hard - -"@types/n3@npm:^1.4.4": - version: 1.21.1 - resolution: "@types/n3@npm:1.21.1" - dependencies: - "@rdfjs/types": "npm:^1.1.0" - "@types/node": "npm:*" - checksum: 10c0/be0236650cc702207590e5ad37d9ae62a3c74ae74914afed2d929c5eaae7dc4a251f6f44c5f36be317f2e404f02e63ed360ebf041651d5dac3e63867193bf66e - languageName: node - linkType: hard - -"@types/node-fetch@npm:^2.6.13": - version: 2.6.13 - resolution: "@types/node-fetch@npm:2.6.13" - dependencies: - "@types/node": "npm:*" - form-data: "npm:^4.0.4" - checksum: 10c0/6313c89f62c50bd0513a6839cdff0a06727ac5495ccbb2eeda51bb2bbbc4f3c0a76c0393a491b7610af703d3d2deb6cf60e37e59c81ceeca803ffde745dbf309 - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 22.10.7 - resolution: "@types/node@npm:22.10.7" - dependencies: - undici-types: "npm:~6.20.0" - checksum: 10c0/c941b4689dfc4044b64a5f601306cbcb0c7210be853ba378a5dd44137898c45accedd796ee002ad9407024cac7ecaf5049304951cb1d80ce3d7cebbbae56f20e - languageName: node - linkType: hard - -"@types/node@npm:^13.1.0": - version: 13.13.52 - resolution: "@types/node@npm:13.13.52" - checksum: 10c0/9224aaea219fe7f8b903039bb146d4c38b391d0166a8226a1efa2d43a35b5b7dddfe021c32941bb454a1543da94921c112687934da88e2a019f4bd44f9d517b5 - languageName: node - linkType: hard - -"@types/node@npm:^18.0.0": - version: 18.19.71 - resolution: "@types/node@npm:18.19.71" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/9f9b4a1c4e2db2994ef36f165322b3bb807466e3f92751ed52a40af0212917bc6ecd12dc6775eb829176b71b26570bea9c6a0a2d9e3ae6b496721c71934244db - languageName: node - linkType: hard - -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.4 - resolution: "@types/normalize-package-data@npm:2.4.4" - checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 - languageName: node - linkType: hard - -"@types/parse-link-header@npm:^1.0.0": - version: 1.0.1 - resolution: "@types/parse-link-header@npm:1.0.1" - checksum: 10c0/88b38f5a51083e512a9b23ba13a37543867508927544dbfd08b20ba81cafdc678a320db83c360fbff79689af0147dcbd8ad27a429a0d0f4c28145f47c708a637 - languageName: node - linkType: hard - -"@types/readable-stream@npm:^2.3.11": - version: 2.3.15 - resolution: "@types/readable-stream@npm:2.3.15" - dependencies: - "@types/node": "npm:*" - safe-buffer: "npm:~5.1.1" - checksum: 10c0/789e0948a8fd2f2cbf880a0f8c95601ac2fd8782a5a8fe653f68fad7fc3a74f44e8559484e331c1ff5d5b00fa467bec97557bb683aa833a3b29a69506f7aee59 - languageName: node - linkType: hard - -"@types/responselike@npm:^1.0.0": - version: 1.0.3 - resolution: "@types/responselike@npm:1.0.3" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/a58ba341cb9e7d74f71810a88862da7b2a6fa42e2a1fc0ce40498f6ea1d44382f0640117057da779f74c47039f7166bf48fad02dc876f94e005c7afa50f5e129 - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.12": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa - languageName: node - linkType: hard - -"@types/sparqljs@npm:^3.1.2": - version: 3.1.12 - resolution: "@types/sparqljs@npm:3.1.12" - dependencies: - "@rdfjs/types": "npm:>=1.0.0" - checksum: 10c0/832bb888a99d852f194c6fc1a2160992a769b3c4291424b7e22d50b29377692168d2cbd180cc4ed5a30d0cf1effffcfc0fc9155ea6628851c231e3ed1d28b4e2 - languageName: node - linkType: hard - -"@types/stack-utils@npm:^2.0.3": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c - languageName: node - linkType: hard - -"@types/streamify-string@npm:^1.0.4": - version: 1.0.4 - resolution: "@types/streamify-string@npm:1.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/5686610fb3d7b242ff6dd01ca6b9925296b4425c3a94f605bd71eeb5c746991e15131b42a81637f937c3de4f5894f42bb65d18a2f61a6b4ded50d055a9b206e2 - languageName: node - linkType: hard - -"@types/url-join@npm:^4.0.1": - version: 4.0.3 - resolution: "@types/url-join@npm:4.0.3" - checksum: 10c0/7f0f86693070355ce731ec3861d47c03eaae09ab0ea1a72dde6b38a2a17089941acc59bac9ea2472376b6f96e189478da0a7ed29e2d282d1543382e92408d6ca - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.33": - version: 17.0.33 - resolution: "@types/yargs@npm:17.0.33" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^7.1.1": - version: 7.18.0 - resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/type-utils": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.3.1" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - "@typescript-eslint/parser": ^7.0.0 - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^7.5.0": - version: 7.18.0 - resolution: "@typescript-eslint/parser@npm:7.18.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/scope-manager@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/type-utils@npm:7.18.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/types@npm:7.18.0" - checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/utils@npm:7.18.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - peerDependencies: - eslint: ^8.56.0 - checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:^5.10.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.1 - resolution: "@ungap/structured-clone@npm:1.2.1" - checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.3.0": - version: 1.3.0 - resolution: "@ungap/structured-clone@npm:1.3.0" - checksum: 10c0/0fc3097c2540ada1fc340ee56d58d96b5b536a2a0dab6e3ec17d4bfc8c4c86db345f61a375a8185f9da96f01c69678f836a2b57eeaa9e4b8eeafd26428e57b0a - languageName: node - linkType: hard - -"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-android-arm64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-x64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" - dependencies: - "@napi-rs/wasm-runtime": "npm:^0.2.11" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": - version: 1.11.1 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@yarnpkg/lockfile@npm:^1.1.0": - version: 1.1.0 - resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda - languageName: node - linkType: hard - -"@yarnpkg/parsers@npm:3.0.0-rc.46": - version: 3.0.0-rc.46 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.46" - dependencies: - js-yaml: "npm:^3.10.0" - tslib: "npm:^2.4.0" - checksum: 10c0/c7f421c6885142f351459031c093fb2e79abcce6f4a89765a10e600bb7ab122949c54bcea2b23de9572a2b34ba29f822b17831c1c43ba50373ceb8cb5b336667 - languageName: node - linkType: hard - -"@yarnpkg/parsers@npm:3.0.2": - version: 3.0.2 - resolution: "@yarnpkg/parsers@npm:3.0.2" - dependencies: - js-yaml: "npm:^3.10.0" - tslib: "npm:^2.4.0" - checksum: 10c0/a0c340e13129643162423d7e666061c0b39b143bfad3fc5a74c7d92a30fd740f6665d41cd4e61832c20375889d793eea1d1d103cacb39ed68f7acd168add8c53 - languageName: node - linkType: hard - -"@zkochan/js-yaml@npm:0.0.6": - version: 0.0.6 - resolution: "@zkochan/js-yaml@npm:0.0.6" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/5ce27ae75fb1db9657d4065bf6b380b4c0f756feb1bdf42bfde40551a74bcc0ec918f748cbdbd5d95b7107d00bc2f731ee731b5cfe93acb6f7da5639b16aa1f8 - languageName: node - linkType: hard - -"@zkochan/js-yaml@npm:0.0.7": - version: 0.0.7 - resolution: "@zkochan/js-yaml@npm:0.0.7" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/c8b3525717912811f9422ed50e94c5751ed6f771eb1b7e5cde097f14835654931e2bdaecb1e5fc37b51cf8d822410a307f16dd1581d46149398c30215f3f9bac - languageName: node - linkType: hard - -"JSONStream@npm:^1.3.3, JSONStream@npm:^1.3.5": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: "npm:^1.2.0" - through: "npm:>=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 - languageName: node - linkType: hard - -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 - languageName: node - linkType: hard - -"abbrev@npm:^3.0.0": - version: 3.0.1 - resolution: "abbrev@npm:3.0.1" - checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf - languageName: node - linkType: hard - -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: "npm:^5.0.0" - checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": - version: 8.3.4 - resolution: "acorn-walk@npm:8.3.4" - dependencies: - acorn: "npm:^8.11.0" - checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 - languageName: node - linkType: hard - -"acorn@npm:^7.1.1": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 - languageName: node - linkType: hard - -"acorn@npm:^8.11.0, acorn@npm:^8.4.1": - version: 8.15.0 - resolution: "acorn@npm:8.15.0" - bin: - acorn: bin/acorn - checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec - languageName: node - linkType: hard - -"acorn@npm:^8.14.0, acorn@npm:^8.9.0": - version: 8.14.0 - resolution: "acorn@npm:8.14.0" - bin: - acorn: bin/acorn - checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 - languageName: node - linkType: hard - -"add-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "add-stream@npm:1.0.0" - checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc - languageName: node - linkType: hard - -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: "npm:4" - checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.3 - resolution: "agent-base@npm:7.1.3" - checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0, aggregate-error@npm:^3.1.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 - languageName: node - linkType: hard - -"ajv@npm:^6.12.3, ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.1.0 - resolution: "ansi-regex@npm:6.1.0" - checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c - languageName: node - linkType: hard - -"anymatch@npm:^3.1.3": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - -"aproba@npm:2.0.0, aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 - languageName: node - linkType: hard - -"are-docs-informative@npm:^0.0.2": - version: 0.0.2 - resolution: "are-docs-informative@npm:0.0.2" - checksum: 10c0/f0326981bd699c372d268b526b170a28f2e1aec2cf99d7de0686083528427ecdf6ae41fef5d9988e224a5616298af747ad8a76e7306b0a7c97cc085a99636d60 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: "npm:^1.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e - languageName: node - linkType: hard - -"args@npm:^5.0.3": - version: 5.0.3 - resolution: "args@npm:5.0.3" - dependencies: - camelcase: "npm:5.0.0" - chalk: "npm:2.4.2" - leven: "npm:2.1.0" - mri: "npm:1.1.4" - checksum: 10c0/213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "array-buffer-byte-length@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - is-array-buffer: "npm:^3.0.5" - checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d - languageName: node - linkType: hard - -"array-differ@npm:^3.0.0": - version: 3.0.0 - resolution: "array-differ@npm:3.0.0" - checksum: 10c0/c0d924cc2b7e3f5a0e6ae932e8941c5fddc0412bcecf8d5152641910e60f5e1c1e87da2b32083dec2f92f9a8f78e916ea68c22a0579794ba49886951ae783123 - languageName: node - linkType: hard - -"array-ify@npm:^1.0.0": - version: 1.0.0 - resolution: "array-ify@npm:1.0.0" - checksum: 10c0/75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c - languageName: node - linkType: hard - -"array-includes@npm:^3.1.8": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - is-string: "npm:^1.0.7" - checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"array.prototype.findlastindex@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.2": - version: 1.3.3 - resolution: "array.prototype.flat@npm:1.3.3" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": - version: 1.3.3 - resolution: "array.prototype.flatmap@npm:1.3.3" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 - languageName: node - linkType: hard - -"array.prototype.reduce@npm:^1.0.6": - version: 1.0.7 - resolution: "array.prototype.reduce@npm:1.0.7" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-array-method-boxes-properly: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - is-string: "npm:^1.0.7" - checksum: 10c0/97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2 - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.4": - version: 1.0.4 - resolution: "arraybuffer.prototype.slice@npm:1.0.4" - dependencies: - array-buffer-byte-length: "npm:^1.0.1" - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - is-array-buffer: "npm:^3.0.4" - checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 - languageName: node - linkType: hard - -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 10c0/c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab - languageName: node - linkType: hard - -"arrify@npm:^2.0.1": - version: 2.0.1 - resolution: "arrify@npm:2.0.1" - checksum: 10c0/3fb30b5e7c37abea1907a60b28a554d2f0fc088757ca9bf5b684786e583fdf14360721eb12575c1ce6f995282eab936712d3c4389122682eafab0e0b57f78dbb - languageName: node - linkType: hard - -"asap@npm:~2.0.3": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d - languageName: node - linkType: hard - -"asn1@npm:^0.2.6, asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" - dependencies: - safer-buffer: "npm:~2.1.0" - checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 - languageName: node - linkType: hard - -"assert-never@npm:^1.2.1": - version: 1.4.0 - resolution: "assert-never@npm:1.4.0" - checksum: 10c0/494db08b89fb43d6231c9b4c48da22824f1912d88992bf0268e43b3dad0f64bd56d380addbb997d2dea7d859421d5e2904e8bd01243794f2bb5bfbc8d32d1fc6 - languageName: node - linkType: hard - -"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": - version: 1.0.0 - resolution: "assert-plus@npm:1.0.0" - checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 - languageName: node - linkType: hard - -"async@npm:^3.1.0, async@npm:^3.2.3": - version: 3.2.6 - resolution: "async@npm:3.2.6" - checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 - languageName: node - linkType: hard - -"asynciterator@npm:^3.2.0": - version: 3.9.0 - resolution: "asynciterator@npm:3.9.0" - checksum: 10c0/62e4c76ca2f2bbc8f3eae6a685c9b5c8ed82afd969f24cfb9aff1347b50d5e92a7dae61d2a3c24e834f193b303082d855cf688720059d6236cc06650a4fe2c22 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" - dependencies: - possible-typed-array-names: "npm:^1.0.0" - checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 - languageName: node - linkType: hard - -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 - languageName: node - linkType: hard - -"aws4@npm:^1.8.0": - version: 1.13.2 - resolution: "aws4@npm:1.13.2" - checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 - languageName: node - linkType: hard - -"axios@npm:^1.5.1, axios@npm:^1.7.4": - version: 1.7.9 - resolution: "axios@npm:1.7.9" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.0" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/b7a41e24b59fee5f0f26c1fc844b45b17442832eb3a0fb42dd4f1430eb4abc571fe168e67913e8a1d91c993232bd1d1ab03e20e4d1fee8c6147649b576fc1b0b - languageName: node - linkType: hard - -"babel-jest@npm:30.0.5, babel-jest@npm:^30.0.5": - version: 30.0.5 - resolution: "babel-jest@npm:30.0.5" - dependencies: - "@jest/transform": "npm:30.0.5" - "@types/babel__core": "npm:^7.20.5" - babel-plugin-istanbul: "npm:^7.0.0" - babel-preset-jest: "npm:30.0.1" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - slash: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.11.0 - checksum: 10c0/48fcdbf97519216f8897c4d83c0d2a64dffd90e4876b386e4ea4530021aaedbd7253de65a71d554cb57fdeb7bd8509bed43a6c016eb150e49e1fbe1236248f0f - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^7.0.0": - version: 7.0.0 - resolution: "babel-plugin-istanbul@npm:7.0.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@istanbuljs/load-nyc-config": "npm:^1.0.0" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-instrument: "npm:^6.0.2" - test-exclude: "npm:^6.0.0" - checksum: 10c0/79c37bd59ea9bcb16218e874993621e24048776fac7ee72eabe78f0909200851bdb93b32f6eba5b463206f15a1ee7ad40a725af8447952321ae1fdf14e740fe9 - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:30.0.1": - version: 30.0.1 - resolution: "babel-plugin-jest-hoist@npm:30.0.1" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.27.3" - "@types/babel__core": "npm:^7.20.5" - checksum: 10c0/49087f45c8ac359d68c622f4bd471300376b0ca2b6bd6ecaa1bd254ea87eda8fa3ce6144848e3bbabad337d276474a47e2ac3f6272f82e1f2337924ff49a02bd - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.14": - version: 0.4.14 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" - dependencies: - "@babel/compat-data": "npm:^7.27.7" - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.13.0": - version: 0.13.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.6.5": - version: 0.6.5 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d - languageName: node - linkType: hard - -"babel-plugin-transform-import-meta@npm:^2.3.3": - version: 2.3.3 - resolution: "babel-plugin-transform-import-meta@npm:2.3.3" - dependencies: - "@babel/template": "npm:^7.25.9" - tslib: "npm:^2.8.1" - peerDependencies: - "@babel/core": ^7.10.0 - checksum: 10c0/184275ef4f1c14a79e46fa2084e5743fbcfbaa52a9372f713e0e97e45aab4ac5be214c7eb4893fb9ea0088d32913772651776c660bee38bd2c8d52ef92750c07 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-env@npm:1.0.3": - version: 1.0.3 - resolution: "babel-plugin-transform-vite-meta-env@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - checksum: 10c0/fd602e8e9b64b06c93106b295a75f41a89a527d825ac3984baafab428108d3b1a12b6280e0bf19a58bda25e65e839a67f71bf1d916424fc81201dc14de241b64 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-glob@npm:1.1.2": - version: 1.1.2 - resolution: "babel-plugin-transform-vite-meta-glob@npm:1.1.2" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - glob: "npm:^10.3.10" - checksum: 10c0/1c3262dcba1548a3f478c77d9175b9e09c79ce257f0a9d2993d5a3bf74d5857f14825079c5430bc627f6dfca7a91fedcbe042580deab71062ec75f73ad54d7b2 - languageName: node - linkType: hard - -"babel-plugin-transform-vite-meta-hot@npm:1.0.0": - version: 1.0.0 - resolution: "babel-plugin-transform-vite-meta-hot@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - checksum: 10c0/718176522cfbdb6f1dfcd40431c99f89bfafa74bd52c3a96c03e63e06b1797eb599e397e54c0eeebdb2fcdcfe60a63ae66b08775e2c1c52297708e3caedebac6 - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.1.0": - version: 1.2.0 - resolution: "babel-preset-current-node-syntax@npm:1.2.0" - dependencies: - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0 || ^8.0.0-0 - checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 - languageName: node - linkType: hard - -"babel-preset-jest@npm:30.0.1": - version: 30.0.1 - resolution: "babel-preset-jest@npm:30.0.1" - dependencies: - babel-plugin-jest-hoist: "npm:30.0.1" - babel-preset-current-node-syntax: "npm:^1.1.0" - peerDependencies: - "@babel/core": ^7.11.0 - checksum: 10c0/33da0094965929b1742b02e55272b544f189cd487d55bbba60e68d96d62d48f466264fe51f65950454829d4f2271541f2433e1c1c5e6a7ff5b9e91f1303471b7 - languageName: node - linkType: hard - -"babel-preset-vite@npm:^1.1.3": - version: 1.1.3 - resolution: "babel-preset-vite@npm:1.1.3" - dependencies: - "@babel/runtime": "npm:^7.13.9" - "@types/babel__core": "npm:^7.1.12" - babel-plugin-transform-vite-meta-env: "npm:1.0.3" - babel-plugin-transform-vite-meta-glob: "npm:1.1.2" - babel-plugin-transform-vite-meta-hot: "npm:1.0.0" - checksum: 10c0/380bc48988b5fe94b372eb72ba695410f644d9e4375e6dfc15f313e6d4b9bce2284ec0373e9f481f44a884e4a3820ab63b05dcd532cf78a1772e873431cfc8d6 - languageName: node - linkType: hard - -"babel-walk@npm:3.0.0-canary-5": - version: 3.0.0-canary-5 - resolution: "babel-walk@npm:3.0.0-canary-5" - dependencies: - "@babel/types": "npm:^7.9.6" - checksum: 10c0/17b689874d15c37714cedf6797dd9321dcb998d8e0dda9a8fe8c8bbbf128bbdeb8935cf56e8630d6b67eae76d2a0bc1e470751e082c3b0e30b80d58beafb5e64 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"base-x@npm:^3.0.2": - version: 3.0.10 - resolution: "base-x@npm:3.0.10" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/a13a34b71439ee5381667efa630b3bf640cf17f632c5ba01990483367592e72f247d7fb4f8c6d0e3ff8c0fb7224b3ac682ff5be09b87063a45b3968f0457e563 - languageName: node - linkType: hard - -"base58-universal@npm:^2.0.0": - version: 2.0.0 - resolution: "base58-universal@npm:2.0.0" - checksum: 10c0/f21fd50904e1f2d083832e39269058ffbd95592ad27fc2acc53ad3d9d7eacfa82c4e655181e0fd8a817619f4c925a42baca877276dd73e755d30f52def748ab6 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf - languageName: node - linkType: hard - -"base64url-universal@npm:^1.0.1": - version: 1.1.0 - resolution: "base64url-universal@npm:1.1.0" - dependencies: - base64url: "npm:^3.0.0" - checksum: 10c0/d1408b3062c7a73cca75c6cc47eaefc47089ca20e019f5b6c3ab4641d7a87caec3e8e1fb17165b63380bef924f62f59dc7f257586490d5718c8c352f1dfc98e2 - languageName: node - linkType: hard - -"base64url-universal@npm:^2.0.0": - version: 2.0.0 - resolution: "base64url-universal@npm:2.0.0" - dependencies: - base64url: "npm:^3.0.1" - checksum: 10c0/6143326c1b5011d987d410a7451fcacad33af9282f9e7d06a21e1d4d7ed9d884e6c09a8f0d178f6c9ef3b11f8cda10ece4c84768e43dc9cb4dc47d1b5056de40 - languageName: node - linkType: hard - -"base64url@npm:^3.0.0, base64url@npm:^3.0.1": - version: 3.0.1 - resolution: "base64url@npm:3.0.1" - checksum: 10c0/5ca9d6064e9440a2a45749558dddd2549ca439a305793d4f14a900b7256b5f4438ef1b7a494e1addc66ced5d20f5c010716d353ed267e4b769e6c78074991241 - languageName: node - linkType: hard - -"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": - version: 1.0.2 - resolution: "bcrypt-pbkdf@npm:1.0.2" - dependencies: - tweetnacl: "npm:^0.14.3" - checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 - languageName: node - linkType: hard - -"bcrypt@npm:^5.0.1": - version: 5.1.1 - resolution: "bcrypt@npm:5.1.1" - dependencies: - "@mapbox/node-pre-gyp": "npm:^1.0.11" - node-addon-api: "npm:^5.0.0" - checksum: 10c0/743231158c866bddc46f25eb8e9617fe38bc1a6f5f3052aba35e361d349b7f8fb80e96b45c48a4c23c45c29967ccd11c81cf31166454fc0ab019801c336cab40 - languageName: node - linkType: hard - -"before-after-hook@npm:^2.2.0": - version: 2.2.3 - resolution: "before-after-hook@npm:2.2.3" - checksum: 10c0/0488c4ae12df758ca9d49b3bb27b47fd559677965c52cae7b335784724fb8bf96c42b6e5ba7d7afcbc31facb0e294c3ef717cc41c5bc2f7bd9e76f8b90acd31c - languageName: node - linkType: hard - -"bin-links@npm:^4.0.4": - version: 4.0.4 - resolution: "bin-links@npm:4.0.4" - dependencies: - cmd-shim: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - read-cmd-shim: "npm:^4.0.0" - write-file-atomic: "npm:^5.0.0" - checksum: 10c0/feb664e786429289d189c19c193b28d855c2898bc53b8391306cbad2273b59ccecb91fd31a433020019552c3bad3a1e0eeecca1c12e739a12ce2ca94f7553a17 - languageName: node - linkType: hard - -"bl@npm:^4.0.3, bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: "npm:^5.5.0" - inherits: "npm:^2.0.4" - readable-stream: "npm:^3.4.0" - checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f - languageName: node - linkType: hard - -"bluebird@npm:^3.0.0, bluebird@npm:^3.1.1, bluebird@npm:^3.7.2": - version: 3.7.2 - resolution: "bluebird@npm:3.7.2" - checksum: 10c0/680de03adc54ff925eaa6c7bb9a47a0690e8b5de60f4792604aae8ed618c65e6b63a7893b57ca924beaf53eee69c5af4f8314148c08124c550fe1df1add897d2 - languageName: node - linkType: hard - -"body-parser@npm:^1.19.0": - version: 1.20.3 - resolution: "body-parser@npm:1.20.3" - dependencies: - bytes: "npm:3.1.2" - content-type: "npm:~1.0.5" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - on-finished: "npm:2.4.1" - qs: "npm:6.13.0" - raw-body: "npm:2.5.2" - type-is: "npm:~1.6.18" - unpipe: "npm:1.0.0" - checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 - languageName: node - linkType: hard - -"boolbase@npm:~1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"browserslist@npm:^4.24.0": - version: 4.24.4 - resolution: "browserslist@npm:4.24.4" - dependencies: - caniuse-lite: "npm:^1.0.30001688" - electron-to-chromium: "npm:^1.5.73" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.1" - bin: - browserslist: cli.js - checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 - languageName: node - linkType: hard - -"browserslist@npm:^4.25.1": - version: 4.25.2 - resolution: "browserslist@npm:4.25.2" - dependencies: - caniuse-lite: "npm:^1.0.30001733" - electron-to-chromium: "npm:^1.5.199" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.3" - bin: - browserslist: cli.js - checksum: 10c0/3fd27c6d569125e08b476d0ded78232c756bffeb79f29cfa548961dfd62fa560f8bf60fdb52d496ba276aea0c843968dd38ed4138a724277715be3b41dac8861 - languageName: node - linkType: hard - -"bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: "npm:^3.0.2" - checksum: 10c0/613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: "npm:^0.4.0" - checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 - languageName: node - linkType: hard - -"buffer-equal-constant-time@npm:1.0.1": - version: 1.0.1 - resolution: "buffer-equal-constant-time@npm:1.0.1" - checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 - languageName: node - linkType: hard - -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.1.13" - checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e - languageName: node - linkType: hard - -"buffer@npm:^6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.2.1" - checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 - languageName: node - linkType: hard - -"buildcheck@npm:~0.0.6": - version: 0.0.6 - resolution: "buildcheck@npm:0.0.6" - checksum: 10c0/8cbdb89f41bc484b8325f4828db4135b206a0dffb641eb6cdb2b7022483c45dd0e5aac6d820c9a67bdd2caab3a02c76d7ceec7bd9ec494b5a2270d2806b01a76 - languageName: node - linkType: hard - -"bull@npm:^3.15.0": - version: 3.29.3 - resolution: "bull@npm:3.29.3" - dependencies: - cron-parser: "npm:^2.13.0" - debuglog: "npm:^1.0.0" - get-port: "npm:^5.1.1" - ioredis: "npm:^4.27.0" - lodash: "npm:^4.17.21" - p-timeout: "npm:^3.2.0" - promise.prototype.finally: "npm:^3.1.2" - semver: "npm:^7.3.2" - util.promisify: "npm:^1.0.1" - uuid: "npm:^8.3.0" - checksum: 10c0/6860a17a2abc45bfa887c8fed0f666da2291d382dea3b5be581b82ba992e6edc487d55b5cf2e668f29e7123930958d2bdefae5a2bb003414767d4f209ebc2b4f - languageName: node - linkType: hard - -"busboy@npm:^0.3.1": - version: 0.3.1 - resolution: "busboy@npm:0.3.1" - dependencies: - dicer: "npm:0.3.0" - checksum: 10c0/15b3382816f657302956ba68e48342891b4f36ae1164f1ad47d96302dd2cda634672513d03c7e5dde0dc90e2889becf3fa32f9b3b391d0f8ab4a5a675b5b5581 - languageName: node - linkType: hard - -"byte-size@npm:8.1.1": - version: 8.1.1 - resolution: "byte-size@npm:8.1.1" - checksum: 10c0/83170a16820fde48ebaef93bf6b2e86c5f72041f76e44eba1f3c738cceb699aeadf11088198944d5d7c6f970b465ab1e3dddc2e60bfb49a74374f3447a8db5b9 - languageName: node - linkType: hard - -"bytes@npm:3.1.2, bytes@npm:^3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e - languageName: node - linkType: hard - -"cacache@npm:^18.0.0, cacache@npm:^18.0.3": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" - dependencies: - "@npmcli/fs": "npm:^3.1.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f - languageName: node - linkType: hard - -"cacache@npm:^19.0.1": - version: 19.0.1 - resolution: "cacache@npm:19.0.1" - dependencies: - "@npmcli/fs": "npm:^4.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" - unique-filename: "npm:^4.0.0" - checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c - languageName: node - linkType: hard - -"cacheable-lookup@npm:^5.0.3": - version: 5.0.4 - resolution: "cacheable-lookup@npm:5.0.4" - checksum: 10c0/a6547fb4954b318aa831cbdd2f7b376824bc784fb1fa67610e4147099e3074726072d9af89f12efb69121415a0e1f2918a8ddd4aafcbcf4e91fbeef4a59cd42c - languageName: node - linkType: hard - -"cacheable-request@npm:^7.0.2": - version: 7.0.4 - resolution: "cacheable-request@npm:7.0.4" - dependencies: - clone-response: "npm:^1.0.2" - get-stream: "npm:^5.1.0" - http-cache-semantics: "npm:^4.0.0" - keyv: "npm:^4.0.0" - lowercase-keys: "npm:^2.0.0" - normalize-url: "npm:^6.0.1" - responselike: "npm:^2.0.0" - checksum: 10c0/0834a7d17ae71a177bc34eab06de112a43f9b5ad05ebe929bec983d890a7d9f2bc5f1aa8bb67ea2b65e07a3bc74bea35fa62dd36dbac52876afe36fdcf83da41 - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": - version: 1.0.8 - resolution: "call-bind@npm:1.0.8" - dependencies: - call-bind-apply-helpers: "npm:^1.0.0" - es-define-property: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.2" - checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - get-intrinsic: "npm:^1.3.0" - checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0, callsites@npm:^3.1.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"camelcase-keys@npm:^6.2.2": - version: 6.2.2 - resolution: "camelcase-keys@npm:6.2.2" - dependencies: - camelcase: "npm:^5.3.1" - map-obj: "npm:^4.0.0" - quick-lru: "npm:^4.0.1" - checksum: 10c0/bf1a28348c0f285c6c6f68fb98a9d088d3c0269fed0cdff3ea680d5a42df8a067b4de374e7a33e619eb9d5266a448fe66c2dd1f8e0c9209ebc348632882a3526 - languageName: node - linkType: hard - -"camelcase@npm:5.0.0": - version: 5.0.0 - resolution: "camelcase@npm:5.0.0" - checksum: 10c0/515f1ce911d65949708d9e179f1a40af71eb7de668230a0c85961a35590f7da39af79cfb48d834883dbcc7995bdb7dd6bae8027b101e37a10d95337ec8732800 - languageName: node - linkType: hard - -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"camelcase@npm:^6.3.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001688": - version: 1.0.30001695 - resolution: "caniuse-lite@npm:1.0.30001695" - checksum: 10c0/acf90a767051fdd8083711b3ff9f07a28149c55e394115d8f874f149aa4f130e6bc50cea1dd94fe03035b9ebbe13b64f446518a6d2e19f72650962bdff44b2c5 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001733": - version: 1.0.30001734 - resolution: "caniuse-lite@npm:1.0.30001734" - checksum: 10c0/5869cb6a01e7a012a8c5d7b0482e2c910be3a2a469d4ef516a54db3f846fbaedb2600eeaa270dae9e2ad9328e33f39782e6f459405fcca620021f5f06694542d - languageName: node - linkType: hard - -"canonicalize@npm:^1.0.1": - version: 1.0.8 - resolution: "canonicalize@npm:1.0.8" - checksum: 10c0/6fafcfa73855a49c86eed26d2f23734713a542a3107a23a6ab16fb22b6cee6bb2d92ad32b2244d52594bd69bc08bec820413911cd566dcc5399048012ce26a83 - languageName: node - linkType: hard - -"cas@git+https://github.com/joshchan/node-cas.git": - version: 0.0.5 - resolution: "cas@https://github.com/joshchan/node-cas.git#commit=344a8bfba9d054e2e378adaf95b720c898ae48a2" - dependencies: - cheerio: "npm:0.19.0" - checksum: 10c0/03467fd69a10bd1b03cbca35f25b2249855b99857e908aeb54727cb8d8f17658fa909f7b1296a77eaf7537dc24a0fa16f5da438a8f161260f189d0db1e60f5c6 - languageName: node - linkType: hard - -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 - languageName: node - linkType: hard - -"chalk@npm:2.4.2, chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:4.1.0": - version: 4.1.0 - resolution: "chalk@npm:4.1.0" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/3787bd65ecd98ab3a1acc3b4f71d006268a675875e49ee6ea75fb54ba73d268b97544368358c18c42445e408e076ae8ad5cec8fbad36942a2c7ac654883dc61e - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e - languageName: node - linkType: hard - -"character-parser@npm:^2.2.0": - version: 2.2.0 - resolution: "character-parser@npm:2.2.0" - dependencies: - is-regex: "npm:^1.0.3" - checksum: 10c0/5a8d3eff2c912a6878c84e2ebf9d42524e858aa7e1a1c7e8bb79ab54da109ad008fe9057a9d2b3230541d7ff858eda98983a2ae15db57ba01af2e989d29e932e - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"cheerio@npm:0.19.0": - version: 0.19.0 - resolution: "cheerio@npm:0.19.0" - dependencies: - css-select: "npm:~1.0.0" - dom-serializer: "npm:~0.1.0" - entities: "npm:~1.1.1" - htmlparser2: "npm:~3.8.1" - lodash: "npm:^3.2.0" - checksum: 10c0/af96cc6a6b595334ed7c1a47b1a999dfad20645a563acdc8bf5338b3774cf050c99b6f4c9040ef0f4c03b7c915e3d3735bedcbb95968d9aecf9cf2e44dcf4896 - languageName: node - linkType: hard - -"cheerio@npm:^0.22.0": - version: 0.22.0 - resolution: "cheerio@npm:0.22.0" - dependencies: - css-select: "npm:~1.2.0" - dom-serializer: "npm:~0.1.0" - entities: "npm:~1.1.1" - htmlparser2: "npm:^3.9.1" - lodash.assignin: "npm:^4.0.9" - lodash.bind: "npm:^4.1.4" - lodash.defaults: "npm:^4.0.1" - lodash.filter: "npm:^4.4.0" - lodash.flatten: "npm:^4.2.0" - lodash.foreach: "npm:^4.3.0" - lodash.map: "npm:^4.4.0" - lodash.merge: "npm:^4.4.0" - lodash.pick: "npm:^4.2.1" - lodash.reduce: "npm:^4.4.0" - lodash.reject: "npm:^4.4.0" - lodash.some: "npm:^4.4.0" - checksum: 10c0/b067fadb3d0ada1f614ce27b2795c206df2c612ab066393f833c798ba29c73a610a3202567d2223658743026f5385cda61f6b52370b22f28a924e52883933340 - languageName: node - linkType: hard - -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a - languageName: node - linkType: hard - -"ci-info@npm:^4.0.0": - version: 4.1.0 - resolution: "ci-info@npm:4.1.0" - checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 - languageName: node - linkType: hard - -"ci-info@npm:^4.2.0": - version: 4.3.0 - resolution: "ci-info@npm:4.3.0" - checksum: 10c0/60d3dfe95d75c01454ec1cfd5108617dd598a28a2a3e148bd7e1523c1c208b5f5a3007cafcbe293e6fd0a5a310cc32217c5dc54743eeabc0a2bec80072fc055c - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^2.1.0": - version: 2.1.0 - resolution: "cjs-module-lexer@npm:2.1.0" - checksum: 10c0/91cf28686dc3948e4a06dfa03a2fccb14b7a97471ffe7ae0124f62060ddf2de28e8e997f60007babe6e122b1b06a47c01a1b72cc015f185824d9cac3ccfa5533 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - -"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: "npm:^3.1.0" - checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 - languageName: node - linkType: hard - -"cli-spinners@npm:2.6.1": - version: 2.6.1 - resolution: "cli-spinners@npm:2.6.1" - checksum: 10c0/6abcdfef59aa68e6b51376d87d257f9120a0a7120a39dd21633702d24797decb6dc747dff2217c88732710db892b5053c5c672d221b6c4d13bbcb5372e203596 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.5.0": - version: 2.9.2 - resolution: "cli-spinners@npm:2.9.2" - checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 - languageName: node - linkType: hard - -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 10c0/125a62810e59a2564268c80fdff56c23159a7690c003e34aeb2e68497dccff26911998ff49c33916fcfdf71e824322cc3953e3f7b48b27267c7a062c81348a9a - languageName: node - linkType: hard - -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 - languageName: node - linkType: hard - -"clone-deep@npm:4.0.1": - version: 4.0.1 - resolution: "clone-deep@npm:4.0.1" - dependencies: - is-plain-object: "npm:^2.0.4" - kind-of: "npm:^6.0.2" - shallow-clone: "npm:^3.0.0" - checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 - languageName: node - linkType: hard - -"clone-response@npm:^1.0.2": - version: 1.0.3 - resolution: "clone-response@npm:1.0.3" - dependencies: - mimic-response: "npm:^1.0.0" - checksum: 10c0/06a2b611824efb128810708baee3bd169ec9a1bf5976a5258cd7eb3f7db25f00166c6eee5961f075c7e38e194f373d4fdf86b8166ad5b9c7e82bbd2e333a6087 - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b - languageName: node - linkType: hard - -"cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: 10c0/d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 - languageName: node - linkType: hard - -"cmd-shim@npm:6.0.3, cmd-shim@npm:^6.0.0": - version: 6.0.3 - resolution: "cmd-shim@npm:6.0.3" - checksum: 10c0/dc09fe0bf39e86250529456d9a87dd6d5208d053e449101a600e96dc956c100e0bc312cdb413a91266201f3bd8057d4abf63875cafb99039553a1937d8f3da36 - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.2": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: "npm:^1.0.0" - simple-swizzle: "npm:^0.2.2" - checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 - languageName: node - linkType: hard - -"color-support@npm:1.1.3, color-support@npm:^1.1.2": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 - languageName: node - linkType: hard - -"color@npm:^4.2.3": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: "npm:^2.0.1" - color-string: "npm:^1.9.0" - checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 - languageName: node - linkType: hard - -"columnify@npm:1.6.0": - version: 1.6.0 - resolution: "columnify@npm:1.6.0" - dependencies: - strip-ansi: "npm:^6.0.1" - wcwidth: "npm:^1.0.0" - checksum: 10c0/25b90b59129331bbb8b0c838f8df69924349b83e8eab9549f431062a20a39094b8d744bb83265be38fd5d03140ce4bfbd85837c293f618925e83157ae9535f1d - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^2.15.1, commander@npm:^2.20.3": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 - languageName: node - linkType: hard - -"comment-parser@npm:1.4.1": - version: 1.4.1 - resolution: "comment-parser@npm:1.4.1" - checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd - languageName: node - linkType: hard - -"common-ancestor-path@npm:^1.0.1": - version: 1.0.1 - resolution: "common-ancestor-path@npm:1.0.1" - checksum: 10c0/390c08d2a67a7a106d39499c002d827d2874966d938012453fd7ca34cd306881e2b9d604f657fa7a8e6e4896d67f39ebc09bf1bfd8da8ff318e0fb7a8752c534 - languageName: node - linkType: hard - -"compare-func@npm:^2.0.0": - version: 2.0.0 - resolution: "compare-func@npm:2.0.0" - dependencies: - array-ify: "npm:^1.0.0" - dot-prop: "npm:^5.1.0" - checksum: 10c0/78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 - languageName: node - linkType: hard - -"component-emitter@npm:^1.2.0": - version: 1.3.1 - resolution: "component-emitter@npm:1.3.1" - checksum: 10c0/e4900b1b790b5e76b8d71b328da41482118c0f3523a516a41be598dc2785a07fd721098d9bf6e22d89b19f4fa4e1025160dc00317ea111633a3e4f75c2b86032 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"concat-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "concat-stream@npm:2.0.0" - dependencies: - buffer-from: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.0.2" - typedarray: "npm:^0.0.6" - checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a - languageName: node - linkType: hard - -"confusing-browser-globals@npm:^1.0.10": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e - languageName: node - linkType: hard - -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 - languageName: node - linkType: hard - -"consolidate@npm:^0.14.2": - version: 0.14.5 - resolution: "consolidate@npm:0.14.5" - dependencies: - bluebird: "npm:^3.1.1" - checksum: 10c0/9affd54c3013932e0c475c9a3fd431f8b2dd81d2ef9c8267c9c99941e5f763cfb3e7719625783615c9e231f1bb3b7646b4362a60fc8b625a3b9ebe6f51ac4888 - languageName: node - linkType: hard - -"constantinople@npm:^4.0.1": - version: 4.0.1 - resolution: "constantinople@npm:4.0.1" - dependencies: - "@babel/parser": "npm:^7.6.0" - "@babel/types": "npm:^7.6.1" - checksum: 10c0/15129adef19b1af2c3ade8bd38f97c34781bf461472a30ab414384b28d072be83070c8d2175787c045ef7c222c415101ae609936e7903427796a0c0eca8449fd - languageName: node - linkType: hard - -"content-type@npm:~1.0.5": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af - languageName: node - linkType: hard - -"conventional-changelog-angular@npm:7.0.0": - version: 7.0.0 - resolution: "conventional-changelog-angular@npm:7.0.0" - dependencies: - compare-func: "npm:^2.0.0" - checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e - languageName: node - linkType: hard - -"conventional-changelog-core@npm:5.0.1": - version: 5.0.1 - resolution: "conventional-changelog-core@npm:5.0.1" - dependencies: - add-stream: "npm:^1.0.0" - conventional-changelog-writer: "npm:^6.0.0" - conventional-commits-parser: "npm:^4.0.0" - dateformat: "npm:^3.0.3" - get-pkg-repo: "npm:^4.2.1" - git-raw-commits: "npm:^3.0.0" - git-remote-origin-url: "npm:^2.0.0" - git-semver-tags: "npm:^5.0.0" - normalize-package-data: "npm:^3.0.3" - read-pkg: "npm:^3.0.0" - read-pkg-up: "npm:^3.0.0" - checksum: 10c0/c026da415ea58346c167e58f8dd717592e92afc897aa604189a6d69f48b6943e7a656b2c83433810feea32dda117b0914a7f5860ed338a21f6ee9b0f56788b37 - languageName: node - linkType: hard - -"conventional-changelog-preset-loader@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-changelog-preset-loader@npm:3.0.0" - checksum: 10c0/5de23c4aa8b8526c3542fd5abe9758d56eed79821f32cc16d1fdf480cecc44855edbe4680113f229509dcaf4b97cc41e786ac8e3b0822b44fd9d0b98542ed0e0 - languageName: node - linkType: hard - -"conventional-changelog-writer@npm:^6.0.0": - version: 6.0.1 - resolution: "conventional-changelog-writer@npm:6.0.1" - dependencies: - conventional-commits-filter: "npm:^3.0.0" - dateformat: "npm:^3.0.3" - handlebars: "npm:^4.7.7" - json-stringify-safe: "npm:^5.0.1" - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - split: "npm:^1.0.1" - bin: - conventional-changelog-writer: cli.js - checksum: 10c0/50790b0d92e06c5ab1c02cc4eb2ecd74575244d31cfacea1885d7c8afeae1bc7bbc169140fe062f2438b9952400762240b796e59521c0246278859296b323338 - languageName: node - linkType: hard - -"conventional-commits-filter@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-commits-filter@npm:3.0.0" - dependencies: - lodash.ismatch: "npm:^4.4.0" - modify-values: "npm:^1.0.1" - checksum: 10c0/9d43cf9029bf39b70b394c551846a57b6f0473028ba5628c38bd447672655cc27bb80ba502d9a7e41335f63ad62b754cb26579f3d4bae7398dfc092acbb32578 - languageName: node - linkType: hard - -"conventional-commits-parser@npm:^4.0.0": - version: 4.0.0 - resolution: "conventional-commits-parser@npm:4.0.0" - dependencies: - JSONStream: "npm:^1.3.5" - is-text-path: "npm:^1.0.1" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - conventional-commits-parser: cli.js - checksum: 10c0/12e390cc80ad8a825c5775a329b95e11cf47a6df7b8a3875d375e28b8cb27c4f32955842ea73e4e357cff9757a6be99fdffe4fda87a23e9d8e73f983425537a0 - languageName: node - linkType: hard - -"conventional-recommended-bump@npm:7.0.1": - version: 7.0.1 - resolution: "conventional-recommended-bump@npm:7.0.1" - dependencies: - concat-stream: "npm:^2.0.0" - conventional-changelog-preset-loader: "npm:^3.0.0" - conventional-commits-filter: "npm:^3.0.0" - conventional-commits-parser: "npm:^4.0.0" - git-raw-commits: "npm:^3.0.0" - git-semver-tags: "npm:^5.0.0" - meow: "npm:^8.1.2" - bin: - conventional-recommended-bump: cli.js - checksum: 10c0/ff751a256ddfbec62efd5a32de059b01659e945073793c6766143a8242864fd8099804a90bbf1e6a61928ade3d12292d6f66f721a113630de392d54eb7f0b0c3 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b - languageName: node - linkType: hard - -"cookie-signature@npm:1.0.7": - version: 1.0.7 - resolution: "cookie-signature@npm:1.0.7" - checksum: 10c0/e7731ad2995ae2efeed6435ec1e22cdd21afef29d300c27281438b1eab2bae04ef0d1a203928c0afec2cee72aa36540b8747406ebe308ad23c8e8cc3c26c9c51 - languageName: node - linkType: hard - -"cookie@npm:0.7.2": - version: 0.7.2 - resolution: "cookie@npm:0.7.2" - checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 - languageName: node - linkType: hard - -"cookiejar@npm:^2.1.0": - version: 2.1.4 - resolution: "cookiejar@npm:2.1.4" - checksum: 10c0/2dae55611c6e1678f34d93984cbd4bda58f4fe3e5247cc4993f4a305cd19c913bbaf325086ed952e892108115073a747596453d3dc1c34947f47f731818b8ad1 - languageName: node - linkType: hard - -"core-js-compat@npm:^3.43.0": - version: 3.45.0 - resolution: "core-js-compat@npm:3.45.0" - dependencies: - browserslist: "npm:^4.25.1" - checksum: 10c0/3515955d2c83846f0bf8c4a0f96fc514a6b711e9b3ee19a8df3683a6b0720d762fef60a63bb5c07907f9d18aa00c5904ef690dd4150bc39e2d47e01f05154fda - languageName: node - linkType: hard - -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 - languageName: node - linkType: hard - -"cosmiconfig@npm:9.0.0": - version: 9.0.0 - resolution: "cosmiconfig@npm:9.0.0" - dependencies: - env-paths: "npm:^2.2.1" - import-fresh: "npm:^3.3.0" - js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.2.0" - peerDependencies: - typescript: ">=4.9.5" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee - languageName: node - linkType: hard - -"cpu-features@npm:~0.0.10": - version: 0.0.10 - resolution: "cpu-features@npm:0.0.10" - dependencies: - buildcheck: "npm:~0.0.6" - nan: "npm:^2.19.0" - node-gyp: "npm:latest" - checksum: 10c0/0c4a12904657b22477ffbcfd2b4b2bdd45b174f283616b18d9e1ade495083f9f6098493feb09f4ae2d0b36b240f9ecd32cfb4afe210cf0d0f8f0cc257bd58e54 - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 - languageName: node - linkType: hard - -"credentials-context@npm:^1.0.0": - version: 1.0.0 - resolution: "credentials-context@npm:1.0.0" - checksum: 10c0/ceefd9cba384fed7e2cfe85d8e9fee15da27ef8989ddcecb7cc8a678fa83d691e834100cf0280deb52349f09f5da1fb3b3ba144404faeabea44b0130651ac74d - languageName: node - linkType: hard - -"cron-parser@npm:^2.13.0": - version: 2.18.0 - resolution: "cron-parser@npm:2.18.0" - dependencies: - is-nan: "npm:^1.3.0" - moment-timezone: "npm:^0.5.31" - checksum: 10c0/1361cf0af8a749a355c7dd45ec85d94f8b1b768e6ce19955fea38d72b22874c0c63add070a1fe543a4ee4fa5229b6ae43760934df0d4aed6499581108657df25 - languageName: node - linkType: hard - -"cron-parser@npm:^4.2.0, cron-parser@npm:^4.2.1, cron-parser@npm:^4.3.0": - version: 4.9.0 - resolution: "cron-parser@npm:4.9.0" - dependencies: - luxon: "npm:^3.2.1" - checksum: 10c0/348622bdcd1a15695b61fc33af8a60133e5913a85cf99f6344367579e7002896514ba3b0a9d6bb569b02667d6b06836722bf2295fcd101b3de378f71d37bed0b - languageName: node - linkType: hard - -"cron@npm:^1.8.2": - version: 1.8.3 - resolution: "cron@npm:1.8.3" - dependencies: - luxon: "npm:^1.23.x" - checksum: 10c0/f3cd0960c34bebe8ac70404120ad1822bceb4cca216b0951a997e5a673c8b140d73b567633248485811cfced99926cdf4ff624e067cf26ec72d5cfce06f0468c - languageName: node - linkType: hard - -"cron@npm:^4.1.4": - version: 4.3.0 - resolution: "cron@npm:4.3.0" - dependencies: - "@types/luxon": "npm:~3.6.0" - luxon: "npm:~3.6.0" - checksum: 10c0/859805a56ce6af19177a0abff3688e917d2124c0fa086234333d20fd4ca6efe333af2ab4ba6ba06c3aa68c6b2eec30e375c795e97e735c70fcac126057332f10 - languageName: node - linkType: hard - -"cross-fetch@npm:^3.0.5, cross-fetch@npm:^3.0.6": - version: 3.2.0 - resolution: "cross-fetch@npm:3.2.0" - dependencies: - node-fetch: "npm:^2.7.0" - checksum: 10c0/d8596adf0269130098a676f6739a0922f3cc7b71cc89729925411ebe851a87026171c82ea89154c4811c9867c01c44793205a52e618ce2684650218c7fbeeb9f - languageName: node - linkType: hard - -"cross-spawn@npm:^5.1.0": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: "npm:^4.0.1" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10c0/1918621fddb9f8c61e02118b2dbf81f611ccd1544ceaca0d026525341832b8511ce2504c60f935dbc06b35e5ef156fe8c1e72708c27dd486f034e9c0e1e07201 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"crypto-ld@npm:^3.7.0": - version: 3.9.0 - resolution: "crypto-ld@npm:3.9.0" - dependencies: - base64url-universal: "npm:^1.0.1" - bs58: "npm:^4.0.1" - node-forge: "npm:~0.10.0" - semver: "npm:^6.2.0" - sodium-native: "npm:^3.2.0" - dependenciesMeta: - sodium-native: - optional: true - checksum: 10c0/78fd545e802db3b0ade0bacf177dde7c52dd24d801faca79a7b5b7d6226d114db7fc1307397ff119798709376d28c3271e08e457723720c141ab4f50e47473e1 - languageName: node - linkType: hard - -"crypto-ld@npm:^7.0.0": - version: 7.0.0 - resolution: "crypto-ld@npm:7.0.0" - checksum: 10c0/67fac3bf5c52d71e02ae436a305f223376746cb43d2aa6550764d2885e15e8802267c8fd6a451c4255b90b58eeab1c036b6ee6e88f21425620a3d5ecc8b36d92 - languageName: node - linkType: hard - -"css-select@npm:~1.0.0": - version: 1.0.0 - resolution: "css-select@npm:1.0.0" - dependencies: - boolbase: "npm:~1.0.0" - css-what: "npm:1.0" - domutils: "npm:1.4" - nth-check: "npm:~1.0.0" - checksum: 10c0/2311812bb619d39263f620a7f5f3900c08cc25a5a0817b76e6f677dbe5b062a434cdac7f5de0bfc025cd249de53c509ddc87c77c62c99466b2a891f7df935338 - languageName: node - linkType: hard - -"css-select@npm:~1.2.0": - version: 1.2.0 - resolution: "css-select@npm:1.2.0" - dependencies: - boolbase: "npm:~1.0.0" - css-what: "npm:2.1" - domutils: "npm:1.5.1" - nth-check: "npm:~1.0.1" - checksum: 10c0/16e91cd4a8606e76eb2d93ded43e2d20fe315effa7e1dedf16e81fab5c6bbd18b394f78cb59c04e2dddc7d4c68e31a0617b7f4f196dff48398cf3ac83e78475c - languageName: node - linkType: hard - -"css-what@npm:1.0": - version: 1.0.0 - resolution: "css-what@npm:1.0.0" - checksum: 10c0/dbcba5c7251e11643fd531d6cfd625007ac147485c1004d8a9e6c2d768ab43ab1f2f57da5f73df235990cd30d2d80fdb64d54f4c943baec460a2b2beaf646808 - languageName: node - linkType: hard - -"css-what@npm:2.1": - version: 2.1.3 - resolution: "css-what@npm:2.1.3" - checksum: 10c0/4f1a25855be8bdfebdd431ccb084f6481951408dbf076eebf7a1c045ae45dd5651b32fe55deaa16a59e98eb25d5bb066dcf6bdff7aa3cc2ed5bdbe5fe1aa7fd7 - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - -"dargs@npm:^7.0.0": - version: 7.0.0 - resolution: "dargs@npm:7.0.0" - checksum: 10c0/ec7f6a8315a8fa2f8b12d39207615bdf62b4d01f631b96fbe536c8ad5469ab9ed710d55811e564d0d5c1d548fc8cb6cc70bf0939f2415790159f5a75e0f96c92 - languageName: node - linkType: hard - -"dashdash@npm:^1.12.0": - version: 1.14.1 - resolution: "dashdash@npm:1.14.1" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a - languageName: node - linkType: hard - -"dashify@npm:^2.0.0": - version: 2.0.0 - resolution: "dashify@npm:2.0.0" - checksum: 10c0/b9ab76cbd9739b6dba4359083cc9a670e6a0876f90ab3409b9984cf386b82a28a89009afe15d13ce62f97bc84ce49be2fe85f3a6791481a8d31e962cd0f0e710 - languageName: node - linkType: hard - -"data-uri-to-buffer@npm:^4.0.0": - version: 4.0.1 - resolution: "data-uri-to-buffer@npm:4.0.1" - checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b - languageName: node - linkType: hard - -"data-view-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-buffer@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.2" - checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c - languageName: node - linkType: hard - -"data-view-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-byte-length@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.2" - checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 - languageName: node - linkType: hard - -"data-view-byte-offset@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-offset@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 - languageName: node - linkType: hard - -"datauri@npm:^2.0.0": - version: 2.0.0 - resolution: "datauri@npm:2.0.0" - dependencies: - image-size: "npm:^0.7.3" - mimer: "npm:^1.0.0" - checksum: 10c0/3f70d6e51585657d12dc4e2342623998fc227b2464d87b25d440e2c6e996a1f67647d59025d3978ba1a38a24719d7eb3cd1656d3287ef93d9fe87b80aefded79 - languageName: node - linkType: hard - -"dateformat@npm:^3.0.3": - version: 3.0.3 - resolution: "dateformat@npm:3.0.3" - checksum: 10c0/2effb8bef52ff912f87a05e4adbeacff46353e91313ad1ea9ed31412db26849f5a0fcc7e3ce36dbfb84fc6c881a986d5694f84838ad0da7000d5150693e78678 - languageName: node - linkType: hard - -"debug@npm:2.6.9, debug@npm:^2.2.0": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: "npm:2.0.0" - checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7": - version: 4.4.0 - resolution: "debug@npm:4.4.0" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de - languageName: node - linkType: hard - -"debug@npm:^3.1.0, debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: "npm:^2.1.1" - checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a - languageName: node - linkType: hard - -"debug@npm:^4.4.1": - version: 4.4.1 - resolution: "debug@npm:4.4.1" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 - languageName: node - linkType: hard - -"debuglog@npm:^1.0.0": - version: 1.0.1 - resolution: "debuglog@npm:1.0.1" - checksum: 10c0/d98ac9abe6a528fcbb4d843b1caf5a9116998c76e1263d8ff4db2c086aa96fa7ea4c752a81050fa2e4304129ef330e6e4dc9dd4d47141afd7db80bf699f08219 - languageName: node - linkType: hard - -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: "npm:^1.1.0" - map-obj: "npm:^1.0.0" - checksum: 10c0/4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d - languageName: node - linkType: hard - -"decamelize@npm:^1.1.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"decompress-response@npm:^6.0.0": - version: 6.0.0 - resolution: "decompress-response@npm:6.0.0" - dependencies: - mimic-response: "npm:^3.1.0" - checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e - languageName: node - linkType: hard - -"dedent@npm:1.5.3": - version: 1.5.3 - resolution: "dedent@npm:1.5.3" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 - languageName: node - linkType: hard - -"dedent@npm:^1.6.0": - version: 1.6.0 - resolution: "dedent@npm:1.6.0" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/671b8f5e390dd2a560862c4511dd6d2638e71911486f78cb32116551f8f2aa6fcaf50579ffffb2f866d46b5b80fd72470659ca5760ede8f967619ef7df79e8a5 - languageName: node - linkType: hard - -"deep-extend@npm:^0.5.1": - version: 0.5.1 - resolution: "deep-extend@npm:0.5.1" - checksum: 10c0/a0b86d1ff2d62b7fe531a568bf5fef3f9fe477ada35e3d97310ab989cb588acde607283ef587a4552eaf05c3491045536ddf5741021523574d93de472c61d24f - languageName: node - linkType: hard - -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: "npm:^1.0.2" - checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a - languageName: node - linkType: hard - -"defer-to-connect@npm:^2.0.0": - version: 2.0.1 - resolution: "defer-to-connect@npm:2.0.1" - checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 - languageName: node - linkType: hard - -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.0.1" - checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 - languageName: node - linkType: hard - -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - object-keys: "npm:^1.1.1" - checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 - languageName: node - linkType: hard - -"denque@npm:^1.1.0": - version: 1.5.1 - resolution: "denque@npm:1.5.1" - checksum: 10c0/9e6fc1a63e1c9ded38325290302fef40e5ad28471ad8c66d68eaea623ef847bd25fc75a7c3f47396206dc967922615999066470a364e1786f2758d61337872b7 - languageName: node - linkType: hard - -"depd@npm:2.0.0, depd@npm:~2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c - languageName: node - linkType: hard - -"deprecation@npm:^2.0.0": - version: 2.3.1 - resolution: "deprecation@npm:2.3.1" - checksum: 10c0/23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032 - languageName: node - linkType: hard - -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 - languageName: node - linkType: hard - -"detect-indent@npm:^5.0.0": - version: 5.0.0 - resolution: "detect-indent@npm:5.0.0" - checksum: 10c0/58d985dd5b4d5e5aad6fe7d8ecc74538fa92c807c894794b8505569e45651bf01a38755b65d9d3d17e512239a26d3131837cbef43cf4226968d5abf175bbcc9d - languageName: node - linkType: hard - -"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": - version: 2.0.3 - resolution: "detect-libc@npm:2.0.3" - checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 - languageName: node - linkType: hard - -"detect-newline@npm:^3.1.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d - languageName: node - linkType: hard - -"dicer@npm:0.3.0": - version: 0.3.0 - resolution: "dicer@npm:0.3.0" - dependencies: - streamsearch: "npm:0.1.2" - checksum: 10c0/4486f0448233145216cfadd5f6bbb4c26c3a28824da5344322b06051632e99d6af2b44f893fa8b30f1749ad175b4e565d301c760d0437226d9e41ccdb6546f35 - languageName: node - linkType: hard - -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 - languageName: node - linkType: hard - -"doctypes@npm:^1.1.0": - version: 1.1.0 - resolution: "doctypes@npm:1.1.0" - checksum: 10c0/b3f9d597ad8b9ac6aeba9d64df61f0098174f7570e3d34f7ee245ebc736c7bee122d9738a18e22010b98983fd9a340d63043d3841f02d8a7742a2d96d2c72610 - languageName: node - linkType: hard - -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: "npm:^2.0.1" - entities: "npm:^2.0.0" - checksum: 10c0/5cb595fb77e1a23eca56742f47631e6f4af66ce1982c7ed28b3d0ef21f1f50304c067adc29d3eaf824c572be022cee88627d0ac9b929408f24e923f3c7bed37b - languageName: node - linkType: hard - -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.2.0" - entities: "npm:^2.0.0" - checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 - languageName: node - linkType: hard - -"dom-serializer@npm:^2.0.0": - version: 2.0.0 - resolution: "dom-serializer@npm:2.0.0" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.2" - entities: "npm:^4.2.0" - checksum: 10c0/d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 - languageName: node - linkType: hard - -"dom-serializer@npm:~0.1.0": - version: 0.1.1 - resolution: "dom-serializer@npm:0.1.1" - dependencies: - domelementtype: "npm:^1.3.0" - entities: "npm:^1.1.1" - checksum: 10c0/bb710d0a49dbe7b1019e8bf314102495e8894b9da188d00187c0ac52939ded630bc5f9eacc97bfa462d535cd321c734c0b02fefd5e4d93162ab886dccc6666f3 - languageName: node - linkType: hard - -"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 10c0/6d4f5761060a21eaf3c96545501e9d188745c7e1c31b8d141bf15d8748feeadba868f4ea32877751b8678b286fb1afbe6ae905ca3fb8f0214d8322e482cdbec0 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 - languageName: node - linkType: hard - -"domhandler@npm:2.3": - version: 2.3.0 - resolution: "domhandler@npm:2.3.0" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/f434a1c08392821751b85081fd8ff11b17d7fd6e5da59335af87ee038b816be24d35a12f45d85034e3e137158beb031d5a3df21fcd05a7dd4490e2f01a6d0e82 - languageName: node - linkType: hard - -"domhandler@npm:^2.3.0": - version: 2.4.2 - resolution: "domhandler@npm:2.4.2" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/6670cab73e97e3c6771dcf22b537db3f6a0be0ad6b370f03bb5f1b585d3b563d326787fdabe1190b7ca9d81c804e9b3f8a1431159c27c44f6c05f94afa92be2d - languageName: node - linkType: hard - -"domhandler@npm:^3.0.0": - version: 3.3.0 - resolution: "domhandler@npm:3.3.0" - dependencies: - domelementtype: "npm:^2.0.1" - checksum: 10c0/376e6462a6144121f6ae50c9c1b8e0b22d2e0c68f9fb2ef6e57a5f4f9395854b1258cb638c58b171ee291359a5f41a4a57f403954db976484a59ffcee4c1e405 - languageName: node - linkType: hard - -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: "npm:^2.2.0" - checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b - languageName: node - linkType: hard - -"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": - version: 5.0.3 - resolution: "domhandler@npm:5.0.3" - dependencies: - domelementtype: "npm:^2.3.0" - checksum: 10c0/bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a - languageName: node - linkType: hard - -"domutils@npm:1.4": - version: 1.4.3 - resolution: "domutils@npm:1.4.3" - dependencies: - domelementtype: "npm:1" - checksum: 10c0/ce345ccc3a964aa6f5415a4fd9b3a11db743e8ac5c4383d7ad3dd53fe7a8f23ee03dca580209d8005f49261ddab976082bcd5652e913bcb6044b8c959fb5401b - languageName: node - linkType: hard - -"domutils@npm:1.5, domutils@npm:1.5.1": - version: 1.5.1 - resolution: "domutils@npm:1.5.1" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10c0/8707a18c974be54d33fd846d174d523ddf4955b2fcc1ec713cbe6ff490f60da22106b153fea6269332477eb81dc1a25a83f5b2afaf78b6dc9e2161fd7b80f7ba - languageName: node - linkType: hard - -"domutils@npm:^1.5.1": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10c0/437fcd2d6d6be03f488152e73c6f953e289c58496baa22be9626b2b46f9cfd40486ae77d144487ff6b102929a3231cdb9a8bf8ef485fb7b7c30c985daedc77eb - languageName: node - linkType: hard - -"domutils@npm:^2.0.0, domutils@npm:^2.5.2, domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: "npm:^1.0.1" - domelementtype: "npm:^2.2.0" - domhandler: "npm:^4.2.0" - checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db - languageName: node - linkType: hard - -"domutils@npm:^3.0.1": - version: 3.2.2 - resolution: "domutils@npm:3.2.2" - dependencies: - dom-serializer: "npm:^2.0.0" - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - checksum: 10c0/47938f473b987ea71cd59e59626eb8666d3aa8feba5266e45527f3b636c7883cca7e582d901531961f742c519d7514636b7973353b648762b2e3bedbf235fada - languageName: node - linkType: hard - -"dot-prop@npm:^5.1.0": - version: 5.3.0 - resolution: "dot-prop@npm:5.3.0" - dependencies: - is-obj: "npm:^2.0.0" - checksum: 10c0/93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 - languageName: node - linkType: hard - -"dotenv-expand@npm:~10.0.0": - version: 10.0.0 - resolution: "dotenv-expand@npm:10.0.0" - checksum: 10c0/298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e - languageName: node - linkType: hard - -"dotenv-expand@npm:~11.0.6": - version: 11.0.7 - resolution: "dotenv-expand@npm:11.0.7" - dependencies: - dotenv: "npm:^16.4.5" - checksum: 10c0/d80b8a7be085edf351270b96ac0e794bc3ddd7f36157912939577cb4d33ba6492ebee349d59798b71b90e36f498d24a2a564fb4aa00073b2ef4c2a3a49c467b1 - languageName: node - linkType: hard - -"dotenv-flow@npm:^3.1.0": - version: 3.3.0 - resolution: "dotenv-flow@npm:3.3.0" - dependencies: - dotenv: "npm:^8.6.0" - checksum: 10c0/64f367f66532bdd2abad84360ff37668d8718e9362b442ba293ed518b573449c6e8d15e3e50001f7bac4f2c932287a5c8c5e98435b252f230f67bcc30cd27b87 - languageName: node - linkType: hard - -"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": - version: 16.4.7 - resolution: "dotenv@npm:16.4.7" - checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462 - languageName: node - linkType: hard - -"dotenv@npm:^8.6.0": - version: 8.6.0 - resolution: "dotenv@npm:8.6.0" - checksum: 10c0/6750431dea8efbd54b9f2d9681b04e1ccc7989486461dcf058bb708d9e3d63b04115fcdf8840e38ad1e24a4a2e1e7c1560626c5e3ac7bc09371b127c49e2d45f - languageName: node - linkType: hard - -"dotenv@npm:~16.3.1": - version: 16.3.2 - resolution: "dotenv@npm:16.3.2" - checksum: 10c0/a87d62cef0810b670cb477db1a24a42a093b6b428c9e65c185ce1d6368ad7175234b13547718ba08da18df43faae4f814180cc0366e11be1ded2277abc4dd22e - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"duplexer@npm:^0.1.1": - version: 0.1.2 - resolution: "duplexer@npm:0.1.2" - checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"ecc-jsbn@npm:~0.1.1": - version: 0.1.2 - resolution: "ecc-jsbn@npm:0.1.2" - dependencies: - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.1.0" - checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 - languageName: node - linkType: hard - -"ecdsa-sig-formatter@npm:1.0.11": - version: 1.0.11 - resolution: "ecdsa-sig-formatter@npm:1.0.11" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c - languageName: node - linkType: hard - -"ed25519-signature-2018-context@npm:^1.1.0": - version: 1.1.0 - resolution: "ed25519-signature-2018-context@npm:1.1.0" - checksum: 10c0/c0fb62dd448de59f9cb45ac55f026b793b8da9c0dbe83014d0ddf73d50ea78e37e6bf88b9445f2301a6ead3a42031ef5839f625e3186169d07897e19a056de7c - languageName: node - linkType: hard - -"ed25519-signature-2020-context@npm:^1.1.0": - version: 1.1.0 - resolution: "ed25519-signature-2020-context@npm:1.1.0" - checksum: 10c0/7e5fba0ad8c1979412c45439654c0e1ac05372305760ad7c53e6b8d9a8106ed2f109e57ef19a7f0b23ea0efd69fee9c045d38280d18be11ef3dd68a433e55c46 - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 - languageName: node - linkType: hard - -"ejs@npm:^3.1.7": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.199": - version: 1.5.199 - resolution: "electron-to-chromium@npm:1.5.199" - checksum: 10c0/5586d20455407edc583e33422e370bbdc07913d8f5c73da2ae1c6adcc79c3be7384ecaf893978027cb26a410c1354f199a05edb99b1ab03dd0346e2201525148 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.73": - version: 1.5.84 - resolution: "electron-to-chromium@npm:1.5.84" - checksum: 10c0/8362d556360eba420ea3475a7878c8fa8507a42c4ebfbf44108f6acc4edbe30a1cde79e95613bdc9ae6e7d73bf1776347cf7f615c1a220f63e34a0fa029568e0 - languageName: node - linkType: hard - -"email-templates@npm:^2.7.1": - version: 2.7.1 - resolution: "email-templates@npm:2.7.1" - dependencies: - bluebird: "npm:^3.0.0" - consolidate: "npm:^0.14.2" - debug: "npm:^2.2.0" - glob: "npm:^6.0.0" - juice: "npm:^4.1.0" - lodash: "npm:^4.0.1" - checksum: 10c0/dad652679e8da4ae47a86fa8d7bcd708fab4aa866b4a397605b7f55a437d2cf8b3b05d9dc4a04d39d2773364d09fe17e092b1e9b3673eb8c1f9d97735b4607d0 - languageName: node - linkType: hard - -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec - languageName: node - linkType: hard - -"encodeurl@npm:~2.0.0": - version: 2.0.0 - resolution: "encodeurl@npm:2.0.0" - checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: "npm:^1.4.0" - checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.15.0": - version: 5.18.0 - resolution: "enhanced-resolve@npm:5.18.0" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10c0/5fcc264a6040754ab5b349628cac2bb5f89cee475cbe340804e657a5b9565f70e6aafb338d5895554eb0ced9f66c50f38a255274a0591dcb64ee17c549c459ce - languageName: node - linkType: hard - -"enquirer@npm:~2.3.6": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: "npm:^4.1.1" - checksum: 10c0/8e070e052c2c64326a2803db9084d21c8aaa8c688327f133bf65c4a712586beb126fd98c8a01cfb0433e82a4bd3b6262705c55a63e0f7fb91d06b9cedbde9a11 - languageName: node - linkType: hard - -"entities@npm:1.0": - version: 1.0.0 - resolution: "entities@npm:1.0.0" - checksum: 10c0/fd382add860bab507c942a054ef98445028bf988d16f53cbae24c70533c280d4ea116a5bc6308f6ca66901818faf4f495316f9873c6337af7cffaaf3859da407 - languageName: node - linkType: hard - -"entities@npm:^1.1.1, entities@npm:~1.1.1": - version: 1.1.2 - resolution: "entities@npm:1.1.2" - checksum: 10c0/5b12fa8c4fb942f88af6f8791bbe7be0a59ebd91c8933cee091d94455efd1eeb200418c7b1bc8dd0f74cdd4db8cf4538eb043db14cfd1919130c25d8c6095215 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 - languageName: node - linkType: hard - -"entities@npm:^3.0.1": - version: 3.0.1 - resolution: "entities@npm:3.0.1" - checksum: 10c0/2d93f48fd86de0b0ed8ee34456aa47b4e74a916a5e663cfcc7048302e2c7e932002926daf5a00ad6d5691e3c90673a15d413704d86d7e1b9532f9bc00d975590 - languageName: node - linkType: hard - -"entities@npm:^4.2.0, entities@npm:^4.4.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"envinfo@npm:7.13.0": - version: 7.13.0 - resolution: "envinfo@npm:7.13.0" - bin: - envinfo: dist/cli.js - checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce - languageName: node - linkType: hard - -"es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9": - version: 1.23.9 - resolution: "es-abstract@npm:1.23.9" - dependencies: - array-buffer-byte-length: "npm:^1.0.2" - arraybuffer.prototype.slice: "npm:^1.0.4" - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - data-view-buffer: "npm:^1.0.2" - data-view-byte-length: "npm:^1.0.2" - data-view-byte-offset: "npm:^1.0.1" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-set-tostringtag: "npm:^2.1.0" - es-to-primitive: "npm:^1.3.0" - function.prototype.name: "npm:^1.1.8" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.0" - get-symbol-description: "npm:^1.1.0" - globalthis: "npm:^1.0.4" - gopd: "npm:^1.2.0" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - internal-slot: "npm:^1.1.0" - is-array-buffer: "npm:^3.0.5" - is-callable: "npm:^1.2.7" - is-data-view: "npm:^1.0.2" - is-regex: "npm:^1.2.1" - is-shared-array-buffer: "npm:^1.0.4" - is-string: "npm:^1.1.1" - is-typed-array: "npm:^1.1.15" - is-weakref: "npm:^1.1.0" - math-intrinsics: "npm:^1.1.0" - object-inspect: "npm:^1.13.3" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.7" - own-keys: "npm:^1.0.1" - regexp.prototype.flags: "npm:^1.5.3" - safe-array-concat: "npm:^1.1.3" - safe-push-apply: "npm:^1.0.0" - safe-regex-test: "npm:^1.1.0" - set-proto: "npm:^1.0.0" - string.prototype.trim: "npm:^1.2.10" - string.prototype.trimend: "npm:^1.0.9" - string.prototype.trimstart: "npm:^1.0.8" - typed-array-buffer: "npm:^1.0.3" - typed-array-byte-length: "npm:^1.0.3" - typed-array-byte-offset: "npm:^1.0.4" - typed-array-length: "npm:^1.0.7" - unbox-primitive: "npm:^1.1.0" - which-typed-array: "npm:^1.1.18" - checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b - languageName: node - linkType: hard - -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 10c0/4b7617d3fbd460d6f051f684ceca6cf7e88e6724671d9480388d3ecdd72119ddaa46ca31f2c69c5426a82e4b3091c1e81867c71dcdc453565cd90005ff2c382d - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.0.0, es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.5.3": - version: 1.6.0 - resolution: "es-module-lexer@npm:1.6.0" - checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.2": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" - dependencies: - hasown: "npm:^2.0.0" - checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.3.0": - version: 1.3.0 - resolution: "es-to-primitive@npm:1.3.0" - dependencies: - is-callable: "npm:^1.2.7" - is-date-object: "npm:^1.0.5" - is-symbol: "npm:^1.0.4" - checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b - languageName: node - linkType: hard - -"es6-error@npm:^4.1.1": - version: 4.1.1 - resolution: "es6-error@npm:4.1.1" - checksum: 10c0/357663fb1e845c047d548c3d30f86e005db71e122678f4184ced0693f634688c3f3ef2d7de7d4af732f734de01f528b05954e270f06aa7d133679fb9fe6600ef - languageName: node - linkType: hard - -"escalade@npm:^3.1.1, escalade@npm:^3.2.0": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 - languageName: node - linkType: hard - -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - -"eslint-config-airbnb-base@npm:^15.0.0": - version: 15.0.0 - resolution: "eslint-config-airbnb-base@npm:15.0.0" - dependencies: - confusing-browser-globals: "npm:^1.0.10" - object.assign: "npm:^4.1.2" - object.entries: "npm:^1.1.5" - semver: "npm:^6.3.0" - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f - languageName: node - linkType: hard - -"eslint-config-airbnb@npm:^19.0.4": - version: 19.0.4 - resolution: "eslint-config-airbnb@npm:19.0.4" - dependencies: - eslint-config-airbnb-base: "npm:^15.0.0" - object.assign: "npm:^4.1.2" - object.entries: "npm:^1.1.5" - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.28.0 - eslint-plugin-react-hooks: ^4.3.0 - checksum: 10c0/867feeda45c4b480b1b8eff8fabc1bb107e837da8b48e5039e0c175ae6ad34af383b1924fc163bbfcef24a324e6651b1515e5bd12cbcbb19535a8838e2544a02 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^9.1.0": - version: 9.1.0 - resolution: "eslint-config-prettier@npm:9.1.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: "npm:^3.2.7" - is-core-module: "npm:^2.13.0" - resolve: "npm:^1.22.4" - checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 - languageName: node - linkType: hard - -"eslint-import-resolver-typescript@npm:^3.6.1": - version: 3.7.0 - resolution: "eslint-import-resolver-typescript@npm:3.7.0" - dependencies: - "@nolyfill/is-core-module": "npm:1.0.39" - debug: "npm:^4.3.7" - enhanced-resolve: "npm:^5.15.0" - fast-glob: "npm:^3.3.2" - get-tsconfig: "npm:^4.7.5" - is-bun-module: "npm:^1.0.2" - is-glob: "npm:^4.0.3" - stable-hash: "npm:^0.0.4" - peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - eslint-plugin-import-x: "*" - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - checksum: 10c0/b1dec542a31486b3b5730f71f08a8ee2ac4915dbc4aa1493fd15bc8fcadcb029772ab39a425824c235045b3a7e629290a339d4a7e7f3dd32b24e715106352d40 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.12.0": - version: 2.12.0 - resolution: "eslint-module-utils@npm:2.12.0" - dependencies: - debug: "npm:^3.2.7" - peerDependenciesMeta: - eslint: - optional: true - checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 - languageName: node - linkType: hard - -"eslint-plugin-es@npm:^3.0.0": - version: 3.0.1 - resolution: "eslint-plugin-es@npm:3.0.1" - dependencies: - eslint-utils: "npm:^2.0.0" - regexpp: "npm:^3.0.0" - peerDependencies: - eslint: ">=4.19.1" - checksum: 10c0/12ae730aa9603e680af048e1653aac15e529411b68b8d0da6e290700b17c695485af7c3f5360f531f80970786cab7288c2c1d4a58c35ec1bb89649897c016c4a - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.29.1": - version: 2.31.0 - resolution: "eslint-plugin-import@npm:2.31.0" - dependencies: - "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.8" - array.prototype.findlastindex: "npm:^1.2.5" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" - debug: "npm:^3.2.7" - doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.0" - hasown: "npm:^2.0.2" - is-core-module: "npm:^2.15.1" - is-glob: "npm:^4.0.3" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.0" - semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.8" - tsconfig-paths: "npm:^3.15.0" - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a - languageName: node - linkType: hard - -"eslint-plugin-jest@npm:^27.9.0": - version: 27.9.0 - resolution: "eslint-plugin-jest@npm:27.9.0" - dependencies: - "@typescript-eslint/utils": "npm:^5.10.0" - peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: "*" - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 10c0/b8b09f7d8ba3d84a8779a6e95702a6e4dce45ab034e4edf5ddb631e77cd38dcdf791dfd9228e0a0d1d80d1eb2d278deb62ad2ec39f10fb8fd43cec07304e0c38 - languageName: node - linkType: hard - -"eslint-plugin-jsdoc@npm:^48.2.1": - version: 48.11.0 - resolution: "eslint-plugin-jsdoc@npm:48.11.0" - dependencies: - "@es-joy/jsdoccomment": "npm:~0.46.0" - are-docs-informative: "npm:^0.0.2" - comment-parser: "npm:1.4.1" - debug: "npm:^4.3.5" - escape-string-regexp: "npm:^4.0.0" - espree: "npm:^10.1.0" - esquery: "npm:^1.6.0" - parse-imports: "npm:^2.1.1" - semver: "npm:^7.6.3" - spdx-expression-parse: "npm:^4.0.0" - synckit: "npm:^0.9.1" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/f78bac109e62f838c14f90ebd572a06a865f2896a16201c9324cb92be25b5ba8deb54ee1d8ea36232ee53a41c177d5d5ac80662c0fe2479d1e1e1e7633385659 - languageName: node - linkType: hard - -"eslint-plugin-node@npm:^11.1.0": - version: 11.1.0 - resolution: "eslint-plugin-node@npm:11.1.0" - dependencies: - eslint-plugin-es: "npm:^3.0.0" - eslint-utils: "npm:^2.0.0" - ignore: "npm:^5.1.1" - minimatch: "npm:^3.0.4" - resolve: "npm:^1.10.1" - semver: "npm:^6.1.0" - peerDependencies: - eslint: ">=5.16.0" - checksum: 10c0/c7716adac4020cb852fd2410dcd8bdb13a227004de77f96d7f9806d0cf2274f24e0920a7ca73bcd72d90003696c1f17fdd9fe3ca218e64ee03dc2b840e4416fa - languageName: node - linkType: hard - -"eslint-plugin-prettier@npm:^5.1.3": - version: 5.2.3 - resolution: "eslint-plugin-prettier@npm:5.2.3" - dependencies: - prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.9.1" - peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" - peerDependenciesMeta: - "@types/eslint": - optional: true - eslint-config-prettier: - optional: true - checksum: 10c0/60d9c03491ec6080ac1d71d0bee1361539ff6beb9b91ac98cfa7176c9ed52b7dbe7119ebee5b441b479d447d17d802a4a492ee06095ef2f22c460e3dd6459302 - languageName: node - linkType: hard - -"eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^4.1.1" - checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 - languageName: node - linkType: hard - -"eslint-utils@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" - dependencies: - eslint-visitor-keys: "npm:^1.1.0" - checksum: 10c0/69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^1.1.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 - languageName: node - linkType: hard - -"eslint@npm:^8.2.0": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.1" - "@humanwhocodes/config-array": "npm:^0.13.0" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" - bin: - eslint: bin/eslint.js - checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 - languageName: node - linkType: hard - -"espree@npm:^10.1.0": - version: 10.3.0 - resolution: "espree@npm:10.3.0" - dependencies: - acorn: "npm:^8.14.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2, esquery@npm:^1.6.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 - languageName: node - linkType: hard - -"etag@npm:^1.8.1, etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 - languageName: node - linkType: hard - -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b - languageName: node - linkType: hard - -"eventemitter2@npm:^6.4.9": - version: 6.4.9 - resolution: "eventemitter2@npm:6.4.9" - checksum: 10c0/b2adf7d9f1544aa2d95ee271b0621acaf1e309d85ebcef1244fb0ebc7ab0afa6ffd5e371535d0981bc46195ad67fd6ff57a8d1db030584dee69aa5e371a27ea7 - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.4": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b - languageName: node - linkType: hard - -"events@npm:^3.3.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 - languageName: node - linkType: hard - -"execa@npm:5.0.0": - version: 5.0.0 - resolution: "execa@npm:5.0.0" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/e110add7ca0de63aea415385ebad7236c8de281d5d9a916dbd69f59009dac3d5d631e6252c2ea5d0258220b0d22acf25649b2caf05fa162eaa1401339fc69ba4 - languageName: node - linkType: hard - -"execa@npm:^5.1.1": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f - languageName: node - linkType: hard - -"exit-x@npm:^0.2.2": - version: 0.2.2 - resolution: "exit-x@npm:0.2.2" - checksum: 10c0/212a7a095ca5540e9581f1ef2d1d6a40df7a6027c8cc96e78ce1d16b86d1a88326d4a0eff8dff2b5ec1e68bb0c1edd5d0dfdde87df1869bf7514d4bc6a5cbd72 - languageName: node - linkType: hard - -"expand-template@npm:^2.0.3": - version: 2.0.3 - resolution: "expand-template@npm:2.0.3" - checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 - languageName: node - linkType: hard - -"expect-type@npm:^1.2.2": - version: 1.2.2 - resolution: "expect-type@npm:1.2.2" - checksum: 10c0/6019019566063bbc7a690d9281d920b1a91284a4a093c2d55d71ffade5ac890cf37a51e1da4602546c4b56569d2ad2fc175a2ccee77d1ae06cb3af91ef84f44b - languageName: node - linkType: hard - -"expect@npm:30.0.5, expect@npm:^30.0.0": - version: 30.0.5 - resolution: "expect@npm:30.0.5" - dependencies: - "@jest/expect-utils": "npm:30.0.5" - "@jest/get-type": "npm:30.0.1" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - checksum: 10c0/e08e4ced2856a0898b3a4e8d09aab7f8e2212cde701e41a560c3ab7e9053517947ff1a762fc425dbe0c48ed54e131aa7190de67a402f98b4e5ada23eb21c0a9f - languageName: node - linkType: hard - -"expo-server-sdk@npm:^3.4.0": - version: 3.13.0 - resolution: "expo-server-sdk@npm:3.13.0" - dependencies: - node-fetch: "npm:^2.6.0" - promise-limit: "npm:^2.7.0" - promise-retry: "npm:^2.0.1" - checksum: 10c0/08fbebd2d6a38ff9af37c9dc0a3d9a33c16dff6908078716cd887fbf8d08d50167d9fa4ec7713e452935c6ede8f29233d533b166e91118eb0db56280282645f4 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 - languageName: node - linkType: hard - -"express-session@npm:^1.17.0": - version: 1.18.1 - resolution: "express-session@npm:1.18.1" - dependencies: - cookie: "npm:0.7.2" - cookie-signature: "npm:1.0.7" - debug: "npm:2.6.9" - depd: "npm:~2.0.0" - on-headers: "npm:~1.0.2" - parseurl: "npm:~1.3.3" - safe-buffer: "npm:5.2.1" - uid-safe: "npm:~2.1.5" - checksum: 10c0/7999f128df1528430044c97bb1aac95093afaee86c5fa54b2890c4aad9898d79745301f8c90c2df057d6dfe7af7f8ee220340bf5eb53dca5eff37e52cc2fbec7 - languageName: node - linkType: hard - -"extend@npm:^3.0.0, extend@npm:~3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 - languageName: node - linkType: hard - -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"extsprintf@npm:1.3.0": - version: 1.3.0 - resolution: "extsprintf@npm:1.3.0" - checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 - languageName: node - linkType: hard - -"extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-diff@npm:^1.1.2": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 - languageName: node - linkType: hard - -"fastest-validator@npm:^1.19.0": - version: 1.19.0 - resolution: "fastest-validator@npm:1.19.0" - checksum: 10c0/86dc0620a3cb593378f90017e45c4843a9f40442a1df84ce76cdf68f205dbf45a194aee1ed68d25391ec15ad4b23febf3e4fda9d2f6218e9655cc649beaf0d15 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.18.0 - resolution: "fastq@npm:1.18.0" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.2": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: "npm:2.1.1" - checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 - languageName: node - linkType: hard - -"fdir@npm:^6.4.4": - version: 6.4.6 - resolution: "fdir@npm:6.4.6" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 - languageName: node - linkType: hard - -"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": - version: 3.2.0 - resolution: "fetch-blob@npm:3.2.0" - dependencies: - node-domexception: "npm:^1.0.0" - web-streams-polyfill: "npm:^3.0.3" - checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 - languageName: node - linkType: hard - -"figures@npm:3.2.0, figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd - languageName: node - linkType: hard - -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: "npm:^5.0.1" - checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^2.0.0": - version: 2.1.0 - resolution: "find-up@npm:2.1.0" - dependencies: - locate-path: "npm:^2.0.0" - checksum: 10c0/c080875c9fe28eb1962f35cbe83c683796a0321899f1eed31a37577800055539815de13d53495049697d3ba313013344f843bb9401dd337a1b832be5edfc6840 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.3" - rimraf: "npm:^3.0.2" - checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 - languageName: node - linkType: hard - -"flat@npm:^5.0.2": - version: 5.0.2 - resolution: "flat@npm:5.0.2" - bin: - flat: cli.js - checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.3.2 - resolution: "flatted@npm:3.3.2" - checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6, follow-redirects@npm:^1.5.1": - version: 1.15.9 - resolution: "follow-redirects@npm:1.15.9" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: "npm:^1.1.3" - checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 - languageName: node - linkType: hard - -"forever-agent@npm:~0.6.1": - version: 0.6.1 - resolution: "forever-agent@npm:0.6.1" - checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c - languageName: node - linkType: hard - -"form-data@npm:^2.3.1": - version: 2.5.2 - resolution: "form-data@npm:2.5.2" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - safe-buffer: "npm:^5.2.1" - checksum: 10c0/af7cb13fc8423ff95fd59c62d101c84b5458a73e1e426b0bc459afbf5b93b1e447dc6c225ac31c6df59f36b209904a3f1a10b4eb9e7a17e0fe394019749142cc - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.1 - resolution: "form-data@npm:4.0.1" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - mime-types: "npm:^2.1.12" - checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"form-data@npm:~2.3.2": - version: 2.3.3 - resolution: "form-data@npm:2.3.3" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 - languageName: node - linkType: hard - -"formdata-polyfill@npm:^4.0.10": - version: 4.0.10 - resolution: "formdata-polyfill@npm:4.0.10" - dependencies: - fetch-blob: "npm:^3.1.2" - checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 - languageName: node - linkType: hard - -"formidable@npm:^1.2.0": - version: 1.2.6 - resolution: "formidable@npm:1.2.6" - checksum: 10c0/9ebc45f434785051d4ecab28be3356c7a172a112119f5dd7aafc393ab7f6a6f3baa2446e5215ce21bf094c4c24dfb4bf483117d07961862e04ad11a25b9b577b - languageName: node - linkType: hard - -"fresh@npm:0.5.2, fresh@npm:^0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a - languageName: node - linkType: hard - -"front-matter@npm:^4.0.2": - version: 4.0.2 - resolution: "front-matter@npm:4.0.2" - dependencies: - js-yaml: "npm:^3.13.1" - checksum: 10c0/7a0df5ca37428dd563c057bc17a8940481fe53876609bcdc443a02ce463c70f1842c7cb4628b80916de46a253732794b36fb6a31105db0f185698a93acee4011 - languageName: node - linkType: hard - -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 - languageName: node - linkType: hard - -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": - version: 11.3.0 - resolution: "fs-extra@npm:11.3.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a - languageName: node - linkType: hard - -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 - languageName: node - linkType: hard - -"fs-extra@npm:^9.0.1": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: "npm:^1.0.0" - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"fsevents@npm:^2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": - version: 1.1.8 - resolution: "function.prototype.name@npm:1.1.8" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - functions-have-names: "npm:^1.2.3" - hasown: "npm:^2.0.2" - is-callable: "npm:^1.2.7" - checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.3": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca - languageName: node - linkType: hard - -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: "npm:^1.0.3 || ^2.0.0" - color-support: "npm:^1.1.2" - console-control-strings: "npm:^1.0.0" - has-unicode: "npm:^2.0.1" - object-assign: "npm:^4.1.1" - signal-exit: "npm:^3.0.0" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - wide-align: "npm:^1.1.2" - checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": - version: 1.3.0 - resolution: "get-intrinsic@npm:1.3.0" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be - languageName: node - linkType: hard - -"get-pkg-repo@npm:^4.2.1": - version: 4.2.1 - resolution: "get-pkg-repo@npm:4.2.1" - dependencies: - "@hutson/parse-repository-url": "npm:^3.0.0" - hosted-git-info: "npm:^4.0.0" - through2: "npm:^2.0.0" - yargs: "npm:^16.2.0" - bin: - get-pkg-repo: src/cli.js - checksum: 10c0/1338d2e048a594da4a34e7dd69d909376d72784f5ba50963a242b4b35db77533786f618b3f6a9effdee2af20af4917a3b7cf12533b4575d7f9c163886be1fb62 - languageName: node - linkType: hard - -"get-port@npm:5.1.1, get-port@npm:^5.1.1": - version: 5.1.1 - resolution: "get-port@npm:5.1.1" - checksum: 10c0/2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c - languageName: node - linkType: hard - -"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"get-stdin@npm:^7.0.0": - version: 7.0.0 - resolution: "get-stdin@npm:7.0.0" - checksum: 10c0/84d7850d17727f14d582670c4222b167317da43b296b88717abca989b6192eb80f66ca62833d63e749b3c984f3f9113cb6794dc9ecccb29969b8162565162033 - languageName: node - linkType: hard - -"get-stream@npm:6.0.0": - version: 6.0.0 - resolution: "get-stream@npm:6.0.0" - checksum: 10c0/7cd835cb9180041e7be2cc3de236e5db9f2144515921aeb60ae78d3a46f9944439d654c2aae5b0191e41eb6e2500f0237494a2e6c0790367183f788d1c9f6dd6 - languageName: node - linkType: hard - -"get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" - dependencies: - pump: "npm:^3.0.0" - checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.1.0": - version: 1.1.0 - resolution: "get-symbol-description@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b - languageName: node - linkType: hard - -"get-tsconfig@npm:^4.7.5": - version: 4.9.0 - resolution: "get-tsconfig@npm:4.9.0" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/b1b83a2f65aa589cd99036c21de928bea7424be6575a2736cb4de5fb5760c874d64ac69809f4691c1262a4e3c72c646fd2cb758e406acbff7f37ee86301943ee - languageName: node - linkType: hard - -"getpass@npm:^0.1.1": - version: 0.1.7 - resolution: "getpass@npm:0.1.7" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f - languageName: node - linkType: hard - -"git-raw-commits@npm:^3.0.0": - version: 3.0.0 - resolution: "git-raw-commits@npm:3.0.0" - dependencies: - dargs: "npm:^7.0.0" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - git-raw-commits: cli.js - checksum: 10c0/2a5db2e4b5b1ef7b6ecbdc175e559920a5400cbdb8d36f130aaef3588bfd74d8650b354a51ff89e0929eadbb265a00078a6291ff26248a525f0b2f079b001bf6 - languageName: node - linkType: hard - -"git-remote-origin-url@npm:^2.0.0": - version: 2.0.0 - resolution: "git-remote-origin-url@npm:2.0.0" - dependencies: - gitconfiglocal: "npm:^1.0.0" - pify: "npm:^2.3.0" - checksum: 10c0/3a846ce98ed36b2d0b801e8ec1ab299a236cfc6fa264bfdf9f42301abfdfd8715c946507fd83a10b9db449eb609ac6f8a2a341daf52e3af0000367487f486355 - languageName: node - linkType: hard - -"git-semver-tags@npm:^5.0.0": - version: 5.0.1 - resolution: "git-semver-tags@npm:5.0.1" - dependencies: - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - bin: - git-semver-tags: cli.js - checksum: 10c0/7cacba2f4ac19c0ccb8e6bb7301409376e5a2cc178692667afff453e6fe81f79b5f3f5040343e2be127a2f34977528d354de2aa32430917e90b64884debd3102 - languageName: node - linkType: hard - -"git-up@npm:^7.0.0": - version: 7.0.0 - resolution: "git-up@npm:7.0.0" - dependencies: - is-ssh: "npm:^1.4.0" - parse-url: "npm:^8.1.0" - checksum: 10c0/a3fa02e1a63c7c824b5ebbf23f4a9a6b34dd80031114c5dd8adb7ef53493642e39d3d80dfef4025a452128400c35c2c138d20a0f6ae5d7d7ef70d9ba13083d34 - languageName: node - linkType: hard - -"git-url-parse@npm:14.0.0": - version: 14.0.0 - resolution: "git-url-parse@npm:14.0.0" - dependencies: - git-up: "npm:^7.0.0" - checksum: 10c0/d360cf23c6278e302b74603f3dc490c3fe22e533d58b7f35e0295fad9af209ce5046a55950ccbf2f0d18de7931faefb4353e3f3fd3dda87fce77b409d48e0ba9 - languageName: node - linkType: hard - -"gitconfiglocal@npm:^1.0.0": - version: 1.0.0 - resolution: "gitconfiglocal@npm:1.0.0" - dependencies: - ini: "npm:^1.3.2" - checksum: 10c0/cfcb16344834113199f209f2758ced778dc30e075ddb49b5dde659b4dd2deadee824db0a1b77e1303cb594d9e8b2240da18c67705f657aa76affb444aa349005 - languageName: node - linkType: hard - -"github-from-package@npm:0.0.0": - version: 0.0.0 - resolution: "github-from-package@npm:0.0.0" - checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 - languageName: node - linkType: hard - -"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:7.1.4": - version: 7.1.4 - resolution: "glob@npm:7.1.4" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.0.4" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/7f6fcbf600eb2298cce34c65f6d8bbe6933ddd4f88aa5b38a9c6feec82b615bb33b63b120725303e89c4b50284413c21d2ff883414717a5c7d0c9f7cd7a0e5fe - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e - languageName: node - linkType: hard - -"glob@npm:^6.0.0": - version: 6.0.4 - resolution: "glob@npm:6.0.4" - dependencies: - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:2 || 3" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/520146ebce0f4594b8357338f86281b38ee14214debce398a2902176a28f18e0f98911ea48516d85022de64fbbaa57f074aa13715d1daa5d70e21b82cea22183 - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"glob@npm:^9.2.0": - version: 9.3.5 - resolution: "glob@npm:9.3.5" - dependencies: - fs.realpath: "npm:^1.0.0" - minimatch: "npm:^8.0.2" - minipass: "npm:^4.2.4" - path-scurry: "npm:^1.6.1" - checksum: 10c0/2f6c2b9ee019ee21dc258ae97a88719614591e4c979cb4580b1b9df6f0f778a3cb38b4bdaf18dfa584637ea10f89a3c5f2533a5e449cf8741514ad18b0951f2e - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd - languageName: node - linkType: hard - -"globalthis@npm:^1.0.4": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" - dependencies: - define-properties: "npm:^1.2.1" - gopd: "npm:^1.0.1" - checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 - languageName: node - linkType: hard - -"globby@npm:11.1.0, globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"google-libphonenumber@npm:^3.2.26": - version: 3.2.40 - resolution: "google-libphonenumber@npm:3.2.40" - checksum: 10c0/997857e0dfdd39b169171cfee72ba268e9b0f9c655317701e21f61b2725d48384df3b2dea6977b49fb47efbde319fd71a1f2ec46589e91ab832ada9f54793cff - languageName: node - linkType: hard - -"gopd@npm:^1.0.1, gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"got@npm:^11.8.0": - version: 11.8.6 - resolution: "got@npm:11.8.6" - dependencies: - "@sindresorhus/is": "npm:^4.0.0" - "@szmarczak/http-timer": "npm:^4.0.5" - "@types/cacheable-request": "npm:^6.0.1" - "@types/responselike": "npm:^1.0.0" - cacheable-lookup: "npm:^5.0.3" - cacheable-request: "npm:^7.0.2" - decompress-response: "npm:^6.0.0" - http2-wrapper: "npm:^1.0.0-beta.5.2" - lowercase-keys: "npm:^2.0.0" - p-cancelable: "npm:^2.0.0" - responselike: "npm:^2.0.0" - checksum: 10c0/754dd44877e5cf6183f1e989ff01c648d9a4719e357457bd4c78943911168881f1cfb7b2cb15d885e2105b3ad313adb8f017a67265dd7ade771afdb261ee8cb1 - languageName: node - linkType: hard - -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 - languageName: node - linkType: hard - -"handlebars@npm:^4.7.7": - version: 4.7.8 - resolution: "handlebars@npm:4.7.8" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.2" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d - languageName: node - linkType: hard - -"har-schema@npm:^2.0.0": - version: 2.0.0 - resolution: "har-schema@npm:2.0.0" - checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 - languageName: node - linkType: hard - -"har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" - dependencies: - ajv: "npm:^6.12.3" - har-schema: "npm:^2.0.0" - checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e - languageName: node - linkType: hard - -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: 10c0/febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.2": - version: 1.1.0 - resolution: "has-bigints@npm:1.1.0" - checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: "npm:^1.0.0" - checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 - languageName: node - linkType: hard - -"has-proto@npm:^1.2.0": - version: 1.2.0 - resolution: "has-proto@npm:1.2.0" - dependencies: - dunder-proto: "npm:^1.0.0" - checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c - languageName: node - linkType: hard - -"hash.js@npm:^1.1.7": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: "npm:^2.0.3" - minimalistic-assert: "npm:^1.0.1" - checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 - languageName: node - linkType: hard - -"hasown@npm:^2.0.0, hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"he@npm:^1.0.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 - languageName: node - linkType: hard - -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 - languageName: node - linkType: hard - -"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: "npm:^6.0.0" - checksum: 10c0/150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 - languageName: node - linkType: hard - -"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": - version: 7.0.2 - resolution: "hosted-git-info@npm:7.0.2" - dependencies: - lru-cache: "npm:^10.0.1" - checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 - languageName: node - linkType: hard - -"html-to-text@npm:^2.1.0": - version: 2.1.3 - resolution: "html-to-text@npm:2.1.3" - dependencies: - he: "npm:^1.0.0" - htmlparser: "npm:^1.7.7" - optimist: "npm:^0.6.1" - underscore: "npm:^1.8.3" - underscore.string: "npm:^3.2.3" - bin: - html-to-text: ./bin/cli.js - checksum: 10c0/bd37935b7370b8fb294efb96af1517f8554285349fa376d6e8b77ed3db6a1300dd30c0513d99a1640b9ba9758bf18c8d2b68f60abdfc4481872748dffe4b06fa - languageName: node - linkType: hard - -"htmlparser2@npm:^3.9.1": - version: 3.10.1 - resolution: "htmlparser2@npm:3.10.1" - dependencies: - domelementtype: "npm:^1.3.1" - domhandler: "npm:^2.3.0" - domutils: "npm:^1.5.1" - entities: "npm:^1.1.1" - inherits: "npm:^2.0.1" - readable-stream: "npm:^3.1.1" - checksum: 10c0/b1424536ff062088501efa06a2afd478545d3134a5ad2e28bbe02dc2d092784982286b90f1c87fa3d86692958dbfb8936352dfd71d1cb2ff7cb61208c00fcdb1 - languageName: node - linkType: hard - -"htmlparser2@npm:^4.0.0": - version: 4.1.0 - resolution: "htmlparser2@npm:4.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^3.0.0" - domutils: "npm:^2.0.0" - entities: "npm:^2.0.0" - checksum: 10c0/a2d8d12ba45534a657d1965b71d4d581e521d14b7fc966ef031722cdd3895a23ce769fed63024e796538b3fc370e894b3a2f5b5071e54120905a6111cd3f88b0 - languageName: node - linkType: hard - -"htmlparser2@npm:^6.0.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.0.0" - domutils: "npm:^2.5.2" - entities: "npm:^2.0.0" - checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 - languageName: node - linkType: hard - -"htmlparser2@npm:^7.0.0": - version: 7.2.0 - resolution: "htmlparser2@npm:7.2.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.2.2" - domutils: "npm:^2.8.0" - entities: "npm:^3.0.1" - checksum: 10c0/7e1fa7f3b2635f2a1c5272765e25aab33b241d84a43e9d27f28a0b7166b51a8025dec40a6a29af38d6a698a2f1d2983cb43e5c61d4e07ec5aa9df672a7460e16 - languageName: node - linkType: hard - -"htmlparser2@npm:^8.0.0": - version: 8.0.2 - resolution: "htmlparser2@npm:8.0.2" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - domutils: "npm:^3.0.1" - entities: "npm:^4.4.0" - checksum: 10c0/609cca85886d0bf2c9a5db8c6926a89f3764596877492e2caa7a25a789af4065bc6ee2cdc81807fe6b1d03a87bf8a373b5a754528a4cc05146b713c20575aab4 - languageName: node - linkType: hard - -"htmlparser2@npm:~3.8.1": - version: 3.8.3 - resolution: "htmlparser2@npm:3.8.3" - dependencies: - domelementtype: "npm:1" - domhandler: "npm:2.3" - domutils: "npm:1.5" - entities: "npm:1.0" - readable-stream: "npm:1.1" - checksum: 10c0/253a673976c1e2c2b8429e45830a5a89c3f23bb6dd34f5958aefbb104a8caf1268515b535277714deb034d894aa0bd315e901cbf2ec906e8ed0d1e49b2d73b3e - languageName: node - linkType: hard - -"htmlparser@npm:^1.7.7": - version: 1.7.7 - resolution: "htmlparser@npm:1.7.7" - checksum: 10c0/b4ef1d2031f1370f274f646f824da10c8d946e671001d92878a4db77332abe84541667728063bb374a2742659b9549fd7d2e7ecdf71605ff016ef18b328becf5 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc - languageName: node - linkType: hard - -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: "npm:2.0.0" - inherits: "npm:2.0.4" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - toidentifier: "npm:1.0.1" - checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 - languageName: node - linkType: hard - -"http-link-header@npm:^1.0.2, http-link-header@npm:^1.1.1": - version: 1.1.3 - resolution: "http-link-header@npm:1.1.3" - checksum: 10c0/56698a9d3aee4d5319d1cdfe62ef5d7179f179ec1e6432d23c9e6a0c896be642ba47a4985a45419cff91008032aef920aca9df94ff9e763e646c83bf54b7243d - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"http-signature-header@npm:^1.3.1": - version: 1.3.1 - resolution: "http-signature-header@npm:1.3.1" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/c44fb0129322c3a7825f589c82fa37d546a0cdc9d06052545208d8c0edda240aa4888e07d667d5c221e94bd583d016250829c8a510114da0d3643185ec8236b5 - languageName: node - linkType: hard - -"http-signature@npm:^1.3.4": - version: 1.4.0 - resolution: "http-signature@npm:1.4.0" - dependencies: - assert-plus: "npm:^1.0.0" - jsprim: "npm:^2.0.2" - sshpk: "npm:^1.18.0" - checksum: 10c0/b9806f5a9ed82a146589837d175c43b596b1cc8c9431665e83d47c152aa8a4629dd1b1e050f8f56e7f17f62cf97b58e888775093310441ddee5f105f28646b2b - languageName: node - linkType: hard - -"http-signature@npm:~1.2.0": - version: 1.2.0 - resolution: "http-signature@npm:1.2.0" - dependencies: - assert-plus: "npm:^1.0.0" - jsprim: "npm:^1.2.2" - sshpk: "npm:^1.7.0" - checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 - languageName: node - linkType: hard - -"http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.3 - resolution: "http2-wrapper@npm:1.0.3" - dependencies: - quick-lru: "npm:^5.1.1" - resolve-alpn: "npm:^1.0.0" - checksum: 10c0/6a9b72a033e9812e1476b9d776ce2f387bc94bc46c88aea0d5dab6bd47d0a539b8178830e77054dd26d1142c866d515a28a4dc7c3ff4232c88ff2ebe4f5d12d1 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: "npm:6" - debug: "npm:4" - checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a - languageName: node - linkType: hard - -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb - languageName: node - linkType: hard - -"ignore-walk@npm:^6.0.4": - version: 6.0.5 - resolution: "ignore-walk@npm:6.0.5" - dependencies: - minimatch: "npm:^9.0.0" - checksum: 10c0/8bd6d37c82400016c7b6538b03422dde8c9d7d3e99051c8357dd205d499d42828522fb4fbce219c9c21b4b069079445bacdc42bbd3e2e073b52856c2646d8a39 - languageName: node - linkType: hard - -"ignore@npm:^5.0.4, ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.3.1": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"image-size@npm:^0.7.3": - version: 0.7.5 - resolution: "image-size@npm:0.7.5" - bin: - image-size: bin/image-size.js - checksum: 10c0/74e978c525e7d777df145bc66cfc4a4a7aa56de8e5daead3a69b0872082dbe385deb4a3b80799810df9e34b2031467412ae28810f2f65ec2e5fe08b895aa3491 - languageName: node - linkType: hard - -"immediate@npm:~3.0.5": - version: 3.0.6 - resolution: "immediate@npm:3.0.6" - checksum: 10c0/f8ba7ede69bee9260241ad078d2d535848745ff5f6995c7c7cb41cfdc9ccc213f66e10fa5afb881f90298b24a3f7344b637b592beb4f54e582770cdce3f1f039 - languageName: node - linkType: hard - -"immutable@npm:^3.8.2": - version: 3.8.2 - resolution: "immutable@npm:3.8.2" - checksum: 10c0/fb6a2999ad3bda9e51741721e42547076dd492635ee4df9241224055fe953ec843583a700088cc4915f23dc326e5084f4e17f1bbd7388c3e872ef5a242e0ac5e - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 - languageName: node - linkType: hard - -"import-local@npm:3.1.0": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 - languageName: node - linkType: hard - -"import-local@npm:^3.2.0": - version: 3.2.0 - resolution: "import-local@npm:3.2.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"ini@npm:^1.3.2, ini@npm:^1.3.8, ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a - languageName: node - linkType: hard - -"ini@npm:^4.1.3": - version: 4.1.3 - resolution: "ini@npm:4.1.3" - checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 - languageName: node - linkType: hard - -"init-package-json@npm:6.0.3": - version: 6.0.3 - resolution: "init-package-json@npm:6.0.3" - dependencies: - "@npmcli/package-json": "npm:^5.0.0" - npm-package-arg: "npm:^11.0.0" - promzard: "npm:^1.0.0" - read: "npm:^3.0.1" - semver: "npm:^7.3.5" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/a80f024ee041a2cf4d3062ba936abf015cbc32bda625cabe994d1fa4bd942bb9af37a481afd6880d340d3e94d90bf97bed1a0a877cc8c7c9b48e723c2524ae74 - languageName: node - linkType: hard - -"inquirer@npm:^8.2.4": - version: 8.2.6 - resolution: "inquirer@npm:8.2.6" - dependencies: - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.1.1" - cli-cursor: "npm:^3.1.0" - cli-width: "npm:^3.0.0" - external-editor: "npm:^3.0.3" - figures: "npm:^3.0.0" - lodash: "npm:^4.17.21" - mute-stream: "npm:0.0.8" - ora: "npm:^5.4.1" - run-async: "npm:^2.4.0" - rxjs: "npm:^7.5.5" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - through: "npm:^2.3.6" - wrap-ansi: "npm:^6.0.1" - checksum: 10c0/eb5724de1778265323f3a68c80acfa899378cb43c24cdcb58661386500e5696b6b0b6c700e046b7aa767fe7b4823c6f04e6ddc268173e3f84116112529016296 - languageName: node - linkType: hard - -"internal-slot@npm:^1.1.0": - version: 1.1.0 - resolution: "internal-slot@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - hasown: "npm:^2.0.2" - side-channel: "npm:^1.1.0" - checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 - languageName: node - linkType: hard - -"ioredis@npm:^4.27.0": - version: 4.28.5 - resolution: "ioredis@npm:4.28.5" - dependencies: - cluster-key-slot: "npm:^1.1.0" - debug: "npm:^4.3.1" - denque: "npm:^1.1.0" - lodash.defaults: "npm:^4.2.0" - lodash.flatten: "npm:^4.4.0" - lodash.isarguments: "npm:^3.1.0" - p-map: "npm:^2.1.0" - redis-commands: "npm:1.7.0" - redis-errors: "npm:^1.2.0" - redis-parser: "npm:^3.0.0" - standard-as-callback: "npm:^2.1.0" - checksum: 10c0/6fd12957d2906f83d8aa662ba78d084df16dc7c1a0e6e18c512302ac94339dcd5936d2e7cd6f89e9e7b511e3cf96617ca2fdea63aa4679bfdf48aa2be441ad76 - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: "npm:1.1.0" - sprintf-js: "npm:^1.1.3" - checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc - languageName: node - linkType: hard - -"ipaddr.js@npm:^2.2.0": - version: 2.2.0 - resolution: "ipaddr.js@npm:2.2.0" - checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 - languageName: node - linkType: hard - -"is-arguments@npm:^1.0.4": - version: 1.2.0 - resolution: "is-arguments@npm:1.2.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": - version: 3.0.5 - resolution: "is-array-buffer@npm:3.0.5" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 - languageName: node - linkType: hard - -"is-async-function@npm:^2.0.0": - version: 2.1.0 - resolution: "is-async-function@npm:2.1.0" - dependencies: - call-bound: "npm:^1.0.3" - get-proto: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.2" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/5209b858c6d18d88a9fb56dea202a050d53d4b722448cc439fdca859b36e23edf27ee8c18958ba49330f1a71b8846576273f4581e1c0bb9d403738129d852fdb - languageName: node - linkType: hard - -"is-bigint@npm:^1.1.0": - version: 1.1.0 - resolution: "is-bigint@npm:1.1.0" - dependencies: - has-bigints: "npm:^1.0.2" - checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 - languageName: node - linkType: hard - -"is-boolean-object@npm:^1.2.1": - version: 1.2.1 - resolution: "is-boolean-object@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 - languageName: node - linkType: hard - -"is-bun-module@npm:^1.0.2": - version: 1.3.0 - resolution: "is-bun-module@npm:1.3.0" - dependencies: - semver: "npm:^7.6.3" - checksum: 10c0/2966744188fcd28e0123c52158c7073973f88babfa9ab04e2846ec5862d6b0f8f398df6413429d930f7c5ee6111ce2cbfb3eb8652d9ec42d4a37dc5089a866fb - languageName: node - linkType: hard - -"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f - languageName: node - linkType: hard - -"is-ci@npm:3.0.1": - version: 3.0.1 - resolution: "is-ci@npm:3.0.1" - dependencies: - ci-info: "npm:^3.2.0" - bin: - is-ci: bin.js - checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0, is-core-module@npm:^2.5.0": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd - languageName: node - linkType: hard - -"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": - version: 1.0.2 - resolution: "is-data-view@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.6" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 - languageName: node - linkType: hard - -"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": - version: 1.1.0 - resolution: "is-date-object@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc - languageName: node - linkType: hard - -"is-expression@npm:^4.0.0": - version: 4.0.0 - resolution: "is-expression@npm:4.0.0" - dependencies: - acorn: "npm:^7.1.1" - object-assign: "npm:^4.1.1" - checksum: 10c0/541831d39d3e7bfc8cecd966d6b0f3c0e6d9055342f17b634fb23e74f51ce90f1bfc3cf231c722fe003a61e8d4f0b9e07244fdaba57f4fc70a163c74006fd5a0 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-finalizationregistry@npm:^1.1.0": - version: 1.1.1 - resolution: "is-finalizationregistry@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d - languageName: node - linkType: hard - -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": - version: 1.1.0 - resolution: "is-generator-function@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - get-proto: "npm:^1.0.0" - has-tostringtag: "npm:^1.0.2" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 10c0/dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d - languageName: node - linkType: hard - -"is-map@npm:^2.0.3": - version: 2.0.3 - resolution: "is-map@npm:2.0.3" - checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc - languageName: node - linkType: hard - -"is-nan@npm:^1.3.0": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - checksum: 10c0/8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 - languageName: node - linkType: hard - -"is-number-object@npm:^1.1.1": - version: 1.1.1 - resolution: "is-number-object@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 - languageName: node - linkType: hard - -"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 10c0/daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: "npm:^3.0.1" - checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 - languageName: node - linkType: hard - -"is-plain-object@npm:^5.0.0": - version: 5.0.0 - resolution: "is-plain-object@npm:5.0.0" - checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c - languageName: node - linkType: hard - -"is-promise@npm:^2.0.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-regex@npm:^1.0.3, is-regex@npm:^1.2.1": - version: 1.2.1 - resolution: "is-regex@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - gopd: "npm:^1.2.0" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 - languageName: node - linkType: hard - -"is-set@npm:^2.0.3": - version: 2.0.3 - resolution: "is-set@npm:2.0.3" - checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.4": - version: 1.0.4 - resolution: "is-shared-array-buffer@npm:1.0.4" - dependencies: - call-bound: "npm:^1.0.3" - checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db - languageName: node - linkType: hard - -"is-ssh@npm:^1.4.0": - version: 1.4.0 - resolution: "is-ssh@npm:1.4.0" - dependencies: - protocols: "npm:^2.0.1" - checksum: 10c0/3eb30d1bcb4507cd25562e7ac61a1c0aa31772134c67cec9c3afe6f4d57ec17e8c2892600a608e8e583f32f53f36465b8968c0305f2855cfbff95acfd049e113 - languageName: node - linkType: hard - -"is-stream@npm:2.0.0": - version: 2.0.0 - resolution: "is-stream@npm:2.0.0" - checksum: 10c0/687f6bbd2b995573d33e6b40b2cbc8b9186a751aa3151c23e6fd2c4ca352e323a6dc010b09103f89c9ca0bf5c8c38f3fa8b74d5d9acd1c44f1499874d7e844f9 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 - languageName: node - linkType: hard - -"is-string@npm:^1.0.7, is-string@npm:^1.1.1": - version: 1.1.1 - resolution: "is-string@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": - version: 1.1.1 - resolution: "is-symbol@npm:1.1.1" - dependencies: - call-bound: "npm:^1.0.2" - has-symbols: "npm:^1.1.0" - safe-regex-test: "npm:^1.1.0" - checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e - languageName: node - linkType: hard - -"is-text-path@npm:^1.0.1": - version: 1.0.1 - resolution: "is-text-path@npm:1.0.1" - dependencies: - text-extensions: "npm:^1.0.0" - checksum: 10c0/61c8650c29548febb6bf69e9541fc11abbbb087a0568df7bc471ba264e95fb254def4e610631cbab4ddb0a1a07949d06416f4ebeaf37875023fb184cdb87ee84 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": - version: 1.1.15 - resolution: "is-typed-array@npm:1.1.15" - dependencies: - which-typed-array: "npm:^1.1.16" - checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 - languageName: node - linkType: hard - -"is-typedarray@npm:~1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec - languageName: node - linkType: hard - -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 - languageName: node - linkType: hard - -"is-weakmap@npm:^2.0.2": - version: 2.0.2 - resolution: "is-weakmap@npm:2.0.2" - checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": - version: 1.1.0 - resolution: "is-weakref@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b - languageName: node - linkType: hard - -"is-weakset@npm:^2.0.3": - version: 2.0.4 - resolution: "is-weakset@npm:2.0.4" - dependencies: - call-bound: "npm:^1.0.3" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 - languageName: node - linkType: hard - -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e - languageName: node - linkType: hard - -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd - languageName: node - linkType: hard - -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db - languageName: node - linkType: hard - -"isstream@npm:^0.1.2, isstream@npm:~0.1.2": - version: 0.1.2 - resolution: "isstream@npm:0.1.2" - checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2": - version: 6.0.3 - resolution: "istanbul-lib-instrument@npm:6.0.3" - dependencies: - "@babel/core": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^7.5.4" - checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^4.0.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^5.0.0": - version: 5.0.6 - resolution: "istanbul-lib-source-maps@npm:5.0.6" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.23" - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.7 - resolution: "istanbul-reports@npm:3.1.7" - dependencies: - html-escaper: "npm:^2.0.0" - istanbul-lib-report: "npm:^3.0.0" - checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.9.2 - resolution: "jake@npm:10.9.2" - dependencies: - async: "npm:^3.2.3" - chalk: "npm:^4.0.2" - filelist: "npm:^1.0.4" - minimatch: "npm:^3.1.2" - bin: - jake: bin/cli.js - checksum: 10c0/c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31 - languageName: node - linkType: hard - -"jest-changed-files@npm:30.0.5": - version: 30.0.5 - resolution: "jest-changed-files@npm:30.0.5" - dependencies: - execa: "npm:^5.1.1" - jest-util: "npm:30.0.5" - p-limit: "npm:^3.1.0" - checksum: 10c0/41ce090f324e8450443327f19f772a9c3f225b4b1374ba9704358f0c8b8cd91fd134fa41df7db4d278428ab974c432abc3eca9484e67c8f18528974378fddef6 - languageName: node - linkType: hard - -"jest-circus@npm:30.0.5": - version: 30.0.5 - resolution: "jest-circus@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/expect": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - co: "npm:^4.6.0" - dedent: "npm:^1.6.0" - is-generator-fn: "npm:^2.1.0" - jest-each: "npm:30.0.5" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - p-limit: "npm:^3.1.0" - pretty-format: "npm:30.0.5" - pure-rand: "npm:^7.0.0" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.6" - checksum: 10c0/028204897eee7bef2d04eea0216b48f94e3da77ff1d12b0e3a5e265e8e73bcd31192cec70282aa1ece91150c00fcb5662c2c68e86b3892cffbfbe7058fa7f4e5 - languageName: node - linkType: hard - -"jest-cli@npm:30.0.5": - version: 30.0.5 - resolution: "jest-cli@npm:30.0.5" - dependencies: - "@jest/core": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - exit-x: "npm:^0.2.2" - import-local: "npm:^3.2.0" - jest-config: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - yargs: "npm:^17.7.2" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: ./bin/jest.js - checksum: 10c0/bfcd7212db7825d06afaf01c19bd7168190e22220d300b6db31b3885943a31361e98c4a1bde466146368ad503ae6257a9630bc35b4a43ff0631d7a3f95b63e45 - languageName: node - linkType: hard - -"jest-config@npm:30.0.5": - version: 30.0.5 - resolution: "jest-config@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@jest/get-type": "npm:30.0.1" - "@jest/pattern": "npm:30.0.1" - "@jest/test-sequencer": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - babel-jest: "npm:30.0.5" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - deepmerge: "npm:^4.3.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - jest-circus: "npm:30.0.5" - jest-docblock: "npm:30.0.1" - jest-environment-node: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-runner: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - micromatch: "npm:^4.0.8" - parse-json: "npm:^5.2.0" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - strip-json-comments: "npm:^3.1.1" - peerDependencies: - "@types/node": "*" - esbuild-register: ">=3.4.0" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - esbuild-register: - optional: true - ts-node: - optional: true - checksum: 10c0/da68048801e6f6622bf6e9a361dcfb3859017bbd58fabcf53bade41157bdf31cc35a1bd3dab1e3cca86e69da23e2c27c7aa5e308efc04564a454e23de6f22062 - languageName: node - linkType: hard - -"jest-diff@npm:30.0.5": - version: 30.0.5 - resolution: "jest-diff@npm:30.0.5" - dependencies: - "@jest/diff-sequences": "npm:30.0.1" - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - pretty-format: "npm:30.0.5" - checksum: 10c0/b218ced37b7676f578ea866762f04caa74901bdcf3f593872aa9a4991a586302651a1d16bb0386772adacc7580a452ec621359af75d733c0b50ea947fe1881d3 - languageName: node - linkType: hard - -"jest-diff@npm:>=29.4.3 < 30, jest-diff@npm:^29.4.1": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.6.3" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 - languageName: node - linkType: hard - -"jest-docblock@npm:30.0.1": - version: 30.0.1 - resolution: "jest-docblock@npm:30.0.1" - dependencies: - detect-newline: "npm:^3.1.0" - checksum: 10c0/f9bad2651db8afa029867ea7a40f422c9d73c67657360297371846a314a40c8786424be00483261df9137499f52c2af28cd458fbd15a7bf7fac8775b4bcd6ee1 - languageName: node - linkType: hard - -"jest-each@npm:30.0.5": - version: 30.0.5 - resolution: "jest-each@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - "@jest/types": "npm:30.0.5" - chalk: "npm:^4.1.2" - jest-util: "npm:30.0.5" - pretty-format: "npm:30.0.5" - checksum: 10c0/fe7509bfd8b0c8553bbdaffda5d3b674a4da870c5ce9fe69c1ca8111d9e0f21a8f265799eba0f927581d16f4810e5eb5bebfd7e51f5f137cbef08cc44d8fd9cd - languageName: node - linkType: hard - -"jest-environment-node@npm:30.0.5": - version: 30.0.5 - resolution: "jest-environment-node@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/fake-timers": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-mock: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - checksum: 10c0/1b608597f0755814e7c24b9ed2a45abc2340cfd8f8d3691caf929f332facd9c62ac5092e7f01056708a0ca41ae0458b6d442fd1ae9f6d21b7b416b252e1ae210 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b - languageName: node - linkType: hard - -"jest-haste-map@npm:30.0.5": - version: 30.0.5 - resolution: "jest-haste-map@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - anymatch: "npm:^3.1.3" - fb-watchman: "npm:^2.0.2" - fsevents: "npm:^2.3.3" - graceful-fs: "npm:^4.2.11" - jest-regex-util: "npm:30.0.1" - jest-util: "npm:30.0.5" - jest-worker: "npm:30.0.5" - micromatch: "npm:^4.0.8" - walker: "npm:^1.0.8" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/eab5d85d820f149bcf4bf4e0c49316f48973c85d39b4c3a2e08f57504f069afe9b0f1665e556330a98c6fc6bd5a6932767b466c1c96124fa0161aef017ab17b3 - languageName: node - linkType: hard - -"jest-leak-detector@npm:30.0.5": - version: 30.0.5 - resolution: "jest-leak-detector@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - pretty-format: "npm:30.0.5" - checksum: 10c0/04207ab6f44dec22d3d656b5f3b4f334440f4c01ccd21c55474f26706530244d34b8dc9922c9449e00e8649e5da1b8de4aca58c9895c9de19951d5ecdc0ff113 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:30.0.5": - version: 30.0.5 - resolution: "jest-matcher-utils@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - jest-diff: "npm:30.0.5" - pretty-format: "npm:30.0.5" - checksum: 10c0/231d891b29bfc218f2f5739c10873b6671426e31ad1c5538eed1531e62608fd3f60d32f41821332a6cf41f1614fd37361434c754fdd49c849b35ef2e5156c02e - languageName: node - linkType: hard - -"jest-message-util@npm:30.0.5": - version: 30.0.5 - resolution: "jest-message-util@npm:30.0.5" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@jest/types": "npm:30.0.5" - "@types/stack-utils": "npm:^2.0.3" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - micromatch: "npm:^4.0.8" - pretty-format: "npm:30.0.5" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.6" - checksum: 10c0/38b710c127db6c79c36d690377d9f9f1e3c2e4b2d2e60f3b82a5b4da70efb1f4783c6cf0cf1f6be6e3b7fb2d2aed889583d2430f65afc09e7e6d68aa5fa981dc - languageName: node - linkType: hard - -"jest-mock@npm:30.0.5": - version: 30.0.5 - resolution: "jest-mock@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - jest-util: "npm:30.0.5" - checksum: 10c0/207fd79297f514a8e26ede9b4b5035e70212b8850a2f460b51d3cc58e8e7c9585bd2dbc5df2475a3321c4cd114b90e0b24190f00d6eeb88c8f088a8ed00416d5 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.3": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac - languageName: node - linkType: hard - -"jest-regex-util@npm:30.0.1": - version: 30.0.1 - resolution: "jest-regex-util@npm:30.0.1" - checksum: 10c0/f30c70524ebde2d1012afe5ffa5691d5d00f7d5ba9e43d588f6460ac6fe96f9e620f2f9b36a02d0d3e7e77bc8efb8b3450ae3b80ac53c8be5099e01bf54f6728 - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:30.0.5": - version: 30.0.5 - resolution: "jest-resolve-dependencies@npm:30.0.5" - dependencies: - jest-regex-util: "npm:30.0.1" - jest-snapshot: "npm:30.0.5" - checksum: 10c0/7c72ef30d2e2e5c9564c53f55679184a4fe460f4d5c48eb5edc476000f17ee392341ae0c21b3ce9e531a1bff00924ebcda4fcd5b1406071c6a7b2b109fd3cf33 - languageName: node - linkType: hard - -"jest-resolve@npm:30.0.5": - version: 30.0.5 - resolution: "jest-resolve@npm:30.0.5" - dependencies: - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-pnp-resolver: "npm:^1.2.3" - jest-util: "npm:30.0.5" - jest-validate: "npm:30.0.5" - slash: "npm:^3.0.0" - unrs-resolver: "npm:^1.7.11" - checksum: 10c0/6edea75db950131513cd642743d4c5dd36c209c94652e469eebc86fdf85eb579a7614c30262668fcd429e1c841f1d17a26831259db69c17dffd0718c37f69196 - languageName: node - linkType: hard - -"jest-runner@npm:30.0.5": - version: 30.0.5 - resolution: "jest-runner@npm:30.0.5" - dependencies: - "@jest/console": "npm:30.0.5" - "@jest/environment": "npm:30.0.5" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - emittery: "npm:^0.13.1" - exit-x: "npm:^0.2.2" - graceful-fs: "npm:^4.2.11" - jest-docblock: "npm:30.0.1" - jest-environment-node: "npm:30.0.5" - jest-haste-map: "npm:30.0.5" - jest-leak-detector: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-resolve: "npm:30.0.5" - jest-runtime: "npm:30.0.5" - jest-util: "npm:30.0.5" - jest-watcher: "npm:30.0.5" - jest-worker: "npm:30.0.5" - p-limit: "npm:^3.1.0" - source-map-support: "npm:0.5.13" - checksum: 10c0/5da84e4f393cc4b0c2b86a7058c154e524bc91947867f892d252300d06c595058690a61ffdbfa74381498f4ebb9cc7d8d967a62f53cb5f5383ec59fb5ed21d91 - languageName: node - linkType: hard - -"jest-runtime@npm:30.0.5": - version: 30.0.5 - resolution: "jest-runtime@npm:30.0.5" - dependencies: - "@jest/environment": "npm:30.0.5" - "@jest/fake-timers": "npm:30.0.5" - "@jest/globals": "npm:30.0.5" - "@jest/source-map": "npm:30.0.1" - "@jest/test-result": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - cjs-module-lexer: "npm:^2.1.0" - collect-v8-coverage: "npm:^1.0.2" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-mock: "npm:30.0.5" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.0.5" - jest-snapshot: "npm:30.0.5" - jest-util: "npm:30.0.5" - slash: "npm:^3.0.0" - strip-bom: "npm:^4.0.0" - checksum: 10c0/c1afa36da0582172e9a73d69fcc23fd433efc8a7d0328ba5fee45858dc85cb01410b47ba53540bb3758277eb84bb5a42e872bc58d2e5a3cad533f4b33e3abe61 - languageName: node - linkType: hard - -"jest-snapshot@npm:30.0.5": - version: 30.0.5 - resolution: "jest-snapshot@npm:30.0.5" - dependencies: - "@babel/core": "npm:^7.27.4" - "@babel/generator": "npm:^7.27.5" - "@babel/plugin-syntax-jsx": "npm:^7.27.1" - "@babel/plugin-syntax-typescript": "npm:^7.27.1" - "@babel/types": "npm:^7.27.3" - "@jest/expect-utils": "npm:30.0.5" - "@jest/get-type": "npm:30.0.1" - "@jest/snapshot-utils": "npm:30.0.5" - "@jest/transform": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - babel-preset-current-node-syntax: "npm:^1.1.0" - chalk: "npm:^4.1.2" - expect: "npm:30.0.5" - graceful-fs: "npm:^4.2.11" - jest-diff: "npm:30.0.5" - jest-matcher-utils: "npm:30.0.5" - jest-message-util: "npm:30.0.5" - jest-util: "npm:30.0.5" - pretty-format: "npm:30.0.5" - semver: "npm:^7.7.2" - synckit: "npm:^0.11.8" - checksum: 10c0/2bda246367373003abfbd66de261bfd355618926c28261d7ffcdfac0c4c7a7f575c9f598745b0b59eb2cfa8907889dcc07db3ad65d940061275d490c1eb3e1fe - languageName: node - linkType: hard - -"jest-util@npm:30.0.5": - version: 30.0.5 - resolution: "jest-util@npm:30.0.5" - dependencies: - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - graceful-fs: "npm:^4.2.11" - picomatch: "npm:^4.0.2" - checksum: 10c0/d3808b5f7720044d0464664c795e2b795ed82edf3b5871db74b8b603c3a0a38107668730348d26f92920ca3b8245a99cbbc2c93e77d0abb1f5e27524079a4ba8 - languageName: node - linkType: hard - -"jest-validate@npm:30.0.5": - version: 30.0.5 - resolution: "jest-validate@npm:30.0.5" - dependencies: - "@jest/get-type": "npm:30.0.1" - "@jest/types": "npm:30.0.5" - camelcase: "npm:^6.3.0" - chalk: "npm:^4.1.2" - leven: "npm:^3.1.0" - pretty-format: "npm:30.0.5" - checksum: 10c0/739a5df57befd763ba40693c9c1d7e93234af44ca21226a42272fbf87dea076a23848072b46871ce02cc0f2614f8ad41542e98965b405320276102b4de35b063 - languageName: node - linkType: hard - -"jest-watcher@npm:30.0.5": - version: 30.0.5 - resolution: "jest-watcher@npm:30.0.5" - dependencies: - "@jest/test-result": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.3.2" - chalk: "npm:^4.1.2" - emittery: "npm:^0.13.1" - jest-util: "npm:30.0.5" - string-length: "npm:^4.0.2" - checksum: 10c0/5c26617c53e6314e2143806cbc8c1cdca7100cc8de3241c7debf7b5feb0df17bdc9a92ee4a4efa953a261d8806ffd7f6c89e72d567236e62492dd554eaa91f97 - languageName: node - linkType: hard - -"jest-worker@npm:30.0.5": - version: 30.0.5 - resolution: "jest-worker@npm:30.0.5" - dependencies: - "@types/node": "npm:*" - "@ungap/structured-clone": "npm:^1.3.0" - jest-util: "npm:30.0.5" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.1.1" - checksum: 10c0/50a724b39b8691168a456544f32ef8e937c827cd6d326fa0bc27df786c80af1e1f16d9f2d9cc800af4baac85a0f9e9ed78fbd4a06f13eb32e72ec66d11b85f38 - languageName: node - linkType: hard - -"jest@npm:^30.0.5": - version: 30.0.5 - resolution: "jest@npm:30.0.5" - dependencies: - "@jest/core": "npm:30.0.5" - "@jest/types": "npm:30.0.5" - import-local: "npm:^3.2.0" - jest-cli: "npm:30.0.5" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: ./bin/jest.js - checksum: 10c0/eff3980ebe0257f1d5a0e94b0df27fc689563539138cc9220dadcb57543e30601cea6b79cbd68a5a5bcdc69501a8a670493495cf4b1d2076796697f8a7937d4c - languageName: node - linkType: hard - -"jose@npm:^2.0.5": - version: 2.0.7 - resolution: "jose@npm:2.0.7" - dependencies: - "@panva/asn1.js": "npm:^1.0.0" - checksum: 10c0/228406f4635debd05922fa565a85c42c086426c1af03c4db2ce247d84f240d3f5985efa9540e6c90c89bab56476b1d1a0be2199740d1f497a37b075bbe2307e8 - languageName: node - linkType: hard - -"jose@npm:^5.2.0": - version: 5.9.6 - resolution: "jose@npm:5.9.6" - checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d - languageName: node - linkType: hard - -"js-stringify@npm:^1.0.2": - version: 1.0.2 - resolution: "js-stringify@npm:1.0.2" - checksum: 10c0/a450c04fde3a7e1c27f1c3c4300433f8d79322f9e3c2e76266843cef8c0b5a69b5f11b5f173212b2f15f2df09e068ef7ddf46ef775e2486f3006a6f4e912578d - languageName: node - linkType: hard - -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f - languageName: node - linkType: hard - -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 - languageName: node - linkType: hard - -"jsbn@npm:~0.1.0": - version: 0.1.1 - resolution: "jsbn@npm:0.1.1" - checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 - languageName: node - linkType: hard - -"jsdoc-type-pratt-parser@npm:~4.0.0": - version: 4.0.0 - resolution: "jsdoc-type-pratt-parser@npm:4.0.0" - checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 - languageName: node - linkType: hard - -"jsesc@npm:^3.0.2": - version: 3.1.0 - resolution: "jsesc@npm:3.1.0" - bin: - jsesc: bin/jsesc - checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 - languageName: node - linkType: hard - -"jsesc@npm:~3.0.2": - version: 3.0.2 - resolution: "jsesc@npm:3.0.2" - bin: - jsesc: bin/jsesc - checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 - languageName: node - linkType: hard - -"json-parse-better-errors@npm:^1.0.1": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": - version: 3.0.2 - resolution: "json-parse-even-better-errors@npm:3.0.2" - checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - -"json-schema@npm:0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 - languageName: node - linkType: hard - -"json-stringify-nice@npm:^1.1.4": - version: 1.1.4 - resolution: "json-stringify-nice@npm:1.1.4" - checksum: 10c0/13673b67ba9e7fde75a103cade0b0d2dd0d21cd3b918de8d8f6cd59d48ad8c78b0e85f6f4a5842073ddfc91ebdde5ef7c81c7f51945b96a33eaddc5d41324b87 - languageName: node - linkType: hard - -"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": - version: 5.0.1 - resolution: "json-stringify-safe@npm:5.0.1" - checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 - languageName: node - linkType: hard - -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: "npm:^1.2.0" - bin: - json5: lib/cli.js - checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f - languageName: node - linkType: hard - -"json5@npm:^2.2.2, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c - languageName: node - linkType: hard - -"jsonc-parser@npm:3.2.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 10c0/5a12d4d04dad381852476872a29dcee03a57439574e4181d91dca71904fcdcc5e8e4706c0a68a2c61ad9810e1e1c5806b5100d52d3e727b78f5cdc595401045b - languageName: node - linkType: hard - -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.6" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 - languageName: node - linkType: hard - -"jsonld-context-parser@npm:^2.0.0, jsonld-context-parser@npm:^2.1.2, jsonld-context-parser@npm:^2.1.3, jsonld-context-parser@npm:^2.4.0": - version: 2.4.0 - resolution: "jsonld-context-parser@npm:2.4.0" - dependencies: - "@types/http-link-header": "npm:^1.0.1" - "@types/node": "npm:^18.0.0" - cross-fetch: "npm:^3.0.6" - http-link-header: "npm:^1.0.2" - relative-to-absolute-iri: "npm:^1.0.5" - bin: - jsonld-context-parse: bin/jsonld-context-parse.js - checksum: 10c0/7d27257ac4a18698cf2750798d59f9fb956e13999c91536ceb0d5f2480b2b6b26c7966fe1f60a7d507d381a3bf460d209a3e3a23e2854c4821d010cf36718b21 - languageName: node - linkType: hard - -"jsonld-signatures@npm:^11.2.1, jsonld-signatures@npm:^11.3.0, jsonld-signatures@npm:^11.3.2": - version: 11.5.0 - resolution: "jsonld-signatures@npm:11.5.0" - dependencies: - "@digitalbazaar/security-context": "npm:^1.0.0" - jsonld: "npm:^8.0.0" - rdf-canonize: "npm:^4.0.1" - serialize-error: "npm:^8.1.0" - checksum: 10c0/a624ef4706c91064ba19dd3f1bb2a43f40cabd68f38e1c3e57fb0cea830b5ff4763364a00197313ccf704f571295803220d5c20d40df371562d84de98c5df9a0 - languageName: node - linkType: hard - -"jsonld-signatures@npm:^5.0.0": - version: 5.2.0 - resolution: "jsonld-signatures@npm:5.2.0" - dependencies: - base64url: "npm:^3.0.1" - crypto-ld: "npm:^3.7.0" - jsonld: "npm:^2.0.2" - node-forge: "npm:^0.10.0" - security-context: "npm:^4.0.0" - serialize-error: "npm:^5.0.0" - checksum: 10c0/c9966118b9ad0af8be9bed8b42cfa8fe67d57c7ef29b7dbf7b889902c5bc1f1c19527d724316666dca49a6a1e72b3b37e09be6ab77d3b74f8dd4c39b2ef8f61c - languageName: node - linkType: hard - -"jsonld-streaming-parser@npm:^2.4.0, jsonld-streaming-parser@npm:^2.4.2": - version: 2.4.3 - resolution: "jsonld-streaming-parser@npm:2.4.3" - dependencies: - "@rdfjs/types": "npm:*" - "@types/http-link-header": "npm:^1.0.1" - canonicalize: "npm:^1.0.1" - http-link-header: "npm:^1.0.2" - jsonld-context-parser: "npm:^2.1.3" - jsonparse: "npm:^1.3.1" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/f678e3b6f80471b95400b4d89b7a456e1ff798ace41a5312597e9c2d20a61b17aada2dc20364c3192806eba6abd651cd5c377fae0b9417f45187179ff6af862c - languageName: node - linkType: hard - -"jsonld-streaming-serializer@npm:^1.2.0": - version: 1.3.0 - resolution: "jsonld-streaming-serializer@npm:1.3.0" - dependencies: - "@rdfjs/types": "npm:*" - jsonld-context-parser: "npm:^2.0.0" - checksum: 10c0/c0e692a3c579a49e18af60f5d70cffef4a7e1637090c129150742feb0719e88bdfa6d73a5f0a095dd5cba72b6057fca22c0f50644e5dc5cd62d1ddc7ed3051ae - languageName: node - linkType: hard - -"jsonld@npm:^2.0.2": - version: 2.0.2 - resolution: "jsonld@npm:2.0.2" - dependencies: - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^5.1.1" - rdf-canonize: "npm:^1.0.2" - request: "npm:^2.88.0" - semver: "npm:^6.3.0" - xmldom: "npm:0.1.19" - checksum: 10c0/d5648d74aab4316b13acfb1dfe087443a0f8b7022b94732867d01a3fbd50f1ce0bec073412da883dfa760641a22e778304e27f098de7f23ea27c8503e188edf2 - languageName: node - linkType: hard - -"jsonld@npm:^3.3.2": - version: 3.3.2 - resolution: "jsonld@npm:3.3.2" - dependencies: - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^5.1.1" - object.fromentries: "npm:^2.0.2" - rdf-canonize: "npm:^2.0.1" - request: "npm:^2.88.0" - semver: "npm:^6.3.0" - xmldom: "npm:0.1.19" - checksum: 10c0/f89f4e5170a49505d552525abe37c4257a72171ca41f4c6ec38f12c021d6e6e41a473c38edee0f4bbda2af6e58d900c998bf875a4194f1e2b27e90cb8e95ef7c - languageName: node - linkType: hard - -"jsonld@npm:^8.0.0, jsonld@npm:^8.1.0, jsonld@npm:^8.3.1": - version: 8.3.3 - resolution: "jsonld@npm:8.3.3" - dependencies: - "@digitalbazaar/http-client": "npm:^3.4.1" - canonicalize: "npm:^1.0.1" - lru-cache: "npm:^6.0.0" - rdf-canonize: "npm:^3.4.0" - checksum: 10c0/ca8c18f65a50c61deec2951533bf05b709fd8e937e2f0cb549683d7e9934df7649b6e2f6f99f0dafe7bf8dd6ae95a257306cdb37fb705ef5ee0a7439d85581c2 - languageName: node - linkType: hard - -"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": - version: 1.3.1 - resolution: "jsonparse@npm:1.3.1" - checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 - languageName: node - linkType: hard - -"jsonwebtoken@npm:^9.0.2": - version: 9.0.2 - resolution: "jsonwebtoken@npm:9.0.2" - dependencies: - jws: "npm:^3.2.2" - lodash.includes: "npm:^4.3.0" - lodash.isboolean: "npm:^3.0.3" - lodash.isinteger: "npm:^4.0.4" - lodash.isnumber: "npm:^3.0.3" - lodash.isplainobject: "npm:^4.0.6" - lodash.isstring: "npm:^4.0.1" - lodash.once: "npm:^4.0.0" - ms: "npm:^2.1.1" - semver: "npm:^7.5.4" - checksum: 10c0/d287a29814895e866db2e5a0209ce730cbc158441a0e5a70d5e940eb0d28ab7498c6bf45029cc8b479639bca94056e9a7f254e2cdb92a2f5750c7f358657a131 - languageName: node - linkType: hard - -"jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: "npm:1.0.0" - extsprintf: "npm:1.3.0" - json-schema: "npm:0.4.0" - verror: "npm:1.10.0" - checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af - languageName: node - linkType: hard - -"jsprim@npm:^2.0.2": - version: 2.0.2 - resolution: "jsprim@npm:2.0.2" - dependencies: - assert-plus: "npm:1.0.0" - extsprintf: "npm:1.3.0" - json-schema: "npm:0.4.0" - verror: "npm:1.10.0" - checksum: 10c0/677be2d41df536c92c6d0114a492ef197084018cfbb1a3e10b1fa1aad889564b2e3a7baa6af7949cc2d73678f42368b0be165a26bd4e4de6883a30dd6a24e98d - languageName: node - linkType: hard - -"jstransformer@npm:1.0.0": - version: 1.0.0 - resolution: "jstransformer@npm:1.0.0" - dependencies: - is-promise: "npm:^2.0.0" - promise: "npm:^7.0.1" - checksum: 10c0/11f9b4f368a55878dd7973154cd83b0adca27f974d21217728652530775b2bec281e92109de66f0c9e37c76af796d5b76b33f3e38363214a83d102d523a7285b - languageName: node - linkType: hard - -"juice@npm:^4.1.0": - version: 4.3.2 - resolution: "juice@npm:4.3.2" - dependencies: - cheerio: "npm:^0.22.0" - commander: "npm:^2.15.1" - cross-spawn: "npm:^5.1.0" - deep-extend: "npm:^0.5.1" - mensch: "npm:^0.3.3" - slick: "npm:^1.12.2" - web-resource-inliner: "npm:^4.2.1" - bin: - juice: bin/juice - checksum: 10c0/5ab6cb687740fd52260daf3d8c4c01fbec02c4da805574ae2f9d2947a472d950137aae4a48092a56f9acf007de486af7cced60d9d9ec2cbfc4fbc6c19c081363 - languageName: node - linkType: hard - -"just-diff-apply@npm:^5.2.0": - version: 5.5.0 - resolution: "just-diff-apply@npm:5.5.0" - checksum: 10c0/d7b85371f2a5a17a108467fda35dddd95264ab438ccec7837b67af5913c57ded7246039d1df2b5bc1ade034ccf815b56d69786c5f1e07383168a066007c796c0 - languageName: node - linkType: hard - -"just-diff@npm:^6.0.0": - version: 6.0.2 - resolution: "just-diff@npm:6.0.2" - checksum: 10c0/1931ca1f0cea4cc480172165c189a84889033ad7a60bee302268ba8ca9f222b43773fd5f272a23ee618d43d85d3048411f06b635571a198159e9a85bb2495f5c - languageName: node - linkType: hard - -"jwa@npm:^1.4.1": - version: 1.4.1 - resolution: "jwa@npm:1.4.1" - dependencies: - buffer-equal-constant-time: "npm:1.0.1" - ecdsa-sig-formatter: "npm:1.0.11" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 - languageName: node - linkType: hard - -"jws@npm:^3.2.2": - version: 3.2.2 - resolution: "jws@npm:3.2.2" - dependencies: - jwa: "npm:^1.4.1" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff - languageName: node - linkType: hard - -"keyv@npm:^4.0.0, keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 - languageName: node - linkType: hard - -"kleur@npm:^4.1.4, kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"ky-universal@npm:^0.11.0": - version: 0.11.0 - resolution: "ky-universal@npm:0.11.0" - dependencies: - abort-controller: "npm:^3.0.0" - node-fetch: "npm:^3.2.10" - peerDependencies: - ky: ">=0.31.4" - web-streams-polyfill: ">=3.2.1" - peerDependenciesMeta: - web-streams-polyfill: - optional: true - checksum: 10c0/d71a1cae6d79c93808eda3b021eea91df064ac972f0391b45aa0913cdc48bdcad9c33452d68de021bd32c1b5abe15090229ae4a45fa28f7babb8e77e39ae1596 - languageName: node - linkType: hard - -"ky@npm:^0.33.3": - version: 0.33.3 - resolution: "ky@npm:0.33.3" - checksum: 10c0/5ba8de4c97c2abe5fb1b7d1b20252f95a7b249254af03cdfac670b9615de6b2b4af747bf363a1b918d2650c4cc83259578105f8eadd284f4e1c4261081e29640 - languageName: node - linkType: hard - -"lerna@npm:^8.0.1": - version: 8.1.9 - resolution: "lerna@npm:8.1.9" - dependencies: - "@lerna/create": "npm:8.1.9" - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" - "@octokit/plugin-enterprise-rest": "npm:6.0.1" - "@octokit/rest": "npm:19.0.11" - aproba: "npm:2.0.0" - byte-size: "npm:8.1.1" - chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" - cmd-shim: "npm:6.0.3" - color-support: "npm:1.1.3" - columnify: "npm:1.6.0" - console-control-strings: "npm:^1.1.0" - conventional-changelog-angular: "npm:7.0.0" - conventional-changelog-core: "npm:5.0.1" - conventional-recommended-bump: "npm:7.0.1" - cosmiconfig: "npm:9.0.0" - dedent: "npm:1.5.3" - envinfo: "npm:7.13.0" - execa: "npm:5.0.0" - fs-extra: "npm:^11.2.0" - get-port: "npm:5.1.1" - get-stream: "npm:6.0.0" - git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - globby: "npm:11.1.0" - graceful-fs: "npm:4.2.11" - has-unicode: "npm:2.0.1" - import-local: "npm:3.1.0" - ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" - is-ci: "npm:3.0.1" - is-stream: "npm:2.0.0" - jest-diff: "npm:>=29.4.3 < 30" - js-yaml: "npm:4.1.0" - libnpmaccess: "npm:8.0.6" - libnpmpublish: "npm:9.0.9" - load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" - make-dir: "npm:4.0.0" - minimatch: "npm:3.0.5" - multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" - p-map: "npm:4.0.0" - p-map-series: "npm:2.1.0" - p-pipe: "npm:3.1.0" - p-queue: "npm:6.6.2" - p-reduce: "npm:2.1.0" - p-waterfall: "npm:2.1.1" - pacote: "npm:^18.0.6" - pify: "npm:5.0.0" - read-cmd-shim: "npm:4.0.0" - resolve-from: "npm:5.0.0" - rimraf: "npm:^4.4.1" - semver: "npm:^7.3.8" - set-blocking: "npm:^2.0.0" - signal-exit: "npm:3.0.7" - slash: "npm:3.0.0" - ssri: "npm:^10.0.6" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - strong-log-transformer: "npm:2.1.0" - tar: "npm:6.2.1" - temp-dir: "npm:1.0.0" - typescript: "npm:>=3 < 6" - upath: "npm:2.0.1" - uuid: "npm:^10.0.0" - validate-npm-package-license: "npm:3.0.4" - validate-npm-package-name: "npm:5.0.1" - wide-align: "npm:1.1.5" - write-file-atomic: "npm:5.0.1" - write-pkg: "npm:4.0.0" - yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" - bin: - lerna: dist/cli.js - checksum: 10c0/e3362d66324f5ee9606dbdb332a6b09eeb2df6378177e36a1bbcf532927d921beb4d25dbcc717c4adf3a7dcd67e0bcee67bedf81fdbe7e78bbecce310358d762 - languageName: node - linkType: hard - -"leven@npm:2.1.0": - version: 2.1.0 - resolution: "leven@npm:2.1.0" - checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e - languageName: node - linkType: hard - -"libnpmaccess@npm:8.0.6": - version: 8.0.6 - resolution: "libnpmaccess@npm:8.0.6" - dependencies: - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - checksum: 10c0/0b63c7cb44e024b0225dae8ebfe5166a0be8a9420c1b5fb6a4f1c795e9eabbed0fff5984ab57167c5634145de018008cbeeb27fe6f808f611ba5ba1b849ec3d6 - languageName: node - linkType: hard - -"libnpmpublish@npm:9.0.9": - version: 9.0.9 - resolution: "libnpmpublish@npm:9.0.9" - dependencies: - ci-info: "npm:^4.0.0" - normalize-package-data: "npm:^6.0.1" - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - proc-log: "npm:^4.2.0" - semver: "npm:^7.3.7" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.6" - checksum: 10c0/5e4bae455d33fb7402b8b8fcc505d89a1d60ff4b7dc47dd9ba318426c00400e1892fd0435d8db6baab808f64d7f226cbf8d53792244ffad1df7fc2f94f3237fc - languageName: node - linkType: hard - -"lie@npm:3.1.1": - version: 3.1.1 - resolution: "lie@npm:3.1.1" - dependencies: - immediate: "npm:~3.0.5" - checksum: 10c0/d62685786590351b8e407814acdd89efe1cb136f05cb9236c5a97b2efdca1f631d2997310ad2d565c753db7596799870140e4777c9c9b8c44a0f6bf42d1804a1 - languageName: node - linkType: hard - -"lines-and-columns@npm:2.0.3": - version: 2.0.3 - resolution: "lines-and-columns@npm:2.0.3" - checksum: 10c0/09525c10010a925b7efe858f1dd3184eeac34f0a9bc34993075ec490efad71e948147746b18e9540279cc87cd44085b038f986903db3de65ffe96d38a7b91c4c - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d - languageName: node - linkType: hard - -"lines-and-columns@npm:~2.0.3": - version: 2.0.4 - resolution: "lines-and-columns@npm:2.0.4" - checksum: 10c0/4db28bf065cd7ad897c0700f22d3d0d7c5ed6777e138861c601c496d545340df3fc19e18bd04ff8d95a246a245eb55685b82ca2f8c2ca53a008e9c5316250379 - languageName: node - linkType: hard - -"load-json-file@npm:6.2.0": - version: 6.2.0 - resolution: "load-json-file@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.15" - parse-json: "npm:^5.0.0" - strip-bom: "npm:^4.0.0" - type-fest: "npm:^0.6.0" - checksum: 10c0/fcb46ef75bab917f37170ba76781a1690bf67144bb53931cb0ed8e4aa20ca439e9c354fcf3594aed531f47dbeb4a49800acab7fdffd553c402ac40c987706d7b - languageName: node - linkType: hard - -"load-json-file@npm:^4.0.0": - version: 4.0.0 - resolution: "load-json-file@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.2" - parse-json: "npm:^4.0.0" - pify: "npm:^3.0.0" - strip-bom: "npm:^3.0.0" - checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 - languageName: node - linkType: hard - -"localforage@npm:^1.9.0": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" - dependencies: - lie: "npm:3.1.1" - checksum: 10c0/00f19f1f97002e6721587ed5017f502d58faf80dae567d5065d4d1ee0caf0762f40d2e2dba7f0ef7d3f14ee6203242daae9ecad97359bfc10ecff36df11d85a3 - languageName: node - linkType: hard - -"locate-path@npm:^2.0.0": - version: 2.0.0 - resolution: "locate-path@npm:2.0.0" - dependencies: - p-locate: "npm:^2.0.0" - path-exists: "npm:^3.0.0" - checksum: 10c0/24efa0e589be6aa3c469b502f795126b26ab97afa378846cb508174211515633b770aa0ba610cab113caedab8d2a4902b061a08aaed5297c12ab6f5be4df0133 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: "npm:^5.0.0" - checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 - languageName: node - linkType: hard - -"lodash.assignin@npm:^4.0.9": - version: 4.2.0 - resolution: "lodash.assignin@npm:4.2.0" - checksum: 10c0/40ac405acf5d6daf27fd40b50c99f823641a9ceba6bd282b18cb9989149204af584b5671f336587c2a263e367c3a2d1105cbf7bdc5ea33cbd0f829b02b16578a - languageName: node - linkType: hard - -"lodash.bind@npm:^4.1.4": - version: 4.2.1 - resolution: "lodash.bind@npm:4.2.1" - checksum: 10c0/e47ae564101c43940fab7f102dd9fb056ae6cc534a3b7bfbaecdf7216dac904ad762150e66a80d1bd5430da7eed4df90ba93996bb24030fad096b698d2ae15af - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 - languageName: node - linkType: hard - -"lodash.defaults@npm:^4.0.1, lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 10c0/d5b77aeb702caa69b17be1358faece33a84497bcca814897383c58b28a2f8dfc381b1d9edbec239f8b425126a3bbe4916223da2a576bb0411c2cefd67df80707 - languageName: node - linkType: hard - -"lodash.filter@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.filter@npm:4.6.0" - checksum: 10c0/bb65002f3ee02b94400b9d8728a46d3ac9fc3eb7df387b3c642f36eff82d716714283ca674889a29edae3c28ea8a4048e6c7bb90598670ab9c97b5d125bffda2 - languageName: node - linkType: hard - -"lodash.flatten@npm:^4.2.0, lodash.flatten@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.flatten@npm:4.4.0" - checksum: 10c0/97e8f0d6b61fe4723c02ad0c6e67e51784c4a2c48f56ef283483e556ad01594cf9cec9c773e177bbbdbdb5d19e99b09d2487cb6b6e5dc405c2693e93b125bd3a - languageName: node - linkType: hard - -"lodash.foreach@npm:^4.3.0": - version: 4.5.0 - resolution: "lodash.foreach@npm:4.5.0" - checksum: 10c0/bd9cc83e87e805b21058ce6cf718dd22db137c7ca08eddbd608549db59989911c571b7195707f615cb37f27bb4f9a9fa9980778940d768c24095f5a04b244c84 - languageName: node - linkType: hard - -"lodash.includes@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.includes@npm:4.3.0" - checksum: 10c0/7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b - languageName: node - linkType: hard - -"lodash.isarguments@npm:^3.1.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: 10c0/5e8f95ba10975900a3920fb039a3f89a5a79359a1b5565e4e5b4310ed6ebe64011e31d402e34f577eca983a1fc01ff86c926e3cbe602e1ddfc858fdd353e62d8 - languageName: node - linkType: hard - -"lodash.isboolean@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isboolean@npm:3.0.3" - checksum: 10c0/0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7 - languageName: node - linkType: hard - -"lodash.isinteger@npm:^4.0.4": - version: 4.0.4 - resolution: "lodash.isinteger@npm:4.0.4" - checksum: 10c0/4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7 - languageName: node - linkType: hard - -"lodash.ismatch@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.ismatch@npm:4.4.0" - checksum: 10c0/8f96a5dc4b8d3fc5a033dcb259d0c3148a1044fa4d02b4a0e8dce0fa1f2ef3ec4ac131e20b5cb2c985a4e9bcb1c37c0aa5af2cef70094959389617347b8fc645 - languageName: node - linkType: hard - -"lodash.isnumber@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isnumber@npm:3.0.3" - checksum: 10c0/2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d - languageName: node - linkType: hard - -"lodash.isplainobject@npm:^4.0.6": - version: 4.0.6 - resolution: "lodash.isplainobject@npm:4.0.6" - checksum: 10c0/afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb - languageName: node - linkType: hard - -"lodash.isstring@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.isstring@npm:4.0.1" - checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 - languageName: node - linkType: hard - -"lodash.map@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.map@npm:4.6.0" - checksum: 10c0/919fe767fa58d3f8369ddd84346636eda71c88a8ef6bde1ca0d87dd37e71614da2ed8bcfc3018ca5b7741ebaf7c01c2d7078b510dca8ab6a0d0ecafd3dc1abcb - languageName: node - linkType: hard - -"lodash.merge@npm:^4.4.0, lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 - languageName: node - linkType: hard - -"lodash.once@npm:^4.0.0": - version: 4.1.1 - resolution: "lodash.once@npm:4.1.1" - checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 - languageName: node - linkType: hard - -"lodash.pick@npm:^4.2.1": - version: 4.4.0 - resolution: "lodash.pick@npm:4.4.0" - checksum: 10c0/a04c460b95d1aaa44e9513d1dacf72ea74d838da843e45831de9de64c303f13cdde1859702a6f4dcef417816898ffd47c6ae0614c957ac70245bed2809b8d2e2 - languageName: node - linkType: hard - -"lodash.reduce@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reduce@npm:4.6.0" - checksum: 10c0/5d2dab823523a1a7f81eb5f4c1edcc03aab55504b1299a2385737389644ba6d2ad219169dfc5c16632a67a345d925ef6a5e8816b4e18a36f94ed66f8e7740b36 - languageName: node - linkType: hard - -"lodash.reject@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reject@npm:4.6.0" - checksum: 10c0/653b5beb1641aeac8bd734775ef6517706897c49197dbe548788558c243434a89dd94b971866b04a0a1df411534db85e96ab7daeb8accf53650119a78de7355f - languageName: node - linkType: hard - -"lodash.some@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.some@npm:4.6.0" - checksum: 10c0/9d3cdb1c8a2ed3d19b02ce146d4962a7859016f752b40fc143d78d3e70985259d6bea71c2c31b8e78f492830f49d755f1be2cdbf85461c54a523089e0c8c0e75 - languageName: node - linkType: hard - -"lodash.unescape@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.unescape@npm:4.0.1" - checksum: 10c0/b050d4e71a1459a397e615833ea296dd679e851ae13f7b2c91d6c2a5cd9a07e9a5be070a1cac3e27ee1c0dd0433d13bc8d3eda426c205cb5c2704a7c077f062a - languageName: node - linkType: hard - -"lodash@npm:^3.2.0": - version: 3.10.1 - resolution: "lodash@npm:3.10.1" - checksum: 10c0/f5f6d3d87503c3f1db27d49b30a00bb38dc1bd9de716c5febe8970259cc7b447149a0e320452ccaf5996a7a4abd63d94df341bb91bd8d336584ad518d8eab144 - languageName: node - linkType: hard - -"lodash@npm:^4.0.1, lodash@npm:^4.17.15, lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: "npm:^4.1.0" - is-unicode-supported: "npm:^0.1.0" - checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 - languageName: node - linkType: hard - -"long-timeout@npm:0.1.1": - version: 0.1.1 - resolution: "long-timeout@npm:0.1.1" - checksum: 10c0/a62240cc8f449d7a00081e817ae543fb1ded4d9fc05492e9fa8d6868cb33b2c9d5d71176a6f8be4473df7ba4b208460b3073b0e05069c3ec286122f3e4b5747f - languageName: node - linkType: hard - -"lowercase-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "lowercase-keys@npm:2.0.0" - checksum: 10c0/f82a2b3568910509da4b7906362efa40f5b54ea14c2584778ddb313226f9cbf21020a5db35f9b9a0e95847a9b781d548601f31793d736b22a2b8ae8eb9ab1082 - languageName: node - linkType: hard - -"lru-cache@npm:10.1.0": - version: 10.1.0 - resolution: "lru-cache@npm:10.1.0" - checksum: 10c0/778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^4.0.1": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: "npm:^1.0.2" - yallist: "npm:^2.1.2" - checksum: 10c0/1ca5306814e5add9ec63556d6fd9b24a4ecdeaef8e9cea52cbf30301e6b88c8d8ddc7cab45b59b56eb763e6c45af911585dc89925a074ab65e1502e3fe8103cf - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 - languageName: node - linkType: hard - -"luxon@npm:^1.23.x": - version: 1.28.1 - resolution: "luxon@npm:1.28.1" - checksum: 10c0/5c561ce4364bb2301ca5811c74d11a9e087f82164109c7997dc8f0959e64d51259d8e630914dca2edc6702525ce5ab066a4b85caa19d04be71f10e79ffe2bc84 - languageName: node - linkType: hard - -"luxon@npm:^3.2.1": - version: 3.5.0 - resolution: "luxon@npm:3.5.0" - checksum: 10c0/335789bba95077db831ef99894edadeb23023b3eb2137a1b56acd0d290082b691cf793143d69e30bc069ec95f0b49f36419f48e951c68014f19ffe12045e3494 - languageName: node - linkType: hard - -"luxon@npm:~3.6.0": - version: 3.6.1 - resolution: "luxon@npm:3.6.1" - checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5 - languageName: node - linkType: hard - -"make-dir@npm:4.0.0, make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: "npm:^7.5.3" - checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 - languageName: node - linkType: hard - -"make-dir@npm:^2.1.0": - version: 2.1.0 - resolution: "make-dir@npm:2.1.0" - dependencies: - pify: "npm:^4.0.1" - semver: "npm:^5.6.0" - checksum: 10c0/ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 - languageName: node - linkType: hard - -"make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: "npm:^6.0.0" - checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa - languageName: node - linkType: hard - -"make-error@npm:^1.1.1, make-error@npm:^1.3.6": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f - languageName: node - linkType: hard - -"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" - dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" - http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e - languageName: node - linkType: hard - -"make-fetch-happen@npm:^14.0.3": - version: 14.0.3 - resolution: "make-fetch-happen@npm:14.0.3" - dependencies: - "@npmcli/agent": "npm:^3.0.0" - cacache: "npm:^19.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^4.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^12.0.0" - checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: "npm:1.0.5" - checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c - languageName: node - linkType: hard - -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: 10c0/ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 - languageName: node - linkType: hard - -"map-obj@npm:^4.0.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: 10c0/1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 - languageName: node - linkType: hard - -"memory-streams@npm:^0.1.3": - version: 0.1.3 - resolution: "memory-streams@npm:0.1.3" - dependencies: - readable-stream: "npm:~1.0.2" - checksum: 10c0/05d1ceff6b420e580ea7b1d8454e42118b06696cbe70c2d5ffc5e0b7df72a4a2152fa4e18216da10d8d5abbd2b2b409b354a8bb6489b30ae854c0dd998c84406 - languageName: node - linkType: hard - -"mensch@npm:^0.3.3": - version: 0.3.4 - resolution: "mensch@npm:0.3.4" - checksum: 10c0/177f9c1cb1acd93da98a971288a5da99f819ac06de19ca450040b18ddf8728c7ae0ce22309fadbbfd4ceb773bc5c03bf1cb93ceb91441da9e76e010d314da2ea - languageName: node - linkType: hard - -"meow@npm:^8.1.2": - version: 8.1.2 - resolution: "meow@npm:8.1.2" - dependencies: - "@types/minimist": "npm:^1.2.0" - camelcase-keys: "npm:^6.2.2" - decamelize-keys: "npm:^1.1.0" - hard-rejection: "npm:^2.1.0" - minimist-options: "npm:4.1.0" - normalize-package-data: "npm:^3.0.0" - read-pkg-up: "npm:^7.0.1" - redent: "npm:^3.0.0" - trim-newlines: "npm:^3.0.0" - type-fest: "npm:^0.18.0" - yargs-parser: "npm:^20.2.3" - checksum: 10c0/9a8d90e616f783650728a90f4ea1e5f763c1c5260369e6596b52430f877f4af8ecbaa8c9d952c93bbefd6d5bda4caed6a96a20ba7d27b511d2971909b01922a2 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"methods@npm:^1.1.1, methods@npm:^1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 - languageName: node - linkType: hard - -"microdata-rdf-streaming-parser@npm:^1.2.0": - version: 1.2.0 - resolution: "microdata-rdf-streaming-parser@npm:1.2.0" - dependencies: - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^6.0.0" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.2" - checksum: 10c0/fc54e45b78d9186061b6bcb915e1e2ae5796ee92e8aaeee9e548012f37487c618361e7e96f95cd8958a2bfab22dde51ddec290366b1c6b6069b94a9aa0a01f73 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mime@npm:1.6.0, mime@npm:^1.4.1": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 - languageName: node - linkType: hard - -"mimer@npm:^1.0.0": - version: 1.1.1 - resolution: "mimer@npm:1.1.1" - bin: - mimer: bin/mimer - checksum: 10c0/e832bd0d45fc2ce76b0de70f9fb8ca5c59f74b987a19d9d417a43175a67646a80846e825956cc8fdb05eae7651496b9c344fb09f5c5f52f9e4786b8291ae528c - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 - languageName: node - linkType: hard - -"mimic-response@npm:^1.0.0": - version: 1.0.1 - resolution: "mimic-response@npm:1.0.1" - checksum: 10c0/c5381a5eae997f1c3b5e90ca7f209ed58c3615caeee850e85329c598f0c000ae7bec40196580eef1781c60c709f47258131dab237cad8786f8f56750594f27fa - languageName: node - linkType: hard - -"mimic-response@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-response@npm:3.1.0" - checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 - languageName: node - linkType: hard - -"min-indent@npm:^1.0.0": - version: 1.0.1 - resolution: "min-indent@npm:1.0.1" - checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd - languageName: node - linkType: hard - -"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimatch@npm:3.0.5": - version: 3.0.5 - resolution: "minimatch@npm:3.0.5" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/f398652d0d260137c289c270a4ac98ebe0a27cd316fa0fac72b096e96cbdc89f71d80d47ac7065c716ba3b0b730783b19180bd85a35f9247535d2adfe96bba76 - languageName: node - linkType: hard - -"minimatch@npm:9.0.3": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 - languageName: node - linkType: hard - -"minimatch@npm:^8.0.2": - version: 8.0.4 - resolution: "minimatch@npm:8.0.4" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/a0a394c356dd5b4cb7f821720841a82fa6f07c9c562c5b716909d1b6ec5e56a7e4c4b5029da26dd256b7d2b3a3f38cbf9ddd8680e887b9b5282b09c05501c1ca - languageName: node - linkType: hard - -"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - kind-of: "npm:^6.0.3" - checksum: 10c0/7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"minimist@npm:~0.0.1": - version: 0.0.10 - resolution: "minimist@npm:0.0.10" - checksum: 10c0/c505a020144b6e49f2b1c7d1e378f3692b7102e989b4a49338fc171eb4229ddddb430e779ff803dcb11854050e3fe3c2298962a7d73c20df7c2044c92b2ba1da - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b - languageName: node - linkType: hard - -"minipass-fetch@npm:^4.0.0": - version: 4.0.1 - resolution: "minipass-fetch@npm:4.0.1" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^3.0.1" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^4.2.4": - version: 4.2.8 - resolution: "minipass@npm:4.2.8" - checksum: 10c0/4ea76b030d97079f4429d6e8a8affd90baf1b6a1898977c8ccce4701c5a2ba2792e033abc6709373f25c2c4d4d95440d9d5e9464b46b7b76ca44d2ce26d939ce - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1": - version: 3.0.2 - resolution: "minizlib@npm:3.0.2" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 - languageName: node - linkType: hard - -"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": - version: 0.5.3 - resolution: "mkdirp-classic@npm:0.5.3" - checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf - languageName: node - linkType: hard - -"mkdirp@npm:^3.0.1": - version: 3.0.1 - resolution: "mkdirp@npm:3.0.1" - bin: - mkdirp: dist/cjs/src/bin.js - checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d - languageName: node - linkType: hard - -"modify-values@npm:^1.0.1": - version: 1.0.1 - resolution: "modify-values@npm:1.0.1" - checksum: 10c0/6acb1b82aaf7a02f9f7b554b20cbfc159f223a79c66b0a257511c5933d50b85e12ea1220b0a90a2af6f80bc29ff784f929a52a51881867a93ae6a12ce87a729a - languageName: node - linkType: hard - -"moleculer-bull@npm:^0.2.5": - version: 0.2.8 - resolution: "moleculer-bull@npm:0.2.8" - dependencies: - bull: "npm:^3.15.0" - lodash: "npm:^4.17.15" - peerDependencies: - moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 - checksum: 10c0/744170d331eb3ddefb34d86e3e5fba02942ed9223a3a2b7c4e7ee893eb49d89c479374dfc77a6d8803a805469856cd00fcb03f63ee718e97ab318d1329eedcef - languageName: node - linkType: hard - -"moleculer-db@npm:^0.8.15, moleculer-db@npm:^0.8.16": - version: 0.8.26 - resolution: "moleculer-db@npm:0.8.26" - dependencies: - "@seald-io/nedb": "npm:^3.0.0" - bluebird: "npm:^3.7.2" - flat: "npm:^5.0.2" - lodash: "npm:^4.17.21" - peerDependencies: - moleculer: ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 - checksum: 10c0/e4797651ecc59e1aa7855ab536fc0be3e6090c6b2f37c94dda37cb397fb8ef750f2325d565b85b55d926db789b05a011a13e0b885cbe9ce81b658fca99e78ef4 - languageName: node - linkType: hard - -"moleculer-mail@npm:^1.2.5": - version: 1.2.6 - resolution: "moleculer-mail@npm:1.2.6" - dependencies: - bluebird: "npm:^3.7.2" - email-templates: "npm:^2.7.1" - lodash: "npm:^4.17.21" - nodemailer: "npm:^4.6.7" - nodemailer-html-to-text: "npm:^2.1.0" - peerDependencies: - moleculer: ^0.14.0 || ^0.13.0 || ^0.12.0 - checksum: 10c0/3a8d8af4a7471e2e618470731b989f1c5c33fb4c944c72d7410a63582bcc48bb035c85f31cd62ab552b191043cac049ca972f2088c1c2f42e91f0db0ba8ea79b - languageName: node - linkType: hard - -"moleculer-schedule@npm:^0.2.3": - version: 0.2.3 - resolution: "moleculer-schedule@npm:0.2.3" - dependencies: - lodash: "npm:^4.17.21" - node-schedule: "npm:^2.0.0" - peerDependencies: - moleculer: ^0.14.13 - checksum: 10c0/63e3ae5c5cf4631a09358742c14941ad2ffa7051c552f52bbe0128e8dacd7bf3ce9688a434d94f39d63141d80b15828942e81c2cf0f9c4c4652791ecc469f4fb - languageName: node - linkType: hard - -"moleculer-web@npm:^0.10.0-beta1, moleculer-web@npm:^0.10.7": - version: 0.10.7 - resolution: "moleculer-web@npm:0.10.7" - dependencies: - "@fastify/busboy": "npm:^1.0.0" - body-parser: "npm:^1.19.0" - es6-error: "npm:^4.1.1" - etag: "npm:^1.8.1" - fresh: "npm:^0.5.2" - isstream: "npm:^0.1.2" - kleur: "npm:^4.1.4" - lodash: "npm:^4.17.21" - path-to-regexp: "npm:^3.1.0" - qs: "npm:^6.11.0" - serve-static: "npm:^1.14.1" - peerDependencies: - moleculer: ^0.13.0 || ^0.14.0 - checksum: 10c0/af4964522fcdac7d88d61f7e810fbd7fe4500b6d6c7882c0cf8f7a4b28ac4402a32136a7b0635d1d3ceac5a4abd9648056048c5516d9a7be234541c13076024b - languageName: node - linkType: hard - -"moleculer@npm:^0.14.17, moleculer@npm:^0.14.18, moleculer@npm:^0.14.29, moleculer@npm:^0.14.35": - version: 0.14.35 - resolution: "moleculer@npm:0.14.35" - dependencies: - args: "npm:^5.0.3" - eventemitter2: "npm:^6.4.9" - fastest-validator: "npm:^1.19.0" - glob: "npm:^7.2.0" - ipaddr.js: "npm:^2.2.0" - kleur: "npm:^4.1.5" - lodash: "npm:^4.17.21" - lru-cache: "npm:^6.0.0" - node-fetch: "npm:^2.6.7" - recursive-watch: "npm:^1.1.4" - peerDependencies: - amqplib: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 - avsc: ^5.0.0 - bunyan: ^1.0.0 - cbor-x: ^0.8.3 || ^0.9.0 || ^1.2.0 - dd-trace: ^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0 - debug: ^4.0.0 - etcd3: ^1.0.0 - ioredis: ^4.0.0 || ^5.0.0 - jaeger-client: ^3.0.0 - kafka-node: ^5.0.0 - log4js: ^6.0.0 - mqtt: ^4.0.0 || ^5.0.0 - msgpack5: ^5.0.0 || ^6.0.0 - nats: ^1.0.0 || ^2.0.0 - node-nats-streaming: ^0.0.51 || ^0.2.0 || ^0.3.0 - notepack.io: ^2.0.0 || ^3.0.0 - pino: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - protobufjs: ^6.0.0 || ^7.0.0 - redlock: ^4.0.0 - rhea-promise: ^1.0.0 || ^2.0.0 - thrift: ^0.12.0 || ^0.16.0 - winston: ^3.0.0 - peerDependenciesMeta: - amqplib: - optional: true - avsc: - optional: true - bunyan: - optional: true - cbor-x: - optional: true - dd-trace: - optional: true - debug: - optional: true - etcd3: - optional: true - ioredis: - optional: true - jaeger-client: - optional: true - kafka-node: - optional: true - log4js: - optional: true - mqtt: - optional: true - msgpack5: - optional: true - nats: - optional: true - node-nats-streaming: - optional: true - notepack.io: - optional: true - pino: - optional: true - protobufjs: - optional: true - redlock: - optional: true - rhea-promise: - optional: true - thrift: - optional: true - winston: - optional: true - bin: - moleculer-runner: bin/moleculer-runner.js - moleculer-runner-esm: bin/moleculer-runner.mjs - checksum: 10c0/471cfd38994bf3e08abc39342413bb79ad5aab518b0fbc1329b74f3c6fb9ecff0826323e7030dfbd7ae20c5f94d3743bdaebbfe6eeb4a9faa8b02d0b7e990b29 - languageName: node - linkType: hard - -"moment-timezone@npm:^0.5.31": - version: 0.5.46 - resolution: "moment-timezone@npm:0.5.46" - dependencies: - moment: "npm:^2.29.4" - checksum: 10c0/003fd278d1aa3e63afff340a318735db80157b7a343e3f807cac10e026def214f0e71b52d582b89a11ee0a19f5d9f0da2752b7959d855429f2b715d4859d3722 - languageName: node - linkType: hard - -"moment@npm:2.30.1, moment@npm:^2.29.4": - version: 2.30.1 - resolution: "moment@npm:2.30.1" - checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a - languageName: node - linkType: hard - -"mri@npm:1.1.4": - version: 1.1.4 - resolution: "mri@npm:1.1.4" - checksum: 10c0/eb577c2ef60385aa287afdac777e536996f4fd3144250c201097e7ec121568139d482c92cb9a512f90e428d6dc3e9ba8e9de89bc204424cb96f187a4bdc465c1 - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"multimatch@npm:5.0.0": - version: 5.0.0 - resolution: "multimatch@npm:5.0.0" - dependencies: - "@types/minimatch": "npm:^3.0.3" - array-differ: "npm:^3.0.0" - array-union: "npm:^2.1.0" - arrify: "npm:^2.0.1" - minimatch: "npm:^3.0.4" - checksum: 10c0/252ffae6d19491c169c22fc30cf8a99f6031f94a3495f187d3430b06200e9f05a7efae90ab9d834f090834e0d9c979ab55e7ad21f61a37995d807b4b0ccdcbd1 - languageName: node - linkType: hard - -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: 10c0/18d06d92e5d6d45e2b63c0e1b8f25376af71748ac36f53c059baa8b76ffac31c5ab225480494e7d35d30215ecdb18fed26ec23cafcd2f7733f2f14406bcd19e2 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"n3@npm:^1.26.0": - version: 1.26.0 - resolution: "n3@npm:1.26.0" - dependencies: - buffer: "npm:^6.0.3" - readable-stream: "npm:^4.0.0" - checksum: 10c0/e8a399f9295ccbd4008113bebdbdb15e5ef824e2d396a94d70cc7c1a94261a72869622bd1d78b3e94ea48056d5cd1b42e3b6d8acd1e0261f387e94ac6403013d - languageName: node - linkType: hard - -"n3@npm:^1.6.3, n3@npm:^1.8.0": - version: 1.23.1 - resolution: "n3@npm:1.23.1" - dependencies: - buffer: "npm:^6.0.3" - queue-microtask: "npm:^1.1.2" - readable-stream: "npm:^4.0.0" - checksum: 10c0/9f7f179b3f358f37c284dc65907f4f12b079657d5eaea0ed4e0f1dc248e54caf68e3c62439c6a1d3d1b3eec06edb18e20aa7d12da494b49ff112f5dd72b0d414 - languageName: node - linkType: hard - -"nan@npm:^2.19.0, nan@npm:^2.20.0": - version: 2.22.0 - resolution: "nan@npm:2.22.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/d5d31aefdb218deba308d44867c5f432b4d3aabeb57c70a2b236d62652e9fee7044e5d5afd380d9fef022fe7ebb2f2d6c85ca3cbcac5031aaca3592c844526bb - languageName: node - linkType: hard - -"nanoid@npm:^3.3.8": - version: 3.3.8 - resolution: "nanoid@npm:3.3.8" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 - languageName: node - linkType: hard - -"napi-build-utils@npm:^1.0.1": - version: 1.0.2 - resolution: "napi-build-utils@npm:1.0.2" - checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 - languageName: node - linkType: hard - -"napi-postinstall@npm:^0.3.0": - version: 0.3.3 - resolution: "napi-postinstall@npm:0.3.3" - bin: - napi-postinstall: lib/cli.js - checksum: 10c0/3f3297c002abd1f1c64730c442e9047e4b50335666bd2821e990e0546ab917f9cd000d3837930a81dbe89075495e884ed526918a85667abeef0654f659217cea - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 - languageName: node - linkType: hard - -"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": - version: 0.6.4 - resolution: "negotiator@npm:0.6.4" - checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d - languageName: node - linkType: hard - -"nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::locator=%40semapps%2Ftriplestore%40workspace%3Apackages%2Ftriplestore": - version: 0.1.1-alpha.7 - resolution: "nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node#../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node::hash=d24187&locator=%40semapps%2Ftriplestore%40workspace%3Apackages%2Ftriplestore" - checksum: 10c0/64289f03d335271e8d1b412e3082090d2e6818ab81d0285ebc7673f53225c89a8ec43688b7343e35f38c5d008d18a981c17c965147b621ef1c846ba29f8d0e58 - languageName: node - linkType: hard - -"node-abi@npm:^3.3.0": - version: 3.73.0 - resolution: "node-abi@npm:3.73.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/4cd237f2507f80048310f381198a07387b11cbaab7dfac61ccc40cdc83f2296c647df02b5ddfead9f40b845c696f0ce75fdaa01973d3f3f0686151e4f96d2c8c - languageName: node - linkType: hard - -"node-addon-api@npm:^5.0.0": - version: 5.1.0 - resolution: "node-addon-api@npm:5.1.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d - languageName: node - linkType: hard - -"node-domexception@npm:^1.0.0": - version: 1.0.0 - resolution: "node-domexception@npm:1.0.0" - checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b - languageName: node - linkType: hard - -"node-fetch@npm:2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/fcae80f5ac52fbf5012f5e19df2bd3915e67d3b3ad51cb5942943df2238d32ba15890fecabd0e166876a9f98a581ab50f3f10eb942b09405c49ef8da36b826c7 - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"node-fetch@npm:^3.2.10": - version: 3.3.2 - resolution: "node-fetch@npm:3.3.2" - dependencies: - data-uri-to-buffer: "npm:^4.0.0" - fetch-blob: "npm:^3.1.4" - formdata-polyfill: "npm:^4.0.10" - checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 - languageName: node - linkType: hard - -"node-forge@npm:^0.10.0, node-forge@npm:~0.10.0": - version: 0.10.0 - resolution: "node-forge@npm:0.10.0" - checksum: 10c0/9cbf9ac8fc3889a5a46b0248f7238ee4014770bf31d22e04c0c7f04ed91c8be4584c5f534cdf6037e99f236c636c925cba960501ed2b850e077512e152760663 - languageName: node - linkType: hard - -"node-gyp-build@npm:^4.3.0": - version: 4.8.4 - resolution: "node-gyp-build@npm:4.8.4" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 - languageName: node - linkType: hard - -"node-gyp@npm:^10.0.0": - version: 10.3.1 - resolution: "node-gyp@npm:10.3.1" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - tar: "npm:^6.2.1" - which: "npm:^4.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/87c3b50e1f6f5256b5d2879a8c064eefa53ed444bad2a20870be43bc189db7cbffe22c30af056046c6d904181d73881b1726fd391d2f6f79f89b991019f195ea - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 11.3.0 - resolution: "node-gyp@npm:11.3.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^14.0.3" - nopt: "npm:^8.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.4.3" - tinyglobby: "npm:^0.2.12" - which: "npm:^5.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/5f4ad5a729386f7b50096efd4934b06c071dbfbc7d7d541a66d6959a7dccd62f53ff3dc95fffb60bf99d8da1270e23769f82246fcaa6c5645a70c967ae9a3398 - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a - languageName: node - linkType: hard - -"node-machine-id@npm:1.1.12": - version: 1.1.12 - resolution: "node-machine-id@npm:1.1.12" - checksum: 10c0/ab2fea5f75a6f1ce3c76c5e0ae3903b631230e0a99b003d176568fff8ddbdf7b2943be96cd8d220c497ca0f6149411831f8a450601929f326781cb1b59bab7f8 - languageName: node - linkType: hard - -"node-releases@npm:^2.0.19": - version: 2.0.19 - resolution: "node-releases@npm:2.0.19" - checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa - languageName: node - linkType: hard - -"node-schedule@npm:^2.0.0": - version: 2.1.1 - resolution: "node-schedule@npm:2.1.1" - dependencies: - cron-parser: "npm:^4.2.0" - long-timeout: "npm:0.1.1" - sorted-array-functions: "npm:^1.3.0" - checksum: 10c0/6ec51b34b9e676740ac25298e4ced5ee46053379f0d3aad533e51d7e083bc24ced045df1772a95bf9d9cfdb81299340bbf551549a7c5eb6e4d2dc6468c85c70e - languageName: node - linkType: hard - -"nodemailer-html-to-text@npm:^2.1.0": - version: 2.1.0 - resolution: "nodemailer-html-to-text@npm:2.1.0" - dependencies: - html-to-text: "npm:^2.1.0" - checksum: 10c0/068d6aa086a46f7d137775b87dfa1177916f352a1c0c3d1b7959e8591fc98fabcaa5e1bec32ff71c536a01fd51914dfc93f2112a0ee27a3dbaf6ab31d2ebe88c - languageName: node - linkType: hard - -"nodemailer@npm:^4.6.7": - version: 4.7.0 - resolution: "nodemailer@npm:4.7.0" - checksum: 10c0/62a330b88f0982c1474adb92b909ad33620ff194c24977e43118b71ed7f9ff17b54a34f8e5db805001925f01f6c0b5356d3765b7bd9f5cc5a07dfc78ea57263a - languageName: node - linkType: hard - -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: "npm:1" - bin: - nopt: bin/nopt.js - checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 - languageName: node - linkType: hard - -"nopt@npm:^7.0.0, nopt@npm:^7.2.1": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 - languageName: node - linkType: hard - -"nopt@npm:^8.0.0": - version: 8.1.0 - resolution: "nopt@npm:8.1.0" - dependencies: - abbrev: "npm:^3.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef - languageName: node - linkType: hard - -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: "npm:^2.1.4" - resolve: "npm:^1.10.0" - semver: "npm:2 || 3 || 4 || 5" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 - languageName: node - linkType: hard - -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: "npm:^4.0.1" - is-core-module: "npm:^2.5.0" - semver: "npm:^7.3.4" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be - languageName: node - linkType: hard - -"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": - version: 6.0.2 - resolution: "normalize-package-data@npm:6.0.2" - dependencies: - hosted-git-info: "npm:^7.0.0" - semver: "npm:^7.3.5" - validate-npm-package-license: "npm:^3.0.4" - checksum: 10c0/7e32174e7f5575ede6d3d449593247183880122b4967d4ae6edb28cea5769ca025defda54fc91ec0e3c972fdb5ab11f9284606ba278826171b264cb16a9311ef - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - -"normalize-url@npm:^6.0.1": - version: 6.1.0 - resolution: "normalize-url@npm:6.1.0" - checksum: 10c0/95d948f9bdd2cfde91aa786d1816ae40f8262946e13700bf6628105994fe0ff361662c20af3961161c38a119dc977adeb41fc0b41b1745eb77edaaf9cb22db23 - languageName: node - linkType: hard - -"npm-bundled@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-bundled@npm:3.0.1" - dependencies: - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10c0/7975590a50b7ce80dd9f3eddc87f7e990c758f2f2c4d9313dd67a9aca38f1a5ac0abe20d514b850902c441e89d2346adfc3c6f1e9cbab3ea28ebb653c4442440 - languageName: node - linkType: hard - -"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": - version: 6.3.0 - resolution: "npm-install-checks@npm:6.3.0" - dependencies: - semver: "npm:^7.1.1" - checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 - languageName: node - linkType: hard - -"npm-normalize-package-bin@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-normalize-package-bin@npm:3.0.1" - checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 - languageName: node - linkType: hard - -"npm-package-arg@npm:11.0.2": - version: 11.0.2 - resolution: "npm-package-arg@npm:11.0.2" - dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/d730572e128980db45c97c184a454cb565283bf849484bf92e3b4e8ec2d08a21bd4b2cba9467466853add3e8c7d81e5de476904ac241f3ae63e6905dfc8196d4 - languageName: node - linkType: hard - -"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": - version: 11.0.3 - resolution: "npm-package-arg@npm:11.0.3" - dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" - semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a - languageName: node - linkType: hard - -"npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": - version: 8.0.2 - resolution: "npm-packlist@npm:8.0.2" - dependencies: - ignore-walk: "npm:^6.0.4" - checksum: 10c0/ac3140980b1475c2e9acd3d0ca1acd0f8660c357aed357f1a4ebff2270975e0280a3b1c4938e2f16bd68217853ceb5725cf8779ec3752dfcc546582751ceedff - languageName: node - linkType: hard - -"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": - version: 9.1.0 - resolution: "npm-pick-manifest@npm:9.1.0" - dependencies: - npm-install-checks: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - npm-package-arg: "npm:^11.0.0" - semver: "npm:^7.3.5" - checksum: 10c0/8765f4199755b381323da2bff2202b4b15b59f59dba0d1be3f2f793b591321cd19e1b5a686ef48d9753a6bd4868550da632541a45dfb61809d55664222d73e44 - languageName: node - linkType: hard - -"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": - version: 17.1.0 - resolution: "npm-registry-fetch@npm:17.1.0" - dependencies: - "@npmcli/redact": "npm:^2.0.0" - jsonparse: "npm:^1.3.1" - make-fetch-happen: "npm:^13.0.0" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minizlib: "npm:^2.1.2" - npm-package-arg: "npm:^11.0.0" - proc-log: "npm:^4.0.0" - checksum: 10c0/3f66214e106609fd2e92704e62ac929cba1424d4013fec50f783afbb81168b0dc14457d35c1716a77e30fc482c3576bdc4e4bc5c84a714cac59cf98f96a17f47 - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: "npm:^3.0.0" - checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac - languageName: node - linkType: hard - -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: "npm:^2.0.0" - console-control-strings: "npm:^1.1.0" - gauge: "npm:^3.0.0" - set-blocking: "npm:^2.0.0" - checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa - languageName: node - linkType: hard - -"nth-check@npm:~1.0.0, nth-check@npm:~1.0.1": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: "npm:~1.0.0" - checksum: 10c0/1a67ce53a99e276eea672f892d712b29f3e6802bbbef7285ffab72ecea4f972e8244defac1ebded0daffabf459def31355bb9c64e5657ac2ab032c13f185d0fd - languageName: node - linkType: hard - -"nx@npm:17.2.5, nx@npm:v17.2.5": - version: 17.2.5 - resolution: "nx@npm:17.2.5" - dependencies: - "@nrwl/tao": "npm:v17.2.5" - "@nx/nx-darwin-arm64": "npm:v17.2.5" - "@nx/nx-darwin-x64": "npm:v17.2.5" - "@nx/nx-freebsd-x64": "npm:v17.2.5" - "@nx/nx-linux-arm-gnueabihf": "npm:v17.2.5" - "@nx/nx-linux-arm64-gnu": "npm:v17.2.5" - "@nx/nx-linux-arm64-musl": "npm:v17.2.5" - "@nx/nx-linux-x64-gnu": "npm:v17.2.5" - "@nx/nx-linux-x64-musl": "npm:v17.2.5" - "@nx/nx-win32-arm64-msvc": "npm:v17.2.5" - "@nx/nx-win32-x64-msvc": "npm:v17.2.5" - "@yarnpkg/lockfile": "npm:^1.1.0" - "@yarnpkg/parsers": "npm:3.0.0-rc.46" - "@zkochan/js-yaml": "npm:0.0.6" - axios: "npm:^1.5.1" - chalk: "npm:^4.1.0" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:^8.0.1" - dotenv: "npm:~16.3.1" - dotenv-expand: "npm:~10.0.0" - enquirer: "npm:~2.3.6" - figures: "npm:3.2.0" - flat: "npm:^5.0.2" - fs-extra: "npm:^11.1.0" - glob: "npm:7.1.4" - ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" - js-yaml: "npm:4.1.0" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:~2.0.3" - minimatch: "npm:3.0.5" - node-machine-id: "npm:1.1.12" - npm-run-path: "npm:^4.0.1" - open: "npm:^8.4.0" - semver: "npm:7.5.3" - string-width: "npm:^4.2.3" - strong-log-transformer: "npm:^2.1.0" - tar-stream: "npm:~2.2.0" - tmp: "npm:~0.2.1" - tsconfig-paths: "npm:^4.1.2" - tslib: "npm:^2.3.0" - yargs: "npm:^17.6.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.6.7 - "@swc/core": ^1.3.85 - dependenciesMeta: - "@nx/nx-darwin-arm64": - optional: true - "@nx/nx-darwin-x64": - optional: true - "@nx/nx-freebsd-x64": - optional: true - "@nx/nx-linux-arm-gnueabihf": - optional: true - "@nx/nx-linux-arm64-gnu": - optional: true - "@nx/nx-linux-arm64-musl": - optional: true - "@nx/nx-linux-x64-gnu": - optional: true - "@nx/nx-linux-x64-musl": - optional: true - "@nx/nx-win32-arm64-msvc": - optional: true - "@nx/nx-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@swc-node/register": - optional: true - "@swc/core": - optional: true - bin: - nx: bin/nx.js - nx-cloud: bin/nx-cloud.js - checksum: 10c0/5438bd50e19a6fab01f4f08847045f4d9f67d446eed279027ca7de11a2f20ca9ad0a7e2ec195d8422d2c1f9e401eb3bb7bfd01e97c7c4cd933ed763949f6dbd4 - languageName: node - linkType: hard - -"nx@npm:>=17.1.2 < 21": - version: 20.3.2 - resolution: "nx@npm:20.3.2" - dependencies: - "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:20.3.2" - "@nx/nx-darwin-x64": "npm:20.3.2" - "@nx/nx-freebsd-x64": "npm:20.3.2" - "@nx/nx-linux-arm-gnueabihf": "npm:20.3.2" - "@nx/nx-linux-arm64-gnu": "npm:20.3.2" - "@nx/nx-linux-arm64-musl": "npm:20.3.2" - "@nx/nx-linux-x64-gnu": "npm:20.3.2" - "@nx/nx-linux-x64-musl": "npm:20.3.2" - "@nx/nx-win32-arm64-msvc": "npm:20.3.2" - "@nx/nx-win32-x64-msvc": "npm:20.3.2" - "@yarnpkg/lockfile": "npm:^1.1.0" - "@yarnpkg/parsers": "npm:3.0.2" - "@zkochan/js-yaml": "npm:0.0.7" - axios: "npm:^1.7.4" - chalk: "npm:^4.1.0" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:^8.0.1" - dotenv: "npm:~16.4.5" - dotenv-expand: "npm:~11.0.6" - enquirer: "npm:~2.3.6" - figures: "npm:3.2.0" - flat: "npm:^5.0.2" - front-matter: "npm:^4.0.2" - ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:2.0.3" - minimatch: "npm:9.0.3" - node-machine-id: "npm:1.1.12" - npm-run-path: "npm:^4.0.1" - open: "npm:^8.4.0" - ora: "npm:5.3.0" - resolve.exports: "npm:2.0.3" - semver: "npm:^7.5.3" - string-width: "npm:^4.2.3" - tar-stream: "npm:~2.2.0" - tmp: "npm:~0.2.1" - tsconfig-paths: "npm:^4.1.2" - tslib: "npm:^2.3.0" - yaml: "npm:^2.6.0" - yargs: "npm:^17.6.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.8.0 - "@swc/core": ^1.3.85 - dependenciesMeta: - "@nx/nx-darwin-arm64": - optional: true - "@nx/nx-darwin-x64": - optional: true - "@nx/nx-freebsd-x64": - optional: true - "@nx/nx-linux-arm-gnueabihf": - optional: true - "@nx/nx-linux-arm64-gnu": - optional: true - "@nx/nx-linux-arm64-musl": - optional: true - "@nx/nx-linux-x64-gnu": - optional: true - "@nx/nx-linux-x64-musl": - optional: true - "@nx/nx-win32-arm64-msvc": - optional: true - "@nx/nx-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@swc-node/register": - optional: true - "@swc/core": - optional: true - bin: - nx: bin/nx.js - nx-cloud: bin/nx-cloud.js - checksum: 10c0/e84b748f45cdce3f57a17b99627a8d2d7ff9c41a4eaa9b88775576b03e3dcd9d0f707f28303b05483fe9478dce58f2d7ecf9a29e8a12902a8247e73a4ae48755 - languageName: node - linkType: hard - -"oauth-sign@npm:~0.9.0": - version: 0.9.0 - resolution: "oauth-sign@npm:0.9.0" - checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-hash@npm:^2.0.1": - version: 2.2.0 - resolution: "object-hash@npm:2.2.0" - checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.3 - resolution: "object-inspect@npm:1.13.3" - checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d - languageName: node - linkType: hard - -"object.assign@npm:^4.1.2, object.assign@npm:^4.1.7": - version: 4.1.7 - resolution: "object.assign@npm:4.1.7" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - has-symbols: "npm:^1.1.0" - object-keys: "npm:^1.1.1" - checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc - languageName: node - linkType: hard - -"object.entries@npm:^1.1.5": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.2, object.fromentries@npm:^2.0.8": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b - languageName: node - linkType: hard - -"object.getownpropertydescriptors@npm:^2.1.8": - version: 2.1.8 - resolution: "object.getownpropertydescriptors@npm:2.1.8" - dependencies: - array.prototype.reduce: "npm:^1.0.6" - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - gopd: "npm:^1.0.1" - safe-array-concat: "npm:^1.1.2" - checksum: 10c0/553e9562fd86637c9c169df23a56f1d810d8c9b580a6d4be11552c009f32469310c9347f3d10325abf0cd9cfe4afc521a1e903fbd24148ae7ec860e1e7c75cf3 - languageName: node - linkType: hard - -"object.groupby@npm:^1.0.3": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c - languageName: node - linkType: hard - -"object.values@npm:^1.2.0": - version: 1.2.1 - resolution: "object.values@npm:1.2.1" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 - languageName: node - linkType: hard - -"oidc-token-hash@npm:^5.0.1": - version: 5.0.3 - resolution: "oidc-token-hash@npm:5.0.3" - checksum: 10c0/d0dc0551406f09577874155cc83cf69c39e4b826293d50bb6c37936698aeca17d4bcee356ab910c859e53e83f2728a2acbd041020165191353b29de51fbca615 - languageName: node - linkType: hard - -"on-finished@npm:2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: "npm:1.1.1" - checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 - languageName: node - linkType: hard - -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f - languageName: node - linkType: hard - -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f - languageName: node - linkType: hard - -"open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" - dependencies: - define-lazy-prop: "npm:^2.0.0" - is-docker: "npm:^2.1.1" - is-wsl: "npm:^2.2.0" - checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 - languageName: node - linkType: hard - -"openid-client@npm:^4.7.4": - version: 4.9.1 - resolution: "openid-client@npm:4.9.1" - dependencies: - aggregate-error: "npm:^3.1.0" - got: "npm:^11.8.0" - jose: "npm:^2.0.5" - lru-cache: "npm:^6.0.0" - make-error: "npm:^1.3.6" - object-hash: "npm:^2.0.1" - oidc-token-hash: "npm:^5.0.1" - checksum: 10c0/88af2e7c17e62eaddd3f27e96567ef9c08dbd3266a6ff9c4e058128191d2d4ec07c49eaa523d9159953835fc90c59470270f6050872afb70c5c9576c387833e7 - languageName: node - linkType: hard - -"optimist@npm:^0.6.1": - version: 0.6.1 - resolution: "optimist@npm:0.6.1" - dependencies: - minimist: "npm:~0.0.1" - wordwrap: "npm:~0.0.2" - checksum: 10c0/8cb417328121e732dbfb4d94d53bb39b1406446b55323ed4ce787decc52394927e051ba879eb3ffa3171fe22a35ce13b460114b60effcead77443ee87c2f9b0f - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - dependencies: - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - word-wrap: "npm:^1.2.5" - checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 - languageName: node - linkType: hard - -"ora@npm:5.3.0": - version: 5.3.0 - resolution: "ora@npm:5.3.0" - dependencies: - bl: "npm:^4.0.3" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - log-symbols: "npm:^4.0.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10c0/30d5f3218eb75b0a2028c5fb9aa88e83e38a2f1745ab56839abb06c3ba31bae35f768f4e72c4f9e04e2a66be6a898e9312e8cf85c9333e1e3613eabb8c7cdf57 - languageName: node - linkType: hard - -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: "npm:^4.1.0" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - is-unicode-supported: "npm:^0.1.0" - log-symbols: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10c0/10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"own-keys@npm:^1.0.1": - version: 1.0.1 - resolution: "own-keys@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.2.6" - object-keys: "npm:^1.1.1" - safe-push-apply: "npm:^1.0.0" - checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a - languageName: node - linkType: hard - -"p-cancelable@npm:^2.0.0": - version: 2.1.1 - resolution: "p-cancelable@npm:2.1.1" - checksum: 10c0/8c6dc1f8dd4154fd8b96a10e55a3a832684c4365fb9108056d89e79fbf21a2465027c04a59d0d797b5ffe10b54a61a32043af287d5c4860f1e996cbdbc847f01 - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 - languageName: node - linkType: hard - -"p-limit@npm:^1.1.0": - version: 1.3.0 - resolution: "p-limit@npm:1.3.0" - dependencies: - p-try: "npm:^1.0.0" - checksum: 10c0/5c1b1d53d180b2c7501efb04b7c817448e10efe1ba46f4783f8951994d5027e4cd88f36ad79af50546682594c4ebd11702ac4b9364c47f8074890e2acad0edee - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-locate@npm:^2.0.0": - version: 2.0.0 - resolution: "p-locate@npm:2.0.0" - dependencies: - p-limit: "npm:^1.1.0" - checksum: 10c0/82da4be88fb02fd29175e66021610c881938d3cc97c813c71c1a605fac05617d57fd5d3b337494a6106c0edb2a37c860241430851411f1b265108cead34aee67 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: "npm:^3.0.2" - checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a - languageName: node - linkType: hard - -"p-map-series@npm:2.1.0": - version: 2.1.0 - resolution: "p-map-series@npm:2.1.0" - checksum: 10c0/302ca686a61c498b227fc45d4e2b2e5bfd20a03f4156a976d94c4ff7decf9cd5a815fa6846b43b37d587ffa8d4671ff2bd596fa83fe8b9113b5102da94940e2a - languageName: node - linkType: hard - -"p-map@npm:4.0.0, p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - -"p-map@npm:^2.1.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c - languageName: node - linkType: hard - -"p-pipe@npm:3.1.0": - version: 3.1.0 - resolution: "p-pipe@npm:3.1.0" - checksum: 10c0/9b3076828ea7e9469c0f92c78fa44096726208d547efdb2d6148cbe135d1a70bd449de5be13e234dd669d9515343bd68527b316bf9d5639cee639e2fdde20aaf - languageName: node - linkType: hard - -"p-queue@npm:6.6.2": - version: 6.6.2 - resolution: "p-queue@npm:6.6.2" - dependencies: - eventemitter3: "npm:^4.0.4" - p-timeout: "npm:^3.2.0" - checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e - languageName: node - linkType: hard - -"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": - version: 2.1.0 - resolution: "p-reduce@npm:2.1.0" - checksum: 10c0/27b8ff0fb044995507a06cd6357dffba0f2b98862864745972562a21885d7906ce5c794036d2aaa63ef6303158e41e19aed9f19651dfdafb38548ecec7d0de15 - languageName: node - linkType: hard - -"p-timeout@npm:^3.2.0": - version: 3.2.0 - resolution: "p-timeout@npm:3.2.0" - dependencies: - p-finally: "npm:^1.0.0" - checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 - languageName: node - linkType: hard - -"p-try@npm:^1.0.0": - version: 1.0.0 - resolution: "p-try@npm:1.0.0" - checksum: 10c0/757ba31de5819502b80c447826fac8be5f16d3cb4fbf9bc8bc4971dba0682e84ac33e4b24176ca7058c69e29f64f34d8d9e9b08e873b7b7bb0aa89d620fa224a - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"p-waterfall@npm:2.1.1": - version: 2.1.1 - resolution: "p-waterfall@npm:2.1.1" - dependencies: - p-reduce: "npm:^2.0.0" - checksum: 10c0/ccae582b75a3597018a375f8eac32b93e8bfb9fc22a8e5037787ef4ebf5958d7465c2d3cbe26443971fbbfda2bcb7b645f694b91f928fc9a71fa5031e6e33f85 - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"pacote@npm:^18.0.0, pacote@npm:^18.0.6": - version: 18.0.6 - resolution: "pacote@npm:18.0.6" - dependencies: - "@npmcli/git": "npm:^5.0.0" - "@npmcli/installed-package-contents": "npm:^2.0.1" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - "@npmcli/run-script": "npm:^8.0.0" - cacache: "npm:^18.0.0" - fs-minipass: "npm:^3.0.0" - minipass: "npm:^7.0.2" - npm-package-arg: "npm:^11.0.0" - npm-packlist: "npm:^8.0.0" - npm-pick-manifest: "npm:^9.0.0" - npm-registry-fetch: "npm:^17.0.0" - proc-log: "npm:^4.0.0" - promise-retry: "npm:^2.0.1" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - bin: - pacote: bin/index.js - checksum: 10c0/d80907375dd52a521255e0debca1ba9089ad8fd7acdf16c5a5db2ea2a5bb23045e2bcf08d1648b1ebc40fcc889657db86ff6187ff5f8d2fc312cd6ad1ec4c6ac - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"parse-conflict-json@npm:^3.0.0": - version: 3.0.1 - resolution: "parse-conflict-json@npm:3.0.1" - dependencies: - json-parse-even-better-errors: "npm:^3.0.0" - just-diff: "npm:^6.0.0" - just-diff-apply: "npm:^5.2.0" - checksum: 10c0/610b37181229ce3e945125c3a9548ec24d1de2d697a7ea3ef0f2660cccc6613715c2ba4bdbaf37c565133d6b61758703618a2c63d1ee29f97fd33c70a8aae323 - languageName: node - linkType: hard - -"parse-imports@npm:^2.1.1": - version: 2.2.1 - resolution: "parse-imports@npm:2.2.1" - dependencies: - es-module-lexer: "npm:^1.5.3" - slashes: "npm:^3.0.12" - checksum: 10c0/bc541ce4ef2ff77d53247de39a956e0ee7a1a4b9b175c3e0f898222fe7994595f011491154db4ed408cbaf5049ede9d0b6624125565be208e973a54420cbe069 - languageName: node - linkType: hard - -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: "npm:^1.3.1" - json-parse-better-errors: "npm:^1.0.1" - checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": "npm:^7.0.0" - error-ex: "npm:^1.3.1" - json-parse-even-better-errors: "npm:^2.3.0" - lines-and-columns: "npm:^1.1.6" - checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 - languageName: node - linkType: hard - -"parse-link-header@npm:^1.0.1": - version: 1.0.1 - resolution: "parse-link-header@npm:1.0.1" - dependencies: - xtend: "npm:~4.0.1" - checksum: 10c0/7d0c1f94b4d400ac8605e6d18aced0139e15a08f3dc886567894953727db82bb387febb9a7a6837a4809ca75abd32364bb54d447c050db4a017754ff8949c1fa - languageName: node - linkType: hard - -"parse-path@npm:^7.0.0": - version: 7.0.0 - resolution: "parse-path@npm:7.0.0" - dependencies: - protocols: "npm:^2.0.0" - checksum: 10c0/e7646f6b998b083bbd40102643d803557ce4ae18ae1704e6cc7ae2525ea7c5400f4a3635aca3244cfe65ce4dd0ff77db1142dde4d080e8a80c364c4b3e8fe8d2 - languageName: node - linkType: hard - -"parse-srcset@npm:^1.0.2": - version: 1.0.2 - resolution: "parse-srcset@npm:1.0.2" - checksum: 10c0/2f268e3d110d4c53d06ed2a8e8ee61a7da0cee13bf150819a6da066a8ca9b8d15b5600d6e6cae8be940e2edc50ee7c1e1052934d6ec858324065ecef848f0497 - languageName: node - linkType: hard - -"parse-url@npm:^8.1.0": - version: 8.1.0 - resolution: "parse-url@npm:8.1.0" - dependencies: - parse-path: "npm:^7.0.0" - checksum: 10c0/68b95afdf4bbf72e57c7ab66f8757c935fff888f7e2b0f1e06098b4faa19e06b6b743bddaed5bc8df4f0c2de6fc475355d787373b2fdd40092be9e4e4b996648 - languageName: node - linkType: hard - -"parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 - languageName: node - linkType: hard - -"passport-cas2@npm:0.0.12": - version: 0.0.12 - resolution: "passport-cas2@npm:0.0.12" - dependencies: - cas: "git+https://github.com/joshchan/node-cas.git" - passport-strategy: "npm:^1.0.0" - checksum: 10c0/86050abe8da35304efae98402f4b6be1be9793d43d78e30e83d7431e8ab5e389aa12c348d426144f53413ce6d19240227e7a7f22e7253c768d1f6cabf34b3409 - languageName: node - linkType: hard - -"passport-local@npm:^1.0.0": - version: 1.0.0 - resolution: "passport-local@npm:1.0.0" - dependencies: - passport-strategy: "npm:1.x.x" - checksum: 10c0/59becb988014921a5d6056470d9373c41db452fcf113323064f39d53baa6f184e72151bf269ca6770511f7f0260e13632dacc7b6afdbf60ebf63e90327e186d4 - languageName: node - linkType: hard - -"passport-strategy@npm:1.x.x, passport-strategy@npm:^1.0.0": - version: 1.0.0 - resolution: "passport-strategy@npm:1.0.0" - checksum: 10c0/cf4cd32e1bf2538a239651581292fbb91ccc83973cde47089f00d2014c24bed63d3e65af21da8ddef649a8896e089eb9c3ac9ca639f36c797654ae9ee4ed65e1 - languageName: node - linkType: hard - -"passport@npm:^0.4.1": - version: 0.4.1 - resolution: "passport@npm:0.4.1" - dependencies: - passport-strategy: "npm:1.x.x" - pause: "npm:0.0.1" - checksum: 10c0/aa1a8eb2e991368734ae1e33d354c94a02c5fcd27c4ef25c3c303b4f3df1e05512ac0159e608cedbfc8c544c166735a153124cfa3bd8d48fb01f5ded500f0c5f - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"path-to-regexp@npm:^3.1.0": - version: 3.3.0 - resolution: "path-to-regexp@npm:3.3.0" - checksum: 10c0/ffa0ebe7088d38d435a8d08b0fe6e8c93ceb2a81a65d4dd1d9a538f52e09d5e3474ed5f553cb3b180d894b0caa10698a68737ab599fd1e56b4663d1a64c9f77b - languageName: node - linkType: hard - -"path-to-regexp@npm:^6.2.0": - version: 6.3.0 - resolution: "path-to-regexp@npm:6.3.0" - checksum: 10c0/73b67f4638b41cde56254e6354e46ae3a2ebc08279583f6af3d96fe4664fc75788f74ed0d18ca44fa4a98491b69434f9eee73b97bb5314bd1b5adb700f5c18d6 - languageName: node - linkType: hard - -"path-type@npm:^3.0.0": - version: 3.0.0 - resolution: "path-type@npm:3.0.0" - dependencies: - pify: "npm:^3.0.0" - checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"pause@npm:0.0.1": - version: 0.0.1 - resolution: "pause@npm:0.0.1" - checksum: 10c0/f362655dfa7f44b946302c5a033148852ed5d05f744bd848b1c7eae6a543f743e79c7751ee896ba519fd802affdf239a358bb2ea5ca1b1c1e4e916279f83ab75 - languageName: node - linkType: hard - -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 - languageName: node - linkType: hard - -"pify@npm:5.0.0": - version: 5.0.0 - resolution: "pify@npm:5.0.0" - checksum: 10c0/9f6f3cd1f159652692f514383efe401a06473af35a699962230ad1c4c9796df5999961461fc1a3b81eed8e3e74adb8bd032474fb3f93eb6bdbd9f33328da1ed2 - languageName: node - linkType: hard - -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 - languageName: node - linkType: hard - -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf - languageName: node - linkType: hard - -"pirates@npm:^4.0.7": - version: 4.0.7 - resolution: "pirates@npm:4.0.7" - checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a - languageName: node - linkType: hard - -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: "npm:^4.0.0" - checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 - languageName: node - linkType: hard - -"possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.10": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e - languageName: node - linkType: hard - -"postcss@npm:^8.3.11": - version: 8.5.1 - resolution: "postcss@npm:8.5.1" - dependencies: - nanoid: "npm:^3.3.8" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 - languageName: node - linkType: hard - -"prebuild-install@npm:^7.1.1": - version: 7.1.2 - resolution: "prebuild-install@npm:7.1.2" - dependencies: - detect-libc: "npm:^2.0.0" - expand-template: "npm:^2.0.3" - github-from-package: "npm:0.0.0" - minimist: "npm:^1.2.3" - mkdirp-classic: "npm:^0.5.3" - napi-build-utils: "npm:^1.0.1" - node-abi: "npm:^3.3.0" - pump: "npm:^3.0.0" - rc: "npm:^1.2.7" - simple-get: "npm:^4.0.0" - tar-fs: "npm:^2.0.0" - tunnel-agent: "npm:^0.6.0" - bin: - prebuild-install: bin.js - checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd - languageName: node - linkType: hard - -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: "npm:^1.1.2" - checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab - languageName: node - linkType: hard - -"prettier@npm:^3.1.1": - version: 3.4.2 - resolution: "prettier@npm:3.4.2" - bin: - prettier: bin/prettier.cjs - checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 - languageName: node - linkType: hard - -"pretty-format@npm:30.0.5, pretty-format@npm:^30.0.0": - version: 30.0.5 - resolution: "pretty-format@npm:30.0.5" - dependencies: - "@jest/schemas": "npm:30.0.5" - ansi-styles: "npm:^5.2.0" - react-is: "npm:^18.3.1" - checksum: 10c0/9f6cf1af5c3169093866c80adbfdad32f69c692b62f24ba3ca8cdec8519336123323f896396f9fa40346a41b197c5f6be15aec4d8620819f12496afaaca93f81 - languageName: node - linkType: hard - -"pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f - languageName: node - linkType: hard - -"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 - languageName: node - linkType: hard - -"proc-log@npm:^5.0.0": - version: 5.0.0 - resolution: "proc-log@npm:5.0.0" - checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 - languageName: node - linkType: hard - -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 - languageName: node - linkType: hard - -"proggy@npm:^2.0.0": - version: 2.0.0 - resolution: "proggy@npm:2.0.0" - checksum: 10c0/1bfc14fa95769e6dd7e91f9d3cae8feb61e6d833ed7210d87ee5413bfa068f4ee7468483da96b2f138c40a7e91a2307f5d5d2eb6de9761c21e266a34602e6a5f - languageName: node - linkType: hard - -"promise-all-reject-late@npm:^1.0.0": - version: 1.0.1 - resolution: "promise-all-reject-late@npm:1.0.1" - checksum: 10c0/f1af0c7b0067e84d64751148ee5bb6c3e84f4a4d1316d6fe56261e1d2637cf71b49894bcbd2c6daf7d45afb1bc99efc3749be277c3e0518b70d0c5a29d037011 - languageName: node - linkType: hard - -"promise-call-limit@npm:^3.0.1": - version: 3.0.2 - resolution: "promise-call-limit@npm:3.0.2" - checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 - languageName: node - linkType: hard - -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc - languageName: node - linkType: hard - -"promise-limit@npm:^2.7.0": - version: 2.7.0 - resolution: "promise-limit@npm:2.7.0" - checksum: 10c0/ce220a7e11c8d0541940a3d99cc424bd16a18451b295a263f6dbaa998585d2d1afa71fcb7bb29078a61e214d2f13d96e9b082e96e8e357fbe5c5936ef2459cba - languageName: node - linkType: hard - -"promise-polyfill@npm:^1.1.6": - version: 1.1.6 - resolution: "promise-polyfill@npm:1.1.6" - checksum: 10c0/055859bba9da0b26994c6521473794cd3bd523f7cf61c5554c4a279ff86a3c11be21d222995d469efffa9b26b96577535286ded5566e4dc4d7c26338dfdf52c7 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"promise.prototype.finally@npm:^3.1.2": - version: 3.1.8 - resolution: "promise.prototype.finally@npm:3.1.8" - dependencies: - call-bind: "npm:^1.0.5" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" - es-errors: "npm:^1.0.0" - set-function-name: "npm:^2.0.1" - checksum: 10c0/5d56eaa3531c3fc03fdd5eef3b3270b3098ff158a4c82261331c9dca3f4f2b5e1c86a2a6a34e752ea978b8736cc7c130dda78ce53f8933d456c24a3c5749482e - languageName: node - linkType: hard - -"promise@npm:^7.0.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: "npm:~2.0.3" - checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f - languageName: node - linkType: hard - -"promzard@npm:^1.0.0": - version: 1.0.2 - resolution: "promzard@npm:1.0.2" - dependencies: - read: "npm:^3.0.1" - checksum: 10c0/d53c4ecb8b606b7e4bdeab14ac22c5f81a57463d29de1b8fe43bbc661106d9e4a79d07044bd3f69bde82c7ebacba7307db90a9699bc20482ce637bdea5fb8e4b - languageName: node - linkType: hard - -"protocols@npm:^2.0.0, protocols@npm:^2.0.1": - version: 2.0.1 - resolution: "protocols@npm:2.0.1" - checksum: 10c0/016cc58a596e401004a028a2f7005e3444bf89ee8f606409c411719374d1e8bba0464fc142a065cce0d19f41669b2f7ffe25a8bde4f16ce3b6eb01fabc51f2e7 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 10c0/5a91ce114c64ed3a6a553aa7d2943868811377388bb31447f9d8028271bae9b05b340fe0b6961a64e45b9c72946aeb0a4ab635e8f7cb3715ffd0ff2beeb6a679 - languageName: node - linkType: hard - -"psl@npm:^1.1.28": - version: 1.15.0 - resolution: "psl@npm:1.15.0" - dependencies: - punycode: "npm:^2.3.1" - checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a - languageName: node - linkType: hard - -"pug-attrs@npm:^3.0.0": - version: 3.0.0 - resolution: "pug-attrs@npm:3.0.0" - dependencies: - constantinople: "npm:^4.0.1" - js-stringify: "npm:^1.0.2" - pug-runtime: "npm:^3.0.0" - checksum: 10c0/28178e91c05e8eb9130861c78dccc61eae3e1610931346065bd32ad0b08b023a8dcf2470c3b2409ba45a5098d6d7ed15687717e91cf77770c6381a18626e5194 - languageName: node - linkType: hard - -"pug-code-gen@npm:^3.0.3": - version: 3.0.3 - resolution: "pug-code-gen@npm:3.0.3" - dependencies: - constantinople: "npm:^4.0.1" - doctypes: "npm:^1.1.0" - js-stringify: "npm:^1.0.2" - pug-attrs: "npm:^3.0.0" - pug-error: "npm:^2.1.0" - pug-runtime: "npm:^3.0.1" - void-elements: "npm:^3.1.0" - with: "npm:^7.0.0" - checksum: 10c0/517a93930dbc80bc7fa5f60ff324229a07cc5ab70ed9d344ce105e2fe24de68db5121c8457a9ba99cdc8d48dd18779dd34956ebfcab009b3c1c6843a3cade109 - languageName: node - linkType: hard - -"pug-error@npm:^2.0.0, pug-error@npm:^2.1.0": - version: 2.1.0 - resolution: "pug-error@npm:2.1.0" - checksum: 10c0/bbce339b17fab9890de84975c0cd8723a847bf65f35653d3ebcf77018e8ad91529d56e978ab80f4c64c9f4f07ef9e56e7a9fda3be44249c344a93ba11fccff79 - languageName: node - linkType: hard - -"pug-filters@npm:^4.0.0": - version: 4.0.0 - resolution: "pug-filters@npm:4.0.0" - dependencies: - constantinople: "npm:^4.0.1" - jstransformer: "npm:1.0.0" - pug-error: "npm:^2.0.0" - pug-walk: "npm:^2.0.0" - resolve: "npm:^1.15.1" - checksum: 10c0/7ddd62f5eb97f5242858bd56d93ffed387fef3742210a53770c980020cf91a34384b84b7fc8f0de185b43dfa77de2c4d0f63f575a4c5b3887fdef4e64b8d559d - languageName: node - linkType: hard - -"pug-lexer@npm:^5.0.1": - version: 5.0.1 - resolution: "pug-lexer@npm:5.0.1" - dependencies: - character-parser: "npm:^2.2.0" - is-expression: "npm:^4.0.0" - pug-error: "npm:^2.0.0" - checksum: 10c0/24195a5681953ab91c6a3ccd80a643f760dddb65e2f266bf8ccba145018ba0271536efe1572de2c2224163eb00873c2f1df0ad7ea7aa8bcbf79a66b586ca8435 - languageName: node - linkType: hard - -"pug-linker@npm:^4.0.0": - version: 4.0.0 - resolution: "pug-linker@npm:4.0.0" - dependencies: - pug-error: "npm:^2.0.0" - pug-walk: "npm:^2.0.0" - checksum: 10c0/db754ff34cdd4ba9d9e2d9535cce2a74178f2172e848a5fa6381907cb5bfaa0d39d4cc3eb29893d35fc1c417e83ae3cfd434640ba7d3b635c63199104fae976c - languageName: node - linkType: hard - -"pug-load@npm:^3.0.0": - version: 3.0.0 - resolution: "pug-load@npm:3.0.0" - dependencies: - object-assign: "npm:^4.1.1" - pug-walk: "npm:^2.0.0" - checksum: 10c0/2a7659dfaf9872dd25d851f85e4c27fa447d907b1db3540030cd844614159ff181e067d8f2bedf90eb6b5b1ff03747253859ecbbb822e40f4834b15591d4e108 - languageName: node - linkType: hard - -"pug-parser@npm:^6.0.0": - version: 6.0.0 - resolution: "pug-parser@npm:6.0.0" - dependencies: - pug-error: "npm:^2.0.0" - token-stream: "npm:1.0.0" - checksum: 10c0/faa6cec43afdeb2705eb8c68dfdb2e65836238df8043ae55295ffb72450b8c7a990ea1be60adbde19f58988b9e1d18a84ea42453e2c4f104d0031f78fda737b2 - languageName: node - linkType: hard - -"pug-runtime@npm:^3.0.0, pug-runtime@npm:^3.0.1": - version: 3.0.1 - resolution: "pug-runtime@npm:3.0.1" - checksum: 10c0/0db8166d2e17695a6941d1de81dcb21c8a52921299b1e03bf6a0a3d2b0036b51cf98101b3937b731c745e8d3e0268cb0b728c02f61a80a25fcfaa15c594fb1be - languageName: node - linkType: hard - -"pug-strip-comments@npm:^2.0.0": - version: 2.0.0 - resolution: "pug-strip-comments@npm:2.0.0" - dependencies: - pug-error: "npm:^2.0.0" - checksum: 10c0/ca498adedaeba51dd836b20129bbd161e2d5a397a2baaa553b1e74e888caa2258dcd7326396fc6f8fed8c7b7f906cfebc4c386ccbee8888a27b2ca0d4d86d206 - languageName: node - linkType: hard - -"pug-walk@npm:^2.0.0": - version: 2.0.0 - resolution: "pug-walk@npm:2.0.0" - checksum: 10c0/005d63177bcf057f5a618b182f6d4600afb039200b07a381a0d89288a2b3126e763a0a6c40b758eab0731c8e63cad1bbcb46d96803b9ae9cfc879f6ef5a0f8f4 - languageName: node - linkType: hard - -"pug@npm:^3.0.2": - version: 3.0.3 - resolution: "pug@npm:3.0.3" - dependencies: - pug-code-gen: "npm:^3.0.3" - pug-filters: "npm:^4.0.0" - pug-lexer: "npm:^5.0.1" - pug-linker: "npm:^4.0.0" - pug-load: "npm:^3.0.0" - pug-parser: "npm:^6.0.0" - pug-runtime: "npm:^3.0.1" - pug-strip-comments: "npm:^2.0.0" - checksum: 10c0/bda53d3a6deea1d348cd5ab17427c77f3d74165510ad16f4fd182cc63618ad09388ecda317d17122ee890c8a68f9a54b96221fce7f44a332e463fdbb10a9d1e2 - languageName: node - linkType: hard - -"pump@npm:^3.0.0": - version: 3.0.2 - resolution: "pump@npm:3.0.2" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 - languageName: node - linkType: hard - -"pure-rand@npm:^7.0.0": - version: 7.0.1 - resolution: "pure-rand@npm:7.0.1" - checksum: 10c0/9cade41030f5ec95f5d55a11a71404cd6f46b69becaad892097cd7f58e2c6248cd0a933349ca7d21336ab629f1da42ffe899699b671bc4651600eaf6e57f837e - languageName: node - linkType: hard - -"qs@npm:6.13.0": - version: 6.13.0 - resolution: "qs@npm:6.13.0" - dependencies: - side-channel: "npm:^1.0.6" - checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 - languageName: node - linkType: hard - -"qs@npm:^6.11.0, qs@npm:^6.5.1": - version: 6.14.0 - resolution: "qs@npm:6.14.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c - languageName: node - linkType: hard - -"qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.1.2, queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"quick-lru@npm:^4.0.1": - version: 4.0.1 - resolution: "quick-lru@npm:4.0.1" - checksum: 10c0/f9b1596fa7595a35c2f9d913ac312fede13d37dc8a747a51557ab36e11ce113bbe88ef4c0154968845559a7709cb6a7e7cbe75f7972182451cd45e7f057a334d - languageName: node - linkType: hard - -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da - languageName: node - linkType: hard - -"random-bytes@npm:~1.0.0": - version: 1.0.0 - resolution: "random-bytes@npm:1.0.0" - checksum: 10c0/71e7a600e0976e9ebc269793a0577d47b965fa678fcc9e9623e427f909d1b3669db5b3a178dbf61229f0724ea23dba64db389f0be0ba675c6a6b837c02f29b8f - languageName: node - linkType: hard - -"range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 - languageName: node - linkType: hard - -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: "npm:3.1.2" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - unpipe: "npm:1.0.0" - checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 - languageName: node - linkType: hard - -"rc@npm:^1.2.7": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: "npm:^0.6.0" - ini: "npm:~1.3.0" - minimist: "npm:^1.2.0" - strip-json-comments: "npm:~2.0.1" - bin: - rc: ./cli.js - checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 - languageName: node - linkType: hard - -"rdf-canonize@npm:^1.0.2": - version: 1.2.0 - resolution: "rdf-canonize@npm:1.2.0" - dependencies: - node-forge: "npm:^0.10.0" - semver: "npm:^6.3.0" - checksum: 10c0/d0955b79caa43c60a74c544163486bdb1b7462e8c4373e9bfae36afc93fb849271fb4fe2c228613d24b9c9f22195b5ed17f1cc6787538853e3dec1d0df1d3d10 - languageName: node - linkType: hard - -"rdf-canonize@npm:^2.0.1": - version: 2.0.1 - resolution: "rdf-canonize@npm:2.0.1" - dependencies: - semver: "npm:^6.3.0" - setimmediate: "npm:^1.0.5" - checksum: 10c0/2a3e158c8a2354aa5682d341c420d815b421325979c06d02e00f45dd7f3b4ef751dd0d072b227a16ebd1e5dbb1f82226a58d5b9cc6cfd246fc53fc04f7b613d0 - languageName: node - linkType: hard - -"rdf-canonize@npm:^3.4.0": - version: 3.4.0 - resolution: "rdf-canonize@npm:3.4.0" - dependencies: - setimmediate: "npm:^1.0.5" - checksum: 10c0/c78ccd8ff99abf749005f6c596d5ceb16edd7a9508e430cd636b89fba8f75e5698f2dd8294aeca389463b1f983326f8d50c9d4ad0a9195cf945f02731a720dea - languageName: node - linkType: hard - -"rdf-canonize@npm:^4.0.1": - version: 4.0.1 - resolution: "rdf-canonize@npm:4.0.1" - dependencies: - setimmediate: "npm:^1.0.5" - checksum: 10c0/8f6040847c5731817cc5ad95ca16caa588fba76c94ee3b24f282c9a3054f36226560bcb33bed8a173903960af1b9937e21db6e0dc2e90caa749682fff8228250 - languageName: node - linkType: hard - -"rdf-data-factory@npm:^1.1.0, rdf-data-factory@npm:^1.1.2": - version: 1.1.3 - resolution: "rdf-data-factory@npm:1.1.3" - dependencies: - "@rdfjs/types": "npm:^1.0.0" - checksum: 10c0/b5f5db1417afd72e690c60b0eb19388b0ed519e8d732419ccee4d3a5c15fa8cfd1b16380c9692dec26245a9bbf5ce2cb07360645d60e995337c34796da0c990a - languageName: node - linkType: hard - -"rdf-data-model@npm:^1.0.0": - version: 1.0.0 - resolution: "rdf-data-model@npm:1.0.0" - bin: - rdf-data-model-test: ./bin/test.js - checksum: 10c0/36a1a4961a186f832bc89d4831c3adafb7dbb9305e144ea7cc2a2df27c8a7df6d546f2481931f95eb081299a32d2223f7c4163d3cd18492773b443f1c938bdbc - languageName: node - linkType: hard - -"rdf-isomorphic@npm:^1.3.0": - version: 1.3.1 - resolution: "rdf-isomorphic@npm:1.3.1" - dependencies: - "@rdfjs/types": "npm:*" - hash.js: "npm:^1.1.7" - rdf-string: "npm:^1.6.0" - rdf-terms: "npm:^1.7.0" - checksum: 10c0/6da5545654045b643d12510e946677a6d724282dfeb58f215c26fa46cae1c525bfad4820bda7765f49902ee0cc75cffbcf646ca1e984ec35d71c8008ad3e6e83 - languageName: node - linkType: hard - -"rdf-parse@npm:^1.7.0": - version: 1.9.1 - resolution: "rdf-parse@npm:1.9.1" - dependencies: - "@comunica/actor-http-native": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-microdata": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-rdfa": "npm:~1.22.0" - "@comunica/actor-rdf-parse-html-script": "npm:~1.22.0" - "@comunica/actor-rdf-parse-jsonld": "npm:^1.22.0" - "@comunica/actor-rdf-parse-n3": "npm:~1.22.0" - "@comunica/actor-rdf-parse-rdfxml": "npm:~1.22.0" - "@comunica/actor-rdf-parse-xml-rdfa": "npm:~1.22.0" - "@comunica/bus-http": "npm:~1.22.0" - "@comunica/bus-init": "npm:~1.22.0" - "@comunica/bus-rdf-parse": "npm:~1.22.0" - "@comunica/bus-rdf-parse-html": "npm:~1.22.0" - "@comunica/core": "npm:~1.22.0" - "@comunica/mediator-combine-union": "npm:~1.22.0" - "@comunica/mediator-number": "npm:~1.22.0" - "@comunica/mediator-race": "npm:~1.22.0" - "@rdfjs/types": "npm:*" - stream-to-string: "npm:^1.2.0" - checksum: 10c0/b9d99f2ce16abc870e90425f626ce25ff861d389ebd1a8644313367c562551fb695c2088ea9ea72402d178238b89f67235d79d68a8e0819b2c1cad79fd9e3bea - languageName: node - linkType: hard - -"rdf-string@npm:^1.6.0": - version: 1.6.3 - resolution: "rdf-string@npm:1.6.3" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/d7fca91d659f1631708670efefe4d8243b55f18a74adb384b385f7562d3c1a7c7f0a64da09c094e08aced8dc9cfd870eadbec4fe97030d78a90ec69187f6a53c - languageName: node - linkType: hard - -"rdf-terms@npm:^1.7.0": - version: 1.11.0 - resolution: "rdf-terms@npm:1.11.0" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - rdf-string: "npm:^1.6.0" - checksum: 10c0/9603eef8b05c8254f1d12a75db894de85eb291fd1cff167d5dd4a3854ff7677ad6baea9ebbb164bc0ad0cbe37ab4317e96de61e98297937ea9237956ac951fab - languageName: node - linkType: hard - -"rdfa-streaming-parser@npm:^1.5.0": - version: 1.5.0 - resolution: "rdfa-streaming-parser@npm:1.5.0" - dependencies: - "@rdfjs/types": "npm:*" - htmlparser2: "npm:^6.0.0" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.2" - checksum: 10c0/d2482dce371d90ca3c19b97b57b9c17ad07be5990bc6c11ec9b4a57f761ff5433567555ed87fa66144412a9239053d0b7cee85c370e4f02098b0338c2da971ba - languageName: node - linkType: hard - -"rdfxml-streaming-parser@npm:^1.5.0": - version: 1.5.0 - resolution: "rdfxml-streaming-parser@npm:1.5.0" - dependencies: - "@rdfjs/types": "npm:*" - rdf-data-factory: "npm:^1.1.0" - relative-to-absolute-iri: "npm:^1.0.0" - sax: "npm:^1.2.4" - checksum: 10c0/37a75a10608051f433d3c267b91f495f310ad1a65d7897b6c823311702c8ab2a11b2b54b64869fc2564f2792e426714c1cca478eb0105ce658caafdd78353d66 - languageName: node - linkType: hard - -"react-is@npm:^18.0.0, react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 - languageName: node - linkType: hard - -"read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": - version: 4.0.0 - resolution: "read-cmd-shim@npm:4.0.0" - checksum: 10c0/e62db17ec9708f1e7c6a31f0a46d43df2069d85cf0df3b9d1d99e5ed36e29b1e8b2f8a427fd8bbb9bc40829788df1471794f9b01057e4b95ed062806e4df5ba9 - languageName: node - linkType: hard - -"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": - version: 3.0.2 - resolution: "read-package-json-fast@npm:3.0.2" - dependencies: - json-parse-even-better-errors: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10c0/37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 - languageName: node - linkType: hard - -"read-pkg-up@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg-up@npm:3.0.0" - dependencies: - find-up: "npm:^2.0.0" - read-pkg: "npm:^3.0.0" - checksum: 10c0/2cd0a180260b0d235990e6e9c8c2330a03882d36bc2eba8930e437ef23ee52a68a894e7e1ccb1c33f03bcceb270a861ee5f7eac686f238857755e2cddfb48ffd - languageName: node - linkType: hard - -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: "npm:^4.1.0" - read-pkg: "npm:^5.2.0" - type-fest: "npm:^0.8.1" - checksum: 10c0/82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 - languageName: node - linkType: hard - -"read-pkg@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg@npm:3.0.0" - dependencies: - load-json-file: "npm:^4.0.0" - normalize-package-data: "npm:^2.3.2" - path-type: "npm:^3.0.0" - checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 - languageName: node - linkType: hard - -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" - dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^2.5.0" - parse-json: "npm:^5.0.0" - type-fest: "npm:^0.6.0" - checksum: 10c0/b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb - languageName: node - linkType: hard - -"read@npm:^3.0.1": - version: 3.0.1 - resolution: "read@npm:3.0.1" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/af524994ff7cf94aa3ebd268feac509da44e58be7ed2a02775b5ee6a7d157b93b919e8c5ead91333f86a21fbb487dc442760bc86354c18b84d334b8cec33723a - languageName: node - linkType: hard - -"readable-stream-node-to-web@npm:^1.0.1": - version: 1.0.1 - resolution: "readable-stream-node-to-web@npm:1.0.1" - checksum: 10c0/9ad4bde9ac06b7dc0b202f77ba632ee012c4782a40139d7a78ecea9d5503867181ab9871e40576891f1adde35203b795e3b46ce30c5fbbab3421404d93561442 - languageName: node - linkType: hard - -"readable-stream@npm:1.1": - version: 1.1.13 - resolution: "readable-stream@npm:1.1.13" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.1" - isarray: "npm:0.0.1" - string_decoder: "npm:~0.10.x" - checksum: 10c0/fb8edd73a37e58fdb35d006370c6cde2912c993483479fe9be232ee0aa8f0b12058f0662602760c7a678887415198888c2f8d864b7ba6ab57683e1b3774d9e66 - languageName: node - linkType: hard - -"readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa - languageName: node - linkType: hard - -"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: "npm:^2.0.3" - string_decoder: "npm:^1.1.1" - util-deprecate: "npm:^1.0.1" - checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 - languageName: node - linkType: hard - -"readable-stream@npm:^4.0.0": - version: 4.7.0 - resolution: "readable-stream@npm:4.7.0" - dependencies: - abort-controller: "npm:^3.0.0" - buffer: "npm:^6.0.3" - events: "npm:^3.3.0" - process: "npm:^0.11.10" - string_decoder: "npm:^1.3.0" - checksum: 10c0/fd86d068da21cfdb10f7a4479f2e47d9c0a9b0c862fc0c840a7e5360201580a55ac399c764b12a4f6fa291f8cee74d9c4b7562e0d53b3c4b2769f2c98155d957 - languageName: node - linkType: hard - -"readable-stream@npm:~1.0.2": - version: 1.0.34 - resolution: "readable-stream@npm:1.0.34" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.1" - isarray: "npm:0.0.1" - string_decoder: "npm:~0.10.x" - checksum: 10c0/02272551396ed8930ddee1a088bdf0379f0f7cc47ac49ed8804e998076cb7daec9fbd2b1fd9c0490ec72e56e8bb3651abeb8080492b8e0a9c3f2158330908ed6 - languageName: node - linkType: hard - -"readable-web-to-node-stream@npm:^3.0.2": - version: 3.0.2 - resolution: "readable-web-to-node-stream@npm:3.0.2" - dependencies: - readable-stream: "npm:^3.6.0" - checksum: 10c0/533d5cd1580232a2c753e52a245be13fc552e6f82c5053a8a8da7ea1063d73a34f936a86b3d4433cdb4a13dd683835cfc87f230936cb96d329a1e28b6040f42e - languageName: node - linkType: hard - -"recursive-watch@npm:^1.1.4": - version: 1.1.4 - resolution: "recursive-watch@npm:1.1.4" - dependencies: - ttl: "npm:^1.3.0" - bin: - recursive-watch: ./bin.js - checksum: 10c0/6bd6da1d85eb09a08bb9b4631fc5e2b79383d252d897c6fd3d0d5e3c334b0bb3ac6b4d1d64c169ef52814552410802fd7404ddabe55327e4d2a21a601925ef2f - languageName: node - linkType: hard - -"redent@npm:^3.0.0": - version: 3.0.0 - resolution: "redent@npm:3.0.0" - dependencies: - indent-string: "npm:^4.0.0" - strip-indent: "npm:^3.0.0" - checksum: 10c0/d64a6b5c0b50eb3ddce3ab770f866658a2b9998c678f797919ceb1b586bab9259b311407280bd80b804e2a7c7539b19238ae6a2a20c843f1a7fcff21d48c2eae - languageName: node - linkType: hard - -"redis-commands@npm:1.7.0": - version: 1.7.0 - resolution: "redis-commands@npm:1.7.0" - checksum: 10c0/c78b46d8d6e811f422961878538c57048a451ab56760d3f1657a7c8f29aaae42cc23890f75655556a59ec67611022e18cb443d2976e6c55036934bfe783aa60e - languageName: node - linkType: hard - -"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": - version: 1.2.0 - resolution: "redis-errors@npm:1.2.0" - checksum: 10c0/5b316736e9f532d91a35bff631335137a4f974927bb2fb42bf8c2f18879173a211787db8ac4c3fde8f75ed6233eb0888e55d52510b5620e30d69d7d719c8b8a7 - languageName: node - linkType: hard - -"redis-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "redis-parser@npm:3.0.0" - dependencies: - redis-errors: "npm:^1.0.0" - checksum: 10c0/ee16ac4c7b2a60b1f42a2cdaee22b005bd4453eb2d0588b8a4939718997ae269da717434da5d570fe0b05030466eeb3f902a58cf2e8e1ca058bf6c9c596f632f - languageName: node - linkType: hard - -"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": - version: 1.0.10 - resolution: "reflect.getprototypeof@npm:1.0.10" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.9" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.1" - which-builtin-type: "npm:^1.2.1" - checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.2.0": - version: 10.2.0 - resolution: "regenerate-unicode-properties@npm:10.2.0" - dependencies: - regenerate: "npm:^1.4.2" - checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.3": - version: 1.5.4 - resolution: "regexp.prototype.flags@npm:1.5.4" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - set-function-name: "npm:^2.0.2" - checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 - languageName: node - linkType: hard - -"regexpp@npm:^3.0.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: 10c0/d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710 - languageName: node - linkType: hard - -"regexpu-core@npm:^6.2.0": - version: 6.2.0 - resolution: "regexpu-core@npm:6.2.0" - dependencies: - regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.2.0" - regjsgen: "npm:^0.8.0" - regjsparser: "npm:^0.12.0" - unicode-match-property-ecmascript: "npm:^2.0.0" - unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 - languageName: node - linkType: hard - -"regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "regjsgen@npm:0.8.0" - checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd - languageName: node - linkType: hard - -"regjsparser@npm:^0.12.0": - version: 0.12.0 - resolution: "regjsparser@npm:0.12.0" - dependencies: - jsesc: "npm:~3.0.2" - bin: - regjsparser: bin/parser - checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b - languageName: node - linkType: hard - -"relative-to-absolute-iri@npm:^1.0.0, relative-to-absolute-iri@npm:^1.0.2, relative-to-absolute-iri@npm:^1.0.5": - version: 1.0.7 - resolution: "relative-to-absolute-iri@npm:1.0.7" - checksum: 10c0/8301941bb1c33818fd312d6729c91cbed47ee960963a35048e7331d88e5ded6eaaae608c33d3840ddcb959310dbf5041dfa5165540faba99334c5c53de721013 - languageName: node - linkType: hard - -"request@npm:^2.88.0": - version: 2.88.2 - resolution: "request@npm:2.88.2" - dependencies: - aws-sign2: "npm:~0.7.0" - aws4: "npm:^1.8.0" - caseless: "npm:~0.12.0" - combined-stream: "npm:~1.0.6" - extend: "npm:~3.0.2" - forever-agent: "npm:~0.6.1" - form-data: "npm:~2.3.2" - har-validator: "npm:~5.1.3" - http-signature: "npm:~1.2.0" - is-typedarray: "npm:~1.0.0" - isstream: "npm:~0.1.2" - json-stringify-safe: "npm:~5.0.1" - mime-types: "npm:~2.1.19" - oauth-sign: "npm:~0.9.0" - performance-now: "npm:^2.1.0" - qs: "npm:~6.5.2" - safe-buffer: "npm:^5.1.2" - tough-cookie: "npm:~2.5.0" - tunnel-agent: "npm:^0.6.0" - uuid: "npm:^3.3.2" - checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"resolve-alpn@npm:^1.0.0": - version: 1.2.1 - resolution: "resolve-alpn@npm:1.2.1" - checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: "npm:^5.0.0" - checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab - languageName: node - linkType: hard - -"resolve.exports@npm:2.0.3": - version: 2.0.3 - resolution: "resolve.exports@npm:2.0.3" - checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d - languageName: node - linkType: hard - -"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.15.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4": - version: 1.22.10 - resolution: "resolve@npm:1.22.10" - dependencies: - is-core-module: "npm:^2.16.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.15.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": - version: 1.22.10 - resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 - languageName: node - linkType: hard - -"responselike@npm:^2.0.0": - version: 2.0.1 - resolution: "responselike@npm:2.0.1" - dependencies: - lowercase-keys: "npm:^2.0.0" - checksum: 10c0/360b6deb5f101a9f8a4174f7837c523c3ec78b7ca8a7c1d45a1062b303659308a23757e318b1e91ed8684ad1205721142dd664d94771cd63499353fd4ee732b5 - languageName: node - linkType: hard - -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: bin.js - checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 - languageName: node - linkType: hard - -"rimraf@npm:^4.4.1": - version: 4.4.1 - resolution: "rimraf@npm:4.4.1" - dependencies: - glob: "npm:^9.2.0" - bin: - rimraf: dist/cjs/src/bin.js - checksum: 10c0/8c5e142d26d8b222be9dc9a1a41ba48e95d8f374e813e66a8533e87c6180174fcb3f573b9b592eca12740ebf8b78526d136acd971d4a790763d6f2232c34fa24 - languageName: node - linkType: hard - -"rsync@npm:^0.6.1": - version: 0.6.1 - resolution: "rsync@npm:0.6.1" - checksum: 10c0/90f6717177ae681d357806153aa27e0598c605ffe01a6c24671f96994146a594c9eebf7251b772e94ca1d1a673628dce4836e6771f0c20e0f41a57c18ccd2da7 - languageName: node - linkType: hard - -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^7.5.5": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 - languageName: node - linkType: hard - -"safe-array-concat@npm:^1.1.2, safe-array-concat@npm:^1.1.3": - version: 1.1.3 - resolution: "safe-array-concat@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.6" - has-symbols: "npm:^1.1.0" - isarray: "npm:^2.0.5" - checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d - languageName: node - linkType: hard - -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 - languageName: node - linkType: hard - -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - -"safe-push-apply@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-push-apply@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - isarray: "npm:^2.0.5" - checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 - languageName: node - linkType: hard - -"safe-regex-test@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex-test@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - is-regex: "npm:^1.2.1" - checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:^2.1.2, safer-buffer@npm:~2.1.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"sanitize-html@npm:^2.6.1": - version: 2.14.0 - resolution: "sanitize-html@npm:2.14.0" - dependencies: - deepmerge: "npm:^4.2.2" - escape-string-regexp: "npm:^4.0.0" - htmlparser2: "npm:^8.0.0" - is-plain-object: "npm:^5.0.0" - parse-srcset: "npm:^1.0.2" - postcss: "npm:^8.3.11" - checksum: 10c0/7e001ab18d09ce5c4d0dbb6837c7a36f132874267e5b724cdef79b21188b55e652a591d79d297f9473aaf80cf96bb1894c3fa1046ccba977ed9aa365d6eb3a5c - languageName: node - linkType: hard - -"sax@npm:^1.2.4": - version: 1.4.1 - resolution: "sax@npm:1.4.1" - checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c - languageName: node - linkType: hard - -"security-context@npm:^4.0.0": - version: 4.0.0 - resolution: "security-context@npm:4.0.0" - checksum: 10c0/234e466945bdaf8dedf9538ebb88b6041485076de3ce74af4fa9ad90ecb38df59ffd050aac888c513484de3a45a7e09c603692e72c0dcbce24f024e2ed03ac3c - languageName: node - linkType: hard - -"semapps-middleware@workspace:.": - version: 0.0.0-use.local - resolution: "semapps-middleware@workspace:." - dependencies: - "@types/dotenv-flow": "npm:^3.3.3" - "@types/ioredis": "npm:^4.27.0" - "@types/node-fetch": "npm:^2.6.13" - "@types/streamify-string": "npm:^1.0.4" - "@typescript-eslint/eslint-plugin": "npm:^7.1.1" - "@typescript-eslint/parser": "npm:^7.5.0" - eslint: "npm:^8.2.0" - eslint-config-airbnb: "npm:^19.0.4" - eslint-config-prettier: "npm:^9.1.0" - eslint-import-resolver-typescript: "npm:^3.6.1" - eslint-plugin-import: "npm:^2.29.1" - eslint-plugin-jest: "npm:^27.9.0" - eslint-plugin-jsdoc: "npm:^48.2.1" - eslint-plugin-node: "npm:^11.1.0" - eslint-plugin-prettier: "npm:^5.1.3" - lerna: "npm:^8.0.1" - moleculer: "npm:^0.14.35" - nx: "npm:17.2.5" - prettier: "npm:^3.1.1" - typescript: "npm:^5.9.2" - languageName: unknown - linkType: soft - -"semapps-tests@workspace:tests": - version: 0.0.0-use.local - resolution: "semapps-tests@workspace:tests" - dependencies: - "@babel/core": "npm:^7.28.0" - "@babel/plugin-transform-runtime": "npm:^7.28.0" - "@babel/preset-env": "npm:^7.28.0" - "@babel/preset-typescript": "npm:^7.27.1" - "@jest/globals": "npm:^30.0.5" - "@rdfjs/data-model": "npm:^1.3.4" - "@semapps/activitypub": "npm:1.1.4" - "@semapps/auth": "npm:1.1.4" - "@semapps/core": "npm:1.1.4" - "@semapps/crypto": "npm:1.1.4" - "@semapps/inference": "npm:1.1.4" - "@semapps/jsonld": "npm:1.1.4" - "@semapps/ldp": "npm:1.1.4" - "@semapps/middlewares": "npm:1.1.4" - "@semapps/mime-types": "npm:1.1.4" - "@semapps/ontologies": "npm:1.1.4" - "@semapps/sync": "npm:1.1.4" - "@semapps/triplestore": "npm:1.1.4" - "@semapps/webacl": "npm:1.1.4" - "@semapps/webid": "npm:1.1.4" - "@types/ioredis": "npm:^4.27.0" - "@types/jest": "npm:^30.0.0" - babel-jest: "npm:^30.0.5" - babel-plugin-transform-import-meta: "npm:^2.3.3" - babel-preset-vite: "npm:^1.1.3" - dotenv-flow: "npm:^3.1.0" - expect-type: "npm:^1.2.2" - fs-extra: "npm:^9.0.1" - http-link-header: "npm:^1.1.1" - ioredis: "npm:^4.27.0" - jest: "npm:^30.0.5" - lru-cache: "npm:10.1.0" - moleculer: "npm:^0.14.35" - moleculer-web: "npm:^0.10.7" - node-fetch: "npm:^2.6.6" - rdf-data-model: "npm:^1.0.0" - supertest: "npm:^4.0.2" - ts-node: "npm:^10.9.2" - url-join: "npm:^4.0.1" - wait-for-expect: "npm:^3.0.2" - languageName: unknown - linkType: soft - -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 - languageName: node - linkType: hard - -"semver@npm:7.5.3": - version: 7.5.3 - resolution: "semver@npm:7.5.3" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10c0/4cf3bab7e8cf8c2ae521fc4bcc50a4d6912a836360796b23b9f1c26f45d27a73f870e47664df4770bde0dd60dc4d4781a05fd49fe91d72376ea5519b9e791459 - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d - languageName: node - linkType: hard - -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf - languageName: node - linkType: hard - -"semver@npm:^7.7.2": - version: 7.7.2 - resolution: "semver@npm:7.7.2" - bin: - semver: bin/semver.js - checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea - languageName: node - linkType: hard - -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" - dependencies: - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - mime: "npm:1.6.0" - ms: "npm:2.1.3" - on-finished: "npm:2.4.1" - range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 - languageName: node - linkType: hard - -"serialize-error@npm:^5.0.0": - version: 5.0.0 - resolution: "serialize-error@npm:5.0.0" - dependencies: - type-fest: "npm:^0.8.0" - checksum: 10c0/6934419798421a14536178d7ab70b9676dc747813817ec9841c96aeb87759f436a71feb241593c6f6aa9a697c0429285aef892d459e7d8cd5156b1d35f1606a1 - languageName: node - linkType: hard - -"serialize-error@npm:^8.1.0": - version: 8.1.0 - resolution: "serialize-error@npm:8.1.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/8cfd89f43ca93e283c5f1d16178a536bdfac9bc6029f4a9df988610cc399bc4f2478d1f10ce40b9dff66b863a5158a19b438fbec929045c96d92174f6bca1e88 - languageName: node - linkType: hard - -"serve-static@npm:^1.14.1": - version: 1.16.2 - resolution: "serve-static@npm:1.16.2" - dependencies: - encodeurl: "npm:~2.0.0" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.3" - send: "npm:0.19.0" - checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.2": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c - languageName: node - linkType: hard - -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - functions-have-names: "npm:^1.2.3" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 - languageName: node - linkType: hard - -"set-proto@npm:^1.0.0": - version: 1.0.0 - resolution: "set-proto@npm:1.0.0" - dependencies: - dunder-proto: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a - languageName: node - linkType: hard - -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc - languageName: node - linkType: hard - -"shallow-clone@npm:^3.0.0": - version: 3.0.1 - resolution: "shallow-clone@npm:3.0.1" - dependencies: - kind-of: "npm:^6.0.2" - checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e - languageName: node - linkType: hard - -"sharp@npm:^0.31.2": - version: 0.31.3 - resolution: "sharp@npm:0.31.3" - dependencies: - color: "npm:^4.2.3" - detect-libc: "npm:^2.0.1" - node-addon-api: "npm:^5.0.0" - node-gyp: "npm:latest" - prebuild-install: "npm:^7.1.1" - semver: "npm:^7.3.8" - simple-get: "npm:^4.0.1" - tar-fs: "npm:^2.1.1" - tunnel-agent: "npm:^0.6.0" - checksum: 10c0/22cab24b7145546f25cd5e2a27841880405335ddeeb4e05be6e32d4221baac4fd89d0fb31c397a0cea31b6f1b6b139d4eb49d036cdba1f33175ffa0b1a4eccfc - languageName: node - linkType: hard - -"shebang-command@npm:^1.2.0": - version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: "npm:^1.0.0" - checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"sigstore@npm:^2.2.0": - version: 2.3.1 - resolution: "sigstore@npm:2.3.1" - dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - "@sigstore/sign": "npm:^2.3.2" - "@sigstore/tuf": "npm:^2.3.4" - "@sigstore/verify": "npm:^1.2.1" - checksum: 10c0/8906b1074130d430d707e46f15c66eb6996891dc0d068705f1884fb1251a4a367f437267d44102cdebcee34f1768b3f30131a2ec8fb7aac74ba250903a459aa7 - languageName: node - linkType: hard - -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 - languageName: node - linkType: hard - -"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: "npm:^6.0.0" - once: "npm:^1.3.1" - simple-concat: "npm:^1.0.0" - checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: "npm:^0.3.1" - checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 - languageName: node - linkType: hard - -"slash@npm:3.0.0, slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slashes@npm:^3.0.12": - version: 3.0.12 - resolution: "slashes@npm:3.0.12" - checksum: 10c0/71ca2a1fcd1ab6814b0fdb8cf9c33a3d54321deec2aa8d173510f0086880201446021a9b9e6a18561f7c472b69a2145977c6a8fb9c53a8ff7be31778f203d175 - languageName: node - linkType: hard - -"slick@npm:^1.12.2": - version: 1.12.2 - resolution: "slick@npm:1.12.2" - checksum: 10c0/fea97c36b2bdcd1b80caea150cd8135dc9d3ffe659bbe04fa6f4b4dff373f5d5aef09a8ef384b331c3fdd9567faf447b75b850ab35d2c69ff8a8a92def3d49e1 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" - dependencies: - ip-address: "npm:^9.0.5" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 - languageName: node - linkType: hard - -"sodium-native@npm:^3.2.0": - version: 3.4.1 - resolution: "sodium-native@npm:3.4.1" - dependencies: - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.3.0" - checksum: 10c0/b67de94d80a234d348e3bbcd27f39243f974dfdb5e2538b146433c5f2a42ce4697ce3bf5dff8a2803dab16486167e8cc755af426ff2934cb5ca393cb5b116c77 - languageName: node - linkType: hard - -"sort-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "sort-keys@npm:2.0.0" - dependencies: - is-plain-obj: "npm:^1.0.0" - checksum: 10c0/c11a6313995cb67ccf35fed4b1f6734176cc1d1e350ee311c061a2340ada4f7e23b046db064d518b63adba98c0f763739920c59fb4659a0b8482ec7a1f255081 - languageName: node - linkType: hard - -"sorted-array-functions@npm:^1.3.0": - version: 1.3.0 - resolution: "sorted-array-functions@npm:1.3.0" - checksum: 10c0/d94e3401a2bc1689dc913f56939621c892a3ff1288e984e85689a6c6e46b0ec16f65edc8b47d46b0f09d06857f67ca245553b462da597619102b9fad270476d9 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: "npm:^1.0.0" - source-map: "npm:^0.6.0" - checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e - languageName: node - linkType: hard - -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 - languageName: node - linkType: hard - -"sparqlalgebrajs@npm:^3.0.1": - version: 3.0.3 - resolution: "sparqlalgebrajs@npm:3.0.3" - dependencies: - "@rdfjs/types": "npm:*" - "@types/sparqljs": "npm:^3.1.2" - fast-deep-equal: "npm:^3.1.3" - minimist: "npm:^1.2.5" - rdf-data-factory: "npm:^1.1.0" - rdf-isomorphic: "npm:^1.3.0" - rdf-string: "npm:^1.6.0" - sparqljs: "npm:^3.4.2" - bin: - sparqlalgebrajs: bin/sparqlalgebrajs.js - checksum: 10c0/4074b864f72857303cbabe2771e790e28429cd732d89d61e541fa3629a333c239b5878e286b88001eb539fd2237e5d57273bff6dae2206da74a7c647f8cfef1d - languageName: node - linkType: hard - -"sparqljs@npm:^3.4.2, sparqljs@npm:^3.5.2": - version: 3.7.3 - resolution: "sparqljs@npm:3.7.3" - dependencies: - rdf-data-factory: "npm:^1.1.2" - bin: - sparqljs: bin/sparql-to-json - checksum: 10c0/733323136c490e6454ced4cdd02023054a8893c3bf9e739ccd39f526a96ef5edcf42352c4f0cf2c90847292a239dfe4c68bd35f044699e2f585601a0c56c1c70 - languageName: node - linkType: hard - -"sparqljson-parse@npm:^1.5.1": - version: 1.7.0 - resolution: "sparqljson-parse@npm:1.7.0" - dependencies: - "@rdfjs/types": "npm:*" - "@types/node": "npm:^13.1.0" - JSONStream: "npm:^1.3.3" - rdf-data-factory: "npm:^1.1.0" - checksum: 10c0/010c94b9bc37e545c3fe2f90c53ac033a652d76bd8075e21bf9fd9d6c78c92081d67c20b3384208e937c2695ff9d849fca8344597fe95653960fe5390f605ecc - languageName: node - linkType: hard - -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: "npm:^3.0.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.5.0 - resolution: "spdx-exceptions@npm:2.5.0" - checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^4.0.0": - version: 4.0.0 - resolution: "spdx-expression-parse@npm:4.0.0" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.21 - resolution: "spdx-license-ids@npm:3.0.21" - checksum: 10c0/ecb24c698d8496aa9efe23e0b1f751f8a7a89faedcdfcbfabae772b546c2db46ccde8f3bc447a238eb86bbcd4f73fea88720ef3b8394f7896381bec3d7736411 - languageName: node - linkType: hard - -"speakingurl@npm:^14.0.1": - version: 14.0.1 - resolution: "speakingurl@npm:14.0.1" - checksum: 10c0/1de1d1b938a7c4d9e79593ff7a26d312ec04a7c3234ca40b7f9b8106daf74ea9d2110a077f5db97ecf3762b83069e3ccbf9694431b51d4fcfd863f0b3333c342 - languageName: node - linkType: hard - -"split2@npm:^3.2.2": - version: 3.2.2 - resolution: "split2@npm:3.2.2" - dependencies: - readable-stream: "npm:^3.0.0" - checksum: 10c0/2dad5603c52b353939befa3e2f108f6e3aff42b204ad0f5f16dd12fd7c2beab48d117184ce6f7c8854f9ee5ffec6faae70d243711dd7d143a9f635b4a285de4e - languageName: node - linkType: hard - -"split@npm:^1.0.1": - version: 1.0.1 - resolution: "split@npm:1.0.1" - dependencies: - through: "npm:2" - checksum: 10c0/7f489e7ed5ff8a2e43295f30a5197ffcb2d6202c9cf99357f9690d645b19c812bccf0be3ff336fea5054cda17ac96b91d67147d95dbfc31fbb5804c61962af85 - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.1, sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb - languageName: node - linkType: hard - -"ssh2-sftp-client@npm:^7.2.1": - version: 7.2.3 - resolution: "ssh2-sftp-client@npm:7.2.3" - dependencies: - concat-stream: "npm:^2.0.0" - promise-retry: "npm:^2.0.1" - ssh2: "npm:^1.8.0" - checksum: 10c0/780da50d87789af1f943490b1ad11797cf60f20761345c14ba920b90fec845a7fc8e11093ea26ddb4619ea3727fa75d71ca21dca72e6d4f3b7324c985b31801e - languageName: node - linkType: hard - -"ssh2@npm:^1.8.0": - version: 1.16.0 - resolution: "ssh2@npm:1.16.0" - dependencies: - asn1: "npm:^0.2.6" - bcrypt-pbkdf: "npm:^1.0.2" - cpu-features: "npm:~0.0.10" - nan: "npm:^2.20.0" - dependenciesMeta: - cpu-features: - optional: true - nan: - optional: true - checksum: 10c0/d336a85d87501c64ba230b6c1a2901a9b0e376fe7f7a1640a7f8dbdafe674b2e1a5dc6236ffd1329969dc0cf03cd57759b28743075e61229a984065ee1d56bed - languageName: node - linkType: hard - -"sshpk@npm:^1.18.0, sshpk@npm:^1.7.0": - version: 1.18.0 - resolution: "sshpk@npm:1.18.0" - dependencies: - asn1: "npm:~0.2.3" - assert-plus: "npm:^1.0.0" - bcrypt-pbkdf: "npm:^1.0.0" - dashdash: "npm:^1.12.0" - ecc-jsbn: "npm:~0.1.1" - getpass: "npm:^0.1.1" - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.0.2" - tweetnacl: "npm:~0.14.0" - bin: - sshpk-conv: bin/sshpk-conv - sshpk-sign: bin/sshpk-sign - sshpk-verify: bin/sshpk-verify - checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0, ssri@npm:^10.0.6": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 - languageName: node - linkType: hard - -"ssri@npm:^12.0.0": - version: 12.0.0 - resolution: "ssri@npm:12.0.0" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d - languageName: node - linkType: hard - -"stable-hash@npm:^0.0.4": - version: 0.0.4 - resolution: "stable-hash@npm:0.0.4" - checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0 - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.6": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a - languageName: node - linkType: hard - -"standard-as-callback@npm:^2.1.0": - version: 2.1.0 - resolution: "standard-as-callback@npm:2.1.0" - checksum: 10c0/012677236e3d3fdc5689d29e64ea8a599331c4babe86956bf92fc5e127d53f85411c5536ee0079c52c43beb0026b5ce7aa1d834dd35dd026e82a15d1bcaead1f - languageName: node - linkType: hard - -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 - languageName: node - linkType: hard - -"stream-to-string@npm:^1.2.0": - version: 1.2.1 - resolution: "stream-to-string@npm:1.2.1" - dependencies: - promise-polyfill: "npm:^1.1.6" - checksum: 10c0/08b764a17ad7615f5daa188120448dc4d06b097a3c515e337378e1653bc815ad25d388a44e0e2b98b7637841913c42a6734c1f60d142b2e7827f4b41d62d112a - languageName: node - linkType: hard - -"streamify-string@npm:^1.0.1": - version: 1.0.1 - resolution: "streamify-string@npm:1.0.1" - checksum: 10c0/d6b72771ab8a8a15e822a636e3bbe9debe34aa59901cc90a6b8e27cd6f02d52f0335704ed32c4cd69b2dab0a192f503877d53718a51282fe4901f7e9092c8b5b - languageName: node - linkType: hard - -"streamsearch@npm:0.1.2": - version: 0.1.2 - resolution: "streamsearch@npm:0.1.2" - checksum: 10c0/408a3db5b5643c1d6eb65c9d8ccc011b4857bfca41946d808b7f165b5b85f47755b2ff56ec1c4bbbeb5a496afcde9adfea12f9f67bd09ff3f04ae3f1f58d37c6 - languageName: node - linkType: hard - -"string-length@npm:^4.0.2": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: "npm:^1.0.2" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c - languageName: node - linkType: hard - -"string-template@npm:^1.0.0": - version: 1.0.0 - resolution: "string-template@npm:1.0.0" - checksum: 10c0/7c07ab5b4274a50b1f077a47769044b9a8f0a5a4a47811cf3f9ba5acc9d2ff1231d593a93983ea554c3211fb09949e805912f9ce9d7688990eeb41d5008b95d2 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"string.prototype.trim@npm:^1.2.10": - version: 1.2.10 - resolution: "string.prototype.trim@npm:1.2.10" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - define-data-property: "npm:^1.1.4" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-object-atoms: "npm:^1.0.0" - has-property-descriptors: "npm:^1.0.2" - checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": - version: 1.0.9 - resolution: "string.prototype.trimend@npm:1.0.9" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.2" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: "npm:~5.2.0" - checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d - languageName: node - linkType: hard - -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: 10c0/1c628d78f974aa7539c496029f48e7019acc32487fc695464f9d6bdfec98edd7d933a06b3216bc2016918f6e75074c611d84430a53cb0e43071597d6c1ac5e25 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f - languageName: node - linkType: hard - -"strip-indent@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-indent@npm:3.0.0" - dependencies: - min-indent: "npm:^1.0.0" - checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd - languageName: node - linkType: hard - -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 - languageName: node - linkType: hard - -"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": - version: 2.1.0 - resolution: "strong-log-transformer@npm:2.1.0" - dependencies: - duplexer: "npm:^0.1.1" - minimist: "npm:^1.2.0" - through: "npm:^2.3.4" - bin: - sl-log-transformer: bin/sl-log-transformer.js - checksum: 10c0/3c3b8aa8f34d661910563ff996412e2f527fc814e699a376854b554d4a4294ab7e285b4e2c08a080a7b19c5600a9b93a98798d3ac600fe3de545ca6605c07829 - languageName: node - linkType: hard - -"superagent@npm:^3.8.3": - version: 3.8.3 - resolution: "superagent@npm:3.8.3" - dependencies: - component-emitter: "npm:^1.2.0" - cookiejar: "npm:^2.1.0" - debug: "npm:^3.1.0" - extend: "npm:^3.0.0" - form-data: "npm:^2.3.1" - formidable: "npm:^1.2.0" - methods: "npm:^1.1.1" - mime: "npm:^1.4.1" - qs: "npm:^6.5.1" - readable-stream: "npm:^2.3.5" - checksum: 10c0/e467c39aee7aa57dc2e45b5c7c76d70a7ad4fff8d3d2b57a2da0edfaca0e598562fc9f8f74a1383661744f68b3dfd2cca388a3000b41d6c2d8e0e5d031d152fe - languageName: node - linkType: hard - -"supertest@npm:^4.0.2": - version: 4.0.2 - resolution: "supertest@npm:4.0.2" - dependencies: - methods: "npm:^1.1.2" - superagent: "npm:^3.8.3" - checksum: 10c0/436ab991ae9242e695374d0006bf2dd16fbbab287966d0176c92eaf8f9a124a839a0ff6db22f46d1de0faeec3752ff8ebfbe051681c050032acab9f4af192399 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - -"supports-color@npm:^8.1.1": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - -"synckit@npm:^0.11.8": - version: 0.11.11 - resolution: "synckit@npm:0.11.11" - dependencies: - "@pkgr/core": "npm:^0.2.9" - checksum: 10c0/f0761495953d12d94a86edf6326b3a565496c72f9b94c02549b6961fb4d999f4ca316ce6b3eb8ed2e4bfc5056a8de65cda0bd03a233333a35221cd2fdc0e196b - languageName: node - linkType: hard - -"synckit@npm:^0.9.1": - version: 0.9.2 - resolution: "synckit@npm:0.9.2" - dependencies: - "@pkgr/core": "npm:^0.1.0" - tslib: "npm:^2.6.2" - checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59 - languageName: node - linkType: hard - -"tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 - languageName: node - linkType: hard - -"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": - version: 2.1.2 - resolution: "tar-fs@npm:2.1.2" - dependencies: - chownr: "npm:^1.1.1" - mkdirp-classic: "npm:^0.5.2" - pump: "npm:^3.0.0" - tar-stream: "npm:^2.1.4" - checksum: 10c0/9c704bd4a53be7565caf34ed001d1428532457fe3546d8fc1233f0f0882c3d2403f8602e8046e0b0adeb31fe95336572a69fb28851a391523126b697537670fc - languageName: node - linkType: hard - -"tar-stream@npm:^2.1.4, tar-stream@npm:~2.2.0": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" - dependencies: - bl: "npm:^4.0.3" - end-of-stream: "npm:^1.4.1" - fs-constants: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.1.1" - checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 - languageName: node - linkType: hard - -"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 - languageName: node - linkType: hard - -"tar@npm:^7.4.3": - version: 7.4.3 - resolution: "tar@npm:7.4.3" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.0.1" - mkdirp: "npm:^3.0.1" - yallist: "npm:^5.0.0" - checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d - languageName: node - linkType: hard - -"temp-dir@npm:1.0.0": - version: 1.0.0 - resolution: "temp-dir@npm:1.0.0" - checksum: 10c0/648669d5e154d1961217784c786acadccf0156519c19e0aceda7edc76f5bdfa32a40dd7f88ebea9238ed6e3dedf08b846161916c8947058c384761351be90a8e - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": "npm:^0.1.2" - glob: "npm:^7.1.4" - minimatch: "npm:^3.0.4" - checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 - languageName: node - linkType: hard - -"text-decoding@npm:^1.0.0": - version: 1.0.0 - resolution: "text-decoding@npm:1.0.0" - checksum: 10c0/290dbd6111f39a4020b3e2384de614f90051eff3cd11176329fda0a40ac0b0a07e6820b9aeb4b0b7c2cc7869b62cd3b25944c71e9e16b628bcf57299ab84e311 - languageName: node - linkType: hard - -"text-extensions@npm:^1.0.0": - version: 1.9.0 - resolution: "text-extensions@npm:1.9.0" - checksum: 10c0/9ad5a9f723a871e2d884e132d7e93f281c60b5759c95f3f6b04704856548715d93a36c10dbaf5f12b91bf405f0cf3893bf169d4d143c0f5509563b992d385443 - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c - languageName: node - linkType: hard - -"through2@npm:^2.0.0": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: "npm:~2.3.6" - xtend: "npm:~4.0.1" - checksum: 10c0/cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade - languageName: node - linkType: hard - -"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.12": - version: 0.2.14 - resolution: "tinyglobby@npm:0.2.14" - dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"tmp@npm:~0.2.1": - version: 0.2.3 - resolution: "tmp@npm:0.2.3" - checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 - languageName: node - linkType: hard - -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"toidentifier@npm:1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 - languageName: node - linkType: hard - -"token-stream@npm:1.0.0": - version: 1.0.0 - resolution: "token-stream@npm:1.0.0" - checksum: 10c0/c1924a89686fc035d579cbe856da12306571d5fe7408eeeebe80df7c25c5cc644b8ae102d5cbc0f085d0e105f391d1a48dc0e568520434c5b444ea6c7de2b822 - languageName: node - linkType: hard - -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: "npm:^1.1.28" - punycode: "npm:^2.1.1" - checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"treeverse@npm:^3.0.0": - version: 3.0.0 - resolution: "treeverse@npm:3.0.0" - checksum: 10c0/286479b9c05a8fb0538ee7d67a5502cea7704f258057c784c9c1118a2f598788b2c0f7a8d89e74648af88af0225b31766acecd78e6060736f09b21dd3fa255db - languageName: node - linkType: hard - -"trim-newlines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-newlines@npm:3.0.1" - checksum: 10c0/03cfefde6c59ff57138412b8c6be922ecc5aec30694d784f2a65ef8dcbd47faef580b7de0c949345abdc56ec4b4abf64dd1e5aea619b200316e471a3dd5bf1f6 - languageName: node - linkType: hard - -"ts-api-utils@npm:^1.3.0": - version: 1.4.3 - resolution: "ts-api-utils@npm:1.4.3" - peerDependencies: - typescript: ">=4.2.0" - checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a - languageName: node - linkType: hard - -"ts-node@npm:^10.9.2": - version: 10.9.2 - resolution: "ts-node@npm:10.9.2" - dependencies: - "@cspotcode/source-map-support": "npm:^0.8.0" - "@tsconfig/node10": "npm:^1.0.7" - "@tsconfig/node12": "npm:^1.0.7" - "@tsconfig/node14": "npm:^1.0.0" - "@tsconfig/node16": "npm:^1.0.2" - acorn: "npm:^8.4.1" - acorn-walk: "npm:^8.1.1" - arg: "npm:^4.1.0" - create-require: "npm:^1.1.0" - diff: "npm:^4.0.1" - make-error: "npm:^1.1.1" - v8-compile-cache-lib: "npm:^3.0.1" - yn: "npm:3.1.1" - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 - languageName: node - linkType: hard - -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": "npm:^0.0.29" - json5: "npm:^1.0.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 - languageName: node - linkType: hard - -"tsconfig-paths@npm:^4.1.2": - version: 4.2.0 - resolution: "tsconfig-paths@npm:4.2.0" - dependencies: - json5: "npm:^2.2.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/09a5877402d082bb1134930c10249edeebc0211f36150c35e1c542e5b91f1047b1ccf7da1e59babca1ef1f014c525510f4f870de7c9bda470c73bb4e2721b3ea - languageName: node - linkType: hard - -"tslib@npm:^1.8.1": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 - languageName: node - linkType: hard - -"ttl@npm:^1.3.0": - version: 1.3.1 - resolution: "ttl@npm:1.3.1" - checksum: 10c0/097d898ceedc4fcdcd767c28c880096c78f5d69ecf6ddd95a0b465abc61f486c8f4f9dda2d527cb159a7d51f3bbdaeb703fff71b6f968a3d12396046ecd6d13c - languageName: node - linkType: hard - -"tuf-js@npm:^2.2.1": - version: 2.2.1 - resolution: "tuf-js@npm:2.2.1" - dependencies: - "@tufjs/models": "npm:2.0.1" - debug: "npm:^4.3.4" - make-fetch-happen: "npm:^13.0.1" - checksum: 10c0/7c17b097571f001730d7be0aeaec6bec46ed2f25bf73990b1133c383d511a1ce65f831e5d6d78770940a85b67664576ff0e4c98e5421bab6d33ff36e4be500c8 - languageName: node - linkType: hard - -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a - languageName: node - linkType: hard - -"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": - version: 0.14.5 - resolution: "tweetnacl@npm:0.14.5" - checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 - languageName: node - linkType: hard - -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd - languageName: node - linkType: hard - -"type-fest@npm:^0.18.0": - version: 0.18.1 - resolution: "type-fest@npm:0.18.1" - checksum: 10c0/303f5ecf40d03e1d5b635ce7660de3b33c18ed8ebc65d64920c02974d9e684c72483c23f9084587e9dd6466a2ece1da42ddc95b412a461794dd30baca95e2bac - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"type-fest@npm:^0.4.1": - version: 0.4.1 - resolution: "type-fest@npm:0.4.1" - checksum: 10c0/2e65f43209492638244842f70d86e7325361c92dd1cc8e3bf5728c96b980305087fa5ba60652e9053d56c302ef4f1beb9652a91b72a50da0ea66c6b851f3b9cb - languageName: node - linkType: hard - -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: 10c0/0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 - languageName: node - linkType: hard - -"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 - languageName: node - linkType: hard - -"type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: "npm:0.3.0" - mime-types: "npm:~2.1.24" - checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d - languageName: node - linkType: hard - -"typed-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-buffer@npm:1.0.3" - dependencies: - call-bound: "npm:^1.0.3" - es-errors: "npm:^1.3.0" - is-typed-array: "npm:^1.1.14" - checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 - languageName: node - linkType: hard - -"typed-array-byte-length@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-byte-length@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.8" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-proto: "npm:^1.2.0" - is-typed-array: "npm:^1.1.14" - checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e - languageName: node - linkType: hard - -"typed-array-byte-offset@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-byte-offset@npm:1.0.4" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-proto: "npm:^1.2.0" - is-typed-array: "npm:^1.1.15" - reflect.getprototypeof: "npm:^1.0.9" - checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.7": - version: 1.0.7 - resolution: "typed-array-length@npm:1.0.7" - dependencies: - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - is-typed-array: "npm:^1.1.13" - possible-typed-array-names: "npm:^1.0.0" - reflect.getprototypeof: "npm:^1.0.6" - checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 - languageName: node - linkType: hard - -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412 - languageName: node - linkType: hard - -"typescript@npm:>=3 < 6": - version: 5.7.3 - resolution: "typescript@npm:5.7.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa - languageName: node - linkType: hard - -"typescript@npm:^5.9.2": - version: 5.9.2 - resolution: "typescript@npm:5.9.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": - version: 5.7.3 - resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": - version: 5.9.2 - resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e - languageName: node - linkType: hard - -"uglify-js@npm:^3.1.4": - version: 3.19.3 - resolution: "uglify-js@npm:3.19.3" - bin: - uglifyjs: bin/uglifyjs - checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 - languageName: node - linkType: hard - -"uid-safe@npm:~2.1.5": - version: 2.1.5 - resolution: "uid-safe@npm:2.1.5" - dependencies: - random-bytes: "npm:~1.0.0" - checksum: 10c0/ec96862e859fd12175f3da7fda9d1359a2cf412fd521e10837cbdc6d554774079ce252f366981df9401283841c8924782f6dbee8f82a3a81f805ed8a8584595d - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.1.0": - version: 1.1.0 - resolution: "unbox-primitive@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.3" - has-bigints: "npm:^1.0.2" - has-symbols: "npm:^1.1.0" - which-boxed-primitive: "npm:^1.1.1" - checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 - languageName: node - linkType: hard - -"underscore.string@npm:^3.2.3": - version: 3.3.6 - resolution: "underscore.string@npm:3.3.6" - dependencies: - sprintf-js: "npm:^1.1.1" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/172319c7ef5436587e6f0fb5afe0b2e6b50f723a4070c7fb3454c5dfa5398ed3b7042c049eac2826bdd44d37cbd16b2b965d0ccc1597fde354b1d3a846fd4a39 - languageName: node - linkType: hard - -"underscore@npm:^1.8.3": - version: 1.13.7 - resolution: "underscore@npm:1.13.7" - checksum: 10c0/fad2b4aac48847674aaf3c30558f383399d4fdafad6dd02dd60e4e1b8103b52c5a9e5937e0cc05dacfd26d6a0132ed0410ab4258241240757e4a4424507471cd - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 - languageName: node - linkType: hard - -"undici-types@npm:~6.20.0": - version: 6.20.0 - resolution: "undici-types@npm:6.20.0" - checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf - languageName: node - linkType: hard - -"undici@npm:^5.21.2": - version: 5.28.5 - resolution: "undici@npm:5.28.5" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/4dfaa13089fe4c0758f84ec0d34b257e58608e6be3aa540f493b9864b39e3fdcd0a1ace38e434fe79db55f833aa30bcfddd8d6cbe3e0982b0dcae8ec17b65e08 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.1 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" - checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: "npm:^2.0.0" - unicode-property-aliases-ecmascript: "npm:^2.0.0" - checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.2.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" - checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f - languageName: node - linkType: hard - -"unique-filename@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-filename@npm:4.0.0" - dependencies: - unique-slug: "npm:^5.0.0" - checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 - languageName: node - linkType: hard - -"unique-slug@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-slug@npm:5.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 - languageName: node - linkType: hard - -"universal-user-agent@npm:^6.0.0": - version: 6.0.1 - resolution: "universal-user-agent@npm:6.0.1" - checksum: 10c0/5c9c46ffe19a975e11e6443640ed4c9e0ce48fcc7203325757a8414ac49940ebb0f4667f2b1fa561489d1eb22cb2d05a0f7c82ec20c5cba42e58e188fb19b187 - languageName: node - linkType: hard - -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unpipe@npm:1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c - languageName: node - linkType: hard - -"unrs-resolver@npm:^1.7.11": - version: 1.11.1 - resolution: "unrs-resolver@npm:1.11.1" - dependencies: - "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" - "@unrs/resolver-binding-android-arm64": "npm:1.11.1" - "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" - "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" - "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" - napi-postinstall: "npm:^0.3.0" - dependenciesMeta: - "@unrs/resolver-binding-android-arm-eabi": - optional: true - "@unrs/resolver-binding-android-arm64": - optional: true - "@unrs/resolver-binding-darwin-arm64": - optional: true - "@unrs/resolver-binding-darwin-x64": - optional: true - "@unrs/resolver-binding-freebsd-x64": - optional: true - "@unrs/resolver-binding-linux-arm-gnueabihf": - optional: true - "@unrs/resolver-binding-linux-arm-musleabihf": - optional: true - "@unrs/resolver-binding-linux-arm64-gnu": - optional: true - "@unrs/resolver-binding-linux-arm64-musl": - optional: true - "@unrs/resolver-binding-linux-ppc64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-musl": - optional: true - "@unrs/resolver-binding-linux-s390x-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-musl": - optional: true - "@unrs/resolver-binding-wasm32-wasi": - optional: true - "@unrs/resolver-binding-win32-arm64-msvc": - optional: true - "@unrs/resolver-binding-win32-ia32-msvc": - optional: true - "@unrs/resolver-binding-win32-x64-msvc": - optional: true - checksum: 10c0/c91b112c71a33d6b24e5c708dab43ab80911f2df8ee65b87cd7a18fb5af446708e98c4b415ca262026ad8df326debcc7ca6a801b2935504d87fd6f0b9d70dce1 - languageName: node - linkType: hard - -"upath@npm:2.0.1": - version: 2.0.1 - resolution: "upath@npm:2.0.1" - checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.1": - version: 1.1.2 - resolution: "update-browserslist-db@npm:1.1.2" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.3": - version: 1.1.3 - resolution: "update-browserslist-db@npm:1.1.3" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - -"url-join@npm:^4.0.1": - version: 4.0.1 - resolution: "url-join@npm:4.0.1" - checksum: 10c0/ac65e2c7c562d7b49b68edddcf55385d3e922bc1dd5d90419ea40b53b6de1607d1e45ceb71efb9d60da02c681d13c6cb3a1aa8b13fc0c989dfc219df97ee992d - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 - languageName: node - linkType: hard - -"util.promisify@npm:^1.0.1": - version: 1.1.3 - resolution: "util.promisify@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-data-property: "npm:^1.1.4" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - for-each: "npm:^0.3.3" - get-intrinsic: "npm:^1.2.6" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - object.getownpropertydescriptors: "npm:^2.1.8" - safe-array-concat: "npm:^1.1.3" - checksum: 10c0/b7a2f721222ffc26f8a12a1cdc44a81b16a614b81f2d6f71f50c8b214a20afe8324d5f0700f04759d6ea33446ba0730e4ef0b4e2c4f4ef5adca16dabd502fa2b - languageName: node - linkType: hard - -"util@npm:^0.12.4": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 - languageName: node - linkType: hard - -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" - bin: - uuid: dist/bin/uuid - checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe - languageName: node - linkType: hard - -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 - languageName: node - linkType: hard - -"uuid@npm:^8.3.0": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 - languageName: node - linkType: hard - -"uuid@npm:^9.0.1": - version: 9.0.1 - resolution: "uuid@npm:9.0.1" - bin: - uuid: dist/bin/uuid - checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^9.0.1": - version: 9.3.0 - resolution: "v8-to-istanbul@npm:9.3.0" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.12" - "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^2.0.0" - checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 - languageName: node - linkType: hard - -"valid-data-url@npm:^2.0.0": - version: 2.0.0 - resolution: "valid-data-url@npm:2.0.0" - checksum: 10c0/4e34ccf43139656770ce8474b2a49aa825ab793811ef37713041fa63e24197b02715908bbd40edacc247c592a1b0fa8d3f8279983655c6417eed5bf444eb1d7a - languageName: node - linkType: hard - -"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: "npm:^3.0.0" - spdx-expression-parse: "npm:^3.0.0" - checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f - languageName: node - linkType: hard - -"validate-npm-package-name@npm:5.0.1, validate-npm-package-name@npm:^5.0.0": - version: 5.0.1 - resolution: "validate-npm-package-name@npm:5.0.1" - checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 - languageName: node - linkType: hard - -"vc-js@npm:^0.6.4": - version: 0.6.4 - resolution: "vc-js@npm:0.6.4" - dependencies: - commander: "npm:^2.20.3" - credentials-context: "npm:^1.0.0" - debug: "npm:^4.1.1" - fs-extra: "npm:^8.1.0" - get-stdin: "npm:^7.0.0" - jsonld: "npm:^2.0.2" - jsonld-signatures: "npm:^5.0.0" - supports-color: "npm:^7.1.0" - bin: - vc-js: bin/vc-js - checksum: 10c0/04b33fce6688c293ed078c09aa5a68f41a27cff0f298338290c1a3bd7db8a51e805f6220c89d3d15925d3621f2f00270f19891feed1d5bf32b8880d87484c3f4 - languageName: node - linkType: hard - -"verror@npm:1.10.0": - version: 1.10.0 - resolution: "verror@npm:1.10.0" - dependencies: - assert-plus: "npm:^1.0.0" - core-util-is: "npm:1.0.2" - extsprintf: "npm:^1.2.0" - checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d - languageName: node - linkType: hard - -"void-elements@npm:^3.1.0": - version: 3.1.0 - resolution: "void-elements@npm:3.1.0" - checksum: 10c0/0b8686f9f9aa44012e9bd5eabf287ae0cde409b9a2854c5a2335cb83920c957668ac5876e3f0d158dd424744ac411a7270e64128556b451ed3bec875ef18534d - languageName: node - linkType: hard - -"wait-for-expect@npm:^3.0.2": - version: 3.0.2 - resolution: "wait-for-expect@npm:3.0.2" - checksum: 10c0/9616b82381f6571a0f3ed235a62ecdaf529816c9eef04f665ee1b8b515c3b7e1dc90d781111b6284bb777f45c4742f6c058d549a44d9d6e367ffd4d34f5f3b9e - languageName: node - linkType: hard - -"walk-up-path@npm:^3.0.1": - version: 3.0.1 - resolution: "walk-up-path@npm:3.0.1" - checksum: 10c0/3184738e0cf33698dd58b0ee4418285b9c811e58698f52c1f025435a85c25cbc5a63fee599f1a79cb29ca7ef09a44ec9417b16bfd906b1a37c305f7aa20ee5bc - languageName: node - linkType: hard - -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: "npm:1.0.12" - checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e - languageName: node - linkType: hard - -"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: "npm:^1.0.3" - checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 - languageName: node - linkType: hard - -"web-resource-inliner@npm:^4.2.1": - version: 4.3.4 - resolution: "web-resource-inliner@npm:4.3.4" - dependencies: - async: "npm:^3.1.0" - chalk: "npm:^2.4.2" - datauri: "npm:^2.0.0" - htmlparser2: "npm:^4.0.0" - lodash.unescape: "npm:^4.0.1" - request: "npm:^2.88.0" - safer-buffer: "npm:^2.1.2" - valid-data-url: "npm:^2.0.0" - xtend: "npm:^4.0.2" - checksum: 10c0/2e7b87449ceea0220398c0c509396302a71c9b429968187a61f4fc704de428f593ff5f671335ad6d3b4a3aa0752911ad0ee9c30789cffb687176352be238bb57 - languageName: node - linkType: hard - -"web-streams-node@npm:^0.4.0": - version: 0.4.0 - resolution: "web-streams-node@npm:0.4.0" - dependencies: - is-stream: "npm:^1.1.0" - readable-stream-node-to-web: "npm:^1.0.1" - web-streams-ponyfill: "npm:^1.4.1" - checksum: 10c0/356292e85f1b9afa39a0470f6abf1ab3866504371862bce4851a9ab99f8510fc06c1c0f8490536ca2ae02797f63dec4d186482468ab2cc547e4c1a8546b4b2e3 - languageName: node - linkType: hard - -"web-streams-polyfill@npm:^3.0.3": - version: 3.3.3 - resolution: "web-streams-polyfill@npm:3.3.3" - checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f - languageName: node - linkType: hard - -"web-streams-ponyfill@npm:^1.4.1": - version: 1.4.2 - resolution: "web-streams-ponyfill@npm:1.4.2" - checksum: 10c0/bcaed7e8c6359511f2e07054d399675441f8baf05075ed171f7781020731c71a3455fbd4a70a4038a461aa82941d3186679d0c74bfeaa855537db973da390f6c - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - -"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": - version: 1.1.1 - resolution: "which-boxed-primitive@npm:1.1.1" - dependencies: - is-bigint: "npm:^1.1.0" - is-boolean-object: "npm:^1.2.1" - is-number-object: "npm:^1.1.1" - is-string: "npm:^1.1.1" - is-symbol: "npm:^1.1.1" - checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe - languageName: node - linkType: hard - -"which-builtin-type@npm:^1.2.1": - version: 1.2.1 - resolution: "which-builtin-type@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - function.prototype.name: "npm:^1.1.6" - has-tostringtag: "npm:^1.0.2" - is-async-function: "npm:^2.0.0" - is-date-object: "npm:^1.1.0" - is-finalizationregistry: "npm:^1.1.0" - is-generator-function: "npm:^1.0.10" - is-regex: "npm:^1.2.1" - is-weakref: "npm:^1.0.2" - isarray: "npm:^2.0.5" - which-boxed-primitive: "npm:^1.1.0" - which-collection: "npm:^1.0.2" - which-typed-array: "npm:^1.1.16" - checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 - languageName: node - linkType: hard - -"which-collection@npm:^1.0.2": - version: 1.0.2 - resolution: "which-collection@npm:1.0.2" - dependencies: - is-map: "npm:^2.0.3" - is-set: "npm:^2.0.3" - is-weakmap: "npm:^2.0.2" - is-weakset: "npm:^2.0.3" - checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.2": - version: 1.1.18 - resolution: "which-typed-array@npm:1.1.18" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c - languageName: node - linkType: hard - -"which@npm:^1.2.9": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: "npm:^2.0.0" - bin: - which: ./bin/which - checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a - languageName: node - linkType: hard - -"which@npm:^5.0.0": - version: 5.0.0 - resolution: "which@npm:5.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b - languageName: node - linkType: hard - -"wide-align@npm:1.1.5, wide-align@npm:^1.1.2": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: "npm:^1.0.2 || 2 || 3 || 4" - checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 - languageName: node - linkType: hard - -"with@npm:^7.0.0": - version: 7.0.2 - resolution: "with@npm:7.0.2" - dependencies: - "@babel/parser": "npm:^7.9.6" - "@babel/types": "npm:^7.9.6" - assert-never: "npm:^1.2.1" - babel-walk: "npm:3.0.0-canary-5" - checksum: 10c0/99289e49afc4b1776afae0ef85e84cfa775e8e07464d2b9853a31b0822347031d1cf77f287d25adc8c3f81e4fa68f4ee31526a9c95d4981ba08a1fe24dee111a - languageName: node - linkType: hard - -"word-wrap@npm:^1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 - languageName: node - linkType: hard - -"wordwrap@npm:~0.0.2": - version: 0.0.3 - resolution: "wordwrap@npm:0.0.3" - checksum: 10c0/b3b212f8b2167091f59bc60929ada2166eb157abb6c8c82e2a705fe5aa5876440c3966ab39eb6c7bcb2ff0ac0c8d9fba726a9c2057b83bd65cdc1858f9d816ce - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.0.1": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": - version: 5.0.1 - resolution: "write-file-atomic@npm:5.0.1" - dependencies: - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^4.0.1" - checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d - languageName: node - linkType: hard - -"write-file-atomic@npm:^2.4.2": - version: 2.4.3 - resolution: "write-file-atomic@npm:2.4.3" - dependencies: - graceful-fs: "npm:^4.1.11" - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^3.0.2" - checksum: 10c0/8cb4bba0c1ab814a9b127844da0db4fb8c5e06ddbe6317b8b319377c73b283673036c8b9360120062898508b9428d81611cf7fa97584504a00bc179b2a580b92 - languageName: node - linkType: hard - -"write-json-file@npm:^3.2.0": - version: 3.2.0 - resolution: "write-json-file@npm:3.2.0" - dependencies: - detect-indent: "npm:^5.0.0" - graceful-fs: "npm:^4.1.15" - make-dir: "npm:^2.1.0" - pify: "npm:^4.0.1" - sort-keys: "npm:^2.0.0" - write-file-atomic: "npm:^2.4.2" - checksum: 10c0/3eadcb6e832ac34dbba37d4eea8871d9fef0e0d77c486b13ed5f81d84a8fcecd9e1a04277e2691eb803c2bed39c2a315e98b96f492c271acee2836acc6276043 - languageName: node - linkType: hard - -"write-pkg@npm:4.0.0": - version: 4.0.0 - resolution: "write-pkg@npm:4.0.0" - dependencies: - sort-keys: "npm:^2.0.0" - type-fest: "npm:^0.4.1" - write-json-file: "npm:^3.2.0" - checksum: 10c0/8e20db5fa444dad04e3703c18d8e0f89679caa60accbee5da9ea3aa076430b3f32d99f50d8860d29044245775795455c62d12d16a7856d407e30df7b79f39505 - languageName: node - linkType: hard - -"xmldom@npm:0.1.19": - version: 0.1.19 - resolution: "xmldom@npm:0.1.19" - checksum: 10c0/e0634db88f7485285ce0381112b28c2136b6754109e6e0f49576a9e52c2dc6f22f9558cd37126a6f18d15c9da6cd55a546dd223f8e9643326358e3eb38d23da2 - languageName: node - linkType: hard - -"xtend@npm:^4.0.2, xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 - languageName: node - linkType: hard - -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: 10c0/0b9e25aa00adf19e01d2bcd4b208aee2b0db643d9927131797b7af5ff69480fc80f1c3db738cbf3946f0bddf39d8f2d0a5709c644fd42d4aa3a4e6e786c087b5 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard - -"yaml@npm:^2.6.0": - version: 2.7.0 - resolution: "yaml@npm:2.7.0" - bin: - yaml: bin.mjs - checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 - languageName: node - linkType: hard - -"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 - languageName: node - linkType: hard - -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 - languageName: node - linkType: hard - -"yargs@npm:17.7.2, yargs@npm:^17.6.2, yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: "npm:^8.0.1" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.1.1" - checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 - languageName: node - linkType: hard - -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - dependencies: - cliui: "npm:^7.0.2" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.0" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^20.2.2" - checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": + version "7.28.4" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0 || ^8.0.0-0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.10.0", "@babel/core@^7.11.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.23.9", "@babel/core@^7.27.4", "@babel/core@^7.28.0", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": + version "7.28.4" + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.4" + "@babel/types" "^7.28.4" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.27.5", "@babel/generator@^7.28.3": + version "7.28.3" + dependencies: + "@babel/parser" "^7.28.3" + "@babel/types" "^7.28.2" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + dependencies: + "@babel/types" "^7.27.3" + +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": + version "7.28.3" + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.3" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" + lodash.debounce "^4.0.8" + resolve "^1.22.10" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + +"@babel/helper-member-expression-to-functions@^7.27.1": + version "7.27.1" + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + +"@babel/helper-wrap-function@^7.27.1": + version "7.28.3" + dependencies: + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" + +"@babel/helpers@^7.28.4": + version "7.28.4" + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.28.4" + dependencies: + "@babel/types" "^7.28.4" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": + version "7.28.3" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" + +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-block-scoping@^7.28.0": + version "7.28.4" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-static-block@^7.28.3": + version "7.28.3" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-classes@^7.28.3": + version "7.28.4" + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.4" + +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" + +"@babel/plugin-transform-destructuring@^7.28.0": + version "7.28.0" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.0" + +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + +"@babel/plugin-transform-exponentiation-operator@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-logical-assignment-operators@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-systemjs@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-object-rest-spread@^7.28.0": + version "7.28.4" + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.4" + +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-optional-chaining@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regenerator@^7.28.3": + version "7.28.4" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-runtime@^7.28.0": + version "7.28.3" + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typescript@^7.27.1": + version "7.28.0" + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/preset-env@^7.28.0": + version "7.28.3" + dependencies: + "@babel/compat-data" "^7.28.0" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.0" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.3" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.0" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.3" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.27.1": + version "7.27.1" + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.27.1" + +"@babel/runtime@^7.13.9": + version "7.28.4" + +"@babel/template@^7.25.9", "@babel/template@^7.27.1", "@babel/template@^7.27.2": + version "7.27.2" + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": + version "7.28.4" + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.4.4", "@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.28.4" + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + +"@comunica/actor-abstract-mediatyped@^1.22.0": + version "1.22.0" + +"@comunica/actor-http-native@~1.22.0": + version "1.22.1" + dependencies: + "@comunica/context-entries" "^1.22.0" + "@types/parse-link-header" "^1.0.0" + cross-fetch "^3.0.5" + follow-redirects "^1.5.1" + parse-link-header "^1.0.1" + +"@comunica/actor-rdf-parse-html-microdata@~1.22.0": + version "1.22.0" + dependencies: + microdata-rdf-streaming-parser "^1.2.0" + +"@comunica/actor-rdf-parse-html-rdfa@~1.22.0": + version "1.22.0" + dependencies: + rdfa-streaming-parser "^1.5.0" + +"@comunica/actor-rdf-parse-html-script@~1.22.0": + version "1.22.0" + dependencies: + "@comunica/bus-rdf-parse-html" "^1.22.0" + "@rdfjs/types" "*" + relative-to-absolute-iri "^1.0.5" + +"@comunica/actor-rdf-parse-html@~1.22.0": + version "1.22.0" + dependencies: + "@comunica/bus-rdf-parse-html" "^1.22.0" + "@rdfjs/types" "*" + htmlparser2 "^7.0.0" + +"@comunica/actor-rdf-parse-jsonld@^1.22.0": + version "1.22.1" + dependencies: + "@comunica/context-entries" "^1.22.0" + "@rdfjs/types" "*" + jsonld-context-parser "^2.1.2" + jsonld-streaming-parser "^2.4.0" + stream-to-string "^1.2.0" + +"@comunica/actor-rdf-parse-n3@~1.22.0": + version "1.22.0" + dependencies: + "@types/n3" "^1.4.4" + n3 "^1.6.3" + +"@comunica/actor-rdf-parse-rdfxml@~1.22.0": + version "1.22.0" + dependencies: + rdfxml-streaming-parser "^1.5.0" + +"@comunica/actor-rdf-parse-xml-rdfa@~1.22.0": + version "1.22.0" + dependencies: + rdfa-streaming-parser "^1.5.0" + +"@comunica/bus-http@^1.0.0", "@comunica/bus-http@~1.22.0": + version "1.22.1" + dependencies: + "@comunica/context-entries" "^1.22.0" + "@types/readable-stream" "^2.3.11" + is-stream "^2.0.0" + readable-web-to-node-stream "^3.0.2" + web-streams-node "^0.4.0" + +"@comunica/bus-init@~1.22.0": + version "1.22.0" + +"@comunica/bus-rdf-parse-html@^1.0.0", "@comunica/bus-rdf-parse-html@^1.17.0", "@comunica/bus-rdf-parse-html@^1.22.0", "@comunica/bus-rdf-parse-html@~1.22.0": + version "1.22.0" + dependencies: + "@rdfjs/types" "*" + +"@comunica/bus-rdf-parse@^1.0.0", "@comunica/bus-rdf-parse@^1.1.0", "@comunica/bus-rdf-parse@^1.4.0", "@comunica/bus-rdf-parse@^1.8.0", "@comunica/bus-rdf-parse@~1.22.0": + version "1.22.0" + dependencies: + "@comunica/actor-abstract-mediatyped" "^1.22.0" + "@rdfjs/types" "*" + +"@comunica/context-entries@^1.22.0": + version "1.22.0" + +"@comunica/core@^1.0.0", "@comunica/core@^1.1.0", "@comunica/core@^1.17.0", "@comunica/core@^1.4.0", "@comunica/core@^1.8.0", "@comunica/core@~1.22.0": + version "1.22.0" + dependencies: + "@comunica/context-entries" "^1.22.0" + "@comunica/types" "^1.22.0" + immutable "^3.8.2" + +"@comunica/mediator-combine-union@~1.22.0": + version "1.22.0" + +"@comunica/mediator-number@~1.22.0": + version "1.22.0" + +"@comunica/mediator-race@~1.22.0": + version "1.22.0" + +"@comunica/types@^1.22.0": + version "1.22.0" + dependencies: + "@rdfjs/types" "*" + asynciterator "^3.2.0" + immutable "^3.8.2" + sparqlalgebrajs "^3.0.1" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@digitalbazaar/credentials-context@^3.2.0": + version "3.2.0" + +"@digitalbazaar/data-integrity@^2.5.0": + version "2.5.0" + dependencies: + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + jsonld-signatures "^11.3.0" + +"@digitalbazaar/ed25519-multikey@^1.0.0", "@digitalbazaar/ed25519-multikey@^1.1.0", "@digitalbazaar/ed25519-multikey@^1.3.0": + version "1.3.1" + dependencies: + "@noble/ed25519" "^1.6.0" + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + +"@digitalbazaar/ed25519-signature-2020@^5.4.0": + version "5.4.0" + dependencies: + "@digitalbazaar/ed25519-multikey" "^1.1.0" + "@digitalbazaar/ed25519-verification-key-2020" "^4.1.0" + base58-universal "^2.0.0" + ed25519-signature-2020-context "^1.1.0" + jsonld-signatures "^11.3.0" + +"@digitalbazaar/ed25519-verification-key-2020@^4.1.0", "@digitalbazaar/ed25519-verification-key-2020@^4.2.0": + version "4.2.0" + dependencies: + "@noble/ed25519" "^1.6.0" + base58-universal "^2.0.0" + base64url-universal "^2.0.0" + crypto-ld "^7.0.0" + +"@digitalbazaar/eddsa-rdfc-2022-cryptosuite@^1.2.0": + version "1.2.0" + dependencies: + "@digitalbazaar/ed25519-multikey" "^1.0.0" + jsonld "^8.1.0" + rdf-canonize "^4.0.1" + +"@digitalbazaar/http-client@^3.4.1": + version "3.4.1" + dependencies: + ky "^0.33.3" + ky-universal "^0.11.0" + undici "^5.21.2" + +"@digitalbazaar/security-context@^1.0.0": + version "1.0.1" + +"@digitalbazaar/vc@^7.1.0": + version "7.2.0" + dependencies: + "@digitalbazaar/credentials-context" "^3.2.0" + ed25519-signature-2018-context "^1.1.0" + jsonld "^8.3.3" + jsonld-signatures "^11.5.0" + +"@emnapi/core@^1.1.0": + version "1.5.0" + dependencies: + "@emnapi/wasi-threads" "1.1.0" + tslib "^2.4.0" + +"@emnapi/runtime@^1.1.0": + version "1.5.0" + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.1.0": + version "1.1.0" + dependencies: + tslib "^2.4.0" + +"@es-joy/jsdoccomment@~0.46.0": + version "0.46.0" + dependencies: + comment-parser "1.4.1" + esquery "^1.6.0" + jsdoc-type-pratt-parser "~4.0.0" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.9.0" + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + +"@fastify/busboy@^1.0.0": + version "1.2.1" + dependencies: + text-decoding "^1.0.0" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + +"@inquirer/external-editor@^1.0.0": + version "1.0.2" + dependencies: + chardet "^2.1.0" + iconv-lite "^0.7.0" + +"@ioredis/commands@^1.0.2": + version "1.4.0" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + dependencies: + minipass "^7.0.4" + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + +"@jest/console@30.1.2": + version "30.1.2" + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + jest-message-util "30.1.0" + jest-util "30.0.5" + slash "^3.0.0" + +"@jest/core@30.1.3": + version "30.1.3" + dependencies: + "@jest/console" "30.1.2" + "@jest/pattern" "30.0.1" + "@jest/reporters" "30.1.3" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + ci-info "^4.2.0" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-changed-files "30.0.5" + jest-config "30.1.3" + jest-haste-map "30.1.0" + jest-message-util "30.1.0" + jest-regex-util "30.0.1" + jest-resolve "30.1.3" + jest-resolve-dependencies "30.1.3" + jest-runner "30.1.3" + jest-runtime "30.1.3" + jest-snapshot "30.1.2" + jest-util "30.0.5" + jest-validate "30.1.0" + jest-watcher "30.1.3" + micromatch "^4.0.8" + pretty-format "30.0.5" + slash "^3.0.0" + +"@jest/diff-sequences@30.0.1": + version "30.0.1" + +"@jest/environment@30.1.2": + version "30.1.2" + dependencies: + "@jest/fake-timers" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + jest-mock "30.0.5" + +"@jest/expect-utils@30.1.2": + version "30.1.2" + dependencies: + "@jest/get-type" "30.1.0" + +"@jest/expect@30.1.2": + version "30.1.2" + dependencies: + expect "30.1.2" + jest-snapshot "30.1.2" + +"@jest/fake-timers@30.1.2": + version "30.1.2" + dependencies: + "@jest/types" "30.0.5" + "@sinonjs/fake-timers" "^13.0.0" + "@types/node" "*" + jest-message-util "30.1.0" + jest-mock "30.0.5" + jest-util "30.0.5" + +"@jest/get-type@30.1.0": + version "30.1.0" + +"@jest/globals@^30.0.5", "@jest/globals@30.1.2": + version "30.1.2" + dependencies: + "@jest/environment" "30.1.2" + "@jest/expect" "30.1.2" + "@jest/types" "30.0.5" + jest-mock "30.0.5" + +"@jest/pattern@30.0.1": + version "30.0.1" + dependencies: + "@types/node" "*" + jest-regex-util "30.0.1" + +"@jest/reporters@30.1.3": + version "30.1.3" + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "30.1.2" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@jridgewell/trace-mapping" "^0.3.25" + "@types/node" "*" + chalk "^4.1.2" + collect-v8-coverage "^1.0.2" + exit-x "^0.2.2" + glob "^10.3.10" + graceful-fs "^4.2.11" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^5.0.0" + istanbul-reports "^3.1.3" + jest-message-util "30.1.0" + jest-util "30.0.5" + jest-worker "30.1.0" + slash "^3.0.0" + string-length "^4.0.2" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/schemas@30.0.5": + version "30.0.5" + dependencies: + "@sinclair/typebox" "^0.34.0" + +"@jest/snapshot-utils@30.1.2": + version "30.1.2" + dependencies: + "@jest/types" "30.0.5" + chalk "^4.1.2" + graceful-fs "^4.2.11" + natural-compare "^1.4.0" + +"@jest/source-map@30.0.1": + version "30.0.1" + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + callsites "^3.1.0" + graceful-fs "^4.2.11" + +"@jest/test-result@30.1.3": + version "30.1.3" + dependencies: + "@jest/console" "30.1.2" + "@jest/types" "30.0.5" + "@types/istanbul-lib-coverage" "^2.0.6" + collect-v8-coverage "^1.0.2" + +"@jest/test-sequencer@30.1.3": + version "30.1.3" + dependencies: + "@jest/test-result" "30.1.3" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + slash "^3.0.0" + +"@jest/transform@30.1.2": + version "30.1.2" + dependencies: + "@babel/core" "^7.27.4" + "@jest/types" "30.0.5" + "@jridgewell/trace-mapping" "^0.3.25" + babel-plugin-istanbul "^7.0.0" + chalk "^4.1.2" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + jest-regex-util "30.0.1" + jest-util "30.0.5" + micromatch "^4.0.8" + pirates "^4.0.7" + slash "^3.0.0" + write-file-atomic "^5.0.1" + +"@jest/types@30.0.5": + version "30.0.5" + dependencies: + "@jest/pattern" "30.0.1" + "@jest/schemas" "30.0.5" + "@types/istanbul-lib-coverage" "^2.0.6" + "@types/istanbul-reports" "^3.0.4" + "@types/node" "*" + "@types/yargs" "^17.0.33" + chalk "^4.1.2" + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@lerna/create@8.2.4": + version "8.2.4" + dependencies: + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + execa "5.0.0" + fs-extra "^11.2.0" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "6.0.3" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-reduce "^2.1.0" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.4" + set-blocking "^2.0.0" + signal-exit "3.0.7" + slash "^3.0.0" + ssri "^10.0.6" + string-width "^4.2.3" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" + +"@mapbox/node-pre-gyp@^1.0.11": + version "1.0.11" + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@napi-rs/wasm-runtime@0.2.4": + version "0.2.4" + dependencies: + "@emnapi/core" "^1.1.0" + "@emnapi/runtime" "^1.1.0" + "@tybys/wasm-util" "^0.9.0" + +"@noble/ed25519@^1.6.0": + version "1.7.5" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + +"@npmcli/agent@^2.0.0": + version "2.2.2" + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/agent@^3.0.0": + version "3.0.0" + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/arborist@7.5.4": + version "7.5.4" + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.1" + "@npmcli/installed-package-contents" "^2.1.0" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^7.1.1" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.1.0" + "@npmcli/query" "^3.1.0" + "@npmcli/redact" "^2.0.0" + "@npmcli/run-script" "^8.1.0" + bin-links "^4.0.4" + cacache "^18.0.3" + common-ancestor-path "^1.0.1" + hosted-git-info "^7.0.2" + json-parse-even-better-errors "^3.0.2" + json-stringify-nice "^1.1.4" + lru-cache "^10.2.2" + minimatch "^9.0.4" + nopt "^7.2.1" + npm-install-checks "^6.2.0" + npm-package-arg "^11.0.2" + npm-pick-manifest "^9.0.1" + npm-registry-fetch "^17.0.1" + pacote "^18.0.6" + parse-conflict-json "^3.0.0" + proc-log "^4.2.0" + proggy "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^3.0.1" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.6" + treeverse "^3.0.0" + walk-up-path "^3.0.1" + +"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": + version "3.1.1" + dependencies: + semver "^7.3.5" + +"@npmcli/fs@^4.0.0": + version "4.0.0" + dependencies: + semver "^7.3.5" + +"@npmcli/git@^5.0.0": + version "5.0.8" + dependencies: + "@npmcli/promise-spawn" "^7.0.0" + ini "^4.1.3" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" + proc-log "^4.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^4.0.0" + +"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": + version "2.1.0" + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/map-workspaces@^3.0.2": + version "3.0.6" + dependencies: + "@npmcli/name-from-folder" "^2.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + read-package-json-fast "^3.0.0" + +"@npmcli/metavuln-calculator@^7.1.1": + version "7.1.1" + dependencies: + cacache "^18.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^18.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + +"@npmcli/name-from-folder@^2.0.0": + version "2.0.0" + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + +"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": + version "5.2.1" + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" + +"@npmcli/package-json@5.2.0": + version "5.2.0" + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^4.0.0" + semver "^7.5.3" + +"@npmcli/promise-spawn@^7.0.0": + version "7.0.2" + dependencies: + which "^4.0.0" + +"@npmcli/query@^3.1.0": + version "3.1.0" + dependencies: + postcss-selector-parser "^6.0.10" + +"@npmcli/redact@^2.0.0": + version "2.0.1" + +"@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0", "@npmcli/run-script@8.1.0": + version "8.1.0" + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" + proc-log "^4.0.0" + which "^4.0.0" + +"@nrwl/tao@v17.2.5": + version "v17.2.5" + dependencies: + nx v17.2.5 + tslib "^2.3.0" + +"@nx/devkit@>=17.1.2 < 21": + version "20.8.2" + dependencies: + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + minimatch "9.0.3" + semver "^7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@nx/nx-linux-x64-gnu@20.8.2": + version "20.8.2" + +"@nx/nx-linux-x64-gnu@v17.2.5": + version "v17.2.5" + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + +"@octokit/core@^5", "@octokit/core@^5.0.2", "@octokit/core@5": + version "5.2.2" + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^9.0.6": + version "9.0.6" + dependencies: + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^7.1.0": + version "7.1.1" + dependencies: + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + +"@octokit/plugin-enterprise-rest@6.0.1": + version "6.0.1" + +"@octokit/plugin-paginate-rest@11.4.4-cjs.2": + version "11.4.4-cjs.2" + dependencies: + "@octokit/types" "^13.7.0" + +"@octokit/plugin-request-log@^4.0.0": + version "4.0.1" + +"@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1": + version "13.3.2-cjs.1" + dependencies: + "@octokit/types" "^13.8.0" + +"@octokit/request-error@^5.1.1": + version "5.1.1" + dependencies: + "@octokit/types" "^13.1.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^8.4.1": + version "8.4.1" + dependencies: + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@20.1.2": + version "20.1.2" + dependencies: + "@octokit/core" "^5.0.2" + "@octokit/plugin-paginate-rest" "11.4.4-cjs.2" + "@octokit/plugin-request-log" "^4.0.0" + "@octokit/plugin-rest-endpoint-methods" "13.3.2-cjs.1" + +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0": + version "13.10.0" + dependencies: + "@octokit/openapi-types" "^24.2.0" + +"@panva/asn1.js@^1.0.0": + version "1.0.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + +"@pkgr/core@^0.1.0": + version "0.1.2" + +"@pkgr/core@^0.2.9": + version "0.2.9" + +"@rdfjs/data-model@^1.3.4": + version "1.3.4" + dependencies: + "@rdfjs/types" ">=1.0.1" + +"@rdfjs/types@*", "@rdfjs/types@>=1.0.0", "@rdfjs/types@>=1.0.1": + version "2.0.1" + dependencies: + "@types/node" "*" + +"@rdfjs/types@^1.0.0": + version "1.1.2" + dependencies: + "@types/node" "*" + +"@rtsao/scc@^1.1.0": + version "1.1.0" + +"@seald-io/binary-search-tree@^1.0.2": + version "1.0.3" + +"@seald-io/nedb@^3.0.0": + version "3.1.0" + dependencies: + "@seald-io/binary-search-tree" "^1.0.2" + localforage "^1.9.0" + util "^0.12.4" + +"@semapps/activitypub@1.1.4", "@semapps/activitypub@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/activitypub": + version "1.1.4" + resolved "file:packages/activitypub" + dependencies: + "@rdfjs/data-model" "^1.3.4" + "@semapps/crypto" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + "@semapps/triplestore" "1.1.4" + handlebars "^4.7.7" + moleculer-bull "^0.2.5" + moleculer-db "^0.8.16" + moleculer-web "^0.10.0-beta1" + node-fetch "^2.6.6" + sparqljs "^3.5.2" + url-join "^4.0.1" + +"@semapps/auth@1.1.4", "@semapps/auth@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/auth": + version "1.1.4" + resolved "file:packages/auth" + dependencies: + "@semapps/ldp" "1.1.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/triplestore" "1.1.4" + bcrypt "^5.0.1" + express-session "^1.17.0" + jsonwebtoken "^9.0.2" + moleculer-db "^0.8.16" + moleculer-mail "^1.2.5" + moleculer-web "^0.10.0-beta1" + openid-client "^4.7.4" + passport "^0.4.1" + passport-cas2 "0.0.12" + passport-local "^1.0.0" + pug "^3.0.2" + speakingurl "^14.0.1" + url-join "^4.0.1" + +"@semapps/backup@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/backup": + version "1.1.4" + resolved "file:packages/backup" + dependencies: + cron "^1.8.2" + fs-extra "^10.0.0" + rsync "^0.6.1" + ssh2-sftp-client "^7.2.1" + +"@semapps/core@1.1.4", "@semapps/core@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/core": + version "1.1.4" + resolved "file:packages/core" + dependencies: + "@semapps/activitypub" "1.1.4" + "@semapps/crypto" "1.1.4" + "@semapps/jsonld" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/ontologies" "1.1.4" + "@semapps/sparql-endpoint" "1.1.4" + "@semapps/triplestore" "1.1.4" + "@semapps/void" "1.1.4" + "@semapps/webacl" "1.1.4" + "@semapps/webfinger" "1.1.4" + "@semapps/webid" "1.1.4" + moleculer-web "^0.10.0-beta1" + url-join "^4.0.1" + +"@semapps/crypto@1.1.4", "@semapps/crypto@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/crypto": + version "1.1.4" + resolved "file:packages/crypto" + dependencies: + "@digitalbazaar/data-integrity" "^2.5.0" + "@digitalbazaar/ed25519-multikey" "^1.3.0" + "@digitalbazaar/ed25519-signature-2020" "^5.4.0" + "@digitalbazaar/ed25519-verification-key-2020" "^4.2.0" + "@digitalbazaar/eddsa-rdfc-2022-cryptosuite" "^1.2.0" + "@digitalbazaar/vc" "^7.1.0" + "@rdfjs/data-model" "^1.3.4" + "@semapps/ldp" "1.1.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + crypto-ld "^7.0.0" + http-signature "^1.3.4" + http-signature-header "^1.3.1" + jose "^5.2.0" + jsonld-signatures "^11.3.2" + node-fetch "^2.6.6" + url-join "^4.0.1" + vc-js "^0.6.4" + +"@semapps/importer@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/importer": + version "1.1.4" + resolved "file:packages/importer" + dependencies: + "@semapps/activitypub" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/mime-types" "1.1.4" + cron-parser "^4.2.1" + google-libphonenumber "^3.2.26" + node-fetch "^2.6.6" + sanitize-html "^2.6.1" + url-join "^4.0.1" + +"@semapps/inference@1.1.4", "@semapps/inference@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/inference": + version "1.1.4" + resolved "file:packages/inference" + dependencies: + "@semapps/activitypub" "1.1.4" + n3 "^1.6.3" + node-fetch "^2.6.6" + url-join "^4.0.1" + +"@semapps/jsonld@1.1.4", "@semapps/jsonld@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/jsonld": + version "1.1.4" + resolved "file:packages/jsonld" + dependencies: + "@semapps/ldp" "1.1.4" + jsonld "^3.3.2" + jsonld-context-parser "^2.4.0" + jsonld-streaming-parser "^2.4.2" + jsonld-streaming-serializer "^1.2.0" + lru-cache "^6.0.0" + n3 "^1.26.0" + rdf-parse "^1.7.0" + streamify-string "^1.0.1" + url-join "^4.0.1" + +"@semapps/ldp@1.0.10": + version "1.0.10" + dependencies: + "@rdfjs/data-model" "^1.3.4" + "@semapps/middlewares" "1.0.10" + "@semapps/mime-types" "1.0.10" + "@semapps/ontologies" "1.0.10" + "@semapps/triplestore" "1.0.10" + dashify "^2.0.0" + http-link-header "^1.1.1" + mime-types "^2.1.35" + moleculer "^0.14.17" + moleculer-db "^0.8.16" + moleculer-schedule "^0.2.3" + moleculer-web "^0.10.0-beta1" + node-fetch "^2.6.6" + path-to-regexp "^6.2.0" + rdf-parse "^1.7.0" + sharp "^0.31.2" + sparqljs "^3.5.2" + speakingurl "^14.0.1" + streamify-string "^1.0.1" + url-join "^4.0.1" + uuid "^9.0.1" + +"@semapps/ldp@1.1.4", "@semapps/ldp@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/ldp": + version "1.1.4" + resolved "file:packages/ldp" + dependencies: + "@rdfjs/data-model" "^1.3.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + "@semapps/triplestore" "1.1.4" + bytes "^3.1.2" + cron "^4.1.4" + dashify "^2.0.0" + http-link-header "^1.1.1" + mime-types "^2.1.35" + moleculer-db "^0.8.16" + moleculer-schedule "^0.2.3" + moleculer-web "^0.10.0-beta1" + node-fetch "^2.6.6" + path-to-regexp "^6.2.0" + rdf-parse "^1.7.0" + sharp "^0.31.2" + sparqljs "^3.5.2" + speakingurl "^14.0.1" + streamify-string "^1.0.1" + url-join "^4.0.1" + uuid "^9.0.1" + +"@semapps/middlewares@1.0.10": + version "1.0.10" + dependencies: + "@semapps/mime-types" "1.0.10" + busboy "^0.3.1" + memory-streams "^0.1.3" + moleculer "^0.14.18" + +"@semapps/middlewares@1.1.4", "@semapps/middlewares@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/middlewares": + version "1.1.4" + resolved "file:packages/middlewares" + dependencies: + "@semapps/mime-types" "1.1.4" + busboy "^0.3.1" + memory-streams "^0.1.3" + +"@semapps/migration@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/migration": + version "1.1.4" + resolved "file:packages/migration" + dependencies: + "@semapps/ldp" "1.1.4" + "@semapps/webacl" "1.1.4" + url-join "^4.0.1" + +"@semapps/mime-types@1.0.10": + version "1.0.10" + dependencies: + moleculer "^0.14.18" + negotiator "^0.6.2" + +"@semapps/mime-types@1.1.4", "@semapps/mime-types@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/mime-types": + version "1.1.4" + resolved "file:packages/mime-types" + dependencies: + negotiator "^0.6.2" + +"@semapps/nodeinfo@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/nodeinfo": + version "1.1.4" + resolved "file:packages/nodeinfo" + dependencies: + url-join "^4.0.1" + +"@semapps/notifications@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/notifications": + version "1.1.4" + resolved "file:packages/notifications" + dependencies: + "@semapps/ldp" "1.1.4" + "@semapps/triplestore" "1.1.4" + cron-parser "^4.3.0" + expo-server-sdk "^3.4.0" + moleculer-db "^0.8.15" + moleculer-mail "^1.2.5" + url-join "^4.0.1" + +"@semapps/ontologies@1.0.10": + version "1.0.10" + dependencies: + "@semapps/triplestore" "1.0.10" + moleculer-db "^0.8.16" + node-fetch "^2.6.6" + +"@semapps/ontologies@1.1.4", "@semapps/ontologies@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/ontologies": + version "1.1.4" + resolved "file:packages/ontologies" + dependencies: + "@semapps/triplestore" "1.1.4" + moleculer-db "^0.8.16" + node-fetch "^2.6.6" + +"@semapps/solid@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/solid": + version "1.1.4" + resolved "file:packages/solid" + dependencies: + "@rdfjs/data-model" "^1.3.4" + "@semapps/activitypub" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + "@semapps/triplestore" "1.1.4" + "@semapps/webid" "1.1.4" + http-link-header "^1.1.1" + moleculer-bull "^0.2.5" + moleculer-db "^0.8.16" + moleculer-web "^0.10.0-beta1" + moment "2.30.1" + node-fetch "^2.6.6" + url-join "^4.0.1" + uuid "^9.0.1" + +"@semapps/sparql-endpoint@1.1.4", "@semapps/sparql-endpoint@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/sparql-endpoint": + version "1.1.4" + resolved "file:packages/sparql-endpoint" + dependencies: + "@rdfjs/data-model" "^1.3.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/triplestore" "1.1.4" + moleculer-web "^0.10.0-beta1" + url-join "^4.0.1" + +"@semapps/sync@1.1.4", "@semapps/sync@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/sync": + version "1.1.4" + resolved "file:packages/sync" + dependencies: + "@semapps/activitypub" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/mime-types" "1.1.4" + node-fetch "^2.6.6" + url-join "^4.0.1" + +"@semapps/triplestore@1.0.10": + version "1.0.10" + dependencies: + "@semapps/middlewares" "1.0.10" + "@semapps/mime-types" "1.0.10" + jsonld "^3.3.2" + moleculer "^0.14.29" + negotiator "^0.6.2" + node-fetch "^2.6.6" + sparqljs "^3.5.2" + sparqljson-parse "^1.5.1" + string-template "^1.0.0" + url-join "^4.0.1" + uuid "^9.0.1" + +"@semapps/triplestore@1.1.4", "@semapps/triplestore@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/triplestore": + version "1.1.4" + resolved "file:packages/triplestore" + dependencies: + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + jsonld "^3.3.2" + negotiator "^0.6.2" + nextgraph "file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node" + node-fetch "^2.6.6" + sparqljs "^3.5.2" + sparqljson-parse "^1.5.1" + string-template "^1.0.0" + url-join "^4.0.1" + uuid "^9.0.1" + +"@semapps/void@1.1.4", "@semapps/void@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/void": + version "1.1.4" + resolved "file:packages/void" + dependencies: + "@semapps/ldp" "1.1.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + jsonld-streaming-serializer "^1.2.0" + n3 "^1.8.0" + url-join "^4.0.1" + +"@semapps/webacl@1.1.4", "@semapps/webacl@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/webacl": + version "1.1.4" + resolved "file:packages/webacl" + dependencies: + "@semapps/activitypub" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + "@semapps/triplestore" "1.1.4" + jsonld-streaming-serializer "^1.2.0" + n3 "^1.8.0" + rdf-parse "^1.7.0" + speakingurl "^14.0.1" + streamify-string "^1.0.1" + url-join "^4.0.1" + +"@semapps/webfinger@1.1.4", "@semapps/webfinger@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/webfinger": + version "1.1.4" + resolved "file:packages/webfinger" + dependencies: + "@semapps/mime-types" "1.1.4" + node-fetch "^2.6.6" + +"@semapps/webhooks@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/webhooks": + version "1.1.4" + resolved "file:packages/webhooks" + dependencies: + "@semapps/ldp" "1.0.10" + "@semapps/triplestore" "1.0.10" + moleculer-db "^0.8.15" + url-join "^4.0.1" + +"@semapps/webid@1.1.4", "@semapps/webid@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/packages/webid": + version "1.1.4" + resolved "file:packages/webid" + dependencies: + "@semapps/activitypub" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + url-join "^4.0.1" + +"@sigstore/bundle@^2.3.2": + version "2.3.2" + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + +"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": + version "1.1.0" + +"@sigstore/protobuf-specs@^0.3.2": + version "0.3.3" + +"@sigstore/sign@^2.3.2": + version "2.3.2" + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + make-fetch-happen "^13.0.1" + proc-log "^4.2.0" + promise-retry "^2.0.1" + +"@sigstore/tuf@^2.3.4": + version "2.3.4" + dependencies: + "@sigstore/protobuf-specs" "^0.3.2" + tuf-js "^2.2.1" + +"@sigstore/verify@^1.2.1": + version "1.2.1" + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.1.0" + "@sigstore/protobuf-specs" "^0.3.2" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + +"@sinclair/typebox@^0.34.0": + version "0.34.41" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + +"@sinonjs/commons@^3.0.1": + version "3.0.1" + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^13.0.0": + version "13.0.5" + dependencies: + "@sinonjs/commons" "^3.0.1" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + dependencies: + defer-to-connect "^2.0.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + +"@tufjs/models@2.0.1": + version "2.0.1" + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.4" + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + dependencies: + tslib "^2.4.0" + +"@types/babel__core@^7.1.12", "@types/babel__core@^7.20.5": + version "7.20.5" + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.28.0" + dependencies: + "@babel/types" "^7.28.2" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/dotenv-flow@^3.3.3": + version "3.3.3" + +"@types/http-cache-semantics@*": + version "4.0.4" + +"@types/http-link-header@^1.0.1": + version "1.0.7" + dependencies: + "@types/node" "*" + +"@types/ioredis@^4.27.0": + version "4.28.10" + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.6": + version "2.0.6" + +"@types/istanbul-lib-report@*": + version "3.0.3" + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.4": + version "3.0.4" + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^30.0.0": + version "30.0.0" + dependencies: + expect "^30.0.0" + pretty-format "^30.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.15" + +"@types/json5@^0.0.29": + version "0.0.29" + +"@types/jsonld@1.5.15": + version "1.5.15" + +"@types/keyv@^3.1.4": + version "3.1.4" + dependencies: + "@types/node" "*" + +"@types/luxon@~3.7.0": + version "3.7.1" + +"@types/minimatch@^3.0.3": + version "3.0.5" + +"@types/minimist@^1.2.0": + version "1.2.5" + +"@types/n3@^1.4.4": + version "1.26.0" + dependencies: + "@rdfjs/types" "*" + "@types/node" "*" + +"@types/node-fetch@^2.6.13": + version "2.6.13" + dependencies: + "@types/node" "*" + form-data "^4.0.4" + +"@types/node@*", "@types/node@>=18": + version "24.5.2" + dependencies: + undici-types "~7.12.0" + +"@types/node@^13.1.0": + version "13.13.52" + +"@types/node@^18.0.0": + version "18.19.127" + dependencies: + undici-types "~5.26.4" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + +"@types/parse-link-header@^1.0.0": + version "1.0.1" + +"@types/readable-stream@^2.3.11": + version "2.3.15" + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/responselike@^1.0.0": + version "1.0.3" + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.7.1" + +"@types/sparqljs@^3.1.2": + version "3.1.12" + dependencies: + "@rdfjs/types" ">=1.0.0" + +"@types/stack-utils@^2.0.3": + version "2.0.3" + +"@types/streamify-string@^1.0.4": + version "1.0.4" + dependencies: + "@types/node" "*" + +"@types/url-join@^4.0.1": + version "4.0.3" + +"@types/yargs-parser@*": + version "21.0.3" + +"@types/yargs@^17.0.33": + version "17.0.33" + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.0.0 || ^6.0.0 || ^7.0.0", "@typescript-eslint/eslint-plugin@^7.1.1": + version "7.18.0" + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^7.0.0", "@typescript-eslint/parser@^7.5.0": + version "7.18.0" + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@^5.10.0": + version "5.62.0" + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0", "@ungap/structured-clone@^1.3.0": + version "1.3.0" + +"@unrs/resolver-binding-linux-x64-gnu@1.11.1": + version "1.11.1" + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@yarnpkg/parsers@3.0.2": + version "3.0.2" + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + dependencies: + argparse "^2.0.1" + +"@zkochan/js-yaml@0.0.7": + version "0.0.7" + dependencies: + argparse "^2.0.1" + +abbrev@^2.0.0: + version "2.0.0" + +abbrev@^3.0.0: + version "3.0.1" + +abbrev@1: + version "1.1.1" + +abort-controller@^3.0.0: + version "3.0.0" + dependencies: + event-target-shim "^5.0.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + +acorn-walk@^8.1.1: + version "8.3.4" + dependencies: + acorn "^8.11.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1, acorn@^8.9.0: + version "8.15.0" + +acorn@^7.1.1: + version "7.4.1" + +add-stream@^1.0.0: + version "1.0.0" + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + +agent-base@6: + version "6.0.2" + dependencies: + debug "4" + +aggregate-error@^3.0.0, aggregate-error@^3.1.0: + version "3.1.0" + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + +ansi-regex@^6.0.1: + version "6.2.2" + +ansi-styles@^3.2.1: + version "3.2.1" + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + +ansi-styles@^5.2.0: + version "5.2.0" + +ansi-styles@^6.1.0: + version "6.2.3" + +anymatch@^3.1.3: + version "3.1.3" + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.1.0" + +aproba@2.0.0: + version "2.0.0" + +are-docs-informative@^0.0.2: + version "0.0.2" + +are-we-there-yet@^2.0.0: + version "2.0.0" + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + +argparse@^1.0.7: + version "1.0.10" + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + +args@^5.0.3: + version "5.0.3" + dependencies: + camelcase "5.0.0" + chalk "2.4.2" + leven "2.1.0" + mri "1.1.4" + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-differ@^3.0.0: + version "3.0.0" + +array-ify@^1.0.0: + version "1.0.0" + +array-includes@^3.1.9: + version "3.1.9" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + +array-union@^2.1.0: + version "2.1.0" + +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.3: + version "1.3.3" + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.reduce@^1.0.6: + version "1.0.8" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + is-string "^1.1.1" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +arrify@^1.0.1: + version "1.0.1" + +arrify@^2.0.1: + version "2.0.1" + +asap@~2.0.3: + version "2.0.6" + +asn1@^0.2.6, asn1@~0.2.3: + version "0.2.6" + dependencies: + safer-buffer "~2.1.0" + +assert-never@^1.2.1: + version "1.4.0" + +assert-plus@^1.0.0, assert-plus@1.0.0: + version "1.0.0" + +async-function@^1.0.0: + version "1.0.0" + +async@^3.1.0, async@^3.2.6: + version "3.2.6" + +asynciterator@^3.2.0: + version "3.9.0" + +asynckit@^0.4.0: + version "0.4.0" + +at-least-node@^1.0.0: + version "1.0.0" + +available-typed-arrays@^1.0.7: + version "1.0.7" + dependencies: + possible-typed-array-names "^1.0.0" + +aws-sign2@~0.7.0: + version "0.7.0" + +aws4@^1.8.0: + version "1.13.2" + +axios@^1.5.1, axios@^1.8.3: + version "1.12.2" + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" + +babel-jest@^30.0.5, babel-jest@30.1.2: + version "30.1.2" + dependencies: + "@jest/transform" "30.1.2" + "@types/babel__core" "^7.20.5" + babel-plugin-istanbul "^7.0.0" + babel-preset-jest "30.0.1" + chalk "^4.1.2" + graceful-fs "^4.2.11" + slash "^3.0.0" + +babel-plugin-istanbul@^7.0.0: + version "7.0.1" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-instrument "^6.0.2" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@30.0.1: + version "30.0.1" + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.3" + "@types/babel__core" "^7.20.5" + +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + dependencies: + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" + +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + +babel-plugin-transform-import-meta@^2.3.3: + version "2.3.3" + dependencies: + "@babel/template" "^7.25.9" + tslib "^2.8.1" + +babel-plugin-transform-vite-meta-env@1.0.3: + version "1.0.3" + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + +babel-plugin-transform-vite-meta-glob@1.1.2: + version "1.1.2" + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + glob "^10.3.10" + +babel-plugin-transform-vite-meta-hot@1.0.0: + version "1.0.0" + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + +babel-preset-current-node-syntax@^1.1.0: + version "1.2.0" + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@30.0.1: + version "30.0.1" + dependencies: + babel-plugin-jest-hoist "30.0.1" + babel-preset-current-node-syntax "^1.1.0" + +babel-preset-vite@^1.1.3: + version "1.1.3" + dependencies: + "@babel/runtime" "^7.13.9" + "@types/babel__core" "^7.1.12" + babel-plugin-transform-vite-meta-env "1.0.3" + babel-plugin-transform-vite-meta-glob "1.1.2" + babel-plugin-transform-vite-meta-hot "1.0.0" + +babel-walk@3.0.0-canary-5: + version "3.0.0-canary-5" + dependencies: + "@babel/types" "^7.9.6" + +balanced-match@^1.0.0: + version "1.0.2" + +base-x@^3.0.2: + version "3.0.11" + dependencies: + safe-buffer "^5.0.1" + +base58-universal@^2.0.0: + version "2.0.0" + +base64-js@^1.3.1: + version "1.5.1" + +base64url-universal@^1.0.1: + version "1.1.0" + dependencies: + base64url "^3.0.0" + +base64url-universal@^2.0.0: + version "2.0.0" + dependencies: + base64url "^3.0.1" + +base64url@^3.0.0, base64url@^3.0.1: + version "3.0.1" + +baseline-browser-mapping@^2.8.3: + version "2.8.6" + +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: + version "1.0.2" + dependencies: + tweetnacl "^0.14.3" + +bcrypt@^5.0.1: + version "5.1.1" + dependencies: + "@mapbox/node-pre-gyp" "^1.0.11" + node-addon-api "^5.0.0" + +before-after-hook@^2.2.0: + version "2.2.3" + +bin-links@^4.0.4: + version "4.0.4" + dependencies: + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.0.0, bluebird@^3.1.1, bluebird@^3.7.2: + version "3.7.2" + +body-parser@^1.19.0: + version "1.20.3" + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boolbase@~1.0.0: + version "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.12" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + dependencies: + fill-range "^7.1.1" + +browserslist@^4.24.0, browserslist@^4.25.3, "browserslist@>= 4.21.0": + version "4.26.2" + dependencies: + baseline-browser-mapping "^2.8.3" + caniuse-lite "^1.0.30001741" + electron-to-chromium "^1.5.218" + node-releases "^2.0.21" + update-browserslist-db "^1.1.3" + +bs58@^4.0.1: + version "4.0.1" + dependencies: + base-x "^3.0.2" + +bser@2.1.1: + version "2.1.1" + dependencies: + node-int64 "^0.4.0" + +buffer-equal-constant-time@^1.0.1: + version "1.0.1" + +buffer-from@^1.0.0: + version "1.1.2" + +buffer@^5.5.0: + version "5.7.1" + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buildcheck@~0.0.6: + version "0.0.6" + +bull@^3.15.0: + version "3.29.3" + dependencies: + cron-parser "^2.13.0" + debuglog "^1.0.0" + get-port "^5.1.1" + ioredis "^4.27.0" + lodash "^4.17.21" + p-timeout "^3.2.0" + promise.prototype.finally "^3.1.2" + semver "^7.3.2" + util.promisify "^1.0.1" + uuid "^8.3.0" + +busboy@^0.3.1: + version "0.3.1" + dependencies: + dicer "0.3.0" + +byte-size@8.1.1: + version "8.1.1" + +bytes@^3.1.2, bytes@3.1.2: + version "3.1.2" + +cacache@^18.0.0, cacache@^18.0.3: + version "18.0.4" + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cacache@^19.0.1: + version "19.0.1" + dependencies: + "@npmcli/fs" "^4.0.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^7.0.2" + ssri "^12.0.0" + tar "^7.4.3" + unique-filename "^4.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + +cacheable-request@^7.0.2: + version "7.0.4" + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.0, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0, callsites@^3.1.0: + version "3.1.0" + +camelcase-keys@^6.2.2: + version "6.2.2" + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.3.1: + version "5.3.1" + +camelcase@^6.3.0: + version "6.3.0" + +camelcase@5.0.0: + version "5.0.0" + +caniuse-lite@^1.0.30001741: + version "1.0.30001743" + +canonicalize@^1.0.1: + version "1.0.8" + +"cas@https://github.com/joshchan/node-cas": + version "0.0.5" + dependencies: + cheerio "0.19.0" + +caseless@~0.12.0: + version "0.12.0" + +chalk@^2.4.2: + version "2.4.2" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@2.4.2: + version "2.4.2" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@4.1.0: + version "4.1.0" + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + +character-parser@^2.2.0: + version "2.2.0" + dependencies: + is-regex "^1.0.3" + +chardet@^2.1.0: + version "2.1.0" + +cheerio@^0.22.0: + version "0.22.0" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +cheerio@0.19.0: + version "0.19.0" + dependencies: + css-select "~1.0.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "~3.8.1" + lodash "^3.2.0" + +chownr@^1.1.1: + version "1.1.4" + +chownr@^2.0.0: + version "2.0.0" + +chownr@^3.0.0: + version "3.0.0" + +ci-info@^3.2.0: + version "3.9.0" + +ci-info@^4.0.0, ci-info@^4.2.0: + version "4.3.0" + +cjs-module-lexer@^2.1.0: + version "2.1.0" + +clean-stack@^2.0.0: + version "2.2.0" + +cli-cursor@^3.1.0, cli-cursor@3.1.0: + version "3.1.0" + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.2" + +cli-spinners@2.6.1: + version "2.6.1" + +cli-width@^3.0.0: + version "3.0.0" + +cliui@^7.0.2: + version "7.0.4" + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@4.0.1: + version "4.0.1" + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + +cluster-key-slot@^1.1.0: + version "1.1.2" + +cmd-shim@^6.0.0, cmd-shim@6.0.3: + version "6.0.3" + +co@^4.6.0: + version "4.6.0" + +collect-v8-coverage@^1.0.2: + version "1.0.2" + +color-convert@^1.9.0: + version "1.9.3" + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + +color-name@1.1.3: + version "1.1.3" + +color-string@^1.9.0: + version "1.9.1" + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@^1.1.2, color-support@1.1.3: + version "1.1.3" + +color@^4.2.3: + version "4.2.3" + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +columnify@1.6.0: + version "1.6.0" + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.15.1, commander@^2.20.3: + version "2.20.3" + +comment-parser@1.4.1: + version "1.4.1" + +common-ancestor-path@^1.0.1: + version "1.0.1" + +compare-func@^2.0.0: + version "2.0.0" + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.0: + version "1.3.1" + +concat-map@0.0.1: + version "0.0.1" + +concat-stream@^2.0.0: + version "2.0.0" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + +consolidate@^0.14.2: + version "0.14.5" + dependencies: + bluebird "^3.1.1" + +constantinople@^4.0.1: + version "4.0.1" + dependencies: + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.1" + +content-type@~1.0.5: + version "1.0.5" + +conventional-changelog-angular@7.0.0: + version "7.0.0" + dependencies: + compare-func "^2.0.0" + +conventional-changelog-core@5.0.1: + version "5.0.1" + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + +conventional-changelog-writer@^6.0.0: + version "6.0.1" + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" + +conventional-commits-filter@^3.0.0: + version "3.0.0" + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + dependencies: + is-text-path "^1.0.1" + JSONStream "^1.3.5" + meow "^8.1.2" + split2 "^3.2.2" + +conventional-recommended-bump@7.0.1: + version "7.0.1" + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" + +convert-source-map@^2.0.0: + version "2.0.0" + +cookie-signature@1.0.7: + version "1.0.7" + +cookie@0.7.2: + version "0.7.2" + +cookiejar@^2.1.0: + version "2.1.4" + +core-js-compat@^3.43.0: + version "3.45.1" + dependencies: + browserslist "^4.25.3" + +core-util-is@~1.0.0: + version "1.0.3" + +core-util-is@1.0.2: + version "1.0.2" + +cosmiconfig@9.0.0: + version "9.0.0" + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + +cpu-features@~0.0.10: + version "0.0.10" + dependencies: + buildcheck "~0.0.6" + nan "^2.19.0" + +create-require@^1.1.0: + version "1.1.1" + +credentials-context@^1.0.0: + version "1.0.0" + +cron-parser@^2.13.0: + version "2.18.0" + dependencies: + is-nan "^1.3.0" + moment-timezone "^0.5.31" + +cron-parser@^4.2.0, cron-parser@^4.2.1, cron-parser@^4.3.0: + version "4.9.0" + dependencies: + luxon "^3.2.1" + +cron@^1.8.2: + version "1.8.2" + dependencies: + moment-timezone "^0.5.x" + +cron@^4.1.4: + version "4.3.3" + dependencies: + "@types/luxon" "~3.7.0" + luxon "~3.7.0" + +cross-fetch@^3.0.5, cross-fetch@^3.0.6: + version "3.2.0" + dependencies: + node-fetch "^2.7.0" + +cross-spawn@^5.1.0: + version "5.1.0" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-ld@^3.7.0: + version "3.9.0" + dependencies: + base64url-universal "^1.0.1" + bs58 "^4.0.1" + node-forge "~0.10.0" + semver "^6.2.0" + optionalDependencies: + sodium-native "^3.2.0" + +crypto-ld@^7.0.0: + version "7.0.0" + +css-select@~1.0.0: + version "1.0.0" + dependencies: + boolbase "~1.0.0" + css-what "1.0" + domutils "1.4" + nth-check "~1.0.0" + +css-select@~1.2.0: + version "1.2.0" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@1.0: + version "1.0.0" + +css-what@2.1: + version "2.1.3" + +cssesc@^3.0.0: + version "3.0.0" + +dargs@^7.0.0: + version "7.0.0" + +dashdash@^1.12.0: + version "1.14.1" + dependencies: + assert-plus "^1.0.0" + +dashify@^2.0.0: + version "2.0.0" + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + +data-view-buffer@^1.0.2: + version "1.0.2" + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +datauri@^2.0.0: + version "2.0.0" + dependencies: + image-size "^0.7.3" + mimer "^1.0.0" + +dateformat@^3.0.3: + version "3.0.3" + +debug@^2.2.0: + version "2.6.9" + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.7" + dependencies: + ms "^2.1.1" + +debug@^3.2.7: + version "3.2.7" + dependencies: + ms "^2.1.1" + +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1, debug@4: + version "4.4.3" + dependencies: + ms "^2.1.3" + +debug@2.6.9: + version "2.6.9" + dependencies: + ms "2.0.0" + +debuglog@^1.0.0: + version "1.0.1" + +decamelize-keys@^1.1.0: + version "1.1.1" + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + +decompress-response@^6.0.0: + version "6.0.0" + dependencies: + mimic-response "^3.1.0" + +dedent@^1.6.0: + version "1.7.0" + +dedent@1.5.3: + version "1.5.3" + +deep-extend@^0.5.1: + version "0.5.1" + +deep-extend@^0.6.0: + version "0.6.0" + +deep-is@^0.1.3: + version "0.1.4" + +deepmerge@^4.2.2, deepmerge@^4.3.1: + version "4.3.1" + +defaults@^1.0.3: + version "1.0.4" + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + +delegates@^1.0.0: + version "1.0.0" + +denque@^1.1.0: + version "1.5.1" + +depd@~2.0.0, depd@2.0.0: + version "2.0.0" + +deprecation@^2.0.0: + version "2.3.1" + +destroy@1.2.0: + version "1.2.0" + +detect-indent@^5.0.0: + version "5.0.0" + +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.1.0" + +detect-newline@^3.1.0: + version "3.1.0" + +dicer@0.3.0: + version "0.3.0" + dependencies: + streamsearch "0.1.2" + +diff-sequences@^29.6.3: + version "29.6.3" + +diff@^4.0.1: + version "4.0.2" + +dir-glob@^3.0.1: + version "3.0.1" + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + dependencies: + esutils "^2.0.2" + +doctypes@^1.1.0: + version "1.1.0" + +dom-serializer@^1.0.1: + version "1.4.1" + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +dom-serializer@~0.1.0: + version "0.1.1" + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +dom-serializer@0: + version "0.2.2" + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domelementtype@^1.3.0, domelementtype@^1.3.1, domelementtype@1: + version "1.3.1" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + +domhandler@^2.3.0: + version "2.4.2" + dependencies: + domelementtype "1" + +domhandler@^3.0.0: + version "3.3.0" + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: + version "4.3.1" + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + dependencies: + domelementtype "^2.3.0" + +domhandler@2.3: + version "2.3.0" + dependencies: + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.2.2" + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +domutils@1.4: + version "1.4.3" + dependencies: + domelementtype "1" + +domutils@1.5: + version "1.5.1" + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.1.0: + version "5.3.0" + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~10.0.0: + version "10.0.0" + +dotenv-expand@~11.0.6: + version "11.0.7" + dependencies: + dotenv "^16.4.5" + +dotenv-flow@^3.1.0: + version "3.3.0" + dependencies: + dotenv "^8.6.0" + +dotenv@^16.4.5: + version "16.6.1" + +dotenv@^8.6.0: + version "8.6.0" + +dotenv@~16.3.1: + version "16.3.2" + +dotenv@~16.4.5: + version "16.4.7" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer@^0.1.1: + version "0.1.2" + +eastasianwidth@^0.2.0: + version "0.2.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + dependencies: + safe-buffer "^5.0.1" + +ed25519-signature-2018-context@^1.1.0: + version "1.1.0" + +ed25519-signature-2020-context@^1.1.0: + version "1.1.0" + +ee-first@1.1.1: + version "1.1.1" + +ejs@^3.1.7: + version "3.1.10" + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.5.218: + version "1.5.222" + +email-templates@^2.7.1: + version "2.7.1" + dependencies: + bluebird "^3.0.0" + consolidate "^0.14.2" + debug "^2.2.0" + glob "^6.0.0" + juice "^4.1.0" + lodash "^4.0.1" + +emittery@^0.13.1: + version "0.13.1" + +emoji-regex@^8.0.0: + version "8.0.0" + +emoji-regex@^9.2.2: + version "9.2.2" + +encodeurl@~1.0.2: + version "1.0.2" + +encodeurl@~2.0.0: + version "2.0.0" + +encoding@^0.1.0, encoding@^0.1.13: + version "0.1.13" + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.5" + dependencies: + once "^1.4.0" + +enquirer@~2.3.6: + version "2.3.6" + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + +entities@^2.0.0: + version "2.2.0" + +entities@^3.0.1: + version "3.0.1" + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + +entities@1.0: + version "1.0.0" + +env-paths@^2.2.0, env-paths@^2.2.1: + version "2.2.1" + +envfile@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/envfile/-/envfile-7.1.0.tgz" + integrity sha512-dyH4QnnZsArCLhPASr29eqBWDvKpq0GggQFTmysTT/S9TTmt1JrEKNvTBc09Cd7ujVZQful2HBGRMe2agu7Krg== + +envinfo@7.13.0: + version "7.13.0" + +err-code@^2.0.2: + version "2.0.3" + +error-ex@^1.3.1: + version "1.3.4" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.3, es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.1" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz" + integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + +es-errors@^1.0.0, es-errors@^1.3.0: + version "1.3.0" + +es-module-lexer@^1.5.3: + version "1.7.0" + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +es6-error@^4.1.1: + version "4.1.1" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + +escape-html@~1.0.3: + version "1.0.3" + +escape-string-regexp@^1.0.5: + version "1.0.5" + +escape-string-regexp@^2.0.0: + version "2.0.0" + +escape-string-regexp@^4.0.0: + version "4.0.0" + +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb@^19.0.4: + version "19.0.4" + dependencies: + eslint-config-airbnb-base "^15.0.0" + object.assign "^4.1.2" + object.entries "^1.1.5" + +eslint-config-prettier@^9.1.0, "eslint-config-prettier@>= 7.0.0 <10.0.0 || >=10.1.0": + version "9.1.2" + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.6.1: + version "3.10.1" + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^2.0.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.13" + unrs-resolver "^1.6.2" + +eslint-module-utils@^2.12.1: + version "2.12.1" + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@*, eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.25.3, eslint-plugin-import@^2.29.1: + version "2.32.0" + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" + semver "^6.3.1" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" + +eslint-plugin-jest@^27.9.0: + version "27.9.0" + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsdoc@^48.2.1: + version "48.11.0" + dependencies: + "@es-joy/jsdoccomment" "~0.46.0" + are-docs-informative "^0.0.2" + comment-parser "1.4.1" + debug "^4.3.5" + escape-string-regexp "^4.0.0" + espree "^10.1.0" + esquery "^1.6.0" + parse-imports "^2.1.1" + semver "^7.6.3" + spdx-expression-parse "^4.0.0" + synckit "^0.9.1" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-prettier@^5.1.3: + version "5.5.4" + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.11.7" + +eslint-scope@^5.1.1: + version "5.1.1" + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0 || ^9.0.0", "eslint@^7.32.0 || ^8.2.0", eslint@^8.2.0, eslint@^8.56.0, eslint@>=4.19.1, eslint@>=5.16.0, eslint@>=7.0.0, eslint@>=8.0.0: + version "8.57.1" + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^10.1.0: + version "10.4.0" + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0: + version "4.0.1" + +esquery@^1.4.2, esquery@^1.6.0: + version "1.6.0" + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + +esutils@^2.0.2: + version "2.0.3" + +etag@^1.8.1, etag@~1.8.1: + version "1.8.1" + +event-target-shim@^5.0.0: + version "5.0.1" + +eventemitter2@^6.4.9: + version "6.4.9" + +eventemitter3@^4.0.4: + version "4.0.7" + +events@^3.3.0: + version "3.3.0" + +execa@^5.1.1: + version "5.1.1" + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@5.0.0: + version "5.0.0" + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit-x@^0.2.2: + version "0.2.2" + +expand-template@^2.0.3: + version "2.0.3" + +expect-type@^1.2.2: + version "1.2.2" + +expect@^30.0.0, expect@30.1.2: + version "30.1.2" + dependencies: + "@jest/expect-utils" "30.1.2" + "@jest/get-type" "30.1.0" + jest-matcher-utils "30.1.2" + jest-message-util "30.1.0" + jest-mock "30.0.5" + jest-util "30.0.5" + +expo-server-sdk@^3.4.0: + version "3.15.0" + dependencies: + node-fetch "^2.6.0" + promise-limit "^2.7.0" + promise-retry "^2.0.1" + +exponential-backoff@^3.1.1: + version "3.1.2" + +express-session@^1.17.0: + version "1.18.2" + dependencies: + cookie "0.7.2" + cookie-signature "1.0.7" + debug "2.6.9" + depd "~2.0.0" + on-headers "~1.1.0" + parseurl "~1.3.3" + safe-buffer "5.2.1" + uid-safe "~2.1.5" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + +extsprintf@^1.2.0: + version "1.4.1" + +extsprintf@1.3.0: + version "1.3.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + +fast-diff@^1.1.2: + version "1.3.0" + +fast-glob@^3.2.9: + version "3.3.3" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + +fast-levenshtein@^2.0.6: + version "2.0.6" + +fastest-validator@^1.19.0: + version "1.19.1" + +fastq@^1.6.0: + version "1.19.1" + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.2: + version "2.0.2" + dependencies: + bser "2.1.1" + +fdir@^6.4.3, fdir@^6.5.0: + version "6.5.0" + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +figures@^3.0.0, figures@3.2.0: + version "3.2.0" + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + dependencies: + minimatch "^5.0.1" + +fill-range@^7.1.1: + version "7.1.1" + dependencies: + to-regex-range "^5.0.1" + +find-up@^2.0.0: + version "2.1.0" + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + +flatted@^3.2.9: + version "3.3.3" + +follow-redirects@^1.15.6, follow-redirects@^1.5.1: + version "1.15.11" + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + dependencies: + is-callable "^1.2.7" + +foreground-child@^3.1.0: + version "3.3.1" + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + +form-data@^2.3.1: + version "2.5.5" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.35" + safe-buffer "^5.2.1" + +form-data@^4.0.4: + version "4.0.4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + dependencies: + fetch-blob "^3.1.2" + +formidable@^1.2.0: + version "1.2.6" + +fresh@^0.5.2, fresh@0.5.2: + version "0.5.2" + +front-matter@^4.0.2: + version "4.0.2" + dependencies: + js-yaml "^3.13.1" + +fs-constants@^1.0.0: + version "1.0.0" + +fs-extra@^10.0.0: + version "10.1.0" + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.1.0: + version "11.3.2" + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.2.0: + version "11.3.2" + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + +function-bind@^1.1.2: + version "1.1.2" + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + +gauge@^3.0.0: + version "3.0.2" + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + +get-caller-file@^2.0.5: + version "2.0.5" + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-package-type@^0.1.0: + version "0.1.0" + +get-pkg-repo@^4.2.1: + version "4.2.1" + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@^5.1.1, get-port@5.1.1: + version "5.1.1" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stdin@^7.0.0: + version "7.0.0" + +get-stream@^5.1.0: + version "5.2.0" + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + +get-stream@6.0.0: + version "6.0.0" + +get-symbol-description@^1.1.0: + version "1.1.0" + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-tsconfig@^4.10.0: + version "4.10.1" + dependencies: + resolve-pkg-maps "^1.0.0" + +getpass@^0.1.1: + version "0.1.7" + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^3.0.0: + version "3.0.0" + dependencies: + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^5.0.0: + version "5.0.1" + dependencies: + meow "^8.1.2" + semver "^7.0.0" + +git-up@^7.0.0: + version "7.0.0" + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@14.0.0: + version "14.0.0" + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + dependencies: + ini "^1.3.2" + +github-from-package@0.0.0: + version "0.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2, glob-parent@6.0.2: + version "6.0.2" + dependencies: + is-glob "^4.0.3" + +glob@^10.2.2, glob@^10.3.10: + version "10.4.5" + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^6.0.0: + version "6.0.4" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.4: + version "7.2.3" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.2.0: + version "7.2.3" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^9.2.0: + version "9.3.5" + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +glob@7.1.4: + version "7.1.4" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.24.0" + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.4: + version "1.0.4" + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.1.0: + version "11.1.0" + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +google-libphonenumber@^3.2.26: + version "3.2.43" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + +got@^11.8.0: + version "11.8.6" + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6, graceful-fs@4.2.11: + version "4.2.11" + +graphemer@^1.4.0: + version "1.4.0" + +handlebars@^4.7.7: + version "4.7.8" + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + +har-validator@~5.1.3: + version "5.1.5" + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + +has-bigints@^1.0.2: + version "1.1.0" + +has-flag@^3.0.0: + version "3.0.0" + +has-flag@^4.0.0: + version "4.0.0" + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + +has-tostringtag@^1.0.2: + version "1.0.2" + dependencies: + has-symbols "^1.0.3" + +has-unicode@^2.0.1, has-unicode@2.0.1: + version "2.0.1" + +hash.js@^1.1.7: + version "1.1.7" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.2: + version "2.0.2" + dependencies: + function-bind "^1.1.2" + +he@^1.0.0: + version "1.2.0" + +hosted-git-info@^2.1.4: + version "2.8.9" + +hosted-git-info@^4.0.0: + version "4.1.0" + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.1: + version "4.1.0" + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: + version "7.0.2" + dependencies: + lru-cache "^10.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + +html-to-text@^2.1.0: + version "2.1.3" + dependencies: + he "^1.0.0" + htmlparser "^1.7.7" + optimist "^0.6.1" + underscore "^1.8.3" + underscore.string "^3.2.3" + +htmlparser@^1.7.7: + version "1.7.7" + +htmlparser2@^3.9.1: + version "3.10.1" + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +htmlparser2@^4.0.0: + version "4.1.0" + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + +htmlparser2@^6.0.0: + version "6.1.0" + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^7.0.0: + version "7.2.0" + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + +htmlparser2@^8.0.0: + version "8.0.2" + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +htmlparser2@~3.8.1: + version "3.8.3" + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: + version "4.2.0" + +http-errors@2.0.0: + version "2.0.0" + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-link-header@^1.0.2, http-link-header@^1.1.1: + version "1.1.3" + +http-proxy-agent@^7.0.0: + version "7.0.2" + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-signature-header@^1.3.1: + version "1.3.1" + dependencies: + assert-plus "^1.0.0" + +http-signature@^1.3.4: + version "1.4.0" + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.18.0" + +http-signature@~1.2.0: + version "1.2.0" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.1: + version "7.0.6" + dependencies: + agent-base "^7.1.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + +iconv-lite@^0.6.2: + version "0.6.3" + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.7.0: + version "0.7.0" + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@0.4.24: + version "0.4.24" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + +ignore-walk@^6.0.4: + version "6.0.5" + dependencies: + minimatch "^9.0.0" + +ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + +image-size@^0.7.3: + version "0.7.5" + +immediate@~3.0.5: + version "3.0.6" + +immutable@^3.8.2: + version "3.8.2" + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.1" + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.2.0: + version "3.2.0" + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +import-local@3.1.0: + version "3.1.0" + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + +indent-string@^4.0.0: + version "4.0.0" + +inflight@^1.0.4: + version "1.0.6" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4: + version "2.0.4" + +ini@^1.3.2, ini@^1.3.8, ini@~1.3.0: + version "1.3.8" + +ini@^4.1.3: + version "4.1.3" + +init-package-json@6.0.3: + version "6.0.3" + dependencies: + "@npmcli/package-json" "^5.0.0" + npm-package-arg "^11.0.0" + promzard "^1.0.0" + read "^3.0.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + +inquirer@^8.2.4: + version "8.2.7" + dependencies: + "@inquirer/external-editor" "^1.0.0" + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +internal-slot@^1.1.0: + version "1.1.0" + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +"ioredis@^4.0.0 || ^5.0.0", ioredis@^4.27.0: + version "4.30.1" + dependencies: + "@ioredis/commands" "^1.0.2" + cluster-key-slot "^1.1.0" + debug "^4.3.1" + denque "^1.1.0" + lodash.defaults "^4.2.0" + lodash.flatten "^4.4.0" + lodash.isarguments "^3.1.0" + p-map "^2.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ip-address@^10.0.1: + version "10.0.1" + +ipaddr.js@^2.2.0: + version "2.2.0" + +is-arguments@^1.0.4: + version "1.2.0" + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + +is-arrayish@^0.3.1: + version "0.3.4" + +is-async-function@^2.0.0: + version "2.1.1" + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.2" + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-bun-module@^2.0.0: + version "2.0.0" + dependencies: + semver "^7.7.1" + +is-callable@^1.2.7: + version "1.2.7" + +is-ci@3.0.1: + version "3.0.1" + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1, is-core-module@^2.5.0: + version "2.16.1" + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + +is-expression@^4.0.0: + version "4.0.0" + dependencies: + acorn "^7.1.1" + object-assign "^4.1.1" + +is-extglob@^2.1.1: + version "2.1.1" + +is-finalizationregistry@^1.1.0: + version "1.1.1" + dependencies: + call-bound "^1.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + +is-generator-fn@^2.1.0: + version "2.1.0" + +is-generator-function@^1.0.10, is-generator-function@^1.0.7: + version "1.1.0" + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + +is-lambda@^1.0.1: + version "1.0.1" + +is-map@^2.0.3: + version "2.0.3" + +is-nan@^1.3.0: + version "1.3.2" + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.3: + version "2.0.3" + +is-number-object@^1.1.1: + version "1.1.1" + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + +is-obj@^2.0.0: + version "2.0.0" + +is-path-inside@^3.0.3: + version "3.0.3" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + +is-plain-object@^2.0.4: + version "2.0.4" + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + +is-promise@^2.0.0: + version "2.2.2" + +is-regex@^1.0.3, is-regex@^1.2.1: + version "1.2.1" + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + dependencies: + call-bound "^1.0.3" + +is-ssh@^1.4.0: + version "1.4.1" + dependencies: + protocols "^2.0.1" + +is-stream@^1.1.0: + version "1.1.0" + +is-stream@^2.0.0: + version "2.0.1" + +is-stream@2.0.0: + version "2.0.0" + +is-string@^1.1.1: + version "1.1.1" + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-text-path@^1.0.1: + version "1.0.1" + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: + version "1.1.15" + dependencies: + which-typed-array "^1.1.16" + +is-typedarray@~1.0.0: + version "1.0.0" + +is-unicode-supported@^0.1.0: + version "0.1.0" + +is-weakmap@^2.0.2: + version "2.0.2" + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-wsl@^2.2.0: + version "2.2.0" + dependencies: + is-docker "^2.0.0" + +isarray@^2.0.5: + version "2.0.5" + +isarray@~1.0.0: + version "1.0.0" + +isarray@0.0.1: + version "0.0.1" + +isexe@^2.0.0: + version "2.0.0" + +isexe@^3.1.1: + version "3.1.1" + +isobject@^3.0.1: + version "3.0.1" + +isstream@^0.1.2, isstream@~0.1.2: + version "0.1.2" + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + +istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.2: + version "6.0.3" + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^5.0.0: + version "5.0.6" + dependencies: + "@jridgewell/trace-mapping" "^0.3.23" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + +istanbul-reports@^3.1.3: + version "3.2.0" + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.9.4" + dependencies: + async "^3.2.6" + filelist "^1.0.4" + picocolors "^1.1.1" + +jest-changed-files@30.0.5: + version "30.0.5" + dependencies: + execa "^5.1.1" + jest-util "30.0.5" + p-limit "^3.1.0" + +jest-circus@30.1.3: + version "30.1.3" + dependencies: + "@jest/environment" "30.1.2" + "@jest/expect" "30.1.2" + "@jest/test-result" "30.1.3" + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + co "^4.6.0" + dedent "^1.6.0" + is-generator-fn "^2.1.0" + jest-each "30.1.0" + jest-matcher-utils "30.1.2" + jest-message-util "30.1.0" + jest-runtime "30.1.3" + jest-snapshot "30.1.2" + jest-util "30.0.5" + p-limit "^3.1.0" + pretty-format "30.0.5" + pure-rand "^7.0.0" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-cli@30.1.3: + version "30.1.3" + dependencies: + "@jest/core" "30.1.3" + "@jest/test-result" "30.1.3" + "@jest/types" "30.0.5" + chalk "^4.1.2" + exit-x "^0.2.2" + import-local "^3.2.0" + jest-config "30.1.3" + jest-util "30.0.5" + jest-validate "30.1.0" + yargs "^17.7.2" + +jest-config@30.1.3: + version "30.1.3" + dependencies: + "@babel/core" "^7.27.4" + "@jest/get-type" "30.1.0" + "@jest/pattern" "30.0.1" + "@jest/test-sequencer" "30.1.3" + "@jest/types" "30.0.5" + babel-jest "30.1.2" + chalk "^4.1.2" + ci-info "^4.2.0" + deepmerge "^4.3.1" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-circus "30.1.3" + jest-docblock "30.0.1" + jest-environment-node "30.1.2" + jest-regex-util "30.0.1" + jest-resolve "30.1.3" + jest-runner "30.1.3" + jest-util "30.0.5" + jest-validate "30.1.0" + micromatch "^4.0.8" + parse-json "^5.2.0" + pretty-format "30.0.5" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.4.1, "jest-diff@>=29.4.3 < 30": + version "29.7.0" + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-diff@30.1.2: + version "30.1.2" + dependencies: + "@jest/diff-sequences" "30.0.1" + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + pretty-format "30.0.5" + +jest-docblock@30.0.1: + version "30.0.1" + dependencies: + detect-newline "^3.1.0" + +jest-each@30.1.0: + version "30.1.0" + dependencies: + "@jest/get-type" "30.1.0" + "@jest/types" "30.0.5" + chalk "^4.1.2" + jest-util "30.0.5" + pretty-format "30.0.5" + +jest-environment-node@30.1.2: + version "30.1.2" + dependencies: + "@jest/environment" "30.1.2" + "@jest/fake-timers" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + jest-mock "30.0.5" + jest-util "30.0.5" + jest-validate "30.1.0" + +jest-get-type@^29.6.3: + version "29.6.3" + +jest-haste-map@30.1.0: + version "30.1.0" + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + anymatch "^3.1.3" + fb-watchman "^2.0.2" + graceful-fs "^4.2.11" + jest-regex-util "30.0.1" + jest-util "30.0.5" + jest-worker "30.1.0" + micromatch "^4.0.8" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.3" + +jest-leak-detector@30.1.0: + version "30.1.0" + dependencies: + "@jest/get-type" "30.1.0" + pretty-format "30.0.5" + +jest-matcher-utils@30.1.2: + version "30.1.2" + dependencies: + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + jest-diff "30.1.2" + pretty-format "30.0.5" + +jest-message-util@30.1.0: + version "30.1.0" + dependencies: + "@babel/code-frame" "^7.27.1" + "@jest/types" "30.0.5" + "@types/stack-utils" "^2.0.3" + chalk "^4.1.2" + graceful-fs "^4.2.11" + micromatch "^4.0.8" + pretty-format "30.0.5" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-mock@30.0.5: + version "30.0.5" + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + jest-util "30.0.5" + +jest-pnp-resolver@^1.2.3: + version "1.2.3" + +jest-regex-util@30.0.1: + version "30.0.1" + +jest-resolve-dependencies@30.1.3: + version "30.1.3" + dependencies: + jest-regex-util "30.0.1" + jest-snapshot "30.1.2" + +jest-resolve@*, jest-resolve@30.1.3: + version "30.1.3" + dependencies: + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + jest-pnp-resolver "^1.2.3" + jest-util "30.0.5" + jest-validate "30.1.0" + slash "^3.0.0" + unrs-resolver "^1.7.11" + +jest-runner@30.1.3: + version "30.1.3" + dependencies: + "@jest/console" "30.1.2" + "@jest/environment" "30.1.2" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + emittery "^0.13.1" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-docblock "30.0.1" + jest-environment-node "30.1.2" + jest-haste-map "30.1.0" + jest-leak-detector "30.1.0" + jest-message-util "30.1.0" + jest-resolve "30.1.3" + jest-runtime "30.1.3" + jest-util "30.0.5" + jest-watcher "30.1.3" + jest-worker "30.1.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@30.1.3: + version "30.1.3" + dependencies: + "@jest/environment" "30.1.2" + "@jest/fake-timers" "30.1.2" + "@jest/globals" "30.1.2" + "@jest/source-map" "30.0.1" + "@jest/test-result" "30.1.3" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + cjs-module-lexer "^2.1.0" + collect-v8-coverage "^1.0.2" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-haste-map "30.1.0" + jest-message-util "30.1.0" + jest-mock "30.0.5" + jest-regex-util "30.0.1" + jest-resolve "30.1.3" + jest-snapshot "30.1.2" + jest-util "30.0.5" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@30.1.2: + version "30.1.2" + dependencies: + "@babel/core" "^7.27.4" + "@babel/generator" "^7.27.5" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/types" "^7.27.3" + "@jest/expect-utils" "30.1.2" + "@jest/get-type" "30.1.0" + "@jest/snapshot-utils" "30.1.2" + "@jest/transform" "30.1.2" + "@jest/types" "30.0.5" + babel-preset-current-node-syntax "^1.1.0" + chalk "^4.1.2" + expect "30.1.2" + graceful-fs "^4.2.11" + jest-diff "30.1.2" + jest-matcher-utils "30.1.2" + jest-message-util "30.1.0" + jest-util "30.0.5" + pretty-format "30.0.5" + semver "^7.7.2" + synckit "^0.11.8" + +jest-util@30.0.5: + version "30.0.5" + dependencies: + "@jest/types" "30.0.5" + "@types/node" "*" + chalk "^4.1.2" + ci-info "^4.2.0" + graceful-fs "^4.2.11" + picomatch "^4.0.2" + +jest-validate@30.1.0: + version "30.1.0" + dependencies: + "@jest/get-type" "30.1.0" + "@jest/types" "30.0.5" + camelcase "^6.3.0" + chalk "^4.1.2" + leven "^3.1.0" + pretty-format "30.0.5" + +jest-watcher@30.1.3: + version "30.1.3" + dependencies: + "@jest/test-result" "30.1.3" + "@jest/types" "30.0.5" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + emittery "^0.13.1" + jest-util "30.0.5" + string-length "^4.0.2" + +jest-worker@30.1.0: + version "30.1.0" + dependencies: + "@types/node" "*" + "@ungap/structured-clone" "^1.3.0" + jest-util "30.0.5" + merge-stream "^2.0.0" + supports-color "^8.1.1" + +jest@*, jest@^30.0.5: + version "30.1.3" + dependencies: + "@jest/core" "30.1.3" + "@jest/types" "30.0.5" + import-local "^3.2.0" + jest-cli "30.1.3" + +jose@^2.0.5: + version "2.0.7" + dependencies: + "@panva/asn1.js" "^1.0.0" + +jose@^5.2.0: + version "5.10.0" + +js-stringify@^1.0.2: + version "1.0.2" + +js-tokens@^4.0.0: + version "4.0.0" + +js-yaml@^3.10.0: + version "3.14.1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^3.13.1: + version "3.14.1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0, js-yaml@4.1.0: + version "4.1.0" + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + +jsdoc-type-pratt-parser@~4.0.0: + version "4.0.0" + +jsesc@^3.0.2: + version "3.1.0" + +jsesc@~3.0.2: + version "3.0.2" + +json-buffer@3.0.1: + version "3.0.1" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + +json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: + version "3.0.2" + +json-schema-traverse@^0.4.1: + version "0.4.1" + +json-schema@0.4.0: + version "0.4.0" + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + +json-stringify-nice@^1.1.4: + version "1.1.4" + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + +json5@^1.0.2: + version "1.0.2" + dependencies: + minimist "^1.2.0" + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + +jsonc-parser@3.2.0: + version "3.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.2.0" + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonld-context-parser@^2.0.0, jsonld-context-parser@^2.1.2, jsonld-context-parser@^2.1.3, jsonld-context-parser@^2.4.0: + version "2.4.0" + dependencies: + "@types/http-link-header" "^1.0.1" + "@types/node" "^18.0.0" + cross-fetch "^3.0.6" + http-link-header "^1.0.2" + relative-to-absolute-iri "^1.0.5" + +jsonld-signatures@^11.3.0, jsonld-signatures@^11.3.2, jsonld-signatures@^11.5.0: + version "11.5.0" + dependencies: + "@digitalbazaar/security-context" "^1.0.0" + jsonld "^8.0.0" + rdf-canonize "^4.0.1" + serialize-error "^8.1.0" + +jsonld-signatures@^5.0.0: + version "5.2.0" + dependencies: + base64url "^3.0.1" + crypto-ld "^3.7.0" + jsonld "^2.0.2" + node-forge "^0.10.0" + security-context "^4.0.0" + serialize-error "^5.0.0" + +jsonld-streaming-parser@^2.4.0, jsonld-streaming-parser@^2.4.2: + version "2.4.3" + dependencies: + "@rdfjs/types" "*" + "@types/http-link-header" "^1.0.1" + canonicalize "^1.0.1" + http-link-header "^1.0.2" + jsonld-context-parser "^2.1.3" + jsonparse "^1.3.1" + rdf-data-factory "^1.1.0" + +jsonld-streaming-serializer@^1.2.0: + version "1.3.0" + dependencies: + "@rdfjs/types" "*" + jsonld-context-parser "^2.0.0" + +jsonld@^2.0.2: + version "2.0.2" + dependencies: + canonicalize "^1.0.1" + lru-cache "^5.1.1" + rdf-canonize "^1.0.2" + request "^2.88.0" + semver "^6.3.0" + xmldom "0.1.19" + +jsonld@^3.3.2: + version "3.3.2" + dependencies: + canonicalize "^1.0.1" + lru-cache "^5.1.1" + object.fromentries "^2.0.2" + rdf-canonize "^2.0.1" + request "^2.88.0" + semver "^6.3.0" + xmldom "0.1.19" + +jsonld@^8.0.0: + version "8.3.3" + dependencies: + "@digitalbazaar/http-client" "^3.4.1" + canonicalize "^1.0.1" + lru-cache "^6.0.0" + rdf-canonize "^3.4.0" + +jsonld@^8.1.0: + version "8.3.3" + dependencies: + "@digitalbazaar/http-client" "^3.4.1" + canonicalize "^1.0.1" + lru-cache "^6.0.0" + rdf-canonize "^3.4.0" + +jsonld@^8.3.3: + version "8.3.3" + dependencies: + "@digitalbazaar/http-client" "^3.4.1" + canonicalize "^1.0.1" + lru-cache "^6.0.0" + rdf-canonize "^3.4.0" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + +JSONStream@^1.3.3, JSONStream@^1.3.5: + version "1.3.5" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +jsonwebtoken@^9.0.2: + version "9.0.2" + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jsprim@^1.2.2: + version "1.4.2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jsprim@^2.0.2: + version "2.0.2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jstransformer@1.0.0: + version "1.0.0" + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +juice@^4.1.0: + version "4.3.2" + dependencies: + cheerio "^0.22.0" + commander "^2.15.1" + cross-spawn "^5.1.0" + deep-extend "^0.5.1" + mensch "^0.3.3" + slick "^1.12.2" + web-resource-inliner "^4.2.1" + +just-diff-apply@^5.2.0: + version "5.5.0" + +just-diff@^6.0.0: + version "6.0.2" + +jwa@^1.4.1: + version "1.4.2" + dependencies: + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + +kleur@^4.1.4, kleur@^4.1.5: + version "4.1.5" + +ky-universal@^0.11.0: + version "0.11.0" + dependencies: + abort-controller "^3.0.0" + node-fetch "^3.2.10" + +ky@^0.33.3, ky@>=0.31.4: + version "0.33.3" + +lerna@^8.0.1: + version "8.2.4" + dependencies: + "@lerna/create" "8.2.4" + "@npmcli/arborist" "7.5.4" + "@npmcli/package-json" "5.2.0" + "@npmcli/run-script" "8.1.0" + "@nx/devkit" ">=17.1.2 < 21" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "20.1.2" + aproba "2.0.0" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.3" + color-support "1.1.3" + columnify "1.6.0" + console-control-strings "^1.1.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "9.0.0" + dedent "1.5.3" + envinfo "7.13.0" + execa "5.0.0" + fs-extra "^11.2.0" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "14.0.0" + glob-parent "6.0.2" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "6.0.3" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "8.0.6" + libnpmpublish "9.0.9" + load-json-file "6.2.0" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "11.0.2" + npm-packlist "8.0.2" + npm-registry-fetch "^17.1.0" + nx ">=17.1.2 < 21" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^18.0.6" + pify "5.0.0" + read-cmd-shim "4.0.0" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + set-blocking "^2.0.0" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^10.0.6" + string-width "^4.2.3" + tar "6.2.1" + temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^10.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.1" + wide-align "1.1.5" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" + +leven@^3.1.0: + version "3.1.0" + +leven@2.1.0: + version "2.1.0" + +levn@^0.4.1: + version "0.4.1" + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libnpmaccess@8.0.6: + version "8.0.6" + dependencies: + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + +libnpmpublish@9.0.9: + version "9.0.9" + dependencies: + ci-info "^4.0.0" + normalize-package-data "^6.0.1" + npm-package-arg "^11.0.2" + npm-registry-fetch "^17.0.1" + proc-log "^4.2.0" + semver "^7.3.7" + sigstore "^2.2.0" + ssri "^10.0.6" + +lie@3.1.1: + version "3.1.1" + dependencies: + immediate "~3.0.5" + +lines-and-columns@^1.1.6: + version "1.2.4" + +lines-and-columns@~2.0.3: + version "2.0.4" + +lines-and-columns@2.0.3: + version "2.0.3" + +load-json-file@^4.0.0: + version "4.0.0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@6.2.0: + version "6.2.0" + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +localforage@^1.9.0: + version "1.10.0" + dependencies: + lie "3.1.1" + +locate-path@^2.0.0: + version "2.0.0" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + dependencies: + p-locate "^5.0.0" + +lodash.assignin@^4.0.9: + version "4.2.0" + +lodash.bind@^4.1.4: + version "4.2.1" + +lodash.debounce@^4.0.8: + version "4.0.8" + +lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: + version "4.2.0" + +lodash.filter@^4.4.0: + version "4.6.0" + +lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: + version "4.4.0" + +lodash.foreach@^4.3.0: + version "4.5.0" + +lodash.includes@^4.3.0: + version "4.3.0" + +lodash.isarguments@^3.1.0: + version "3.1.0" + +lodash.isboolean@^3.0.3: + version "3.0.3" + +lodash.isinteger@^4.0.4: + version "4.0.4" + +lodash.ismatch@^4.4.0: + version "4.4.0" + +lodash.isnumber@^3.0.3: + version "3.0.3" + +lodash.isplainobject@^4.0.6: + version "4.0.6" + +lodash.isstring@^4.0.1: + version "4.0.1" + +lodash.map@^4.4.0: + version "4.6.0" + +lodash.merge@^4.4.0, lodash.merge@^4.6.2: + version "4.6.2" + +lodash.once@^4.0.0: + version "4.1.1" + +lodash.pick@^4.2.1: + version "4.4.0" + +lodash.reduce@^4.4.0: + version "4.6.0" + +lodash.reject@^4.4.0: + version "4.6.0" + +lodash.some@^4.4.0: + version "4.6.0" + +lodash.unescape@^4.0.1: + version "4.0.1" + +lodash@^3.2.0: + version "3.10.1" + +lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +long-timeout@0.1.1: + version "0.1.1" + +lowercase-keys@^2.0.0: + version "2.0.0" + +lru-cache@^10.0.1: + version "10.4.3" + +lru-cache@^10.2.0: + version "10.4.3" + +lru-cache@^10.2.2: + version "10.4.3" + +lru-cache@^4.0.1: + version "4.1.5" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + dependencies: + yallist "^4.0.0" + +lru-cache@10.1.0: + version "10.1.0" + +luxon@^3.2.1, luxon@~3.7.0: + version "3.7.2" + +make-dir@^2.1.0: + version "2.1.0" + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.1.0: + version "3.1.0" + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0, make-dir@4.0.0: + version "4.0.0" + dependencies: + semver "^7.5.3" + +make-error@^1.1.1, make-error@^1.3.6: + version "1.3.6" + +make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: + version "13.0.1" + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + proc-log "^4.2.0" + promise-retry "^2.0.1" + ssri "^10.0.0" + +make-fetch-happen@^14.0.3: + version "14.0.3" + dependencies: + "@npmcli/agent" "^3.0.0" + cacache "^19.0.1" + http-cache-semantics "^4.1.1" + minipass "^7.0.2" + minipass-fetch "^4.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^1.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + ssri "^12.0.0" + +makeerror@1.0.12: + version "1.0.12" + dependencies: + tmpl "1.0.5" + +map-obj@^1.0.0: + version "1.0.1" + +map-obj@^4.0.0: + version "4.3.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + +media-typer@0.3.0: + version "0.3.0" + +memory-streams@^0.1.3: + version "0.1.3" + dependencies: + readable-stream "~1.0.2" + +mensch@^0.3.3: + version "0.3.4" + +meow@^8.1.2: + version "8.1.2" + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + +methods@^1.1.1, methods@^1.1.2: + version "1.1.2" + +microdata-rdf-streaming-parser@^1.2.0: + version "1.2.0" + dependencies: + "@rdfjs/types" "*" + htmlparser2 "^6.0.0" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.2" + +micromatch@^4.0.8: + version "4.0.8" + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.35" + dependencies: + mime-db "1.52.0" + +mime@^1.4.1, mime@1.6.0: + version "1.6.0" + +mimer@^1.0.0: + version "1.1.1" + +mimic-fn@^2.1.0: + version "2.1.0" + +mimic-response@^1.0.0: + version "1.0.1" + +mimic-response@^3.1.0: + version "3.1.0" + +min-indent@^1.0.0: + version "1.0.1" + +minimalistic-assert@^1.0.1: + version "1.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2, "minimatch@2 || 3": + version "3.1.2" + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0: + version "9.0.5" + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + dependencies: + brace-expansion "^2.0.1" + +minimatch@3.0.5: + version "3.0.5" + dependencies: + brace-expansion "^1.1.7" + +minimatch@9.0.3: + version "9.0.3" + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + +minimist@~0.0.1: + version "0.0.10" + +minipass-collect@^2.0.1: + version "2.0.1" + dependencies: + minipass "^7.0.3" + +minipass-fetch@^3.0.0: + version "3.0.5" + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-fetch@^4.0.0: + version "4.0.1" + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^3.0.1" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2: + version "7.1.2" + +minipass@^5.0.0: + version "5.0.0" + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +minizlib@^3.0.1: + version "3.0.2" + dependencies: + minipass "^7.1.2" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + +mkdirp@^1.0.3: + version "1.0.4" + +mkdirp@^3.0.1: + version "3.0.1" + +modify-values@^1.0.1: + version "1.0.1" + +moleculer-bull@^0.2.5: + version "0.2.8" + dependencies: + bull "^3.15.0" + lodash "^4.17.15" + +moleculer-db@^0.8.15, moleculer-db@^0.8.16: + version "0.8.29" + dependencies: + "@seald-io/nedb" "^3.0.0" + lodash "^4.17.21" + +moleculer-mail@^1.2.5: + version "1.2.6" + dependencies: + bluebird "^3.7.2" + email-templates "^2.7.1" + lodash "^4.17.21" + nodemailer "^4.6.7" + nodemailer-html-to-text "^2.1.0" + +moleculer-schedule@^0.2.3: + version "0.2.3" + dependencies: + lodash "^4.17.21" + node-schedule "^2.0.0" + +moleculer-web@^0.10.0-beta1, moleculer-web@^0.10.7: + version "0.10.8" + dependencies: + "@fastify/busboy" "^1.0.0" + body-parser "^1.19.0" + es6-error "^4.1.1" + etag "^1.8.1" + fresh "^0.5.2" + isstream "^0.1.2" + kleur "^4.1.4" + lodash "^4.17.21" + path-to-regexp "^3.1.0" + qs "^6.11.0" + serve-static "^1.14.1" + +"moleculer@^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0", "moleculer@^0.13.0 || ^0.14.0", "moleculer@^0.14.0 || ^0.13.0 || ^0.12.0", moleculer@^0.14.13, moleculer@^0.14.17, moleculer@^0.14.18, moleculer@^0.14.29, moleculer@^0.14.35: + version "0.14.35" + dependencies: + args "^5.0.3" + eventemitter2 "^6.4.9" + fastest-validator "^1.19.0" + glob "^7.2.0" + ipaddr.js "^2.2.0" + kleur "^4.1.5" + lodash "^4.17.21" + lru-cache "^6.0.0" + node-fetch "^2.6.7" + recursive-watch "^1.1.4" + +moment-timezone@^0.5.31, moment-timezone@^0.5.x: + version "0.5.48" + dependencies: + moment "^2.29.4" + +moment@^2.29.4, moment@2.30.1: + version "2.30.1" + +mri@1.1.4: + version "1.1.4" + +ms@^2.1.1, ms@^2.1.3, ms@2.1.3: + version "2.1.3" + +ms@2.0.0: + version "2.0.0" + +multimatch@5.0.0: + version "5.0.0" + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@^1.0.0: + version "1.0.0" + +mute-stream@0.0.8: + version "0.0.8" + +n3@^1.26.0, n3@^1.6.3, n3@^1.8.0: + version "1.26.0" + dependencies: + buffer "^6.0.3" + readable-stream "^4.0.0" + +nan@^2.19.0, nan@^2.23.0: + version "2.23.0" + +nanoid@^3.3.11: + version "3.3.11" + +napi-build-utils@^2.0.0: + version "2.0.0" + +napi-postinstall@^0.3.0: + version "0.3.3" + +natural-compare@^1.4.0: + version "1.4.0" + +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.4" + +negotiator@^1.0.0: + version "1.0.0" + +neo-async@^2.6.2: + version "2.6.2" + +"nextgraph@file:../../../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node": + version "0.1.1-alpha.7" + resolved "file:../../../../../NG/nextgraph-rs/ng-sdk-js/pkg-node" + +node-abi@^3.3.0: + version "3.77.0" + dependencies: + semver "^7.3.5" + +node-addon-api@^5.0.0: + version "5.1.0" + +node-domexception@^1.0.0: + version "1.0.0" + +node-fetch@^2.6.0, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.7.0: + version "2.7.0" + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^3.2.10: + version "3.3.2" + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-fetch@2.6.7: + version "2.6.7" + dependencies: + whatwg-url "^5.0.0" + +node-forge@^0.10.0, node-forge@~0.10.0: + version "0.10.0" + +node-gyp-build@^4.3.0: + version "4.8.4" + +node-gyp@^10.0.0: + version "10.3.1" + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + tar "^6.2.1" + which "^4.0.0" + +node-int64@^0.4.0: + version "0.4.0" + +node-machine-id@1.1.12: + version "1.1.12" + +node-releases@^2.0.21: + version "2.0.21" + +node-schedule@^2.0.0: + version "2.1.1" + dependencies: + cron-parser "^4.2.0" + long-timeout "0.1.1" + sorted-array-functions "^1.3.0" + +nodemailer-html-to-text@^2.1.0: + version "2.1.0" + dependencies: + html-to-text "^2.1.0" + +nodemailer@^4.6.7: + version "4.7.0" + +nopt@^5.0.0: + version "5.0.0" + dependencies: + abbrev "1" + +nopt@^7.0.0, nopt@^7.2.1: + version "7.2.1" + dependencies: + abbrev "^2.0.0" + +nopt@^8.0.0: + version "8.1.0" + dependencies: + abbrev "^3.0.0" + +normalize-package-data@^2.3.2: + version "2.5.0" + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^2.5.0: + version "2.5.0" + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.3: + version "3.0.3" + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: + version "6.0.2" + dependencies: + hosted-git-info "^7.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0: + version "3.0.0" + +normalize-url@^6.0.1: + version "6.1.0" + +npm-bundled@^3.0.0: + version "3.0.1" + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: + version "6.3.0" + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + +npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: + version "11.0.3" + dependencies: + hosted-git-info "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-package-arg@11.0.2: + version "11.0.2" + dependencies: + hosted-git-info "^7.0.0" + proc-log "^4.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@^8.0.0, npm-packlist@8.0.2: + version "8.0.2" + dependencies: + ignore-walk "^6.0.4" + +npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: + version "9.1.0" + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" + semver "^7.3.5" + +npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: + version "17.1.0" + dependencies: + "@npmcli/redact" "^2.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^4.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + dependencies: + path-key "^3.0.0" + +npmlog@^5.0.1: + version "5.0.1" + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +nth-check@~1.0.0, nth-check@~1.0.1: + version "1.0.2" + dependencies: + boolbase "~1.0.0" + +"nx@>= 19 <= 21", "nx@>=17.1.2 < 21": + version "20.8.2" + dependencies: + "@napi-rs/wasm-runtime" "0.2.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.2" + "@zkochan/js-yaml" "0.0.7" + axios "^1.8.3" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + front-matter "^4.0.2" + ignore "^5.0.4" + jest-diff "^29.4.1" + jsonc-parser "3.2.0" + lines-and-columns "2.0.3" + minimatch "9.0.3" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + ora "5.3.0" + resolve.exports "2.0.3" + semver "^7.5.3" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yaml "^2.6.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "20.8.2" + "@nx/nx-darwin-x64" "20.8.2" + "@nx/nx-freebsd-x64" "20.8.2" + "@nx/nx-linux-arm-gnueabihf" "20.8.2" + "@nx/nx-linux-arm64-gnu" "20.8.2" + "@nx/nx-linux-arm64-musl" "20.8.2" + "@nx/nx-linux-x64-gnu" "20.8.2" + "@nx/nx-linux-x64-musl" "20.8.2" + "@nx/nx-win32-arm64-msvc" "20.8.2" + "@nx/nx-win32-x64-msvc" "20.8.2" + +nx@17.2.5, nx@v17.2.5: + version "v17.2.5" + dependencies: + "@nrwl/tao" v17.2.5 + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.6" + axios "^1.5.1" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + jest-diff "^29.4.1" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" v17.2.5 + "@nx/nx-darwin-x64" v17.2.5 + "@nx/nx-freebsd-x64" v17.2.5 + "@nx/nx-linux-arm-gnueabihf" v17.2.5 + "@nx/nx-linux-arm64-gnu" v17.2.5 + "@nx/nx-linux-arm64-musl" v17.2.5 + "@nx/nx-linux-x64-gnu" v17.2.5 + "@nx/nx-linux-x64-musl" v17.2.5 + "@nx/nx-win32-arm64-msvc" v17.2.5 + "@nx/nx-win32-x64-msvc" v17.2.5 + +oauth-sign@~0.9.0: + version "0.9.0" + +object-assign@^4.1.1: + version "4.1.1" + +object-hash@^2.0.1: + version "2.2.0" + +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + +object-keys@^1.1.1: + version "1.1.1" + +object.assign@^4.1.2, object.assign@^4.1.7: + version "4.1.7" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.9" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + +object.fromentries@^2.0.2, object.fromentries@^2.0.8: + version "2.0.8" + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.getownpropertydescriptors@^2.1.8: + version "2.1.8" + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + +object.groupby@^1.0.3: + version "1.0.3" + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.1: + version "1.2.1" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +oidc-token-hash@^5.0.1: + version "5.1.1" + +on-finished@2.4.1: + version "2.4.1" + dependencies: + ee-first "1.1.1" + +on-headers@~1.1.0: + version "1.1.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +openid-client@^4.7.4: + version "4.9.1" + dependencies: + aggregate-error "^3.1.0" + got "^11.8.0" + jose "^2.0.5" + lru-cache "^6.0.0" + make-error "^1.3.6" + object-hash "^2.0.1" + oidc-token-hash "^5.0.1" + +optimist@^0.6.1: + version "0.6.1" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.9.3: + version "0.9.4" + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@^5.4.1: + version "5.4.1" + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@5.3.0: + version "5.3.0" + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +own-keys@^1.0.1: + version "1.0.1" + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-cancelable@^2.0.0: + version "2.1.1" + +p-finally@^1.0.0: + version "1.0.0" + +p-limit@^1.1.0: + version "1.3.0" + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + dependencies: + p-limit "^3.0.2" + +p-map-series@2.1.0: + version "2.1.0" + +p-map@^2.1.0: + version "2.1.0" + +p-map@^4.0.0, p-map@4.0.0: + version "4.0.0" + dependencies: + aggregate-error "^3.0.0" + +p-map@^7.0.2: + version "7.0.3" + +p-pipe@3.1.0: + version "3.1.0" + +p-queue@6.6.2: + version "6.6.2" + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@^2.0.0, p-reduce@^2.1.0, p-reduce@2.1.0: + version "2.1.0" + +p-timeout@^3.2.0: + version "3.2.0" + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + +p-try@^2.0.0: + version "2.2.0" + +p-waterfall@2.1.1: + version "2.1.1" + dependencies: + p-reduce "^2.0.0" + +package-json-from-dist@^1.0.0: + version "1.0.1" + +pacote@^18.0.0, pacote@^18.0.6: + version "18.0.6" + dependencies: + "@npmcli/git" "^5.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/package-json" "^5.1.0" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^8.0.0" + cacache "^18.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^17.0.0" + proc-log "^4.0.0" + promise-retry "^2.0.1" + sigstore "^2.2.0" + ssri "^10.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + dependencies: + callsites "^3.0.0" + +parse-conflict-json@^3.0.0: + version "3.0.1" + dependencies: + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + +parse-imports@^2.1.1: + version "2.2.1" + dependencies: + es-module-lexer "^1.5.3" + slashes "^3.0.12" + +parse-json@^4.0.0: + version "4.0.0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-link-header@^1.0.1: + version "1.0.1" + dependencies: + xtend "~4.0.1" + +parse-path@^7.0.0: + version "7.1.0" + dependencies: + protocols "^2.0.0" + +parse-srcset@^1.0.2: + version "1.0.2" + +parse-url@^8.1.0: + version "8.1.0" + dependencies: + parse-path "^7.0.0" + +parseurl@~1.3.3: + version "1.3.3" + +passport-cas2@0.0.12: + version "0.0.12" + dependencies: + cas "https://github.com/joshchan/node-cas" + passport-strategy "^1.0.0" + +passport-local@^1.0.0: + version "1.0.0" + dependencies: + passport-strategy "1.x.x" + +passport-strategy@^1.0.0, passport-strategy@1.x.x: + version "1.0.0" + +passport@^0.4.1: + version "0.4.1" + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +path-exists@^3.0.0: + version "3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + +path-parse@^1.0.7: + version "1.0.7" + +path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@^3.1.0: + version "3.3.0" + +path-to-regexp@^6.2.0: + version "6.3.0" + +path-type@^3.0.0: + version "3.0.0" + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + +pause@0.0.1: + version "0.0.1" + +performance-now@^2.1.0: + version "2.1.0" + +picocolors@^1.1.1: + version "1.1.1" + +picomatch@^2.0.4: + version "2.3.1" + +picomatch@^2.3.1: + version "2.3.1" + +"picomatch@^3 || ^4", picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + +pify@^2.3.0: + version "2.3.0" + +pify@^3.0.0: + version "3.0.0" + +pify@^4.0.1: + version "4.0.1" + +pify@5.0.0: + version "5.0.0" + +pirates@^4.0.7: + version "4.0.7" + +pkg-dir@^4.2.0: + version "4.2.0" + dependencies: + find-up "^4.0.0" + +possible-typed-array-names@^1.0.0: + version "1.1.0" + +postcss-selector-parser@^6.0.10: + version "6.1.2" + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss@^8.3.11: + version "8.5.6" + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prebuild-install@^7.1.1: + version "7.1.3" + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^2.0.0" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + dependencies: + fast-diff "^1.1.2" + +prettier@^3.1.1, prettier@>=3.0.0: + version "3.6.2" + +pretty-format@^29.7.0: + version "29.7.0" + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^30.0.0, pretty-format@30.0.5: + version "30.0.5" + dependencies: + "@jest/schemas" "30.0.5" + ansi-styles "^5.2.0" + react-is "^18.3.1" + +proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: + version "4.2.0" + +proc-log@^5.0.0: + version "5.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + +process@^0.11.10: + version "0.11.10" + +proggy@^2.0.0: + version "2.0.0" + +promise-all-reject-late@^1.0.0: + version "1.0.1" + +promise-call-limit@^3.0.1: + version "3.0.2" + +promise-inflight@^1.0.1: + version "1.0.1" + +promise-limit@^2.7.0: + version "2.7.0" + +promise-polyfill@^1.1.6: + version "1.1.6" + +promise-retry@^2.0.1: + version "2.0.1" + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promise.prototype.finally@^3.1.2: + version "3.1.8" + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + set-function-name "^2.0.1" + +promise@^7.0.1: + version "7.3.1" + dependencies: + asap "~2.0.3" + +promzard@^1.0.0: + version "1.0.2" + dependencies: + read "^3.0.1" + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.2" + +proxy-from-env@^1.1.0: + version "1.1.0" + +pseudomap@^1.0.2: + version "1.0.2" + +psl@^1.1.28: + version "1.15.0" + dependencies: + punycode "^2.3.1" + +pug-attrs@^3.0.0: + version "3.0.0" + dependencies: + constantinople "^4.0.1" + js-stringify "^1.0.2" + pug-runtime "^3.0.0" + +pug-code-gen@^3.0.3: + version "3.0.3" + dependencies: + constantinople "^4.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.2" + pug-attrs "^3.0.0" + pug-error "^2.1.0" + pug-runtime "^3.0.1" + void-elements "^3.1.0" + with "^7.0.0" + +pug-error@^2.0.0, pug-error@^2.1.0: + version "2.1.0" + +pug-filters@^4.0.0: + version "4.0.0" + dependencies: + constantinople "^4.0.1" + jstransformer "1.0.0" + pug-error "^2.0.0" + pug-walk "^2.0.0" + resolve "^1.15.1" + +pug-lexer@^5.0.1: + version "5.0.1" + dependencies: + character-parser "^2.2.0" + is-expression "^4.0.0" + pug-error "^2.0.0" + +pug-linker@^4.0.0: + version "4.0.0" + dependencies: + pug-error "^2.0.0" + pug-walk "^2.0.0" + +pug-load@^3.0.0: + version "3.0.0" + dependencies: + object-assign "^4.1.1" + pug-walk "^2.0.0" + +pug-parser@^6.0.0: + version "6.0.0" + dependencies: + pug-error "^2.0.0" + token-stream "1.0.0" + +pug-runtime@^3.0.0, pug-runtime@^3.0.1: + version "3.0.1" + +pug-strip-comments@^2.0.0: + version "2.0.0" + dependencies: + pug-error "^2.0.0" + +pug-walk@^2.0.0: + version "2.0.0" + +pug@^3.0.2: + version "3.0.3" + dependencies: + pug-code-gen "^3.0.3" + pug-filters "^4.0.0" + pug-lexer "^5.0.1" + pug-linker "^4.0.0" + pug-load "^3.0.0" + pug-parser "^6.0.0" + pug-runtime "^3.0.1" + pug-strip-comments "^2.0.0" + +pump@^3.0.0: + version "3.0.3" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + +pure-rand@^7.0.0: + version "7.0.1" + +qs@^6.11.0, qs@^6.5.1: + version "6.14.0" + dependencies: + side-channel "^1.1.0" + +qs@~6.5.2: + version "6.5.3" + +qs@6.13.0: + version "6.13.0" + dependencies: + side-channel "^1.0.6" + +queue-microtask@^1.2.2: + version "1.2.3" + +quick-lru@^4.0.1: + version "4.0.1" + +quick-lru@^5.1.1: + version "5.1.1" + +random-bytes@~1.0.0: + version "1.0.0" + +range-parser@~1.2.1: + version "1.2.1" + +raw-body@2.5.2: + version "2.5.2" + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +rdf-canonize@^1.0.2: + version "1.2.0" + dependencies: + node-forge "^0.10.0" + semver "^6.3.0" + +rdf-canonize@^2.0.1: + version "2.0.1" + dependencies: + semver "^6.3.0" + setimmediate "^1.0.5" + +rdf-canonize@^3.4.0: + version "3.4.0" + dependencies: + setimmediate "^1.0.5" + +rdf-canonize@^4.0.1: + version "4.0.1" + dependencies: + setimmediate "^1.0.5" + +rdf-data-factory@^1.1.0, rdf-data-factory@^1.1.2: + version "1.1.3" + dependencies: + "@rdfjs/types" "^1.0.0" + +rdf-data-model@^1.0.0: + version "1.0.0" + +rdf-isomorphic@^1.3.0: + version "1.3.1" + dependencies: + "@rdfjs/types" "*" + hash.js "^1.1.7" + rdf-string "^1.6.0" + rdf-terms "^1.7.0" + +rdf-parse@^1.7.0: + version "1.9.1" + dependencies: + "@comunica/actor-http-native" "~1.22.0" + "@comunica/actor-rdf-parse-html" "~1.22.0" + "@comunica/actor-rdf-parse-html-microdata" "~1.22.0" + "@comunica/actor-rdf-parse-html-rdfa" "~1.22.0" + "@comunica/actor-rdf-parse-html-script" "~1.22.0" + "@comunica/actor-rdf-parse-jsonld" "^1.22.0" + "@comunica/actor-rdf-parse-n3" "~1.22.0" + "@comunica/actor-rdf-parse-rdfxml" "~1.22.0" + "@comunica/actor-rdf-parse-xml-rdfa" "~1.22.0" + "@comunica/bus-http" "~1.22.0" + "@comunica/bus-init" "~1.22.0" + "@comunica/bus-rdf-parse" "~1.22.0" + "@comunica/bus-rdf-parse-html" "~1.22.0" + "@comunica/core" "~1.22.0" + "@comunica/mediator-combine-union" "~1.22.0" + "@comunica/mediator-number" "~1.22.0" + "@comunica/mediator-race" "~1.22.0" + "@rdfjs/types" "*" + stream-to-string "^1.2.0" + +rdf-string@^1.6.0: + version "1.6.3" + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + +rdf-terms@^1.7.0: + version "1.11.0" + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + rdf-string "^1.6.0" + +rdfa-streaming-parser@^1.5.0: + version "1.5.0" + dependencies: + "@rdfjs/types" "*" + htmlparser2 "^6.0.0" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.2" + +rdfxml-streaming-parser@^1.5.0: + version "1.5.0" + dependencies: + "@rdfjs/types" "*" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.0" + sax "^1.2.4" + +react-is@^18.0.0, react-is@^18.3.1: + version "18.3.1" + +read-cmd-shim@^4.0.0, read-cmd-shim@4.0.0: + version "4.0.0" + +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@^3.0.1: + version "3.0.1" + dependencies: + mute-stream "^1.0.0" + +readable-stream-node-to-web@^1.0.1: + version "1.0.1" + +readable-stream@^2.3.5: + version "2.3.8" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.0.0: + version "4.7.0" + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-stream@^4.7.0: + version "4.7.0" + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-stream@~1.0.2: + version "1.0.34" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.3.6: + version "2.3.8" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@1.1: + version "1.1.14" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-web-to-node-stream@^3.0.2: + version "3.0.4" + dependencies: + readable-stream "^4.7.0" + +recursive-watch@^1.1.4: + version "1.1.4" + dependencies: + ttl "^1.3.0" + +redent@^3.0.0: + version "3.0.0" + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + +redis-parser@^3.0.0: + version "3.0.0" + dependencies: + redis-errors "^1.0.0" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + +regexp.prototype.flags@^1.5.4: + version "1.5.4" + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +regexpp@^3.0.0: + version "3.2.0" + +regexpu-core@^6.2.0: + version "6.3.1" + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + +regjsgen@^0.8.0: + version "0.8.0" + +regjsparser@^0.12.0: + version "0.12.0" + dependencies: + jsesc "~3.0.2" + +relative-to-absolute-iri@^1.0.0, relative-to-absolute-iri@^1.0.2, relative-to-absolute-iri@^1.0.5: + version "1.0.7" + +request@^2.88.0: + version "2.88.2" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + +resolve-alpn@^1.0.0: + version "1.2.1" + +resolve-cwd@^3.0.0: + version "3.0.0" + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + +resolve-from@^5.0.0, resolve-from@5.0.0: + version "5.0.0" + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + +resolve.exports@2.0.3: + version "2.0.3" + +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.15.1, resolve@^1.22.10, resolve@^1.22.4: + version "1.22.10" + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + +reusify@^1.0.4: + version "1.1.0" + +rimraf@^3.0.2: + version "3.0.2" + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + dependencies: + glob "^9.2.0" + +rsync@^0.6.1: + version "0.6.1" + +run-async@^2.4.0: + version "2.4.1" + +run-parallel@^1.1.9: + version "1.2.0" + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.8.2" + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: + version "1.1.3" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0, safe-buffer@5.2.1: + version "5.2.1" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + +safe-push-apply@^1.0.0: + version "1.0.0" + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: + version "2.1.2" + +sanitize-html@^2.6.1: + version "2.17.0" + dependencies: + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + htmlparser2 "^8.0.0" + is-plain-object "^5.0.0" + parse-srcset "^1.0.2" + postcss "^8.3.11" + +sax@^1.2.4: + version "1.4.1" + +security-context@^4.0.0: + version "4.0.0" + +"semapps-tests@file:/home/sylvain/virtual-assembly/activitypods/semapps/src/middleware/tests": + version "1.1.3" + resolved "file:tests" + dependencies: + "@rdfjs/data-model" "^1.3.4" + "@semapps/activitypub" "1.1.4" + "@semapps/auth" "1.1.4" + "@semapps/core" "1.1.4" + "@semapps/crypto" "1.1.4" + "@semapps/inference" "1.1.4" + "@semapps/jsonld" "1.1.4" + "@semapps/ldp" "1.1.4" + "@semapps/middlewares" "1.1.4" + "@semapps/mime-types" "1.1.4" + "@semapps/ontologies" "1.1.4" + "@semapps/sync" "1.1.4" + "@semapps/triplestore" "1.1.4" + "@semapps/webacl" "1.1.4" + "@semapps/webid" "1.1.4" + dotenv-flow "^3.1.0" + envfile "^7.1.0" + expect-type "^1.2.2" + fs-extra "^9.0.1" + http-link-header "^1.1.1" + ioredis "^4.27.0" + jest "^30.0.5" + lru-cache "10.1.0" + moleculer "^0.14.35" + moleculer-web "^0.10.7" + node-fetch "^2.6.6" + rdf-data-model "^1.0.0" + supertest "^4.0.2" + ts-node "^10.9.2" + url-join "^4.0.1" + wait-for-expect "^3.0.2" + +semver@^5.6.0: + version "5.7.2" + +semver@^6.0.0: + version "6.3.1" + +semver@^6.1.0: + version "6.3.1" + +semver@^6.2.0, semver@^6.3.0: + version "6.3.1" + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2: + version "7.7.2" + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + +semver@7.5.3: + version "7.5.3" + dependencies: + lru-cache "^6.0.0" + +send@0.19.0: + version "0.19.0" + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-error@^5.0.0: + version "5.0.0" + dependencies: + type-fest "^0.8.0" + +serialize-error@^8.1.0: + version "8.1.0" + dependencies: + type-fest "^0.20.2" + +serve-static@^1.14.1: + version "1.16.2" + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +set-blocking@^2.0.0: + version "2.0.0" + +set-function-length@^1.2.2: + version "1.2.2" + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +setimmediate@^1.0.5: + version "1.0.5" + +setprototypeof@1.2.0: + version "1.2.0" + +shallow-clone@^3.0.0: + version "3.0.1" + dependencies: + kind-of "^6.0.2" + +sharp@^0.31.2: + version "0.31.3" + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^5.0.0" + prebuild-install "^7.1.1" + semver "^7.3.8" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + +shebang-command@^1.2.0: + version "1.2.0" + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + +side-channel-list@^1.0.0: + version "1.0.0" + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@3.0.7: + version "3.0.7" + +signal-exit@^4.0.1: + version "4.1.0" + +sigstore@^2.2.0: + version "2.3.1" + dependencies: + "@sigstore/bundle" "^2.3.2" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.2" + "@sigstore/sign" "^2.3.2" + "@sigstore/tuf" "^2.3.4" + "@sigstore/verify" "^1.2.1" + +simple-concat@^1.0.0: + version "1.0.1" + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.4" + dependencies: + is-arrayish "^0.3.1" + +slash@^3.0.0, slash@3.0.0: + version "3.0.0" + +slashes@^3.0.12: + version "3.0.12" + +slick@^1.12.2: + version "1.12.2" + +smart-buffer@^4.2.0: + version "4.2.0" + +socks-proxy-agent@^8.0.3: + version "8.0.5" + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.7" + dependencies: + ip-address "^10.0.1" + smart-buffer "^4.2.0" + +sodium-native@^3.2.0: + version "3.4.1" + dependencies: + node-gyp-build "^4.3.0" + +sort-keys@^2.0.0: + version "2.0.0" + dependencies: + is-plain-obj "^1.0.0" + +sorted-array-functions@^1.3.0: + version "1.3.0" + +source-map-js@^1.2.1: + version "1.2.1" + +source-map-support@0.5.13: + version "0.5.13" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + +sparqlalgebrajs@^3.0.1: + version "3.0.3" + dependencies: + "@rdfjs/types" "*" + "@types/sparqljs" "^3.1.2" + fast-deep-equal "^3.1.3" + minimist "^1.2.5" + rdf-data-factory "^1.1.0" + rdf-isomorphic "^1.3.0" + rdf-string "^1.6.0" + sparqljs "^3.4.2" + +sparqljs@^3.4.2, sparqljs@^3.5.2: + version "3.7.3" + dependencies: + rdf-data-factory "^1.1.2" + +sparqljson-parse@^1.5.1: + version "1.7.0" + dependencies: + "@rdfjs/types" "*" + "@types/node" "^13.1.0" + JSONStream "^1.3.3" + rdf-data-factory "^1.1.0" + +spdx-correct@^3.0.0: + version "3.2.0" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + +spdx-expression-parse@^3.0.0: + version "3.0.1" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-expression-parse@^4.0.0: + version "4.0.0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.22" + +speakingurl@^14.0.1: + version "14.0.1" + +split@^1.0.1: + version "1.0.1" + dependencies: + through "2" + +split2@^3.2.2: + version "3.2.2" + dependencies: + readable-stream "^3.0.0" + +sprintf-js@^1.1.1: + version "1.1.3" + +sprintf-js@~1.0.2: + version "1.0.3" + +ssh2-sftp-client@^7.2.1: + version "7.2.3" + dependencies: + concat-stream "^2.0.0" + promise-retry "^2.0.1" + ssh2 "^1.8.0" + +ssh2@^1.8.0: + version "1.17.0" + dependencies: + asn1 "^0.2.6" + bcrypt-pbkdf "^1.0.2" + optionalDependencies: + cpu-features "~0.0.10" + nan "^2.23.0" + +sshpk@^1.18.0, sshpk@^1.7.0: + version "1.18.0" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^10.0.0, ssri@^10.0.6: + version "10.0.6" + dependencies: + minipass "^7.0.3" + +ssri@^12.0.0: + version "12.0.0" + dependencies: + minipass "^7.0.3" + +stable-hash@^0.0.5: + version "0.0.5" + +stack-utils@^2.0.6: + version "2.0.6" + dependencies: + escape-string-regexp "^2.0.0" + +standard-as-callback@^2.1.0: + version "2.1.0" + +statuses@2.0.1: + version "2.0.1" + +stop-iteration-iterator@^1.1.0: + version "1.1.0" + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + +stream-to-string@^1.2.0: + version "1.2.1" + dependencies: + promise-polyfill "^1.1.6" + +streamify-string@^1.0.1: + version "1.0.1" + +streamsearch@0.1.2: + version "0.1.2" + +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + +string_decoder@~1.1.1: + version "1.1.1" + dependencies: + safe-buffer "~5.1.0" + +string-length@^4.0.2: + version "4.0.2" + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-template@^1.0.0: + version "1.0.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.10: + version "1.2.10" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.2" + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + +strip-bom@^4.0.0: + version "4.0.0" + +strip-final-newline@^2.0.0: + version "2.0.0" + +strip-indent@^3.0.0: + version "3.0.0" + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + +strip-json-comments@~2.0.1: + version "2.0.1" + +strong-log-transformer@^2.1.0: + version "2.1.0" + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +superagent@^3.8.3: + version "3.8.3" + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supertest@^4.0.2: + version "4.0.2" + dependencies: + methods "^1.1.2" + superagent "^3.8.3" + +supports-color@^5.3.0: + version "5.5.0" + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + +synckit@^0.11.7, synckit@^0.11.8: + version "0.11.11" + dependencies: + "@pkgr/core" "^0.2.9" + +synckit@^0.9.1: + version "0.9.3" + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.4" + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4, tar-stream@~2.2.0: + version "2.2.0" + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.1.11, tar@^6.2.1, tar@6.2.1: + version "6.2.1" + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tar@^7.4.3: + version "7.4.3" + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + +temp-dir@1.0.0: + version "1.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-decoding@^1.0.0: + version "1.0.0" + +text-extensions@^1.0.0: + version "1.9.0" + +text-table@^0.2.0: + version "0.2.0" + +through@^2.3.4, through@^2.3.6, "through@>=2.2.7 <3", through@2, through@2.3.8: + version "2.3.8" + +through2@^2.0.0: + version "2.0.5" + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +tinyglobby@^0.2.12, tinyglobby@^0.2.13: + version "0.2.15" + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +tinyglobby@0.2.12: + version "0.2.12" + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + +tmp@~0.2.1: + version "0.2.5" + +tmpl@1.0.5: + version "1.0.5" + +to-regex-range@^5.0.1: + version "5.0.1" + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + +token-stream@1.0.0: + version "1.0.0" + +tough-cookie@~2.5.0: + version "2.5.0" + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + +treeverse@^3.0.0: + version "3.0.0" + +trim-newlines@^3.0.0: + version "3.0.1" + +ts-api-utils@^1.3.0: + version "1.4.3" + +ts-node@^10.9.2, ts-node@>=9.0.0: + version "10.9.2" + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8.1: + version "2.8.1" + +tsutils@^3.21.0: + version "3.21.0" + dependencies: + tslib "^1.8.1" + +ttl@^1.3.0: + version "1.3.1" + +tuf-js@^2.2.1: + version "2.2.1" + dependencies: + "@tufjs/models" "2.0.1" + debug "^4.3.4" + make-fetch-happen "^13.0.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + +type-fest@^0.18.0: + version "0.18.1" + +type-fest@^0.20.2: + version "0.20.2" + +type-fest@^0.21.3: + version "0.21.3" + +type-fest@^0.4.1: + version "0.4.1" + +type-fest@^0.6.0: + version "0.6.0" + +type-fest@^0.8.0: + version "0.8.1" + +type-fest@^0.8.1: + version "0.8.1" + +type-is@~1.6.18: + version "1.6.18" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.3: + version "1.0.3" + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typedarray@^0.0.6: + version "0.0.6" + +typescript@^5.9.2, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3 < 6", typescript@>=4.2.0, typescript@>=4.9.5: + version "5.9.2" + +uglify-js@^3.1.4: + version "3.19.3" + +uid-safe@~2.1.5: + version "2.1.5" + dependencies: + random-bytes "~1.0.0" + +unbox-primitive@^1.1.0: + version "1.1.0" + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +underscore.string@^3.2.3: + version "3.3.6" + dependencies: + sprintf-js "^1.1.1" + util-deprecate "^1.0.2" + +underscore@^1.8.3: + version "1.13.7" + +undici-types@~5.26.4: + version "5.26.5" + +undici-types@~7.12.0: + version "7.12.0" + +undici@^5.21.2: + version "5.29.0" + dependencies: + "@fastify/busboy" "^2.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.2.0" + +unique-filename@^3.0.0: + version "3.0.0" + dependencies: + unique-slug "^4.0.0" + +unique-filename@^4.0.0: + version "4.0.0" + dependencies: + unique-slug "^5.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^5.0.0: + version "5.0.0" + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.1" + +universalify@^0.1.0: + version "0.1.2" + +universalify@^2.0.0: + version "2.0.1" + +unpipe@1.0.0: + version "1.0.0" + +unrs-resolver@^1.6.2, unrs-resolver@^1.7.11: + version "1.11.1" + dependencies: + napi-postinstall "^0.3.0" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.11.1" + "@unrs/resolver-binding-android-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-x64" "1.11.1" + "@unrs/resolver-binding-freebsd-x64" "1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-arm64-musl" "1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl" "1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-musl" "1.11.1" + "@unrs/resolver-binding-wasm32-wasi" "1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc" "1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" + "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" + +upath@2.0.1: + version "2.0.1" + +update-browserslist-db@^1.1.3: + version "1.1.3" + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + dependencies: + punycode "^2.1.0" + +url-join@^4.0.1: + version "4.0.1" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + +util.promisify@^1.0.1: + version "1.1.3" + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + for-each "^0.3.3" + get-intrinsic "^1.2.6" + has-proto "^1.2.0" + has-symbols "^1.1.0" + object.getownpropertydescriptors "^2.1.8" + safe-array-concat "^1.1.3" + +util@^0.12.4: + version "0.12.5" + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +uuid@^10.0.0: + version "10.0.0" + +uuid@^3.3.2: + version "3.4.0" + +uuid@^8.3.0: + version "8.3.2" + +uuid@^9.0.1: + version "9.0.1" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + +v8-to-istanbul@^9.0.1: + version "9.3.0" + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +valid-data-url@^2.0.0: + version "2.0.0" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4, validate-npm-package-license@3.0.4: + version "3.0.4" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^5.0.0, validate-npm-package-name@5.0.1: + version "5.0.1" + +vc-js@^0.6.4: + version "0.6.4" + dependencies: + commander "^2.20.3" + credentials-context "^1.0.0" + debug "^4.1.1" + fs-extra "^8.1.0" + get-stdin "^7.0.0" + jsonld "^2.0.2" + jsonld-signatures "^5.0.0" + supports-color "^7.1.0" + +verror@1.10.0: + version "1.10.0" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +void-elements@^3.1.0: + version "3.1.0" + +wait-for-expect@^3.0.2: + version "3.0.2" + +walk-up-path@^3.0.1: + version "3.0.1" + +walker@^1.0.8: + version "1.0.8" + dependencies: + makeerror "1.0.12" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + dependencies: + defaults "^1.0.3" + +web-resource-inliner@^4.2.1: + version "4.3.4" + dependencies: + async "^3.1.0" + chalk "^2.4.2" + datauri "^2.0.0" + htmlparser2 "^4.0.0" + lodash.unescape "^4.0.1" + request "^2.88.0" + safer-buffer "^2.1.2" + valid-data-url "^2.0.0" + xtend "^4.0.2" + +web-streams-node@^0.4.0: + version "0.4.0" + dependencies: + is-stream "^1.1.0" + readable-stream-node-to-web "^1.0.1" + web-streams-ponyfill "^1.4.1" + +web-streams-polyfill@^3.0.3, web-streams-polyfill@>=3.2.1: + version "3.3.3" + +web-streams-ponyfill@^1.4.1: + version "1.4.2" + +webidl-conversions@^3.0.0: + version "3.0.1" + +whatwg-url@^5.0.0: + version "5.0.0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: + version "1.1.19" + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^1.2.9: + version "1.3.1" + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + dependencies: + isexe "^2.0.0" + +which@^4.0.0: + version "4.0.0" + dependencies: + isexe "^3.1.1" + +which@^5.0.0: + version "5.0.0" + dependencies: + isexe "^3.1.1" + +wide-align@^1.1.2, wide-align@1.1.5: + version "1.1.5" + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +with@^7.0.0: + version "7.0.2" + dependencies: + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + assert-never "^1.2.1" + babel-walk "3.0.0-canary-5" + +word-wrap@^1.2.5: + version "1.2.5" + +wordwrap@^1.0.0: + version "1.0.0" + +wordwrap@~0.0.2: + version "0.0.3" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + version "6.2.0" + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + +write-file-atomic@^2.4.2: + version "2.4.3" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^5.0.0, write-file-atomic@^5.0.1, write-file-atomic@5.0.1: + version "5.0.1" + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +write-json-file@^3.2.0: + version "3.2.0" + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@4.0.0: + version "4.0.0" + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +xmldom@0.1.19: + version "0.1.19" + +xtend@^4.0.2, xtend@~4.0.1: + version "4.0.2" + +y18n@^5.0.5: + version "5.0.8" + +yallist@^2.1.2: + version "2.1.2" + +yallist@^3.0.2: + version "3.1.1" + +yallist@^4.0.0: + version "4.0.0" + +yallist@^5.0.0: + version "5.0.0" + +yaml@^2.6.0: + version "2.8.1" + +yargs-parser@^20.2.2: + version "20.2.9" + +yargs-parser@^20.2.3: + version "20.2.9" + +yargs-parser@^21.1.1, yargs-parser@21.1.1: + version "21.1.1" + +yargs@^16.2.0: + version "16.2.0" + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.6.2, yargs@^17.7.2, yargs@17.7.2: + version "17.7.2" + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" From aa5bd87e3d722b517bf26662094d9dfd7af9b2c9 Mon Sep 17 00:00:00 2001 From: SlyRock Date: Tue, 20 Jan 2026 20:13:42 +0100 Subject: [PATCH 156/165] Update .env and docker-compose configurations for ng_tests service to include new Nextgraph initialization parameters and adjust port mappings for improved functionality. --- src/middleware/tests/.env | 7 +++++++ src/middleware/tests/docker-compose.yaml | 17 ++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/middleware/tests/.env b/src/middleware/tests/.env index e228321f2..54a2f9803 100644 --- a/src/middleware/tests/.env +++ b/src/middleware/tests/.env @@ -14,3 +14,10 @@ SEMAPPS_NO_ACL_SPARQL_ENDPOINT=http://localhost:3050/ SEMAPPS_NO_ACL_MAIN_DATASET=testData SEMAPPS_NO_ACL_JENA_USER=admin SEMAPPS_NO_ACL_JENA_PASSWORD=admin + +# Nextgraph data, automatically filled at init time (first run of the container or after removal of ng data folder) +NG_ADMIN_USER_KEY=NYPJozg2ZVrj3LRlgo6ifBWEDSSEya74mzTGoWf-JMIA +NG_CLIENT_PEER_KEY=4zNHpDxZYbyAOtVJlmLW9rxIEV9iBm0FKl6vJgk2yIAA +NG_PEER_ID=2AeCt2D8kOQ7lgjZA-ZkURr1DNLfsdbk-3tneUWls0sA +NG_MAPPINGS_NURI=did:ng:o:UIuwQA7BNt_t28BzexKvIaL3WIMldsLyOv-yKoF1Wv4A:v:yTbNwfmjKI7llV2P_2FBE5BEW6SXrnj1w-qtZdToqKIA +NG_MAPPINGS_USER_ID=RhP_t6eW11eXxeJiQrTf5vPvUH40Fk9IUoOufqyA8icA \ No newline at end of file diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 8c72d01be..4c0900288 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -2,22 +2,17 @@ services: ng_tests: image: nextgraph-rs:ubuntu container_name: ng_tests - # command: ["/nextgraph-rs/target/release/ngd", "-v", "-p", "eth0:14400", "-l", "14400"] - #command: ["/bin/bash"] - stdin_open: true - tty: true restart: always volumes: - ./data/ng:/nextgraph-rs/.ng:z - - ../../../..:/stack-root - # network_mode: "host" + - .:/stack-root # In order to be able to access the .env file during the initialization of nextgraph ports: - - '14400:14400/tcp' + - '1440:1440/tcp' expose: - - '14400/tcp' - environment: - ENV_FILE_NAME: .env.test-ng - ENV_PATH: ngScripts + - '1440/tcp' + #environment: + #ENV_FILE_NAME: .env #The name of the .env file that will be filled during the initialization of nextgraph + #ENV_PATH: #The path to the .env file relative to the stack-root mounted volume, if not set, the .env file will be looked for (or created) in the stack-root folder fuseki_tests: image: stain/jena-fuseki:5.1.0 container_name: fuseki_tests From 501e1410f73807909f3075992c7f9ba1e8393364 Mon Sep 17 00:00:00 2001 From: SlyRock Date: Tue, 20 Jan 2026 21:08:57 +0100 Subject: [PATCH 157/165] Refactor .env and docker-compose configurations for ng_tests service t --- src/middleware/tests/.env | 10 +++++----- src/middleware/tests/docker-compose.yaml | 11 ++++------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/middleware/tests/.env b/src/middleware/tests/.env index b74756d3e..795ded875 100644 --- a/src/middleware/tests/.env +++ b/src/middleware/tests/.env @@ -10,8 +10,8 @@ SEMAPPS_JENA_USER=admin SEMAPPS_JENA_PASSWORD=admin # Nextgraph data, automatically filled at init time (first run of the container or after removal of ng data folder) -NG_ADMIN_USER_KEY=NYPJozg2ZVrj3LRlgo6ifBWEDSSEya74mzTGoWf-JMIA -NG_CLIENT_PEER_KEY=4zNHpDxZYbyAOtVJlmLW9rxIEV9iBm0FKl6vJgk2yIAA -NG_PEER_ID=2AeCt2D8kOQ7lgjZA-ZkURr1DNLfsdbk-3tneUWls0sA -NG_MAPPINGS_NURI=did:ng:o:UIuwQA7BNt_t28BzexKvIaL3WIMldsLyOv-yKoF1Wv4A:v:yTbNwfmjKI7llV2P_2FBE5BEW6SXrnj1w-qtZdToqKIA -NG_MAPPINGS_USER_ID=RhP_t6eW11eXxeJiQrTf5vPvUH40Fk9IUoOufqyA8icA \ No newline at end of file +NG_ADMIN_USER_KEY= +NG_CLIENT_PEER_KEY= +NG_PEER_ID= +NG_MAPPINGS_NURI= +NG_MAPPINGS_USER_ID= \ No newline at end of file diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 4c0900288..5bdcc8f85 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -5,14 +5,11 @@ services: restart: always volumes: - ./data/ng:/nextgraph-rs/.ng:z - - .:/stack-root # In order to be able to access the .env file during the initialization of nextgraph + - .env:/stack-root/.env:z # In order to be able to update the .env file during the initialization of nextgraph ports: - - '1440:1440/tcp' + - '1440:1440' expose: - - '1440/tcp' - #environment: - #ENV_FILE_NAME: .env #The name of the .env file that will be filled during the initialization of nextgraph - #ENV_PATH: #The path to the .env file relative to the stack-root mounted volume, if not set, the .env file will be looked for (or created) in the stack-root folder + - '1440' fuseki_tests: image: stain/jena-fuseki:5.1.0 container_name: fuseki_tests @@ -35,7 +32,7 @@ services: - '6379:6379' volumes: - ./data/redis:/data:z - command: [ 'redis-server', '--appendonly', 'yes' ] + command: ['redis-server', '--appendonly', 'yes'] arena: image: activitypods/arena From 2cd22669cc36240069f6ffe544e26421c4e1b48f Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 21 Jan 2026 16:44:27 +0100 Subject: [PATCH 158/165] Use NextGraph env variables correctly --- src/middleware/packages/ldp/package.json | 2 +- .../triplestore/adapters/nextgraph.ts | 38 +++++++++---------- .../packages/triplestore/package.json | 2 +- src/middleware/tests/config.ts | 6 +++ src/middleware/tests/docker-compose.yaml | 3 +- src/middleware/tests/utils.ts | 14 +++---- 6 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index 17a3d9c34..ade70cf9d 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -20,7 +20,7 @@ "mime-types": "^2.1.35", "moleculer-db": "^0.8.16", "moleculer-web": "^0.10.0-beta1", - "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/ng-sdk-js/pkg-node", + "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/sdk/js/lib-wasm/pkg-node", "node-fetch": "^2.6.6", "path-to-regexp": "^6.2.0", "rdf-parse": "^1.7.0", diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index dd40bc72a..96ef6bb88 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -6,11 +6,11 @@ import { AdapterInterface, BaseAdapter } from './base.ts'; type NextGraphAdapterSettings = { serverPeerId: string; // The server peer id, is provided in the console of the NextGraph server - adminUserKey: string; // The admin user key, can be retrieved using the GUI of the NextGraph server - clientPeerKey: string; // The client peer key, can be generated usinf the CLI of the NextGraph server ex with cargo : cargo run --bin ngcli gen-key + adminUserKey: string; // The admin user key, can be retrieved using NextGraph CLI (add-user) + clientPeerKey: string; // The client peer key, can be generated using NextGraph CLI ex with cargo : cargo run --bin ngcli gen-key serverAddr: string; // The server address, can be retrieved using the console of the NextGraph server - adminUserId: string; // The admin user id, must be saved when first creating the user - mappingsNuri: string; // The mappings nuri, must be saved when first creating the document + mappingsUserId: string; // The mappings user id, must be saved when first creating the user + mappingsNuri: string; // The mappings document nuri, must be saved when first creating the document backupsPath?: string; // Path to store backups }; @@ -33,9 +33,9 @@ const openSessions: { [dataset: string]: Session } = {}; export default class NextGraphAdapter extends BaseAdapter implements AdapterInterface { name = 'nextgraph'; - private settings: { adminUserId: string; mappingsNuri: string; backupsPath?: string }; + private settings: { mappingsUserId: string; mappingsNuri: string; backupsPath?: string }; - private adminSessionid: string = ''; + private mappingsSessionId: string = ''; private sdkConfig: { server_peer_id: string; admin_user_key: string; client_peer_key: string; server_addr: string }; @@ -47,7 +47,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte if (!settings.adminUserKey) throw new Error('Admin user key is required'); if (!settings.clientPeerKey) throw new Error('Client peer key is required'); if (!settings.serverAddr) throw new Error('Server address is required'); - if (!settings.adminUserId) throw new Error('Admin user id is required'); + if (!settings.mappingsUserId) throw new Error('Admin user id is required'); if (!settings.mappingsNuri) throw new Error('Mappings nuri is required'); // Create the SDK config, used to initialize the adapter and to create datasets (users) @@ -59,7 +59,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte }; this.settings = { - adminUserId: settings.adminUserId, + mappingsUserId: settings.mappingsUserId, mappingsNuri: settings.mappingsNuri, backupsPath: settings.backupsPath }; @@ -76,11 +76,11 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte // Initialize the nextgraph backend in headless mode await ng.init_headless(this.sdkConfig); - // Start a session for the admin user (used to manage datasets) - const session = await ng.session_headless_start(this.settings.adminUserId); - this.adminSessionid = session.session_id; + // Start a session for the mappings user (used to manage datasets) + const session = await ng.session_headless_start(this.settings.mappingsUserId); + this.mappingsSessionId = session.session_id; - this.getLogger().info(`NextGraph adapter initialized. Admin session started with id: ${this.adminSessionid}`); + this.getLogger().info(`NextGraph adapter initialized. Admin session started with id: ${this.mappingsSessionId}`); } catch (error) { throw new Error(`NextGraph adapter initialization failed: ${error}`); } @@ -149,7 +149,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte const mappingUri = `http://semapps.org/mappings/${encodeURIComponent(dataset)}`; await ng.sparql_update( - this.adminSessionid, + this.mappingsSessionId, ` PREFIX semapps: INSERT DATA { @@ -182,7 +182,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte async listDatasets() { try { const response = await ng.sparql_query( - this.adminSessionid, + this.mappingsSessionId, ` PREFIX semapps: SELECT ?datasetName WHERE { @@ -210,7 +210,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte // Delete the mapping from the graph await ng.sparql_update( - this.adminSessionid, + this.mappingsSessionId, ` PREFIX semapps: DELETE WHERE { @@ -260,7 +260,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte fs.writeFileSync(pathJoin(this.settings.backupsPath, `${dataset}.nq`), dumpWithTrailingDots); - // const mappingsDump = await ng.rdf_dump(this.adminSessionid); + // const mappingsDump = await ng.rdf_dump(this.mappingsSessionId); // fs.writeFileSync(pathJoin(this.settings.backupsPath, 'mappings.nq'), mappingsDump); } catch (error) { throw new Error(`NextGraph backupDataset failed: ${error}\nDataset: ${dataset}`); @@ -275,7 +275,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte private async getDatasetMetadata(dataset: string): Promise { try { const response = await ng.sparql_query( - this.adminSessionid, + this.mappingsSessionId, ` PREFIX semapps: SELECT ?mappingUri ?userId ?wacGraph WHERE { @@ -353,7 +353,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte private async getUserIdForDataset(dataset: string): Promise { try { const response = await ng.sparql_query( - this.adminSessionid, + this.mappingsSessionId, ` PREFIX semapps: SELECT ?userId WHERE { @@ -382,7 +382,7 @@ export default class NextGraphAdapter extends BaseAdapter implements AdapterInte } // We can't close the admin session because it is started in init, which is called only on creation - // if (this.adminSessionid) await ng.session_headless_stop(this.adminSessionid, true); + // if (this.mappingsSessionId) await ng.session_headless_stop(this.mappingsSessionId, true); this.getLogger().info('NextGraph adapter cleaned up'); } catch (error) { diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index fc99c6a2b..bf19b8867 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -9,7 +9,7 @@ "@semapps/mime-types": "1.2.0", "jsonld": "^3.3.2", "negotiator": "^0.6.2", - "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/ng-sdk-js/pkg-node", + "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/sdk/js/lib-wasm/pkg-node", "node-fetch": "^2.6.6", "moleculer-db": "^0.8.16", "sparqljs": "^3.5.2", diff --git a/src/middleware/tests/config.ts b/src/middleware/tests/config.ts index 559ac970d..c9723bc06 100644 --- a/src/middleware/tests/config.ts +++ b/src/middleware/tests/config.ts @@ -12,3 +12,9 @@ export const JENA_USER = process.env.SEMAPPS_JENA_USER; export const JENA_PASSWORD = process.env.SEMAPPS_JENA_PASSWORD; export const ACTIVATE_CACHE = process.env.SEMAPPS_ACTIVATE_CACHE === 'true'; export const FUSEKI_BASE = process.env.FUSEKI_BASE; + +export const NG_ADMIN_USER_KEY = process.env.NG_ADMIN_USER_KEY; +export const NG_CLIENT_PEER_KEY = process.env.NG_CLIENT_PEER_KEY; +export const NG_PEER_ID = process.env.NG_PEER_ID; +export const NG_MAPPINGS_NURI = process.env.NG_MAPPINGS_NURI; +export const NG_MAPPINGS_USER_ID = process.env.NG_MAPPINGS_USER_ID; diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 5bdcc8f85..dcea1658b 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -5,11 +5,12 @@ services: restart: always volumes: - ./data/ng:/nextgraph-rs/.ng:z - - .env:/stack-root/.env:z # In order to be able to update the .env file during the initialization of nextgraph + - .env.local:/stack-root/.env:z # Update the env variables during nextgraph initialization ports: - '1440:1440' expose: - '1440' + fuseki_tests: image: stain/jena-fuseki:5.1.0 container_name: fuseki_tests diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 7f0b2f4d8..106599aca 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -13,16 +13,14 @@ type FetchOptions = Omit & { export const getTripleStoreAdapter = (triplestore: string) => { if (triplestore === 'ng') { - // TODO : Environmentalize the nextgraph settings. return new NextGraphAdapter({ - adminUserId: 'Ez4plcHN27PQneZoAitrS4gfkaq0-XNqGynvODTOOSoA', - mappingsNuri: - 'did:ng:o:n2fJ7TM5CkpSxIQLZV57CFt3YrGBY9Y8hk8cAnZrIe0A:v:CT179cL3HgJg1OkYoE79iPNQ9vtcMcAZUHQq5RXUFeQA', - serverPeerId: 'QlJkY0KELV4W1aVZehn6Qvx5eauRkICSJbdYqIbFHPEA', - adminUserKey: 'bE0rIy0V8YQAEfXhqYas-erDrddazpTjhsoJHVqvSDIA', - clientPeerKey: 'HV_9Rh-yDpEqsvtwYUjcxqIARUnuP8g2JA4hEH1Nh7QA', + mappingsUserId: CONFIG.NG_MAPPINGS_USER_ID!, + mappingsNuri: CONFIG.NG_MAPPINGS_NURI!, + serverPeerId: CONFIG.NG_PEER_ID!, + adminUserKey: CONFIG.NG_ADMIN_USER_KEY!, + clientPeerKey: CONFIG.NG_CLIENT_PEER_KEY!, serverAddr: '127.0.0.1:14400', - backupsPath: './data/nextgraph' + backupsPath: './data/ng/backups' }); } else if (triplestore === 'fuseki') { return new FusekiAdapter({ From 49a12aa6a84d73705e8e8e878dd7fe1120976f56 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Wed, 21 Jan 2026 20:24:12 +0100 Subject: [PATCH 159/165] Fix tests --- src/middleware/tests/ldp/api.test.ts | 2 +- .../tests/triplestore/triplestore.test.ts | 13 ++++++------- src/middleware/tests/utils.ts | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/middleware/tests/ldp/api.test.ts b/src/middleware/tests/ldp/api.test.ts index fa1c1e3f1..f462ebba9 100644 --- a/src/middleware/tests/ldp/api.test.ts +++ b/src/middleware/tests/ldp/api.test.ts @@ -23,7 +23,7 @@ describe.each(['ng', 'fuseki'])('LDP handling through API with triplestore %s', }); let containerUri: string; - let resourceUri: any; + let resourceUri: string; test('Create resource', async () => { containerUri = await alice.getContainerUri('pair:Project'); diff --git a/src/middleware/tests/triplestore/triplestore.test.ts b/src/middleware/tests/triplestore/triplestore.test.ts index 7adaa61d7..23e086134 100644 --- a/src/middleware/tests/triplestore/triplestore.test.ts +++ b/src/middleware/tests/triplestore/triplestore.test.ts @@ -1,5 +1,6 @@ import { ServiceBroker } from 'moleculer'; import initialize from './initialize.ts'; +import { clearAllDatasets, backupAllDatasets } from '../utils.ts'; jest.setTimeout(30000); @@ -9,6 +10,7 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor beforeAll(async () => { broker = await initialize(triplestore); + await clearAllDatasets(broker); await broker.waitForServices(['triplestore']); @@ -20,19 +22,16 @@ describe.each(['fuseki', 'ng'])('Triplestore service tests with %s', (triplestor }); afterAll(async () => { - if (broker) await broker.stop(); + if (broker) { + if (triplestore === 'ng') await backupAllDatasets(broker); // Allow to see what was persisted + await broker.stop(); + } }); describe('Dataset subservice', () => { const testDatasetForSubServiceTests = 'test_dataset_for_sub_service_tests'; test('Create a new dataset', async () => { - // Delete if exists - try { - await broker.call('triplestore.dataset.delete', { dataset: testDatasetForSubServiceTests }); - } catch (error) { - // Intentionally ignore errors if dataset does not exist - } await broker.call('triplestore.dataset.create', { dataset: testDatasetForSubServiceTests }); await expect( broker.call('triplestore.dataset.exist', { dataset: testDatasetForSubServiceTests }) diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 106599aca..2d2cc914f 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -19,8 +19,8 @@ export const getTripleStoreAdapter = (triplestore: string) => { serverPeerId: CONFIG.NG_PEER_ID!, adminUserKey: CONFIG.NG_ADMIN_USER_KEY!, clientPeerKey: CONFIG.NG_CLIENT_PEER_KEY!, - serverAddr: '127.0.0.1:14400', - backupsPath: './data/ng/backups' + serverAddr: '172.25.0.2:1440', + backupsPath: './data/ng-backups' }); } else if (triplestore === 'fuseki') { return new FusekiAdapter({ From 1e0f3222dee318b0e38f87cdb5eddc4bd1c3b0e5 Mon Sep 17 00:00:00 2001 From: SlyRock Date: Thu, 22 Jan 2026 11:10:26 +0100 Subject: [PATCH 160/165] Docker image extension for fuseki 5, in order to fix the permissions issue --- src/jena/fuseki5-docker/Dockerfile | 17 ++++ src/jena/fuseki5-docker/README.md | 88 +++++++++++++++++++ .../docker-entrypoint-wrapper.sh | 32 +++++++ 3 files changed, 137 insertions(+) create mode 100644 src/jena/fuseki5-docker/Dockerfile create mode 100644 src/jena/fuseki5-docker/README.md create mode 100644 src/jena/fuseki5-docker/docker-entrypoint-wrapper.sh diff --git a/src/jena/fuseki5-docker/Dockerfile b/src/jena/fuseki5-docker/Dockerfile new file mode 100644 index 000000000..7038ad3fe --- /dev/null +++ b/src/jena/fuseki5-docker/Dockerfile @@ -0,0 +1,17 @@ +FROM stain/jena-fuseki:5.1.0 + +# Switch to root first (base image ends with USER fuseki) +USER root + +# Install su-exec for switching users (Alpine package) +RUN apk add --no-cache su-exec + +# Copy the wrapper entrypoint +COPY docker-entrypoint-wrapper.sh /docker-entrypoint-wrapper.sh +RUN chmod +x /docker-entrypoint-wrapper.sh + +# Use our wrapper as the entrypoint (it will switch to fuseki user) +ENTRYPOINT ["/docker-entrypoint-wrapper.sh"] + +# Preserve the CMD from the base image (required when overriding ENTRYPOINT) +CMD ["/jena-fuseki/fuseki-server"] diff --git a/src/jena/fuseki5-docker/README.md b/src/jena/fuseki5-docker/README.md new file mode 100644 index 000000000..fd3201eff --- /dev/null +++ b/src/jena/fuseki5-docker/README.md @@ -0,0 +1,88 @@ +# Fuseki 5 fixed docker image + +This is an extension of `stain/jena-fuseki:5.1.0` docker image for Fuseki 5 + +## Why the fix ? + +When creating a service with docker compose and mounting a volume for Fuseki data, there is a permissions issue. + +### The issue + +```yaml + fuseki_tests: + image: stain/jena-fuseki:5.1.0 + container_name: fuseki_tests + restart: always + volumes: + - ./data/fuseki_tests:/fuseki:z + ports: + - '3040:3030' + expose: + - '3040' + environment: + ADMIN_PASSWORD: 'admin' +``` +``` +sylvain@UP222:~/virtual-assembly/activitypods/semapps/src/middleware/tests$ docker compose up -d +[+] Running 6/6 + ✔ Network middleware_tests_network Created 0.0s + ✔ Container redis_middleware_tests Started 0.8s + ✔ Container ng_tests Started 0.8s + ✔ Container fuseki_tests Started 0.8s + ✔ Container arena_tests Started 1.5s + ✔ Container tripleadmin Started 1.5s +sylvain@UP222:~/virtual-assembly/activitypods/semapps/src/middleware/tests$ docker logs fuseki_tests +################################### +Initializing Apache Jena Fuseki + +cp: cannot create regular file '/fuseki/shiro.ini': Permission denied +``` + +### Temp fix during development + +1. That issue could to be fixed with a `chmod 777` from the host computer then relaunching the container. + +2. It could also be fixed by forcing the container to run as root : +```yaml + fuseki_tests: + image: stain/jena-fuseki:5.1.0 + container_name: fuseki_tests + restart: always + volumes: + - ./data/fuseki_tests:/fuseki:z + ports: + - '3040:3030' + expose: + - '3040' + environment: + ADMIN_PASSWORD: 'admin' + user: "0:0" # run as root +``` + +### Unsatisfying fixes +1. Solution one : implied a manual step, deterrent for devX +2. Solution two : could lead to security or technical issues as the original image wasn't designed to run as root + +## The fix +We extended the docker image to start as root and created an entry point that fixes the permissions on the mounted volume before running the original entrypoint as the fuseki user from the image. + +### Build and publish the image +``` +docker build -t semapps/fuseki5-permissions-fix -f Dockerfile . +``` +### Use the new image + +```yaml + fuseki_tests: + image: semapps/fuseki5-permissions-fix + container_name: fuseki_tests + restart: always + volumes: + - ./data/fuseki_tests:/fuseki:z + ports: + - '3040:3030' + expose: + - '3040' + environment: + ADMIN_PASSWORD: 'admin' +``` \ No newline at end of file diff --git a/src/jena/fuseki5-docker/docker-entrypoint-wrapper.sh b/src/jena/fuseki5-docker/docker-entrypoint-wrapper.sh new file mode 100644 index 000000000..6f0c24113 --- /dev/null +++ b/src/jena/fuseki5-docker/docker-entrypoint-wrapper.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -e + +# This script runs as root (because we set USER root in the Dockerfile) +# Its purpose is to fix permissions on the /fuseki volume before switching +# to the fuseki user and running the original entrypoint. + +# Step 1: Ensure /fuseki directory exists +# (Docker creates the mount point, but we ensure it exists just in case) +mkdir -p /fuseki + +# Step 2: Change ownership of /fuseki to fuseki:fuseki +# This ensures the fuseki user (non-root) can write to the directory +# -R means recursive (applies to all files/subdirs if any exist) +# 2>/dev/null suppresses error messages if chown fails (shouldn't happen as root) +# || true ensures the script doesn't fail if chown somehow fails +chown -R fuseki:fuseki /fuseki 2>/dev/null || true + +# Step 3: Ensure the directory is writable by the owner (fuseki user) +# u+w gives write permission to the user (owner) +# -R applies recursively to all contents +chmod -R 777 /fuseki 2>/dev/null || true + +# Step 4: Switch to the fuseki user and execute the original entrypoint +# su-exec is like su but designed for containers (handles signals properly) +# fuseki:fuseki means user:group +# The original entrypoint is: /sbin/tini -- sh /docker-entrypoint.sh +# We use tini (already in base image) to handle signals, and su-exec to switch users +# The "$@" passes through any arguments (CMD) that were provided +# The original entrypoint from base image is: /sbin/tini -- sh /docker-entrypoint.sh +# We use su-exec to switch users, then call tini with the original entrypoint script +exec su-exec fuseki:fuseki /sbin/tini -- sh /docker-entrypoint.sh "$@" From f44ef546d373c5a130d535b6da5404bf90d87e2c Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 23 Jan 2026 17:59:58 +0100 Subject: [PATCH 161/165] Update nextgraph docker config --- src/jena/fuseki5-docker/README.md | 105 ++++++++++++----------- src/middleware/tests/.env | 17 ---- src/middleware/tests/.env.test | 24 ++++++ src/middleware/tests/.gitignore | 2 +- src/middleware/tests/config.ts | 6 +- src/middleware/tests/docker-compose.yaml | 17 ++-- src/middleware/tests/utils.ts | 10 +-- 7 files changed, 103 insertions(+), 78 deletions(-) delete mode 100644 src/middleware/tests/.env create mode 100644 src/middleware/tests/.env.test diff --git a/src/jena/fuseki5-docker/README.md b/src/jena/fuseki5-docker/README.md index fd3201eff..bbbefdb2d 100644 --- a/src/jena/fuseki5-docker/README.md +++ b/src/jena/fuseki5-docker/README.md @@ -9,28 +9,29 @@ When creating a service with docker compose and mounting a volume for Fuseki dat ### The issue ```yaml - fuseki_tests: - image: stain/jena-fuseki:5.1.0 - container_name: fuseki_tests - restart: always - volumes: - - ./data/fuseki_tests:/fuseki:z - ports: - - '3040:3030' - expose: - - '3040' - environment: - ADMIN_PASSWORD: 'admin' +fuseki_tests: + image: stain/jena-fuseki:5.1.0 + container_name: fuseki_tests + restart: always + volumes: + - ./data/fuseki_tests:/fuseki:z + ports: + - '3040:3030' + expose: + - '3040' + environment: + ADMIN_PASSWORD: 'admin' ``` + ``` -sylvain@UP222:~/virtual-assembly/activitypods/semapps/src/middleware/tests$ docker compose up -d +sylvain@UP222:~/virtual-assembly/activitypods/semapps/src/middleware/tests$ docker compose up -d [+] Running 6/6 - ✔ Network middleware_tests_network Created 0.0s - ✔ Container redis_middleware_tests Started 0.8s - ✔ Container ng_tests Started 0.8s - ✔ Container fuseki_tests Started 0.8s - ✔ Container arena_tests Started 1.5s - ✔ Container tripleadmin Started 1.5s + ✔ Network middleware_tests_network Created 0.0s + ✔ Container redis_middleware_tests Started 0.8s + ✔ Container ng_tests Started 0.8s + ✔ Container fuseki_tests Started 0.8s + ✔ Container arena_tests Started 1.5s + ✔ Container tripleadmin Started 1.5s sylvain@UP222:~/virtual-assembly/activitypods/semapps/src/middleware/tests$ docker logs fuseki_tests ################################### Initializing Apache Jena Fuseki @@ -38,51 +39,57 @@ Initializing Apache Jena Fuseki cp: cannot create regular file '/fuseki/shiro.ini': Permission denied ``` -### Temp fix during development +### Temp fix during development 1. That issue could to be fixed with a `chmod 777` from the host computer then relaunching the container. -2. It could also be fixed by forcing the container to run as root : -```yaml - fuseki_tests: - image: stain/jena-fuseki:5.1.0 - container_name: fuseki_tests - restart: always - volumes: - - ./data/fuseki_tests:/fuseki:z - ports: - - '3040:3030' - expose: - - '3040' - environment: - ADMIN_PASSWORD: 'admin' - user: "0:0" # run as root +2. It could also be fixed by forcing the container to run as root : + +```yaml +fuseki_tests: + image: stain/jena-fuseki:5.1.0 + container_name: fuseki_tests + restart: always + volumes: + - ./data/fuseki_tests:/fuseki:z + ports: + - '3040:3030' + expose: + - '3040' + environment: + ADMIN_PASSWORD: 'admin' + user: '0:0' # run as root ``` ### Unsatisfying fixes + 1. Solution one : implied a manual step, deterrent for devX 2. Solution two : could lead to security or technical issues as the original image wasn't designed to run as root ## The fix + We extended the docker image to start as root and created an entry point that fixes the permissions on the mounted volume before running the original entrypoint as the fuseki user from the image. ### Build and publish the image + ``` -docker build -t semapps/fuseki5-permissions-fix -f Dockerfile . +docker build -t semapps/fuseki5-permissions-fix . +docker push semapps/fuseki5-permissions-fix ``` + ### Use the new image ```yaml - fuseki_tests: - image: semapps/fuseki5-permissions-fix - container_name: fuseki_tests - restart: always - volumes: - - ./data/fuseki_tests:/fuseki:z - ports: - - '3040:3030' - expose: - - '3040' - environment: - ADMIN_PASSWORD: 'admin' -``` \ No newline at end of file +fuseki_tests: + image: semapps/fuseki5-permissions-fix + container_name: fuseki_tests + restart: always + volumes: + - ./data/fuseki_tests:/fuseki:z + ports: + - '3040:3030' + expose: + - '3040' + environment: + ADMIN_PASSWORD: 'admin' +``` diff --git a/src/middleware/tests/.env b/src/middleware/tests/.env deleted file mode 100644 index 795ded875..000000000 --- a/src/middleware/tests/.env +++ /dev/null @@ -1,17 +0,0 @@ -SEMAPPS_HOME_URL=http://localhost:3000/ - -SEMAPPS_ACTIVATE_CACHE=false - -# Fuseki instance with ACL -SEMAPPS_SPARQL_ENDPOINT=http://localhost:3040/ -SEMAPPS_MAIN_DATASET=testData -SEMAPPS_SETTINGS_DATASET=settings_test -SEMAPPS_JENA_USER=admin -SEMAPPS_JENA_PASSWORD=admin - -# Nextgraph data, automatically filled at init time (first run of the container or after removal of ng data folder) -NG_ADMIN_USER_KEY= -NG_CLIENT_PEER_KEY= -NG_PEER_ID= -NG_MAPPINGS_NURI= -NG_MAPPINGS_USER_ID= \ No newline at end of file diff --git a/src/middleware/tests/.env.test b/src/middleware/tests/.env.test new file mode 100644 index 000000000..91839cfec --- /dev/null +++ b/src/middleware/tests/.env.test @@ -0,0 +1,24 @@ +# If you need to change these values, please put them in a .env.test.local file + +SEMAPPS_HOME_URL=http://localhost:3000/ + +SEMAPPS_ACTIVATE_CACHE=false + +# Fuseki instance with ACL +SEMAPPS_SPARQL_ENDPOINT=http://localhost:3040/ +SEMAPPS_MAIN_DATASET=testData +SEMAPPS_SETTINGS_DATASET=settings_test +SEMAPPS_JENA_USER=admin +SEMAPPS_JENA_PASSWORD=admin + +# NextGraph server +NG_SERVER_IP_ADDRESS=172.25.0.2 +NG_SERVER_PORT=1440 +NG_BACKUPS_PATH=./data/ng-backups + +# These variables will be automatically filled when running NextGraph for the first time. They will be put in the .env.test.local file +NG_SERVER_PEER_ID= +NG_ADMIN_USER_KEY= +NG_CLIENT_PEER_KEY= +NG_MAPPINGS_USER_ID= +NG_MAPPINGS_NURI= diff --git a/src/middleware/tests/.gitignore b/src/middleware/tests/.gitignore index d4b1d2d91..0080d4416 100644 --- a/src/middleware/tests/.gitignore +++ b/src/middleware/tests/.gitignore @@ -1,7 +1,7 @@ /data /uploads -.env.local +.env.test.local */actors/ */jwt/*.key diff --git a/src/middleware/tests/config.ts b/src/middleware/tests/config.ts index c9723bc06..a1eabb7bd 100644 --- a/src/middleware/tests/config.ts +++ b/src/middleware/tests/config.ts @@ -13,8 +13,12 @@ export const JENA_PASSWORD = process.env.SEMAPPS_JENA_PASSWORD; export const ACTIVATE_CACHE = process.env.SEMAPPS_ACTIVATE_CACHE === 'true'; export const FUSEKI_BASE = process.env.FUSEKI_BASE; +export const NG_SERVER_IP_ADDRESS = process.env.NG_SERVER_IP_ADDRESS; +export const NG_SERVER_PORT = process.env.NG_SERVER_PORT; +export const NG_BACKUPS_PATH = process.env.NG_BACKUPS_PATH; + +export const NG_SERVER_PEER_ID = process.env.NG_SERVER_PEER_ID; export const NG_ADMIN_USER_KEY = process.env.NG_ADMIN_USER_KEY; export const NG_CLIENT_PEER_KEY = process.env.NG_CLIENT_PEER_KEY; -export const NG_PEER_ID = process.env.NG_PEER_ID; export const NG_MAPPINGS_NURI = process.env.NG_MAPPINGS_NURI; export const NG_MAPPINGS_USER_ID = process.env.NG_MAPPINGS_USER_ID; diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index dcea1658b..33a64fc84 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -1,15 +1,18 @@ services: ng_tests: - image: nextgraph-rs:ubuntu + image: semapps/nextgraph container_name: ng_tests restart: always volumes: - ./data/ng:/nextgraph-rs/.ng:z - - .env.local:/stack-root/.env:z # Update the env variables during nextgraph initialization + - .env.test:/stack-root/.env:z # This file will be updated during initialization ports: - - '1440:1440' + - '14400:14400' expose: - - '1440' + - '14400' + networks: + default: + ipv4_address: 172.25.0.2 # Fix IP because the NextGraph SDK needs an exact IP address fuseki_tests: image: stain/jena-fuseki:5.1.0 @@ -65,4 +68,8 @@ services: networks: default: - name: middleware_tests_network + ipam: + config: + - subnet: 172.25.0.0/16 + ip_range: 172.25.5.0/24 + gateway: 172.25.5.254 diff --git a/src/middleware/tests/utils.ts b/src/middleware/tests/utils.ts index 2d2cc914f..e5443fd57 100644 --- a/src/middleware/tests/utils.ts +++ b/src/middleware/tests/utils.ts @@ -14,13 +14,13 @@ type FetchOptions = Omit & { export const getTripleStoreAdapter = (triplestore: string) => { if (triplestore === 'ng') { return new NextGraphAdapter({ - mappingsUserId: CONFIG.NG_MAPPINGS_USER_ID!, - mappingsNuri: CONFIG.NG_MAPPINGS_NURI!, - serverPeerId: CONFIG.NG_PEER_ID!, + serverAddr: `${CONFIG.NG_SERVER_IP_ADDRESS}:${CONFIG.NG_SERVER_PORT}`, + serverPeerId: CONFIG.NG_SERVER_PEER_ID!, adminUserKey: CONFIG.NG_ADMIN_USER_KEY!, clientPeerKey: CONFIG.NG_CLIENT_PEER_KEY!, - serverAddr: '172.25.0.2:1440', - backupsPath: './data/ng-backups' + mappingsUserId: CONFIG.NG_MAPPINGS_USER_ID!, + mappingsNuri: CONFIG.NG_MAPPINGS_NURI!, + backupsPath: CONFIG.NG_BACKUPS_PATH }); } else if (triplestore === 'fuseki') { return new FusekiAdapter({ From ed20301430fb506bd7e50c100c65929e7971e0ce Mon Sep 17 00:00:00 2001 From: srosset81 Date: Fri, 23 Jan 2026 18:15:51 +0100 Subject: [PATCH 162/165] Fixes --- src/middleware/tests/.env.test | 2 +- src/middleware/tests/docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/middleware/tests/.env.test b/src/middleware/tests/.env.test index 91839cfec..531f4a872 100644 --- a/src/middleware/tests/.env.test +++ b/src/middleware/tests/.env.test @@ -13,7 +13,7 @@ SEMAPPS_JENA_PASSWORD=admin # NextGraph server NG_SERVER_IP_ADDRESS=172.25.0.2 -NG_SERVER_PORT=1440 +NG_SERVER_PORT=14400 NG_BACKUPS_PATH=./data/ng-backups # These variables will be automatically filled when running NextGraph for the first time. They will be put in the .env.test.local file diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 33a64fc84..1f5741c93 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -15,7 +15,7 @@ services: ipv4_address: 172.25.0.2 # Fix IP because the NextGraph SDK needs an exact IP address fuseki_tests: - image: stain/jena-fuseki:5.1.0 + image: semapps/fuseki5-permissions-fix container_name: fuseki_tests restart: always volumes: From e487ed9647f09a6b4c89f383d5795bf0ac8a5c02 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Mon, 26 Jan 2026 17:54:23 +0100 Subject: [PATCH 163/165] Use new NG package and add Makefile --- .../ldp/adapters/ng-binary-adapter.ts | 2 +- src/middleware/packages/ldp/package.json | 2 +- .../triplestore/adapters/nextgraph.ts | 2 +- .../packages/triplestore/package.json | 2 +- src/middleware/tests/Makefile | 7 +++++++ src/middleware/tests/README.md | 21 +++++++++++++++++++ src/middleware/tests/docker-compose.yaml | 2 +- src/middleware/yarn.lock | 13 +++++++++--- 8 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 src/middleware/tests/Makefile create mode 100644 src/middleware/tests/README.md diff --git a/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts b/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts index 85fb030c3..c293a5f6c 100644 --- a/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts +++ b/src/middleware/packages/ldp/adapters/ng-binary-adapter.ts @@ -1,4 +1,4 @@ -import ng from 'nextgraph'; +import ng from '@ng-org/nextgraph'; import { Readable } from 'stream'; import path from 'path'; import fs from 'fs'; diff --git a/src/middleware/packages/ldp/package.json b/src/middleware/packages/ldp/package.json index ade70cf9d..e8d4909fe 100644 --- a/src/middleware/packages/ldp/package.json +++ b/src/middleware/packages/ldp/package.json @@ -7,6 +7,7 @@ "dependencies": { "@rdfjs/data-model": "2.1.1", "@rdfjs/types": "^2.0.1", + "@ng-org/nextgraph": "0.1.2-alpha.1", "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", "@semapps/ontologies": "1.2.0", @@ -20,7 +21,6 @@ "mime-types": "^2.1.35", "moleculer-db": "^0.8.16", "moleculer-web": "^0.10.0-beta1", - "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/sdk/js/lib-wasm/pkg-node", "node-fetch": "^2.6.6", "path-to-regexp": "^6.2.0", "rdf-parse": "^1.7.0", diff --git a/src/middleware/packages/triplestore/adapters/nextgraph.ts b/src/middleware/packages/triplestore/adapters/nextgraph.ts index 96ef6bb88..36b7d6f68 100644 --- a/src/middleware/packages/triplestore/adapters/nextgraph.ts +++ b/src/middleware/packages/triplestore/adapters/nextgraph.ts @@ -1,4 +1,4 @@ -import ng from 'nextgraph'; +import ng from '@ng-org/nextgraph'; import fs from 'fs'; import { join as pathJoin } from 'path'; import { SparqlJsonParser } from 'sparqljson-parse'; diff --git a/src/middleware/packages/triplestore/package.json b/src/middleware/packages/triplestore/package.json index bf19b8867..0136e580b 100644 --- a/src/middleware/packages/triplestore/package.json +++ b/src/middleware/packages/triplestore/package.json @@ -5,11 +5,11 @@ "license": "Apache-2.0", "author": "Virtual Assembly", "dependencies": { + "@ng-org/nextgraph": "0.1.2-alpha.1", "@semapps/middlewares": "1.2.0", "@semapps/mime-types": "1.2.0", "jsonld": "^3.3.2", "negotiator": "^0.6.2", - "nextgraph": "file:/home/sebastien/Code/nextgraph-rs/sdk/js/lib-wasm/pkg-node", "node-fetch": "^2.6.6", "moleculer-db": "^0.8.16", "sparqljs": "^3.5.2", diff --git a/src/middleware/tests/Makefile b/src/middleware/tests/Makefile new file mode 100644 index 000000000..0553ada2c --- /dev/null +++ b/src/middleware/tests/Makefile @@ -0,0 +1,7 @@ +start-test: + touch .env.test.local + mkdir -p data + docker compose up -d + +stop-test: + docker compose down diff --git a/src/middleware/tests/README.md b/src/middleware/tests/README.md new file mode 100644 index 000000000..f4900e10a --- /dev/null +++ b/src/middleware/tests/README.md @@ -0,0 +1,21 @@ +# SemApps integration tests + +## Run tests + +Launch Fuseki, NextGraph and Redis + +```bash +make start-test +``` + +Run a test suite (running all test suites at the same time may not work) + +```bash +yarn run test ldp/resource +``` + +Clean up + +```bash +make stop-test +``` diff --git a/src/middleware/tests/docker-compose.yaml b/src/middleware/tests/docker-compose.yaml index 1f5741c93..37aeb13c4 100644 --- a/src/middleware/tests/docker-compose.yaml +++ b/src/middleware/tests/docker-compose.yaml @@ -5,7 +5,7 @@ services: restart: always volumes: - ./data/ng:/nextgraph-rs/.ng:z - - .env.test:/stack-root/.env:z # This file will be updated during initialization + - .env.test.local:/stack-root/.env:z # File created by Make and updated during NextGraph initialization ports: - '14400:14400' expose: diff --git a/src/middleware/yarn.lock b/src/middleware/yarn.lock index 7bbe36c8f..b704ece49 100644 --- a/src/middleware/yarn.lock +++ b/src/middleware/yarn.lock @@ -1697,6 +1697,11 @@ "@emnapi/runtime" "^1.4.3" "@tybys/wasm-util" "^0.10.0" +"@ng-org/nextgraph@0.1.2-alpha.1": + version "0.1.2-alpha.1" + resolved "https://registry.yarnpkg.com/@ng-org/nextgraph/-/nextgraph-0.1.2-alpha.1.tgz#643b154aa9be81786eae35a617cc48d026f9adb7" + integrity sha512-qbk2DLsIvJifv/LMOpdHjoIzpx/TVQxwkEIvdaXvffw0IJ7Xjjac7HziY3XBwBQUq0t1Gj8ImFJFxLq0YNRfvw== + "@noble/ed25519@^1.6.0": version "1.7.5" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.5.tgz#94df8bdb9fec9c4644a56007eecb57b0e9fbd0d7" @@ -4893,6 +4898,11 @@ env-paths@^2.2.0, env-paths@^2.2.1: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +envfile@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/envfile/-/envfile-7.1.0.tgz#c0b101279dc710c25546602d5d17cfb9ab132e48" + integrity sha512-dyH4QnnZsArCLhPASr29eqBWDvKpq0GggQFTmysTT/S9TTmt1JrEKNvTBc09Cd7ujVZQful2HBGRMe2agu7Krg== + envinfo@7.13.0: version "7.13.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" @@ -8518,9 +8528,6 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -"nextgraph@file:../../../nextgraph-rs/ng-sdk-js/pkg-node": - version "0.1.1-alpha.7" - node-abi@^3.3.0: version "3.85.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.85.0.tgz#b115d575e52b2495ef08372b058e13d202875a7d" From 90cb565792c1783d456f9ed7dfd2f328cee8e5a4 Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 3 Sep 2026 17:10:08 +0200 Subject: [PATCH 164/165] Import moleculer's type-only exports with `import type` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ServiceSchema`, `ActionSchema`, `Middleware`, `ServiceSettingSchema` and `CallingOptions` are types, but were imported as values. That is invisible to tsc, which erases them anyway, but it breaks any consumer that loads these sources directly: Node's type stripping performs no type analysis, so it emits the import verbatim, and `moleculer` being CommonJS the named export does not exist — `SyntaxError: The requested module 'moleculer' does not provide an export named 'ServiceSchema'`. That is what stops the ActivityPods Pod provider from running against linked semapps sources, where `main` points at `./index.ts`. Only genuinely type-only names are converted; `Errors`, `defineAction`, `Context` and `Cachers` exist at runtime and stay value imports. Mixed imports are split in two. `tsc --noEmit` reports the same 1569 errors before and after. Co-Authored-By: Claude Opus 5 --- .../packages/activitypub/mixins/activities-handler.ts | 2 +- src/middleware/packages/activitypub/mixins/bot.ts | 2 +- .../packages/activitypub/services/activity-mapping.ts | 2 +- .../packages/activitypub/services/activitypub/index.ts | 2 +- .../activitypub/services/activitypub/subservices/activity.ts | 2 +- .../activitypub/services/activitypub/subservices/actor.ts | 2 +- .../activitypub/services/activitypub/subservices/api.ts | 2 +- .../services/activitypub/subservices/collection/actions/get.ts | 2 +- .../services/activitypub/subservices/collection/index.ts | 2 +- .../services/activitypub/subservices/collections-registry.ts | 2 +- .../activitypub/services/activitypub/subservices/follow.ts | 2 +- .../activitypub/services/activitypub/subservices/inbox.ts | 2 +- .../activitypub/services/activitypub/subservices/like.ts | 2 +- .../activitypub/services/activitypub/subservices/object.ts | 2 +- .../activitypub/services/activitypub/subservices/outbox.ts | 2 +- .../activitypub/services/activitypub/subservices/reply.ts | 2 +- .../activitypub/services/activitypub/subservices/share.ts | 2 +- .../services/activitypub/subservices/side-effects.ts | 2 +- src/middleware/packages/activitypub/services/migration.ts | 2 +- src/middleware/packages/activitypub/services/relay.ts | 2 +- src/middleware/packages/auth/mixins/auth.sso.ts | 2 +- src/middleware/packages/auth/mixins/auth.ts | 2 +- src/middleware/packages/auth/services/account.ts | 2 +- src/middleware/packages/auth/services/auth.cas.ts | 2 +- src/middleware/packages/auth/services/auth.local.ts | 2 +- src/middleware/packages/auth/services/auth.oidc.ts | 2 +- src/middleware/packages/auth/services/jwt.ts | 2 +- src/middleware/packages/auth/services/mail.ts | 2 +- src/middleware/packages/auth/services/migration.ts | 2 +- src/middleware/packages/backup/index.ts | 2 +- src/middleware/packages/backup/indexTypes.d.ts | 3 ++- src/middleware/packages/core/service.ts | 2 +- src/middleware/packages/core/serviceTypes.d.ts | 3 ++- src/middleware/packages/crypto/keys/key-container.ts | 2 +- src/middleware/packages/crypto/keys/keys.ts | 2 +- src/middleware/packages/crypto/keys/migration.ts | 2 +- src/middleware/packages/crypto/keys/public-key-container.ts | 2 +- src/middleware/packages/crypto/signature/http-signatures.ts | 2 +- src/middleware/packages/crypto/signature/keypair.ts | 2 +- src/middleware/packages/crypto/signature/proxy.ts | 2 +- .../crypto/verifiable-credentials/challenge-service.ts | 2 +- .../crypto/verifiable-credentials/data-integrity-service.ts | 2 +- .../packages/crypto/verifiable-credentials/vc-api-service.ts | 2 +- .../crypto/verifiable-credentials/vc-credential-container.ts | 2 +- .../crypto/verifiable-credentials/vc-holder-service.ts | 2 +- .../crypto/verifiable-credentials/vc-issuer-service.ts | 2 +- .../crypto/verifiable-credentials/vc-presentation-container.ts | 2 +- .../packages/crypto/verifiable-credentials/vc-service.ts | 2 +- .../crypto/verifiable-credentials/vc-verifier-service.ts | 2 +- src/middleware/packages/importer/mixins/discourse.ts | 2 +- src/middleware/packages/importer/mixins/drupal.ts | 2 +- src/middleware/packages/importer/mixins/gogocarto.ts | 2 +- src/middleware/packages/importer/mixins/humhub.ts | 2 +- src/middleware/packages/importer/mixins/importer.ts | 2 +- src/middleware/packages/importer/mixins/jotform.ts | 2 +- src/middleware/packages/importer/mixins/mobilizon.ts | 2 +- src/middleware/packages/importer/mixins/prestashop.ts | 2 +- src/middleware/packages/importer/mixins/wordpress.ts | 2 +- src/middleware/packages/importer/mixins/yeswiki.ts | 2 +- src/middleware/packages/inference/service.ts | 2 +- src/middleware/packages/inference/subservices/remote.ts | 2 +- src/middleware/packages/jsonld/service.ts | 2 +- src/middleware/packages/jsonld/services/api/index.ts | 2 +- src/middleware/packages/jsonld/services/context/actions/get.ts | 2 +- .../packages/jsonld/services/context/actions/getLocal.ts | 2 +- .../packages/jsonld/services/context/actions/merge.ts | 2 +- .../packages/jsonld/services/context/actions/parse.ts | 2 +- .../packages/jsonld/services/context/actions/validate.ts | 2 +- src/middleware/packages/jsonld/services/context/index.ts | 2 +- .../packages/jsonld/services/document-loader/index.ts | 2 +- src/middleware/packages/jsonld/services/parser/index.ts | 2 +- src/middleware/packages/ldp/mixins/controlled-container.ts | 2 +- src/middleware/packages/ldp/mixins/dereference.ts | 2 +- src/middleware/packages/ldp/mixins/disassembly.ts | 2 +- src/middleware/packages/ldp/mixins/document-tagger.ts | 2 +- src/middleware/packages/ldp/mixins/image-processor.ts | 2 +- src/middleware/packages/ldp/mixins/mime-types.ts | 2 +- src/middleware/packages/ldp/mixins/orphan-files-deletion.ts | 2 +- src/middleware/packages/ldp/mixins/pseudo-id.ts | 2 +- .../packages/ldp/mixins/single-resource-container.ts | 3 ++- src/middleware/packages/ldp/mixins/special-endpoint.ts | 2 +- src/middleware/packages/ldp/service.ts | 2 +- src/middleware/packages/ldp/services/api/index.ts | 3 ++- src/middleware/packages/ldp/services/cache/index.ts | 2 +- .../packages/ldp/services/container/actions/attach.ts | 2 +- .../packages/ldp/services/container/actions/clear.ts | 2 +- .../packages/ldp/services/container/actions/create.ts | 2 +- .../packages/ldp/services/container/actions/createAndAttach.ts | 2 +- .../packages/ldp/services/container/actions/delete.ts | 2 +- .../packages/ldp/services/container/actions/detach.ts | 2 +- .../packages/ldp/services/container/actions/exist.ts | 2 +- src/middleware/packages/ldp/services/container/actions/get.ts | 2 +- .../packages/ldp/services/container/actions/getAll.ts | 2 +- .../packages/ldp/services/container/actions/getPath.ts | 2 +- .../packages/ldp/services/container/actions/getUris.ts | 2 +- .../packages/ldp/services/container/actions/includes.ts | 2 +- .../packages/ldp/services/container/actions/isEmpty.ts | 2 +- .../packages/ldp/services/container/actions/patch.ts | 2 +- src/middleware/packages/ldp/services/container/actions/post.ts | 2 +- src/middleware/packages/ldp/services/container/index.ts | 3 ++- .../packages/ldp/services/link-header/actions/get.ts | 2 +- .../packages/ldp/services/link-header/actions/register.ts | 2 +- src/middleware/packages/ldp/services/link-header/index.ts | 3 ++- .../packages/ldp/services/permissions/actions/addAuthorizer.ts | 2 +- .../packages/ldp/services/permissions/actions/check.ts | 2 +- .../packages/ldp/services/permissions/actions/has.ts | 2 +- src/middleware/packages/ldp/services/permissions/index.ts | 3 ++- .../packages/ldp/services/registry/actions/getByType.ts | 2 +- .../packages/ldp/services/registry/actions/getByUri.ts | 2 +- .../packages/ldp/services/registry/actions/getUri.ts | 2 +- src/middleware/packages/ldp/services/registry/actions/list.ts | 2 +- .../packages/ldp/services/registry/actions/register.ts | 2 +- src/middleware/packages/ldp/services/registry/index.ts | 2 +- src/middleware/packages/ldp/services/remote/actions/delete.ts | 2 +- src/middleware/packages/ldp/services/remote/actions/get.ts | 2 +- .../packages/ldp/services/remote/actions/getGraph.ts | 2 +- .../packages/ldp/services/remote/actions/getNetwork.ts | 2 +- .../packages/ldp/services/remote/actions/getStored.ts | 2 +- .../packages/ldp/services/remote/actions/isRemote.ts | 2 +- src/middleware/packages/ldp/services/remote/actions/store.ts | 2 +- src/middleware/packages/ldp/services/remote/index.ts | 2 +- .../ldp/services/resource/actions/awaitCreateComplete.ts | 2 +- .../packages/ldp/services/resource/actions/create.ts | 2 +- .../packages/ldp/services/resource/actions/delete.ts | 2 +- src/middleware/packages/ldp/services/resource/actions/exist.ts | 2 +- .../packages/ldp/services/resource/actions/generateId.ts | 2 +- src/middleware/packages/ldp/services/resource/actions/get.ts | 2 +- .../packages/ldp/services/resource/actions/getContainers.ts | 2 +- .../packages/ldp/services/resource/actions/getTypes.ts | 2 +- src/middleware/packages/ldp/services/resource/actions/patch.ts | 2 +- src/middleware/packages/ldp/services/resource/actions/put.ts | 2 +- .../packages/ldp/services/resource/actions/upload.ts | 2 +- src/middleware/packages/ldp/services/resource/index.ts | 3 ++- src/middleware/packages/migration/service.ts | 2 +- src/middleware/packages/nodeinfo/service.ts | 2 +- .../packages/notifications/services/digest/service.ts | 2 +- .../packages/notifications/services/digest/subscription.ts | 2 +- .../packages/notifications/services/expo-push/device.ts | 2 +- .../packages/notifications/services/expo-push/notification.ts | 2 +- .../packages/notifications/services/expo-push/service.ts | 2 +- .../packages/notifications/services/single-mail/service.ts | 2 +- src/middleware/packages/ontologies/actions/findNamespace.ts | 2 +- src/middleware/packages/ontologies/actions/findPrefix.ts | 2 +- src/middleware/packages/ontologies/actions/get.ts | 2 +- src/middleware/packages/ontologies/actions/getPrefixes.ts | 2 +- src/middleware/packages/ontologies/actions/getRdfPrefixes.ts | 2 +- src/middleware/packages/ontologies/actions/list.ts | 2 +- src/middleware/packages/ontologies/actions/prefixToUri.ts | 2 +- src/middleware/packages/ontologies/actions/register.ts | 2 +- src/middleware/packages/ontologies/service.ts | 2 +- src/middleware/packages/ontologies/sub-services/registry.ts | 2 +- src/middleware/packages/solid/services/endpoint.ts | 2 +- .../notifications/channels/notification-channel.mixin.ts | 2 +- .../solid/services/notifications/channels/webhook-channel.ts | 2 +- .../solid/services/notifications/channels/websocket-channel.ts | 2 +- .../packages/solid/services/notifications/listener.ts | 3 ++- .../packages/solid/services/notifications/provider.ts | 2 +- src/middleware/packages/solid/services/preferences-file.ts | 2 +- src/middleware/packages/solid/services/storage.ts | 2 +- .../packages/solid/services/type-index/type-indexes.ts | 2 +- .../packages/solid/services/type-index/type-registrations.ts | 2 +- src/middleware/packages/sparql-endpoint/service.ts | 2 +- src/middleware/packages/sync/services/aggregator.ts | 2 +- src/middleware/packages/sync/services/mirror.ts | 2 +- src/middleware/packages/sync/services/synchronizer.ts | 2 +- .../packages/triplestore/actions/countTriplesOfSubject.ts | 2 +- .../packages/triplestore/actions/deleteOrphanBlankNodes.ts | 2 +- src/middleware/packages/triplestore/actions/dropAll.ts | 2 +- src/middleware/packages/triplestore/actions/insert.ts | 2 +- src/middleware/packages/triplestore/actions/query.ts | 2 +- src/middleware/packages/triplestore/actions/tripleExist.ts | 2 +- src/middleware/packages/triplestore/actions/update.ts | 2 +- src/middleware/packages/triplestore/service.ts | 3 ++- src/middleware/packages/triplestore/subservices/dataset.ts | 2 +- src/middleware/packages/void/service.ts | 2 +- src/middleware/packages/webacl/bots/authorizer.ts | 2 +- src/middleware/packages/webacl/middlewares/webacl.ts | 2 +- src/middleware/packages/webacl/service.ts | 2 +- src/middleware/packages/webacl/services/cache/index.ts | 2 +- .../packages/webacl/services/group/actions/addMember.ts | 2 +- .../packages/webacl/services/group/actions/create.ts | 2 +- .../packages/webacl/services/group/actions/delete.ts | 2 +- src/middleware/packages/webacl/services/group/actions/exist.ts | 2 +- .../packages/webacl/services/group/actions/getGroups.ts | 2 +- .../packages/webacl/services/group/actions/getMembers.ts | 2 +- .../packages/webacl/services/group/actions/getUri.ts | 2 +- .../packages/webacl/services/group/actions/isMember.ts | 2 +- .../packages/webacl/services/group/actions/removeMember.ts | 2 +- src/middleware/packages/webacl/services/group/index.ts | 3 ++- .../packages/webacl/services/resource/actions/addRights.ts | 2 +- .../webacl/services/resource/actions/awaitReadRight.ts | 2 +- .../webacl/services/resource/actions/deleteAllRights.ts | 2 +- .../webacl/services/resource/actions/deleteAllUserRights.ts | 2 +- .../packages/webacl/services/resource/actions/getLink.ts | 2 +- .../packages/webacl/services/resource/actions/getRights.ts | 2 +- .../webacl/services/resource/actions/getUsersWithReadRights.ts | 2 +- .../packages/webacl/services/resource/actions/hasRights.ts | 2 +- .../packages/webacl/services/resource/actions/isPublic.ts | 2 +- .../services/resource/actions/refreshContainersRights.ts | 2 +- .../packages/webacl/services/resource/actions/removeRights.ts | 2 +- .../packages/webacl/services/resource/actions/setRights.ts | 2 +- src/middleware/packages/webacl/services/resource/index.ts | 3 ++- src/middleware/packages/webfinger/service.ts | 2 +- src/middleware/packages/webhooks/service.ts | 2 +- src/middleware/packages/webid/service.ts | 2 +- 205 files changed, 217 insertions(+), 205 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts index c1a175c11..69b87c574 100644 --- a/src/middleware/packages/activitypub/mixins/activities-handler.ts +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ActivitiesHandlerMixin = { dependencies: ['activitypub.side-effects'], diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index 8eda05abe..f4020460e 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { getSlugFromUri, getContainerFromUri } from '../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 8873f655f..35a5746eb 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -1,5 +1,5 @@ import Handlebars from 'handlebars'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import matchActivity from '../utils/matchActivity.ts'; import { ACTIVITY_TYPES } from '../constants.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index fe744f8ad..65b2c4b91 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; import { as, sec } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActorService from './subservices/actor.ts'; import ActivityService from './subservices/activity.ts'; import ApiService from './subservices/api.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 8bfe9d45b..a6be95632 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -2,7 +2,7 @@ import { Errors as E } from 'moleculer-web'; import { ControlledContainerMixin } from '@semapps/ldp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import setRightsHandler from './activity-handlers/setRightsHandler.ts'; import { objectCurrentToId, objectIdToCurrent, arrayOf } from '../../../utils.ts'; import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index 015026ae1..cf954312f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -2,7 +2,7 @@ import fetch from 'node-fetch'; import rdf from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; import { getSlugFromUri, waitForResource } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index 3c9137c77..259b58e67 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -14,7 +14,7 @@ import { saveDatasetMeta } from '@semapps/middlewares'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { FULL_ACTOR_TYPES } from '../../../constants.ts'; const ApiService = { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 81cde23d7..3fe5a7810 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,6 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlUri } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getValueFromDataType } from '../../../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 24d9cca2c..baf8b9008 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -3,7 +3,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 370ade8e8..503c86703 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; import { getWebIdFromUri, arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES, FULL_ACTOR_TYPES, AS_PREFIX } from '../../../constants.ts'; const CollectionsRegistryService = { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index b6d1c92df..b21997643 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 112f1dd22..b997b72fa 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { objectIdToCurrent, collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 037923b4b..877c49aa4 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index be819b9bf..9c8704e95 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,7 +1,7 @@ import { getType } from '@semapps/ldp'; import { MIME_TYPES } from '@semapps/mime-types'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ObjectService = { name: 'activitypub.object' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index 69fa996fd..da3773cf7 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -3,7 +3,7 @@ import fetch from 'node-fetch'; import { Errors as E } from 'moleculer-web'; import { MIME_TYPES } from '@semapps/mime-types'; import { getType, arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead, getSlugFromUri, objectIdToCurrent } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index f3af79f39..b9f2d3e9d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -1,5 +1,5 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index 3c83035d4..d1c31c630 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index db5251814..0f9bd31f6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -1,7 +1,7 @@ import { credentialsContext } from '@semapps/crypto'; import { arrayOf } from '@semapps/ldp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import matchActivity from '../../../utils/matchActivity.ts'; /** diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts index 45f2c8bc7..d0c268322 100644 --- a/src/middleware/packages/activitypub/services/migration.ts +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ActivitypubMigrationSchema = { name: 'activitypub.migration' as const, diff --git a/src/middleware/packages/activitypub/services/relay.ts b/src/middleware/packages/activitypub/services/relay.ts index df0943c05..45d540562 100644 --- a/src/middleware/packages/activitypub/services/relay.ts +++ b/src/middleware/packages/activitypub/services/relay.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { delay } from '../utils.ts'; diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index b6041073c..74d31ecfe 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -1,7 +1,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'expr... Remove this comment to see the full error message import session from 'express-session'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthMixin from './auth.ts'; import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; import redirectToFront from '../middlewares/redirectToFront.ts'; diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index e4bec141e..a1d73beb4 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -3,7 +3,7 @@ import passport from 'passport'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthAccountService from '../services/account.ts'; import AuthJWTService from '../services/jwt.ts'; diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 9ca247490..71b5ebf4c 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -5,7 +5,7 @@ import createSlug from 'speakingurl'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; import crypto from 'crypto'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; // Taken from https://stackoverflow.com/a/9204568/7900695 const emailRegexp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts index fbec8a50c..885f02d16 100644 --- a/src/middleware/packages/auth/services/auth.cas.ts +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -2,7 +2,7 @@ import { Strategy } from 'passport-cas2'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthSSOMixin from '../mixins/auth.sso.ts'; const AuthCASService = { diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index f5a74dcd5..da7bfff4f 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,7 +1,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-local'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; import AuthMailService from './mail.ts'; diff --git a/src/middleware/packages/auth/services/auth.oidc.ts b/src/middleware/packages/auth/services/auth.oidc.ts index 78c505596..ccf7ee492 100644 --- a/src/middleware/packages/auth/services/auth.oidc.ts +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'open... Remove this comment to see the full error message import { Issuer, Strategy, custom } from 'openid-client'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthSSOMixin from '../mixins/auth.sso.ts'; custom.setHttpOptionsDefaults({ diff --git a/src/middleware/packages/auth/services/jwt.ts b/src/middleware/packages/auth/services/jwt.ts index f43375f27..8ca99cc19 100644 --- a/src/middleware/packages/auth/services/jwt.ts +++ b/src/middleware/packages/auth/services/jwt.ts @@ -3,7 +3,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'json... Remove this comment to see the full error message import jwt from 'jsonwebtoken'; import crypto from 'crypto'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** * Service that creates and validates JSON web tokens(JWT). diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts index c84c0a7c3..5ae6a61e9 100644 --- a/src/middleware/packages/auth/services/mail.ts +++ b/src/middleware/packages/auth/services/mail.ts @@ -2,7 +2,7 @@ import path from 'path'; import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message diff --git a/src/middleware/packages/auth/services/migration.ts b/src/middleware/packages/auth/services/migration.ts index 22fe09704..9b2610442 100644 --- a/src/middleware/packages/auth/services/migration.ts +++ b/src/middleware/packages/auth/services/migration.ts @@ -1,6 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { getSlugFromUri } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const AuthMigrationSchema = { name: 'auth.migration' as const, diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index d59d68cb0..31f621d99 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -3,7 +3,7 @@ import fs from 'fs'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import { emptyDirSync } from 'fs-extra'; import pathModule from 'path'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import fsCopy from './utils/fsCopy.ts'; import ftpCopy from './utils/ftpCopy.ts'; import rsyncCopy from './utils/rsyncCopy.ts'; diff --git a/src/middleware/packages/backup/indexTypes.d.ts b/src/middleware/packages/backup/indexTypes.d.ts index f2b8358b5..0cef59ecd 100644 --- a/src/middleware/packages/backup/indexTypes.d.ts +++ b/src/middleware/packages/backup/indexTypes.d.ts @@ -1,4 +1,5 @@ -import { Context, ServiceSchema, CallingOptions } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema, CallingOptions } from 'moleculer'; interface LocalServerSettings { fusekiBase: string | null; diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index acecece2f..5f1d5fd0c 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -12,7 +12,7 @@ import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; import { KeysService, SignatureService } from '@semapps/crypto'; import { WebIdService } from '@semapps/webid'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const botsContainer = { path: '/as/application', diff --git a/src/middleware/packages/core/serviceTypes.d.ts b/src/middleware/packages/core/serviceTypes.d.ts index cf9534b6a..a2036fb3b 100644 --- a/src/middleware/packages/core/serviceTypes.d.ts +++ b/src/middleware/packages/core/serviceTypes.d.ts @@ -1,4 +1,5 @@ -import { Context, ServiceSettingSchema } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSettingSchema } from 'moleculer'; export interface CoreServiceSettings extends ServiceSettingSchema { baseUrl?: string; diff --git a/src/middleware/packages/crypto/keys/key-container.ts b/src/middleware/packages/crypto/keys/key-container.ts index 171339cf1..c2d0da0ff 100644 --- a/src/middleware/packages/crypto/keys/key-container.ts +++ b/src/middleware/packages/crypto/keys/key-container.ts @@ -1,7 +1,7 @@ import { ControlledContainerMixin } from '@semapps/ldp'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index 226926ce0..594d8923b 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -5,7 +5,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { sec } from '@semapps/ontologies'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; import KeyContainerService from './key-container.ts'; diff --git a/src/middleware/packages/crypto/keys/migration.ts b/src/middleware/packages/crypto/keys/migration.ts index 18b4dd317..69e781254 100644 --- a/src/middleware/packages/crypto/keys/migration.ts +++ b/src/middleware/packages/crypto/keys/migration.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import fs from 'fs'; import path from 'path'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; /** @type {import('moleculer').ServiceSchema} */ diff --git a/src/middleware/packages/crypto/keys/public-key-container.ts b/src/middleware/packages/crypto/keys/public-key-container.ts index 539f6549a..c9af54ea0 100644 --- a/src/middleware/packages/crypto/keys/public-key-container.ts +++ b/src/middleware/packages/crypto/keys/public-key-container.ts @@ -2,7 +2,7 @@ import rdf from '@rdfjs/data-model'; import { ControlledContainerMixin } from '@semapps/ldp'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; /** diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index 57bb519e3..edd05a59d 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -5,7 +5,7 @@ import { parseRequest, verifySignature } from 'http-signature'; import { createAuthzHeader, createSignatureString } from 'http-signature-header'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; import { arrayOf } from '../utils/utils.ts'; diff --git a/src/middleware/packages/crypto/signature/keypair.ts b/src/middleware/packages/crypto/signature/keypair.ts index f6ca644b8..f20d046d1 100644 --- a/src/middleware/packages/crypto/signature/keypair.ts +++ b/src/middleware/packages/crypto/signature/keypair.ts @@ -4,7 +4,7 @@ import fetch from 'node-fetch'; import { generateKeyPair } from 'crypto'; import rdf from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; /** diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index f0c5e4aee..48ff4c5ff 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -4,7 +4,7 @@ import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; import fetch from 'node-fetch'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const stream2buffer = (stream: any) => { return new Promise((resolve, reject) => { diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts index ef23d4f26..98aaa1d4d 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge-service.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** * Service to generate challenges upon request. diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts index 1bb7b1eb4..a8d645030 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity-service.ts @@ -9,7 +9,7 @@ import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; const { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts index be83cc802..06282dc21 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-api-service.ts @@ -1,6 +1,6 @@ import { parseHeader, negotiateAccept, parseJson } from '@semapps/middlewares'; import path from 'node:path'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { VC_API_PATH } from '../constants'; const middlewares = [parseHeader, parseJson, negotiateAccept]; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts index 5363bce8a..471e1781f 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-credential-container.ts @@ -1,6 +1,6 @@ import path from 'node:path'; import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof, VC_API_PATH } from '../constants.ts'; /** diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts index 98f222f08..d784204b2 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-holder-service.ts @@ -12,7 +12,7 @@ import * as vc from '@digitalbazaar/vc'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; const { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts index b7d3d18f3..3c92130b3 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-issuer-service.ts @@ -10,7 +10,7 @@ import * as vc from '@digitalbazaar/vc'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; const { diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts index 2670c1cca..fcd21b8cf 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-presentation-container.ts @@ -1,5 +1,5 @@ import { ControlledContainerMixin, PseudoIdMixin } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; /** diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts index f318adbae..5402b4ebf 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-service.ts @@ -1,5 +1,5 @@ import { did, cred } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import VCHolderService from './vc-holder-service.ts'; import VCIssuerService from './vc-issuer-service.ts'; import VCVerifierService from './vc-verifier-service.ts'; diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts index 6d1d83340..522df1b65 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc-verifier-service.ts @@ -4,7 +4,7 @@ import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as vc from '@digitalbazaar/vc'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import VCCapabilityPresentationProofPurpose from './VcCapabilityPresentationProofPurpose.ts'; import VCPurpose from './VcPurpose.ts'; import { arrayOf } from '../utils/utils.ts'; diff --git a/src/middleware/packages/importer/mixins/discourse.ts b/src/middleware/packages/importer/mixins/discourse.ts index 8af5d043d..0bb9bcb1b 100644 --- a/src/middleware/packages/importer/mixins/discourse.ts +++ b/src/middleware/packages/importer/mixins/discourse.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/drupal.ts b/src/middleware/packages/importer/mixins/drupal.ts index f5e32bd3a..f3f644296 100644 --- a/src/middleware/packages/importer/mixins/drupal.ts +++ b/src/middleware/packages/importer/mixins/drupal.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/gogocarto.ts b/src/middleware/packages/importer/mixins/gogocarto.ts index c5850ea18..a894e1ee7 100644 --- a/src/middleware/packages/importer/mixins/gogocarto.ts +++ b/src/middleware/packages/importer/mixins/gogocarto.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/humhub.ts b/src/middleware/packages/importer/mixins/humhub.ts index 3abae620f..3abcf8c43 100644 --- a/src/middleware/packages/importer/mixins/humhub.ts +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 767e39bb0..ba562dd07 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -3,7 +3,7 @@ import cronParser from 'cron-parser'; import { promises as fsPromises } from 'fs'; import { ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { isDir } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/jotform.ts b/src/middleware/packages/importer/mixins/jotform.ts index 048315f4e..f15b88b88 100644 --- a/src/middleware/packages/importer/mixins/jotform.ts +++ b/src/middleware/packages/importer/mixins/jotform.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/mobilizon.ts b/src/middleware/packages/importer/mixins/mobilizon.ts index 2d4867d4c..08687b7ac 100644 --- a/src/middleware/packages/importer/mixins/mobilizon.ts +++ b/src/middleware/packages/importer/mixins/mobilizon.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/prestashop.ts b/src/middleware/packages/importer/mixins/prestashop.ts index 2955c6740..d873a3e5e 100644 --- a/src/middleware/packages/importer/mixins/prestashop.ts +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index e53249888..226150a5d 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { getSlugFromUri, delay } from '@semapps/ldp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/yeswiki.ts b/src/middleware/packages/importer/mixins/yeswiki.ts index 39bdbc548..f130a48ec 100644 --- a/src/middleware/packages/importer/mixins/yeswiki.ts +++ b/src/middleware/packages/importer/mixins/yeswiki.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index a7fe00c68..5620d3a93 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -1,6 +1,6 @@ import fetch from 'node-fetch'; import N3 from 'n3'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import RemoteService from './subservices/remote.ts'; const { DataFactory } = N3; diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index dc4a49e1a..7bd5122d3 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; import N3 from 'n3'; import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; diff --git a/src/middleware/packages/jsonld/service.ts b/src/middleware/packages/jsonld/service.ts index 186283577..b9b370f34 100644 --- a/src/middleware/packages/jsonld/service.ts +++ b/src/middleware/packages/jsonld/service.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import JsonLdApiService from './services/api/index.ts'; import JsonLdContextService from './services/context/index.ts'; import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts index 771141ce3..a6e9e5768 100644 --- a/src/middleware/packages/jsonld/services/api/index.ts +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const JsonldApiSchema = { name: 'jsonld.api' as const, diff --git a/src/middleware/packages/jsonld/services/context/actions/get.ts b/src/middleware/packages/jsonld/services/context/actions/get.ts index 7190fe14b..5b144c3da 100644 --- a/src/middleware/packages/jsonld/services/context/actions/get.ts +++ b/src/middleware/packages/jsonld/services/context/actions/get.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts index e0c45b559..80d7b8f81 100644 --- a/src/middleware/packages/jsonld/services/context/actions/getLocal.ts +++ b/src/middleware/packages/jsonld/services/context/actions/getLocal.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index 100219b87..84522c941 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; const Schema = { diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts index 6930342dc..cb982bf90 100644 --- a/src/middleware/packages/jsonld/services/context/actions/parse.ts +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index 3944c331b..6ca655ebd 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/jsonld/services/context/index.ts b/src/middleware/packages/jsonld/services/context/index.ts index 6a514eab9..63314f1cc 100644 --- a/src/middleware/packages/jsonld/services/context/index.ts +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -1,5 +1,5 @@ import { ContextParser } from 'jsonld-context-parser'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import getLocalAction from './actions/getLocal.ts'; import mergeAction from './actions/merge.ts'; diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index 07b77fe33..55f13c05c 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -2,7 +2,7 @@ import jsonld from 'jsonld'; import fsModule from 'fs'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'lru-... Remove this comment to see the full error message import LRU from 'lru-cache'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const fsPromises = fsModule.promises; diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index 1ed8fa1d9..19df8714a 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -1,7 +1,7 @@ import jsonld from 'jsonld'; import { JsonLdParser } from 'jsonld-streaming-parser'; import streamifyString from 'streamify-string'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf, isURI } from '../../utils/utils.ts'; const JsonldParserSchema = { diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 159604846..adef7a60e 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { delay, getParentContainerUri } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/mixins/dereference.ts b/src/middleware/packages/ldp/mixins/dereference.ts index 7bb92618c..696bea5e0 100644 --- a/src/middleware/packages/ldp/mixins/dereference.ts +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { isObject, arrayOf } from '../utils.ts'; /** diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index 10f18f4e4..6d105c35a 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 2a0b6100a..9407fb383 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,5 +1,5 @@ import { dc } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { getDatasetFromUri } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index 22888adf0..cdc362392 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'shar... Remove this comment to see the full error message import sharp from 'sharp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils.ts'; const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index 0adb4ec08..114d884de 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -1,5 +1,5 @@ import { isMimeTypeMatching } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index 943e9562a..f7c5c73ff 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -1,5 +1,5 @@ import { CronJob } from 'cron'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const Schema = { settings: { diff --git a/src/middleware/packages/ldp/mixins/pseudo-id.ts b/src/middleware/packages/ldp/mixins/pseudo-id.ts index 1abe545b5..2795c99da 100644 --- a/src/middleware/packages/ldp/mixins/pseudo-id.ts +++ b/src/middleware/packages/ldp/mixins/pseudo-id.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** * MoleculerJS mixin to be applied on the ControlledContainerMixin. diff --git a/src/middleware/packages/ldp/mixins/single-resource-container.ts b/src/middleware/packages/ldp/mixins/single-resource-container.ts index 9f569e0d6..07331f062 100644 --- a/src/middleware/packages/ldp/mixins/single-resource-container.ts +++ b/src/middleware/packages/ldp/mixins/single-resource-container.ts @@ -1,5 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ControlledContainerMixin from './controlled-container.ts'; import { delay } from '../utils.ts'; diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index ce70ed2b9..3d1c69d0a 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; import { MIME_TYPES } from '@semapps/mime-types'; import { parseUrl, parseHeader, negotiateAccept, parseJson, parseTurtle } from '@semapps/middlewares'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const Schema = { settings: { diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 01551e85c..4074ca2b8 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,5 +1,5 @@ import { ldp, semapps } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; import LdpContainerService from './services/container/index.ts'; import LdpCacheService from './services/cache/index.ts'; diff --git a/src/middleware/packages/ldp/services/api/index.ts b/src/middleware/packages/ldp/services/api/index.ts index 5af245628..87c445fc7 100644 --- a/src/middleware/packages/ldp/services/api/index.ts +++ b/src/middleware/packages/ldp/services/api/index.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { defineAction } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import headAction from './actions/head.ts'; diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index cc1e65ef8..797afb4ab 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const LdpCacheSchema = { name: 'ldp.cache' as const, diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 9797a5ef6..ac6f20964 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index 12ed95a4c..e4c59e296 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index dca38a782..d8db5080a 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts index 8cef4fad2..975cdf051 100644 --- a/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts +++ b/src/middleware/packages/ldp/services/container/actions/createAndAttach.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getParentContainerUri } from '../../../utils.ts'; /** diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index f80e06371..7a530e88b 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -1,5 +1,5 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index 254b29ebc..b0284358f 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/exist.ts b/src/middleware/packages/ldp/services/container/actions/exist.ts index 22a1e4a29..73cbcdaf4 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.ts +++ b/src/middleware/packages/ldp/services/container/actions/exist.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 30f81f13b..33a1d35e1 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.ts b/src/middleware/packages/ldp/services/container/actions/getAll.ts index f292c8fe5..abe17723f 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.ts +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/getPath.ts b/src/middleware/packages/ldp/services/container/actions/getPath.ts index 24010e197..874694d10 100644 --- a/src/middleware/packages/ldp/services/container/actions/getPath.ts +++ b/src/middleware/packages/ldp/services/container/actions/getPath.ts @@ -1,6 +1,6 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'dash... Remove this comment to see the full error message import dashify from 'dashify'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index 731f92c2b..4d09f61f9 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/includes.ts b/src/middleware/packages/ldp/services/container/actions/includes.ts index 7e86656a6..09f2dbf39 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.ts +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index f593252a0..aefa11fcb 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 35ff56e06..81cb32b61 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isMirror } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 590eb5714..5e55aca0f 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index e85eaa2ac..fd73d3941 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -1,4 +1,5 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { defineAction } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import attachAction from './actions/attach.ts'; import clearAction from './actions/clear.ts'; import createAction from './actions/create.ts'; diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index 1150597e7..1c20d0f8f 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -1,5 +1,5 @@ import LinkHeader from 'http-link-header'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/link-header/actions/register.ts b/src/middleware/packages/ldp/services/link-header/actions/register.ts index 05b0059cc..05252f49d 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/register.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/register.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/link-header/index.ts b/src/middleware/packages/ldp/services/link-header/index.ts index 75f2636e7..8ca0ad92a 100644 --- a/src/middleware/packages/ldp/services/link-header/index.ts +++ b/src/middleware/packages/ldp/services/link-header/index.ts @@ -1,4 +1,5 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { defineAction } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import registerAction from './actions/register.ts'; diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index 938a3e53b..5d3ac1da7 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index 66e48e88c..4700b339b 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index bdc7018b5..2b3c1e50f 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/permissions/index.ts b/src/middleware/packages/ldp/services/permissions/index.ts index fa75391af..105e1ebbd 100644 --- a/src/middleware/packages/ldp/services/permissions/index.ts +++ b/src/middleware/packages/ldp/services/permissions/index.ts @@ -1,4 +1,5 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { defineAction } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import addAuthorizerAction from './actions/addAuthorizer.ts'; import checkAction from './actions/check.ts'; import hasAction from './actions/has.ts'; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByType.ts b/src/middleware/packages/ldp/services/registry/actions/getByType.ts index fccf1d6d8..4ced476ac 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByType.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByType.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; /** * Find the container options for a resource type diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index c9daaa2e8..a6ddbb0cc 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; /** * Find the container options for a container URI diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 952820830..2209612e6 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; /** * Get the container URI based on its path diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index 8e3d6a1db..6348f7cbb 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index da4925111..e4a1af3b1 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import pathModule from 'path'; import { pathToRegexp } from 'path-to-regexp'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; const pathJoin = pathModule.join; diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index d8563ebc4..28adf34e6 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getByTypeAction from './actions/getByType.ts'; import getByUriAction from './actions/getByUri.ts'; import getUriAction from './actions/getUri.ts'; diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index f296b5c8c..94a712243 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index 09285409a..5831cbd09 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/remote/actions/getGraph.ts b/src/middleware/packages/ldp/services/remote/actions/getGraph.ts index 558f062d9..732ac3d1b 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getGraph.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getGraph.ts @@ -1,5 +1,5 @@ import rdf from '@rdfjs/data-model'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index 89439876b..bd21d4bd1 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,6 +1,6 @@ import fetch from 'node-fetch'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 2092b7f54..71f44c789 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { buildBlankNodesQuery } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index 02e06c131..5212fd410 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index 11ec1e176..095760d3e 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; // @ts-expect-error import { Errors as E } from 'moleculer-web'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { hasType } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index 6b8d3e58c..98e7e61d4 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,6 +1,6 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import Schedule from 'moleculer-schedule'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import getGraphAction from './actions/getGraph.ts'; diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index e86b3c8ef..944a68642 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { waitForResource } from '../../../utils.ts'; /** @type {import('moleculer').ServiceActionsSchema} */ diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index d0acfc4b7..483e59cc3 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 2b522bfd9..c8f0e73c3 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index a8d19ffae..cead6d7ec 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,5 +1,5 @@ import rdf from '@rdfjs/data-model'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/generateId.ts b/src/middleware/packages/ldp/services/resource/actions/generateId.ts index 8ae23e100..46888a1eb 100644 --- a/src/middleware/packages/ldp/services/resource/actions/generateId.ts +++ b/src/middleware/packages/ldp/services/resource/actions/generateId.ts @@ -3,7 +3,7 @@ import createSlug from 'speakingurl'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index ef0b810b8..6b39c8487 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { buildBlankNodesQuery } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index 3778a0a4d..78f74e524 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getContainerFromUri } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts index ca08bfa08..ca6fe37c4 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getTypes.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getTypes.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 99a5800ab..8d0eb0d87 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 84d6b15cf..e98a527ba 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { cleanUndefined } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/resource/actions/upload.ts b/src/middleware/packages/ldp/services/resource/actions/upload.ts index c5f97fe20..28293c351 100644 --- a/src/middleware/packages/ldp/services/resource/actions/upload.ts +++ b/src/middleware/packages/ldp/services/resource/actions/upload.ts @@ -1,6 +1,6 @@ import path from 'path'; import fs from 'fs'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri, getContainerFromUri } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index cca5e4ed0..a91a5f3e0 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -1,4 +1,5 @@ -import { ServiceSchema, defineAction } from 'moleculer'; +import { defineAction } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import awaitCreateCompleteAction from './actions/awaitCreateComplete.ts'; import getAction from './actions/get.ts'; import createAction from './actions/create.ts'; diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts index 1951d1708..e1366a5cc 100644 --- a/src/middleware/packages/migration/service.ts +++ b/src/middleware/packages/migration/service.ts @@ -1,6 +1,6 @@ import { getAclUriFromResourceUri } from '@semapps/webacl'; import { getContainerFromUri } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const MigrationSchema = { name: 'migration' as const, diff --git a/src/middleware/packages/nodeinfo/service.ts b/src/middleware/packages/nodeinfo/service.ts index f48ab6628..da43f1ca3 100644 --- a/src/middleware/packages/nodeinfo/service.ts +++ b/src/middleware/packages/nodeinfo/service.ts @@ -1,6 +1,6 @@ import path from 'path'; import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const NodeinfoService = { name: 'nodeinfo' as const, diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index fbbf373e9..725cce4f1 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -2,7 +2,7 @@ import MailService from 'moleculer-mail'; import cronParser from 'cron-parser'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import DigestSubscriptionService from './subscription.ts'; const DigestNotificationsService = { diff --git a/src/middleware/packages/notifications/services/digest/subscription.ts b/src/middleware/packages/notifications/services/digest/subscription.ts index 59ea3afad..f1c83571e 100644 --- a/src/middleware/packages/notifications/services/digest/subscription.ts +++ b/src/middleware/packages/notifications/services/digest/subscription.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const DigestSubscriptionSchema = { name: 'digest.subscription' as const, diff --git a/src/middleware/packages/notifications/services/expo-push/device.ts b/src/middleware/packages/notifications/services/expo-push/device.ts index ab38a03ad..c886a9b83 100644 --- a/src/middleware/packages/notifications/services/expo-push/device.ts +++ b/src/middleware/packages/notifications/services/expo-push/device.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ExpoPushDeviceService = { name: 'expo-push.device' as const, diff --git a/src/middleware/packages/notifications/services/expo-push/notification.ts b/src/middleware/packages/notifications/services/expo-push/notification.ts index c18f8f5f8..c1387e3a6 100644 --- a/src/middleware/packages/notifications/services/expo-push/notification.ts +++ b/src/middleware/packages/notifications/services/expo-push/notification.ts @@ -1,7 +1,7 @@ import DbService from 'moleculer-db'; import { Expo } from 'expo-server-sdk'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ExpoPushNotificationService = { name: 'expo-push.notification' as const, diff --git a/src/middleware/packages/notifications/services/expo-push/service.ts b/src/middleware/packages/notifications/services/expo-push/service.ts index 0a6c7b047..d89ed7626 100644 --- a/src/middleware/packages/notifications/services/expo-push/service.ts +++ b/src/middleware/packages/notifications/services/expo-push/service.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ExpoPushDeviceService from './device.ts'; import ExpoPushNotificationService from './notification.ts'; diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 4c688cfbb..6bc45c7b6 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -3,7 +3,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; import { getSlugFromUri } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message diff --git a/src/middleware/packages/ontologies/actions/findNamespace.ts b/src/middleware/packages/ontologies/actions/findNamespace.ts index 28ac3dc7b..8dcd5deb6 100644 --- a/src/middleware/packages/ontologies/actions/findNamespace.ts +++ b/src/middleware/packages/ontologies/actions/findNamespace.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/findPrefix.ts b/src/middleware/packages/ontologies/actions/findPrefix.ts index 02fabf72c..de96676ce 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.ts +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ontologies/actions/get.ts b/src/middleware/packages/ontologies/actions/get.ts index eaef3b374..354a86181 100644 --- a/src/middleware/packages/ontologies/actions/get.ts +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index 831e97d8b..446c70400 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index 10a136889..95a7356f1 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index 0933b9d65..19e6e1d96 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 74f73735a..9f0cfde67 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL } from '../utils.ts'; const regexPrefix = /^([^:]+):([^:]+)$/gm; diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index 63e18bbd8..fe4c90663 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL, arrayOf } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index 7adcf1f0b..3cb86f28f 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -1,5 +1,5 @@ import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import OntologiesRegistryService from './sub-services/registry.ts'; import findPrefixAction from './actions/findPrefix.ts'; import findNamespaceAction from './actions/findNamespace.ts'; diff --git a/src/middleware/packages/ontologies/sub-services/registry.ts b/src/middleware/packages/ontologies/sub-services/registry.ts index 86f6af2e4..4fe71dace 100644 --- a/src/middleware/packages/ontologies/sub-services/registry.ts +++ b/src/middleware/packages/ontologies/sub-services/registry.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const OntologiesRegistrySchema = { name: 'ontologies.registry' as const, diff --git a/src/middleware/packages/solid/services/endpoint.ts b/src/middleware/packages/solid/services/endpoint.ts index 599d33b54..78456ae88 100644 --- a/src/middleware/packages/solid/services/endpoint.ts +++ b/src/middleware/packages/solid/services/endpoint.ts @@ -1,5 +1,5 @@ import { SpecialEndpointMixin } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SolidEndpointSchema = { name: 'solid-endpoint' as const, diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index ec822983e..24318a0e0 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -8,7 +8,7 @@ import rdf from '@rdfjs/data-model'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** * Solid Notification Channel mixin. diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index 580d13810..2a8c92c22 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; const queueOptions = diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index 101ae1c25..405d4dd1a 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; /** @type {import('moleculer').ServiceSchema} */ diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index a9a298881..003e867c6 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -8,7 +8,8 @@ import DbService from 'moleculer-db'; import { parseHeader, negotiateContentType, parseJson } from '@semapps/middlewares'; import { notify } from '@semapps/ontologies'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { Errors, ServiceSchema } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/solid/services/notifications/provider.ts b/src/middleware/packages/solid/services/notifications/provider.ts index f7c857a75..83bc1c16a 100644 --- a/src/middleware/packages/solid/services/notifications/provider.ts +++ b/src/middleware/packages/solid/services/notifications/provider.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; import { notify } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import WebhookChannelService from './channels/webhook-channel.ts'; import WebSocketChannelService from './channels/websocket-channel.ts'; diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index 33752ebab..d36029489 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -1,7 +1,7 @@ import { SingleResourceContainerMixin } from '@semapps/ldp'; import { pim } from '@semapps/ontologies'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SolidPreferencesFileSchema = { name: 'solid-preferences-file' as const, diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 4bfc43f7a..678d9d0ae 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; import { pim } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const SolidStorageSchema = { diff --git a/src/middleware/packages/solid/services/type-index/type-indexes.ts b/src/middleware/packages/solid/services/type-index/type-indexes.ts index faff81430..32e904727 100644 --- a/src/middleware/packages/solid/services/type-index/type-indexes.ts +++ b/src/middleware/packages/solid/services/type-index/type-indexes.ts @@ -2,7 +2,7 @@ import { ControlledContainerMixin, DereferenceMixin, delay, arrayOf } from '@sem import { solid, skos, apods } from '@semapps/ontologies'; import { MIME_TYPES } from '@semapps/mime-types'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import TypeRegistrationsService from './type-registrations.ts'; const TypeIndexesSchema = { diff --git a/src/middleware/packages/solid/services/type-index/type-registrations.ts b/src/middleware/packages/solid/services/type-index/type-registrations.ts index deef0bb3d..163b8cace 100644 --- a/src/middleware/packages/solid/services/type-index/type-registrations.ts +++ b/src/middleware/packages/solid/services/type-index/type-registrations.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const TypeRegistrationsSchema = { name: 'type-registrations' as const, diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 74851cc2e..2fe282c5b 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -1,6 +1,6 @@ import path from 'path'; import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getRoute from './getRoute.ts'; const SparqlEndpointService = { diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index a3a582319..68a653c2c 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -1,5 +1,5 @@ import { ActivitiesHandlerMixin, ACTIVITY_TYPES } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; const AggregatorSchema = { diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index e58426e5d..ea5191c3e 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { createFragmentURL, arrayOf } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index 5ea15c16d..0b793259a 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -1,6 +1,6 @@ import { arrayOf } from '@semapps/ldp'; import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SynchronizerService = { name: 'synchronizer' as const, diff --git a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts index 4abeb3bc5..2ac922a0d 100644 --- a/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts +++ b/src/middleware/packages/triplestore/actions/countTriplesOfSubject.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts index 2aa4f5d5e..3ce29fd66 100644 --- a/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts +++ b/src/middleware/packages/triplestore/actions/deleteOrphanBlankNodes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/dropAll.ts b/src/middleware/packages/triplestore/actions/dropAll.ts index 82b32ca28..097407adc 100644 --- a/src/middleware/packages/triplestore/actions/dropAll.ts +++ b/src/middleware/packages/triplestore/actions/dropAll.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 61d387e61..6b07eb3fa 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 4cef107f1..49a36a07d 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { MIME_TYPES, negotiateType } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/tripleExist.ts b/src/middleware/packages/triplestore/actions/tripleExist.ts index c0f06d476..4b69c649a 100644 --- a/src/middleware/packages/triplestore/actions/tripleExist.ts +++ b/src/middleware/packages/triplestore/actions/tripleExist.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index c899fd8ec..788e20ed5 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index 371d6916e..12a71b14e 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -2,7 +2,8 @@ import { SparqlJsonParser } from 'sparqljson-parse'; import sparqljsModule from 'sparqljs'; import fetch from 'node-fetch'; import { throw403, throw500 } from '@semapps/middlewares'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { defineAction } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import countTriplesOfSubject from './actions/countTriplesOfSubject.ts'; import deleteOrphanBlankNodes from './actions/deleteOrphanBlankNodes.ts'; import dropAll from './actions/dropAll.ts'; diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index a742c077b..6a7efea0a 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -4,7 +4,7 @@ import path from 'path'; import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'stri... Remove this comment to see the full error message import format from 'string-template'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; import datasetTemplate from '../templates/dataset.ttl.ts'; import secureDatasetTemplate from '../templates/secure-dataset.ttl.ts'; diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index a06fa5940..92cf88c31 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -5,7 +5,7 @@ import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; import { createFragmentURL, regexProtocolAndHostAndPort, arrayOf } from '@semapps/ldp'; import { parseHeader } from '@semapps/middlewares'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const { quad, namedNode, literal, blankNode } = DataFactory; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/bots/authorizer.ts b/src/middleware/packages/webacl/bots/authorizer.ts index a61d070ff..f0d664971 100644 --- a/src/middleware/packages/webacl/bots/authorizer.ts +++ b/src/middleware/packages/webacl/bots/authorizer.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const AuthorizerSchema = { name: 'authorizer' as const, diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index a9645cf83..7ae89d4ac 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import { throw403 } from '@semapps/middlewares'; import { arrayOf, defaultContainerOptions } from '@semapps/ldp'; import { getSlugFromUri } from '../utils.ts'; -import { Middleware } from 'moleculer'; +import type { Middleware } from 'moleculer'; const modifyActions = [ 'ldp.resource.create', diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index b3481561d..685728a25 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -1,5 +1,5 @@ import { acl, vcard, rdfs } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import WebAclResourceService from './services/resource/index.ts'; import WebAclGroupService from './services/group/index.ts'; import WebAclCacheService from './services/cache/index.ts'; diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index f74f51931..591869a70 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const WebaclCacheSchema = { name: 'webacl.cache' as const, diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 9e93fe351..fb886b531 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -1,6 +1,6 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 226494749..fc4eebb8c 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -2,7 +2,7 @@ import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index a11b7b09b..78427363a 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index a47fcf94e..13b193312 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index fca21dacb..dd9d00b2b 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const api = async function api(this: any, ctx: any) { if (this.settings.podProvider) ctx.meta.dataset = ctx.params.username; diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 3c956e536..bc9d1a6a1 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.ts b/src/middleware/packages/webacl/services/group/actions/getUri.ts index 2294ba30c..2192d5a0a 100644 --- a/src/middleware/packages/webacl/services/group/actions/getUri.ts +++ b/src/middleware/packages/webacl/services/group/actions/getUri.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 791752219..4d3b356b4 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index 73e77172f..3611ec755 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index 8a7addf31..93a55077a 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; -import { ServiceSchema, defineAction } from 'moleculer'; +import { defineAction } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import * as createAction from './actions/create.ts'; import * as deleteAction from './actions/delete.ts'; import * as existAction from './actions/exist.ts'; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index b4d89f23b..78beb6345 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index 1e097f88b..3078d243f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index a63783a8d..22d68e5ed 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index 1904e9b9d..f38d77d6f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index dbbb10573..91cba939c 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri } from '../../../utils.ts'; export const action = { diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index c41ee0b27..50fabaf25 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -3,7 +3,7 @@ import { DataFactory, Writer } from 'n3'; import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAuthorizationNode, checkAgentPresent, diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index 1a851f4a1..e932a51d9 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -1,6 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { arrayOf } from '@semapps/ldp'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index dec929e4b..74cb47397 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAuthorizationNode, checkAgentPresent, diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts index a63713a35..4a1f9254e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts +++ b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index efe7165e3..2fd605e17 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index ec762efe9..b60b6fcd9 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 7034ae4c7..ab4bb360f 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -1,7 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index 8b36a1832..e97264fed 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; -import { ServiceSchema, defineAction, Errors } from 'moleculer'; +import { defineAction, Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import * as addRights from './actions/addRights.ts'; import * as awaitReadRight from './actions/awaitReadRight.ts'; import * as deleteAllRights from './actions/deleteAllRights.ts'; diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts index 9d9f57044..709dfa3aa 100644 --- a/src/middleware/packages/webfinger/service.ts +++ b/src/middleware/packages/webfinger/service.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const WebfingerService = { name: 'webfinger' as const, diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index ab350d725..6a2c12981 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -1,7 +1,7 @@ import path from 'path'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { Errors } from 'moleculer'; diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 45971c3af..4edc40c28 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; import { foaf, schema } from '@semapps/ontologies'; import { ControlledContainerMixin, DereferenceMixin, getDatasetFromUri } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** @type {import('moleculer').ServiceSchema} */ const WebIdService = { From 4f72e9b7a2ec03ac0777ba82bb6b2e0b4e9aa25b Mon Sep 17 00:00:00 2001 From: srosset81 Date: Thu, 3 Sep 2026 17:14:25 +0200 Subject: [PATCH 165/165] Import moleculer's type-only exports with `import type` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same change as on master, applied here directly rather than merged: it touches the very import lines 2.0 has rewritten, so merging it across turned 5 conflicts into 126. `ServiceSchema`, `ActionSchema`, `Middleware`, `ServiceSettingSchema` and `CallingOptions` are types imported as values. tsc erases them either way, but Node's type stripping performs no type analysis and emits the import verbatim — and `moleculer` being CommonJS, the named export does not exist. That is what stops the ActivityPods Pod provider from running against linked semapps sources, where `main` points at `./index.ts`. `Errors`, `defineAction`, `Context` and `Cachers` exist at runtime and stay value imports. `tsc --noEmit` reports the same 293 errors before and after. Co-Authored-By: Claude Opus 5 --- .../packages/activitypub/mixins/activities-handler.ts | 2 +- src/middleware/packages/activitypub/mixins/bot.ts | 2 +- .../packages/activitypub/services/activity-mapping.ts | 2 +- .../packages/activitypub/services/activitypub/index.ts | 2 +- .../activitypub/services/activitypub/subservices/activity.ts | 2 +- .../activitypub/services/activitypub/subservices/actor.ts | 3 ++- .../activitypub/services/activitypub/subservices/api.ts | 2 +- .../services/activitypub/subservices/collection/actions/get.ts | 3 ++- .../services/activitypub/subservices/collection/index.ts | 3 ++- .../services/activitypub/subservices/collections-registry.ts | 3 ++- .../activitypub/services/activitypub/subservices/follow.ts | 2 +- .../activitypub/services/activitypub/subservices/inbox.ts | 3 ++- .../activitypub/services/activitypub/subservices/like.ts | 2 +- .../activitypub/services/activitypub/subservices/object.ts | 3 ++- .../activitypub/services/activitypub/subservices/outbox.ts | 2 +- .../activitypub/services/activitypub/subservices/reply.ts | 2 +- .../activitypub/services/activitypub/subservices/share.ts | 2 +- .../services/activitypub/subservices/side-effects.ts | 2 +- src/middleware/packages/activitypub/services/migration.ts | 2 +- src/middleware/packages/auth/mixins/auth.sso.ts | 2 +- src/middleware/packages/auth/mixins/auth.ts | 2 +- src/middleware/packages/auth/services/account.ts | 2 +- src/middleware/packages/auth/services/auth.cas.ts | 2 +- src/middleware/packages/auth/services/auth.local.ts | 3 ++- src/middleware/packages/auth/services/auth.oidc.ts | 2 +- src/middleware/packages/auth/services/jwt.ts | 2 +- src/middleware/packages/auth/services/mail.ts | 2 +- src/middleware/packages/auth/services/migration.ts | 2 +- src/middleware/packages/backup/index.ts | 2 +- src/middleware/packages/backup/indexTypes.d.ts | 3 ++- src/middleware/packages/core/service.ts | 2 +- src/middleware/packages/core/serviceTypes.d.ts | 3 ++- src/middleware/packages/crypto/keys/keys.ts | 2 +- src/middleware/packages/crypto/keys/private-keys-container.ts | 2 +- src/middleware/packages/crypto/keys/public-keys-container.ts | 2 +- src/middleware/packages/crypto/signature/http-signatures.ts | 2 +- src/middleware/packages/crypto/signature/proxy.ts | 2 +- src/middleware/packages/crypto/verifiable-credentials/api.ts | 2 +- .../packages/crypto/verifiable-credentials/authorizer.ts | 2 +- .../packages/crypto/verifiable-credentials/challenge.ts | 2 +- .../crypto/verifiable-credentials/credentials-container.ts | 2 +- .../packages/crypto/verifiable-credentials/data-integrity.ts | 2 +- .../packages/crypto/verifiable-credentials/holder.ts | 2 +- .../packages/crypto/verifiable-credentials/issuer.ts | 2 +- .../crypto/verifiable-credentials/presentations-container.ts | 2 +- src/middleware/packages/crypto/verifiable-credentials/vc.ts | 2 +- .../packages/crypto/verifiable-credentials/verifier.ts | 2 +- src/middleware/packages/importer/mixins/discourse.ts | 2 +- src/middleware/packages/importer/mixins/drupal.ts | 2 +- src/middleware/packages/importer/mixins/gogocarto.ts | 2 +- src/middleware/packages/importer/mixins/humhub.ts | 2 +- src/middleware/packages/importer/mixins/importer.ts | 2 +- src/middleware/packages/importer/mixins/jotform.ts | 2 +- src/middleware/packages/importer/mixins/mobilizon.ts | 2 +- src/middleware/packages/importer/mixins/prestashop.ts | 2 +- src/middleware/packages/importer/mixins/wordpress.ts | 2 +- src/middleware/packages/importer/mixins/yeswiki.ts | 2 +- src/middleware/packages/inference/service.ts | 2 +- src/middleware/packages/inference/subservices/remote.ts | 2 +- src/middleware/packages/jsonld/service.ts | 2 +- src/middleware/packages/jsonld/services/api/index.ts | 2 +- .../packages/jsonld/services/context/actions/merge.ts | 2 +- .../packages/jsonld/services/context/actions/parse.ts | 2 +- .../packages/jsonld/services/context/actions/validate.ts | 2 +- src/middleware/packages/jsonld/services/context/index.ts | 2 +- .../packages/jsonld/services/document-loader/index.ts | 2 +- src/middleware/packages/jsonld/services/parser/index.ts | 2 +- src/middleware/packages/ldp/mixins/controlled-container.ts | 2 +- src/middleware/packages/ldp/mixins/controlled-resource.ts | 3 ++- src/middleware/packages/ldp/mixins/dereference.ts | 2 +- src/middleware/packages/ldp/mixins/disassembly.ts | 2 +- src/middleware/packages/ldp/mixins/document-tagger.ts | 2 +- src/middleware/packages/ldp/mixins/image-processor.ts | 2 +- src/middleware/packages/ldp/mixins/mime-types.ts | 3 ++- src/middleware/packages/ldp/mixins/orphan-files-deletion.ts | 2 +- src/middleware/packages/ldp/mixins/special-endpoint.ts | 2 +- src/middleware/packages/ldp/service.ts | 2 +- src/middleware/packages/ldp/services/api/index.ts | 2 +- src/middleware/packages/ldp/services/binary/actions/delete.ts | 2 +- src/middleware/packages/ldp/services/binary/actions/get.ts | 2 +- src/middleware/packages/ldp/services/binary/actions/getRdf.ts | 2 +- .../packages/ldp/services/binary/actions/isBinary.ts | 2 +- src/middleware/packages/ldp/services/binary/actions/store.ts | 2 +- src/middleware/packages/ldp/services/binary/index.ts | 2 +- src/middleware/packages/ldp/services/cache/index.ts | 2 +- .../packages/ldp/services/container/actions/attach.ts | 3 ++- .../packages/ldp/services/container/actions/clear.ts | 2 +- .../packages/ldp/services/container/actions/create.ts | 2 +- .../packages/ldp/services/container/actions/delete.ts | 2 +- .../packages/ldp/services/container/actions/detach.ts | 2 +- .../packages/ldp/services/container/actions/exist.ts | 2 +- src/middleware/packages/ldp/services/container/actions/get.ts | 3 ++- .../packages/ldp/services/container/actions/getAll.ts | 2 +- .../packages/ldp/services/container/actions/getUris.ts | 2 +- .../packages/ldp/services/container/actions/includes.ts | 2 +- .../packages/ldp/services/container/actions/isEmpty.ts | 2 +- .../packages/ldp/services/container/actions/patch.ts | 3 ++- src/middleware/packages/ldp/services/container/actions/post.ts | 3 ++- src/middleware/packages/ldp/services/container/index.ts | 2 +- .../packages/ldp/services/link-header/actions/get.ts | 2 +- .../packages/ldp/services/link-header/actions/register.ts | 2 +- src/middleware/packages/ldp/services/link-header/index.ts | 2 +- .../packages/ldp/services/permissions/actions/addAuthorizer.ts | 2 +- .../packages/ldp/services/permissions/actions/check.ts | 3 ++- .../packages/ldp/services/permissions/actions/has.ts | 2 +- src/middleware/packages/ldp/services/permissions/index.ts | 2 +- .../packages/ldp/services/registry/actions/getByTypes.ts | 2 +- .../packages/ldp/services/registry/actions/getByUri.ts | 2 +- .../packages/ldp/services/registry/actions/getUri.ts | 2 +- src/middleware/packages/ldp/services/registry/actions/list.ts | 2 +- .../packages/ldp/services/registry/actions/register.ts | 2 +- src/middleware/packages/ldp/services/registry/index.ts | 2 +- src/middleware/packages/ldp/services/remote/actions/delete.ts | 2 +- src/middleware/packages/ldp/services/remote/actions/get.ts | 2 +- .../packages/ldp/services/remote/actions/getNetwork.ts | 3 ++- .../packages/ldp/services/remote/actions/getStored.ts | 3 ++- .../packages/ldp/services/remote/actions/isRemote.ts | 2 +- src/middleware/packages/ldp/services/remote/actions/store.ts | 2 +- src/middleware/packages/ldp/services/remote/index.ts | 3 ++- .../ldp/services/resource/actions/awaitCreateComplete.ts | 2 +- .../packages/ldp/services/resource/actions/create.ts | 3 ++- .../packages/ldp/services/resource/actions/delete.ts | 2 +- src/middleware/packages/ldp/services/resource/actions/exist.ts | 2 +- src/middleware/packages/ldp/services/resource/actions/get.ts | 3 ++- .../packages/ldp/services/resource/actions/getContainers.ts | 2 +- src/middleware/packages/ldp/services/resource/actions/patch.ts | 3 ++- src/middleware/packages/ldp/services/resource/actions/put.ts | 3 ++- src/middleware/packages/ldp/services/resource/index.ts | 2 +- src/middleware/packages/migration/0-4-0.ts | 2 +- src/middleware/packages/migration/0-7-0.ts | 2 +- src/middleware/packages/migration/2-0-0.ts | 2 +- src/middleware/packages/migration/redirect.ts | 2 +- src/middleware/packages/migration/service.ts | 2 +- src/middleware/packages/nodeinfo/service.ts | 2 +- .../packages/notifications/services/digest/service.ts | 2 +- .../packages/notifications/services/digest/subscription.ts | 2 +- .../packages/notifications/services/expo-push/device.ts | 2 +- .../packages/notifications/services/expo-push/notification.ts | 2 +- .../packages/notifications/services/expo-push/service.ts | 2 +- .../packages/notifications/services/single-mail/service.ts | 2 +- src/middleware/packages/ontologies/actions/findNamespace.ts | 2 +- src/middleware/packages/ontologies/actions/findPrefix.ts | 2 +- src/middleware/packages/ontologies/actions/get.ts | 2 +- src/middleware/packages/ontologies/actions/getPrefixes.ts | 2 +- src/middleware/packages/ontologies/actions/getRdfPrefixes.ts | 2 +- src/middleware/packages/ontologies/actions/list.ts | 2 +- src/middleware/packages/ontologies/actions/prefixToUri.ts | 2 +- src/middleware/packages/ontologies/actions/register.ts | 2 +- src/middleware/packages/ontologies/service.ts | 2 +- src/middleware/packages/ontologies/sub-services/registry.ts | 2 +- src/middleware/packages/solid/mixins/websocket.ts | 2 +- src/middleware/packages/solid/services/authorizer.ts | 2 +- src/middleware/packages/solid/services/endpoint.ts | 2 +- .../notifications/channels/notification-channel.mixin.ts | 2 +- .../solid/services/notifications/channels/webhook-channel.ts | 2 +- .../solid/services/notifications/channels/websocket-channel.ts | 2 +- .../packages/solid/services/notifications/listener.ts | 3 ++- .../packages/solid/services/notifications/provider.ts | 2 +- src/middleware/packages/solid/services/preferences-file.ts | 2 +- src/middleware/packages/solid/services/storage.ts | 2 +- .../packages/solid/services/type-index/private-type-index.ts | 3 ++- .../packages/solid/services/type-index/public-type-index.ts | 3 ++- .../packages/solid/services/type-index/type-index.ts | 2 +- src/middleware/packages/sparql-endpoint/service.ts | 3 ++- src/middleware/packages/sync/middlewares/objects-watcher.ts | 3 ++- src/middleware/packages/sync/services/aggregator.ts | 2 +- src/middleware/packages/sync/services/mirror.ts | 3 ++- src/middleware/packages/sync/services/synchronizer.ts | 2 +- src/middleware/packages/triplestore/actions/insert.ts | 2 +- src/middleware/packages/triplestore/actions/query.ts | 2 +- src/middleware/packages/triplestore/actions/update.ts | 2 +- src/middleware/packages/triplestore/service.ts | 3 ++- src/middleware/packages/triplestore/subservices/dataset.ts | 2 +- src/middleware/packages/triplestore/subservices/named-graph.ts | 2 +- src/middleware/packages/void/service.ts | 3 ++- src/middleware/packages/webacl/bots/authorizer-bot.ts | 2 +- src/middleware/packages/webacl/bots/groups-manager.ts | 2 +- src/middleware/packages/webacl/middlewares/webacl.ts | 2 +- src/middleware/packages/webacl/service.ts | 2 +- src/middleware/packages/webacl/services/authorizer/index.ts | 2 +- src/middleware/packages/webacl/services/cache/index.ts | 2 +- .../packages/webacl/services/group/actions/addMember.ts | 3 ++- .../packages/webacl/services/group/actions/create.ts | 3 ++- .../packages/webacl/services/group/actions/delete.ts | 3 ++- src/middleware/packages/webacl/services/group/actions/exist.ts | 3 ++- .../packages/webacl/services/group/actions/getGroups.ts | 2 +- .../packages/webacl/services/group/actions/getMembers.ts | 3 ++- .../packages/webacl/services/group/actions/getUri.ts | 2 +- .../packages/webacl/services/group/actions/isMember.ts | 3 ++- .../packages/webacl/services/group/actions/removeMember.ts | 3 ++- src/middleware/packages/webacl/services/group/index.ts | 2 +- .../packages/webacl/services/resource/actions/addRights.ts | 3 ++- .../webacl/services/resource/actions/awaitReadRight.ts | 2 +- .../webacl/services/resource/actions/deleteAllRights.ts | 2 +- .../webacl/services/resource/actions/deleteAllUserRights.ts | 2 +- .../packages/webacl/services/resource/actions/getLink.ts | 2 +- .../packages/webacl/services/resource/actions/getRights.ts | 3 ++- .../webacl/services/resource/actions/getUsersWithReadRights.ts | 2 +- .../packages/webacl/services/resource/actions/hasRights.ts | 2 +- .../packages/webacl/services/resource/actions/isPublic.ts | 2 +- .../services/resource/actions/refreshContainersRights.ts | 2 +- .../packages/webacl/services/resource/actions/removeRights.ts | 2 +- .../packages/webacl/services/resource/actions/setRights.ts | 3 ++- src/middleware/packages/webacl/services/resource/index.ts | 3 ++- src/middleware/packages/webfinger/service.ts | 2 +- src/middleware/packages/webhooks/service.ts | 3 ++- src/middleware/packages/webid/service.ts | 2 +- 207 files changed, 250 insertions(+), 207 deletions(-) diff --git a/src/middleware/packages/activitypub/mixins/activities-handler.ts b/src/middleware/packages/activitypub/mixins/activities-handler.ts index c1a175c11..69b87c574 100644 --- a/src/middleware/packages/activitypub/mixins/activities-handler.ts +++ b/src/middleware/packages/activitypub/mixins/activities-handler.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ActivitiesHandlerMixin = { dependencies: ['activitypub.side-effects'], diff --git a/src/middleware/packages/activitypub/mixins/bot.ts b/src/middleware/packages/activitypub/mixins/bot.ts index 4c09cf138..dd8270130 100644 --- a/src/middleware/packages/activitypub/mixins/bot.ts +++ b/src/middleware/packages/activitypub/mixins/bot.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { ACTOR_TYPES } from '../constants.ts'; import { getSlugFromUri, getContainerFromUri } from '../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activity-mapping.ts b/src/middleware/packages/activitypub/services/activity-mapping.ts index 106782fbd..4215cfee0 100644 --- a/src/middleware/packages/activitypub/services/activity-mapping.ts +++ b/src/middleware/packages/activitypub/services/activity-mapping.ts @@ -1,5 +1,5 @@ import Handlebars from 'handlebars'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import matchActivity from '../utils/matchActivity.ts'; import { ACTIVITY_TYPES } from '../constants.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/index.ts b/src/middleware/packages/activitypub/services/activitypub/index.ts index 99020da50..1910252af 100644 --- a/src/middleware/packages/activitypub/services/activitypub/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/index.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; import { as, sec } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActorService from './subservices/actor.ts'; import ActivityService from './subservices/activity.ts'; import ApiService from './subservices/api.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts index 051bb9e63..ff50bf184 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/activity.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { ControlledContainerMixin } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import setRightsHandler from './activity-handlers/setRightsHandler.ts'; import { arrayOf } from '../../../utils.ts'; import { PUBLIC_URI, FULL_ACTIVITY_TYPES } from '../../../constants.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts index cf006860d..df3cba3ad 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/actor.ts @@ -2,7 +2,8 @@ import fetch from 'node-fetch'; import rdf from '@rdfjs/data-model'; import { getDatasetFromUri } from '@semapps/ldp'; import { Account } from '@semapps/auth'; -import { ServiceSchema, Context } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { AS_PREFIX } from '../../../constants.ts'; import { waitForResource } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts index c39a4a2ba..9740e25b6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/api.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ApiService = { name: 'activitypub.api' as const, diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts index 5eb826209..945956225 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/actions/get.ts @@ -1,6 +1,7 @@ import { sanitizeSparqlUri } from '@semapps/triplestore'; import { getDatasetFromUri, getSlugFromUri } from '@semapps/ldp'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getValueFromDataType } from '../../../../../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts index 03b53099b..1b4d1054f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collection/index.ts @@ -2,7 +2,8 @@ import { ControlledContainerMixin, arrayOf, getDatasetFromUri, getSlugFromUri } import { sanitizeSparqlQuery } from '@semapps/triplestore'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import { CollectionRegistration } from '../../../../types.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts index 44c982f16..9a6d89ccd 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/collections-registry.ts @@ -2,7 +2,8 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; import { Account } from '@semapps/auth'; import { arrayOf, getDatasetFromUri } from '@semapps/ldp'; -import { ServiceSchema, Context } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { AS_PREFIX } from '../../../constants.ts'; import { CollectionRegistration } from '../../../types.ts'; import { getSlugFromUri } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts index 86cbd31e1..beb19ba9f 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/follow.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts index 3bac6f5a5..2224d8b58 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/inbox.ts @@ -1,6 +1,7 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { getSlugFromUri, isWebId } from '@semapps/ldp'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts index 65ae7dd6b..279c0835e 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/like.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, ACTOR_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts index 93ae6b21c..516d50a46 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/object.ts @@ -1,5 +1,6 @@ import { arrayOf, getType, Registration } from '@semapps/ldp'; -import { ServiceSchema, Context } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { OBJECT_TYPES, ACTIVITY_TYPES } from '../../../constants.ts'; const ObjectService = { diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts index 26e17d384..c40a69ec6 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/outbox.ts @@ -4,7 +4,7 @@ import { Errors as E } from 'moleculer-web'; import { Account } from '@semapps/auth'; import { MIME_TYPES } from '@semapps/mime-types'; import { getType, arrayOf, getDatasetFromUri, isWebId } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; import { ACTOR_TYPES } from '../../../constants.ts'; import AwaitActivityMixin from '../../../mixins/await-activity.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts index f28046c39..ef57d091d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/reply.ts @@ -1,5 +1,5 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES, OBJECT_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts index e8dd0cf7d..e77b0ded9 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/share.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ActivitiesHandlerMixin from '../../../mixins/activities-handler.ts'; import { ACTIVITY_TYPES } from '../../../constants.ts'; import { collectionPermissionsWithAnonRead } from '../../../utils.ts'; diff --git a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts index 20ea25880..21aa2fd4d 100644 --- a/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts +++ b/src/middleware/packages/activitypub/services/activitypub/subservices/side-effects.ts @@ -1,6 +1,6 @@ import { credentialsContext } from '@semapps/crypto'; import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import matchActivity from '../../../utils/matchActivity.ts'; /** diff --git a/src/middleware/packages/activitypub/services/migration.ts b/src/middleware/packages/activitypub/services/migration.ts index c0dba3c4f..9cdee9257 100644 --- a/src/middleware/packages/activitypub/services/migration.ts +++ b/src/middleware/packages/activitypub/services/migration.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { getSlugFromUri } from '../utils.ts'; const ActivitypubMigrationSchema = { diff --git a/src/middleware/packages/auth/mixins/auth.sso.ts b/src/middleware/packages/auth/mixins/auth.sso.ts index 568d10300..c6a603048 100644 --- a/src/middleware/packages/auth/mixins/auth.sso.ts +++ b/src/middleware/packages/auth/mixins/auth.sso.ts @@ -1,7 +1,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'expr... Remove this comment to see the full error message import session from 'express-session'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthMixin from './auth.ts'; import saveRedirectUrl from '../middlewares/saveRedirectUrl.ts'; import redirectToFront from '../middlewares/redirectToFront.ts'; diff --git a/src/middleware/packages/auth/mixins/auth.ts b/src/middleware/packages/auth/mixins/auth.ts index 8bd672b9a..4747b85d5 100644 --- a/src/middleware/packages/auth/mixins/auth.ts +++ b/src/middleware/packages/auth/mixins/auth.ts @@ -3,7 +3,7 @@ import passport from 'passport'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthAccountService from '../services/account.ts'; import AuthJWTService from '../services/jwt.ts'; diff --git a/src/middleware/packages/auth/services/account.ts b/src/middleware/packages/auth/services/account.ts index 384168887..1635cd65e 100644 --- a/src/middleware/packages/auth/services/account.ts +++ b/src/middleware/packages/auth/services/account.ts @@ -5,7 +5,7 @@ import createSlug from 'speakingurl'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; import crypto from 'crypto'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { Account } from '../types.ts'; // Taken from https://stackoverflow.com/a/9204568/7900695 diff --git a/src/middleware/packages/auth/services/auth.cas.ts b/src/middleware/packages/auth/services/auth.cas.ts index 26bb1bca9..10ecf48a2 100644 --- a/src/middleware/packages/auth/services/auth.cas.ts +++ b/src/middleware/packages/auth/services/auth.cas.ts @@ -2,7 +2,7 @@ import { Strategy } from 'passport-cas2'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthSSOMixin from '../mixins/auth.sso.ts'; const AuthCASService = { diff --git a/src/middleware/packages/auth/services/auth.local.ts b/src/middleware/packages/auth/services/auth.local.ts index 1f4096969..75fc101ed 100644 --- a/src/middleware/packages/auth/services/auth.local.ts +++ b/src/middleware/packages/auth/services/auth.local.ts @@ -1,7 +1,8 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'pass... Remove this comment to see the full error message import { Strategy } from 'passport-local'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { Account } from '../types.ts'; import AuthMixin from '../mixins/auth.ts'; import sendToken from '../middlewares/sendToken.ts'; diff --git a/src/middleware/packages/auth/services/auth.oidc.ts b/src/middleware/packages/auth/services/auth.oidc.ts index 708481927..80a4b5cf0 100644 --- a/src/middleware/packages/auth/services/auth.oidc.ts +++ b/src/middleware/packages/auth/services/auth.oidc.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'open... Remove this comment to see the full error message import { Issuer, Strategy, custom } from 'openid-client'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthSSOMixin from '../mixins/auth.sso.ts'; custom.setHttpOptionsDefaults({ diff --git a/src/middleware/packages/auth/services/jwt.ts b/src/middleware/packages/auth/services/jwt.ts index f43375f27..8ca99cc19 100644 --- a/src/middleware/packages/auth/services/jwt.ts +++ b/src/middleware/packages/auth/services/jwt.ts @@ -3,7 +3,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'json... Remove this comment to see the full error message import jwt from 'jsonwebtoken'; import crypto from 'crypto'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** * Service that creates and validates JSON web tokens(JWT). diff --git a/src/middleware/packages/auth/services/mail.ts b/src/middleware/packages/auth/services/mail.ts index c84c0a7c3..5ae6a61e9 100644 --- a/src/middleware/packages/auth/services/mail.ts +++ b/src/middleware/packages/auth/services/mail.ts @@ -2,7 +2,7 @@ import path from 'path'; import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; // @ts-expect-error TS(1470): The 'import.meta' meta-property is not allowed in ... Remove this comment to see the full error message diff --git a/src/middleware/packages/auth/services/migration.ts b/src/middleware/packages/auth/services/migration.ts index 1833fe91a..46161d5a6 100644 --- a/src/middleware/packages/auth/services/migration.ts +++ b/src/middleware/packages/auth/services/migration.ts @@ -1,5 +1,5 @@ import { getSlugFromUri } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const AuthMigrationSchema = { name: 'auth.migration' as const, diff --git a/src/middleware/packages/backup/index.ts b/src/middleware/packages/backup/index.ts index d59d68cb0..31f621d99 100644 --- a/src/middleware/packages/backup/index.ts +++ b/src/middleware/packages/backup/index.ts @@ -3,7 +3,7 @@ import fs from 'fs'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'fs-e... Remove this comment to see the full error message import { emptyDirSync } from 'fs-extra'; import pathModule from 'path'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import fsCopy from './utils/fsCopy.ts'; import ftpCopy from './utils/ftpCopy.ts'; import rsyncCopy from './utils/rsyncCopy.ts'; diff --git a/src/middleware/packages/backup/indexTypes.d.ts b/src/middleware/packages/backup/indexTypes.d.ts index f2b8358b5..0cef59ecd 100644 --- a/src/middleware/packages/backup/indexTypes.d.ts +++ b/src/middleware/packages/backup/indexTypes.d.ts @@ -1,4 +1,5 @@ -import { Context, ServiceSchema, CallingOptions } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema, CallingOptions } from 'moleculer'; interface LocalServerSettings { fusekiBase: string | null; diff --git a/src/middleware/packages/core/service.ts b/src/middleware/packages/core/service.ts index 2dcf2f8fe..065b0221f 100644 --- a/src/middleware/packages/core/service.ts +++ b/src/middleware/packages/core/service.ts @@ -11,7 +11,7 @@ import { WebAclService } from '@semapps/webacl'; import { WebfingerService } from '@semapps/webfinger'; import { KeysService, SignatureService } from '@semapps/crypto'; import { WebIdService } from '@semapps/webid'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { CoreServiceSettings } from './serviceTypes.ts'; const CoreService = { diff --git a/src/middleware/packages/core/serviceTypes.d.ts b/src/middleware/packages/core/serviceTypes.d.ts index 71a98d662..bd391ff52 100644 --- a/src/middleware/packages/core/serviceTypes.d.ts +++ b/src/middleware/packages/core/serviceTypes.d.ts @@ -1,4 +1,5 @@ -import { Context, ServiceSettingSchema } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSettingSchema } from 'moleculer'; import { Ontology } from '@semapps/ontologies'; import { AdapterInterface } from '@semapps/triplestore'; diff --git a/src/middleware/packages/crypto/keys/keys.ts b/src/middleware/packages/crypto/keys/keys.ts index 31a74905c..bda8e0582 100644 --- a/src/middleware/packages/crypto/keys/keys.ts +++ b/src/middleware/packages/crypto/keys/keys.ts @@ -4,7 +4,7 @@ import rdf from '@rdfjs/data-model'; import { sec } from '@semapps/ontologies'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; import PrivateKeyContainerService from './private-keys-container.ts'; diff --git a/src/middleware/packages/crypto/keys/private-keys-container.ts b/src/middleware/packages/crypto/keys/private-keys-container.ts index b4c589777..3bfe0e58e 100644 --- a/src/middleware/packages/crypto/keys/private-keys-container.ts +++ b/src/middleware/packages/crypto/keys/private-keys-container.ts @@ -1,7 +1,7 @@ import { ControlledContainerMixin } from '@semapps/ldp'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils/utils.ts'; import { KEY_TYPES } from '../constants.ts'; diff --git a/src/middleware/packages/crypto/keys/public-keys-container.ts b/src/middleware/packages/crypto/keys/public-keys-container.ts index c2489b1ac..018a09629 100644 --- a/src/middleware/packages/crypto/keys/public-keys-container.ts +++ b/src/middleware/packages/crypto/keys/public-keys-container.ts @@ -2,7 +2,7 @@ import rdf from '@rdfjs/data-model'; import { ControlledContainerMixin, arrayOf } from '@semapps/ldp'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; /** diff --git a/src/middleware/packages/crypto/signature/http-signatures.ts b/src/middleware/packages/crypto/signature/http-signatures.ts index c39482174..aac19f0db 100644 --- a/src/middleware/packages/crypto/signature/http-signatures.ts +++ b/src/middleware/packages/crypto/signature/http-signatures.ts @@ -5,7 +5,7 @@ import { parseRequest, verifySignature } from 'http-signature'; import { createAuthzHeader, createSignatureString } from 'http-signature-header'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; const HttpSignatureService = { diff --git a/src/middleware/packages/crypto/signature/proxy.ts b/src/middleware/packages/crypto/signature/proxy.ts index e70e3a654..754382828 100644 --- a/src/middleware/packages/crypto/signature/proxy.ts +++ b/src/middleware/packages/crypto/signature/proxy.ts @@ -5,7 +5,7 @@ import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares'; import fetch from 'node-fetch'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const stream2buffer = (stream: any) => { return new Promise((resolve, reject) => { diff --git a/src/middleware/packages/crypto/verifiable-credentials/api.ts b/src/middleware/packages/crypto/verifiable-credentials/api.ts index de6141752..6a404749e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/api.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/api.ts @@ -7,7 +7,7 @@ import { saveDatasetMeta } from '@semapps/middlewares'; import path from 'node:path'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { VC_API_PATH } from '../constants.ts'; const middlewares = [saveDatasetMeta, parseHeader, negotiateAccept, negotiateContentType, parseRawBody, parseJson]; diff --git a/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts b/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts index 170cc6e7b..39ea969b7 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/authorizer.ts @@ -1,5 +1,5 @@ import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; // Check, if a capability grants access to the resource. const hasValidCapability = async (ctx: any, resourceUri: any, mode: any) => { diff --git a/src/middleware/packages/crypto/verifiable-credentials/challenge.ts b/src/middleware/packages/crypto/verifiable-credentials/challenge.ts index 246143619..5667306a2 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/challenge.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/challenge.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; /** * Service to generate challenges upon request. diff --git a/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts b/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts index 626f8d6f4..563c8f0ef 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/credentials-container.ts @@ -1,5 +1,5 @@ import { ControlledContainerMixin } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; /** diff --git a/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts b/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts index 4fb96d2bd..e6606df51 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/data-integrity.ts @@ -9,7 +9,7 @@ import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES } from '../constants.ts'; const { diff --git a/src/middleware/packages/crypto/verifiable-credentials/holder.ts b/src/middleware/packages/crypto/verifiable-credentials/holder.ts index ef1e53875..f885b80f5 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/holder.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/holder.ts @@ -11,7 +11,7 @@ import * as vc from '@digitalbazaar/vc'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; const { diff --git a/src/middleware/packages/crypto/verifiable-credentials/issuer.ts b/src/middleware/packages/crypto/verifiable-credentials/issuer.ts index 4f97da939..87070beea 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/issuer.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/issuer.ts @@ -6,7 +6,7 @@ import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; import * as vc from '@digitalbazaar/vc'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { KEY_TYPES, credentialsContext } from '../constants.ts'; const { diff --git a/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts b/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts index b4e1c5b88..6b5074e00 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/presentations-container.ts @@ -1,5 +1,5 @@ import { ControlledContainerMixin } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { credentialsContext, credentialsContextNoGraphProof } from '../constants.ts'; /** diff --git a/src/middleware/packages/crypto/verifiable-credentials/vc.ts b/src/middleware/packages/crypto/verifiable-credentials/vc.ts index 04b98adff..41bc65e10 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/vc.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/vc.ts @@ -1,5 +1,5 @@ import { did, cred } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import AuthorizerService from './authorizer.ts'; import HolderService from './holder.ts'; import IssuerService from './issuer.ts'; diff --git a/src/middleware/packages/crypto/verifiable-credentials/verifier.ts b/src/middleware/packages/crypto/verifiable-credentials/verifier.ts index 597431cc8..268a2d55e 100644 --- a/src/middleware/packages/crypto/verifiable-credentials/verifier.ts +++ b/src/middleware/packages/crypto/verifiable-credentials/verifier.ts @@ -4,7 +4,7 @@ import { cryptosuite } from '@digitalbazaar/eddsa-rdfc-2022-cryptosuite'; import { DataIntegrityProof } from '@digitalbazaar/data-integrity'; // @ts-expect-error TS(7016): Could not find a declaration file for module '@dig... Remove this comment to see the full error message import * as vc from '@digitalbazaar/vc'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import VCCapabilityPresentationProofPurpose from '../utils/VcCapabilityPresentationProofPurpose.ts'; import VCPurpose from '../utils/VcPurpose.ts'; import { arrayOf } from '../utils/utils.ts'; diff --git a/src/middleware/packages/importer/mixins/discourse.ts b/src/middleware/packages/importer/mixins/discourse.ts index 8af5d043d..0bb9bcb1b 100644 --- a/src/middleware/packages/importer/mixins/discourse.ts +++ b/src/middleware/packages/importer/mixins/discourse.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/drupal.ts b/src/middleware/packages/importer/mixins/drupal.ts index f5e32bd3a..f3f644296 100644 --- a/src/middleware/packages/importer/mixins/drupal.ts +++ b/src/middleware/packages/importer/mixins/drupal.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/gogocarto.ts b/src/middleware/packages/importer/mixins/gogocarto.ts index c5850ea18..a894e1ee7 100644 --- a/src/middleware/packages/importer/mixins/gogocarto.ts +++ b/src/middleware/packages/importer/mixins/gogocarto.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/humhub.ts b/src/middleware/packages/importer/mixins/humhub.ts index 3abae620f..3abcf8c43 100644 --- a/src/middleware/packages/importer/mixins/humhub.ts +++ b/src/middleware/packages/importer/mixins/humhub.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/importer.ts b/src/middleware/packages/importer/mixins/importer.ts index 6ccaa6944..e3122c792 100644 --- a/src/middleware/packages/importer/mixins/importer.ts +++ b/src/middleware/packages/importer/mixins/importer.ts @@ -2,7 +2,7 @@ import fetch from 'node-fetch'; import cronParser from 'cron-parser'; import { promises as fsPromises } from 'fs'; import { ACTIVITY_TYPES, PUBLIC_URI } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { isDir } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/jotform.ts b/src/middleware/packages/importer/mixins/jotform.ts index 048315f4e..f15b88b88 100644 --- a/src/middleware/packages/importer/mixins/jotform.ts +++ b/src/middleware/packages/importer/mixins/jotform.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/mobilizon.ts b/src/middleware/packages/importer/mixins/mobilizon.ts index 2d4867d4c..08687b7ac 100644 --- a/src/middleware/packages/importer/mixins/mobilizon.ts +++ b/src/middleware/packages/importer/mixins/mobilizon.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/prestashop.ts b/src/middleware/packages/importer/mixins/prestashop.ts index 2955c6740..d873a3e5e 100644 --- a/src/middleware/packages/importer/mixins/prestashop.ts +++ b/src/middleware/packages/importer/mixins/prestashop.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/importer/mixins/wordpress.ts b/src/middleware/packages/importer/mixins/wordpress.ts index b03b9c2bb..ed39a3353 100644 --- a/src/middleware/packages/importer/mixins/wordpress.ts +++ b/src/middleware/packages/importer/mixins/wordpress.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { getSlugFromUri, delay } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; const Schema = { diff --git a/src/middleware/packages/importer/mixins/yeswiki.ts b/src/middleware/packages/importer/mixins/yeswiki.ts index 39bdbc548..f130a48ec 100644 --- a/src/middleware/packages/importer/mixins/yeswiki.ts +++ b/src/middleware/packages/importer/mixins/yeswiki.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ImporterMixin from './importer.ts'; import { convertToIsoString } from '../utils.ts'; diff --git a/src/middleware/packages/inference/service.ts b/src/middleware/packages/inference/service.ts index 554a465d9..8f8821965 100644 --- a/src/middleware/packages/inference/service.ts +++ b/src/middleware/packages/inference/service.ts @@ -1,6 +1,6 @@ import fetch from 'node-fetch'; import N3 from 'n3'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import RemoteService from './subservices/remote.ts'; const { DataFactory } = N3; diff --git a/src/middleware/packages/inference/subservices/remote.ts b/src/middleware/packages/inference/subservices/remote.ts index dca471a6a..3f5e0d66f 100644 --- a/src/middleware/packages/inference/subservices/remote.ts +++ b/src/middleware/packages/inference/subservices/remote.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch'; import N3 from 'n3'; import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin, matchActivity } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const { DataFactory } = N3; const { triple, namedNode } = DataFactory; diff --git a/src/middleware/packages/jsonld/service.ts b/src/middleware/packages/jsonld/service.ts index 0931b4f0b..37fdcd611 100644 --- a/src/middleware/packages/jsonld/service.ts +++ b/src/middleware/packages/jsonld/service.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import JsonLdApiService from './services/api/index.ts'; import JsonLdContextService from './services/context/index.ts'; import JsonLdDocumentLoaderService from './services/document-loader/index.ts'; diff --git a/src/middleware/packages/jsonld/services/api/index.ts b/src/middleware/packages/jsonld/services/api/index.ts index 701e1778a..9b7436c6c 100644 --- a/src/middleware/packages/jsonld/services/api/index.ts +++ b/src/middleware/packages/jsonld/services/api/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const JsonldApiSchema = { name: 'jsonld.api' as const, diff --git a/src/middleware/packages/jsonld/services/context/actions/merge.ts b/src/middleware/packages/jsonld/services/context/actions/merge.ts index ccb70bc95..544a9d453 100644 --- a/src/middleware/packages/jsonld/services/context/actions/merge.ts +++ b/src/middleware/packages/jsonld/services/context/actions/merge.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL, isObject, mergeObjectInArray } from '../../../utils/utils.ts'; const Schema = { diff --git a/src/middleware/packages/jsonld/services/context/actions/parse.ts b/src/middleware/packages/jsonld/services/context/actions/parse.ts index 5ed0864db..c61f20b5c 100644 --- a/src/middleware/packages/jsonld/services/context/actions/parse.ts +++ b/src/middleware/packages/jsonld/services/context/actions/parse.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/jsonld/services/context/actions/validate.ts b/src/middleware/packages/jsonld/services/context/actions/validate.ts index 1f578fcc9..4ad1b655a 100644 --- a/src/middleware/packages/jsonld/services/context/actions/validate.ts +++ b/src/middleware/packages/jsonld/services/context/actions/validate.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/jsonld/services/context/index.ts b/src/middleware/packages/jsonld/services/context/index.ts index faeba89d7..1ae082c7f 100644 --- a/src/middleware/packages/jsonld/services/context/index.ts +++ b/src/middleware/packages/jsonld/services/context/index.ts @@ -1,5 +1,5 @@ import { ContextParser } from 'jsonld-context-parser'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import getLocalAction from './actions/getLocal.ts'; import mergeAction from './actions/merge.ts'; diff --git a/src/middleware/packages/jsonld/services/document-loader/index.ts b/src/middleware/packages/jsonld/services/document-loader/index.ts index 07b77fe33..55f13c05c 100644 --- a/src/middleware/packages/jsonld/services/document-loader/index.ts +++ b/src/middleware/packages/jsonld/services/document-loader/index.ts @@ -2,7 +2,7 @@ import jsonld from 'jsonld'; import fsModule from 'fs'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'lru-... Remove this comment to see the full error message import LRU from 'lru-cache'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const fsPromises = fsModule.promises; diff --git a/src/middleware/packages/jsonld/services/parser/index.ts b/src/middleware/packages/jsonld/services/parser/index.ts index f25c5da77..2eddb7f98 100644 --- a/src/middleware/packages/jsonld/services/parser/index.ts +++ b/src/middleware/packages/jsonld/services/parser/index.ts @@ -4,7 +4,7 @@ import { JsonLdParser } from 'jsonld-streaming-parser'; import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import streamifyString from 'streamify-string'; import rdfParser from 'rdf-parse'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { getId, isObject } from '@semapps/ldp'; import { arrayOf, isURI } from '../../utils/utils.ts'; diff --git a/src/middleware/packages/ldp/mixins/controlled-container.ts b/src/middleware/packages/ldp/mixins/controlled-container.ts index 68863cf70..27a338d0d 100644 --- a/src/middleware/packages/ldp/mixins/controlled-container.ts +++ b/src/middleware/packages/ldp/mixins/controlled-container.ts @@ -1,6 +1,6 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf, delay } from '../utils.ts'; const ControlledContainerMixin = { diff --git a/src/middleware/packages/ldp/mixins/controlled-resource.ts b/src/middleware/packages/ldp/mixins/controlled-resource.ts index ea5d40d13..87af86fdc 100644 --- a/src/middleware/packages/ldp/mixins/controlled-resource.ts +++ b/src/middleware/packages/ldp/mixins/controlled-resource.ts @@ -1,4 +1,5 @@ -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf, delay } from '../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/mixins/dereference.ts b/src/middleware/packages/ldp/mixins/dereference.ts index 5e3a21f15..b01364daa 100644 --- a/src/middleware/packages/ldp/mixins/dereference.ts +++ b/src/middleware/packages/ldp/mixins/dereference.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { isObject, arrayOf } from '../utils.ts'; /** diff --git a/src/middleware/packages/ldp/mixins/disassembly.ts b/src/middleware/packages/ldp/mixins/disassembly.ts index 08e00315c..e5030601b 100644 --- a/src/middleware/packages/ldp/mixins/disassembly.ts +++ b/src/middleware/packages/ldp/mixins/disassembly.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/mixins/document-tagger.ts b/src/middleware/packages/ldp/mixins/document-tagger.ts index 6eeae576b..288d76996 100644 --- a/src/middleware/packages/ldp/mixins/document-tagger.ts +++ b/src/middleware/packages/ldp/mixins/document-tagger.ts @@ -1,5 +1,5 @@ import { dc } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { getDatasetFromUri, getSlugFromUri } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/mixins/image-processor.ts b/src/middleware/packages/ldp/mixins/image-processor.ts index aea064b4e..4b2748fc9 100644 --- a/src/middleware/packages/ldp/mixins/image-processor.ts +++ b/src/middleware/packages/ldp/mixins/image-processor.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'shar... Remove this comment to see the full error message import sharp from 'sharp'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { arrayOf } from '../utils.ts'; const SUPPORTED_IMAGES_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp']; diff --git a/src/middleware/packages/ldp/mixins/mime-types.ts b/src/middleware/packages/ldp/mixins/mime-types.ts index 731dff9d5..adeb63679 100644 --- a/src/middleware/packages/ldp/mixins/mime-types.ts +++ b/src/middleware/packages/ldp/mixins/mime-types.ts @@ -1,5 +1,6 @@ import { isMimeTypeMatching } from '@semapps/mime-types'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts index 5ac896ee0..f45ae0a84 100644 --- a/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts +++ b/src/middleware/packages/ldp/mixins/orphan-files-deletion.ts @@ -1,5 +1,5 @@ import { CronJob } from 'cron'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { getSlugFromUri } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/mixins/special-endpoint.ts b/src/middleware/packages/ldp/mixins/special-endpoint.ts index 535b100d5..b0785ccb7 100644 --- a/src/middleware/packages/ldp/mixins/special-endpoint.ts +++ b/src/middleware/packages/ldp/mixins/special-endpoint.ts @@ -8,7 +8,7 @@ import { negotiateContentType, parseJson } from '@semapps/middlewares'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SpecialEndpointMixin = { settings: { diff --git a/src/middleware/packages/ldp/service.ts b/src/middleware/packages/ldp/service.ts index 36f164b1e..439918d6e 100644 --- a/src/middleware/packages/ldp/service.ts +++ b/src/middleware/packages/ldp/service.ts @@ -1,5 +1,5 @@ import { dc, ldp, semapps, stat } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import LdpApiService from './services/api/index.ts'; import LdpBinaryService from './services/binary/index.ts'; import LdpContainerService from './services/container/index.ts'; diff --git a/src/middleware/packages/ldp/services/api/index.ts b/src/middleware/packages/ldp/services/api/index.ts index 8c24c4994..bfe872e5d 100644 --- a/src/middleware/packages/ldp/services/api/index.ts +++ b/src/middleware/packages/ldp/services/api/index.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import headAction from './actions/head.ts'; diff --git a/src/middleware/packages/ldp/services/binary/actions/delete.ts b/src/middleware/packages/ldp/services/binary/actions/delete.ts index e2e07aed8..54b8f0551 100644 --- a/src/middleware/packages/ldp/services/binary/actions/delete.ts +++ b/src/middleware/packages/ldp/services/binary/actions/delete.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const DeleteAction = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/binary/actions/get.ts b/src/middleware/packages/ldp/services/binary/actions/get.ts index 0d08cd0ca..3f7bb3a1e 100644 --- a/src/middleware/packages/ldp/services/binary/actions/get.ts +++ b/src/middleware/packages/ldp/services/binary/actions/get.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Binary } from '../../../types.ts'; const GetAction = { diff --git a/src/middleware/packages/ldp/services/binary/actions/getRdf.ts b/src/middleware/packages/ldp/services/binary/actions/getRdf.ts index 9344f9c33..36c7efd78 100644 --- a/src/middleware/packages/ldp/services/binary/actions/getRdf.ts +++ b/src/middleware/packages/ldp/services/binary/actions/getRdf.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Binary } from '../../../types.ts'; const getRdfAction = { diff --git a/src/middleware/packages/ldp/services/binary/actions/isBinary.ts b/src/middleware/packages/ldp/services/binary/actions/isBinary.ts index 056ad481f..31fe1d575 100644 --- a/src/middleware/packages/ldp/services/binary/actions/isBinary.ts +++ b/src/middleware/packages/ldp/services/binary/actions/isBinary.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const IsBinaryAction = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/binary/actions/store.ts b/src/middleware/packages/ldp/services/binary/actions/store.ts index 69f22cff7..9d9b613c5 100644 --- a/src/middleware/packages/ldp/services/binary/actions/store.ts +++ b/src/middleware/packages/ldp/services/binary/actions/store.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const StoreAction = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/binary/index.ts b/src/middleware/packages/ldp/services/binary/index.ts index f8d711688..17d54df7a 100644 --- a/src/middleware/packages/ldp/services/binary/index.ts +++ b/src/middleware/packages/ldp/services/binary/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import storeAction from './actions/store.ts'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; diff --git a/src/middleware/packages/ldp/services/cache/index.ts b/src/middleware/packages/ldp/services/cache/index.ts index f1ef64053..b619039f8 100644 --- a/src/middleware/packages/ldp/services/cache/index.ts +++ b/src/middleware/packages/ldp/services/cache/index.ts @@ -1,5 +1,5 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const LdpCacheSchema = { name: 'ldp.cache' as const, diff --git a/src/middleware/packages/ldp/services/container/actions/attach.ts b/src/middleware/packages/ldp/services/container/actions/attach.ts index 85696954a..f969b2201 100644 --- a/src/middleware/packages/ldp/services/container/actions/attach.ts +++ b/src/middleware/packages/ldp/services/container/actions/attach.ts @@ -1,5 +1,6 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/container/actions/clear.ts b/src/middleware/packages/ldp/services/container/actions/clear.ts index 12ed95a4c..e4c59e296 100644 --- a/src/middleware/packages/ldp/services/container/actions/clear.ts +++ b/src/middleware/packages/ldp/services/container/actions/clear.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/create.ts b/src/middleware/packages/ldp/services/container/actions/create.ts index b60b3b928..e6b2d216c 100644 --- a/src/middleware/packages/ldp/services/container/actions/create.ts +++ b/src/middleware/packages/ldp/services/container/actions/create.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import urlJoin from 'url-join'; const CreateAction = { diff --git a/src/middleware/packages/ldp/services/container/actions/delete.ts b/src/middleware/packages/ldp/services/container/actions/delete.ts index d951be4ef..d4a02a81e 100644 --- a/src/middleware/packages/ldp/services/container/actions/delete.ts +++ b/src/middleware/packages/ldp/services/container/actions/delete.ts @@ -1,5 +1,5 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/container/actions/detach.ts b/src/middleware/packages/ldp/services/container/actions/detach.ts index b5c8d598f..38c2ea368 100644 --- a/src/middleware/packages/ldp/services/container/actions/detach.ts +++ b/src/middleware/packages/ldp/services/container/actions/detach.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/container/actions/exist.ts b/src/middleware/packages/ldp/services/container/actions/exist.ts index 4b9754717..a5c05d714 100644 --- a/src/middleware/packages/ldp/services/container/actions/exist.ts +++ b/src/middleware/packages/ldp/services/container/actions/exist.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/get.ts b/src/middleware/packages/ldp/services/container/actions/get.ts index 73fa26a3a..5952bbe91 100644 --- a/src/middleware/packages/ldp/services/container/actions/get.ts +++ b/src/middleware/packages/ldp/services/container/actions/get.ts @@ -1,5 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { buildFiltersQuery, isContainer, cleanUndefined, arrayOf, getSlugFromUri } from '../../../utils.ts'; import { Registration } from '../../../types.ts'; diff --git a/src/middleware/packages/ldp/services/container/actions/getAll.ts b/src/middleware/packages/ldp/services/container/actions/getAll.ts index 37abfe27e..1e4cbadb7 100644 --- a/src/middleware/packages/ldp/services/container/actions/getAll.ts +++ b/src/middleware/packages/ldp/services/container/actions/getAll.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/getUris.ts b/src/middleware/packages/ldp/services/container/actions/getUris.ts index 09ac50c2f..32ce27a90 100644 --- a/src/middleware/packages/ldp/services/container/actions/getUris.ts +++ b/src/middleware/packages/ldp/services/container/actions/getUris.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/container/actions/includes.ts b/src/middleware/packages/ldp/services/container/actions/includes.ts index a97db9b0d..1c3b3c725 100644 --- a/src/middleware/packages/ldp/services/container/actions/includes.ts +++ b/src/middleware/packages/ldp/services/container/actions/includes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts index 0705e9865..566aeedaf 100644 --- a/src/middleware/packages/ldp/services/container/actions/isEmpty.ts +++ b/src/middleware/packages/ldp/services/container/actions/isEmpty.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/container/actions/patch.ts b/src/middleware/packages/ldp/services/container/actions/patch.ts index 2b4fe208f..2425b53a0 100644 --- a/src/middleware/packages/ldp/services/container/actions/patch.ts +++ b/src/middleware/packages/ldp/services/container/actions/patch.ts @@ -1,4 +1,5 @@ -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isMirror } from '../../../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/container/actions/post.ts b/src/middleware/packages/ldp/services/container/actions/post.ts index 727e835a5..6ca29c73a 100644 --- a/src/middleware/packages/ldp/services/container/actions/post.ts +++ b/src/middleware/packages/ldp/services/container/actions/post.ts @@ -1,7 +1,8 @@ import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { cleanUndefined, getSlugFromUri } from '../../../utils.ts'; import { Registration } from '../../../types.ts'; diff --git a/src/middleware/packages/ldp/services/container/index.ts b/src/middleware/packages/ldp/services/container/index.ts index 3e0c501cc..2a46d5770 100644 --- a/src/middleware/packages/ldp/services/container/index.ts +++ b/src/middleware/packages/ldp/services/container/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import attachAction from './actions/attach.ts'; import clearAction from './actions/clear.ts'; import createAction from './actions/create.ts'; diff --git a/src/middleware/packages/ldp/services/link-header/actions/get.ts b/src/middleware/packages/ldp/services/link-header/actions/get.ts index 58ff14e99..54d8cf2ad 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/get.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/get.ts @@ -1,5 +1,5 @@ import LinkHeader from 'http-link-header'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Registration } from '../../../types.ts'; const GetAction = { diff --git a/src/middleware/packages/ldp/services/link-header/actions/register.ts b/src/middleware/packages/ldp/services/link-header/actions/register.ts index 05b0059cc..05252f49d 100644 --- a/src/middleware/packages/ldp/services/link-header/actions/register.ts +++ b/src/middleware/packages/ldp/services/link-header/actions/register.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/link-header/index.ts b/src/middleware/packages/ldp/services/link-header/index.ts index 6b9ab347e..615b9b0af 100644 --- a/src/middleware/packages/ldp/services/link-header/index.ts +++ b/src/middleware/packages/ldp/services/link-header/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getAction from './actions/get.ts'; import registerAction from './actions/register.ts'; diff --git a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts index 938a3e53b..5d3ac1da7 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/addAuthorizer.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/permissions/actions/check.ts b/src/middleware/packages/ldp/services/permissions/actions/check.ts index 06b790ebe..6488fb494 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/check.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/check.ts @@ -1,4 +1,5 @@ -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/permissions/actions/has.ts b/src/middleware/packages/ldp/services/permissions/actions/has.ts index 837fc3da5..0aac31a48 100644 --- a/src/middleware/packages/ldp/services/permissions/actions/has.ts +++ b/src/middleware/packages/ldp/services/permissions/actions/has.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/permissions/index.ts b/src/middleware/packages/ldp/services/permissions/index.ts index 473377e8b..c146a087f 100644 --- a/src/middleware/packages/ldp/services/permissions/index.ts +++ b/src/middleware/packages/ldp/services/permissions/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import addAuthorizerAction from './actions/addAuthorizer.ts'; import checkAction from './actions/check.ts'; import hasAction from './actions/has.ts'; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts index 4d3ddf44b..eef7e29cc 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByTypes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { arrayOf } from '../../../utils.ts'; import { Registration } from '../../../types.ts'; diff --git a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts index 9e7476366..bc59f8496 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getByUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getByUri.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { TypeRegistration } from '@semapps/solid'; /** diff --git a/src/middleware/packages/ldp/services/registry/actions/getUri.ts b/src/middleware/packages/ldp/services/registry/actions/getUri.ts index 60f3f60f0..c89b5ab4d 100644 --- a/src/middleware/packages/ldp/services/registry/actions/getUri.ts +++ b/src/middleware/packages/ldp/services/registry/actions/getUri.ts @@ -1,5 +1,5 @@ import { TypeRegistration } from '@semapps/solid'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; /** * Get the container or resource URI based on its type diff --git a/src/middleware/packages/ldp/services/registry/actions/list.ts b/src/middleware/packages/ldp/services/registry/actions/list.ts index 00f16a66b..accd5ec88 100644 --- a/src/middleware/packages/ldp/services/registry/actions/list.ts +++ b/src/middleware/packages/ldp/services/registry/actions/list.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Registration } from '../../../types.ts'; const ListAction = { diff --git a/src/middleware/packages/ldp/services/registry/actions/register.ts b/src/middleware/packages/ldp/services/registry/actions/register.ts index 1df0615ce..c34456d61 100644 --- a/src/middleware/packages/ldp/services/registry/actions/register.ts +++ b/src/middleware/packages/ldp/services/registry/actions/register.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { Registration } from '../../../types.ts'; const RegisterAction = { diff --git a/src/middleware/packages/ldp/services/registry/index.ts b/src/middleware/packages/ldp/services/registry/index.ts index 1816181b0..c73dd9f78 100644 --- a/src/middleware/packages/ldp/services/registry/index.ts +++ b/src/middleware/packages/ldp/services/registry/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import GetByTypesAction from './actions/getByTypes.ts'; import GetByUriAction from './actions/getByUri.ts'; import GetUriAction from './actions/getUri.ts'; diff --git a/src/middleware/packages/ldp/services/remote/actions/delete.ts b/src/middleware/packages/ldp/services/remote/actions/delete.ts index c0398907b..13d245825 100644 --- a/src/middleware/packages/ldp/services/remote/actions/delete.ts +++ b/src/middleware/packages/ldp/services/remote/actions/delete.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const DeleteAction = { diff --git a/src/middleware/packages/ldp/services/remote/actions/get.ts b/src/middleware/packages/ldp/services/remote/actions/get.ts index ea547de6b..a15501920 100644 --- a/src/middleware/packages/ldp/services/remote/actions/get.ts +++ b/src/middleware/packages/ldp/services/remote/actions/get.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { cleanUndefined, isWebId } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts index d2c17ed9e..68b4dd858 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getNetwork.ts @@ -1,6 +1,7 @@ import fetch from 'node-fetch'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/remote/actions/getStored.ts b/src/middleware/packages/ldp/services/remote/actions/getStored.ts index 480591f7c..446f2194b 100644 --- a/src/middleware/packages/ldp/services/remote/actions/getStored.ts +++ b/src/middleware/packages/ldp/services/remote/actions/getStored.ts @@ -1,4 +1,5 @@ -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts index 42aceb656..feefb34e6 100644 --- a/src/middleware/packages/ldp/services/remote/actions/isRemote.ts +++ b/src/middleware/packages/ldp/services/remote/actions/isRemote.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const IsRemoteAction = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/remote/actions/store.ts b/src/middleware/packages/ldp/services/remote/actions/store.ts index e0ea8e9a0..42a8b63a2 100644 --- a/src/middleware/packages/ldp/services/remote/actions/store.ts +++ b/src/middleware/packages/ldp/services/remote/actions/store.ts @@ -1,6 +1,6 @@ // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri, hasType } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/remote/index.ts b/src/middleware/packages/ldp/services/remote/index.ts index d70152a07..fd06d89ba 100644 --- a/src/middleware/packages/ldp/services/remote/index.ts +++ b/src/middleware/packages/ldp/services/remote/index.ts @@ -1,4 +1,5 @@ -import { Service, ServiceSchema } from 'moleculer'; +import { Service } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import deleteAction from './actions/delete.ts'; import getAction from './actions/get.ts'; import getNetworkAction from './actions/getNetwork.ts'; diff --git a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts index c1362915b..f13ee7279 100644 --- a/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/awaitCreateComplete.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { waitForResource } from '../../../utils.ts'; /** @type {import('moleculer').ServiceActionsSchema} */ diff --git a/src/middleware/packages/ldp/services/resource/actions/create.ts b/src/middleware/packages/ldp/services/resource/actions/create.ts index b4282bed8..a2f8befe1 100644 --- a/src/middleware/packages/ldp/services/resource/actions/create.ts +++ b/src/middleware/packages/ldp/services/resource/actions/create.ts @@ -1,6 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import { getSlugFromUri } from '@semapps/webacl'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.ts b/src/middleware/packages/ldp/services/resource/actions/delete.ts index 0d2431723..6b4891744 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.ts +++ b/src/middleware/packages/ldp/services/resource/actions/delete.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/resource/actions/exist.ts b/src/middleware/packages/ldp/services/resource/actions/exist.ts index 4fb8889f1..afdad77ec 100644 --- a/src/middleware/packages/ldp/services/resource/actions/exist.ts +++ b/src/middleware/packages/ldp/services/resource/actions/exist.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ldp/services/resource/actions/get.ts b/src/middleware/packages/ldp/services/resource/actions/get.ts index e8ca0e363..3eba0a96d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/get.ts +++ b/src/middleware/packages/ldp/services/resource/actions/get.ts @@ -1,5 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts index e0ad00987..2a96aa6a1 100644 --- a/src/middleware/packages/ldp/services/resource/actions/getContainers.ts +++ b/src/middleware/packages/ldp/services/resource/actions/getContainers.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const GetContainersAction = { visibility: 'public', diff --git a/src/middleware/packages/ldp/services/resource/actions/patch.ts b/src/middleware/packages/ldp/services/resource/actions/patch.ts index 96be2310a..33be10cd9 100644 --- a/src/middleware/packages/ldp/services/resource/actions/patch.ts +++ b/src/middleware/packages/ldp/services/resource/actions/patch.ts @@ -1,5 +1,6 @@ import rdf from '@rdfjs/data-model'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/resource/actions/put.ts b/src/middleware/packages/ldp/services/resource/actions/put.ts index 11b1a16cf..7c2c4e78d 100644 --- a/src/middleware/packages/ldp/services/resource/actions/put.ts +++ b/src/middleware/packages/ldp/services/resource/actions/put.ts @@ -1,5 +1,6 @@ import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { cleanUndefined, getSlugFromUri } from '../../../utils.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/ldp/services/resource/index.ts b/src/middleware/packages/ldp/services/resource/index.ts index ed4db42ce..36f7424e5 100644 --- a/src/middleware/packages/ldp/services/resource/index.ts +++ b/src/middleware/packages/ldp/services/resource/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import awaitCreateCompleteAction from './actions/awaitCreateComplete.ts'; import getAction from './actions/get.ts'; import createAction from './actions/create.ts'; diff --git a/src/middleware/packages/migration/0-4-0.ts b/src/middleware/packages/migration/0-4-0.ts index fe2d22191..177012338 100644 --- a/src/middleware/packages/migration/0-4-0.ts +++ b/src/middleware/packages/migration/0-4-0.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { getSlugFromUri } from '@semapps/ldp'; export default { diff --git a/src/middleware/packages/migration/0-7-0.ts b/src/middleware/packages/migration/0-7-0.ts index 9cc431ed7..c5c748133 100644 --- a/src/middleware/packages/migration/0-7-0.ts +++ b/src/middleware/packages/migration/0-7-0.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; export default { name: 'migration-0-7-0', diff --git a/src/middleware/packages/migration/2-0-0.ts b/src/middleware/packages/migration/2-0-0.ts index 5d6f47d1b..05dca62f3 100644 --- a/src/middleware/packages/migration/2-0-0.ts +++ b/src/middleware/packages/migration/2-0-0.ts @@ -1,6 +1,6 @@ import path from 'path'; import fs from 'fs'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { IBindings } from 'sparqljson-parse'; import urlJoin from 'url-join'; import { Account } from '@semapps/auth'; diff --git a/src/middleware/packages/migration/redirect.ts b/src/middleware/packages/migration/redirect.ts index 2bf1992c7..0351c694e 100644 --- a/src/middleware/packages/migration/redirect.ts +++ b/src/middleware/packages/migration/redirect.ts @@ -3,7 +3,7 @@ import path from 'path'; import urlJoin from 'url-join'; // @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message import { Errors as E } from 'moleculer-web'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { parseUrl } from '@semapps/middlewares'; const RedirectService = { diff --git a/src/middleware/packages/migration/service.ts b/src/middleware/packages/migration/service.ts index 647d1a01d..3023b292e 100644 --- a/src/middleware/packages/migration/service.ts +++ b/src/middleware/packages/migration/service.ts @@ -1,5 +1,5 @@ import { getAclUriFromResourceUri } from '@semapps/webacl'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const MigrationService = { name: 'migration' as const, diff --git a/src/middleware/packages/nodeinfo/service.ts b/src/middleware/packages/nodeinfo/service.ts index f48ab6628..da43f1ca3 100644 --- a/src/middleware/packages/nodeinfo/service.ts +++ b/src/middleware/packages/nodeinfo/service.ts @@ -1,6 +1,6 @@ import path from 'path'; import urlJoin from 'url-join'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const NodeinfoService = { name: 'nodeinfo' as const, diff --git a/src/middleware/packages/notifications/services/digest/service.ts b/src/middleware/packages/notifications/services/digest/service.ts index fbbf373e9..725cce4f1 100644 --- a/src/middleware/packages/notifications/services/digest/service.ts +++ b/src/middleware/packages/notifications/services/digest/service.ts @@ -2,7 +2,7 @@ import MailService from 'moleculer-mail'; import cronParser from 'cron-parser'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import DigestSubscriptionService from './subscription.ts'; const DigestNotificationsService = { diff --git a/src/middleware/packages/notifications/services/digest/subscription.ts b/src/middleware/packages/notifications/services/digest/subscription.ts index 59ea3afad..f1c83571e 100644 --- a/src/middleware/packages/notifications/services/digest/subscription.ts +++ b/src/middleware/packages/notifications/services/digest/subscription.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const DigestSubscriptionSchema = { name: 'digest.subscription' as const, diff --git a/src/middleware/packages/notifications/services/expo-push/device.ts b/src/middleware/packages/notifications/services/expo-push/device.ts index ab38a03ad..c886a9b83 100644 --- a/src/middleware/packages/notifications/services/expo-push/device.ts +++ b/src/middleware/packages/notifications/services/expo-push/device.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ExpoPushDeviceService = { name: 'expo-push.device' as const, diff --git a/src/middleware/packages/notifications/services/expo-push/notification.ts b/src/middleware/packages/notifications/services/expo-push/notification.ts index c18f8f5f8..c1387e3a6 100644 --- a/src/middleware/packages/notifications/services/expo-push/notification.ts +++ b/src/middleware/packages/notifications/services/expo-push/notification.ts @@ -1,7 +1,7 @@ import DbService from 'moleculer-db'; import { Expo } from 'expo-server-sdk'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const ExpoPushNotificationService = { name: 'expo-push.notification' as const, diff --git a/src/middleware/packages/notifications/services/expo-push/service.ts b/src/middleware/packages/notifications/services/expo-push/service.ts index 0a6c7b047..d89ed7626 100644 --- a/src/middleware/packages/notifications/services/expo-push/service.ts +++ b/src/middleware/packages/notifications/services/expo-push/service.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import ExpoPushDeviceService from './device.ts'; import ExpoPushNotificationService from './notification.ts'; diff --git a/src/middleware/packages/notifications/services/single-mail/service.ts b/src/middleware/packages/notifications/services/single-mail/service.ts index 406ec89ae..ec8346ca7 100644 --- a/src/middleware/packages/notifications/services/single-mail/service.ts +++ b/src/middleware/packages/notifications/services/single-mail/service.ts @@ -3,7 +3,7 @@ import path from 'path'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import MailService from 'moleculer-mail'; import { getDatasetFromUri } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/src/middleware/packages/ontologies/actions/findNamespace.ts b/src/middleware/packages/ontologies/actions/findNamespace.ts index 28ac3dc7b..8dcd5deb6 100644 --- a/src/middleware/packages/ontologies/actions/findNamespace.ts +++ b/src/middleware/packages/ontologies/actions/findNamespace.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/findPrefix.ts b/src/middleware/packages/ontologies/actions/findPrefix.ts index 02fabf72c..de96676ce 100644 --- a/src/middleware/packages/ontologies/actions/findPrefix.ts +++ b/src/middleware/packages/ontologies/actions/findPrefix.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ontologies/actions/get.ts b/src/middleware/packages/ontologies/actions/get.ts index 52da3d741..ae57e68f9 100644 --- a/src/middleware/packages/ontologies/actions/get.ts +++ b/src/middleware/packages/ontologies/actions/get.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/getPrefixes.ts b/src/middleware/packages/ontologies/actions/getPrefixes.ts index f1f0dd225..be9000021 100644 --- a/src/middleware/packages/ontologies/actions/getPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getPrefixes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts index 6f9f9cd28..6746d5ff8 100644 --- a/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts +++ b/src/middleware/packages/ontologies/actions/getRdfPrefixes.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/list.ts b/src/middleware/packages/ontologies/actions/list.ts index 0933b9d65..19e6e1d96 100644 --- a/src/middleware/packages/ontologies/actions/list.ts +++ b/src/middleware/packages/ontologies/actions/list.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const Schema = { visibility: 'public', diff --git a/src/middleware/packages/ontologies/actions/prefixToUri.ts b/src/middleware/packages/ontologies/actions/prefixToUri.ts index 9ad9cec21..9bfcfe1e3 100644 --- a/src/middleware/packages/ontologies/actions/prefixToUri.ts +++ b/src/middleware/packages/ontologies/actions/prefixToUri.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL } from '../utils.ts'; const regexPrefix = /^([^:]+):([^:]+)$/gm; diff --git a/src/middleware/packages/ontologies/actions/register.ts b/src/middleware/packages/ontologies/actions/register.ts index 7ecb57803..a96972582 100644 --- a/src/middleware/packages/ontologies/actions/register.ts +++ b/src/middleware/packages/ontologies/actions/register.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { isURL, arrayOf } from '../utils.ts'; const Schema = { diff --git a/src/middleware/packages/ontologies/service.ts b/src/middleware/packages/ontologies/service.ts index 18c75b3c9..0e853ae4a 100644 --- a/src/middleware/packages/ontologies/service.ts +++ b/src/middleware/packages/ontologies/service.ts @@ -1,5 +1,5 @@ import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import OntologiesRegistryService from './sub-services/registry.ts'; import findPrefixAction from './actions/findPrefix.ts'; import findNamespaceAction from './actions/findNamespace.ts'; diff --git a/src/middleware/packages/ontologies/sub-services/registry.ts b/src/middleware/packages/ontologies/sub-services/registry.ts index 86f6af2e4..4fe71dace 100644 --- a/src/middleware/packages/ontologies/sub-services/registry.ts +++ b/src/middleware/packages/ontologies/sub-services/registry.ts @@ -1,6 +1,6 @@ import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const OntologiesRegistrySchema = { name: 'ontologies.registry' as const, diff --git a/src/middleware/packages/solid/mixins/websocket.ts b/src/middleware/packages/solid/mixins/websocket.ts index d6691dafd..40dbb63be 100644 --- a/src/middleware/packages/solid/mixins/websocket.ts +++ b/src/middleware/packages/solid/mixins/websocket.ts @@ -2,7 +2,7 @@ import urlJoin from 'url-join'; import { Socket } from 'net'; import { WebSocketServer } from 'ws'; import http, { IncomingMessage, ServerResponse } from 'http'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { WebSocketConnection, WebSocketHandlers } from '../types.ts'; /** diff --git a/src/middleware/packages/solid/services/authorizer.ts b/src/middleware/packages/solid/services/authorizer.ts index 03aac8802..5f5e9331c 100644 --- a/src/middleware/packages/solid/services/authorizer.ts +++ b/src/middleware/packages/solid/services/authorizer.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SolidAuthorizerSchema = { name: 'solid-authorizer' as const, diff --git a/src/middleware/packages/solid/services/endpoint.ts b/src/middleware/packages/solid/services/endpoint.ts index 599d33b54..78456ae88 100644 --- a/src/middleware/packages/solid/services/endpoint.ts +++ b/src/middleware/packages/solid/services/endpoint.ts @@ -1,5 +1,5 @@ import { SpecialEndpointMixin } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SolidEndpointSchema = { name: 'solid-endpoint' as const, diff --git a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts index 9445a927f..91ff2ea9d 100644 --- a/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts +++ b/src/middleware/packages/solid/services/notifications/channels/notification-channel.mixin.ts @@ -7,7 +7,7 @@ import rdf from '@rdfjs/data-model'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; import moment from 'moment'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { WacPermission } from '@semapps/webacl'; import { Account } from '@semapps/auth'; import { NotificationChannel } from '../../../types.ts'; diff --git a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts index 5a8ea1c27..dddf2c9a2 100644 --- a/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/webhook-channel.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; import { NotificationChannel } from '../../../types.ts'; diff --git a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts index db55e3eac..f86b15e72 100644 --- a/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts +++ b/src/middleware/packages/solid/services/notifications/channels/websocket-channel.ts @@ -1,7 +1,7 @@ import urlJoin from 'url-join'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidV4 } from 'uuid'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import NotificationChannelMixin from './notification-channel.mixin.ts'; import { NotificationChannel } from '../../../types.ts'; diff --git a/src/middleware/packages/solid/services/notifications/listener.ts b/src/middleware/packages/solid/services/notifications/listener.ts index 5d27e4ebd..e81f12be2 100644 --- a/src/middleware/packages/solid/services/notifications/listener.ts +++ b/src/middleware/packages/solid/services/notifications/listener.ts @@ -2,7 +2,8 @@ import path from 'path'; import urlJoin from 'url-join'; import fetch from 'node-fetch'; import LinkHeader from 'http-link-header'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; // @ts-expect-error TS(7016): Could not find a declaration file for module 'uuid... Remove this comment to see the full error message import { v4 as uuidv4 } from 'uuid'; import DbService from 'moleculer-db'; diff --git a/src/middleware/packages/solid/services/notifications/provider.ts b/src/middleware/packages/solid/services/notifications/provider.ts index f7c857a75..83bc1c16a 100644 --- a/src/middleware/packages/solid/services/notifications/provider.ts +++ b/src/middleware/packages/solid/services/notifications/provider.ts @@ -1,7 +1,7 @@ // @ts-expect-error TS(7016): Could not find a declaration file for module 'mole... Remove this comment to see the full error message import QueueMixin from 'moleculer-bull'; import { notify } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import WebhookChannelService from './channels/webhook-channel.ts'; import WebSocketChannelService from './channels/websocket-channel.ts'; diff --git a/src/middleware/packages/solid/services/preferences-file.ts b/src/middleware/packages/solid/services/preferences-file.ts index ece1e044b..387171c7d 100644 --- a/src/middleware/packages/solid/services/preferences-file.ts +++ b/src/middleware/packages/solid/services/preferences-file.ts @@ -1,7 +1,7 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import { pim } from '@semapps/ontologies'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SolidPreferencesFileSchema = { name: 'solid-preferences-file' as const, diff --git a/src/middleware/packages/solid/services/storage.ts b/src/middleware/packages/solid/services/storage.ts index 9f1188338..1b2f93135 100644 --- a/src/middleware/packages/solid/services/storage.ts +++ b/src/middleware/packages/solid/services/storage.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { pim } from '@semapps/ontologies'; import { Registration, arrayOf } from '@semapps/ldp'; diff --git a/src/middleware/packages/solid/services/type-index/private-type-index.ts b/src/middleware/packages/solid/services/type-index/private-type-index.ts index ea10475c9..c030a1716 100644 --- a/src/middleware/packages/solid/services/type-index/private-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/private-type-index.ts @@ -1,6 +1,7 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema, Context } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const PrivateTypeIndexService = { name: 'private-type-index' as const, diff --git a/src/middleware/packages/solid/services/type-index/public-type-index.ts b/src/middleware/packages/solid/services/type-index/public-type-index.ts index fdfc51ad9..aef5e0a66 100644 --- a/src/middleware/packages/solid/services/type-index/public-type-index.ts +++ b/src/middleware/packages/solid/services/type-index/public-type-index.ts @@ -1,6 +1,7 @@ import { ControlledResourceMixin } from '@semapps/ldp'; import rdf from '@rdfjs/data-model'; -import { ServiceSchema, Context } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const PublicTypeIndexService = { name: 'public-type-index' as const, diff --git a/src/middleware/packages/solid/services/type-index/type-index.ts b/src/middleware/packages/solid/services/type-index/type-index.ts index 0c68e9fe8..478b9a531 100644 --- a/src/middleware/packages/solid/services/type-index/type-index.ts +++ b/src/middleware/packages/solid/services/type-index/type-index.ts @@ -1,7 +1,7 @@ import rdf from '@rdfjs/data-model'; import { arrayOf, getSlugFromUri } from '@semapps/ldp'; import { solid, skos, apods } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import PublicTypeIndexService from './public-type-index.ts'; import PrivateTypeIndexService from './private-type-index.ts'; import { TypeRegistration } from '../../types.ts'; diff --git a/src/middleware/packages/sparql-endpoint/service.ts b/src/middleware/packages/sparql-endpoint/service.ts index 6122cb646..851831915 100644 --- a/src/middleware/packages/sparql-endpoint/service.ts +++ b/src/middleware/packages/sparql-endpoint/service.ts @@ -2,7 +2,8 @@ import path from 'path'; import urlJoin from 'url-join'; import { Account } from '@semapps/auth'; import { voidOntology } from '@semapps/ontologies'; -import { ServiceSchema, Context } from 'moleculer'; +import { Context } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getRoute from './getRoute.ts'; const SparqlEndpointService = { diff --git a/src/middleware/packages/sync/middlewares/objects-watcher.ts b/src/middleware/packages/sync/middlewares/objects-watcher.ts index bdbae1ac5..33c54568a 100644 --- a/src/middleware/packages/sync/middlewares/objects-watcher.ts +++ b/src/middleware/packages/sync/middlewares/objects-watcher.ts @@ -1,5 +1,6 @@ import { PUBLIC_URI, ACTIVITY_TYPES } from '@semapps/activitypub'; -import { Middleware, ServiceBroker } from 'moleculer'; +import { ServiceBroker } from 'moleculer'; +import type { Middleware } from 'moleculer'; interface MiddlewareConfig { baseUrl?: string; diff --git a/src/middleware/packages/sync/services/aggregator.ts b/src/middleware/packages/sync/services/aggregator.ts index a8ae33555..62c294a46 100644 --- a/src/middleware/packages/sync/services/aggregator.ts +++ b/src/middleware/packages/sync/services/aggregator.ts @@ -1,5 +1,5 @@ import { ActivitiesHandlerMixin, ACTIVITY_TYPES } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; const AggregatorService = { diff --git a/src/middleware/packages/sync/services/mirror.ts b/src/middleware/packages/sync/services/mirror.ts index 24b62df1d..0548fc9ba 100644 --- a/src/middleware/packages/sync/services/mirror.ts +++ b/src/middleware/packages/sync/services/mirror.ts @@ -2,7 +2,8 @@ import urlJoin from 'url-join'; import fetch from 'node-fetch'; import { createFragmentURL, arrayOf, getId, getSlugFromUri } from '@semapps/ldp'; import { ACTIVITY_TYPES } from '@semapps/activitypub'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import SynchronizerService from './synchronizer.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/sync/services/synchronizer.ts b/src/middleware/packages/sync/services/synchronizer.ts index c34fb1b86..13ac9bb8d 100644 --- a/src/middleware/packages/sync/services/synchronizer.ts +++ b/src/middleware/packages/sync/services/synchronizer.ts @@ -1,6 +1,6 @@ import { arrayOf } from '@semapps/ldp'; import { ACTIVITY_TYPES, OBJECT_TYPES, ActivitiesHandlerMixin } from '@semapps/activitypub'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const SynchronizerService = { name: 'synchronizer' as const, diff --git a/src/middleware/packages/triplestore/actions/insert.ts b/src/middleware/packages/triplestore/actions/insert.ts index 0455a23ba..49bbb358d 100644 --- a/src/middleware/packages/triplestore/actions/insert.ts +++ b/src/middleware/packages/triplestore/actions/insert.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const InsertAction = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/query.ts b/src/middleware/packages/triplestore/actions/query.ts index 327f4590f..8c74dd798 100644 --- a/src/middleware/packages/triplestore/actions/query.ts +++ b/src/middleware/packages/triplestore/actions/query.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const QueryAction = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/actions/update.ts b/src/middleware/packages/triplestore/actions/update.ts index 3f9dbd977..28d54511d 100644 --- a/src/middleware/packages/triplestore/actions/update.ts +++ b/src/middleware/packages/triplestore/actions/update.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const UpdateAction = { visibility: 'public', diff --git a/src/middleware/packages/triplestore/service.ts b/src/middleware/packages/triplestore/service.ts index aeb9dbc34..71e80e45f 100644 --- a/src/middleware/packages/triplestore/service.ts +++ b/src/middleware/packages/triplestore/service.ts @@ -1,5 +1,6 @@ import sparqljsModule from 'sparqljs'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import insert from './actions/insert.ts'; import query from './actions/query.ts'; import update from './actions/update.ts'; diff --git a/src/middleware/packages/triplestore/subservices/dataset.ts b/src/middleware/packages/triplestore/subservices/dataset.ts index 36cdb825d..3672936fc 100644 --- a/src/middleware/packages/triplestore/subservices/dataset.ts +++ b/src/middleware/packages/triplestore/subservices/dataset.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { AdapterInterface } from '../adapters/base.ts'; const DatasetService = { diff --git a/src/middleware/packages/triplestore/subservices/named-graph.ts b/src/middleware/packages/triplestore/subservices/named-graph.ts index 93c98e579..61e09d20b 100644 --- a/src/middleware/packages/triplestore/subservices/named-graph.ts +++ b/src/middleware/packages/triplestore/subservices/named-graph.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { AdapterInterface } from '../adapters/base.ts'; const NamedGraphService = { diff --git a/src/middleware/packages/void/service.ts b/src/middleware/packages/void/service.ts index 03361665e..3690965a1 100644 --- a/src/middleware/packages/void/service.ts +++ b/src/middleware/packages/void/service.ts @@ -5,7 +5,8 @@ import { JsonLdSerializer } from 'jsonld-streaming-serializer'; import { DataFactory, Writer } from 'n3'; import { createFragmentURL, arrayOf, Registration } from '@semapps/ldp'; import { parseHeader } from '@semapps/middlewares'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const { quad, namedNode, literal, blankNode } = DataFactory; diff --git a/src/middleware/packages/webacl/bots/authorizer-bot.ts b/src/middleware/packages/webacl/bots/authorizer-bot.ts index e93ed9dbe..9177fb9d9 100644 --- a/src/middleware/packages/webacl/bots/authorizer-bot.ts +++ b/src/middleware/packages/webacl/bots/authorizer-bot.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const AuthorizerBotSchema = { name: 'authorizer-bot' as const, diff --git a/src/middleware/packages/webacl/bots/groups-manager.ts b/src/middleware/packages/webacl/bots/groups-manager.ts index c31148cf0..35674c0d2 100644 --- a/src/middleware/packages/webacl/bots/groups-manager.ts +++ b/src/middleware/packages/webacl/bots/groups-manager.ts @@ -1,5 +1,5 @@ import { arrayOf } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import { hasType } from '../utils.ts'; const GroupsManagerSchema = { diff --git a/src/middleware/packages/webacl/middlewares/webacl.ts b/src/middleware/packages/webacl/middlewares/webacl.ts index 752bfbd37..9a465fc67 100644 --- a/src/middleware/packages/webacl/middlewares/webacl.ts +++ b/src/middleware/packages/webacl/middlewares/webacl.ts @@ -1,6 +1,6 @@ import urlJoin from 'url-join'; import { defaultContainerOptions } from '@semapps/ldp'; -import { Middleware } from 'moleculer'; +import type { Middleware } from 'moleculer'; const modifyActions = [ 'ldp.resource.create', diff --git a/src/middleware/packages/webacl/service.ts b/src/middleware/packages/webacl/service.ts index 4f7a463be..8718c4ebb 100644 --- a/src/middleware/packages/webacl/service.ts +++ b/src/middleware/packages/webacl/service.ts @@ -1,5 +1,5 @@ import { acl, vcard, rdfs } from '@semapps/ontologies'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import WebAclResourceService from './services/resource/index.ts'; import WebAclCacheService from './services/cache/index.ts'; import WebAclGroupService from './services/group/index.ts'; diff --git a/src/middleware/packages/webacl/services/authorizer/index.ts b/src/middleware/packages/webacl/services/authorizer/index.ts index 0948f84cf..66e12705d 100644 --- a/src/middleware/packages/webacl/services/authorizer/index.ts +++ b/src/middleware/packages/webacl/services/authorizer/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; // A acl:Write permission implicitly gives acl:Read and acl:Append permissions const modeMapping = { diff --git a/src/middleware/packages/webacl/services/cache/index.ts b/src/middleware/packages/webacl/services/cache/index.ts index 1fda30993..03b2d8f97 100644 --- a/src/middleware/packages/webacl/services/cache/index.ts +++ b/src/middleware/packages/webacl/services/cache/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const WebaclCacheSchema = { name: 'webacl.cache' as const, diff --git a/src/middleware/packages/webacl/services/group/actions/addMember.ts b/src/middleware/packages/webacl/services/group/actions/addMember.ts index 6c9daa55b..b566ec400 100644 --- a/src/middleware/packages/webacl/services/group/actions/addMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/addMember.ts @@ -1,6 +1,7 @@ import { sanitizeSparqlQuery } from '@semapps/triplestore'; import urlJoin from 'url-join'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/create.ts b/src/middleware/packages/webacl/services/group/actions/create.ts index 1537e85c2..027af2de9 100644 --- a/src/middleware/packages/webacl/services/group/actions/create.ts +++ b/src/middleware/packages/webacl/services/group/actions/create.ts @@ -2,7 +2,8 @@ import createSlug from 'speakingurl'; import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { WacPermissionObject } from '../../../types.ts'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/delete.ts b/src/middleware/packages/webacl/services/group/actions/delete.ts index e24703645..b15415ca8 100644 --- a/src/middleware/packages/webacl/services/group/actions/delete.ts +++ b/src/middleware/packages/webacl/services/group/actions/delete.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { removeAgentGroupOrAgentFromAuthorizations } from '../../../utils.ts'; import { WacPermission } from '../../../types.ts'; diff --git a/src/middleware/packages/webacl/services/group/actions/exist.ts b/src/middleware/packages/webacl/services/group/actions/exist.ts index 732088a58..f7f33edd6 100644 --- a/src/middleware/packages/webacl/services/group/actions/exist.ts +++ b/src/middleware/packages/webacl/services/group/actions/exist.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/getGroups.ts b/src/middleware/packages/webacl/services/group/actions/getGroups.ts index dacaa9a20..c271c1a5a 100644 --- a/src/middleware/packages/webacl/services/group/actions/getGroups.ts +++ b/src/middleware/packages/webacl/services/group/actions/getGroups.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const api = async function api(ctx: any) { return await ctx.call('webacl.group.getGroups', {}); diff --git a/src/middleware/packages/webacl/services/group/actions/getMembers.ts b/src/middleware/packages/webacl/services/group/actions/getMembers.ts index 30ee26a9a..81325de76 100644 --- a/src/middleware/packages/webacl/services/group/actions/getMembers.ts +++ b/src/middleware/packages/webacl/services/group/actions/getMembers.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/getUri.ts b/src/middleware/packages/webacl/services/group/actions/getUri.ts index 2294ba30c..2192d5a0a 100644 --- a/src/middleware/packages/webacl/services/group/actions/getUri.ts +++ b/src/middleware/packages/webacl/services/group/actions/getUri.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; export const action = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/group/actions/isMember.ts b/src/middleware/packages/webacl/services/group/actions/isMember.ts index 8d1a09ba5..0261fb6e3 100644 --- a/src/middleware/packages/webacl/services/group/actions/isMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/isMember.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/actions/removeMember.ts b/src/middleware/packages/webacl/services/group/actions/removeMember.ts index d06c3e683..4e019b191 100644 --- a/src/middleware/packages/webacl/services/group/actions/removeMember.ts +++ b/src/middleware/packages/webacl/services/group/actions/removeMember.ts @@ -1,6 +1,7 @@ import urlJoin from 'url-join'; import { sanitizeSparqlQuery } from '@semapps/triplestore'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const { MoleculerError } = Errors; diff --git a/src/middleware/packages/webacl/services/group/index.ts b/src/middleware/packages/webacl/services/group/index.ts index f18b8d07b..27c155c53 100644 --- a/src/middleware/packages/webacl/services/group/index.ts +++ b/src/middleware/packages/webacl/services/group/index.ts @@ -1,4 +1,4 @@ -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import * as createAction from './actions/create.ts'; import * as deleteAction from './actions/delete.ts'; import * as existAction from './actions/exist.ts'; diff --git a/src/middleware/packages/webacl/services/resource/actions/addRights.ts b/src/middleware/packages/webacl/services/resource/actions/addRights.ts index 65eb89a82..da1f89142 100644 --- a/src/middleware/packages/webacl/services/resource/actions/addRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/addRights.ts @@ -1,6 +1,7 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, diff --git a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts index aa842c748..ad9b8b9fe 100644 --- a/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts +++ b/src/middleware/packages/webacl/services/resource/actions/awaitReadRight.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { WacPermission } from '../../../types.ts'; const AwaitReadRightAction = { diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts index 9cd5d4d0e..496f0cba8 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllRights.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const DeleteAllRightsAction = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts index 265c852c8..0b8e2ecbb 100644 --- a/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/deleteAllUserRights.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const DeleteAllUserRightsAction = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/getLink.ts b/src/middleware/packages/webacl/services/resource/actions/getLink.ts index 667ad6d2b..2906b14cf 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getLink.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getLink.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri } from '../../../utils.ts'; const GetLinkAction = { diff --git a/src/middleware/packages/webacl/services/resource/actions/getRights.ts b/src/middleware/packages/webacl/services/resource/actions/getRights.ts index 5111b6f6e..87d28140e 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getRights.ts @@ -1,7 +1,8 @@ import { Writer } from 'n3'; import urlJoin from 'url-join'; import { MIME_TYPES } from '@semapps/mime-types'; -import { ActionSchema, Context, Errors } from 'moleculer'; +import { Context, Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAuthorizationNode, findParentContainers, diff --git a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts index d725e5c55..3367c0924 100644 --- a/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/getUsersWithReadRights.ts @@ -1,5 +1,5 @@ import { arrayOf } from '@semapps/ldp'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; const GetUsersWithReadRightsAction = { visibility: 'public', diff --git a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts index 4a142337e..5da5f7fbe 100644 --- a/src/middleware/packages/webacl/services/resource/actions/hasRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/hasRights.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAuthorizationNode, checkAgentPresent, diff --git a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts index 2e9093698..6b55baf69 100644 --- a/src/middleware/packages/webacl/services/resource/actions/isPublic.ts +++ b/src/middleware/packages/webacl/services/resource/actions/isPublic.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { WacPermission } from '../../../types.ts'; const IsPublicAction = { diff --git a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts index 8c4ae4a0a..1298c4405 100644 --- a/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/refreshContainersRights.ts @@ -1,5 +1,5 @@ import urlJoin from 'url-join'; -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getDatasetFromUri, Registration } from '@semapps/ldp'; import { WacPermission, WacPermissionObject } from '../../../types.ts'; diff --git a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts index 2198b0093..dd3dc12e7 100644 --- a/src/middleware/packages/webacl/services/resource/actions/removeRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/removeRights.ts @@ -1,4 +1,4 @@ -import { ActionSchema } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, processRights, FULL_AGENTCLASS_URI, FULL_FOAF_AGENT } from '../../../utils.ts'; const RemoveRightsAction = { diff --git a/src/middleware/packages/webacl/services/resource/actions/setRights.ts b/src/middleware/packages/webacl/services/resource/actions/setRights.ts index 1e81b9119..9a04fbf99 100644 --- a/src/middleware/packages/webacl/services/resource/actions/setRights.ts +++ b/src/middleware/packages/webacl/services/resource/actions/setRights.ts @@ -1,7 +1,8 @@ import { MIME_TYPES } from '@semapps/mime-types'; import urlJoin from 'url-join'; -import { ActionSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ActionSchema } from 'moleculer'; import { getAclUriFromResourceUri, convertBodyToTriples, diff --git a/src/middleware/packages/webacl/services/resource/index.ts b/src/middleware/packages/webacl/services/resource/index.ts index 46e715c5d..e3dc5c15c 100644 --- a/src/middleware/packages/webacl/services/resource/index.ts +++ b/src/middleware/packages/webacl/services/resource/index.ts @@ -1,5 +1,6 @@ import urlJoin from 'url-join'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import * as addRights from './actions/addRights.ts'; import * as getRights from './actions/getRights.ts'; import * as hasRights from './actions/hasRights.ts'; diff --git a/src/middleware/packages/webfinger/service.ts b/src/middleware/packages/webfinger/service.ts index 9d9f57044..709dfa3aa 100644 --- a/src/middleware/packages/webfinger/service.ts +++ b/src/middleware/packages/webfinger/service.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const WebfingerService = { name: 'webfinger' as const, diff --git a/src/middleware/packages/webhooks/service.ts b/src/middleware/packages/webhooks/service.ts index 0ed1216ef..f30e1bfbe 100644 --- a/src/middleware/packages/webhooks/service.ts +++ b/src/middleware/packages/webhooks/service.ts @@ -1,7 +1,8 @@ import path from 'path'; import DbService from 'moleculer-db'; import { TripleStoreAdapter } from '@semapps/triplestore'; -import { ServiceSchema, Errors } from 'moleculer'; +import { Errors } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; const { MoleculerError, ServiceSchemaError } = Errors; diff --git a/src/middleware/packages/webid/service.ts b/src/middleware/packages/webid/service.ts index 32263aeaa..b6da9d8df 100644 --- a/src/middleware/packages/webid/service.ts +++ b/src/middleware/packages/webid/service.ts @@ -1,6 +1,6 @@ import { foaf, schema } from '@semapps/ontologies'; import { ControlledResourceMixin, DereferenceMixin, waitForResource } from '@semapps/ldp'; -import { ServiceSchema } from 'moleculer'; +import type { ServiceSchema } from 'moleculer'; import getRedirectRoute from './routes/getRedirectRoute.ts'; const WebIdService = {